所屬欄目:影視教育論文 發(fā)布日期:2010-08-12 15:38 熱度:
摘要:LiveMedia已經(jīng)在VLC和MPlayer等開源的流媒體播放軟件中得到應(yīng)用。文章對LiveMedia的組成和功能進行了分析,并對LiveMedia在視頻點播方面的應(yīng)用進行了詳細的闡述。
關(guān)鍵詞:流媒體RTPRTSP服務(wù)器視頻點播
流媒體的市場空間迅速擴大,國內(nèi)很多公司迅速介入流媒體產(chǎn)品的開發(fā)。國內(nèi)的流媒體產(chǎn)品多借助于國外某些開源的RTP(實時傳輸協(xié)議real-timetransportprotocol)開發(fā)庫進行開發(fā),在國外開源的RTP開發(fā)庫中,LiveMedia不但提供了基于RTP協(xié)議的開發(fā)庫,而且對于開發(fā)庫在視頻點播,直播等方面的應(yīng)用也給出相應(yīng)的參考實例,這對于從事流媒體的開發(fā)人員來都具有較高的參考價值。整個庫文件都是由標準的C++語言寫成,能夠跨平臺編譯,適合于構(gòu)建低成本的流媒體應(yīng)用系統(tǒng),也適合于嵌入式系統(tǒng)。
1LiveMedia的整體架構(gòu)
LiveMedia可分為三部分:RTP庫、LiveMedia庫和流媒體應(yīng)用實例,RTP庫的主要功能是采用RTP協(xié)議完成數(shù)據(jù)的發(fā)送,LiveMedia庫主要功能是實現(xiàn)對各種媒體類型和編碼格式的支持,應(yīng)用實例主要用于說明如何應(yīng)用RTP庫開發(fā)流媒體應(yīng)用程序。下面分別對三部分作詳細描述。
1.1RTP庫
RTP庫又可分為三部分:UsageEnvironment庫、Groupsock庫和BasicUsageEnvironment庫。為了區(qū)分這三部分,在源程序目錄中有三個子目錄來分別放置這三個庫,這三個子目錄的名字分別是三個庫的名字,即UsageEnvironment、Groupsock和BasicUsageEnvironment。
UsageEnvironment庫中包括了三個主要的類:UsageEnvironment類、TaskScheduler類和HarshTable類,這些類都是抽象的基類,它們的實現(xiàn)都在其子類中完成。其中HarshTable類定義了通用Hash表的接口,主要為其它類服務(wù)。Hash表對象中存放的是諸如Socket句柄一類的對象,一旦程序需要,能夠?qū)崿F(xiàn)快速查找。UsageEnvironment類和TaskScheduler類主要用來處理延時事件,異步讀取事件和輸出錯誤或警告信息。延時事件處理是指對多媒體文件的傳輸處理,由于多媒體文件一般都較大,要完全發(fā)送到客戶端需要經(jīng)過較長一段時間,客戶端的播放程序要播放完這個文件一般也要經(jīng)過一段時間。這樣,為了實現(xiàn)邊傳輸邊播放,在服務(wù)器端將文件讀出后,根據(jù)多媒體文件的播放速度,每隔一段時間,發(fā)送一次數(shù)據(jù),這些發(fā)送任務(wù)都發(fā)生在文件播出指令以后,以自動方式進行,不斷循環(huán),直到文件發(fā)送完畢或遇到停止指令。異步讀取事件處理是指程序通過Socket以異步方式接收指令,并進行相應(yīng)的處理。輸出錯誤或警告信息是指在整個程序運行過程中,如果出錯誤或警告信息,該部分負責輸出。
Groupsock庫中的類封裝了網(wǎng)絡(luò)接口和套接字,在這里完成指令和數(shù)據(jù)的收發(fā)任務(wù)。在有些情況下其中的Groupsock類還可以完成多播數(shù)據(jù)的發(fā)送和接收任務(wù)。
BasicUsageEnvironment類定義了UsageEnvironment類的一個具體實現(xiàn),用作配置基本環(huán)境。
1.2LiveMedia庫
這個庫在代碼目錄中也有對應(yīng)的子目錄,目錄名是LiveMedia。這部分是LiveMedia的核心,可以實現(xiàn)RTP和RTSP會話的建立、各種RTPpayload的打包和解析以及RTSP的控制等。其中定義了一個基類Medium,其它各種與流媒體類型和編碼有關(guān)的類都從這個類繼承。以下是基類Medium與其部分子類的關(guān)系圖。在這里,MediaSink用于從其它模塊接收數(shù)據(jù)并進行處理。MediaSource用于自身產(chǎn)生數(shù)據(jù)或接收其它模塊的數(shù)據(jù),并可以將其輸出。Mpeg1or2Demux用于將Mpeg1或Mpeg2格式的程序流文件的聲音、圖像分離。RTSPServer用于建立基于RTSP協(xié)議的RTSP服務(wù)器。RTSPClient用于建立基于RTSP協(xié)議的客房端。還有其它很多子類可以在源程序和幫助文件中找到。
1.3應(yīng)用實例
應(yīng)用實例在源程序目錄中對應(yīng)于TestProgs子目錄,這個子目錄中的程序用來說明如何使用以上提到的兩個庫去開發(fā)應(yīng)用程序。其中主要有以下幾個程序:
1.3.1使用RTSP協(xié)議的客戶端
程序名叫openRTSP,是一個命令行程序,用這個程序可打開、接收和記錄某一媒體流,這個媒體流一般通過以RTSP開頭的URL指定。例如:RTSP://192.168.0.1/test,test是媒體流的名字。參照該程序,可以建立基于RTSP協(xié)議的客戶端。
1.3.2使用RTSP協(xié)議的服務(wù)器端
程序名叫testOnDemandRTSPServer,這個程序能夠在程序啟動時建立RTSP服務(wù)器,并根據(jù)指定的文件建立相應(yīng)的子會話,在接收到點播命令后能夠建立相應(yīng)的單播流。該程序支持的視頻媒體類型主要有MPEG1,MPEG2和MPEG4格式的基本流文件、MPEG1、MPEG2格式的程序流和傳輸流文件。在這個程序的基礎(chǔ)上,可以建立視頻點播服務(wù)器,并可對服務(wù)器支持的格式進行擴展。
1.3.3MPEG聲音+視頻程序
程序名叫testMPEG1or2AudioVideoStreamer,這個程序在啟動后能不斷地讀取指定的MPEG1或MPEG2程序流文件,并把他們分解為獨立的聲音基本流和視頻基本流,然后進行流化,發(fā)送數(shù)據(jù)包到多播組239.255.42.42,端口是6666/6667(聲音)和8888/8889(視頻)。在這程序的基礎(chǔ)上,可以建立視頻直播服務(wù)器。
2應(yīng)用分析
2.1RTP庫的應(yīng)用
RTP庫的作用是方便使用者使用RTP協(xié)議發(fā)送和接收數(shù)據(jù),無須考慮SSRC(同步源標識)沖突等一些底層的問題。它是LiveMedia的基礎(chǔ)。在實際應(yīng)用中,也可以只使用RTP庫來發(fā)送多媒體數(shù)據(jù),而不必考慮其它庫。
2.2多格式支持庫的應(yīng)用
LiveMedia庫的功能強大,不但支持多種格式,而且支持多種功能,包括建立點播服務(wù)器、直播服務(wù)器和客戶端等。該庫也有較大的擴展性,要擴展服務(wù)器支持的格式可以通過繼承FramedSource,要擴展客戶端支持的格式可以通過繼承MultiFramedRTPSink,通過以上繼承方式來實現(xiàn)自己的媒體類。
3用LiveMedia開發(fā)視頻點播服務(wù)器
在實例程序testOnDemandRTSPServer的基礎(chǔ)上,可建立起基于RTSP協(xié)議的視頻點播服務(wù)器,對建立的視頻點播服務(wù)器的測試,可采用通用RealPlayer或開源的VLC客戶端進行。
3.1基本視頻點播服務(wù)器分析
一個完整的視頻點播服務(wù)器應(yīng)包括點播服務(wù)系統(tǒng)和管理系統(tǒng)兩大部分。點播服務(wù)系統(tǒng)的功能包括建立與客戶端的RTSP會話、向客戶端發(fā)送需要的媒體信息等,管理系統(tǒng)則擔負用戶認證,計費等的任務(wù)。這其中的核心部分是媒體服務(wù)系統(tǒng),服務(wù)器的性能很大程度上決定于它。LiveMedia代碼中的實例程序testOnDemandRTSPServer,能夠說明視頻點播服務(wù)器的建立過程,改進后就能作為我們需要的服務(wù)器。下面分析這一服務(wù)程序的建立流程:
(1)建立使用環(huán)境
通過代碼TaskScheduler*scheduler=BasicTaskScheduler::createNew();
env=BasicUsageEnvironment::createNew(*scheduler);來生成BasicUsageEnvironment類的一個對象,建立基本使用環(huán)境。
(2)權(quán)限控制
利用代碼UserAuthenticationDatabase*authDB=NULL;authDB=newUserAuthenticationDatabase;
authDB->addUserRecord("username1","password1");實現(xiàn)權(quán)限控制,可以阻止沒有權(quán)限的用戶進行點播。沒有權(quán)限控制需要的可以省略此部分。
(3)建立RTSP服務(wù)器
利用代碼RTSPServer*rtspServer=RTSPServer::createNew(*env,8554,authDB);建立RTSP服務(wù)器,該服務(wù)器完成與客戶端的交互,實現(xiàn)客戶端的VCR操作,即在客戶端完成對當前節(jié)目的播放、暫停、倒退、快進等操作。8554是RTSP服務(wù)器的端口,也可以改為其它未被占用的端口,服務(wù)器的IP地址不用特別設(shè)定,它是運行點播服務(wù)程序的計算機的IP地址。該服務(wù)器只創(chuàng)建一次,一個服務(wù)器響應(yīng)所有的點播用戶。
(4)創(chuàng)建服務(wù)器媒體會話
通過創(chuàng)建ServerMediaSession類的對象來創(chuàng)建服務(wù)器媒體會話,不同的文體各自對應(yīng)一個服務(wù)器媒體會話。一個媒體會話對應(yīng)一個流名字(streamName)。當客戶點播時,要輸入流名字,告訴RTSP服務(wù)器點播的是哪個流。流名字和文件名的對應(yīng)關(guān)系是通過增加子會話建立起來的。媒體會話對會話描述、會話持續(xù)時間、流名字等與會話有關(guān)的信息進行管理。
(5)增加子會話
給已經(jīng)創(chuàng)建的服務(wù)器媒體會話增加子會話,子會話可以是視頻子會話,也可以是聲音會話,或者兩者都有。增加子會話通過ServerMediaSession類的addSubsession方法來實現(xiàn)。子會話的功能包括開始流、暫停流和刪除流等諸多操作。
(6)執(zhí)行循環(huán)方法
通過代碼env->taskScheduler().doEventLoop();來執(zhí)行循環(huán)方法,對套接字的讀取事件和對媒體文件的延時發(fā)送操作都在這個循環(huán)中完成。
3.2視頻點播服務(wù)器的實現(xiàn)
只要將要點播的文件放入服務(wù)器的指定目錄,在客戶端輸入?yún)f(xié)議名、服務(wù)器的地址和文件名即可實現(xiàn)點播,例如在客戶端輸入RTSP://192.168.0.1/test.vob,只要服務(wù)器的指定目錄存在test.vob,即可正常播放。要實現(xiàn)這樣的功能,必須對實例程序進行改進。在testOnDemandRTSPServer程序中,服務(wù)器媒體會話是在程序啟動的時候創(chuàng)建的,程序一旦啟動便不能更改。要實現(xiàn)真正的視頻點播服務(wù)器,就必須實現(xiàn)動態(tài)的創(chuàng)建服務(wù)器媒體會話。
為了方便動態(tài)創(chuàng)建服務(wù)器媒體會話,可讓流名字和文件名保持一致。當有客戶端通過RTSP會話告訴服務(wù)器點播的文件名時,程序首先查找這個文件對應(yīng)的服務(wù)器媒體會話是否存在。可以通過代碼
fOurServer.lookupServerMediaSession(urlSuffix);
來實現(xiàn),其中fOurServer是類RTSPServer的實例,lookupServerMediaSession是它的一個方法,此時urlSuffix是要查找的服務(wù)器媒體會話的名字。若不存在,可用以下代碼創(chuàng)建:
fOurServer.createServerMediaSessoin(urlSuffix);
創(chuàng)建完成后加入子會話,最后將媒體會話加入RTSPServer。createServerMediaSessoin不是RTSPServe類本身具有的一個實例,需要自己編寫。可以使用以下代碼:
voidRTSPServer::createServerMediaSession(charconst*streamName){
charFileName[100];
strcpy(FileName,"D:VCVideoFile");//點播文件所在目錄
strcat(FileName,streamName);//得到完整的文件名
charconst*descriptionString="TestOnDemand";//流描述
BooleanreuseFirstSource=False;
BooleaniFramesOnly=False;
char*ExtName=strrchr(streamName,'.');
if(!strcmp(ExtName,".mpg")){//如果是mpg類執(zhí)行以下操作
ServerMediaSession*sms =ServerMediaSession::createNew(envir(),streamName,streamName,descriptionString);//創(chuàng)建媒體會話
MPEG1or2FileServerDemux*demux =MPEG1or2FileServerDemux::createNew(envir(),FileName,reuseFirstSource);
sms->addSubsession(demux->newVideoServerMediaSubsession(iFramesOnly));//添加子會話
sms->addSubsession(demux->newAudioServerMediaSubsession());//添加子會話
RTSPServer::addServerMediaSession(sms);//將媒體會話加入RTSPServer
}
}
若服務(wù)器媒體會話存在,就跳過創(chuàng)建流。當客戶端通過RTSP會話要求播放媒體文件時,可以直接播放。
4結(jié)束語
LiveMedia視頻點播服務(wù)程序根據(jù)需要,還可以進一步改進,例如,可以使之支持更多的格式或者成為直播服務(wù)器等。
參考文獻
[1]徐晶.視頻監(jiān)控點播系統(tǒng)視頻編解碼器的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學,2005.1
[2]鐘玉琢,向哲,沈洪.流媒體和視頻服務(wù)器[M].北京:清華大學出版社,2003.6
[3]趙進,葉梧,馮穗力.基于RTP協(xié)議族的流媒體系統(tǒng)設(shè)計和實現(xiàn)[J].計算機工程.2005,31(2):197
[4]http://www.live555.com[DB/OL],2006.10
文章標題:視頻點播服務(wù)器構(gòu)建
轉(zhuǎn)載請注明來自:http://m.anghan.cn/fblw/jiaoyu/yingshi/354.html
攝影藝術(shù)領(lǐng)域AHCI期刊推薦《Phot...關(guān)注:105
Nature旗下多學科子刊Nature Com...關(guān)注:152
中小學教師值得了解,這些教育學...關(guān)注:47
2025年寫管理學論文可以用的19個...關(guān)注:192
測繪領(lǐng)域科技核心期刊選擇 輕松拿...關(guān)注:64
及時開論文檢索證明很重要關(guān)注:52
中國水產(chǎn)科學期刊是核心期刊嗎關(guān)注:54
國際出書需要了解的問題解答關(guān)注:58
合著出書能否評職稱?關(guān)注:48
電信學有哪些可投稿的SCI期刊,值...關(guān)注:66
通信工程行業(yè)論文選題關(guān)注:73
SCIE、ESCI、SSCI和AHCI期刊目錄...關(guān)注:121
評職稱發(fā)論文好還是出書好關(guān)注:68
復(fù)印報刊資料重要轉(zhuǎn)載來源期刊(...關(guān)注:51
英文期刊審稿常見的論文狀態(tài)及其...關(guān)注:69
Web of Science 核心合集期刊評估...關(guān)注:59
教育論文范文
教育技術(shù)論文 特殊教育論文 影視教育論文 藝術(shù)教育論文 體育科學教育論文 人文教育論文 成人教育論文 職業(yè)教育論文 教育學論文 學前教育論文 小學教育論文 中學教育論文 初等教育論文 高等教育論文 天文學論文 數(shù)學論文 物理論文 化學論文
SCI期刊分析
copyright © m.anghan.cn, All Rights Reserved
搜論文知識網(wǎng) 冀ICP備15021333號-3