全部博文(346)
分类: LINUX
2010-05-06 13:41:32
流媒体是指Internet上使用流式传输 技术的连续时基媒体。当前在Internet上传输音频和视频等信息主要有两种方式:下载和流式传输。
下载情况下,用户需要先下载整个媒体文件到本地,然后才能播放媒体文件。在视频直播等应用场合,由于生成整个媒体文件要等直播结束,也就 是用户至少要在直播结束后才能看到直播节目,所以用下载方式不能实现直播。
流式传输是指传输之前首先对多媒体进行预处理(降低质量和高效压缩),然后使用缓存系统来保证数据连续正确地进 行传输。使用流式传输可以边下载边观看流媒体节目,使传输那些事先不知道或无法知道大小的媒 体数据(如网上直播、视频会议等) 成为可能。
目前,支持流媒体传输的协议主要有:实时传输协议RTP、实时传输控制协议RTCP和实 时流协议RTSP(Real-time Streaming Protocol) 等。
实时传输协议 RTP(Real-time Transport Protocol)
RTP是IETF提出的一个标准,对应的RFC文档为RFC3550(RFC1889为其过期版本)。 RFC3550不仅定义了RTP,而且定义了配套的相关协议RTCP(Real-time Transport Control Protocol,即实时传输控制协议)。
RTP 为实时应用提供端到端的运输,但不提供任何服务质量的保证,服务质量由RTCP来提供。多媒体数据块经 压缩编码处理后,先送给 RTP 封装成为 RTP 分组,再装入运输层的 UDP 用户数据报,然后再交给 IP 层。
RTP的协议层次
从应用开发者的角度看,RTP 应当是应用层的一部分。在应用的发送端,开发者必须编 写用 RTP 封装分组的程序代码,然后把 RTP 分组交给 UDP 插口接口。在接收端,RTP 分组通过 UDP 插口接口进入应用层后,还要利用开发者编写的程序代码从 RTP 分组中把应用数据块提取出来。
RTP 封装了多媒体应用的数据块。由于 RTP 向多媒体应用程序提供了服务(如时间戳和序号),因此也可以将 RTP 看成是在 UDP 之上的一个运输层的子层。
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端口对中的奇数端口。
RTP分组只包含RTP数据,而控制是由另一个配套使用的RTCP协议提供。 RTP在1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个奇数UDP端口号。端口号5004和 5005分别用作RTP和RTCP的默认端口号。
RTP数据包格式
在RTP分组的首部中,前12个字节是必须的,12字节以后的是可选的。完整的RTP 数据包格式如下:
RTP是目前解决流媒体实时传输问题的最好办法,存在一些开放源代码的RTP库,如LIBRTP、JRTPLIB等。JRTPLIB是一个面向对象的 RTP库,它完全遵循RFC 3550(RFC 1889已过时)设计,是一个用C++语言实现的RTP库。
实时传输控制协议 RTCP (RTP Control Protocol)
RTCP 是与 RTP 配合使用的协议。
RTCP 协议的主要功能是:服务质量的监视与反馈、媒体间的同步,以 及多播组中成员的标识。RTCP 分组也使用 UDP 传送,但 RTCP 并不对声音或视像分组进行封装。可将多个 RTCP 分组封装在一个 UDP 用户数据报中。RTCP 分组周期性地在网上传送,它带有发送端和接收端对服务质量的统计信息报告。
RTCP使用的五种分组类型
结束分组 BYE 表示关闭一个数据流。
特定应用分组 APP 使应用程序能够定义新的分组类型。
接收端报告分组 RR 用来使接收端周期性地向所有的点用多播方式进行报告。
发送端报告分组 SR 用来使发送端周期性地向所有接收端用多播方式进行报告。
源点描述分组 SDES 给出会话中参加者的描述。