3

Myは、ストリームの計算されたタイムスタンプの一部に対して信頼性が低く、RTSP Source頻繁 に大きな負のジャンプが発生します。RTCP SRH.264

デバッグ ログの例を次に示します。101006.6130 から -4193861.6830 にジャンプし、そのまま継続する様子をご覧ください。

101619 : 5cd3c38 Sample 63682 bytes time 100605.6130 to 100605.6131 latency 1264447034.4738
101715 : 5cd3c38 Sample 74194 bytes time 100706.6130 to 100706.6131 latency 1264447039.4738
101815 : 5cd3c38 Sample 72484 bytes time 100804.6130 to 100804.6131 latency 1264447038.4738
101923 : 5cd3c38 Sample 95679 bytes time 100906.6130 to 100906.6131 latency 1264447031.4738
102023 : 5cd3c38 Sample 93004 bytes time 101006.6130 to 101006.6131 latency 1264447031.4738
102134 : 5cd3c38 Sample 91388 bytes time -4193861.6830 to -4193861.6829 latency 1260152052.1778
102222 : 5cd3c38 Sample 90912 bytes time -4193738.1730 to -4193738.1729 latency 1260152088.6878
102328 : 5cd3c38 Sample 105902 bytes time -4193636.1730 to -4193636.1729 latency 1260152083.6878
102430 : 5cd3c38 Sample 106334 bytes time -4193537.1730 to -4193537.1729 latency 1260152081.6878
102520 : 5cd3c38 Sample 107120 bytes time -4193437.1730 to -4193437.1729 latency 1260152090.6878

だから、私の質問は:

Live555メディア ライブラリを使用してこの問題を解決するにはどうすればよいですか? 情報を無視する必要RTCPがありますか、または推奨される解決策とはLive555?

4

2 に答える 2

2

クライアントでのみlive555を使用していますか?変更されていないソースコードを使用しますか?あなたの質問のロギング情報はどこから来ていますか?

通常、タイムスタンプはストリームの先頭にかなり近いところで1回ジャンプします。これは、クライアントが最初のRTCP SRを受信したときに発生し、その時点でクライアントはタイムスタンプをリセットします。これは、オーディオとビデオの両方のRTPタイムスタンプがそれぞれランダム化されたオフセットで始まるため、クライアントが複数のストリームを同期できるようにするために必要です。RTCP SRには、RTPからNTPタイムスタンプへのマッピングが含まれています。これにより、クライアントはタイムスタンプを同期できます。RTPとNTPの両方のタイムスタンプが署名されていないため、タイムスタンプが負にジャンプするという事実は重要ではありません。

Live555がこの同期を処理します。これが、タイムスタンプのジャンプが最初にかなり近い場合に表示される理由です。RTCP同期の前に受信したすべてのサンプルを無視するか、以前のRTCP同期と後の両方でゼロにするためのより複雑なオフセットマッピングを実行するかを選択できます。live555RtpSource::hasBeenSynchronizedUsingRTCP()メソッドを呼び出すことにより、同期が発生したかどうかを確認できます。

ただし、複数のジャンプが表示される場合は、別の問題が発生している可能性があります。その場合は、使用するRTSPサーバー、RTSPクライアントなどの詳細を追加して、質問を編集してください。

于 2011-12-19T07:59:18.247 に答える
1

私は RTCP SR の実装を本当に知りません。100605.xxxx したがって、私は表す単位を知りません。ただし、ストリームの 90 kHz クロック値の PTS/DTS 値から派生していると一般的に考えている場合。

これが正しい場合、そのようなクロック タイマーは 2^33 ビットで自分自身をリサイクルすることがよく知られています。これを時計のラップラウンドと呼びます。これが署名された数値として出力される場合、これは正になります。このようなラップアラウンドは、Clock の特定の値の直後に発生します。

実際に最高値と最低値が常に同じまたは類似の範囲にあることを検証します。

もう 1 つの可能性は不連続性と呼ばれ、ソース タイムベースが突然シフトしたときに発生します (おそらく何らかの障害が原因で)。

于 2011-12-26T12:39:00.123 に答える