2

Qt で libav ライブラリを使用して h.264 UDP ビデオ ストリームをデコードしようとしていますが、avformat_open_file を使用すると、次のエラー メッセージが表示されます。

[udp @ 0x102b5bee0] Part of datagram lost due to insufficient buffer size

このメッセージは約 10 回表示され、試行は失敗します。4 つの異なる UDP ストリームを同時にデコードしようとしています。各ストリームのフレーム レートは 25fps です。Wireshark は、パケットが 3000 ~ 10000 バイトであることを示しています。

これが avformat_open_input への呼び出しです。

avformat_open_input(&formatContext, udpUrl.toStdString().c_str(), NULL, NULL)

この呼び出しが行われた時点で formatContext は NULL であり、udpUrl は「udp://ipaddress:port」の形式になっています。

誰かが私のためにこの問題に光を当てることができれば、それは大歓迎です!

4

3 に答える 3

1

もう少し掘り下げた後、FFMPEGは、UDP経由で生のH.264をストリーミングするときに、最初にストリームをMPEGTSにエンコードすることを期待しているようです。案の定、出力ストリームを MPEGTS にエンコードすることでうまくいきました。

于 2012-03-30T15:53:03.467 に答える
1

このエラーは、UDP データグラムを小さすぎるバッファに読み込もうとすると発生します。UDP は配信を保証しないため、このパケットは実装に応じて単純に切り捨てられます (またはドロップされます)。

ドキュメントをざっと見てみると、URL のオプションとしてデータグラム サイズを指定できるようです(セクション 6.16 UDP を参照)

URL を次のように変更してみてください。 udp://ipaddress:port?buffer_size=10240

于 2012-03-22T21:10:14.033 に答える
0

buffer_sizepkt_sizeオプションを十分な大きさに設定してください。

udp、他のプロトコル (例: ) は一般的な形式(so 、tcp、 )を提供できます。sctpmpegtsnutmkvrtprtsp

于 2015-04-02T18:20:42.480 に答える