|
|
@@ -3,86 +3,104 @@ 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(720, 1280);
|
|
|
- if (!ret) {
|
|
|
- isFinish = true;
|
|
|
- }
|
|
|
- }
|
|
|
+ onRuntimeInitialized: function () {
|
|
|
+ ret = Module._openDecoder(videoWidth, videoHeight);
|
|
|
+ if (!ret) {
|
|
|
+ isFinish = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
self.importScripts("ffmpeghelper.js");
|
|
|
|
|
|
self.addEventListener('message', function (e) {
|
|
|
- h264Queue.push(e.data);
|
|
|
+ h264Queue.push(e.data);
|
|
|
}, false);
|
|
|
|
|
|
function PrintfLog(str) {
|
|
|
- var curTime = new Date().getTime();
|
|
|
- var objData = {
|
|
|
- cmd: 0,
|
|
|
- data: str,
|
|
|
- time: curTime
|
|
|
- };
|
|
|
- self.postMessage(objData);
|
|
|
+ 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;
|
|
|
- }
|
|
|
+ function () {
|
|
|
+ if (h264Queue.length > 0 && isFinish) {
|
|
|
+ if (isFirst) {
|
|
|
+ PrintfLog("当前队列大小 :" + h264Queue.length);
|
|
|
+ isFirst = false;
|
|
|
+ }
|
|
|
|
|
|
- if (h264Queue.length > 10 && isFinish) {
|
|
|
- PrintfLog("解不过来 " + h264Queue.length);
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (h264Queue.length > 10 && isFinish) {
|
|
|
+ PrintfLog("解不过来 " + h264Queue.length);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- decodeH264(h264Queue.shift());
|
|
|
- }
|
|
|
- }, 1);
|
|
|
+ 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);
|
|
|
+ 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();
|
|
|
+ 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;
|
|
|
+}
|