Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从ArrayBuffer系列创建webm视频blob_Javascript_Html5 Canvas_Html5 Video_Webm - Fatal编程技术网

Javascript 从ArrayBuffer系列创建webm视频blob

Javascript 从ArrayBuffer系列创建webm视频blob,javascript,html5-canvas,html5-video,webm,Javascript,Html5 Canvas,Html5 Video,Webm,以下是我捕获视频流并编码到webm的代码(使用): 下面是听众: let queue = []; worker.onmessage = ev => { if (!ev.data) { console.log('End of stream'); } if (ev.data instanceof ArrayBuffer && ev.data.byteLength !== undefined) { const arrayBu

以下是我捕获视频流并编码到webm的代码(使用):

下面是听众:

let queue = [];
worker.onmessage = ev => {
    if (!ev.data) {
        console.log('End of stream');
    }
    if (ev.data instanceof ArrayBuffer && ev.data.byteLength !== undefined) {
        const arrayBuffer = ev.data;
        queue.push(arrayBuffer);
    }
};
最后制作视频:

setInterval(function () {
   let webm = buildWebmVideoFromArrayOfBuffer();   
   queue = [];
   socket.send(webm);      
}, 500);

如果不使用
MediaSource
如何从这个缓冲区阵列构建webm视频?我的目标是每500毫秒构建一个webm视频。

为什么不直接使用MediaRecorder?另外,您是否正在寻找一系列可独立播放的500毫秒视频?为此,您需要一种方法将GOP长度设置为15,这是非常低且根本没有效率的。我也不认为你可以用MediaRecorder设置GOP的长度。也许你可以用这个WASM模块。。。这就是你使用它的原因吗?我现在正在使用MJPEG/AVI容器进行直播,使用我的自定义编码器/解码器,工作良好、快速和实时,唯一的问题是JPEG的大小随着时间的推移会消耗更多的带宽,所以我想先使用WEBM进行编码,然后再使用相同的方法通过网络传输,要创建500毫秒的区块视频,即每500毫秒15帧,这对于30 FPS来说是很好的。听起来你不需要单独播放区块。您可以单独存储初始化段。为什么不使用MediaRecorder?。。。特别是当你关心表现的时候。而且,如果你真的需要一个GOP大小为15(我假设,等待时间)为什么不考虑整个WebRTC栈,并获得所有这些优化是免费的?是的,我已经考虑WEBRTC,但在这个阶段,我必须先做这种方法。当你说使用
MediaRecorder
时,你是说
MediaRecorder
可以录制500毫秒的Webm视频,并且可以单独播放?我试过了,但输出与webm wasm相同,它是数组缓冲区。您没有澄清为什么希望单独播放它们。。。这就是你的要求,我不明白。你为什么不直接用MediaRecorder呢?另外,您是否正在寻找一系列可独立播放的500毫秒视频?为此,您需要一种方法将GOP长度设置为15,这是非常低且根本没有效率的。我也不认为你可以用MediaRecorder设置GOP的长度。也许你可以用这个WASM模块。。。这就是你使用它的原因吗?我现在正在使用MJPEG/AVI容器进行直播,使用我的自定义编码器/解码器,工作良好、快速和实时,唯一的问题是JPEG的大小随着时间的推移会消耗更多的带宽,所以我想先使用WEBM进行编码,然后再使用相同的方法通过网络传输,要创建500毫秒的区块视频,即每500毫秒15帧,这对于30 FPS来说是很好的。听起来你不需要单独播放区块。您可以单独存储初始化段。为什么不使用MediaRecorder?。。。特别是当你关心表现的时候。而且,如果你真的需要一个GOP大小为15(我假设,等待时间)为什么不考虑整个WebRTC栈,并获得所有这些优化是免费的?是的,我已经考虑WEBRTC,但在这个阶段,我必须先做这种方法。当你说使用
MediaRecorder
时,你是说
MediaRecorder
可以录制500毫秒的Webm视频,并且可以单独播放?我试过了,但输出与webm wasm相同,它是数组缓冲区。您没有澄清为什么希望单独播放它们。。。这是你的要求,我不明白。
setInterval(function () {
   let webm = buildWebmVideoFromArrayOfBuffer();   
   queue = [];
   socket.send(webm);      
}, 500);