首页 > 代码库 > RTP

RTP

1.1.  RTP是什么

RTP全名是Real-time Transport Protocol实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550RFC1889为其过期版本)。RFC3550不仅定义了RTP,而且定义了配套的相关协议RTCPReal-time Transport Control Protocol,即实时传输控制协议)。RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTPInternet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。

注:注意什么叫实时传输,不能进行所谓的seek操作

1.2.  RTP的应用环境

RTP用于在单播或多播网络中传送实时数据。它们典型的应用场合有如下几个。

1)简单的多播音频会议。语音通信通过一个多播地址和一对端口来实现。一个用于音频数据(RTP),另一个用于控制包(RTCP)。

2)音频和视频会议。如果在一次会议中同时使用了音频和视频会议,这两种媒体将分别在不同的RTP会话中传送,每一个会话使用不同的传输地址(IP地址+端口)。如果一个用户同时使用了两个会话,则每个会话对应的RTCP包都使用规范化名字CNAMECanonical Name)。与会者可以根据RTCP包中的CNAME来获取相关联的音频和视频,然后根据RTCP包中的计时信息(Network time protocol)来实现音频和视频的同步。

3)翻译器和混合器。翻译器和混合器都是RTP级的中继系统。翻译器用在通过IP多 播不能直接到达的用户区,例如发送者和接收者之间存在防火墙。当与会者能接收的音频编码格式不一样,比如有一个与会者通过一条低速链路接入到高速会议,这 时就要使用混合器。在进入音频数据格式需要变化的网络前,混合器将来自一个源或多个源的音频包进行重构,并把重构后的多个音频合并,采用另一种音频编码进 行编码后,再转发这个新的RTP包。从一个混合器出来的所有数据包要用混合器作为它们的同步源(SSRC,见RTP的封装)来识别,可以通过贡献源列表(CSRC表,见RTP的封装)可以确认谈话者。

1.3.  流媒体

流媒体是指Internet上使用流式传输技术的连续时基媒体。当前在Internet上传输音频和视频等信息主要有两种方式:下载和流式传输两种方式。

下载情况下,用户需要先下载整个媒体文件到本地,然后才能播放媒体文件。在视频直播等应用场合,由于生成整个媒体文件要等直播结束,也就是用户至少要在直播结束后才能看到直播节目,所以用下载方式不能实现直播。

流式传输是实现流媒体的关键技术。使用流式传输可以边下载边观看流媒体节目。由于Internet是基于分组传输的,所以接收端收到的数据包往往有延迟和乱序(流式传输构建在UDP上)。要实现流式传输,就是要从降低延迟和恢复数据包时序入手。在发送端,为降低延迟,往往对传输数据进行预处理(降低质量和高效压缩)。在接收端为了恢复时序,采用了接收缓冲;而为了实现媒体的流畅播放,则采用了播放缓冲。

使用接收缓冲,可以将接收到的数据包缓存起来,然后根据数据包的封装信息(如包序号和时戳等),将乱序的包重新排序,最后将重新排序了的数据包放入播放缓冲播放。

为什么需要播放缓冲呢?容易想到,由于网络不可能很理想,并且对数据包排序需要处理时耗,我们得到排序好的数据包的时间间隔是不等的。如果不用播放缓冲,那么播放节目会很卡,这叫时延抖动。相反,使用播放缓冲,在开始播放时,花费几十秒钟先将播放缓冲填满(例如PPLIVE),可以有效地消除时延抖动,从而在不太损失实时性的前提下实现流媒体的顺畅播放。

到目前为止,Internet 上使用较多的流式视频格式主要有以下三种:RealNetworks 公司的RealMedia ,Apple 公司的QuickTime 以及Microsoft 公司的Advanced Streaming Format (ASF)

 

2   RTP详解

 

2.1.  RTP的协议层次

 

2.1.1.  传输层的子层

 

RTP(实时传输协议),顾名思义它是用来提供实时传输的,因而可以看成是传输层的一个子层。图 1给出了流媒体应用中的一个典型的协议体系结构。图2给出了RTP协议与其他协议之间的关系。

 

UDP、TCP、RTP三种协议的总结 - super-and-star - super-and-star的博客

 

1 流媒体体系结构

 

UDP、TCP、RTP三种协议的总结 - super-and-star - super-and-star的博客

 

2 RTP协议与其他协议的关系

 

RTP、TCP、UDP都属于传输层协议; RTP也可以认为是介于应用层与传输层之间

 

 

 

 

 

