2016-02-04 60 views
5

我正在使用MediaRecorder API和Canvas captureStream方法在浏览器中对画布的VP8视频流进行编码。这些数据通过二进制网络套接字发送到FFmpeg。MediaRecorder在没有挑衅的情况下更改大小

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帧从尺寸更改:1280×720 FMT:YUV420P尺寸:1024x576 FMT:YUV420P

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

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

  • Firefox是否缩小动态视频?
  • 如果是这样,什么样的条件导致这种情况发生? (CPU负载?流反压?)
  • 是否有可能防止Firefox做到这一点?
  • 对于这种行为我有遗漏吗?
+0

是否固定画布大小?你是否将相机流传输到画布上? – mido

+0

@mido画布大小是完全固定的。我在requestAnimationFrame上绘制框架,通过“更精细的方法”在30FPS上限:http://codetheory.in/controlling-the-frame-rate-with-requestanimationframe/ – Brad

+0

你可以分享代码,我可以给这是一个尝试,看看我能否发现问题.. – mido

回答

3

如果WebRTC/getUserMedia视频检测到系统的CPU过载,它将重新缩放(缩小比例)WebRTC/getUserMedia视频。 about:config中有几个前缀用于控制这种行为,但它不能通过JS进行控制。

您可以通过设置

media.navigator.load_adapt =假

你可以看一下其他media.navigator.load_adapt用于在行为的一些控制禁用该功能。*标志。默认情况下,如果CPU在3秒内挂钩超过90%,将会缩小比例。

+0

进一步测试后,我发现'media.navigator.load_adapt = false'对输出视频是否动态缩放中游没有影响。在IRC会议室进行了更多讨论之后,有人建议我打开这个错误报告:https://bugzilla.mozilla.org/show_bug.cgi?id = 1250345 – Brad

相关问题