RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550(RFC1889为其过时版本)。RFC3550不只定义了RTP,并且定义了配套的相关协议RTCP(Real-time Transport Control Protocol,即实时传输控制协议)。html
RTP用来为IP网上的语音、图像、传真等多种须要实时传输的多媒体数据提供端到端的实时传输服务。RTP为Internet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。算法
RTP的应用环境缓存
RTP用于在单播或多播网络中传送实时数据。它们典型的应用场合有以下几个。网络
流媒体工具
流媒体是指Internet上使用流式传输技术的连续时基媒体。ui
当前在Internet上传输音频和视频等信息主要有两种方式:下载和流式传输编码
下载状况下,用户须要先下载整个媒体文件到本地,而后才能播放媒体文件。在视频直播等应用场合,因为生成整个媒体文件要等直播结束,也就是用户至少要在直播结束后才能看到直播节目,因此用下载方式不能实现直播。spa
流式传输是实现流媒体的关键技术。使用流式传输能够边下载边观看流媒体节目。因为Internet是基于分组传输的,因此接收端收到的数据包每每有延迟和乱序(流式传输构建在UDP上)。要实现流式传输,就是要从下降延迟和恢复数据包时序入手。在发送端,为下降延迟,每每对传输数据进行预处理(下降质量和高效压缩)。在接收端为了恢复时序,采用了接收缓冲;而为了实现媒体的流畅播放,则采用了播放缓冲。操作系统
使用接收缓冲,能够将接收到的数据包缓存起来,而后根据数据包的封装信息(如包序号和时戳等),将乱序的包从新排序,最后将从新排序了的数据包放入播放缓冲播放。翻译
为何须要播放缓冲呢?容易想到,因为网络不可能很理想,而且对数据包排序须要处理时耗,咱们获得排序好的数据包的时间间隔是不等的。若是不用播放缓冲,那么播放节目会很卡,这叫时延抖动。相反,使用播放缓冲,在开始播放时,花费几十秒钟先将播放缓冲填满(例如PPLIVE),能够有效地消除时延抖动,从而在不太损失实时性的前提下实现流媒体的顺畅播放。
到目前为止,Internet 上使用较多的流式视频格式主要有如下三种:RealNetworks 公司的RealMedia ,Apple 公司的QuickTime 以及Microsoft 公司的Advanced Streaming Format (ASF) 。
上面在谈接收缓冲时,说到了流媒体数据包的封装信息(包序号和时戳等),这在后面的RTP封装中会有体现。另外,RealMedia这些流式媒体格式只是编解码有不一样,但对于RTP来讲,它们都是待封装传输的流媒体数据而没有什么不一样。
怎样重组乱序的数据包
能够根据RTP包的序列号来排序。
怎样得到数据包的时序
能够根据RTP包的时间戳来得到数据包的时序。
声音和图像怎么同步
根据声音流和图像流的相对时间(即RTP包的时间戳),以及它们的绝对时间(即对应的RTCP包中的RTCP),能够实现声音和图像的同步。
接收缓冲和播放缓冲的做用
接收缓冲用来排序乱序了的数据包;播放缓冲用来消除播放的抖动,实现等时播放。
RTP(实时传输协议),顾名思义它是用来提供实时传输的,于是能够当作是传输层的一个子层。给出了流媒体应用中的一个典型的协议体系结构。下图给出了RTP协议与其余协议之间的关系。RTP、TCP、UDP都属于传输层协议; RTP也能够认为是介于应用层与传输层之间
RTP被划分在传输层,它创建在UDP上。同UDP协议同样,为了实现其实时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量。服务质量由RTCP来提供。
很多人也把RTP归为应用层的一部分,这是从应用开发者的角度来讲的。操做系统中的TCP/IP等协议栈所提供的是咱们最经常使用的服务,而RTP的实现仍是要靠开发者本身。所以从开发的角度来讲,RTP的实现和应用层协议的实现没不一样,因此可将RTP当作应用层协议。
RTP实现者在发送RTP数据时,需先将数据封装成RTP包,而在接收到RTP数据包,须要将数据从RTP包中提取出来。
一个协议的封装是为了知足协议的功能需求的。RTP封装中应该有同步源和时戳等字段,具体封装形式以下
另外还包括如下字段
RTP的会话过程
当应用程序创建一个RTP会话时,应用程序将肯定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成,有两个端口:一个给RTP包,一个给RTCP包,使得RTP/RTCP数据可以正确发送。RTP数据发向偶数的UDP端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1),这样就构成一个UDP端口对。 RTP的发送过程以下,接收过程则相反。
RTP须要RTCP为其服务质量提供保证,所以须要介绍一下RTCP的相关知识。
RTCP的主要功能是:服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识。
在RTP会话期间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,所以,各参与者能够利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,于是特别适合传送网上的实时数据。
RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,于是分组很短,因此能够将多个RTCP分组封装在一个UDP包中。RTCP有以下五种分组类型。
类型 |
缩写表示 |
用途 |
200 |
SR(Sender Report) |
发送端报告 |
201 |
RR(Receiver Report) |
接收端报告 |
202 |
SDES(Source Description Items) |
源点描述 |
203 |
BYE |
结束传输 |
204 |
APP |
特定应用 |
表 1 RTCP的5种分组类型
上述五种分组的封装大同小异,下面只讲述SR类型,而其它类型请参考RFC3550。
发送端报告分组SR(Sender Report)用来使发送端以多播方式向全部接收端报告发送状况。SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。
实时流协议RTSP
实时流协议RTSP(Real-Time Streaming Protocol)是IETF提出的协议,对应的RFC文档为RFC2362。
RTSP是一个应用层协议(TCP/IP网络体系中)。它以C/S模式工做,它是一个多媒体播放控制协议,主要用来使用户在播放流媒体时能够像操做本地的影碟机同样进行控制,便可以对流媒体进行暂停/继续、后退和前进等控制。
资源预约协议RSVP
资源预约协议RSVP(Resource Reservation Protocol)是IETF提出的协议,对应的RFC文档为RFC2208。
RSVP工做在IP层之上传输层之下,是一个网络控制协议。RSVP经过在路由器上预留必定的带宽,能在必定程度上为流媒体的传输提供服务质量。在某些试验性的系统如网络视频会议工具vic中就集成了RSVP。