RTP/RTCP/RTSP协议分析(2)
1、發(fā)送者報告
RTCP協(xié)議處理機根據(jù)定義了五種類型的報文:
RR: receiver report
SR: sender report
SDES: source description items.
BYE: indicates end of participation.
APP: application specific functions
它們完成接收、分析、產(chǎn)生和發(fā)送控制報文的功能。
?
發(fā)送者報告包由3部分組成,若定義,可能跟隨第4個面向協(xié)議的擴展部分。
第一部分 ? 頭部 8bytes
V:(2bits)版本號,固定值為2
P:(1bit)填充標識,如果設置位1,則在所有的RTCP包后,有一部分填充數(shù)據(jù)。
RC:(5bits)?該包中所含接收報告塊的數(shù)目;
PT:(8bits) 包類型;固定值位200
length:(16bits)該RTCP包的長度減1。其單位是32比特字,包括頭和任何填充字節(jié)。(偏移量1保證零值有效,避免了在掃描RTCP包長度時可能發(fā)生的無限循環(huán),同時以32比特為單位避免了對以4為倍數(shù)的有效性檢測。) ??
SSRC:(32bits)SR包發(fā)送者的同步源標識符;
?
第二部分 ?發(fā)送者信息 20字節(jié)
NTP時間戳:(64bits) ? 指示了此報告發(fā)送時的背景時鐘(wallclock)時刻,它可以與從其它接收者返回的接收報告塊中的時間標志結合起來,計算往返每個接收者所花的時間。接收者應讓NTP時間戳的精度遠大于其他時間戳的精度。時間戳測量的不確定性不可知,因此也無需指示。一個系統(tǒng)可能沒有背景時鐘的概念,而只有系統(tǒng)指定的時鐘,如系統(tǒng)時間(system uptime)。在這樣的系統(tǒng)中,此時鐘可以作為參考計算相對NTP時間戳。選擇一個公用的時名是非常重要的。這樣多個獨立的應用都可以使用相同的時鐘。到2036年,相對和絕對NTP時間戳會產(chǎn)生大的差異。到那時,我們希望不再需要相對時鐘。一個發(fā)送者,如果不用背景時鐘時間或逝去時間,可以設置此項為零。 ? ?
RTP時間戳:(32bits) ? 與以上的NTP時間標志對應同一時刻。與數(shù)據(jù)包中的RTP時間戳具有相同的單位和偏移量。這個一致性可以用來讓NTP時間標志已經(jīng)同步的源之間進行媒體內(nèi)/間同步,還可以讓與媒體無關的接收者估計名義RTP時鐘頻率。注意在大多數(shù)情況下此時間戳不等于任何臨近的RTP包中的時間戳。RTP時間戳可以由相應的NTP時間戳計算得到。依據(jù)的是“RTP時間戳計數(shù)器”和“在采樣時通過周期性檢測背景時鐘時間得到的實際時間”兩者之間的關系。
(在RTCP SR包中有NTP時間戳、RTP時間戳,它們可以計算背景時鐘和RTP時鐘之間的對應關系,通過這個關系,可以由RTP數(shù)據(jù)包中的RTP時間戳計算也相應的回放時刻。這樣就可以進行多個流的同步了。之所以要有NTP時間戳,是因為不同流的RTP時間戳有不同的隨機偏移量,無法直接進行同步:筆者注。)
發(fā)送的報文數(shù):(32bits) ? 從開始傳輸?shù)酱薙R包產(chǎn)生時該發(fā)送者發(fā)送的RTP數(shù)據(jù)包總數(shù)。若發(fā)送者改變SSRC識別符,該計數(shù)器重設。
發(fā)送的字節(jié)文數(shù):(32bits) ? 從開始傳輸?shù)酱薙R包產(chǎn)生時該發(fā)送者在RTP數(shù)據(jù)包發(fā)送的字節(jié)總數(shù)(不包括頭和填充)。若發(fā)送者改變SSRC識別符,該計數(shù)器重設。此域可以用來估計平均的負載數(shù)據(jù)發(fā)送速率。? ??
?
第三部分?
零到多個接收報告塊。塊數(shù)等于從上一個報告以來該發(fā)送者偵聽到的其它源(不包括自身)的數(shù)目。每個接收報告塊傳輸從某個同步源來的數(shù)據(jù)包的接收統(tǒng)計信息。若數(shù)據(jù)源因沖突而改變其SSRC標識符,接收者重新設置統(tǒng)計信息。這些統(tǒng)計信息有: ? ?
? SSRC_n(同步源標識符):32比特 ? 在此接收報告塊中信息所屬源的SSRC標識符。 ? ?
? 丟包率:8比特 ? 自從前一SR包或RR包發(fā)送以來,從SSRC_n傳來的RTP數(shù)據(jù)包的丟失比例。以定點小數(shù)的形式表示。該值定義為損失包數(shù)/期望接收的包數(shù)。若由于包重復而導致包丟失數(shù)為負值,丟包率設為零。注意在收到上一個包后,接收者無法知道以后的包是否丟失。如:若在上一個接收報告間隔內(nèi)從某個源發(fā)出的所有數(shù)據(jù)包都丟失,那么將不為此數(shù)據(jù)源發(fā)送接收報告塊。
? 累計包丟失數(shù):24比特 ? 從開始接收到現(xiàn)在,從源SSRC_n發(fā)到本源的RTP數(shù)據(jù)包的丟包總數(shù)。該值定義為:期望接收的包數(shù)-實際接收的包數(shù)。接收的包括復制的或遲到的。由于遲到的包不算作損失,在發(fā)生復制時丟包數(shù)可能為負值。期望接收的包數(shù)定義為:擴展的上一接收序號(隨后定義)減去最初接收序號。 ? ?
? 接收到的擴展的最高序列號:32比特 ? 低16比特包含從源SSRC_n來的最高接收序列號,高16比特用相應的序列號周期計數(shù)器擴展該序列號。注意在同一會議中的不同接收者,若啟動時間明顯不同,將產(chǎn)生不同的擴展項。 ? ?
? 到達間隔抖動:32比特 ? RTP數(shù)據(jù)包到達時刻統(tǒng)計方差的估計值。測量單位同時間戳單位,用無符號整數(shù)表達。到達時間抖動定義為一對包中接收者相對發(fā)送者的時間間隔差值的平均偏差(平滑后的絕對值)。如以下等式所示,該值等于兩個包相對傳輸時間的差值。相對傳輸時間是指:包的RTP時間戳和到達時刻接收者時鐘時間的差值。若Si是包i中的RTP時間戳,Ri是包i到達時刻(單位為:RTP時間戳單位)。對于兩個包i和j,D可以表示為? D(i,j)=(Rj-Sj)-(Ri-Si);
? 到達時刻抖動可以在收到從源SSRC_n來的每個數(shù)據(jù)包i后連續(xù)計算。利用該包和前一包i-1的偏差D(按到達順序,而非序號順序),根據(jù)公式J=J+(|D(i-1,i)|-J)/16計算。無論何時發(fā)送接收報告,都用當前的J值。
? 此處描述的抖動計算允許與協(xié)議獨立的監(jiān)視器對來自不同實現(xiàn)的報告進行有效的解釋。 ? ?
? 上一SR報文 ? (LSR):32比特 ? 接收到的來自源SSRC_n的最新RTCP發(fā)送者報告(SR)的64位NTP時間標志的中間32位。若還沒有接收到SR,該域值為零。
? 自上一SR的時間(DLSR):32比特 ? 是從收到來自SSRC_n的SR包到發(fā)送此接收報告塊之間的延時,以1/65536秒為單位。若還未收到來自SSRC_n的SR包,該域值為零。 ? ?
? 假設SSRC_r為發(fā)出此接收報告塊的接收者。源SSRC_n可以通過記錄收到此接收報告塊的時刻A來計算到SSRC_r的環(huán)路傳輸時延。可以利用最新的SR時間標志(LSR)計算整個環(huán)路時間A-LSR,然后減去此DLSR域得到環(huán)路傳輸?shù)臅r延。 ?
如下圖所示。
?
2、接受者報告
?
轉載于:https://www.cnblogs.com/frkang/p/3347606.html
總結
以上是生活随笔為你收集整理的RTP/RTCP/RTSP协议分析(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql主从同步单个表实验记录
- 下一篇: 第二章例2-1