2012-03-22 9 views
2

私は、H.264 UDPビデオストリームをデコードするのQtでのLibavライブラリを使用しようとしていますが、私はavformat_open_file使用するときに、私は次のようなエラーメッセージが出ます:のLibavでのデコードUDPストリーム:不十分なバッファサイズ

[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:// IPアドレス:ポート" です。

もし誰かが私のためにこの問題についていくつかの光を当てることができたら、それは非常に感謝しています!

+0

これはRTSPストリームでも発生しますが、解決策のどれも動作していないようです –

答えて

1

は次のようにあなたのURLを変更してみてください。確かに、MPEGTSへの出力ストリームをエンコードすることはやりました。

+0

修正のおめでとう!あなたができるときは、あなたの答えが「受け入れられた」とマークして、あなたの質問が答えられ、あなたの解決策から学ぶことができるようにしてください。乾杯〜 –

+0

ああ、感謝の気持ち! –

+0

入力ストリームをMPEGTSにどのようにエンコードできましたか?もう一方の端でffmpegですか、別のライブラリを使用していますか?または、ffmpegをローカルで使用していますか? – njahnke

1

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

ドキュメントを簡単に見てみると、URLのオプションとしてデータグラムサイズを指定できるようです。(See section 6.16 UDP)より多くのFFMPEGはUDPオーバー生H.264のストリーミング時あなたが最初MPEGTSにストリームをエンコードするために期待するように見える少し周りを掘った後udp://ipaddress:port?buffer_size=10240

+0

私はドキュメントを指してくれてありがとう。それはたくさんの助けになりました。それでも、私はbuffer_sizeにいくつかの異なる値を試しましたが、何も変わりませんでした。 pkt_sizeを約10000に設定すると、すべてのエラーメッセージが消去されますが、UDPストリームから悪いデータが得られます。 –

0

buffer_sizepkt_sizeのオプションを十分に大きく設定してください。他のプロトコル(例えばtcpsctp)として

udpは、(そうmpegtsnutmkv)を、一般的なフォーマットを提供するか、rtprtspを使用して、それぞれ結合フォーマットができます。

関連する問題