2011-06-06 46 views
2

我必須計算RTP流中的數據包之間的時間偏移量。隨着視頻流與Theora格式編解碼器編碼,我有時間戳字段像如何計算RTP中的有效時間偏移

2856000 
2940000 
3024000 
... 

所以我認爲傳輸偏移是84000.與音頻Speex編解碼器,我有時間戳字段像

38080 
38400 
38720 
... 

所以我假設傳輸偏移是320.爲什麼價值如此不同?他們是微秒,毫秒還是什麼?我能推廣一個公式來計算與任何編解碼器一起工作的以微秒爲單位的數據包之間的延遲嗎?謝謝。

回答

5

RTP時間戳依賴於媒體。他們使用正在使用的編解碼器的採樣率。您必須先將它們轉換爲毫秒,然後再與其他RTP流的時鐘或時間戳進行比較。

補充:

要將timstamp轉換成秒,只是除以採樣率的時間戳。對於大多數音頻編解碼器,採樣率爲8 kHz。

查看here的幾個例子。

+0

我該如何轉換這些措施? – Emilio 2011-06-06 21:32:54

2

請注意,視頻編解碼器通常使用90000作爲時間戳速率。

不用猜測時鐘速率,而是查看sdp中的a = rtpmap行,以瞭解正在使用的有效負載。示例:

a=audio 5678 RTP/AVP 0 8 99 
a=rtpmap 0 PCMU/8000 
a=rtpmap 8 PCMA/8000 
a=rtpmap 99 AAC-LD/16000 

如果有效載荷爲0或8,則時間戳爲8KHz。如果它是99,他們是16KHz。請注意,rtpmap行有一個可選的'頻道'參數,如在「a = rtpmap有效負載名稱/速率[/頻道]」

2

一直在研究這個問題約一小時的音頻案件。看起來像答案是:RTP時間戳增加了數據包中音頻時間單元(採樣)的數量。以此示例爲例,其中有一串編碼的2聲道音頻,在音頻編碼之前以44100進行採樣。假設您爲每個數據包發送512個音頻採樣(256個時間單位,因爲我們有2個通道音頻)。假設第一個數據包的時間戳爲0(根據RTP規範(RFC 3550),它應該是隨機的),第二個時間戳將是256,第三個時間戳是512.接收器可以將該值轉換回實際時間將時間戳除以音頻採樣率,所以第一個數據包將是T0,第二個數據包等於256/44100 = 0.0058秒,第三個數據等於512/44100 = 0.0116秒等。

有人請糾正我,米錯了,我不知道爲什麼沒有任何網上的文章,說這種方式。如果RTP時間戳的分辨率不同於音頻流的採樣率,我想這會更加複雜。儘管如此,將時間戳轉換爲不同的分辨率並不複雜。像以前一樣使用該示例,但將RTP時間戳的分辨率更改爲90 kHz,如MPEG4音頻(RFC 3016)中所述。從源端第一個時間戳是0,第二個是90000 *(256/44100)= 522,第三個是1044.在接收器上,第一個數據包的時間爲0,第二個數據包的時間爲522/90000 = 0.0058 ,第三位1044/90000 = 0.0116。再次,如果我錯了,請有人糾正我。