在我的电子应用程序中,用户可以使用MediaRecorder API从他们的网络摄像头录制视频。
当用户点击“停止记录”按钮时,我会得到一段记录的视频。
我想要做的是将此blob转换为真实的webm视频,并将其写入用户的文件系统,例如:
fs.writeFile(localdir + '\\video.webm', videoBlob); // does not work
以下示例与我从网络摄像头获取的base64图像快照非常有效,但是我无法使用它获得的视频blob。
感谢您的赐教!
答案 0 :(得分:4)
制作视频blob。 chunks
是来自MediaRecorder
实例ondataavailable
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!') );
}