RTP/RTCP/RTSP协议分析(2)

1、发送者报告

RTCP协议处理机根据定义了五种类型的报文:
RR: receiver report
SR: sender report
SDES: source description items.
BYE: indicates end of participation.
APP: application specific functions
它们完成接收、分析、产生和发送控制报文的功能。

发送者报告包由3部分组成,若定义,可能跟随第4个面向协议的扩展部分。

第一部分   头部 8bytes

V:(2bits)版本号,固定值为2

P:(1bit)填充标识,如果设置位1,则在所有的RTCP包后,有一部分填充数据。

RC:(5bits) 该包中所含接收报告块的数目;

PT:(8bits) 包类型;固定值位200

length:(16bits)该RTCP包的长度减1。其单位是32比特字,包括头和任何填充字节。(偏移量1保证零值有效,避免了在扫描RTCP包长度时可能发生的无限循环,同时以32比特为单位避免了对以4为倍数的有效性检测。)   

SSRC:(32bits)SR包发送者的同步源标识符;

第二部分  发送者信息 20字节

NTP时间戳:(64bits)   指示了此报告发送时的背景时钟(wallclock)时刻,它可以与从其它接收者返回的接收报告块中的时间标志结合起来,计算往返每个接收者所花的时间。接收者应让NTP时间戳的精度远大于其他时间戳的精度。时间戳测量的不确定性不可知,因此也无需指示。一个系统可能没有背景时钟的概念,而只有系统指定的时钟,如系统时间(system uptime)。在这样的系统中,此时钟可以作为参考计算相对NTP时间戳。选择一个公用的时名是非常重要的。这样多个独立的应用都可以使用相同的时钟。到2036年,相对和绝对NTP时间戳会产生大的差异。到那时,我们希望不再需要相对时钟。一个发送者,如果不用背景时钟时间或逝去时间,可以设置此项为零。    

RTP时间戳:(32bits)   与以上的NTP时间标志对应同一时刻。与数据包中的RTP时间戳具有相同的单位和偏移量。这个一致性可以用来让NTP时间标志已经同步的源之间进行媒体内/间同步,还可以让与媒体无关的接收者估计名义RTP时钟频率。注意在大多数情况下此时间戳不等于任何临近的RTP包中的时间戳。RTP时间戳可以由相应的NTP时间戳计算得到。依据的是“RTP时间戳计数器”和“在采样时通过周期性检测背景时钟时间得到的实际时间”两者之间的关系。

 (在RTCP SR包中有NTP时间戳、RTP时间戳,它们可以计算背景时钟和RTP时钟之间的对应关系,通过这个关系,可以由RTP数据包中的RTP时间戳计算也相应的回放时刻。这样就可以进行多个流的同步了。之所以要有NTP时间戳,是因为不同流的RTP时间戳有不同的随机偏移量,无法直接进行同步:笔者注。)

发送的报文数:(32bits)   从开始传输到此SR包产生时该发送者发送的RTP数据包总数。若发送者改变SSRC识别符,该计数器重设。

发送的字节文数:(32bits)   从开始传输到此SR包产生时该发送者在RTP数据包发送的字节总数(不包括头和填充)。若发送者改变SSRC识别符,该计数器重设。此域可以用来估计平均的负载数据发送速率。    

第三部分 

零到多个接收报告块。块数等于从上一个报告以来该发送者侦听到的其它源(不包括自身)的数目。每个接收报告块传输从某个同步源来的数据包的接收统计信息。若数据源因冲突而改变其SSRC标识符,接收者重新设置统计信息。这些统计信息有:    

  SSRC_n(同步源标识符):32比特   在此接收报告块中信息所属源的SSRC标识符。    

  丢包率:8比特   自从前一SR包或RR包发送以来,从SSRC_n传来的RTP数据包的丢失比例。以定点小数的形式表示。该值定义为损失包数/期望接收的包数。若由于包重复而导致包丢失数为负值,丢包率设为零。注意在收到上一个包后,接收者无法知道以后的包是否丢失。如:若在上一个接收报告间隔内从某个源发出的所有数据包都丢失,那么将不为此数据源发送接收报告块。

  累计包丢失数:24比特   从开始接收到现在,从源SSRC_n发到本源的RTP数据包的丢包总数。该值定义为:期望接收的包数-实际接收的包数。接收的包括复制的或迟到的。由于迟到的包不算作损失,在发生复制时丢包数可能为负值。期望接收的包数定义为:扩展的上一接收序号(随后定义)减去最初接收序号。    

  接收到的扩展的最高序列号:32比特   低16比特包含从源SSRC_n来的最高接收序列号,高16比特用相应的序列号周期计数器扩展该序列号。注意在同一会议中的不同接收者,若启动时间明显不同,将产生不同的扩展项。    

  到达间隔抖动:32比特   RTP数据包到达时刻统计方差的估计值。测量单位同时间戳单位,用无符号整数表达。到达时间抖动定义为一对包中接收者相对发送者的时间间隔差值的平均偏差(平滑后的绝对值)。如以下等式所示,该值等于两个包相对传输时间的差值。相对传输时间是指:包的RTP时间戳和到达时刻接收者时钟时间的差值。若Si是包i中的RTP时间戳,Ri是包i到达时刻(单位为:RTP时间戳单位)。对于两个包i和j,D可以表示为  D(i,j)=(Rj-Sj)-(Ri-Si);

  到达时刻抖动可以在收到从源SSRC_n来的每个数据包i后连续计算。利用该包和前一包i-1的偏差D(按到达顺序,而非序号顺序),根据公式J=J+(|D(i-1,i)|-J)/16计算。无论何时发送接收报告,都用当前的J值。

  此处描述的抖动计算允许与协议独立的监视器对来自不同实现的报告进行有效的解释。    

  上一SR报文   (LSR):32比特   接收到的来自源SSRC_n的最新RTCP发送者报告(SR)的64位NTP时间标志的中间32位。若还没有接收到SR,该域值为零。

  自上一SR的时间(DLSR):32比特   是从收到来自SSRC_n的SR包到发送此接收报告块之间的延时,以1/65536秒为单位。若还未收到来自SSRC_n的SR包,该域值为零。    

  假设SSRC_r为发出此接收报告块的接收者。源SSRC_n可以通过记录收到此接收报告块的时刻A来计算到SSRC_r的环路传输时延。可以利用最新的SR时间标志(LSR)计算整个环路时间A-LSR,然后减去此DLSR域得到环路传输的时延。  

 如下图所示。

 

2、接受者报告

原文地址:https://www.cnblogs.com/frkang/p/3347606.html