2016-02-04 1 views
5

Canvas captureStreamメソッドと一緒にMediaRecorder APIを使用して、キャンバスのVP8ビデオストリームをブラウザでエンコードしています。このデータはバイナリWebソケット経由で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:1024×576 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

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

あなたは、あなたが他のmedia.navigator.load_adaptで見ることができます。*フラグを行動をある程度制御するためにmedia.navigator.load_adapt = falseを

を設定することで、機能を無効にすることができます。デフォルトでは、3秒間CPUが90%以上固定されている場合、ダウンスケーリングが行われます。

+0

さらにテストしたところ、 'media.navigator.load_adapt = false'は、出力ビデオが中間ストリームのダイナミックにスケーリングされているかどうかに関係していませんでした。 IRC室でさらに議論が行われた後、私はこのバグレポートを開くことを提案しました:https://bugzilla.mozilla.org/show_bug.cgi?id=1250345 – Brad

関連する問題