不明な書き込み
動的 RTP ペイロード タイプを SDP rtpmap および fmtp 行にマッピングし直すことで、RTSP キャプチャの「不明な書き込み」RTP / NDPI エラーをデバッグします。 H.264、H.265、AAC、ONVIF メタデータ、ペイロード ID、およびデパケッタイザー エラーをカバーします。
メディア パーサーが RTP パケットを理解しようとするまでは、RTSP セッションは正常に見えることがあります。 DESCRIBE は SDP を返します。 SETUP は成功します。 「PLAY」は成功します。 RTPパケットが到着します。次に、アプリケーションまたはパケット分類子は、「不明な書き込み」、「不明な RTP ペイロード」、「不明な NDPI」、「サポートされていないペイロード タイプ」、「デパケタイザが見つかりません」、「無効なコーデック マッピング」、「ペイロード タイプ 96 のデコーダがありません」、または「ストリームに不明なトラックが含まれています」を報告します。
これらのエラーは通常、バイトは存在するが、アナライザーが RTP ペイロード タイプをコーデックにマッピングできず、SDP からの定義を追跡できないことを意味します。 RTSP では、ペイロード タイプ「96」は自動的には H.264 になりません。これはセッションローカルの動的 ID です。 SDPを読む必要があります。
簡単な答え: NDPI やカメラのせいにする前に SDP を確認してください
キャプチャに「不明な書き込み」/「RTP」/「NDPI」と表示されている場合は、ここから開始します。
- RTSP の「DESCRIBE」応答を見つけます。
- SDPをコピーします。
- すべての「m=」メディア行とそのペイロード番号を見つけます。
- 各動的ペイロード (
96-127) について、一致するa=rtpmap:<id>行を見つけます。 - コーデック パラメータについては、「a=fmtp:<id>」行を確認してください。
- RTP パケットのペイロード タイプ バイトをその SDP マッピングと比較します。
RTP パケットがペイロード タイプ 96 を使用し、SDP が a=rtpmap:96 H265/90000 を示す場合、H.264 を期待しているアナライザーは無意味なレポートを返します。 SDP に「a=rtpmap:96 vnd.onvif.metadata/90000」がある場合、未知のペイロードはまったくビデオではありません。これは ONVIF メタデータであり、再生を中断すべきではありません。
これが、「NDPI 不明」などの一般的な DPI ラベルでは不十分な理由です。 DPI エンジンはパケット バイトを認識します。セッションローカルの動的ペイロード ID を解釈するために必要な RTSP コントロール プレーン コンテキストを常に持っているわけではありません。 RTSP の場合、コントロール プレーンとメディア プレーンを一緒に読み取る必要があります。
これはプロトコルの解釈の問題です。 RTSP Inspector は、SDP と RTP の証拠をまとめて保持するため便利です。動的 RTP ペイロード ID を定義する SDP がなければ、動的 RTP ペイロード ID を正しく解釈することはできません。
静的ペイロード タイプと動的ペイロード タイプ
一部の RTP ペイロード タイプは静的です。その他は動的です。動的ペイロード タイプは通常 96 ~ 127 の範囲にあり、SDP によってマッピングする必要があります。
例:
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
SDP rtpmap is required for dynamic payloads
For dynamic payload types, SDP should include a=rtpmap:
a=rtpmap:96 H264/90000
a=rtpmap:97 MPEG4-GENERIC/48000/2
a=rtpmap:98 H265/90000
SDP に「rtpmap」がない場合、クライアントはどのデパケッタイザーを使用すればよいかわからない可能性があります。一部のカメラは不完全な SDP を生成します。一部のリレーまたはプロキシは SDP を変更します。一部のクライアントは共通トラックのみを解析し、メタデータ トラックを無視します。
一般的な結果:
- ビデオ ペイロードが到着しましたが、デコードされていません。
- オーディオトラックは無視されます。
- ONVIF メタデータ トラックにより、不明なペイロード エラーがトリガーされます。
- H.265 は H.264 と間違われます。
- AAC のクロック レートまたはチャンネル数が間違っています。
セッション間でペイロード タイプが変更される
動的ペイロード ID をハードコーディングしないでください。カメラは、再起動、プロファイルの変更、ファームウェアのアップデート、またはストリーム パスの変更後に、異なるペイロード番号を割り当てる場合があります。
例えば:
Session A: payload 96 = H264
Session B: payload 96 = H265
Session C: payload 97 = H264, payload 96 = metadata
H.264 and H.265 confusion
Symptoms:
AAC and MPEG4-GENERIC
Relevant SDP:
a=rtpmap:97 MPEG4-GENERIC/48000/2
a=fmtp:97 streamtype=5; profile-level-id=1; mode=AAC-hbr; config=...
ペイロード タイプ、クロック レート、チャネル、および fmtp パラメータはすべて重要です。
メタデータ トラックとベンダー拡張機能
ONVIF メタデータ、分析オーバーレイ、プライベート イベント トラック、ベンダー固有のペイロードを SDP に表示できます。メディア プレーヤーは、それらをどう処理すればよいのかわからない場合があります。
これは必ずしもストリーム障害ではありません。これは、クライアントがビデオとオーディオを処理しながら、サポートされていない非メディア トラックを無視する必要があることを意味する場合があります。ただし、クライアントが未知のメタデータを致命的として扱う場合、再生は失敗する可能性があります。
RTSP インスペクターは、トラック タイプ、ペイロード マッピング、および不明なペイロードがビデオ、オーディオ、メタデータ、またはプライベート データであるかどうかを識別するのに役立ちます。
デバッグチェックリスト
このプロセスを使用します。
DESCRIBEによって返された SDP をキャプチャします。- すべての「m=」メディアセクションをリストします。
- すべての動的ペイロード タイプをリストします。
- ペイロード ID を「a=rtpmap」でマッピングします。
- コーデック設定については「a=fmtp」を調べてください。
- RTP パケットのペイロード タイプの値を SDP と比較します。
- セッション間でペイロード ID が変化するかどうかを確認します。
- ビデオ、オーディオ、メタデータ、プライベート トラックを分離します。
- クライアントに必要なコーデックごとにデパケッタイザーがあることを確認します。
- アプリケーションが安全に実行できる場合にのみ、サポートされていないオプション トラックを無視します。
最終診断
RTP 動的ペイロード タイプの不一致は、クライアントが受信 RTP パケットを正しいコーデックまたはトラックにマッピングできない場合に発生します。修正は、SDP をセッションの権限として扱うことです。つまり、rtpmap を解析し、fmtp を解析し、セッションごとにペイロード ID をバインドし、必要なメディア トラックをオプションのメタデータから区別します。
RTSP Inspector は、SDP と RTP を並べて表示することでこの証拠優先のワークフローをサポートしているため、カメラ、デコーダ、またはネットワークのせいにする前にペイロードの問題を診断できます。
<!-- rtsp-localized-evidence-foundation-v1:start -->「不明な書き込み」を再現可能に検証する手順
結論から言うと、黒画面や一つのステータスコードだけでは障害の所在を証明できません。信頼できる診断では、RTSP の要求と応答、合意した Transport、有効な Session、その後の RTP シーケンス番号、タイムスタンプ、RTCP の証拠を一つの時系列につなげます。「不明な書き込み」では表示症状に近い層から調べますが、制御、ネットワーク、デコーダーの問題を混同しないよう同じ記録時刻を使います。
カメラ、ファイアウォール、VMS の設定を変える前に、小さな基準テストを作ります。パスワードを除いた RTSP URL、時刻、パス、要求した Transport、サーバー応答、最初のメディアパケット到着時刻を記録してください。機器が対応する場合は UDP と TCP interleaved を別々に試します。パス、認証情報、Transport を同時に変えると、二回目の成功がどの変更によるものか分かりません。
| 確認層 | 保存する証拠 | 判断する質問 |
|---|---|---|
| RTSP | メソッド、状態、ヘッダー、CSeq、Session | サーバーはその操作を受理したか |
| SDP | control、payload type、clock rate、codec | 期待するトラックが記述されているか |
| Transport | client_port、server_port、interleaved | 両端が同じ経路を使うか |
| RTP | SSRC、sequence、timestamp、marker | メディア単位が説明可能な順序で届くか |
| RTCP | sender report、CNAME、BYE | 時計、識別子、終了を追跡できるか |
| Decoder | SPS/PPS/VPS、packetization mode | 受信 payload で初期化できるか |
「メディアが届かない」と「届くが復号できない」を分けます。SETUP と PLAY が成功しても RTP がなければ、UDP 経路、NAT、ファイアウォール、Transport 応答を調べます。シーケンスの穴は損失または並べ替えを示します。連続した RTP があるのに映像がなければ、payload type、clock rate、フレーム境界、H.264 または H.265 のパラメーターへ進みます。この境界はプレーヤーの一般的なエラーより有用です。
引用できる短い回答はどう書きますか
三文で、最後に成功した操作、最初に失敗した証拠、二つの原因を分ける次の試験を書きます。例は「DESCRIBE、SETUP、PLAY は成功した。通知されたクライアントポートに RTP が届かない。TCP interleaved の再試験で UDP 遮断とメディアパス誤りを分ける」です。応答やパケットなしにカメラやネットワーク全体を原因と断定しません。
再現に必要な最小情報は何ですか
OPTIONS、DESCRIBE、SETUP、PLAY、SDP、Transport 応答、秘密を除いた Session を保存します。RTP は SSRC、最初と最後のシーケンス、clock rate、欠落数、収録時間を記録します。VLC や別 VMS の成否は差分試験として有用ですが、成功したクライアントが全規則を正しく扱う証明ではありません。
サーバーとクライアントのどちらを調べますか
メソッド拒否、存在しない control URL、不一致 Transport、説明のない SSRC や時計変更はサーバー側を調べます。期限切れ nonce の再利用、Session 欠落、ポートを開かない UDP 要求、各 NAL 終端を access unit 終端とみなす処理はクライアント側を調べます。中間経路の問題では、各結論にパケットと時刻を添えます。
報告前に何を確認しますか
新しい接続で再試験し、二つの時系列を最初の相違点まで比較します。パスワードと完全な Authorization 値を削除し、結論を CSeq、sequence、timestamp に結び付けます。関連する RTSP ガイドで周辺手順を確認し、RTSP Inspectorで RTSP ストリームをローカルに試験してください。カメラ映像を公開サービスへアップロードする必要はありません。
<!-- rtsp-localized-evidence-foundation-v1:end -->