从图中可以看出,RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量。服务质量由RTCP来提供

 

 

 

2.1.2.  应用层的一部分

 

不少人也把RTP归为应用层的一部分,这是从应用开发者的角度来说的。操作系统中的TCP/IP等协议栈所提供的是我们最常用的服务,而RTP的实现还是要靠开发者自己。因此从开发的角度来说,RTP的实现和应用层协议的实现没不同,所以可将RTP看成应用层协议。

 

RTP实现者在发送RTP数据时,需先将数据封装成RTP包,而在接收到RTP数据包,需要将数据从RTP包中提取出来。

 

RTP的头部格式

RTP封装中应该有同步源和时戳等字段,但更为完整的封装是什么样子呢?请看图3

UDP、TCP、RTP三种协议的总结 - super-and-star - super-and-star的博客
 

3 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比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的

 

2.3.  RTCP的封装

RTP需要RTCP为其服务质量提供保证,因此下面介绍一下RTCP的相关知识。

RTCP的主要功能是:服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识。在RTP会话期 间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,各参与者可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTPRTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据

从图 1可以看到,RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组

UDP、TCP、RTP三种协议的总结 - super-and-star - super-and-star的博客

 

1 RTCP5种分组类型

上述五种分组的封装大同小异,下面只讲述SR类型,而其它类型请参考RFC3550

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

 

 

 

 

RTP封包中的有效负载类型(Payload Type)的栏位长度为7位元,因此RTP可以支援128种不通的有效负载类型。这个栏位用来指示声音或影像使用的编码类型,而且由发送端决定,不过当然 前提是接收端也要拥有处理的能力。如果发送端在会话或者广播的中途决定改变编码方式,发送端可通过这个栏位来通知接收端。下面列出一些目前RTP所能支援 的声音、影像有效负载类型。

有效负载号 (PT)       enconding name       audio/video(A/V)       clock rate(Hz)        channels(audio)
------------------------------------------------------------------------------------------------------------------------------------------
0                            PCMU                      A                             8000                   1      [RFC1890]
1                            1016                       A                             8000                   1      [RFC1890]
2                            G.726-32                 A                             8000                   1      [RFC1890]
3                            GSM                        A                             8000                   1      [RFC1890]
4                            G.723                      A                             8000                   1      [Kumar]
5                            DVI4                       A                             8000                   1      [RFC1890]
6                            DVI4                       A                             16000                  1      [RFC1890]
7                            LPC                         A                             8000                   1      [RFC1890]
8                            PCMA                      A                             8000                   1      [RFC1890]
9                            G.722                      A                             8000                   1      [RFC1890]
10                          L16                         A                             44100                  2      [RFC1890]
11                          L16                         A                             44100                  1      [RFC1890]
12                          QCELP                     A                             8000                   1
13                          reserved                  A
14                          MPA                        A                             90000                         [RFC1890,2250]
15                          G.728                      A                             8000                   1      [RFC1890]
16                          DVI4                       A                              11025                 1      [DiPol]
17                          DVI4                       A                              22050                 1      [DiPol]
18                          G.729                      A                             8000                   1
19                          reserved                  A  
20                          unassigned               A
21                          unassigned               A
22                          unassigned               A
23                          unassigned               A
dyn                        GSM-HR                    A                              8000                   1
dyn                        GSM-EFR                   A                              8000                   1
dyn                        L8                            A                              var.                     var.
dyn                        RED                         A
dyn                        VDVI                        A                              var.                     1
24                          unassigned               V
25                          CelB                        V                               90000                        [RFC2029]
26                          JPEG                       V                               90000                        [RFC2435]
27                          unassigned               V
28                          nv                           V                               90000                        [RFC1890]
29                          unassigned               V
30                          unassigned               V   
31                          H.261                      V                               90000                        [RFC2032]
32                          MPV                        V                               90000                        [RFC2250]
33                          MP2T                      AV                             90000                         [RFC2250]
34                          H.263                      V                               90000                        [Zhu]
35--71                    unassigned                ?
72--76                    reserved for RTCP conflict avoidance                                               [RFC1889]
77--95                    unassigned                ?
96--127                  dynamic                    ?                                                                 [RFC1890]
dyn                        BT656                     V                                90000
dyn                        H.263-1998              V                                90000
dyn                        MP1S                       V                                90000
dyn                        MP2P                       V                                90000

dyn                        BMPEG                     V                                90000

 

RTP