我正在创建一个电子应用程序,在该应用程序中,我在录制会话结束时从网络摄像头和桌面录制数据,我想将数据保存到后台的文件中。我不知道如何将数据从斑点直接写入文件。有什么建议么?以下是我目前对Mediarecord停止活动的处理。
this.mediaRecorder.onstop = (e) => {
var blob = new Blob(this.chunks,
{ 'type' : 'video/mp4; codecs=H.264' });
var fs = require('fs');
var fr = new FileReader();
var data = null;
fr.onload = () => {
data = fr.result;
fs.writeFile("test.mp4", data, err => {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
};
fr.readAsArrayBuffer(blob);
}
您可以使用FileReader
和Buffer
。
在渲染器过程中,将事件发送到主进程以使用缓冲区保存文件:
function saveBlob(blob) {
let reader = new FileReader()
reader.onload = function() {
if (reader.readyState == 2) {
var buffer = new Buffer(reader.result)
ipcRenderer.send(SAVE_FILE, fileName, buffer)
console.log(`Saving ${JSON.stringify({ fileName, size: blob.size })}`)
}
}
reader.readAsArrayBuffer(blob)
}
获取确认:
ipcRenderer.on(SAVED_FILE, (event, path) => {
console.log("Saved file " + path)
})
(save_file和saved_file是包含事件名称的静态字符串(
在主要过程中:
ipcMain.on(SAVE_FILE, (event, path, buffer) => {
outputFile(path, buffer, err => {
if (err) {
event.sender.send(ERROR, err.message)
} else {
event.sender.send(SAVED_FILE, path)
}
})
})
outputfile来自'fs-extra'
在主过程中处理节点操作是优选的。请参阅电子安全建议。
如果您确实想使用主进程,则可以使用"电子记录"来创建背景过程来编写文件。此外,您可以在后台过程中调用ffmpeg
,以将文件压缩/编码不同的格式。