问题描述:
chrome.tabCapture.capture将生成一个流,我使用MediaRecorder进行操作。 但是MediaRecorder仅支持webm视频格式。 Webm视频格式将压缩我录制的视频
如果我记录了选项卡页,但是10秒钟没有任何变化(包括没有鼠标移动,没有声音),则整个网页仍然静止。然后,最终的webm视频文件将只有一帧,甚至没有一秒钟。
有什么办法解决这个问题?因为我不想压缩视频
核心代码:
let mediaRecorder = '';
chrome.tabCapture.capture(captureConfig, stream => {
if (stream === null) {
chrome.tabs.sendMessage(id, {
error: chrome.runtime.lastError
});
return false;
}
const recordedBlobs: BlobPart[] = [];
mediaRecorder = new MediaRecorder(stream, {
videoBitsPerSecond: 2500000,
mimeType: 'video/webm;codecs=vp9'
});
mediaRecorder.ondataavailable = event => {
if (event.data && event.data.size > 0) {
recordedBlobs.push(event.data);
}
};
mediaRecorder.onstop = () => {
const superBuffer = new Blob(recordedBlobs, {
type: 'video/webm'
});
const link = document.createElement('a');
link.href = URL.createObjectURL(superBuffer);
link.setAttribute('download', `${filename}.webm`);
link.click();
};
mediaRecorder.start();
});
const stop = () => {
mediaRecorder.stop();
mediaRecorder.stream.getTracks().forEach(track => {
track.stop();
});
}
我正在使用铬,只要可以解决此问题,就可以用铬代替。 我也尝试过ffmpeg,但仍然不能,那些丢失的帧似乎无法恢复。
答案 0 :(得分:0)
我遇到了类似的问题,添加了videoConstraints
帮助。如果该解决方案对您不起作用,请告诉我,我会尽力解决这个问题。
P.S。 startStream
是一个回调函数。
chrome.tabCapture.capture({
audio: false,
video: true,
videoConstraints: {
mandatory: {
chromeMediaSource: 'tab',
minWidth: 640,
maxWidth: 640,
minHeight: 420,
maxHeight: 420
}
}
}, startStream )