RTCP包括五种数据包类型(RFC3550 Page69):
abbrev. name value(该值RTCP头格式中的PT类型字段)
SR sender report 200
RR receiver report 201
SDES source description 202
BYE goodbye 203
APP application-defined 204
RTCP报文格式如下(RFC3550 Page35):
下面解释几个难懂的字段:
NTP
Ntp把当前时间(自1970.1.1以来的秒数)分为整数部分N和小数部分X
Ntp高位=整数部分N+2208988800UL (其中2208988800UL表示自1900.1.1到1970.1.1的秒数)
Ntp低位=小数部分X* 4294967296 (其中4294967296为2^32)
RTP时间戳
以sample为单位,如音频8000HZ,一个packet为20ms,则两个rtp时间戳的间隔为160.
从rtp时间戳换算成ms的公式为:
rtp时间戳*1000/samplerate。
Jitter
设接收到两个rtp包的时间间隔,换算成以sample为单位。(Rj - Ri)
两个rtp包中rtp时间戳间隔为:(Sj - Si)
则该次jitter为D(i,j) = (Rj - Ri) - (Sj - Si)
总的jitter值取平均,计算公式为:J(i) = J(i-1) + (|D(i-1,i)| - J(i-1))/16
rtcp中jitter值以sample为单位,换算成ms的公式为:jitter*1000/samplerate
LSR
取自上一个接收到的SR包中的ntp值,取值公式为:
ntp_msw&0xffff + ntp_lsw>>16 (取ntp_msw的低16位和ntp_lsw的高16位)
DLSR
从接收到上一个SR包到发送此接收报告块之间的延时,以1/65536秒为单位.
根据LSR和DLSR计算RTT
设接收到该报告块的时间为A,A的计算公式同NTP,并取msw的低16位和lsw的高16位。
RTT=(A-LSR-DLSR)>>16
该公式计算出的RTT以秒为单位
部分原文:https://blog.youkuaiyun.com/lipku/article/details/50183405