1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- var isFinish = false;
- var decodeCount = 0;
- var h264Queue = [];
- var isFirst = true;
- var ret = ''
- self.Module = {
- onRuntimeInitialized: function () {
- ret = Module._openDecoder(720, 1280);
- if (!ret) {
- isFinish = true;
- }
- }
- };
- self.importScripts("ffmpeghelper.js");
- self.addEventListener('message', function (e) {
- h264Queue.push(e.data);
- }, false);
- function PrintfLog(str) {
- var curTime = new Date().getTime();
- var objData = {
- cmd: 0,
- data: str,
- time: curTime
- };
- self.postMessage(objData);
- }
- setInterval(
- function () {
- if (h264Queue.length > 0 && isFinish) {
- if (isFirst) {
- PrintfLog("当前队列大小 :" + h264Queue.length);
- isFirst = false;
- }
- if (h264Queue.length > 10 && isFinish) {
- PrintfLog("解不过来 " + h264Queue.length);
- return;
- }
- decodeH264(h264Queue.shift());
- }
- }, 1);
- function decodeH264(data) {
- var retPtr = Module._malloc(2457600); //接收的数据
- var inputPtr = Module._malloc(data.length); //输入数据
- for (var i = 0; i < data.length; i++) {
- Module.HEAPU8[(inputPtr) + i] = data[i]; //转换为堆数据
- }
- var time = new Date().getTime();
- var ret = Module._feedData(inputPtr, data.length, retPtr);
- if (ret >= 0) {
- if (decodeCount > 50) {
- var curCost = new Date().getTime() - time;
- PrintfLog("解码耗时 " + curCost + " ms");
- decodeCount = 0;
- }
- decodeCount++;
- }
- var yuvData = new Uint8Array(2457600);
- for (var i = 0; i < yuvData.length; i++) {
- yuvData[i] = Module.HEAPU8[(retPtr) + i];
- }
- var curTime = new Date().getTime();
- var objData = {
- cmd: 1,
- data: yuvData,
- time: curTime
- };
- self.postMessage(objData);
- Module._free(inputPtr);
- Module._free(retPtr);
- }
- function closeDecoder() {
- Module._destroyDecoder();
- }
|