RTSP ストリームに H.264 SPS/PPS がない: VLC は再生されるが、FFmpeg または分析が失敗する理由
耐性のあるプレーヤーが動作しているように見えても、H.264 SPS/PPS の証拠が欠落していると、RTSP デコーダー エラー、ブラック フレーム、分析エラーが発生する理由。
カメラ エンジニアにとってイライラする RTSP 障害パターンはよく知られています。VLC はストリームを再生しますが、FFmpeg、VMS、分析パイプライン、またはクラウド取り込みサービスがデコーダー エラーで失敗します。サポート スレッドでは、どのツールが「正しい」かについての議論が頻繁に行われます。より良い質問は、ストリームが新しいデコーダに十分な H.264 パラメータの証拠を提供するかどうかです。
H.264 にはシーケンス パラメータ セットとピクチャ パラメータ セットが必要です。エンジニアは通常、これらを SPS または PPS と呼びます。これらは、ビットストリームをデコードする方法、つまりプロファイル、レベル、次元、参照動作、およびピクチャ構造を記述します。これらがないと、デコーダはスライス データを認識しても、それをフレームに変換するための有効なコンテキストが得られない可能性があります。
SPS と PPS が登場する場所
RTSP 導入では、SPS/PPS 証拠が複数の場所に表示される場合があります。
- SDP
sprop-parameter-sets - スライス前のインバンド RTP ペイロード
- キーフレームの前に繰り返される
- 以前のセッションから寛容なプレーヤーによってキャッシュされた
- 次の IDR を待った後にのみ配信されます
これは「1 つのビューアで動作する」問題の説明になります。プレーヤーは状態を再利用したり、より長く待機したり、失われた参照から回復したり、エラー隠蔽を適用したりできます。厳密な取り込みサービスは、空のデコーダから開始され、SPS/PPS と使用可能なキー フレームが到着するまでストリームを拒否する場合があります。
エラーの実際の意味
「アクセス ユニット内の画像がありません」、「スライス ヘッダーのデコード エラー」、「存在しない PPS が参照されました」、または「SPS/PPS を待機しています」などのメッセージは、自動的にカメラが壊れていることを意味するものではありません。これらは、デコーダがデコードしようとした時点で必要なパラメータ コンテキストを持っていなかったことを意味します。
診断の質問は次のとおりです。
- SDP には「sprop-parameter-sets」が含まれていましたか?
- SPS と PPS は RTP ペイロードに見られましたか?
- 最初のスライスの前に到着しましたか?
- IDRフレームはパラメータセットの後に表示されましたか?
- パケットロスによりパラメータセットパケットが削除されましたか?
- ストリームは共和党の途中から始まりましたか?
- ペイロード タイプは SDP と一致していましたか?
これらの質問に答えられると、次のアクションが明確になります。
共和党途中でのストリーム開始が危険な理由
多くのカメラは、RTSP クライアントが接続すると、現在のエンコーダ位置から送信を開始します。クライアントが GOP の途中で参加する場合、キー フレームの前にインター フレームを受信する可能性があります。ストリームが SPS/PPS を定期的に繰り返すことができない場合、デコーダは次の適切な境界まで待機するか失敗する可能性があります。
監視ソフトウェアの場合、これは次のようになります。
- 数秒間の黒い画面
- 最初のフレームはモーションまたはキーフレーム間隔の後にのみ表示されます
- 分析パイプラインがストリームを拒否する
- リストリーマは開始されるが、ダウンストリーム クライアントが失敗する
- 再接続後に時々回復する
修正はカメラ側で行われる可能性があります。キーフレーム間隔を短くする、パラメータ セットを繰り返す、別のストリーム プロファイルを使用する、またはダウンストリーム製品のサポートがより厳密である場合は H.265 から H.264 に切り替えるなどです。
SDP は主張です。 RTP は証拠です
一部のカメラ システムは SDP で SPS/PPS をアドバタイズします。デコーダが帯域内 NAL ユニットを待機することを期待する人もいます。両方を行う人もいます。どちらも正しく行わない人もいます。診断レポートでは、クレームとペイロードを比較する必要があります。
有用な証拠には次のようなものがあります。
- SDPのbase64パラメータセット
- RTP で観察される H.264 NAL ユニット タイプ
- 最初の SPS/PPS パケット インデックス
- 最初の IDR パケット インデックス
- キーフレームの準備が整う前のパケット損失
- デコーダの準備状況
これは、「他のプレイヤーを試す」よりもはるかに強力です。これは、SDP、エンコーダ設定、またはパケット化動作を変更するかどうかをベンダーに伝えます。
RTSP インスペクターが適している場所
RTSP Inspector は、再生が診断であるかのように装うことなく、RTSP、SDP、RTP/RTCP、およびコーデック構造を検査するように設計されています。不足している SPS/PPS ケースについて、製品はエンジニアが以下を示すのに役立ちます。
- ストリームは正常に接続されました
- SDP はパラメータ セットを伝送するか伝送しませんでした
- RTP はパラメータ セットを配信したか、配信しませんでした
- パケット損失は最初のデコード境界に影響を与えるかどうか
- 障害はストリーム メタデータ、ネットワーク配信、デコーダ サポート、またはカメラ設定に属します
これは、「VLC は機能する」という議論を解決する一種の証拠です。 VLC の動作は有益な情報です。これは、ストリームがすべての消費者にとってクリーンであることを証明するものではありません。
検索クエリが「RTSP は VLC で動作するが、FFmpeg は失敗する」である場合は、ダウンストリーム システムのせいにする前に、SPS/PPS、キー フレーム、パケット損失、SDP を検査してください。