【问题标题】:MediaRecorder changes size without provocationMediaRecorder 在没有挑衅的情况下更改大小
【发布时间】:2016-05-14 13:43:29
【问题描述】:

我正在使用MediaRecorder API 和Canvas captureStream 方法在浏览器中对画布的VP8 视频流进行编码。该数据通过二进制 web socket 发送到 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 对此并不满意:

输入流 #0:0 帧从 size:1280x720 fmt:yuv420p 更改为 size:1024x576 fmt:yuv420p

[vp8 @ 0x2a02c00] 未实现升级。将您的 FFmpeg 版本更新到 Git 的最新版本。如果问题仍然存在,则意味着您的文件具有尚未实现的功能。 [vp8 @ 0x2a02c00] 如果您想提供帮助,请将此文件的示例上传到 ftp://upload.ffmpeg.org/incoming/ 并联系 ffmpeg-devel 邮件列表。 (ffmpeg-devel@ffmpeg.org)

我怀疑这与 CPU 使用率过高有关,并且 Firefox 试图通过缩小视频来提供帮助。我的问题:

  • Firefox 是否会即时缩小视频?
  • 如果是这样,什么条件会导致这种情况发生? (CPU 负载?流背压?)
  • 是否可以阻止 Firefox 这样做?
  • 对于我遗漏的这种行为是否有不同的解释?

【问题讨论】:

  • 画布大小是否固定?您是否将相机流传输到画布中?
  • @mido 画布大小完全固定。我正在 requestAnimationFrame 上绘制帧,通过此处的“更好的改进方法”限制为 30FPS:codetheory.in/…
  • 你能分享一下代码吗,我可以试试看我能不能发现问题..

标签: javascript firefox canvas webrtc mediarecorder-api


【解决方案1】:

如果 Firefox 检测到系统的 CPU 过载,它将重新缩放(缩小)WebRTC/getUserMedia 视频。 about:config 中有一些首选项可以控制这种行为,但不能通过 JS 控制。

您可以通过设置禁用该功能

media.navigator.load_adapt=false

您可以查看其他 media.navigator.load_adapt.* 标志以对行为进行一些控制。默认情况下,如果 CPU 在 3 秒内固定超过 90%,您将得到缩减。

【讨论】:

  • 经过进一步测试,发现media.navigator.load_adapt=false与输出视频是否中游动态缩放无关。在 IRC 房间进行了更多讨论后,建议我打开这个 bug 报告:bugzilla.mozilla.org/show_bug.cgi?id=1250345
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2019-11-09
  • 2017-03-20
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
相关资源
最近更新 更多