CSDN博客

img liumyong

RTSP协议研究及其在一种VOD中的实现

发表于2004/12/31 11:32:00  3401人阅读

分类: 其它

张林 王芙蓉

  随着计算机网络的发展和人们对信息多样化需求的不断提高,流媒体技术(Streaming Media Technology)的应用越来越普及,利用流媒体技术实现的交互式VOD(Video On Demand)点播技术也得到不断发展。流媒体技术是为解决中低带宽网络上多媒体信息(以视音频信息为重点)传输问题而提出的。采用流媒体技术,能够有效地突破低比特率接入Internet方式下的带宽“瓶颈”,克服文件下载传输方式的不足,实现多媒体信息在Internet上的流式传输。
  1流媒体技术与RTSP协议
  1.1流媒体技术
  流媒体技术广义上讲是使音频、视频形成稳定和连续的传输流和回放流的一系列技术、方法和协议的总称,狭义上讲仅指区别于传统播放技术的用于在IP网络上发布多媒体数据流的新技术。
  流媒体技术与传统播放技术的区别在于,传统的播放技术是由客户端从服务器下载完整的文件,然后进行播放;流媒体技术则采用了流式传输方式,即将整个多媒体文件经过特殊的压缩方式分成一个个压缩包,由视频服务器向用户计算机连续、实时传送,用户无需等待整个文件下载完毕,可以一边解压播放前面传送过来的压缩包,一边下载后续的压缩包,使启动延时大幅度地缩短,而且对系统缓存容量的需求也大大降低。
  流媒体是指采用流式传输的方式在Internet播放的媒体格式。流式传输的实现需要合适的传输协议,目前,支持流媒体传输的协议主要有实时传输协议RTP(Realtime Transport Protocol,用于Internet上针对多媒体数据流的一种传输协议)、实时传输控制协议RTCP(Realtime Transport Control Protocol,和RTP一起提供流量控制和拥塞控制服务)、实时流协议RTSP(Realtime Streaming Protocol)、预留资源协议RSVP(Resource Reserve Protocol)。
  1.2RTSP协议
  实时流协议RTSP是由Real Networks和Netscape共同提出的,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据,通常它本身并不发送连续流。可以这样说,RTSP充当多媒体服务器的网络远程控制,控制实时数据的发送。RTSP是应用级协议,可通过TCP或UDP传输RTSP,在体系结构上RTSP位于RTP和RTCP之上,使用TCP或RTP完成数据传输(RTP通常使用UDP来传送数据),但RTSP操作并不依赖用于携带连续媒体的传输机制。
  RTSP在语法和操作上与HTTP/1.1类似,因此HTTP的扩展机制大都可加入RTSP。但是HTTP与RTSP相比,HTTP传送HTML,而RTP传送的是多媒体数据;HTTP请求由客户机发出,服务器作出响应;使用RTSP时,客户机和服务器都可以发出请求,即RTSP可以是双向的。
  在RTSP协议中,每个表示及与之对应的媒体流都由一个RTSP URL(Uniform Resource Locator)标识,整个表示及媒体特性都在一个表示描述文件中定义,该文件可能包括媒体编码方式、RTSP URLs、目标地址、端口号及其他相关参数。用户在向媒体服务器请求某个连续媒体流服务之前,首先必须从媒体服务器获得该媒体流的表示描述文件以得到必需的参数。可采用HTTP或其他方法获取表示描述文件,而且这个文件没有必要保存在媒体服务器上。
  RTSP中的所有的操作都是通过服务器和客户方的消息应答来完成的,其消息包括请求和应答两类。请求消息的格式如下:
RTSP message=RequestLine CRLF
CRLF
CRLF
CRLF
  其中,表示消息头,表示消息内容,RequestLine是具体的请求命令及相关信息,其格式如下:
RequestLine=Method SP Request-URL SP RTSP-Version
其中,Method是请求命令,Request-URL是媒体表示地址,RTSP-Version是协议版本号。常见的请求消息包括:DESCRIBE、SETUP、GET_PARAMETER、SET_PARAMETER、OPTIONS、REDIRECT、PLAY、PAUSE、TEARDOWN等。
  这其中有些命令可以由客户发给服务器,也可以由服务器发给客户机,是双向的,如GET_PARAMETER,OPTIONS等;有些则只能在一个方向上传送,如DESCRIBE只能由客户发往服务器,详细介绍可参考RFC2326。
RTSP应答消息的格式如下:
RTSP message=StatusLine CRLF
CRLF
CRLF
CRLF
其中StatusLine=RTSPVersion SP StatusCode SP ReasonPhrase CRLF,StatusCode是3位状态码,用于回应请求时表示主机状态,ReasonPhrase是与状态码对应的文本解释。
  RTSP正是通过服务器和客户方的消息应答来完成媒体流的创建、初始化、VCR控制以及拆线等操作的。
  2RTSP在VOD系统中的应用
  我们设计实现的一种VOD系统采用主从备份管理以及多服务器负载分担的机制,应用RTSP协议实现网络远程播放管理。
