RTP协议介绍
- 格式:pdf
- 大小:827.40 KB
- 文档页数:35
3.1. RTP协议分析
3.1.1. RTP是什么
RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的
一个标准,对应的RFC文档为RFC3550(RFC1889为其过期版本)。RFC3550
不仅定义了RTP,而且定义了配套的相关协议RTCP(Real-time Transport Control Protocol,即实时传输控制协议)。RTP用来为IP网上的语音、图像、传真等多
种需要实时传输的多媒体数据提供端到端的实时传输服务。RTP为Internet上端
到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP
来提供。
3.1.2. RTP的协议层次
——传输层的子层
RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实
时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间
信息和流同步,但并不保证服务质量。服务质量由RTCP来提供。
3.1.3. RTP协议原理
RTP协议原理比较简单,负责对流媒体数据进行封包并实现媒体流的实时传
输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行
数据包的传输,具体见本文2.2.1RTP数据格式;RTP本身只保证实时数据的传
输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞
控制,它依靠RTCP提供这些服务。
3.1.3.1. RTP的封装
版本号(V):2比特,用来标志使用的RTP版本。
填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填
充字节。
扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。 CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。
标记位(M):1比特,该位的解释由配置文档(Profile)来承担。
载荷类型(PT):7比特,标识了RTP载荷的类型。
序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增
加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。
时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会
话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值
也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可
缺少的。
同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐
了MD5随机算法。
贡献源列表(CSRC List):0~15项,每项32比特,用来标志对一个RTP
混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC
标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的
身份。
3.1.3.2. RTP的会话过程
当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目
的传输地址由一个网络地址和一对端口组成,有两个端口:一个给RTP包,一
个给RTCP包,使得RTP/RTCP数据能够正确发送。RTP数据发向偶数的UDP
端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端
口+1),这样就构成一个UDP端口对。 RTP的发送过程如下,接收过程则相反。 1) RTP协议从上层接收流媒体信息码流(如H.263),封装成RTP数据包;RTCP
从上层接收控制信息,封装成RTCP控制包。
2) RTP将RTP 数据包发往UDP端口对中偶数端口;RTCP将RTCP控制包发往
UDP端口对中的接收端口。 3.1.3.3. RTCP的封装(可略去)
RTP需要RTCP为其服务质量提供保证,因此下面介绍一下RTCP的相关知
识。 RTCP的主要功能是:服务质量的监视与反馈、媒体间的同步,以及多播组
中成员的标识。在RTP会话期 间,各参与者周期性地传送RTCP包。RTCP包
中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,各参与
者可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP
配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合
传送网上的实时数据。 类型 缩写表示 用途 200 SR(Sender Report) 发送端报告 201 RR(Receiver Report) 接收端报告 202 SDES(Source Description Items) 源点描述
203 BYE 结束传输 204 APP 特定应用 从图 1可以看到,RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控
制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP
有如下五种分组类型。
3.1.3.4. RTCP工作机制(可略去)
RTCP报文不封装音视频数据,而是封装发送端或者接收端的统计报表信息;
在RTP会话期间,每个参与者周期性的向其它参与者发送RTCP控制信息
包,如下图1-2所示:
因为网络的情况很不稳定,如果网络情况好我们可以减少语音的延迟时间,
也可以增大视频的发送帧率或质量。若网络状况不好我们可以增大语音延迟时间
以保证语音连续,也可减少视频的发送帧率或质量,以减少网络的阻塞。 RTCP包的发送率根据与会者的数量来调整。 3.1.4. RTP协议关键技术指标
3.1.4.1. 时间戳
时间戳字段是RTP首部中说明数据包时间的同步信息,是数据能以正确的
时间顺序恢复的关键。时间戳的值给出了分组中数据的第一个字节的采样时间(Sampling Instant),要求发送方时间戳的时钟是连续、单调增长的,即使在没有
数据输入或发送数据时也是如此。在静默时,发送方不必发送数据,保持时间戳
的增长,在接收端,由于接收到的数据分组的序号没有丢失,就知道没有发生数
据丢失,而且只要比较前后分组的时间戳的差异,就可以确定输出的时间间隔。
RTP规定一次会话的初始时间戳必须随机选择,但协议没有规定时间戳的单
位,也没有规定该值的精确解释,而是由负载类型来确定时钟的颗粒,这样各种
应用类型可以根据需要选择合适的输出计时精度。
在RTP传输音频数据时,一般选定逻辑时间戳速率与采样速率相同,但是
在传输视频数据时,必须使时间戳速率大于每帧的一个滴答。如果数据是在同一时刻采样的,协议标准还允许多个分组具有相同的时间戳值,如多个分组属于同
一画像。
3.1.4.2. 时延
影响时延的因素有多个方面:编解码、网络、防抖动缓冲、报文队列等都影
响时延,其中有些是固定时延,如编解码网络速率等;有些是变化的,如防抖动
缓冲和队列调度等,固定的时延可以通过改变编解码方式和提高网络速率来改
变,而变化的时延通常采用提高转发效率来提高。
3.1.4.3. 抖动
在视频电话中,语音、视频数据都是使用UDP协议传送的,但这种协议传
输的数据包在网络层不能保证其发送顺序,需要应用层进行排序。在网络的传输
中都会有延时,且随着网络负载的变化,延时的长短也不相同,对于语音数据,
如果接收方收到后立即播放,很容易造成语音的抖动。
RTP数据包到达时刻统计方差的估计值,以时间标志为单位测量,用无符号整
数表达
到达时刻抖动J定义为一对包中接收机相对发射机的时间跨度差值的平均
偏差(平滑后的绝对值).如以下等式所示,该值等于两个包相对传输时间的差值,相
对传输时间是指包的RTP时间标志和到达时刻接收机时钟,以同一单位的差值.
若Si是包i的RTP时间标志,Ri是包i以RTP时间标志单位的到达时刻值,对于
两个包i和j,D可以表达为 D(i,j) = (Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)
3.1.5. SJPHONE 与RTP/RTCP
当进行一次通话时,并不是强制所有VoIP终端发送RTCP包。在我们的实
验中,SJPHONE似乎并不发送他们(It is quite a limitation in SJPHONE)。因此
也就不能依靠RTCP包中的网络信息来进行实验数据的分析。
3.1.5.1. SJPHONE 中的RTP时间戳
基本概念:
时间戳单位:时间戳计算的单位不是秒之类的单位,而是由采样频率所代替
的单位,这样做的目的就是为了是时间戳单位更为精准。比如说一个音频的采样
频率为8000Hz,那么我们可以把时间戳单位设为1 / 8000。
时间戳增量:相邻两个RTP包之间的时间差(以时间戳单位为基准)。
采样频率: 每秒钟抽取样本的次数,例如音频的采样率一般为8000Hz
帧率: 每秒传输或者显示帧数,例如25f/s
详细解释:
首先,时间戳就是一个值,用来反映某个数据块的产生(采集)时间点的,
后采集的数据块的时间戳肯定是大于先采集的数据块的。有了这样一个时间戳,
就可以标记数据块的先后顺序。 第二,在实时流传输中,数据采集后立刻传递到RTP模块进行发送,那么,
其实,数据块的采集时间戳就直接作为RTP包的时间戳。
第三,如果用RTP来传输固定的文件,则这个时间戳就是读文件的时间点,
依次递增。 第四,时间戳的单位采用的是采样频率的倒数,例如采样频率为8000Hz时,
时间戳的单位为1 / 8000 ,在Jrtplib库中,有设置时间戳单位的函数接口,而ORTP库中根据负载类型直接给定了时间戳的单位(音频负载1/8000,视频负载
1/90000) 第五,时间戳增量是指两个RTP包之间的时间间隔,详细点说,就是发送
第二个RTP包相距发送第一个RTP包时的时间间隔(单位是时间戳单位)。 如果采样频率为90000Hz,则由上面讨论可知,时间戳单位为1/90000,我
们就假设1s钟被划分了90000个时间块,那么,如果每秒发送25帧,那么,每
一个帧的发送占90000/25 = 3600个时间块。因此,我们根据定义“时间戳增量
是发送第二个RTP包相距发送第一个RTP包时的时间间隔”,故时间戳增量应该
为3600。