摘 要:流媒體的傳輸策略在流媒體傳輸系統(tǒng)中非常重要,不合理的流媒體傳輸方法會極大浪費網(wǎng)絡(luò)資源。本論文首先介紹了流媒體傳輸系統(tǒng)的設(shè)計方案,然后闡述了如何實現(xiàn)RTP傳輸以及多點傳輸。新設(shè)計的流媒體傳輸系統(tǒng)可以減少網(wǎng)絡(luò)資源的浪費。
關(guān)鍵詞:流媒體;傳輸系統(tǒng);設(shè)計;實現(xiàn)
中圖分類號:TN919.8
一種流媒體數(shù)據(jù)的發(fā)送方法,首先需要選取一個統(tǒng)一的標準時間點作為媒體數(shù)據(jù)包的基準時間點。然后根據(jù)接受到的數(shù)據(jù)內(nèi)容和媒體豹紋內(nèi)容確定各個數(shù)據(jù)包所相對對應(yīng)的標準時間點。其次根據(jù)這個時間點,確定其各個所對應(yīng)的媒體單元時間戳。將已經(jīng)確定的時間戳放置于相對于的媒體單元內(nèi),并將其包裝封閉在幀結(jié)構(gòu)中發(fā)送。該流程的重點主要為媒體單元的時間戳的確定,即為所有的媒體數(shù)據(jù)選取了一個統(tǒng)一的標準時間點。因此,所有有關(guān)聯(lián)的各個媒體數(shù)據(jù)可以實現(xiàn)時間同步。從而使有統(tǒng)一目的的不同路徑的媒體單元到達的時間先后能很容易的識別。具體的操作系統(tǒng)工作如下:
通過對一般傳輸?shù)难芯?,在本文設(shè)計的流媒體傳輸系統(tǒng)中,使用底層為UDP協(xié)議的RTP協(xié)議傳輸數(shù)據(jù)信息,用RTCP傳遞控制報文信息,采用HTTP協(xié)議與Web服務(wù)器交互,采用HTTP、MMS協(xié)議進行播放器與數(shù)據(jù)源的交互。
Web服務(wù)器采用XML技術(shù)實現(xiàn),節(jié)點與其通信采用HTTP協(xié)議實現(xiàn);媒體源與播放器之間采用HTTP、MMS協(xié)議通信,節(jié)點從本地緩存或媒體源獲取流媒體數(shù)據(jù),然后調(diào)用播放器播放。信息是通過TCP協(xié)議傳輸,其中控制信息包括節(jié)點的加入、退出、鄰居節(jié)點的更新、Keep-alive等信息。真正的媒體數(shù)據(jù)采用RTP協(xié)議傳輸。RTCP控制信息包通過UDP/TCP和IP進行傳輸。
1 RTP傳輸實現(xiàn)
1.1 JRTPLib的編譯
JRTPLib是一個開源的RTP庫,JThread是一個開源的線程類,JRTPLib和JThread聯(lián)合使用,可以在后臺自動獲取數(shù)據(jù)。如果沒有JThread的話,JRTPLib也能編譯通過(要改一個參數(shù)RTP_SUPPORT_THREAD在rtpconfig_win.h文件中),但如果JRTPLib中不加入JThread就需要程序周期調(diào)用相關(guān)的函數(shù)來獲取數(shù)據(jù)。
1.2 流媒體數(shù)據(jù)發(fā)送
流媒體數(shù)據(jù)發(fā)送的具體流程是,先獲得接收端的IP地址和端口號,然后根據(jù)具體數(shù)據(jù)創(chuàng)建RTP會話,再指定RTP數(shù)據(jù)接收端,從而設(shè)置RTP會話默認參數(shù),完成發(fā)送流媒體數(shù)據(jù)。
首先生成RTP Session 類的實例,調(diào)用Create()方法來對其進行初始化操作。設(shè)置恰當?shù)臅r間戳單元(調(diào)用RTP Session類的SetTimestampUnit方法),并且設(shè)置好數(shù)據(jù)發(fā)送的目標地址,RTP協(xié)議允許同一會話存在多個目標地址,我們可以通過調(diào)用RTP Session類的AddDestination()、DeleteDestination()和ClearDestinations()方法來完成地址的添加、刪除和清除。目標地址全部指定之后,調(diào)用RTP Session類的SendPacket()方法,向所有的目標地址發(fā)送流媒體數(shù)據(jù)。
1.3 流媒體數(shù)據(jù)接收
流媒體數(shù)據(jù)接收的具體流程是獲得用戶指定的端口號,然后創(chuàng)建RTP會話,從而設(shè)置接收模式,其次接收RTP數(shù)據(jù),再根據(jù)情況檢索RTP數(shù)據(jù)源,獲取RTP數(shù)據(jù)報,刪除RTP數(shù)據(jù)報。
RTP數(shù)據(jù)報有三種接收模式(RECEIVEMODE_ALL、RECEIVEMODE_IGNORESOME、RECEIVEMODE_ACCEPTSOME),每種接收模式具體規(guī)定了哪些到達的 RTP 數(shù)據(jù)報將會被接受。我們可以通過調(diào)用RTP Session類的SetReceiveMode()方法可以設(shè)置接收模式,本系統(tǒng)采用RECEIVEMODE_ALL 缺省的接收模式,所有到達的 RTP 數(shù)據(jù)報都將被接受。
系統(tǒng)定義了類rtprevcv.h,負責(zé)RTP數(shù)據(jù)的接收。
ch->rtprev->rtpRevInit(port);//RTP接收初始化
ch->rtprev->rtpAddSour(port,SourceIp); //加入源節(jié)點IP
packet = sess.GetNextPacket(); //獲取 RTP 數(shù)據(jù)報
2 多點傳輸實現(xiàn)
MixCast系統(tǒng)中,各節(jié)點在應(yīng)用層組播里是多對多的關(guān)系。即一個節(jié)點可同時從多個節(jié)點接收數(shù)據(jù),同樣地,一個節(jié)點也可發(fā)送數(shù)據(jù)至多個節(jié)點。這由每個節(jié)點的度控制。
2.1 一對多實現(xiàn)
UDP的多路復(fù)用讓RTP協(xié)議支持多點投遞,可以滿足流媒體多點之間會話的要求。我們可以通過調(diào)用JRTPLib 的AddDestination()函數(shù)將組播地址添加到RTP會話的發(fā)送列表中,關(guān)鍵實現(xiàn)代碼如下:
dw=m_sess.AddDestination(ulIP,usPort);//設(shè)置組播地址加入列表
m_sess.SendPacket();//函數(shù)發(fā)送數(shù)據(jù)
2.2 多對一實現(xiàn)
采用多線程傳輸。一對節(jié)點傳輸占用一個線程,節(jié)點連接到父節(jié)點,開啟一個新線程;節(jié)點退出,此線程關(guān)閉。
stream function
{
while(1) m_sess.SendPacket(); //發(fā)送數(shù)據(jù)
}
thread1.func =stream;
sys->startThread(thread1);//開啟線程
sys->endThread(thread1);//結(jié)束線程
3 結(jié)語
本論文提出了一種流媒體傳輸系統(tǒng)的設(shè)計方案,并對其實現(xiàn)做了闡述,采用該流媒體傳輸策略的傳輸系統(tǒng)可減少流媒體傳輸過程中的網(wǎng)絡(luò)資源的浪費,對網(wǎng)絡(luò)資源的合理利用具有積極的意義。
參考文獻:
[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].湘潭大學(xué)自然科學(xué)學(xué)報,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.