作者:IT荒野獵人
來(lái)源:CSDN
原文:https://blog.csdn.net/sweibd/article/details/79335748
RTCP RR的格式
接受者報(bào)告的RTCP類(lèi)型是201,如圖1.1所示劲妙。
reporter ssrc
rr報(bào)告發(fā)送者的ssrc匈织,也就是rtp報(bào)文接受者自己的ssrc.
reportee ssrc
rr報(bào)告接受者的ssrc,也就是rtp報(bào)文發(fā)送者的ssrc.
cumulative number of packet lost
累積報(bào)文丟失總數(shù),該字段是一個(gè)24-bits的有符號(hào)整數(shù)瘾英。
理論計(jì)算方式, packet lost = 期待得到報(bào)文數(shù)量 - 實(shí)際收到報(bào)文的數(shù)量
實(shí)際計(jì)算方式, packet lost = 期待收到最新sequence - 第一次收到報(bào)文的sequence忌堂。
需要注意的有一下幾點(diǎn):
- sequence為16位,容易翻轉(zhuǎn)
可以通過(guò)計(jì)算extend_sequence來(lái)區(qū)分翻轉(zhuǎn)的sequence拴曲。 - packet lost可能為負(fù)數(shù)
因?yàn)橛衦tp報(bào)文的重傳争舞,如果重傳次數(shù)多,可能造成負(fù)數(shù) - 該值的測(cè)量周期是整個(gè)會(huì)話
測(cè)量周期是整個(gè)會(huì)話澈灼,而不是RR的發(fā)送間隔
extended highest sequence number received
計(jì)算方法竞川,extended_seq_num = seq_num + (65536 * wrap_around_count)
其中wrap_around_count為sequence翻轉(zhuǎn)的次數(shù)
Loss fraction
丟包率店溢,它是定義一個(gè)rr發(fā)送間隔中rtp報(bào)文的丟失率。
它是一個(gè)8bits的數(shù)據(jù)段委乌,計(jì)算方法為床牧,loss fraction=lost rate x 256.
舉例,丟包率為25%遭贸,該字段為25%*256=64
interarrival jitter
這里的延時(shí)抖動(dòng)指的是rtp報(bào)文發(fā)送方的網(wǎng)絡(luò)傳輸時(shí)間的變量估計(jì)值戈咳。
計(jì)算單位是基于時(shí)間戳的基礎(chǔ)單位,也是32位無(wú)符號(hào)整形壕吹。
因?yàn)閞tp的發(fā)送和接收方?jīng)]有時(shí)間同步系統(tǒng)著蛙,所以不大可能能準(zhǔn)確的測(cè)量網(wǎng)絡(luò)傳送時(shí)間。
相反耳贬,傳輸時(shí)間= |rtp的時(shí)間戳-rtp接受者本地時(shí)間|
因?yàn)闆](méi)有發(fā)送和接收方的時(shí)間同步機(jī)制册踩,所以這里關(guān)心的不是傳輸時(shí)間,是兩次接收到rtp報(bào)文傳輸時(shí)間的對(duì)比效拭,計(jì)算公式如圖1.2暂吉。
- R是接收到的時(shí)間戳,Rj是packet j接收到的時(shí)間戳缎患,Ri是packet i接收到的時(shí)間戳
-
S是rtp報(bào)文的時(shí)間戳慕的,Sj是packet j的rtp時(shí)間戳,Si是packet i的rtp時(shí)間戳
而Jitter的計(jì)算公式如圖1.3:
圖1.3
LSR
LSR: The last sender report timestamp挤渔,是最新接收到SR報(bào)文的時(shí)間戳肮街。
具體值是,SR報(bào)文里64位NTP時(shí)間戳中的32位bit的時(shí)間戳判导。如果沒(méi)有收到SR報(bào)文嫉父,該字段為0.
DLSR
DLSR: The delay since last sender report,是接收到SR報(bào)文的時(shí)刻與發(fā)送該RR報(bào)文時(shí)刻的時(shí)間差值眼刃,單位時(shí)間是1/65536 seconds. 如果沒(méi)有收到SR報(bào)文绕辖,該字段為0.
RTT
RTT: Round-Trip Time,發(fā)送者計(jì)算的發(fā)送來(lái)回時(shí)間擂红。
發(fā)送者可以通過(guò)RR報(bào)文中的LSR和DLSR來(lái)計(jì)算RTT仪际。
計(jì)算方法: 發(fā)送者用接收到RR報(bào)文的當(dāng)前時(shí)間-RR報(bào)文的LSR,得到發(fā)送SR和接收到RR所花費(fèi)的網(wǎng)絡(luò)延時(shí)昵骤。
再進(jìn)行: (接收到RR報(bào)文的當(dāng)前時(shí)間-RR報(bào)文的LSR) - RR中的DLSR树碱,也就是去除了在RTP接收者方本地的SR接收和RR發(fā)送的延時(shí),這樣就得到了RTT变秦。
RTT = 接收到RR報(bào)文的當(dāng)前時(shí)間-RR報(bào)文的LSR - RR中的DLSR
經(jīng)驗(yàn)表明成榜,如果RTT大于300ms,這樣的質(zhì)量網(wǎng)絡(luò)通話無(wú)法完成蹦玫。只能通過(guò)降低比特率赎婚,降低打包延時(shí)或應(yīng)用好的錯(cuò)誤修復(fù)機(jī)制來(lái)完成雨饺。