我正在使用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做到这一点?
- 对于这种行为我有遗漏吗?
是否固定画布大小?你是否将相机流传输到画布上? – mido
@mido画布大小是完全固定的。我在requestAnimationFrame上绘制框架,通过“更精细的方法”在30FPS上限:http://codetheory.in/controlling-the-frame-rate-with-requestanimationframe/ – Brad
你可以分享代码,我可以给这是一个尝试,看看我能否发现问题.. – mido