Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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 将视频blob保存到文件系统electron/node js_Javascript_Node.js_Video_Electron - Fatal编程技术网

Javascript 将视频blob保存到文件系统electron/node js

Javascript 将视频blob保存到文件系统electron/node js,javascript,node.js,video,electron,Javascript,Node.js,Video,Electron,在我的electron应用程序中,用户可以使用MediaRecorder API从网络摄像头录制视频 当用户点击“停止录制”按钮时,我看到一团录制的视频 我想做的是将此blob转换为真正的webm视频,并将其写入用户的文件系统,例如: fs.writeFile(localdir + '\\video.webm', videoBlob); // does not work 下面的示例可以很好地处理我从网络摄像头获取的base64图像快照,但我无法使它与我获取的视频块一起工作 谢谢你的启发 您需要

在我的electron应用程序中,用户可以使用MediaRecorder API从网络摄像头录制视频

当用户点击“停止录制”按钮时,我看到一团录制的视频

我想做的是将此blob转换为真正的webm视频,并将其写入用户的文件系统,例如:

fs.writeFile(localdir + '\\video.webm', videoBlob); // does not work
下面的示例可以很好地处理我从网络摄像头获取的base64图像快照,但我无法使它与我获取的视频块一起工作


谢谢你的启发

您需要使用FileReader将blob内容作为数组读取,然后创建一个缓冲区实例


我无法让音频正常工作:(

创建一个视频块。
是一个事件数组。数据来自
MediaRecorder
实例的
ondataavailable

var blob = new Blob(chunks, {
    type: 'video/webm'
})
将blob读取为
阵列缓冲
,并使用它创建
缓冲
。将缓冲保存为文件

var reader = new FileReader()
reader.onload = function(){
    var buffer = new Buffer(reader.result)
    fs.writeFile(path, buffer, {}, (err, res) => {
        if(err){
            console.error(err)
            return
        }
        console.log('video saved')
    })
}
reader.readAsArrayBuffer(blob)

FileReader
的另一种选择是通过Blob的
arrayBuffer
方法实现基于承诺的方法:

异步函数saveFile(){
const blob=新blob(块{
键入:“视频/webm”
})
const buffer=buffer.from(wait blob.arrayBuffer());
fs.writeFile('video.webm',buffer,()=>console.log('video saved!'));
}

我还必须在这里投反对票,因为虽然这确实是一个显而易见的解决方案,但它会强制将Blob数据读入内存,这在您有几个小时的视频时可能并不温和(Blob可能自行驻留在内存中,也可能不驻留在内存中,这取决于浏览器的决定方式,如果浏览器不这样做,则会将其放入RAM中)。@JohnWeisz IMO这是一个边缘案例。无论如何,我很高兴看到您的解决方案