协议概述
实时传输控制协议。单独运行在低层协议上,由低层协议提供数据与控制包的复用。
在RTP会话期间,每个会话参与者周期性地向所有其他参与者发送RTCP控制信息包,不同的端口区分RTP信息包和RTCP信息包,如下图所示:
RTCP功能
1.为应用程序提供会话质量或者广播性能质量的信息
不封装声音数据和电视数据,封装发送/接受端的统计报表,包括发送信息包数目,丢失的信息包数目和信息包的抖动等,应用程序开发人员决定这些信息用来做什么。
2.确定RTP用户源
为每个RTP用户提供了一个全局唯一的规范名称标识符(CNAME)。
- 接收者使用它来追踪一个RTP进程的参加者,当发现冲突或者程序重新启动时,RTP中的同步源标识符SSRC可能发生改变,接收者可利用CNAME来追踪参加者。
- 接收者也需要利用CNAME在相关RTP连接中的几个数据流之间建立联系。
- 音视频同步:用于接收者使用CNAME来使得同意发送者的音视频数据相关联,然后跟进RTCP包中的计时信息来实现音视频同步。
3.控制RTCP传输间隔
为了防止占用过多的网络资源,所以需要限制RTCP信息包的流量,控制信息所占带宽一般不超过可用带宽的5%,应用程序根据参加者总数就可以调整RTCP包的发送速率。
4.传输最小进程控制信息
对于参加者可以任意进入和离开的松散会话进程十分有用,参加者可以自由进入或离开,没有成员控制或参数协调。
##RTCP信息包
以固定部分开头,紧接着的是可变长的结构单元,最后以一个32位边界结束。分成以下五类:
SR
SR:发送端报告包,用于发送和接受活动源的统计信息;发送端报告分组SR用来使发送端以多播方式向所有接收端报告发送情况。主要包括:
- 相应的RTP流的SSRC
- RTP流中最新产生的RTP分组的时间戳和NTP
- RTP流包含的分组数
- RTP流包含的字节数
SR包的封装:
版本(V):同RTP包头域
填充(P):同RTP包头域
接收报告计数器(RC):5比特,该SR包中的接受报告块的数目,可以为0
包类型(PT):8比特,SR包是200
长度域(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数据包中最大的序列号。
接受抖动(Interariival jitter):RTP数据包接受时间的统计方差估计。
上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。
上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。
RR
接受者报告包,用于接受非活动站的统计信息;
SDEC
源描述包,用于报告和站点相关的信息,包括CNAME;
BYE
断开RTCP包,是站点离开系统的报告,表示结束;
APP
应用特定函数。
其余说明
- 所有RTCP包至少把必须以两个包组合形式发送,格式如下:
1.加密前缀(Encryption prefix)
2.仅当组合包被加密,才加上一个32位随机数用于每个组合包发送
3.SR或RR:组合包中第一个RTCP包必须是一个报告包,以帮助分组头的确认。即使没有数据发送,也没有接收到数据,也要发送一个空RR,哪怕组合包中RTCP包为BYE;
4.附加RR:如报告统计源数目超过31,在初始报告后应该有附加RR包
5.SDES:包含CNAME项的SDES包必须包含在每个组合RTCP包中。SDES包可能包括其他源描述项,这要根据特别的应用需要,并同时考虑带宽限制。
6.BYE或APP:除了BYE应作为最后一个包发送,其他RTCP包类型可以任意顺序排列,包类型出现可不止一次。
RTCP传输间隔
由于RTP设计成允许应用自动扩展,可从几个人的小规模系统扩展成上千人的大规模系统。由于每个参与者需要周期性地向所有其他参与者发送RTCP控制信息包,所以需要控制控制信息包的流量,RTCP控制信息包速率必须按比例下降。
一旦确认加入到RTP会话中,即使后来被标记成非活动站,地址的状态任会被保留,地址应继续计入共享RTCP带宽地址的总数中。
SR源报告包和RR接受者报告包
SR源报告包和RR接受者报告包用于提供接收质量反馈,除包类型代码外,SR与RR间唯一的差别是源报告包含有一个20字节发送者信息段。
SDES源描述包
-
CNAM:规范终端标识SDES项目
- NAME:用户名称SDES项目
- EMAIL:电子邮件地址SDES项
- PHONE:电话号码SDES项
- LOC:用户地理位置SDES项
- TOOL:应用或工具名称SDES项
- NOTE:通知/状态SDES项
- PRIV:专用扩展SDES项
BYE断开RTCP包
如混合器接收到一个BYE包,混合器转发BYE包,而不改变SSRC/CSRC标识。如混合器关闭,在关闭之前它应该发出一个BYE包,列出混合器处理的所有源,而不只是自己的SSRC标识。
APP特殊应用包
APP包用于开发新应用和新特征的实验,不要求注册包类型值。不可识别的APP包应被忽略。如确定应用广泛,推荐重新定义每个APP包,而不用向IANA注册子类型和名称段。
RTP/RTCP不足之处
当很多人加入会话时,由于每个参与者都需要周期发送RTCP控制包,所以容易导致RTCP包泛滥。
RTCP抓包分析
send report:
recv report: