サーバー応答の RTSP 不一致トランスポート: カメラの SETUP 応答のデバッグと RTP モードの不一致

カメラが異なる RTP トランスポート モード、間違ったインターリーブ チャネル、欠落しているポート、または互換性のない SETUP 応答で応答した場合に、RTSP 不一致トランスポート エラーをデバッグする方法。

rtsp 不一致トランスポート, サーバー応答, rtspのセットアップ, トランスポートヘッダー, TCP 経由の rtp, udp rtp, rtsp 診断

一部の RTSP エラーでは、クリーンな「461 Unsupported Transport」が返されません。代わりに、クライアントは「サーバー応答のトランスポートが一致しません」、「無効なトランスポート ヘッダー」、「サーバーが異なるトランスポートで応答した」、または「RTP トランスポートの不一致」を報告します。これは、カメラが SETUP を受け入れても、クライアントの要求またはクライアントが解析できる内容と一致しない Transport ヘッダーで応答した場合によく発生します。

ストリームは、あるプレーヤーでは機能しても、別のプレーヤーでは失敗する可能性があるため、ユーザーは「RTSP 不一致トランスポート サーバー応答」、「ffmpeg 不一致トランスポート」、「RTSP SETUP トランスポート不一致」、および「カメラ トランスポート ヘッダーが無効」を検索します。カメラは単に到達できないわけではありません。 RTSP トランスポート ネゴシエーションに一貫性がありません。

リクエスト ヘッダーとレスポンス ヘッダーを直接比較する必要があるため、RTSP インスペクターが役立ちます。

マッチング SETUP 交換はどのようなものですか

クライアントはインターリーブされた TCP を要求します。

Transport: RTP/AVP/TCP;unicast;interleaved=0-1

Server replies with compatible TCP interleaved transport:

Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=12345678

クライアントは UDP を要求します。

Transport: RTP/AVP;unicast;client_port=50000-50001

Server replies with UDP ports:

Transport: RTP/AVP;unicast;client_port=50000-50001;server_port=6970-6971

サーバーがトランスポート モードを変更したり、必須フィールドを省略したり、不正な値を返したりすると、厳密なクライアントは失敗する可能性があります。

よくある不一致のケース

一般的な例は次のとおりです。

  • クライアントは TCP を要求し、サーバーは UDP を応答します。
  • クライアントは UDP を要求し、サーバーは TCP を応答します。
  • サーバーは「interleaved=」を省略します。
  • サーバーが間違ったチャネル番号を返します。
  • サーバーはリクエストとは異なる client_port 値を返します。
  • サーバーは UDP の「server_port」を省略します。
  • クライアントがユニキャストを要求すると、サーバーはマルチキャストを返します。
  • サーバーは、サポートされていない形式で複数の代替トランスポートを返します。
  • プロキシはリクエストを書き換えますが、レスポンスは書き換えません。

クライアントの中には、こうした癖を許容する人もいます。他の人はそれらを拒否します。

なぜあるプレイヤーはうまくいき、別のプレイヤーは失敗するのか

RTSP の実装はさまざまです。寛容なプレイヤーは、不正な形式または予期しないトランスポート応答を受け入れて続行する可能性があります。より厳密なツールは、応答がその期待に反するため失敗する可能性があります。

それは、厳密なクライアントが間違っていることを自動的に意味するわけではありません。これは、カメラまたはプロキシの動作を検査する必要があることを意味します。

専門的な診断のために、以下を保存してください。

  • 要求されたトランスポートヘッダー。
  • サーバーのトランスポート応答。
  • トラックURL。
  • セッションID。
  • RTP パケットが後で到着するかどうか。

プロキシとリレーの書き換え

RTSP 対応リレーは、UDP パスと TCP パスをブリッジするためにトランスポート ヘッダーを書き換える場合があります。書き換えが不完全な場合、ダウンストリーム クライアントはその要求と一致しない応答を受け取ります。

例:

  • クライアントはリレーに TCP を要求します。
  • リレーはカメラから UDP を要求します。
  • リレーが誤ってカメラの UDP トランスポート応答を下流に転送します。

カメラとリレーがそれぞれ部分的に有効な動作を行ったにもかかわらず、クライアントは不一致のトランスポートを報告します。

デバッグチェックリスト

このプロセスを使用します。

  1. SETUP リクエストをキャプチャします。
  2. SETUP 応答をキャプチャします。
  3. トランスポート プロトコルの比較: UDP、TCP インターリーブ、マルチキャスト。
  4. ユニキャスト/マルチキャストを比較します。
  5. クライアント ポート、サーバー ポート、インターリーブ チャネルを比較します。
  6. プロキシ/リストリーマがパス内にあるかどうかを確認します。
  7. 後の RTP パケットが応答マッピングに従っているかどうかを確認します。
  8. パケット証拠を使用して、寛容なプレーヤーと厳格なクライアントを比較します。
  9. 可能であれば、直接カメラ URL をテストします。
  10. 正確なトランスポート ペアをベンダーに報告してください。

最終診断

「サーバー応答のトランスポートが一致しない」とは、「SETUP」ネゴシエーションによって、互換性のない、または不正な形式のトランスポート応答が生成されたことを意味します。カメラまたはリレーが RTP モードを変更しているか、フィールドを省略しているか、クライアントが安全に使用できない値を返している可能性があります。

RTSP Inspector は、トランスポート要求と応答のペアを表示することで役立ちます。これは、このクラスの RTSP 障害を診断する唯一の信頼できる方法です。