5

C++ オーディオ ストリーミングおよび再生アプリケーションに FFMPEG を使用しています。

avformat_open_input関数を使用して、外部圧縮オーディオ ファイルへの URL を開き、 av_read_frame を使用してストリーミングに進みます。次に、各パケットについて、データを直接デコードし、OpenAL を使用してオーディオ バッファーにキューに入れます。

私の質問は、FFMPEG が外部 URL からの圧縮データを内部的にプリバッファリングするかどうかです。

av_read_frame を呼び出さなくても、FFMPEG はバックグラウンドでデータをダウンロードし続けます?

それとも、オーディオ再生が枯渇するのを避けるために、できるだけ多くのパケットを事前にダウンロードする中間バッファを維持するのは私の責任ですか?

もしそうなら、それはどれくらい内部的にバッファ/ダウンロードしますか? これを設定できますか?

ドキュメントを調べましたが、これに関する情報は見つかりませんでした。

ありがとう。

更新: このスレッドhttp://ffmpeg.zeranoe.com/forum/viewtopic.php?f=15&t=376によると、 libav はデフォルトで AVFormatContext::max_analyze_duration に応じて約 5MB プリバッファする必要があります。ただし、この動作に気づいていません。max_analyze_duration を変更しても変わらないようです。

プロセスのメモリ消費を監視すると、avformat_open_input を呼び出した後も増加しません。低速ネットワークをシミュレートすると、パケットがバッファリングされていないかのように、av_read_frame が直接動作を停止します。

4

0 に答える 0