实时流媒体通信方法

文档序号:7851187阅读:272来源:国知局
专利名称:实时流媒体通信方法
技术领域
本发明涉及网络通信技术,特别涉及一种流媒体实时流协议栈RTSP的应用。
背景技术
流媒体(Streaming Media)技术是在宽带网络上以流的方式传输多媒体信息的技术。近年来,随着宽带网络的发展和用户需求的驱动,流媒体应用作为未来高速网络的主流应用的趋势已经越来越明确。现在人们已经越来越习惯在网络上收听在线音乐,收看在线电视和视频节目,通过网络进行视频聊天。
流媒体指在数据网络上按时间先后次序传输和播放的连续音/视频数据流。以前人们在网络上观看电影或收听音乐时,必须先将整个影音文件下载并存储在本地计算机上,然后才可以观看。流媒体在播放前并不下载整个文件,只将部分内容缓存,使流媒体数据流边传送边播放,这样就节省了下载等待时间和存储空间。流媒体数据流具有三个特点连续性、实时性、时序性,即其数据流具有严格的前后时序关系。
要实现流媒体的播放,必须具备以下的几个条件流媒体服务器,用于提供实时媒体流数据和响应终端的实时流控制命令;终端流媒体协议栈和播放器,用于接收、控制、处理实时媒体数据流;网络和路由设备,用于传输、转发实时媒体流。
终端流媒体协议栈和流媒体服务器端之所以可以相互通信,是因为他们使用的相同的通信协议,这里是流媒体协议。就当前的局端系统来说,以传输实时流数据使用的协议不同可以分为两类用RTSP(Real TimeStream Protocal)来传输控制流、用RTP来传输数据流的ISMA流媒体服务器;用RTSP来传输控制流、用TS来传输数据流的TS流媒体服务器。
在当前IPTV流媒体服务器中,属于ISMA阵营的有华为、中兴、思华;属于TS流阵营的有UT、西门子等。由于没有统一标准,不同服务器厂商使用的流媒体通信协议一般是不同的。主要体现在用RTSP传输实时流控制命令上。例如,有些厂商在满足RFC2326规范的基础之上,对RTSP进行了扩展。扩展主要是两方面一是,对RTSP头信息的扩展;二是,添加新的头信息字段。
对TRSP进行扩展,主要是为了满足服务器的一些特别的要求。这样做的负面影响出现了如果终端厂商要和该服务器进行流媒体通信,那么就必须知道服务器是如何扩展RTSP协议栈的。很多服务器厂商之间都是不能互通的,原因就是他们各自对RTSP进行了不同的扩展。这种局面对于终端开发厂商来说,是非常不利的。
终端如要与不同流媒体局端服务器通信,或现有的服务器更改了通信接口规范,就得更改终端的流媒体协议栈,即改写RTSP协议栈的源程序。如果终端厂商使用的是RTSP协议栈是第三方提供的二进制库,就更加麻烦,只能委托RTSP源代码提供厂商进行修改。由于市场中不同的流媒体服务器都占有一定的数量,各服务器厂商之间没有相同的RTSP协议栈的标准,导致了终端开发厂商需要和不同服务器厂商对接十分繁琐。