图1显示了该VOD系统的整体结构,其中主服务器A除了担当播放服务器的功能外,还担当WEB服务器,并且负责服务器系统的负载均衡和其他的播放管理功能;从服务器B为主服务器A的备份服务器,在主服务器A正常的时候与播放服务器作用一样,在主服务器A不能工作的情况下迅速代替它,保证整个系统运行的稳定性;播放服务器运行视频服务器程序,向点播客户发送其需要的多媒体数据,这样可以较低的系统成本满足较大的容量,又可保证整个系统的稳定性和可靠性。
  图1VOD系统的结构
  主服务器A和从服务器B上运行的程序包括WEB服务器程序、视频服务器程序和数据库系统3大块。WEB服务器向点播客户发送多媒体数据的描述文件,视频服务器监听客户的点播要求并作出相应的反应,数据库系统存储视频数据的详细信息,例如文件名、文件大小、文件所在服务器地址等,还存储用户的点播记录和其他所需信息。
  图2最简单的点播流程
  图2描述了一个正常的最简单的点播流程。客户端(比如机顶盒加上显示器)首先连接到主服务器A,通过HTTP得到所需视频数据的描述文件(description file),按照得到的文件名、地址发送SETUP消息,这时候的地址就是主播放器A的地址。主播放器A得到SETUP消息,在数据库中查询客户需要文件所在的服务器的地址,并在SETUP Response的消息中告诉客户端,具体是用到Location这一项表示用户需要多媒体文件的URL。用户接收到SETUP Response,按照接收到的地址发送PLAY消息,并做好准备接收数据,该地址对应的播放服务器(其实这个地址也可能是主服务器A或从服务器B,因为它们也可以存放有多媒体数据)接收到PLAY消息,发送回复消息PLAY Response,就开始给相应客户端发送数据,数据送完,客户端发TEARDOEN消息,服务器回复,这样一个完整的点播过程结束。
  该VOD系统利用了RTSP的灵活性,使客户端最开始都将SETUP命令发送到主服务器A,而实际给客户提供数据的可能是别的服务器,实现了负载均衡,同时使得多媒体数据的管理也方便简单,只需要添加和删除文件的时候对数据库做相应的修改,这可以集成在一个管理系统中,利用数据库还可以开发更多其他的服务,比如点播计费等。
  3RTSP文本编解码的设计实现
  RTSP是基于文本的协议,采用ISO 10646字符集,使用UTF-8编码方案。协议中,行以CRLF中断,但接收者本身可将CR和LF解释成行终止符。
  VOD服务器中的RTSP模块部分的作用:一是需要解释RTSP信令,并作出相应操作,如通知上层、直接回复等;二是按照上层的指令发送RTSP信令,对应的操作就需要对RTSP信令进行解码和编码,解码类似于编译原理里面的“词法分析”,通过对文本的分析,得到需要的信息,编码则相对简单,只需要按照协议规则把相关信息组合起来。
按照RTSP请求消息的结构可以将其分为RequestLine,Message Header和Message Body 3大部分,每一部分又可以分为很多小项,形成图3所示的树状的结构。
  图3协议Request Message树状图
  为了便于对消息的扩充,定义了Request Message的数据结构为:
typedef struct _rtsprequestMsg
{
int prestkn;//存在标记
RtspRequestLine requestLine;//RequestLine这一部分
RtspMsgHeader msgHeader;//Message Header这部分
RtspMessageBody messageBody;//Message Body这部分
}RtspRequestMsg;
  可用prestkn表示解码输出是否正 确,RtspRequestLine,RtspMsgHeader和RtspMessageBody又有类似的结构,它们可以根据需要定义适合的数据结构,只是简单地增加和减少其中的项数,但是最上层的3大部分不需要修改,这样设计实现简单,而且便于维护。
  解码的时候,分解需解码的字符串,一般是按照行结束符分解,因为1行就是1项,但可能从1项中得到多个参数。采用有限状态机的原理,搜索到相应的关键字,就可以得到协议中与关键字相关的参数的值。
  编码的时候发出的是Status Message,它与Request Message结构极为相近,其数据结构不再详述。编码的时候,把要发出的参数的值填入相应的数据结构中,不存在的项将其prestkn置0,通过判断存在标记prestkn,对应协议规定的规则,根据存在的项的参数值,生成输出的信令字符串。
  4结束语
  本文介绍了流媒体技术和RTSP协议,提出一种灵活运用RTSP协议的VOD系统解决方案,并结合VOD系统对RTSP文本编解码进行了较深入的讨论,可为基于RTSP协议的各项应用提供参考。

0 0

相关博文

我的热门文章

img
取 消
img