systemTransform-worker.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. importScripts('libSystemTransform.js');
  2. const RECORDRTP = 0; //录制一份未经过转封装的码流原始数据,用于定位问题
  3. let dataType = 1;
  4. // 转封装库回调函数
  5. self.STCallBack = function (fileIndex,indexLen, data, dataLen)
  6. {
  7. //stFrameInfo的类型见DETAIL_FRAME_INFO
  8. let stFrameInfo = Module._GetDetialFrameInfo();
  9. let nIsMp4Index = stFrameInfo.nIsMp4Index;
  10. //console.log("FrameType is " , stFrameInfo);
  11. //console.log("nIsMp4Index is " + nIsMp4Index);
  12. var pData = null;
  13. pData = new Uint8Array(dataLen);
  14. pData.set(Module.HEAPU8.subarray(data, data + dataLen));
  15. if (dataType === 1) {
  16. if (pData[0] == 0x49 && pData[1] == 0x4d && pData[2] == 0x4b && pData[3] == 0x48) {//码流头丢掉
  17. return;
  18. }
  19. postMessage({type: "outputData", buf: pData, dType: 1});
  20. dataType = 2;
  21. } else {
  22. if (nIsMp4Index) {
  23. postMessage({type: "outputData", buf: pData, dType: 6}); //6:索引类型
  24. } else {
  25. postMessage({type: "outputData", buf: pData, dType: 2}); //2:码流
  26. }
  27. }
  28. //stFrameInfo的类型见DETAIL_FRAME_INFO
  29. //let stFrameInfo = Module._GetDetialFrameInfo();
  30. //let stFrameType = stFrameInfo.nFrameType;
  31. //let nFrameNum = stFrameInfo.nFrameNum;
  32. //let nTimeStamp = stFrameInfo.nTimeStamp;
  33. //let nIsMp4Index = stFrameInfo.nIsMp4Index;
  34. //console.log("FrameType is " + stFrameType);
  35. //console.log("nIsMp4Index is " + nIsMp4Index);
  36. }
  37. // self.Module = { memoryInitializerRequest: loadMemInitFile(), TOTAL_MEMORY: 128*1024*1024 };
  38. // importScripts('SystemTransform.js');
  39. self.Module['onRuntimeInitialized'] = function (){
  40. postMessage({type: "loaded"});
  41. }
  42. onmessage = function (e) {
  43. var data = e.data;
  44. if ("create" === data.type) {
  45. if (RECORDRTP) {
  46. postMessage({type: "created"});
  47. postMessage({type: "outputData", buf: data.buf, dType: 1});
  48. } else {
  49. var iHeadLen = data.len;
  50. var pHead = Module._malloc(iHeadLen);
  51. self.writeArrayToMemory(new Uint8Array(data.buf), pHead);
  52. var iTransType = data.packType;//目标格式
  53. var iRet = Module._CreatHandle(pHead, iTransType, 4096);
  54. if (iRet != 0) {
  55. console.log("_CreatHandle failed!" + iRet);
  56. } else {
  57. iRet = Module._SysTransRegisterDataCallBack();
  58. if(iRet != 0)
  59. {
  60. console.log("_SysTransRegisterDataCallBack Failed:" + iRet);
  61. }
  62. iRet = Module._SysTransStart(null, null);
  63. if(iRet != 0)
  64. {
  65. console.log("_SysTransStart Failed:" + iRet);
  66. }
  67. postMessage({type: "created"});
  68. }
  69. }
  70. } else if ("inputData" === data.type) {
  71. if (RECORDRTP) {
  72. var aFileData = new Uint8Array(data.buf); // 拷贝一份
  73. var iBufferLen = aFileData.length;
  74. var szBufferLen = iBufferLen.toString(16);
  75. if (szBufferLen.length === 1) {
  76. szBufferLen = "000" + szBufferLen;
  77. } else if (szBufferLen.length === 2) {
  78. szBufferLen = "00" + szBufferLen;
  79. } else if (szBufferLen.length === 3) {
  80. szBufferLen = "0" + szBufferLen;
  81. }
  82. var aData = [0, 0, parseInt(szBufferLen.substring(0, 2), 16), parseInt(szBufferLen.substring(2, 4), 16)];
  83. for(var iIndex = 0, iDataLength = aFileData.length; iIndex < iDataLength; iIndex++) {
  84. aData[iIndex + 4] = aFileData[iIndex]
  85. }
  86. var dataUint8 = new Uint8Array(aData);
  87. postMessage({type: "outputData", buf: dataUint8.buffer, dType: 2});
  88. } else {
  89. let pInputDataBuf = Module._malloc(data.len);
  90. var idataLen = data.len;
  91. self.writeArrayToMemory(new Uint8Array(data.buf), pInputDataBuf);
  92. // 输入数据,每次最多2m
  93. let pp = Module._SysTransInputData(0, pInputDataBuf, idataLen);
  94. if(pp != 0) {
  95. //console.log("InputData Failed:" + pp);
  96. }
  97. Module._free(pInputDataBuf);
  98. }
  99. } else if ("release" === data.type) {
  100. var iRet = Module._SysTransStop();
  101. if (iRet != 0) {
  102. console.log("_SysTransStop Failed:", iRet);
  103. }
  104. Module._SysTransRelease();
  105. if (iRet != 0) {
  106. console.log("_SysTransRelease Failed:", iRet);
  107. }
  108. close();
  109. }
  110. };