摘要:介紹了用于流媒體傳輸?shù)腞TP協(xié)議和實(shí)時(shí)流化協(xié)議RTSP,提出了視頻點(diǎn)播服務(wù)器與客戶端的交互過(guò)程,并詳細(xì)介紹了LiveMedia庫(kù)知識(shí),建立了視頻點(diǎn)播服務(wù)器,特別是加入了計(jì)費(fèi)模塊,實(shí)現(xiàn)了計(jì)費(fèi)功能,并可以用于中小型的酒店,小區(qū)中,節(jié)約了成本。
關(guān)鍵詞:VOD;RTSP;LiveMedia;計(jì)費(fèi)接口
中圖分類號(hào):TP915.04 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2009)15-4019-03
The Design and Implementation of Streaming Media Video Server
ZHAO Peng1, DU Wen-hua2,ZHANG Dong-sheng3,LI Xiao-feng1,ZHAO Jie4
(1.Department of Computer Science and Technology,Shandong Jianzhu University, Jinan 250101, China; 2.Shandong Institute of Education,Jinan 250014,China;3.Jinan Cigarette Factory,Jinan 250104,China;4.No.5 High School of Qingzhou City in Shandong Provice,Qingzhou 262514,China)
Abstract: This paper describes RTP protocol for streaming media transmission and the RTSP Protocol for the Real-Time Streaming,introduces a video-on-demand server and the client interaction’s process, and puts up with the knowledge of LiveMedia library in detail, sets up the on-demand server, in particular, adds the billing module, implements the billing function, and can be used for small and medium-sized hotels, communities in order to save the cost.
Key words: VOD;RTSP;LiveMedia;the Billing Interface
1 引言
近年來(lái),隨著Internet技術(shù)的發(fā)展,主干網(wǎng)和接入網(wǎng)速率不斷提高,為寬帶應(yīng)用提供了必需的硬件基礎(chǔ)設(shè)施;網(wǎng)絡(luò)和多媒體技術(shù)的發(fā)展為VOD(video on demand)產(chǎn)生創(chuàng)造了條件。同時(shí),VOD屬于流媒體技術(shù)的一種主要應(yīng)用,它改變了傳統(tǒng)的用戶被動(dòng)接受的方式(如收看電視),而代之以交互的方式,變革了人們傳統(tǒng)的娛樂方式,具有極為廣闊的前景。本文從降低系統(tǒng)成本的角度進(jìn)行分析探索,提出了基于開源項(xiàng)目LiveMedia的方案。
2 流媒體服務(wù)器的概況
2.1 相關(guān)協(xié)議
與流媒體傳輸相關(guān)的協(xié)議有RTP,RTCP,RTSP,其中RTSP,RTP等實(shí)際應(yīng)屬于應(yīng)用層協(xié)議,它們利用傳輸層TCP和UDP提供的服務(wù)來(lái)完成多媒體流式數(shù)據(jù)的傳輸,協(xié)議圖如圖1所示。
2.2RTP簡(jiǎn)介
1) RTP[1]是針對(duì)Internet上多媒體數(shù)據(jù)流的一個(gè)傳輸協(xié)議,由IETF(Internet工程任務(wù)組)作為RFC1889發(fā)布。RTP被定義為在一對(duì)一或一對(duì)多的傳輸情況下工作,其目的是提供時(shí)間信息和實(shí)現(xiàn)流同步。RTP的典型應(yīng)用建立在UDP上,但也可以在TCP或ATM等其他協(xié)議之上工作。RTP本身只保證實(shí)時(shí)數(shù)據(jù)的傳輸,并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務(wù)。
RTP和UDP協(xié)議二者共同完成傳輸層協(xié)議功能。UDP協(xié)議只是傳輸數(shù)據(jù)包,不管數(shù)據(jù)包傳輸?shù)臅r(shí)間順序RTP的協(xié)議數(shù)據(jù)單元是用UDP分組來(lái)承載的。RTP協(xié)議雖然是傳輸層協(xié)議但是它沒有作為OSI體系結(jié)構(gòu)中單獨(dú)的一層來(lái)實(shí)現(xiàn)。
2) RTCP負(fù)責(zé)管理傳輸質(zhì)量在當(dāng)前應(yīng)用進(jìn)程之間交換控制信息。在RTP會(huì)話期間,各參與者周期性地傳送RTCP包,包中含有已發(fā)送的數(shù)據(jù)包的數(shù)量、丟失的數(shù)據(jù)包的數(shù)量等統(tǒng)計(jì)資料。因此,服務(wù)器可以利用這些信息動(dòng)態(tài)地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,能以有效的反饋和最小的開銷使傳輸效率最佳化,故特別適合傳送網(wǎng)上的實(shí)時(shí)數(shù)據(jù)。
當(dāng)應(yīng)用程序開始一個(gè)RTP會(huì)話時(shí)將使用兩個(gè)端口:一個(gè)給RTP,一個(gè)給RTCP。
2.3 RTSP簡(jiǎn)介
實(shí)時(shí)流協(xié)議RTSP(Real-time Streaming Protocol)[2]是由Real Networks和Netscape共同提出的。該協(xié)議定義了一對(duì)多應(yīng)用程序如何有效地通過(guò)IP網(wǎng)絡(luò)傳送多媒體數(shù)據(jù)。RTSP在體系結(jié)構(gòu)上位于RTP和RTCP之上。它使用TCP或RTP完成數(shù)據(jù)傳輸。HTTP與RTSP相比,HTTP傳送HTML,而RTSP傳送是多媒體數(shù)據(jù)。HTTP請(qǐng)求由客戶機(jī)發(fā)出,服務(wù)器作出響應(yīng);使用RTSP時(shí),客戶機(jī)和服務(wù)器都可以發(fā)出請(qǐng)求,即RTSP可以是雙向的。
RTSP建立并控制一個(gè)或幾個(gè)時(shí)間同步的連續(xù)流媒體,如音頻和視頻。盡管連續(xù)媒體流與控制流交叉是可能的,RTSP本身并不發(fā)送連續(xù)流。換言之,RTSP充當(dāng)多媒體服務(wù)器的網(wǎng)絡(luò)遠(yuǎn)程控制。RTSP提供了一個(gè)可擴(kuò)展框架,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)(如音頻與視頻)的受控、按需傳送。數(shù)據(jù)源包括實(shí)況數(shù)據(jù)與存儲(chǔ)的剪輯。RTSP用于控制多個(gè)數(shù)據(jù)發(fā)送會(huì)話,提供了選擇發(fā)送通道(如UDP、組播UDP與TCP等)的方式,并提供了選擇基于RTP的發(fā)送機(jī)制的方法。
RTSP主要為媒體服務(wù)器提供遠(yuǎn)程控制功能,在多媒體流傳輸?shù)倪^(guò)程中,播放器和服務(wù)器之間通過(guò)交換RTSP消息來(lái)實(shí)現(xiàn)資源描述信息的獲取、連接的建立、播放控制等功能。RTSP消息用純文本格式表示,使用SDP(SessionDescriptionProtocol)協(xié)議描述。
3 服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
3.1 服務(wù)器的設(shè)計(jì)
服務(wù)器與客戶端經(jīng)過(guò)OPTIONS,DESCRIBE,SETUP,PLAY后,服務(wù)器發(fā)送視頻流RTP包到客戶端,并且客戶端每隔一小段時(shí)間向服務(wù)器發(fā)送RTCP反饋報(bào)告,服務(wù)器可以利用這些信息動(dòng)態(tài)地改變傳輸速率,用戶收到視頻流后,解碼播放。正如文章[3]所說(shuō),如圖2所示客戶端與服務(wù)器端的交互過(guò)程。
1) Option:客戶端通過(guò)發(fā)送Option消息請(qǐng)求,服務(wù)器端通告它支持的所有交互方法。
2) Describe:客戶端發(fā)送Describe請(qǐng)求,通過(guò)服務(wù)器端權(quán)限驗(yàn)證,響應(yīng)關(guān)于請(qǐng)求媒體的相關(guān)信息;
3) Setup:客戶機(jī)發(fā)送一個(gè)Setup請(qǐng)求,其中包括協(xié)議集和端口號(hào)(或者是端口號(hào)的一個(gè)范圍),客戶機(jī)通過(guò)這些協(xié)議集和端口來(lái)接收媒體流。服務(wù)器從中選擇一個(gè)協(xié)議和端口,然后在應(yīng)答消息中傳回給客戶機(jī);
4) Play/Pause:播放和暫停,客戶端可以設(shè)置播放的區(qū)間和暫停的時(shí)刻;
5) Teardown:客戶端發(fā)出關(guān)閉請(qǐng)求,服務(wù)器端響應(yīng)請(qǐng)求,播放連接到此結(jié)束。
3.2 LiveMedia項(xiàng)目的介紹
LiveMedia[4]項(xiàng)目都是由標(biāo)準(zhǔn)C++語(yǔ)言寫成,能夠跨平臺(tái)運(yùn)行,適合于構(gòu)建低成本的流媒體應(yīng)用系統(tǒng),也適合于嵌入式系統(tǒng)。
LiveMedia項(xiàng)目的源代碼包括四個(gè)基本的庫(kù),各種測(cè)試代碼以及Media Server。四個(gè)基本的庫(kù)分別是UsageEnvironmentTaskScheduler,groupsock,liveMedia和BasicUsageEnvironment。UsageEnvironmentTaskScheduler類用于事件的調(diào)度,實(shí)現(xiàn)異步讀取事件的句柄的設(shè)置以及錯(cuò)誤信息的輸出。另外,還有一個(gè)HashTable類定義了一個(gè)通用的hash表,其它代碼要用到這個(gè)表。這些都是抽象類,在應(yīng)用程序中基于這些類來(lái)實(shí)現(xiàn)自己的子類。Groupsock庫(kù)是是對(duì)網(wǎng)絡(luò)接口的封裝,用于收發(fā)數(shù)據(jù)包。正如名字本身,groupsock主要是面向多播數(shù)據(jù)的收發(fā)的,它也同時(shí)支持單播數(shù)據(jù)的收發(fā)。LiveMedia庫(kù)是中有一系列類,基類是Medium,這些類針對(duì)不同的流媒體類型和編碼。BasicUsageEnvironment庫(kù)主要是針對(duì)簡(jiǎn)單的控制臺(tái)應(yīng)用程序,利用select實(shí)現(xiàn)事件獲取和處理。定義了類UsageEnvironment的一個(gè)具體實(shí)現(xiàn),用作配置基本環(huán)境。
3.3 服務(wù)器的實(shí)現(xiàn)
Live555本身并不具備計(jì)費(fèi)功能,需要進(jìn)行二次開發(fā),添加計(jì)費(fèi)接口,才能滿足實(shí)際要求。根據(jù)對(duì)源碼的分析,結(jié)合具體的機(jī)頂盒,可以建立一套接字向計(jì)費(fèi)管理程序發(fā)送RTSP的方法,節(jié)目名稱,發(fā)送時(shí)間,機(jī)頂盒IP地址,根據(jù)此信息可以對(duì)其進(jìn)行實(shí)現(xiàn)按次(按天)計(jì)費(fèi)。
開發(fā)流程:
1) 建立使用環(huán)境
通過(guò)代碼TaskScheduler* scheduler = BasicTaskScheduler::createNew();
UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);來(lái)生成BasicUsageEnvironment類的一個(gè)對(duì)象,建立基本使用環(huán)境。
2) 權(quán)限控制
利用代碼UserAuthenticationDatabase* authDB = NULL;
authDB = newUserAuthenticationDatabase;
authDB -> addUserRecord(\"username 1 \", \"password 1 \");實(shí)現(xiàn)權(quán)限控制,可以阻止沒有權(quán)限的用戶進(jìn)行點(diǎn)播。沒有權(quán)限控制需要的可以省略此部分。
3) 建立RTSP服務(wù)器
利用代碼RTSPServer* rtspServer;
portNumBits rtspServerPortNum = 554;
rtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);建立RTSP服務(wù)器,該服務(wù)器完成與客戶端的交互,實(shí)現(xiàn)客戶端的VCR操作,即在客戶端完成對(duì)當(dāng)前節(jié)目的播放、暫停、倒退、快進(jìn)等操作。554是RTSP服務(wù)器的端口,也可以改為其它未被占用的端口,服務(wù)器的IP地址不用特別設(shè)定,它是運(yùn)行點(diǎn)播服務(wù)程序的計(jì)算機(jī)的IP地址。該服務(wù)器只創(chuàng)建一次,一個(gè)服務(wù)器響應(yīng)所有的點(diǎn)播用戶。
4) 執(zhí)行循環(huán)方法
通過(guò)代碼env->taskScheduler().doEventLoop();來(lái)執(zhí)行循環(huán)方法,對(duì)套接字的讀取事件和對(duì)媒體文件的延時(shí)發(fā)送操作都在這個(gè)循環(huán)中完成。
5) 計(jì)費(fèi)接口的添加
添加套接字sckIn并進(jìn)行套接字與執(zhí)行函數(shù)相關(guān)聯(lián)
envir().taskScheduler().turnOnBackgroundReadHandling(sckIn,(TaskScheduler::BackgroundHandlerProc *)incomingHandler, this);執(zhí)行函數(shù)的功能是:收到用戶的點(diǎn)播信息(RTSP的方法,節(jié)目名稱,發(fā)送時(shí)間,機(jī)頂盒IP地址)發(fā)送給計(jì)費(fèi)管理程序。這樣前臺(tái)程序收到用戶的信息執(zhí)行相應(yīng)的算法就可以進(jìn)行計(jì)費(fèi)了。
6) 測(cè)試:在linux下按照本文的方法添加了計(jì)費(fèi)模塊,并進(jìn)行了測(cè)試。測(cè)試環(huán)境基于百兆網(wǎng)絡(luò),一臺(tái)普通的PC可以支持100個(gè)碼率為800Kbps的h.264的ts流,客戶端采用虛擬客戶端和機(jī)頂盒,正確記錄了用戶的基本信息,并實(shí)現(xiàn)了計(jì)費(fèi)功能。
4 結(jié)論
設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于LiveMedia的視頻點(diǎn)播系統(tǒng),實(shí)現(xiàn)了計(jì)費(fèi)功能,達(dá)到了滿意的效果,并成功應(yīng)用于酒店中,但是隨著用戶并發(fā)量的增加,需要多臺(tái)PC機(jī)才能滿足應(yīng)用,負(fù)載均衡模塊的設(shè)計(jì),還有待進(jìn)一步的研究。
參考文獻(xiàn):
[1] Schulzrinne H, Casner S, Frederick R and Jacobson V, RTP: a Transport Protocol for Real-Time Applications, RFC 1889 [Z], January 1996.
[2] Schulzrinne H,Rao A,Lanphier R, Real Time Streaming Pro-tocol (RTSP)[R]. Tech Rep :RFC2326 ,1998.
[3] 張文鐘.stream-live555[EB/OL].http://140.113.13.90/material/multimedia%20com/stream-live555.pdf.
[4] LiveMedia網(wǎng)站[EB/OL].[2009-04-10].http://www.live555.com/.
[5] 高建水,陳耀武,李嵐嵐.基于RTSP協(xié)議的視頻點(diǎn)播系統(tǒng)設(shè)計(jì)[J].電子器件,2006,(4).
[6] 呂慰欣,王芙蓉.一種基于RTSP協(xié)議的電信級(jí)VOD系統(tǒng)[J]計(jì)算機(jī)與數(shù)字工程,2006,(11).