摘 要:流媒體的傳輸策略在流媒體傳輸系統(tǒng)中非常重要,不合理的流媒體傳輸方法會(huì)極大浪費(fèi)網(wǎng)絡(luò)資源。本論文首先介紹了流媒體傳輸系統(tǒng)的設(shè)計(jì)方案,然后闡述了如何實(shí)現(xiàn)RTP傳輸以及多點(diǎn)傳輸。新設(shè)計(jì)的流媒體傳輸系統(tǒng)可以減少網(wǎng)絡(luò)資源的浪費(fèi)。
關(guān)鍵詞:流媒體;傳輸系統(tǒng);設(shè)計(jì);實(shí)現(xiàn)
中圖分類(lèi)號(hào):TN919.8
一種流媒體數(shù)據(jù)的發(fā)送方法,首先需要選取一個(gè)統(tǒng)一的標(biāo)準(zhǔn)時(shí)間點(diǎn)作為媒體數(shù)據(jù)包的基準(zhǔn)時(shí)間點(diǎn)。然后根據(jù)接受到的數(shù)據(jù)內(nèi)容和媒體豹紋內(nèi)容確定各個(gè)數(shù)據(jù)包所相對(duì)對(duì)應(yīng)的標(biāo)準(zhǔn)時(shí)間點(diǎn)。其次根據(jù)這個(gè)時(shí)間點(diǎn),確定其各個(gè)所對(duì)應(yīng)的媒體單元時(shí)間戳。將已經(jīng)確定的時(shí)間戳放置于相對(duì)于的媒體單元內(nèi),并將其包裝封閉在幀結(jié)構(gòu)中發(fā)送。該流程的重點(diǎn)主要為媒體單元的時(shí)間戳的確定,即為所有的媒體數(shù)據(jù)選取了一個(gè)統(tǒng)一的標(biāo)準(zhǔn)時(shí)間點(diǎn)。因此,所有有關(guān)聯(lián)的各個(gè)媒體數(shù)據(jù)可以實(shí)現(xiàn)時(shí)間同步。從而使有統(tǒng)一目的的不同路徑的媒體單元到達(dá)的時(shí)間先后能很容易的識(shí)別。具體的操作系統(tǒng)工作如下:
通過(guò)對(duì)一般傳輸?shù)难芯?,在本文設(shè)計(jì)的流媒體傳輸系統(tǒng)中,使用底層為UDP協(xié)議的RTP協(xié)議傳輸數(shù)據(jù)信息,用RTCP傳遞控制報(bào)文信息,采用HTTP協(xié)議與Web服務(wù)器交互,采用HTTP、MMS協(xié)議進(jìn)行播放器與數(shù)據(jù)源的交互。
Web服務(wù)器采用XML技術(shù)實(shí)現(xiàn),節(jié)點(diǎn)與其通信采用HTTP協(xié)議實(shí)現(xiàn);媒體源與播放器之間采用HTTP、MMS協(xié)議通信,節(jié)點(diǎn)從本地緩存或媒體源獲取流媒體數(shù)據(jù),然后調(diào)用播放器播放。信息是通過(guò)TCP協(xié)議傳輸,其中控制信息包括節(jié)點(diǎn)的加入、退出、鄰居節(jié)點(diǎn)的更新、Keep-alive等信息。真正的媒體數(shù)據(jù)采用RTP協(xié)議傳輸。RTCP控制信息包通過(guò)UDP/TCP和IP進(jìn)行傳輸。
1 RTP傳輸實(shí)現(xiàn)
1.1 JRTPLib的編譯
JRTPLib是一個(gè)開(kāi)源的RTP庫(kù),JThread是一個(gè)開(kāi)源的線程類(lèi),JRTPLib和JThread聯(lián)合使用,可以在后臺(tái)自動(dòng)獲取數(shù)據(jù)。如果沒(méi)有JThread的話,JRTPLib也能編譯通過(guò)(要改一個(gè)參數(shù)RTP_SUPPORT_THREAD在rtpconfig_win.h文件中),但如果JRTPLib中不加入JThread就需要程序周期調(diào)用相關(guān)的函數(shù)來(lái)獲取數(shù)據(jù)。
1.2 流媒體數(shù)據(jù)發(fā)送
流媒體數(shù)據(jù)發(fā)送的具體流程是,先獲得接收端的IP地址和端口號(hào),然后根據(jù)具體數(shù)據(jù)創(chuàng)建RTP會(huì)話,再指定RTP數(shù)據(jù)接收端,從而設(shè)置RTP會(huì)話默認(rèn)參數(shù),完成發(fā)送流媒體數(shù)據(jù)。
首先生成RTP Session 類(lèi)的實(shí)例,調(diào)用Create()方法來(lái)對(duì)其進(jìn)行初始化操作。設(shè)置恰當(dāng)?shù)臅r(shí)間戳單元(調(diào)用RTP Session類(lèi)的SetTimestampUnit方法),并且設(shè)置好數(shù)據(jù)發(fā)送的目標(biāo)地址,RTP協(xié)議允許同一會(huì)話存在多個(gè)目標(biāo)地址,我們可以通過(guò)調(diào)用RTP Session類(lèi)的AddDestination()、DeleteDestination()和ClearDestinations()方法來(lái)完成地址的添加、刪除和清除。目標(biāo)地址全部指定之后,調(diào)用RTP Session類(lèi)的SendPacket()方法,向所有的目標(biāo)地址發(fā)送流媒體數(shù)據(jù)。
1.3 流媒體數(shù)據(jù)接收
流媒體數(shù)據(jù)接收的具體流程是獲得用戶指定的端口號(hào),然后創(chuàng)建RTP會(huì)話,從而設(shè)置接收模式,其次接收RTP數(shù)據(jù),再根據(jù)情況檢索RTP數(shù)據(jù)源,獲取RTP數(shù)據(jù)報(bào),刪除RTP數(shù)據(jù)報(bào)。
RTP數(shù)據(jù)報(bào)有三種接收模式(RECEIVEMODE_ALL、RECEIVEMODE_IGNORESOME、RECEIVEMODE_ACCEPTSOME),每種接收模式具體規(guī)定了哪些到達(dá)的 RTP 數(shù)據(jù)報(bào)將會(huì)被接受。我們可以通過(guò)調(diào)用RTP Session類(lèi)的SetReceiveMode()方法可以設(shè)置接收模式,本系統(tǒng)采用RECEIVEMODE_ALL 缺省的接收模式,所有到達(dá)的 RTP 數(shù)據(jù)報(bào)都將被接受。
系統(tǒng)定義了類(lèi)rtprevcv.h,負(fù)責(zé)RTP數(shù)據(jù)的接收。
ch->rtprev->rtpRevInit(port);//RTP接收初始化
ch->rtprev->rtpAddSour(port,SourceIp); //加入源節(jié)點(diǎn)IP
packet = sess.GetNextPacket(); //獲取 RTP 數(shù)據(jù)報(bào)
2 多點(diǎn)傳輸實(shí)現(xiàn)
MixCast系統(tǒng)中,各節(jié)點(diǎn)在應(yīng)用層組播里是多對(duì)多的關(guān)系。即一個(gè)節(jié)點(diǎn)可同時(shí)從多個(gè)節(jié)點(diǎn)接收數(shù)據(jù),同樣地,一個(gè)節(jié)點(diǎn)也可發(fā)送數(shù)據(jù)至多個(gè)節(jié)點(diǎn)。這由每個(gè)節(jié)點(diǎn)的度控制。
2.1 一對(duì)多實(shí)現(xiàn)
UDP的多路復(fù)用讓RTP協(xié)議支持多點(diǎn)投遞,可以滿足流媒體多點(diǎn)之間會(huì)話的要求。我們可以通過(guò)調(diào)用JRTPLib 的AddDestination()函數(shù)將組播地址添加到RTP會(huì)話的發(fā)送列表中,關(guān)鍵實(shí)現(xiàn)代碼如下:
dw=m_sess.AddDestination(ulIP,usPort);//設(shè)置組播地址加入列表
m_sess.SendPacket();//函數(shù)發(fā)送數(shù)據(jù)
2.2 多對(duì)一實(shí)現(xiàn)
采用多線程傳輸。一對(duì)節(jié)點(diǎn)傳輸占用一個(gè)線程,節(jié)點(diǎn)連接到父節(jié)點(diǎn),開(kāi)啟一個(gè)新線程;節(jié)點(diǎn)退出,此線程關(guān)閉。
stream function
{
while(1) m_sess.SendPacket(); //發(fā)送數(shù)據(jù)
}
thread1.func =stream;
sys->startThread(thread1);//開(kāi)啟線程
sys->endThread(thread1);//結(jié)束線程
3 結(jié)語(yǔ)
本論文提出了一種流媒體傳輸系統(tǒng)的設(shè)計(jì)方案,并對(duì)其實(shí)現(xiàn)做了闡述,采用該流媒體傳輸策略的傳輸系統(tǒng)可減少流媒體傳輸過(guò)程中的網(wǎng)絡(luò)資源的浪費(fèi),對(duì)網(wǎng)絡(luò)資源的合理利用具有積極的意義。
參考文獻(xiàn):
[1]Xinyan Zhang,JC Liu, Bo Li, and Tak-Shing Peter Ynm. CoolStreaming/DOnet:A data- driven overlay network for efficient live media streaming[C].In Proceedings of IEEE INFOCOM,Match,2009.
[2]Li Fan,Pei Cao,Jussara Almerida. Summary cache: A scalable wide-area web cache sharing protocol[J].IEEE/ACM Trans Networkin,2010,8(3):281-293.
[3]R.Wooster and M.Abrams.Proxy Caching the Estimates Page Load Delays[C].In the 6th International World Wide Web Conference,April,7-11,2010,Santa Clara,CA,977-986.
[4]Meng Zhang,Jian-Guang Luo,Li Zhao.A Peer-to-Peer Network for Live Media Streaming-Using a Push-Pull Approach[C].In ACM Multimedia,2010.
[5]劉潔,劉建勛.基于用戶興趣模型的Web服務(wù)發(fā)現(xiàn)系統(tǒng)設(shè)計(jì)[J].湘潭大學(xué)自然科學(xué)學(xué)報(bào),2008,30(1):131-134.
[6]Bellwood T,Clement L,Ehnebuske.Detal.OASIS Specification,UDDI v3.0.http://uddi.org/pubs/uddi_v3.htm,2002.