1 RTP协议背景及概述
流(Streaming)是近年在Internet上出现的新概念,其定义非常广泛,主要是指通过网络传输多媒体数据的技术总称。
流式传输分为两种
- 顺序流式传输 (Progressive Streaming)
- 实时流式传输 (Real time Streaming)
实时流式传输是实时传送,特别适合现场事件。“实时”是指在一个应用中数据的交付必须与数据的产生保持精确的时间关系,这需要相应的协议支持,这样RTP和RTCP就相应的出现了。
RTP全名:Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550。
- RFC3550定义了RTP,也定义了配套的实时传输控制协议RTCP(Real-time Transport Control Protocol)。
- RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。
- RTP为Internet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。
详细的协议参考:
链接:https://pan.baidu.com/s/10fMJI8AQFZAqvUChBpVD_g
提取码:rd1v
RTP协议原理:较简单,负责对流媒体数据进行封包并实现媒体流的实时传输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行数据包的传输。
RTCP原理:向会话中的所有成员周期性地发送控制包来实现的,应用程序通过接收这些控制数据包,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进行控制或者对网络状况进行诊断。
RTP在端口号1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个基数UDP端口号。
默认端口号: RTP:5004 RTCP:5005
从下图可看出RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量。服务质量由RTCP来提供。
2 RTP协议封装
多媒体处理流程
从开发者的角度看,RTP 应当是应用层的一部分。
RTP实现者在发送RTP数据时,需先将数据封装成RTP包,而在接收到RTP数据包,需要将数据从RTP包中提取出来。
下图为RTP部格式:
有效载荷类型:7位,指出后面的RTP数据属于何种格式的应用。应用层可根据次类型进行处理。
音频:μ律PCM(0),GMS(3) A律PCM(8),G.722(9),G728(1)
视频:活动JPEG(26)、H.261(31)、 MPEG1(32)、MPEG2(33)、H.264(96)等
RTCP的主要功能
- 提供数据传输质量的反馈
- 为每个RTP源传输一个固定的识别符CNAME
- 知晓成员数目,控制包的发送速率
- 传输最小连接控制信息,如参加者标识
RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型:
发送端报告分组SR(Sender Report)用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。
3 RTP协议关键技术
- 时间戳
- 时延
- 抖动
- 丢包率
- 会话和流两级分用
****************************************************************************************************
时间戳(1)
时间戳字段是RTP首部中说明数据包时间的同步信息,是数据能以正确的时间顺序恢复的关键。
时间戳的值给出了分组中数据的第一个字节的采样时间,要求发送方时间戳的时钟是连续、单调增长的,即使在没有数据输入或发送数据时也是如此。
在静默时,发送方不必发送数据,保持时间戳的增长,在接收端,由于接收到的数据分组的序号没有丢失,就知道没有发生数据丢失,而且只要比较前后分组的时间戳的差异,就可以确定输出的时间间隔。
时间戳(2)
RTCP 中的 SR (Sender Report发送端报告)控制分组包含NTP(网络时间)时间戳和RTP时间戳可用于同步音视频媒体流。
RTP时间戳是依据邻近的RTP数据包中的时间戳结合NTP时间差得到的。
公式表达为:RTP_tsi = tsi + NTPi - NTP'i
RTP_tsi表示RTCP中的RTP时间戳;tsi表示邻近的RTP包中的时间戳;NTPi表示RTCP的网络时间戳;NTP'i表示邻近的RTP包对应的网络时间戳;下标表示第i个源。
时间戳(3)
因此,i和源j之间的相对时差可以表示为:
RTP_tsi - RTP_tsj = ( tsi + NTPi - NTP'i ) - ( tsj + NTPj - NTP'j )
(RTP_tsi – tsi)-( RTP_tsj - tsj) = (NTPi –NTP'i) - (NTPj—NTP'j)
由于NTP同步,差值可以反映出两个源的相对时差。因为要同步不同来源的媒体流,必须使得同步他们的绝对时间基准,而NTP时间戳正是这样的绝对时间基准。
应用RTP时间戳来保证同一来源的媒体流同步。
****************************************************************************************************
时延
影响时延的因素有多个方面:
- 编解码
- 网络
- 防抖动缓冲
- 报文队列
其中有些是固定时延,如编解码网络速率等;有些是变化的,如防抖动缓冲等,固定的时延可以通过改变编解码方式和提高网络速率来改变,而变化时延通常采用提高转发效率来提高。
****************************************************************************************************
抖动
到达时刻抖动J的定义:一对包中接收机相对发射机的时间跨度差值的平均偏差。
该值等于两个包相对传输时间的差值,相对传输时间是指包的RTP时间标志和到达时刻接收机时钟,以同一单位的差值.若Si是包i的RTP时间标志,Ri是包i以RTP时间标志单位的到达时刻值。对于两个包i和j,D可以表达为
D(i,j) = (Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)
到达时刻抖动可以在收到从源SSRC_n来的每个数据包i后连续计算,利用该包和前一包i-1的偏差D。
根据公式J(i) = J(i-1) + (|D(i-1,i)| - J(i-1))/16计算
****************************************************************************************************
丢包率
丢包率是通过计算接收包数量和发送包数量的比率得到。
流程
发送方:每间隔一定时间读取每个发送通道的发包数量和数据长度,组成一个此通道的RTCP报文发送给接收方,同时将发送数据包计数清零。
接收方:收到RTCP包后,读取接收通道接收到的包数量,并计算出丢包率,通过一个RTCP接收汇报包发送给发送方,同时对接收数据包计数清零。
****************************************************************************************************
会话和流两级分化
一个RTP会话包括传给某个指定目的地对的所有通信量,发送方可能包括多个。而从同一个同步源发出的RTP分组序列称为流(Stream),一个RTP会话可能包含多个RTP流。
一个RTP分组在服务器端发送出去的时候总是要指定属于哪个会话和流,在接收时也需要进行两级分用,即会话分用和流分用。
只有当RTP使用同步源标识和分组类型把同一个流中的分组组合起来,才能够使用序列号和时间戳对分组进行排序和正确回放。
RTP协议运用
RTP协议应用方案——单播
在客户端与媒体服务器之间建立一个单独的数据通道,从一台服务器送出的每个数据包只能传送给一个客户端,这种传送方式称为单播。
- 优点:便于控制和管理
- 缺点:每个用户必须分别对媒体服务器发送单 独的查询,而媒体服务器必须向每个用户发送所申请的数据包拷贝。这种巨大冗余造成服务器负担沉重,响应需要很长时间
RTP协议应用方案——广播
广播指的是用户被动地接收流。
在广播过程中,数据包的单独一个拷贝将发送给网络上的所有用户,客户端接收流,但不能控制流; 广播方式中资料包的单独一个拷贝将发送给网络上的所有用户, 而不管用户是否需要,会非常浪费网络带宽。
- 优点:简单
- 缺点:浪费网络带宽
组播技术构建的网络,允许路由器一次将数据包复制到多个通道上。采用组播方式,媒体服务器只需要发送一个信息包,所有发出请求的客户端即可同时收到连续数据流而无延时。
组播吸收了单播和广播两种发送方式的长处, 克服了上述两种发送方式的弱点。
- 优点:减少网络上传输的信息包的总量;网络利用效率大大提高,成本大为下降。
- 缺点:当不同的用户同时点播同一个节目时,由于点播总有先后顺序,后点播的用户依照网络中同时点播此节目的其它用户的播放进度,这就造成当前用户极有可能从节目的中间开始看起,很难做到个性化。
RTP协议安全
RTP提供的安全性包括保密性、认证与完整性、密钥管理。
保密性
客户端都支持缺省的加密算法 ,RTCP包头随机附加前缀加以迷惑,CBC模式具有随机接入功能,实现加密的同时还能保证丢失的包不 被他自己或下一个包解密。
认证与完整性
RTP标准协议对任何认证过程都不加特别说明,除非在密钥已知时采用内部认证。仅在通过其他方法认证RTP流媒体时,命令行认证机制才启动工作。
密钥管理
由SIP,SAP和SDP协议完成,这些协议有强大的认证功能和密钥管理功能。