RTSP タイムスタンプ ドリフトの修正: RTP クロック レートの不一致、オーディオ/ビデオ同期、およびフレーム タイミング エラー
オーディオ/ビデオの同期損失を引き起こす RTSP タイムスタンプのドリフトを修正します。RTP クロック レートの不一致、ジッター、フレーム タイミング、非単調なタイムスタンプ、およびカメラ ストリーム再生の不安定性をカバーします。
RTSP カメラ ストリームは、正常に接続し、正しく認証され、有効な SDP を返し、RTP パケットを送信しても、依然として不正に動作する可能性があります。ビデオはリアルタイムから徐々に遅れる場合があります。オーディオとビデオの同期がずれる場合があります。フレームは到着しても、再生が不均一になる場合があります。レコーダーは、奇妙な長さのファイルを作成する場合があります。プレーヤーは、ジッター、スタッター、「非単調タイムスタンプ」、「無効な DTS」、「RTP タイムスタンプ ジャンプ」、または「クロック レートの不一致」の警告を表示する場合があります。
ネットワーク接続は機能しているがメディア タイムラインが機能していない場合、ユーザーは「RTP タイムスタンプ ドリフト」、「RTSP カメラ オーディオ ビデオ 同期」、「RTP クロック レートが間違っています」、「RTSP ストリーム スタッター タイムスタンプ」、および「カメラ ストリーム フレーム タイミングの問題」を検索します。
これはまさに、プレイヤーのみのテストが浅すぎるという種類の問題です。プレーヤーは、バッファリングとデコードの背後にパケット タイムラインを隠す場合があります。 RTSP Inspector は、RTP タイミングがプロトコルの証拠となるため便利です。ペイロード タイプ、RTP タイムスタンプ、シーケンス番号、マーカー ビット、SDP クロック レート、RTCP 送信者レポート、ジッター、およびウォールクロック マッピングはすべて重要です。
RTP タイムスタンプは実測のタイムスタンプではありません
RTP タイムスタンプはメディア クロック値であり、Unix タイムスタンプではありません。 H.264 ビデオの場合、SDP は多くの場合 90 kHz クロックを宣言します。
a=rtpmap:96 H264/90000
90000 / 30 = 3000
25 fps ビデオの場合、増分は通常 3600 です。
90000 / 25 = 3600
SDP clock rate is the first clue
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
m=audio 0 RTP/AVP 97
a=rtpmap:97 MPEG4-GENERIC/48000/2
SDP が H.264 が 90000 を使用すると言っている場合、クライアントはビデオ RTP タイムスタンプをそのクロックで解釈する必要があります。 SDP が欠落しているか、形式が不正であるか、ペイロードの動作と矛盾している場合、クライアントは誤った推測を行う可能性があります。
一般的な SDP タイミングの問題には次のようなものがあります。
- 動的ペイロード タイプの
a=rtpmapがありません。 - オーディオクロックレートが間違っています。
- ペイロード タイプが一貫性なく再利用されました。
- カメラのファームウェアは 90000 を宣言しますが、フレーム レートと一致しないタイムスタンプの増分を送信します。
- AAC 設定が実際のサンプル レートと一致しません。
- 複数のトラックで、紛らわしいコントロール属性または重複したコントロール属性が使用されています。
RTSP インスペクターは、SDP なしでは RTP タイムラインを正しく解釈できないため、RTP 証拠とともに SDP を保存するのに役立ちます。
シーケンス番号とタイムスタンプの関係
RTP シーケンス番号とタイムスタンプは、さまざまな質問に答えます。
シーケンス番号は、パケットの損失と順序を検出するのに役立ちます。
- パケット 1024 は到着しましたか?
- パケット 1025 は到着しましたか?
- パケット 1026 は 1025 より前に到着しましたか?
- パケットが欠落していませんか?
RTP タイムスタンプはメディア時間を解釈するのに役立ちます。
- 同じビデオ フレームに属するパケットはどれですか?
- フレーム間でメディアはどのくらいの時間経過しましたか?
- カメラは前方または後方にジャンプしましたか?
- オーディオは期待どおりの速度で進化していますか?
- メディアの時間は実時間と一致しますか?
ストリームは完全なシーケンス連続性を持っていても、タイムスタンプが壊れている可能性があります。また、タイムスタンプは一貫したままですが、パケット損失が発生する可能性もあります。
マーカービットとビデオフレームの境界
多くの RTP ビデオ ペイロードでは、マーカー ビットはフレーム境界を示します。 H.264 では、複数の RTP パケットが 1 つのビデオ フレームのフラグメントを伝送することがあります。これらは同じ RTP タイムスタンプを共有し、マーカー ビットはアクセス ユニットの最後のパケットに現れることがよくあります。
タイムスタンプの変更が多すぎる場合、または変更頻度が不十分な場合、またはマーカーの動作に一貫性がない場合、フレームの再構築が不安定になる可能性があります。
症状には次のようなものがあります。
- 目に見えるパケット損失がないビデオの途切れ。
- デコーダは不完全なフレームを受信します。
- Recorder は不正確なフレーム期間を作成します。
- 再生が速くなったり、遅くなったりします。
- フレームのタイムスタンプは非単調です。
このため、診断ツールはデコードされたフレームだけでなく、パケット レベルの RTP メタデータを表示する必要があります。
オーディオ/ビデオ同期ドリフト
オーディオとビデオの同期は、各メディア トラックの RTP タイムスタンプを共有タイムベースにマッピングすることに依存します。 RTCP 送信者レポートは、これによく使用されます。送信者レポートは、RTP タイムスタンプを NTP 時間にマッピングできます。
RTCP SR:
NTP timestamp: wall-clock reference
RTP timestamp: media timestamp at that reference
Audio/video drift can happen when:
Timestamp jumps
Look for:
Questions to separate them:
Checklist for RTP timestamp drift
Use this workflow:
What to include in a useful report
Final diagnosis
<!-- rtsp-localized-evidence-foundation-v1:start -->「RTSP タイムスタンプ ドリフトの修正: RTP クロック レートの不一致、オーディオ/ビデオ同期、およびフレーム タイミング エラー」を再現可能に検証する手順
結論から言うと、黒画面や一つのステータスコードだけでは障害の所在を証明できません。信頼できる診断では、RTSP の要求と応答、合意した Transport、有効な Session、その後の RTP シーケンス番号、タイムスタンプ、RTCP の証拠を一つの時系列につなげます。「RTSP タイムスタンプ ドリフトの修正: RTP クロック レートの不一致、オーディオ/ビデオ同期、およびフレーム タイミング エラー」では表示症状に近い層から調べますが、制御、ネットワーク、デコーダーの問題を混同しないよう同じ記録時刻を使います。
カメラ、ファイアウォール、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 -->