初探RTCP协议

一、RTCP简介:

     前面讲解RTSP的文章里介绍了RTSP和RTP协议这章我们来介绍RTCP。RTCP的全称是实时传输控制协议(Real-time ControlProtocol,RTCP)与RTP共同定义在1996年提出的RFC 1889中,是和 RTP一起工作的控制协议RTCP主要用于提供数据分发质量反馈信息,RTSP推流,WEBRTC等都会使用到RTCP协议。在RTP会话期间,每个会话参与者周期性地向所有其他参与者发送RTCP控制信息包(控制信息包所占带宽一般不超过可用带宽的 5%),为应用程序提供会话质量或者广播性能质量的信息如:信息包数目、丢失的信息包数目和信息包的抖动等情况。可以根据反馈信息来调整传输速率,接收端可以根据反馈信息判断问题是本地的、区域性的还是全球性的,网络管理员也可以使用RTCP信息包中的信息来评估网络用于多目标广播的性能。

二、数据包详解:

    看一下RTCP的数据包格式,如下图:

版本(V):2bit,同RTP包头域,需要注意的是RTP数据包中的版本号与RTCP数据包的中的版本号是一致的。

填充(P):1bit,同RTP包头域。填充位,表示是否需要填充,0表示不填充,其不属于控制信息。在某些情况下(如加密)需要进行填充,在填充的情况下,Padding的最后一个字节用于计算应该忽略多少个字节!

接收报告计数器(RC):5bit,该SR包中的接收报告块的数目,可以为零。

包类型(PT):8bit RTCP的数据包的分组类型:。

长度域(Length):16比特,其中存放的是该SR包以32比特为单位的总长度减一。

同步源(SSRC of sender):SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。

NTP Timestamp(Network time protocol)SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。

RTP Timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。

Sender’s packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。

Sender`s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。

同步源n的SSRC标识符:该报告块中包含的是从该源接收到的包的统计信息。

丢失率(Fraction Lost):表明从上一个SR或RR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。

累计的包丢失数目:从开始接收到SSRC_n的包到发送SR,从SSRC_n传过来的RTP数据包的丢失总数。

收到的扩展最大序列号:从SSRC_n收到的RTP数据包中最大的序列号,

接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估计

上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。

上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。
 

看看PT:根据所携带的控制信息不同RTCP信息包可分为RR(接收者报告包)、SR(源报告包)、SEDS(源描述包)、BYE(离开申明)和APP(特殊应用包)五类5类:

(1)SR:

     发送端报告分组SR(Sender Report)用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。SR包的封装如下图所示:

(2) RR:

接收者报告包,用于接收非活动站的统计信息;

    SR源报告包和RR接收者报告包用于提供接收质量反馈,除包类型代码外,SR与RR间唯一的差别是源报告包含有一个20字节发送者信息段。RR针对每个信源都提供信息包丢失数、已收信息包最大序列号、到达时间抖动、接收最后一个SR的时间、接收最后一个SR的延迟等信息。SR不仅提供接收质量反馈信息(与RR相同),而且提供SSRC标识符、NTP时间戳、RTP时间戳、发送包数以及发送字节数等。根据接收者是否为发送者来决定使用SR还是RR包,活动源在发出最后一个数据包之后或前一个数据包与下一个数据包间隔期间发送SR;否则,就发送RR;SR和RR包都可没有接收报告块也可以包括多个接收报告块,其发布报告表示的源不一定是在CSRC列表上的起作用的源,每个接收报告块提供从特殊源接收数据的统计。最

(3)SDES:

SDES源描述包提供了直观的文本信息来描述会话的参加者,包括CNAME、NAME、EMAIL、PHONE、LOC等源描述项,这些为接收方获取发送方的有关信息提供了方便

(4)BYE:

断开RTCP包,是站点离开系统的报告,表示结束;

(5)APP:

APP包用于开发新应用和新特征的实验,不要求注册包类型值。带有不可识别名称的APP包应被忽略掉。测试后,如确定应用广泛,推荐重新定义每个APP包,而不用向IANA注册子类型和名称段。

ST: 5bits 同一名字下的子类型;

name:4字节应用自定义的名字

看一下RR抓包数据:

    通过抓包文件我们可以看到,RTCP包是应用层协议,截图中的RTCP包是基于UDP协议的!抓包中红色部分为RTCP数据包的头部分,蓝色部分为Receive Report的具体内容,绿色部分为源描述的具体内容。

其它的包类型读者可以自行抓捕查看,然后和包格式进行对比解析,没有必要去死记硬背这些协议。能对着协议文档看懂就行了。

Index of /rfc (rfc-editor.org)

RFC 1889: RTP: A Transport Protocol for Real-Time Applications (rfc-editor.org)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值