120 lines
4.9 KiB
Vue
120 lines
4.9 KiB
Vue
importScripts('libSystemTransform.js');
|
||
const RECORDRTP = 0; //录制一份未经过转封装的码流原始数据,用于定位问题
|
||
let dataType = 1;
|
||
|
||
// 转封装库回调函数
|
||
self.STCallBack = function (fileIndex,indexLen, data, dataLen)
|
||
{
|
||
//stFrameInfo的类型见DETAIL_FRAME_INFO
|
||
let stFrameInfo = Module._GetDetialFrameInfo();
|
||
let nIsMp4Index = stFrameInfo.nIsMp4Index;
|
||
//console.log("FrameType is " , stFrameInfo);
|
||
//console.log("nIsMp4Index is " + nIsMp4Index);
|
||
//debugger
|
||
var pData = null;
|
||
pData = new Uint8Array(dataLen);
|
||
pData.set(Module.HEAPU8.subarray(data, data + dataLen));
|
||
if (dataType === 1) {
|
||
if (pData[0] == 0x49 && pData[1] == 0x4d && pData[2] == 0x4b && pData[3] == 0x48) {//码流头丢掉
|
||
return;
|
||
}
|
||
postMessage({type: "outputData", buf: pData, dType: 1});
|
||
dataType = 2;
|
||
} else {
|
||
if (nIsMp4Index) {
|
||
postMessage({type: "outputData", buf: pData, dType: 6}); //6:索引类型
|
||
} else {
|
||
postMessage({type: "outputData", buf: pData, dType: 2}); //2:码流
|
||
}
|
||
}
|
||
|
||
//stFrameInfo的类型见DETAIL_FRAME_INFO
|
||
//let stFrameInfo = Module._GetDetialFrameInfo();
|
||
//let stFrameType = stFrameInfo.nFrameType;
|
||
//let nFrameNum = stFrameInfo.nFrameNum;
|
||
//let nTimeStamp = stFrameInfo.nTimeStamp;
|
||
//let nIsMp4Index = stFrameInfo.nIsMp4Index;
|
||
|
||
//console.log("FrameType is " + stFrameType);
|
||
//console.log("nIsMp4Index is " + nIsMp4Index);
|
||
|
||
}
|
||
|
||
// self.Module = { memoryInitializerRequest: loadMemInitFile(), TOTAL_MEMORY: 128*1024*1024 };
|
||
// importScripts('SystemTransform.js');
|
||
|
||
self.Module['onRuntimeInitialized'] = function (){
|
||
postMessage({type: "loaded"});
|
||
}
|
||
onmessage = function (e) {
|
||
var data = e.data;
|
||
if ("create" === data.type) {
|
||
if (RECORDRTP) {
|
||
postMessage({type: "created"});
|
||
postMessage({type: "outputData", buf: data.buf, dType: 1});
|
||
} else {
|
||
var iHeadLen = data.len;
|
||
var pHead = Module._malloc(iHeadLen);
|
||
|
||
self.writeArrayToMemory(new Uint8Array(data.buf), pHead);
|
||
var iTransType = data.packType;//目标格式
|
||
var iRet = Module._CreatHandle(pHead, iTransType, 4096);
|
||
if (iRet != 0) {
|
||
console.log("_CreatHandle failed!" + iRet);
|
||
} else {
|
||
iRet = Module._SysTransRegisterDataCallBack();
|
||
if(iRet != 0)
|
||
{
|
||
console.log("_SysTransRegisterDataCallBack Failed:" + iRet);
|
||
}
|
||
|
||
iRet = Module._SysTransStart(null, null);
|
||
if(iRet != 0)
|
||
{
|
||
console.log("_SysTransStart Failed:" + iRet);
|
||
}
|
||
postMessage({type: "created"});
|
||
}
|
||
}
|
||
|
||
} else if ("inputData" === data.type) {
|
||
if (RECORDRTP) {
|
||
var aFileData = new Uint8Array(data.buf); // 拷贝一份
|
||
var iBufferLen = aFileData.length;
|
||
var szBufferLen = iBufferLen.toString(16);
|
||
if (szBufferLen.length === 1) {
|
||
szBufferLen = "000" + szBufferLen;
|
||
} else if (szBufferLen.length === 2) {
|
||
szBufferLen = "00" + szBufferLen;
|
||
} else if (szBufferLen.length === 3) {
|
||
szBufferLen = "0" + szBufferLen;
|
||
}
|
||
var aData = [0, 0, parseInt(szBufferLen.substring(0, 2), 16), parseInt(szBufferLen.substring(2, 4), 16)];
|
||
for(var iIndex = 0, iDataLength = aFileData.length; iIndex < iDataLength; iIndex++) {
|
||
aData[iIndex + 4] = aFileData[iIndex]
|
||
}
|
||
var dataUint8 = new Uint8Array(aData);
|
||
postMessage({type: "outputData", buf: dataUint8.buffer, dType: 2});
|
||
} else {
|
||
let pInputDataBuf = Module._malloc(data.len);
|
||
var idataLen = data.len;
|
||
self.writeArrayToMemory(new Uint8Array(data.buf), pInputDataBuf);
|
||
// 输入数据,每次最多2m
|
||
let pp = Module._SysTransInputData(0, pInputDataBuf, idataLen);
|
||
if(pp != 0) {
|
||
//console.log("InputData Failed:" + pp);
|
||
}
|
||
Module._free(pInputDataBuf);
|
||
}
|
||
} else if ("release" === data.type) {
|
||
var iRet = Module._SysTransStop();
|
||
if (iRet != 0) {
|
||
console.log("_SysTransStop Failed:", iRet);
|
||
}
|
||
Module._SysTransRelease();
|
||
if (iRet != 0) {
|
||
console.log("_SysTransRelease Failed:", iRet);
|
||
}
|
||
close();
|
||
}
|
||
}; |