6

MediaRecorder API をCanvasの captureStream メソッドと共に使用して、ブラウザでキャンバスの VP8 ビデオ ストリームをエンコードしています。このデータは、バイナリ Web ソケット経由で 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 がこれを行うのを防ぐことは可能ですか?
  • 私が見逃しているこの動作について別の説明はありますか?
4

1 に答える 1

3

Firefox は、システムの CPU が過負荷になっていることを検出すると、WebRTC/getUserMedia ビデオを再スケーリング (縮小) します。about:config には、この動作を制御する設定がいくつかありますが、JS 経由では制御できません。

設定することで機能を無効にすることができます

media.navigator.load_adapt=false

動作を制御するために、他の media.navigator.load_adapt.* フラグを確認できます。デフォルトでは、CPU が 3 秒間 90% を超えてペグされると、ダウンスケーリングが行われます。

于 2016-02-22T19:34:52.560 に答える