RTP协议
RTP为实时应用提供端到端的运输,但不提供任何服务质量的保证。多媒体数据块经过压缩编码处理后,先送给RTP封装成为RTP分组,RTP分组再装入UDP用户数据报,然后再向下地交给IP层。RTP是一个协议框架,因为它只包含了实时应用的一些共同的功能。
|
RTP报文由两部分组成:报头和有效载荷。RTP报头格式如图6.7所示,其中:
l V:RTP协议的版本号,占2位,当前协议版本号为2。
l P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
l X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头。
l CC:CSRC计数器,占4位,指示CSRC标识符的个数。
l M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
l 同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。
l 特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。
l PT: 有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等。
l 序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据。
l 时戳(Timestamp):占32位,时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
这里的同步信源是指产生媒体流的信源,它通过RTP报头中的一个32位数字SSRC标识符来标识,而不依赖于网络地址,接收者将根据SSRC标识符来区分不同的信源,进行RTP报文的分组。特约信源是指当混合器接收到一个或多个同步信源的RTP报文后,经过混合处理产生一个新的组合RTP报文,并把混合器作为组合RTP报文的SSRC,而将原来所有的SSRC都作为CSRC传送给接收者,使接收者知道组成组合报文的各个SSRC。
V:版本号;
P:填充字段标识;
X:扩展头标识;
CSRC count(CC):贡献源数目,和后面的CSRC有关。CSRC,贡献源,指的是不同步的源。在网络中,可能会有混合器将来自不同地点的RTP流混合成一个RTP流以节省带宽, CSRC用来区分不同的源;
M:标记一些重要的事件(由应用程序定义);
PT:净荷数据类型;
SN:序列号,每个分组的序列号(初始值随机),用来检测分组的丢失并恢复分组的序列;
TS:时间戳,反映RTP净荷中的第一个采样数据的采样时间。时间的粒度是净荷类型相关的。
例如,如果采样间隔是125微妙,在分组n+1中的第一个样本和在分组n中的第一个样本之间相差10毫秒,那么在这两个样本之间的采用数目将等于:
两个分组之间的时间/每个样本的时间=80
假定时钟颗粒度与采用间隔相同,那么分组n+1中的时标将比在分组n中的时标大80。
注意:时标和序列号的区别。由于像MPEG的交错帧的时标不是顺序发送的;但是顺序号必须是单调的。
SSRC:同步源标识符,用于标识同步源。同步源指的是,例如,一段影片的音频和视频通过不同的RTP流传输,它们是同步的。每个同步源是负责发送RTP分组并在RTP中设置序列号和时间戳的实体。
RTCP的主要功能是:服务质量的监视与反馈,媒体间的同步,以及多播组中成员的标识。由于RTCP分组很短,因此把多个RTCP分组封装在一个UDP用户数据报中。RTCP分组周期性的在网上传送,它带有发送端和接收端对服务质量的统计信息报告(如已发送的分组数和字节数,分组丢失率,分组到达时间间隔的抖动等)。
RTCP可以说是控制交通的协议,它提供了:
1)SR发送者报告分组:用来使发送端周期的向所有接收端用多播方式进行报告。内容包括:
该RTP流的SSRC;该RTP流中最新产生的RTP分组的时间戳和绝对时钟时间(或称墙上时间:wall clock time);该RTP流包含的分组数;该RTP流包含的字节数。
绝对时钟时间是必要的。因为RTP要求每一种媒体使用一个流。有了绝对时钟时间就可以进行图形和声音的同步。
2)RR接收者报告分组:用来使接收端周期性的向所有的点用多播方式进行报告。内容包括:
所接收到的RTP流的SSRC;该RTP流的分组丢失率;在该RTP流中的最后一个RTP分组的序号;分组到达时间间隔的抖动等。
发送RR分组有两个目的。第一,可以使所有的接收端和发送端了解当前网络的状态。
第二,可以使所有发送RTCP分组的站点自适应的调整自己发送RTCP分组的速率,RTCP分组的通信量不超过网络中的数据分组的通信量的5%,而接收端分组报告分组的通信量又应小于所有RTCP分组的通信量的75%。
3)SDES源描述分组:给出会话中参加者的描述,包括参加者的规范名(CNAME)
4)BYE分组:关闭一个数据流。
5)APP分组:应用程序能够定义新的分组类型。
一个概念:规范名字CNAME,用于标识某个实体,通常使用用户名@域名,一个实体可以产生不同的RTP流,各自有不用的SSRC,但是CNAME是固定的。