javascript - MediaRecorder 无故改变大小

标签 javascript firefox canvas webrtc mediarecorder-api

我正在使用 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/

相关文章:

javascript - style.display ='none' 不适用于 chrome 中的选项标签,但它适用于 firefox

javascript - Chrome 在 Canvas 元素上以不同方式转换文本。为什么?

java - SWT ScrolledComposite 在 32768 像素后截断 canvas 生成的图像

javascript - html5 : canvas. getImageData 无法正常工作 - 为什么?

javascript - Three.js:在相机和控件之间切换

python - 使用 Python 进行网页抓取

javascript - 原型(prototype) - 带有 id 的元素中带有 styleclass 的元素?

asp.net - 如何使用 ASP.NET 查找用户的地理位置?

javascript - 图像作为单选按钮

javascript - 如何访问 *ngFor 中定义的变量?