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