CN1929480B - 实时流媒体通信方法 - Google Patents
实时流媒体通信方法 Download PDFInfo
- Publication number
- CN1929480B CN1929480B CN200610021986A CN200610021986A CN1929480B CN 1929480 B CN1929480 B CN 1929480B CN 200610021986 A CN200610021986 A CN 200610021986A CN 200610021986 A CN200610021986 A CN 200610021986A CN 1929480 B CN1929480 B CN 1929480B
- Authority
- CN
- China
- Prior art keywords
- rtsp
- streaming media
- header
- header field
- terminal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明涉及网络通信技术,特别涉及一种流媒体实时流协议栈RTSP的应用。本发明要解决的技术问题是,RTSP没有统一的标准,导致了流媒体终端和服务器对接非常烦琐,提出了一种实时流媒体通信方法,不需要修改协议栈源程序就可以和不同服务器互通。采用的技术方案是,将服务器端所做的协议私有扩展内容写入一个配置文件并放入指定的文件目录下,换一个互通服务器只需更换一份配置文件即可。即使不会编程的人员也可以实现这种和不同服务器的对接工作,实现了终端和不同流媒体服务器对接时的快捷、高效,有很大的经济效益。
Description
技术领域
本发明涉及网络通信技术,特别涉及一种流媒体实时流协议栈RTSP的应用。
背景技术
流媒体(Streaming Media)技术是在宽带网络上以流的方式传输多媒体信息的技术。近年来,随着宽带网络的发展和用户需求的驱动,流媒体应用作为未来高速网络的主流应用的趋势已经越来越明确。现在人们已经越来越习惯在网络上收听在线音乐,收看在线电视和视频节目,通过网络进行视频聊天。
流媒体指在数据网络上按时间先后次序传输和播放的连续音/视频数据流。以前人们在网络上观看电影或收听音乐时,必须先将整个影音文件下载并存储在本地计算机上,然后才可以观看。流媒体在播放前并不下载整个文件,只将部分内容缓存,使流媒体数据流边传送边播放,这样就节省了下载等待时间和存储空间。流媒体数据流具有三个特点:连续性、实时性、时序性,即其数据流具有严格的前后时序关系。
要实现流媒体的播放,必须具备以下的几个条件:
流媒体服务器,用于提供实时媒体流数据和响应终端的实时流控制命令;
终端流媒体协议栈和播放器,用于接收、控制、处理实时媒体数据流;
网络和路由设备,用于传输、转发实时媒体流。
终端流媒体协议栈和流媒体服务器端之所以可以相互通信,是因为他们使用的相同的通信协议,这里是流媒体协议。就当前的局端系统来说,以传输实时流数据使用的协议不同可以分为两类:用RTSP(Real TimeStream Protocal)来传输控制流、用RTP来传输数据流的ISMA流媒体服务器;用RTSP来传输控制流、用TS来传输数据流的TS流媒体服务器。
在当前IPTV流媒体服务器中,属于ISMA阵营的有华为、中兴、思华;属于TS流阵营的有UT、西门子等。由于没有统一标准,不同服务器厂商使用的流媒体通信协议一般是不同的。主要体现在用RTSP传输实时流控制命令上。例如,有些厂商在满足RFC2326规范的基础之上,对RTSP进行了扩展。扩展主要是两方面:一是,对RTSP头信息的扩展;二是,添加新的头信息字段。
对RTSP进行扩展,主要是为了满足服务器的一些特别的要求。这样做的负面影响出现了:如果终端厂商要和该服务器进行流媒体通信,那么就必须知道服务器是如何扩展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.txt
C->S:DESCRIBE RTSP/1.0
*Accept:application/sdp,application/rtsl,application/mheg
C->S:SETUP RTSP/1.0
*Transport:RTP/AVP;unicast;client_port=4588-4589
*x-Extend
C->S:PLAY RTSP/1.0
C->S:GET_PARAMETER RTSP/1.0
*x-Timeshift_Range
C->S:SET_PARAMETER RTSP/1.0
*Content-length:20
*Content-type:text/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*)malloc(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-Info:123456”,其中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中,所以首先获取头字段信息:Transport:
Rtsp*p_rtsp=new Rtsp;
Void*tmp=P_rtsp->get_response_info(“Transport”);
得到tmp后便可以查找到client_port值,再利用RTP提供的相关接口函数把该值传给RTP处理。
从RTSP获取其他头字段的信息也和上面一样,在此不再赘述。
(2)RTSP到播放器的信息传递
这种方式更简单,直接利用RTSP提供的接口调用函数获取指定的头信息即可。
通过上述实时流媒体的通信方法能够智能的和任意一家流媒体服务器对接而不需要更改协议栈源代码。
Claims (2)
1.实时流媒体通信方法,其特征在于,包括以下步骤:
a、终端根据流媒体服务器发布的流媒体通信接口规范,产生用户配置文件;
b、终端RTSP协议栈自动读取配置文件,并组织生成请求消息头信息字段,向流媒体服务器发送该消息;
c、流媒体服务器收到请求消息后,返回响应消息;
d、终端收到返回响应消息,判断流媒体服务器,是否只是对现有RTSP头信息做扩展,而没有新的头信息字段增加,若是,进入步骤e;若否,进入步骤f;
e、用链表数据结构动态保存响应消息的头信息字段扩展,进入步骤g;
f、先分配一个链表单元保存新增加的头信息字段,并插入链表,再对每一个扩展的头字段动态保存,进入步骤g;
g、在调用RTSP协议栈的播放器中做接口封装。
2.如权利要求1所述实时流媒体通信方法,其特征在于,所述用户配置文件为文本文件,包括有对应该服务器的头信息;响应消息的头信息字段包括有RTSP头信息的扩展字段,或新增加的头信息字段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200610021986A CN1929480B (zh) | 2006-09-30 | 2006-09-30 | 实时流媒体通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200610021986A CN1929480B (zh) | 2006-09-30 | 2006-09-30 | 实时流媒体通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1929480A CN1929480A (zh) | 2007-03-14 |
CN1929480B true CN1929480B (zh) | 2010-05-12 |
Family
ID=37859265
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200610021986A Expired - Fee Related CN1929480B (zh) | 2006-09-30 | 2006-09-30 | 实时流媒体通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1929480B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112188240B (zh) * | 2020-09-30 | 2022-04-05 | 四川长虹电器股份有限公司 | 视频数据的私有传输方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1663187A (zh) * | 2002-06-20 | 2005-08-31 | 摩托罗拉公司 | 用于多参与者通信会话中的发言者仲裁的方法与设备 |
CN1694455A (zh) * | 2005-06-20 | 2005-11-09 | 浙江大学 | 跨平台的端到端rtp协议栈设计方法 |
-
2006
- 2006-09-30 CN CN200610021986A patent/CN1929480B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1663187A (zh) * | 2002-06-20 | 2005-08-31 | 摩托罗拉公司 | 用于多参与者通信会话中的发言者仲裁的方法与设备 |
CN1694455A (zh) * | 2005-06-20 | 2005-11-09 | 浙江大学 | 跨平台的端到端rtp协议栈设计方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1929480A (zh) | 2007-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101099142B (zh) | 用来从网络节点获取数字多媒体内容的系统和方法 | |
US9565396B2 (en) | Methods, systems and program products for initiating a process on data network | |
US9615119B2 (en) | Method and apparatus for providing timeshift service in digital broadcasting system and system thereof | |
US20080005347A1 (en) | Messenger system for publishing podcasts | |
CN102447975A (zh) | 流媒体信息处理方法、系统及服务器 | |
US20120082424A1 (en) | Method and apparatus for synchronizing content playback | |
JP2011527479A (ja) | プロキシ機能 | |
JP4726949B2 (ja) | Smilベース・マルチメディア・コンテンツを再生するためのシステム、方法、及びエンジン | |
CN101552800A (zh) | 提供媒体内容的方法、装置和系统 | |
CN111447391A (zh) | 会议数据同步方法、装置、计算机设备及存储介质 | |
CN1972441A (zh) | 流媒体存储及服务的方法 | |
CN101287095B (zh) | 一种会议电视的流媒体录播业务的实现方法及系统 | |
US20110164735A1 (en) | Efficient transmission of audio and non-audio portions of a communication session for phones | |
US20090052413A1 (en) | Invoking multiple sip based services during a single communication session using resource lists | |
CN1929480B (zh) | 实时流媒体通信方法 | |
CN1972447A (zh) | 基于流媒体技术的多画面播放器及其播放方法 | |
CN101005602A (zh) | 一种向媒体终端提供媒体数据的系统及方法 | |
CN101242329A (zh) | 一种多媒体网络应用处理系统和方法 | |
JPWO2015170565A1 (ja) | 受信装置、送信装置、データ通信方法、およびデータ処理方法 | |
US10523409B2 (en) | Method of synchronization during the processing, by a multimedia player, of an item of multimedia content transmitted by an MBMS service | |
EP1954001B1 (en) | Method for Providing Data Securely Allowing Smooth Switching of Channels | |
CN201312323Y (zh) | Ip实时在线录制系统 | |
CN106209860A (zh) | 一种实时课堂流媒体直播负载分配方法 | |
CN108282701B (zh) | 一种基于组播的epg搜索方法 | |
Gotoh et al. | A scheduling method on selective contents broadcasting with node relay based webcast considering available bandwidth |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100512 Termination date: 20210930 |
|
CF01 | Termination of patent right due to non-payment of annual fee |