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がこれをしないようにすることはできますか?
- この動作の説明がありませんか?
キャンバスのサイズは固定ですか?カメラのストリームをキャンバスにストリーミングしていますか? – mido
@midoキャンバスのサイズは完全に固定されています。私はrequestAnimationFrameのフレームを描画しています.30FPSで "より洗練されたアプローチ"でキャップされています。http://codetheory.in/controlling-the-frame-rate-with-requestanimationframe/ – Brad
コードを共有できますか?それを試してみてください。 – mido