将视频blob保存到文件系统电子/节点js

时间:2016-10-19 17:26:11

标签: javascript node.js video electron

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

当用户点击“停止记录”按钮时,我会得到一段记录的视频。

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

fs.writeFile(localdir + '\\video.webm', videoBlob); // does not work

以下示例与我从网络摄像头获取的base64图像快照非常有效,但是我无法使用它获得的视频blob。

感谢您的赐教!

3 个答案:

答案 0 :(得分:4)

制作视频blob。 chunks是来自MediaRecorder实例ondataavailable

的event.data数组
var blob = new Blob(chunks, {
    type: 'video/webm'
})

将blob作为ArrayBuffer读取,然后使用它创建Buffer。将缓冲区保存为文件。

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)

答案 1 :(得分:0)

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

我无法让音频工作:(

答案 2 :(得分:0)

FileReader的替代方法是通过Blob的arrayBuffer方法的基于承诺的方法:

async function saveFile() {

    const blob = new Blob(chunks, {
        type: 'video/webm'
    })


    const buffer = Buffer.from( await blob.arrayBuffer() );

    fs.writeFile('video.webm', buffer, () => console.log('video saved!') );

}