问题描述
我正在使用媒体记录器API记录用户屏幕上的视频,并将blob通过Web套接字发送到nodejs服务器。 Node.js服务器正在使用Blob创建一个WebM视频文件,该视频创建良好,但存在延迟,在用户单击“停止记录”按钮后,它停止了媒体记录器api,但是服务器未完成处理所有斑点(至少我认为这是正在发生的事情),然后当我检查生成的视频文件时,记录的最后几秒丢失了,我想知道是否有办法解决这个问题。任何帮助表示赞赏:)
这是将blob发送到nodejs服务器的前端代码
const startScreenCapture = async () => {
try {
let screenStream;
videoElem = document.getElementById("myscreen");
screenStream = await navigator.mediaDevices.getdisplayMedia(
displayMediaOptions
);
const recorderOptions = {
mimeType: "video/webm;codecs=vp9",videoBitsPerSecond: 3 * 1024 * 1024,};
screenMediaRecorder = new MediaRecorder(screenStream,recorderOptions);
screenMediaRecorder.start(1); // 1000 - the number of milliseconds to record into each Blob
screenMediaRecorder.ondataavailable = (event) => {
console.debug("Got blob data:",event.data);
console.log("Camera stream: ",event.data);
if (event.data && event.data.size > 0) {
socket.emit("screen_stream",event.data);
}
};
videoElem.srcObject = screenStream;
// console.log("Screen stream",screenStream);
// socket.emit("screen_stream",screenStream);
} catch (err) {
console.error("Error: " + err);
}
};
const stopCapture = (evt) => {
let tracks = videoElem.srcObject.getTracks();
tracks.forEach((track) => track.stop());
videoElem.srcObject = null;
screenMediaRecorder.stop();
socket.emit("stop_screen");
socket.close();
};
const ffmpeg2 = child_process.spawn("ffmpeg",[
"-i","-","-c:v","copy","-c:a","screen.webm",]);
socket.on("screen_stream",(msg) => {
console.log("Writing screen blob! ");
ffmpeg2.stdin.write(msg);
});
socket.on("stop_screen",() => {
console.log("Stop recording..");
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)