index.html 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <html>
  2. <head>
  3. <link rel="shortcut icon" href="#">
  4. </head>
  5. <canvas id="playCanvas" width="450" height="800"></canvas>
  6. <script type="text/javascript" src="pcm-player.js"></script>
  7. <script type="text/javascript" src="webgl.js"></script>
  8. <script type="text/javascript" src="helper.js"></script>
  9. <script src="https://cdn.bootcss.com/vConsole/3.2.0/vconsole.min.js"></script>
  10. <script>
  11. var decodeCount = 1;
  12. var isFinish = false;
  13. var socketURL = "ws://192.168.11.66:9101";
  14. var player = new PCMPlayer({
  15. encoding: '16bitInt',
  16. channels: 2,
  17. sampleRate: 44100,
  18. flushingTime: 22,
  19. debug:false
  20. });
  21. this.canvas = document.getElementById("playCanvas");
  22. var webglPlayer = new WebGLPlayer(this.canvas, {
  23. preserveDrawingBuffer: false
  24. });
  25. let vConsole = new VConsole();
  26. Module = {};
  27. Module.onRuntimeInitialized = function()
  28. {
  29. console.log("Wasm 加载成功!")
  30. isFinish = true;
  31. var ret = Module._openDecoder(720, 1280);
  32. if(!ret)
  33. {
  34. console.log("打开编码器成功");
  35. }
  36. }
  37. function closeDecoder()
  38. {
  39. Module._destroyDecoder();
  40. }
  41. function decodeH264(data)
  42. {
  43. console.log("调用h264");
  44. var retPtr = Module._malloc(2457600);//接收的数据
  45. var inputPtr = Module._malloc(data.length);//输入数据
  46. for( i =0;i < data.length;i++)
  47. {
  48. Module.HEAPU8[(inputPtr)+i] = data[i];//转换为堆数据
  49. }
  50. var time = new Date().getTime();
  51. var ret = Module._feedData(inputPtr, data.length, retPtr);
  52. if(ret == 0)
  53. {
  54. console.log("解码成功 %d, 耗时 %d ms", ret, new Date().getTime() - time);
  55. }
  56. else
  57. {
  58. console.log("解码识别 %d", ret);
  59. }
  60. var yuvData = new Uint8Array(2457600);
  61. for(i = 0;i < yuvData.length;i++)
  62. {
  63. yuvData[i] = Module.HEAPU8[(retPtr)+i];
  64. }
  65. webglPlayer.renderFrame(yuvData, 720, 1280, 720*1280, (720/2)*(1280/2));
  66. Module._free(inputPtr);
  67. Module._free(retPtr);
  68. }
  69. function decodeAAC(data)
  70. {
  71. var retPtr = Module._malloc(4 * 5 * 1024);//接收的数据
  72. var inputPtr = Module._malloc(4 * data.length);//输入数据
  73. for( i =0;i < data.length;i++)
  74. {
  75. Module.HEAPU8[(inputPtr)+i] = data[i];//转换为堆数据
  76. }
  77. var pcmLen = Module._feedData(retPtr, inputPtr, data.length);
  78. if(pcmLen > 0)
  79. {
  80. //console.log("%d帧 aac 解码成功, %d", decodeCount, pcmLen);
  81. var pcmData = new Uint8Array(pcmLen);
  82. for(i = 0;i < pcmLen;i++)
  83. {
  84. pcmData[i] = Module.HEAPU8[(retPtr)+i]
  85. }
  86. player.feed(pcmData);
  87. }
  88. else
  89. {
  90. console.log("%d帧 aac 解码失败, %d", decodeCount, pcmLen);
  91. }
  92. decodeCount++;
  93. Module._free(inputPtr);
  94. Module._free(retPtr);
  95. }
  96. function closeDecoder()
  97. {
  98. }
  99. var ws = new WebSocket(socketURL);
  100. ws.binaryType = 'arraybuffer';
  101. ws.addEventListener('open', function (event)
  102. {
  103. console.log("发送配置帧");
  104. ws.send(ConfigChannel("RK3923C1201900139"));
  105. });
  106. ws.addEventListener('message',function(event)
  107. {
  108. var input = new Uint8Array(event.data);
  109. PrintArry(input);
  110. if(input[0] == 0xff)
  111. {
  112. //console.log("音频数据");
  113. if(isFinish)
  114. {
  115. var time = new Date().getTime();
  116. //decodeAAC(input);
  117. //console.log("音频解码耗时:%d ms", new Date().getTime() - time);
  118. }
  119. }
  120. else
  121. {
  122. if(isFinish)
  123. {
  124. decodeH264(input);
  125. }
  126. //console.log("视频数据");
  127. }
  128. }
  129. );
  130. console.log("-----Hello Moile----");
  131. </script>
  132. <script type="text/javascript" src="ffmpeghelper.js"></script>
  133. </html>