7

私は、FFMPEG C++ ライブラリを使用して UDP ストリーミングから取得するソフトウェアに取り組んでいます。

FFMPEG (1.2) が実装されて実行されていますが、いくつかのエラー (取得のクラッシュと再起動) が発生します。ログには次のメッセージが表示されます。

*循環バッファ オーバーラン。回避するには、fifo_size URL オプションを増やします。このような場合に生き残るには、overrun_nonfatal オプションを使用します*

このオプションの使用方法に関するドキュメントをオンラインで検索しましたが、ffmpeg 実行可能ファイルを直接実行する場合の使用方法に関する情報しか得られませんでした。

私のC++コードで正しいオプションを次のように設定する方法を誰かが知っていますか? - fifo_sizeを増やします - overrun_nonfatalオプションを使用します

ありがとう

4

2 に答える 2

18

他の回答にコメントするのに十分な評判はありませんが、コメントした場合、回答にリンクされているソースを研究していると言えます。

  • fifo_size次の行に従って、188 バイト (パケット) の倍数として測定されます。

    s->circular_buffer_size = strtol(buf, NULL, 10)*188;

  • そのため、次の行のために、Grant は「デフォルトの 5MB」と大まかに正しいですが、

    s->circular_buffer_size = 7*188*4096;

50MB の循環バッファーが必要な場合は、fifo_sizeパラメーターを実際に近い値に設定する必要があります。50*1024*1024/188そうしないと、8965MB に近いバイト50000000が得られます。50000000*188

于 2016-07-19T00:42:35.840 に答える
18

コマンド ラインまたは C++ ライブラリから同じオプションを使用するには、UDP URL を次のように変更する必要があります。元の URL が次のようになっている場合:

udp://@239.1.1.7:5107

次のように fifo_size および overrun パラメータを追加します。

"udp://@239.1.1.7:5107?overrun_nonfatal=1&fifo_size=50000000"

URL を引用符でエスケープすることを忘れないでください。

overrun_nonfatal=1 は、ffmpeg が終了するのを防ぎます。ほとんどの状況で回復できます。

fifo_size=50000000 は、50MB の udp 入力バッファーを使用します (デフォルトは 5MB)。

唯一のドキュメントはソース コードにあります

于 2014-04-30T06:08:58.240 に答える