ffmpeg - RTSPストリームからのH.264デコードエラーログ

ffmpeg h.264 rtsp

次のH264エラーログが表示されます。このログは、FFMPEGを使用してRTSPビデオストリームをデコードしているときに取得されます。表示される画像は5/6秒後にぼやけます。写真は時々それを回復するでしょう。ただし、ほとんどの場合、ぼやけたままです。

編集:いくつかのFFMPEGディスカッションフォーラムは、これらのログを回避するためにFFMPEGバージョンをアップグレードすることを提案しました。 2015年6月19日の最新のFFMPEGビルドを更新しましたが、まだログが残っており、画像はまだぼやけています。

編集2:RTSPストリームはGANZカメラから来ています。このカメラはLAN接続で接続されています。

[h264 @ 0abb2aa0] Cannot use next picture in error concealment
[h264 @ 0abb2aa0] concealing 1933 DC, 1933 AC, 1933 MV errors in P frame
[h264 @ 098e5c80] RTP: missed 131 packets
[h264 @ 0abb3300] error while decoding MB 66 25, bytestream (-9)
[h264 @ 0abb3300] Cannot use next picture in error concealment
[h264 @ 0abb3300] concealing 1583 DC, 1583 AC, 1583 MV errors in P frame
[h264 @ 098e5c80] RTP: missed 8 packets
[h264 @ 0b113e40] error while decoding MB 54 30, bytestream (-11)
[h264 @ 0b113e40] Cannot use next picture in error concealment
[h264 @ 0b113e40] concealing 1195 DC, 1195 AC, 1195 MV errors in P frame
[h264 @ 098e5c80] RTP: missed 118 packets
[h264 @ 0ac79960] error while decoding MB 13 20, bytestream (-13)
[h264 @ 0ac79960] Cannot use next picture in error concealment
[h264 @ 0ac79960] concealing 2036 DC, 2036 AC, 2036 MV errors in P frame
[h264 @ 098e5c80] RTP: missed 198 packets
[h264 @ 0ad4f500] error while decoding MB 21 9, bytestream (-5)
[h264 @ 0ad4f500] Cannot use next picture in error concealment
[h264 @ 0ad4f500] concealing 2908 DC, 2908 AC, 2908 MV errors in P frame
[h264 @ 098e5c80] RTP: missed 108 packets
[h264 @ 0abb3300] error while decoding MB 1 14, bytestream (-5)
[h264 @ 0abb3300] Cannot use next picture in error concealment
[h264 @ 0abb3300] concealing 2528 DC, 2528 AC, 2528 MV errors in P frame
[h264 @ 098e5c80] RTP: missed 106 packets
[h264 @ 0b1149c0] error while decoding MB 12 5, bytestream (-7)
[h264 @ 0b1149c0] Cannot use next picture in error concealment
[h264 @ 0b1149c0] concealing 3237 DC, 3237 AC, 3237 MV errors in P frame
[h264 @ 098e5c80] RTP: missed -65402 packets
[h264 @ 0b1155a0] error while decoding MB 50 38, bytestream (-7)
[h264 @ 0b1155a0] Cannot use next picture in error concealment
[h264 @ 0b1155a0] concealing 559 DC, 559 AC, 559 MV errors in P frame
[h264 @ 098e5c80] RTP: missed 150 packets
[h264 @ 0af65740] error while decoding MB 48 31, bytestream (-15)
[h264 @ 0af65740] Cannot use next picture in error concealment
[h264 @ 0af65740] concealing 1121 DC, 1121 AC, 1121 MV errors in P frame
[h264 @ 098e5c80] RTP: missed 4 packets
[h264 @ 0ac79960] error while decoding MB 35 38, bytestream (-41)
[h264 @ 0ac79960] Cannot use next picture in error concealment
[h264 @ 0ac79960] concealing 574 DC, 574 AC, 574 MV errors in P frame


ffmpegを使用してRTSPストリームをaviファイルにダンプしましたが、エラーはありません。
C:\ Users \ Matlab> ffmpeg -i rtsp://192.168.1.67/gnz_media/main 123.avi

H.264デコードエラーはありません。 ffmpeg apiを使用して、誰でも上記のデコードエラーを助けることができます。
答え
UDPを使用している場合、フレームのドロップが予想されます。これはUDP設計の一部であり、信頼性よりも速度を優先します。特定のパケットは前後のパケットに依存する可能性があるため、パケットの欠落はH264形式にとって重大な問題です(完全に新しいイメージを送信する代わりに差分イメージを使用)。
したがって、UDPを使用すると、「RTP:missed XXX packets」を含む多くのエラーが生成されます。

rtsp_transport="tcp"オプションをav_open_inputに渡すことで、より信頼性の高い低速なTCPに切り替えます。例:

AVDictionary * opts = NULL;
av_dict_set(&opts, "rtsp_transport", "tcp", 0);
int error = avformat_open_input(&rtsp_format_context, "rtsp://your url here", NULL, &opts);
if (error < 0)
    ; // Connection error. Add your error handling here.


これにより、パケットのドロップが停止され、ビデオの破損が削除されます。
関連記事

go - 生の[] byteビデオをffmpegにパイピング-Go

android - トランジション効果を使用した画像からビデオへの変換

android - Androidデバイスへのopusオーディオrtpのストリーミング

opencv - Ubuntu 12.04.02でのOpenCV 2.4.6.1+の設定/インストール

c++ - FFmpegがバッファフィルC++でハングする

ios - iOSマルチビデオディスプレイ

xcode - ffmpegとアプリをMacに一緒にインストールする方法は?

ffmpeg - FFmpegで不明なフレームレートでビデオを録画する

c - FFMPEG CプロジェクトでlibX264の代替としてopenH264を使用しようとしています

android - Androidからのビデオオーバーレイ