私は現在、クライアントの設定 (画面サイズ、処理能力など) またはネットワーク帯域幅に応じてストリームのビットレートを動的に調整する機能を必要とする Web カメラ ストリーミング サーバー プロジェクトに参加しています。エンコーダーは無料でオープンソースであるため ffmpeg で、コーデックは MPEG-4 パート 2 です。サーバー部分には live555 を使用します。
これを達成するためにffmpegを使用してMBR MPEG-4ビデオをエンコードするにはどうすればよいですか?
あなたが説明しているマルチビットレートのビデオは、「スケーラブル ビデオ コーデック」と呼ばれます。基本的な理解については、このwikiリンクを参照してください。
基本的に、スケーラブル ビデオ コーデックでは、ベース レイヤ ストリーム自体が完全にデコード可能です。ただし、追加情報は (1 つまたは複数の) 拡張ストリームの形式で表されます。これを行うには、低解像度/高解像度、フレームレート、量子化の変更など、いくつかの手法があります。次の論文では、 MEPG4とH.264のそれぞれのスケーラブル ビデオ コーディングについて詳しく説明しています。これは、あなたが何をしようとしているのかを説明する別の良い論文です。
残念ながら、これは広く研究テーマであり、今日までオープンソース (ffmpeg および xvid) はこのような多層エンコーディングをサポートしていません。市販のエンコーダーでさえこれをサポートしていないと思います。これは非常に複雑です。おそらく 、H.264 のリファレンス エンコーダーがサポートしているかどうかを確認できます。
別の方法 (ただし CPU に負荷がかかる) は、パケットの送信中にリアルタイムでトランスコードすることもできます。この場合、最初は適度に良い品質で始める必要があります。FFMPEG を API として使用している場合は問題ありません。一般に、複数の解像度はまだ厄介な場合がありますが、ターゲットのエンコード レートを変更し続けることができます。