專利名稱:實(shí)時(shí)流媒體通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù),特別涉及一種流媒體實(shí)時(shí)流協(xié)議棧RTSP的應(yīng)用。
背景技術(shù):
流媒體(Streaming Media)技術(shù)是在寬帶網(wǎng)絡(luò)上以流的方式傳輸多媒體信息的技術(shù)。近年來,隨著寬帶網(wǎng)絡(luò)的發(fā)展和用戶需求的驅(qū)動(dòng),流媒體應(yīng)用作為未來高速網(wǎng)絡(luò)的主流應(yīng)用的趨勢已經(jīng)越來越明確。現(xiàn)在人們已經(jīng)越來越習(xí)慣在網(wǎng)絡(luò)上收聽在線音樂,收看在線電視和視頻節(jié)目,通過網(wǎng)絡(luò)進(jìn)行視頻聊天。
流媒體指在數(shù)據(jù)網(wǎng)絡(luò)上按時(shí)間先后次序傳輸和播放的連續(xù)音/視頻數(shù)據(jù)流。以前人們在網(wǎng)絡(luò)上觀看電影或收聽音樂時(shí),必須先將整個(gè)影音文件下載并存儲(chǔ)在本地計(jì)算機(jī)上,然后才可以觀看。流媒體在播放前并不下載整個(gè)文件,只將部分內(nèi)容緩存,使流媒體數(shù)據(jù)流邊傳送邊播放,這樣就節(jié)省了下載等待時(shí)間和存儲(chǔ)空間。流媒體數(shù)據(jù)流具有三個(gè)特點(diǎn)連續(xù)性、實(shí)時(shí)性、時(shí)序性,即其數(shù)據(jù)流具有嚴(yán)格的前后時(shí)序關(guān)系。
要實(shí)現(xiàn)流媒體的播放,必須具備以下的幾個(gè)條件流媒體服務(wù)器,用于提供實(shí)時(shí)媒體流數(shù)據(jù)和響應(yīng)終端的實(shí)時(shí)流控制命令;終端流媒體協(xié)議棧和播放器,用于接收、控制、處理實(shí)時(shí)媒體數(shù)據(jù)流;網(wǎng)絡(luò)和路由設(shè)備,用于傳輸、轉(zhuǎn)發(fā)實(shí)時(shí)媒體流。
終端流媒體協(xié)議棧和流媒體服務(wù)器端之所以可以相互通信,是因?yàn)樗麄兪褂玫南嗤耐ㄐ艆f(xié)議,這里是流媒體協(xié)議。就當(dāng)前的局端系統(tǒng)來說,以傳輸實(shí)時(shí)流數(shù)據(jù)使用的協(xié)議不同可以分為兩類用RTSP(Real TimeStream Protocal)來傳輸控制流、用RTP來傳輸數(shù)據(jù)流的ISMA流媒體服務(wù)器;用RTSP來傳輸控制流、用TS來傳輸數(shù)據(jù)流的TS流媒體服務(wù)器。
在當(dāng)前IPTV流媒體服務(wù)器中,屬于ISMA陣營的有華為、中興、思華;屬于TS流陣營的有UT、西門子等。由于沒有統(tǒng)一標(biāo)準(zhǔn),不同服務(wù)器廠商使用的流媒體通信協(xié)議一般是不同的。主要體現(xiàn)在用RTSP傳輸實(shí)時(shí)流控制命令上。例如,有些廠商在滿足RFC2326規(guī)范的基礎(chǔ)之上,對(duì)RTSP進(jìn)行了擴(kuò)展。擴(kuò)展主要是兩方面一是,對(duì)RTSP頭信息的擴(kuò)展;二是,添加新的頭信息字段。
對(duì)TRSP進(jìn)行擴(kuò)展,主要是為了滿足服務(wù)器的一些特別的要求。這樣做的負(fù)面影響出現(xiàn)了如果終端廠商要和該服務(wù)器進(jìn)行流媒體通信,那么就必須知道服務(wù)器是如何擴(kuò)展RTSP協(xié)議棧的。很多服務(wù)器廠商之間都是不能互通的,原因就是他們各自對(duì)RTSP進(jìn)行了不同的擴(kuò)展。這種局面對(duì)于終端開發(fā)廠商來說,是非常不利的。
終端如要與不同流媒體局端服務(wù)器通信,或現(xiàn)有的服務(wù)器更改了通信接口規(guī)范,就得更改終端的流媒體協(xié)議棧,即改寫RTSP協(xié)議棧的源程序。如果終端廠商使用的是RTSP協(xié)議棧是第三方提供的二進(jìn)制庫,就更加麻煩,只能委托RTSP源代碼提供廠商進(jìn)行修改。由于市場中不同的流媒體服務(wù)器都占有一定的數(shù)量,各服務(wù)器廠商之間沒有相同的RTSP協(xié)議棧的標(biāo)準(zhǔn),導(dǎo)致了終端開發(fā)廠商需要和不同服務(wù)器廠商對(duì)接十分繁瑣。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,提供了一種流媒體通信方法,能夠不修改終端RTSP源程序就能和不同流媒體服務(wù)器進(jìn)行通信。
本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是,實(shí)時(shí)流媒體通信方法,包括以下步驟a、終端根據(jù)流媒體服務(wù)器發(fā)布的流媒體通信接口規(guī)范,產(chǎn)生用戶配置文件;b、終端RTSP協(xié)議棧自動(dòng)讀取配置文件,并組織生成請(qǐng)求消息頭信息字段,向媒體流服務(wù)器發(fā)送該消息;c、流媒體服務(wù)器收到請(qǐng)求消息后,返回響應(yīng)消息;d、終端收到返回響應(yīng)消息,判斷媒體流服務(wù)器,是否只是對(duì)現(xiàn)有RTSP頭信息做擴(kuò)展,而沒有新的頭信息字段增加,若是,進(jìn)入步驟e;若否,進(jìn)入步驟f;e、用鏈表數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)保存響應(yīng)消息的頭信息字段擴(kuò)展,進(jìn)入步驟g;f、先分配一個(gè)鏈表單元保存該字段,并插入鏈表,再對(duì)每一個(gè)擴(kuò)展的頭字段動(dòng)態(tài)保存,進(jìn)入步驟g;g、在調(diào)用RTSP協(xié)議棧的播放器中做接口封裝。
用戶配置文件為文本文件,包括有對(duì)應(yīng)該服務(wù)器的頭信息,頭信息字段包括有RTSP頭信息的擴(kuò)展,或新增加的頭信息字段。在服務(wù)器端更改通信接口規(guī)范的內(nèi)容后,使用本方法不需要更改終端協(xié)議棧源代碼,只要更改相應(yīng)的配置文件即可實(shí)現(xiàn)通信。
本發(fā)明的有益效果是,采用本發(fā)明的終端能夠智能的和任意一家流媒體服務(wù)器對(duì)接而不需要更改協(xié)議棧源代碼,只需要把服務(wù)器端所做的協(xié)議私有擴(kuò)展內(nèi)容寫入一個(gè)配置文件并放入指定的文件目錄下,換一個(gè)互通服務(wù)器只需更換一份配置文件即可。即使不會(huì)編程的人員也可以實(shí)現(xiàn)這種和不同服務(wù)器的對(duì)接工作,實(shí)現(xiàn)了終端和不同流媒體服務(wù)器對(duì)接時(shí)的快捷、高效,有很大的經(jīng)濟(jì)效益。
具體實(shí)施例方式
每個(gè)流媒體服務(wù)器端將其做的協(xié)議私有擴(kuò)展寫入一個(gè)配置文件,終端將該配置文件放入指定的文件目錄下。在終端更換需要與之通信的流媒體服務(wù)器時(shí),只需更換配置文件即可。
終端向流媒體服務(wù)器發(fā)送連接請(qǐng)求消息,RTSP協(xié)議棧的請(qǐng)求連接消息頭信息字段由該用戶配置文件指定發(fā)送時(shí)不是在程序內(nèi)部組織方法,如描述(DESCRIBE)、建立連接(SETUP)、播放(PLAY)等,的請(qǐng)求字段(REQUEST)的內(nèi)容,而是打開并讀取用戶配置文件,從文件中讀取用戶指定的相關(guān)內(nèi)容組織REQUEST方法。例如要發(fā)送SETUP REQUEST時(shí),從用戶的配置文件中查找SETUP,找到后把相應(yīng)的頭信息讀入緩沖區(qū),完成組成完整的SETUP REQUEST內(nèi)容,送發(fā)送模塊發(fā)送。如果沒有找到用戶關(guān)于SETUP的定義,則說明用戶沒有擴(kuò)展,用默認(rèn)的信息組織SETUP REQUEST內(nèi)容即可。這樣做就使得SETUP REQUEST的內(nèi)容完全由用戶的配置文件指定。一些常規(guī)的變量如Cseq頭,Session頭等的取值是由程序內(nèi)部動(dòng)態(tài)產(chǎn)生,不需要在配置文件中指出。當(dāng)服務(wù)器對(duì)SETUP做了擴(kuò)展后,只要更換配置文件,不需要更改RTSP源程序就能達(dá)到和服務(wù)器互通的目的,解決了終端發(fā)送消息內(nèi)容靈活配置的問題。
該配置文件中指定了常用方法的頭字段信息,即RFC2326中最小執(zhí)行子集(Minimal RTSP implementation)規(guī)定的方法。如Accept接收請(qǐng)求頭,用于告知服務(wù)器終端接收媒體描述信息的方式;Transport傳輸請(qǐng)求頭,用于告知服務(wù)器終端使用的接收數(shù)據(jù)的協(xié)議、和使用的端口等;Content-length指示方法包括的內(nèi)容的長度;Content-type指示方法內(nèi)容的類型;x-Extend、x-Timeshift_Range用戶擴(kuò)展的頭字段。每個(gè)頭字段首部用*號(hào)標(biāo)明以便于在文件中查找。配置文件部分代碼示例如下文件路徑/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流媒體服務(wù)器收到請(qǐng)求連接消息后,返回響應(yīng)消息;終端收到返回響應(yīng)消息(RTSP RESPONSE),動(dòng)態(tài)擴(kuò)展保存接收到的頭字段的數(shù)據(jù)結(jié)構(gòu)前面說過RTSP協(xié)議棧的擴(kuò)展一般分為兩類,當(dāng)只是對(duì)現(xiàn)有RTSP頭信息做擴(kuò)展,沒有新的頭信息字段增加時(shí),就不需要更改保存RTSP RESPONSE的數(shù)據(jù)結(jié)構(gòu)的成員變量;用鏈表來實(shí)現(xiàn)保存RTSP RESPONSE頭信息的數(shù)據(jù)結(jié)構(gòu)即可。
用于保存RTSP RESPONSE的數(shù)據(jù)結(jié)構(gòu)定義的部分代碼如下所示鏈表數(shù)據(jù)結(jié)構(gòu)單元定義,鏈表結(jié)構(gòu)中,next指向下一個(gè)單元的指針;name信息頭字段名;value信息頭字段對(duì)應(yīng)的值struct decode_response_t{decode response_t*next;char*name;void*value;};typedef struct decode_response_t decode_response;鏈表頭的定義,鏈表結(jié)構(gòu)中,head指向鏈表首單元的指針;tatal_num鏈表中的單元總數(shù)struct response_head_t{decode_response*head;int tatal_num;};typedef struct decode_head_t decode_head;但是當(dāng)RTSP協(xié)議棧的擴(kuò)展添加了新的頭信息字段時(shí),就需要添加保存RTSP RESPONSE的數(shù)據(jù)結(jié)構(gòu)的成員變量,即此時(shí)該數(shù)據(jù)結(jié)構(gòu)的成員是動(dòng)態(tài)變化的。
當(dāng)接收到的頭信息字段沒有在建立的鏈表隊(duì)列中定義,即接收到的頭字段是流媒體服務(wù)器新添加的頭信息字段時(shí),終端重新分配一個(gè)單元空間保存該新頭信息字段,并插入到鏈表中。
鏈表的建立和成員數(shù)據(jù)單元的插入及其使用,如下所示(1)建立鏈表時(shí)先建立一個(gè)鏈表,表頭指針指向空值(NULL)decode_head*link=(decode_head*)mailoc(sizeof(decode_head));memset(head,0,sizeof(decode_head));(2)把一些常規(guī)的頭信息字段(如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)收到的新添加的頭信息字段插入到鏈表中,例如接收到的頭信息字段在當(dāng)前鏈表中沒有找到,表示接收到了服務(wù)器新添加的頭信息字段,假設(shè)為”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)調(diào)用鏈表中的成員變量(頭信息字段)當(dāng)要訪問鏈表中的成員變量時(shí),例如需要獲取x-Info的當(dāng)前值,則定義一個(gè)函數(shù)void*getvalue(decode_head*ihead,char*name){/*…從鏈表頭ihead指向的鏈表中查找和頭信息字段name同名的單元的value值,并返回該值;*/}通過這種方式,就能在終端RTSP協(xié)議棧中自動(dòng)分類保存服務(wù)器端新添加的所有頭信息字段。達(dá)到了自動(dòng)擴(kuò)展的目的,避免了由服務(wù)器端擴(kuò)展新方法而終端就必須修改RTSP協(xié)議棧源程序的煩瑣。
由上面得到的保存RTSP RESPONSE頭信息的數(shù)據(jù)結(jié)構(gòu)鏈表中的新添加的頭信息字段可能要傳遞給數(shù)據(jù)傳輸協(xié)議棧(RTP或TS),還有可能被播放器直接使用,為了避免修改協(xié)議棧源代碼,這種傳遞放在播放器的改寫中來完成,即在調(diào)用RTSP協(xié)議棧的播放器中做接口封裝。
傳統(tǒng)的設(shè)計(jì)方式在服務(wù)器有擴(kuò)展時(shí),除了主要改寫RTSP協(xié)議棧源代碼以外,還要對(duì)播放器做一些細(xì)微改動(dòng);而本發(fā)明所述方案,不需要對(duì)RTSP協(xié)議棧源代碼做任何修改,僅僅更改播放器相關(guān)接口部分即可,給終端RTSP協(xié)議棧開發(fā)商與不同的流媒體服務(wù)器對(duì)接帶來了極大的方便。因?yàn)椴恍枰薷膮f(xié)議棧源代碼,即使僅僅使用的是RTSP協(xié)議棧二進(jìn)制庫而沒有源代碼也沒有關(guān)系。
播放器內(nèi)部做的與新添加的頭信息字段相關(guān)的細(xì)微改動(dòng),如下所示(1)RTSP到RTP/TS的信息傳遞RTSP需要把頭信息字段的值傳遞給流媒體數(shù)據(jù)傳輸協(xié)議棧(RTP或TS),例如RTSP需要把RTP使用的用戶端口值(client_port)傳遞給RTP,假定RTSP提供的接口調(diào)用函數(shù)定義如下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提供的相關(guān)接口函數(shù)把該值傳給RTP處理。
從RTSP獲取其他頭字段的信息也和上面一樣,在此不再贅述。
(2)RTSP到播放器的信息傳遞這種方式更簡單,直接利用RTSP提供的接口調(diào)用函數(shù)獲取指定的頭信息即可。
通過上述實(shí)時(shí)流媒體的通信方法能夠智能的和任意一家流媒體服務(wù)器對(duì)接而不需要更改協(xié)議棧源代碼。
權(quán)利要求
1.實(shí)時(shí)流媒體通信方法,其特征在于,包括以下步驟a、終端根據(jù)流媒體服務(wù)器發(fā)布的流媒體通信接口規(guī)范,產(chǎn)生用戶配置文件;b、終端RTSP協(xié)議棧自動(dòng)讀取配置文件,并組織生成請(qǐng)求消息頭信息字段,向媒體流服務(wù)器發(fā)送該消息;c、流媒體服務(wù)器收到請(qǐng)求消息后,返回響應(yīng)消息;d、終端收到返回響應(yīng)消息,判斷媒體流服務(wù)器,是否只是對(duì)現(xiàn)有RTSP頭信息做擴(kuò)展,而沒有新的頭信息字段增加,若是,進(jìn)入步驟e;若否,進(jìn)入步驟f;e、用鏈表數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)保存響應(yīng)消息的頭信息字段擴(kuò)展,進(jìn)入步驟g;f、先分配一個(gè)鏈表單元保存該字段,并插入鏈表,再對(duì)每一個(gè)擴(kuò)展的頭字段動(dòng)態(tài)保存,進(jìn)入步驟g;g、在調(diào)用RTSP協(xié)議棧的播放器中做接口封裝。
2.如權(quán)利要求1所述實(shí)時(shí)流媒體通信方法,其特征在于,所述用戶配置文件為文本文件,包括有對(duì)應(yīng)該服務(wù)器的頭信息;所述頭信息字段包括有RTSP頭信息的擴(kuò)展字段,或新增加的頭信息字段。
全文摘要
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù),特別涉及一種流媒體實(shí)時(shí)流協(xié)議棧RTSP的應(yīng)用。本發(fā)明要解決的技術(shù)問題是,RTSP沒有統(tǒng)一的標(biāo)準(zhǔn),導(dǎo)致了流媒體終端和服務(wù)器對(duì)接非常煩瑣,提出了一種實(shí)時(shí)流媒體通信方法,不需要修改協(xié)議棧源程序就可以和不同服務(wù)器互通。采用的技術(shù)方案是,將服務(wù)器端所做的協(xié)議私有擴(kuò)展內(nèi)容寫入一個(gè)配置文件并放入指定的文件目錄下,換一個(gè)互通服務(wù)器只需更換一份配置文件即可。即使不會(huì)編程的人員也可以實(shí)現(xiàn)這種和不同服務(wù)器的對(duì)接工作,實(shí)現(xiàn)了終端和不同流媒體服務(wù)器對(duì)接時(shí)的快捷、高效,有很大的經(jīng)濟(jì)效益。
文檔編號(hào)H04L12/28GK1929480SQ20061002198
公開日2007年3月14日 申請(qǐng)日期2006年9月30日 優(yōu)先權(quán)日2006年9月30日
發(fā)明者李曉東, 張恩陽 申請(qǐng)人:四川長虹電器股份有限公司