发明内容
本发明所要解决的技术问题是,提供了一种流媒体通信方法,能够不修改终端RTSP源程序就能和不同流媒体服务器进行通信。
本发明为解决上述技术问题所采用的技术方案是,实时流媒体通信方法,包括以下步骤a、终端根据流媒体服务器发布的流媒体通信接口规范,产生用户配置文件;b、终端RTSP协议栈自动读取配置文件,并组织生成请求消息头信息字段,向媒体流服务器发送该消息;c、流媒体服务器收到请求消息后,返回响应消息;d、终端收到返回响应消息,判断媒体流服务器,是否只是对现有RTSP头信息做扩展,而没有新的头信息字段增加,若是,进入步骤e;若否,进入步骤f;e、用链表数据结构动态保存响应消息的头信息字段扩展,进入步骤g;f、先分配一个链表单元保存该字段,并插入链表,再对每一个扩展的头字段动态保存,进入步骤g;g、在调用RTSP协议栈的播放器中做接口封装。
用户配置文件为文本文件,包括有对应该服务器的头信息,头信息字段包括有RTSP头信息的扩展,或新增加的头信息字段。在服务器端更改通信接口规范的内容后,使用本方法不需要更改终端协议栈源代码,只要更改相应的配置文件即可实现通信。
本发明的有益效果是,采用本发明的终端能够智能的和任意一家流媒体服务器对接而不需要更改协议栈源代码,只需要把服务器端所做的协议私有扩展内容写入一个配置文件并放入指定的文件目录下,换一个互通服务器只需更换一份配置文件即可。即使不会编程的人员也可以实现这种和不同服务器的对接工作,实现了终端和不同流媒体服务器对接时的快捷、高效,有很大的经济效益。
具体实施例方式
每个流媒体服务器端将其做的协议私有扩展写入一个配置文件,终端将该配置文件放入指定的文件目录下。在终端更换需要与之通信的流媒体服务器时,只需更换配置文件即可。
终端向流媒体服务器发送连接请求消息,RTSP协议栈的请求连接消息头信息字段由该用户配置文件指定发送时不是在程序内部组织方法,如描述(DESCRIBE)、建立连接(SETUP)、播放(PLAY)等,的请求字段(REQUEST)的内容,而是打开并读取用户配置文件,从文件中读取用户指定的相关内容组织REQUEST方法。例如要发送SETUP REQUEST时,从用户的配置文件中查找SETUP,找到后把相应的头信息读入缓冲区,完成组成完整的SETUP REQUEST内容,送发送模块发送。如果没有找到用户关于SETUP的定义,则说明用户没有扩展,用默认的信息组织SETUP REQUEST内容即可。这样做就使得SETUP REQUEST的内容完全由用户的配置文件指定。一些常规的变量如Cseq头,Session头等的取值是由程序内部动态产生,不需要在配置文件中指出。当服务器对SETUP做了扩展后,只要更换配置文件,不需要更改RTSP源程序就能达到和服务器互通的目的,解决了终端发送消息内容灵活配置的问题。
该配置文件中指定了常用方法的头字段信息,即RFC2326中最小执行子集(Minimal RTSP implementation)规定的方法。如Accept接收请求头,用于告知服务器终端接收媒体描述信息的方式;Transport传输请求头,用于告知服务器终端使用的接收数据的协议、和使用的端口等;Content-length指示方法包括的内容的长度;Content-type指示方法内容的类型;x-Extend、x-Timeshift_Range用户扩展的头字段。每个头字段首部用*号标明以便于在文件中查找。配置文件部分代码示例如下文件路径/usr/loclal/include/文件名config.txtC->SDESCRIBE RTSP/1.0*Acceptapplication/sdp,application/rtsl,application/mhegC->SSETUP RTSP/1.0*TransportRTP/AVP;unicast;client_port=4588-4589*x-ExtendC->SPLAY RTSP/1.0C->SGET PARAMETER RTSP/1.0*x-Timeshift_RangeC->SSET PARAMETER RTSP/1.0*Content-length20*Content-typetext/parameters流媒体服务器收到请求连接消息后,返回响应消息;终端收到返回响应消息(RTSP RESPONSE),动态扩展保存接收到的头字段的数据结构前面说过RTSP协议栈的扩展一般分为两类,当只是对现有RTSP头信息做扩展,没有新的头信息字段增加时,就不需要更改保存RTSP RESPONSE的数据结构的成员变量;用链表来实现保存RTSP RESPONSE头信息的数据结构即可。
用于保存RTSP RESPONSE的数据结构定义的部分代码如下所示链表数据结构单元定义,链表结构中,next指向下一个单元的指针;name信息头字段名;value信息头字段对应的值struct decode_response_t{decode response_t*next;char*name;void*value;};typedef struct decode_response_t decode_response;链表头的定义,链表结构中,head指向链表首单元的指针;tatal_num链表中的单元总数struct response_head_t{decode_response*head;int tatal_num;};typedef struct decode_head_t decode_head;但是当RTSP协议栈的扩展添加了新的头信息字段时,就需要添加保存RTSP RESPONSE的数据结构的成员变量,即此时该数据结构的成员是动态变化的。
当接收到的头信息字段没有在建立的链表队列中定义,即接收到的头字段是流媒体服务器新添加的头信息字段时,终端重新分配一个单元空间保存该新头信息字段,并插入到链表中。
链表的建立和成员数据单元的插入及其使用,如下所示(1)建立链表时先建立一个链表,表头指针指向空值(NULL)decode_head*link=(decode_head*)mailoc(sizeof(decode_head));memset(head,0,sizeof(decode_head));(2)把一些常规的头信息字段(如Session,Cseq等)插入到链表中,以把Session字段插入到链表中为例decode_response*tmp=(decode_response*)malloc(sizeof(decode_response));memset(tmp,0,sizeof(decode_response));tmp->name=”Session”;tmp->next=link->head;link->head=tmp;link->taltal_num++;(3)收到的新添加的头信息字段插入到链表中,例如接收到的头信息字段在当前链表中没有找到,表示接收到了服务器新添加的头信息字段,假设为”x-Info123456”,其中x-Info为添加的头信息字段名,123456为该头信息字段的值。则插入操作如下decode_response*tmp=(decode_response*)malloc(sizeof(decode_response));
memset(tmp,0,sizeof(decode_response));tmp->name=”x-Info”;tmp->value=”123456”;tmp->next=link->head;link->head=tmp;link->taltal_num++;(4)调用链表中的成员变量(头信息字段)当要访问链表中的成员变量时,例如需要获取x-Info的当前值,则定义一个函数void*getvalue(decode_head*ihead,char*name){/*…从链表头ihead指向的链表中查找和头信息字段name同名的单元的value值,并返回该值;*/}通过这种方式,就能在终端RTSP协议栈中自动分类保存服务器端新添加的所有头信息字段。达到了自动扩展的目的,避免了由服务器端扩展新方法而终端就必须修改RTSP协议栈源程序的烦琐。
由上面得到的保存RTSP RESPONSE头信息的数据结构链表中的新添加的头信息字段可能要传递给数据传输协议栈(RTP或TS),还有可能被播放器直接使用,为了避免修改协议栈源代码,这种传递放在播放器的改写中来完成,即在调用RTSP协议栈的播放器中做接口封装。
传统的设计方式在服务器有扩展时,除了主要改写RTSP协议栈源代码以外,还要对播放器做一些细微改动;而本发明所述方案,不需要对RTSP协议栈源代码做任何修改,仅仅更改播放器相关接口部分即可,给终端RTSP协议栈开发商与不同的流媒体服务器对接带来了极大的方便。因为不需要修改协议栈源代码,即使仅仅使用的是RTSP协议栈二进制库而没有源代码也没有关系。
播放器内部做的与新添加的头信息字段相关的细微改动,如下所示(1)RTSP到RTP/TS的信息传递RTSP需要把头信息字段的值传递给流媒体数据传输协议栈(RTP或TS),例如RTSP需要把RTP使用的用户端口值(client_port)传递给RTP,假定RTSP提供的接口调用函数定义如下void*Rtsp::get_response_info(char*name){…}client_port的值保存在头字段信息Transport中,所以首先获取头字段信息TransportRtsp*p_rtsp=new Rtsp;Void*tmp=P_rtsp->get_response_info(“Transport”);得到tmp后便可以查找到client_port值,再利用RTP提供的相关接口函数把该值传给RTP处理。
从RTSP获取其他头字段的信息也和上面一样,在此不再赘述。
(2)RTSP到播放器的信息传递这种方式更简单,直接利用RTSP提供的接口调用函数获取指定的头信息即可。
通过上述实时流媒体的通信方法能够智能的和任意一家流媒体服务器对接而不需要更改协议栈源代码。
权利要求
1.实时流媒体通信方法,其特征在于,包括以下步骤a、终端根据流媒体服务器发布的流媒体通信接口规范,产生用户配置文件;b、终端RTSP协议栈自动读取配置文件,并组织生成请求消息头信息字段,向媒体流服务器发送该消息;c、流媒体服务器收到请求消息后,返回响应消息;d、终端收到返回响应消息,判断媒体流服务器,是否只是对现有RTSP头信息做扩展,而没有新的头信息字段增加,若是,进入步骤e;若否,进入步骤f;e、用链表数据结构动态保存响应消息的头信息字段扩展,进入步骤g;f、先分配一个链表单元保存该字段,并插入链表,再对每一个扩展的头字段动态保存,进入步骤g;g、在调用RTSP协议栈的播放器中做接口封装。
2.如权利要求1所述实时流媒体通信方法,其特征在于,所述用户配置文件为文本文件,包括有对应该服务器的头信息;所述头信息字段包括有RTSP头信息的扩展字段,或新增加的头信息字段。
全文摘要
本发明涉及网络通信技术,特别涉及一种流媒体实时流协议栈RTSP的应用。本发明要解决的技术问题是,RTSP没有统一的标准,导致了流媒体终端和服务器对接非常烦琐,提出了一种实时流媒体通信方法,不需要修改协议栈源程序就可以和不同服务器互通。采用的技术方案是,将服务器端所做的协议私有扩展内容写入一个配置文件并放入指定的文件目录下,换一个互通服务器只需更换一份配置文件即可。即使不会编程的人员也可以实现这种和不同服务器的对接工作,实现了终端和不同流媒体服务器对接时的快捷、高效,有很大的经济效益。
文档编号H04L12/28GK1929480SQ20061002198
公开日2007年3月14日 申请日期2006年9月30日 优先权日2006年9月30日
发明者李晓东, 张恩阳 申请人:四川长虹电器股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1