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