123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- var isFinish = false;
- var decodeCount = 0;
- var h264Queue = [];
- var isFirst = true;
- var ret = ''
- var parameters = GetRequest();
- var videoWidth = parameters['width'];
- var videoHeight = parameters['height'];
- self.Module = {
- onRuntimeInitialized: function () {
- ret = Module._openDecoder(videoWidth, videoHeight);
- 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 size = videoWidth * videoHeight *3;
- var retPtr = Module._malloc(size); //接收的数据
- 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(size);
- 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();
- }
- // 获取url中"?"符后的字串
- function GetRequest() {
- var url = location.search;
- var obj = new Object();
- if (url.indexOf("?") != -1) {
- var str = url.substring(1);
- strs = str.split("&");
- for (var i = 0; i < strs.length; i++) {
- obj[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
- }
- }
- return obj;
- }
|