Javascript 将视频blob保存到文件系统electron/node js
在我的electron应用程序中,用户可以使用MediaRecorder API从网络摄像头录制视频 当用户点击“停止录制”按钮时,我看到一团录制的视频 我想做的是将此blob转换为真正的webm视频,并将其写入用户的文件系统,例如: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图像快照,但我无法使它与我获取的视频块一起工作 谢谢你的启发 您需要
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这是一个边缘案例。无论如何,我很高兴看到您的解决方案