123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <html>
- <head>
- <link rel="shortcut icon" href="#">
- </head>
-
- <canvas id="playCanvas" width="450" height="800"></canvas>
-
- <script type="text/javascript" src="pcm-player.js"></script>
- <script type="text/javascript" src="webgl.js"></script>
- <script type="text/javascript" src="helper.js"></script>
- <script src="https://cdn.bootcss.com/vConsole/3.2.0/vconsole.min.js"></script>
- <script>
- var decodeCount = 1;
- var isFinish = false;
- var socketURL = "ws://192.168.11.66:9101";
-
- var player = new PCMPlayer({
- encoding: '16bitInt',
- channels: 2,
- sampleRate: 44100,
- flushingTime: 22,
- debug:false
- });
-
- this.canvas = document.getElementById("playCanvas");
- var webglPlayer = new WebGLPlayer(this.canvas, {
- preserveDrawingBuffer: false
- });
-
- let vConsole = new VConsole();
-
- Module = {};
- Module.onRuntimeInitialized = function()
- {
- console.log("Wasm 加载成功!")
- isFinish = true;
-
- var ret = Module._openDecoder(720, 1280);
- if(!ret)
- {
- console.log("打开编码器成功");
- }
- }
-
- function closeDecoder()
- {
- Module._destroyDecoder();
- }
-
- function decodeH264(data)
- {
- console.log("调用h264");
- var retPtr = Module._malloc(2457600);//接收的数据
- var inputPtr = Module._malloc(data.length);//输入数据
-
- for( 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)
- {
- console.log("解码成功 %d, 耗时 %d ms", ret, new Date().getTime() - time);
- }
- else
- {
- console.log("解码识别 %d", ret);
- }
-
- var yuvData = new Uint8Array(2457600);
- for(i = 0;i < yuvData.length;i++)
- {
- yuvData[i] = Module.HEAPU8[(retPtr)+i];
- }
- webglPlayer.renderFrame(yuvData, 720, 1280, 720*1280, (720/2)*(1280/2));
- Module._free(inputPtr);
- Module._free(retPtr);
- }
-
- function decodeAAC(data)
- {
- var retPtr = Module._malloc(4 * 5 * 1024);//接收的数据
- var inputPtr = Module._malloc(4 * data.length);//输入数据
-
- for( i =0;i < data.length;i++)
- {
- Module.HEAPU8[(inputPtr)+i] = data[i];//转换为堆数据
- }
-
- var pcmLen = Module._feedData(retPtr, inputPtr, data.length);
-
- if(pcmLen > 0)
- {
- //console.log("%d帧 aac 解码成功, %d", decodeCount, pcmLen);
- var pcmData = new Uint8Array(pcmLen);
- for(i = 0;i < pcmLen;i++)
- {
- pcmData[i] = Module.HEAPU8[(retPtr)+i]
- }
-
- player.feed(pcmData);
- }
- else
- {
- console.log("%d帧 aac 解码失败, %d", decodeCount, pcmLen);
- }
-
- decodeCount++;
- Module._free(inputPtr);
- Module._free(retPtr);
- }
-
- function closeDecoder()
- {
-
- }
-
- var ws = new WebSocket(socketURL);
- ws.binaryType = 'arraybuffer';
-
- ws.addEventListener('open', function (event)
- {
- console.log("发送配置帧");
- ws.send(ConfigChannel("RK3923C1201900139"));
- });
-
-
- ws.addEventListener('message',function(event)
- {
- var input = new Uint8Array(event.data);
- PrintArry(input);
-
- if(input[0] == 0xff)
- {
- //console.log("音频数据");
- if(isFinish)
- {
- var time = new Date().getTime();
- //decodeAAC(input);
- //console.log("音频解码耗时:%d ms", new Date().getTime() - time);
- }
-
- }
- else
- {
- if(isFinish)
- {
- decodeH264(input);
- }
-
- //console.log("视频数据");
- }
-
- }
- );
-
- console.log("-----Hello Moile----");
- </script>
- <script type="text/javascript" src="ffmpeghelper.js"></script>
- </html>
|