我正在使用 MediaRecorder API 以及 Canvas captureStream在浏览器中对 Canvas 的 VP8 视频流进行编码的方法。此数据通过二进制网络套接字发送到 FFmpeg。
var outputCaptureStream = $('canvas')[0].captureStream(30);
var mediaRecoder = new MediaRecoder(outputCaptureStream, {
mimeType: 'video/webm'
});
mediaRecorder.ondataavailable = function (e) {
ffmpegStdin.write(e.data);
}
mediaRecoder.start(1000);
出于某种原因,流似乎随机切换到分辨率较低的中流。 FFmpeg 对此不满意:
Input stream #0:0 frame changed from size:1280x720 fmt:yuv420p to size:1024x576 fmt:yuv420p
[vp8 @ 0x2a02c00] Upscaling is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented. [vp8 @ 0x2a02c00] If you want to help, upload a sample of this file to ftp://upload.ffmpeg.org/incoming/ and contact the ffmpeg-devel mailing list. (ffmpeg-devel@ffmpeg.org)
我怀疑它与 CPU 使用率过高有关,并且 Firefox 正试图通过缩小视频来提供帮助。我的问题:
- Firefox 会即时缩小视频吗?
- 如果是这样,什么条件会导致这种情况发生? (CPU 负载?流背压?)
- 是否可以阻止 Firefox 这样做?
- 对于我遗漏的这种行为是否有不同的解释?
最佳答案
如果 Firefox 检测到系统的 CPU 重载,它将重新缩放(缩小)WebRTC/getUserMedia 视频。 about:config 中有一些 prefs 可以控制这种行为,但它不能通过 JS 控制。
您可以通过设置禁用该功能
media.navigator.load_adapt=false
您可以查看其他 media.navigator.load_adapt.* 标志以控制行为。默认情况下,如果 CPU 占用率超过 90% 持续 3 秒,您将进行缩减。
关于javascript - MediaRecorder 无故改变大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209608/