精品人妻无码一区二区三区软件 ,麻豆亚洲AV成人无码久久精品,成人欧美一区二区三区视频,免费av毛片不卡无码

您現(xiàn)在的位置是:首頁影視論文

視頻點(diǎn)播服務(wù)器構(gòu)建

發(fā)布時(shí)間:2011-03-15 10:44:44更新時(shí)間:2011-03-15 10:44:44 1

  摘要:LiveMedia已經(jīng)在VLC和MPlayer等開源的流媒體播放軟件中得到應(yīng)用。文章對LiveMedia的組成和功能進(jìn)行了分析,并對LiveMedia在視頻點(diǎn)播方面的應(yīng)用進(jìn)行了詳細(xì)的闡述。
  關(guān)鍵詞:流媒體RTPRTSP服務(wù)器視頻點(diǎn)播
  
  
  流媒體的市場空間迅速擴(kuò)大,國內(nèi)很多公司迅速介入流媒體產(chǎn)品的開發(fā)。國內(nèi)的流媒體產(chǎn)品多借助于國外某些開源的RTP(實(shí)時(shí)傳輸協(xié)議real-timetransportprotocol)開發(fā)庫進(jìn)行開發(fā),在國外開源的RTP開發(fā)庫中,LiveMedia不但提供了基于RTP協(xié)議的開發(fā)庫,而且對于開發(fā)庫在視頻點(diǎn)播,直播等方面的應(yīng)用也給出相應(yīng)的參考實(shí)例,這對于從事流媒體的開發(fā)人員來都具有較高的參考價(jià)值。整個(gè)庫文件都是由標(biāo)準(zhǔn)的C++語言寫成,能夠跨平臺(tái)編譯,適合于構(gòu)建低成本的流媒體應(yīng)用系統(tǒng),也適合于嵌入式系統(tǒng)。
  1LiveMedia的整體架構(gòu)
   LiveMedia可分為三部分:RTP庫、LiveMedia庫和流媒體應(yīng)用實(shí)例,RTP庫的主要功能是采用RTP協(xié)議完成數(shù)據(jù)的發(fā)送,LiveMedia庫主要功能是實(shí)現(xiàn)對各種媒體類型和編碼格式的支持,應(yīng)用實(shí)例主要用于說明如何應(yīng)用RTP庫開發(fā)流媒體應(yīng)用程序。下面分別對三部分作詳細(xì)描述。
  1.1RTP庫
  RTP庫又可分為三部分:UsageEnvironment庫、Groupsock庫和BasicUsageEnvironment庫。為了區(qū)分這三部分,在源程序目錄中有三個(gè)子目錄來分別放置這三個(gè)庫,這三個(gè)子目錄的名字分別是三個(gè)庫的名字,即UsageEnvironment、Groupsock和BasicUsageEnvironment。
  UsageEnvironment庫中包括了三個(gè)主要的類:UsageEnvironment類、TaskScheduler類和HarshTable類,這些類都是抽象的基類,它們的實(shí)現(xiàn)都在其子類中完成。其中HarshTable類定義了通用Hash表的接口,主要為其它類服務(wù)。Hash表對象中存放的是諸如Socket句柄一類的對象,一旦程序需要,能夠?qū)崿F(xiàn)快速查找。UsageEnvironment類和TaskScheduler類主要用來處理延時(shí)事件,異步讀取事件和輸出錯(cuò)誤或警告信息。延時(shí)事件處理是指對多媒體文件的傳輸處理,由于多媒體文件一般都較大,要完全發(fā)送到客戶端需要經(jīng)過較長一段時(shí)間,客戶端的播放程序要播放完這個(gè)文件一般也要經(jīng)過一段時(shí)間。這樣,為了實(shí)現(xiàn)邊傳輸邊播放,在服務(wù)器端將文件讀出后,根據(jù)多媒體文件的播放速度,每隔一段時(shí)間,發(fā)送一次數(shù)據(jù),這些發(fā)送任務(wù)都發(fā)生在文件播出指令以后,以自動(dòng)方式進(jìn)行,不斷循環(huán),直到文件發(fā)送完畢或遇到停止指令。異步讀取事件處理是指程序通過Socket以異步方式接收指令,并進(jìn)行相應(yīng)的處理。輸出錯(cuò)誤或警告信息是指在整個(gè)程序運(yùn)行過程中,如果出錯(cuò)誤或警告信息,該部分負(fù)責(zé)輸出。
  Groupsock庫中的類封裝了網(wǎng)絡(luò)接口和套接字,在這里完成指令和數(shù)據(jù)的收發(fā)任務(wù)。在有些情況下其中的Groupsock類還可以完成多播數(shù)據(jù)的發(fā)送和接收任務(wù)。
  BasicUsageEnvironment類定義了UsageEnvironment類的一個(gè)具體實(shí)現(xiàn),用作配置基本環(huán)境。
  1.2LiveMedia庫
   這個(gè)庫在代碼目錄中也有對應(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í)例在源程序目錄中對應(yīng)于TestProgs子目錄,這個(gè)子目錄中的程序用來說明如何使用以上提到的兩個(gè)庫去開發(fā)應(yīng)用程序。其中主要有以下幾個(gè)程序:
  1.3.1使用RTSP協(xié)議的客戶端
  程序名叫openRTSP,是一個(gè)命令行程序,用這個(gè)程序可打開、接收和記錄某一媒體流,這個(gè)媒體流一般通過以RTSP開頭的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ù)器,并可對服務(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庫的應(yīng)用
   RTP庫的作用是方便使用者使用RTP協(xié)議發(fā)送和接收數(shù)據(jù),無須考慮SSRC(同步源標(biāo)識(shí))沖突等一些底層的問題。它是LiveMedia的基礎(chǔ)。在實(shí)際應(yīng)用中,也可以只使用RTP庫來發(fā)送多媒體數(shù)據(jù),而不必考慮其它庫。
  2.2多格式支持庫的應(yīng)用
   LiveMedia庫的功能強(qiáng)大,不但支持多種格式,而且支持多種功能,包括建立點(diǎn)播服務(wù)器、直播服務(wù)器和客戶端等。該庫也有較大的擴(kuò)展性,要擴(kuò)展服務(wù)器支持的格式可以通過繼承FramedSource,要擴(kuò)展客戶端支持的格式可以通過繼承MultiFramedRTPSink,通過以上繼承方式來實(shí)現(xiàn)自己的媒體類。
  3用LiveMedia開發(fā)視頻點(diǎn)播服務(wù)器
  在實(shí)例程序testOnDemandRTSPServer的基礎(chǔ)上,可建立起基于RTSP協(xié)議的視頻點(diǎn)播服務(wù)器,對建立的視頻點(diǎn)播服務(wù)器的測試,可采用通用RealPlayer或開源的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,能夠說明視頻點(diǎn)播服務(wù)器的建立過程,改進(jìn)后就能作為我們需要的服務(wù)器。下面分析這一服務(wù)程序的建立流程:
 。1)建立使用環(huán)境
   通過代碼TaskScheduler*scheduler=BasicTaskScheduler::createNew();
  env=BasicUsageEnvironment::createNew(*scheduler);來生成BasicUsageEnvironment類的一個(gè)對象,建立基本使用環(huán)境。
 。2)權(quán)限控制
   利用代碼UserAuthenticationDatabase*authDB=NULL;authDB=newUserAuthenticationDatabase;
  authDB->addUserRecord("username1","password1");實(shí)現(xiàn)權(quán)限控制,可以阻止沒有權(quán)限的用戶進(jìn)行點(diǎn)播。沒有權(quán)限控制需要的可以省略此部分。
 。3)建立RTSP服務(wù)器
  利用代碼RTSPServer*rtspServer=RTSPServer::createNew(*env,8554,authDB);建立RTSP服務(wù)器,該服務(wù)器完成與客戶端的交互,實(shí)現(xiàn)客戶端的VCR操作,即在客戶端完成對當(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ì)話
   通過創(chuàng)建ServerMediaSession類的對象來創(chuàng)建服務(wù)器媒體會(huì)話,不同的文體各自對應(yīng)一個(gè)服務(wù)器媒體會(huì)話。一個(gè)媒體會(huì)話對應(yīng)一個(gè)流名字(streamName)。當(dāng)客戶點(diǎn)播時(shí),要輸入流名字,告訴RTSP服務(wù)器點(diǎn)播的是哪個(gè)流。流名字和文件名的對應(yīng)關(guān)系是通過增加子會(huì)話建立起來的。媒體會(huì)話對會(huì)話描述、會(huì)話持續(xù)時(shí)間、流名字等與會(huì)話有關(guān)的信息進(jìn)行管理。
  (5)增加子會(huì)話
   給已經(jīng)創(chuàng)建的服務(wù)器媒體會(huì)話增加子會(huì)話,子會(huì)話可以是視頻子會(huì)話,也可以是聲音會(huì)話,或者兩者都有。增加子會(huì)話通過ServerMediaSession類的addSubsession方法來實(shí)現(xiàn)。子會(huì)話的功能包括開始流、暫停流和刪除流等諸多操作。
 。6)執(zhí)行循環(huán)方法
  通過代碼env->taskScheduler().doEventLoop();來執(zhí)行循環(huán)方法,對套接字的讀取事件和對媒體文件的延時(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)這樣的功能,必須對實(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)有客戶端通過RTSP會(huì)話告訴服務(wù)器點(diǎn)播的文件名時(shí),程序首先查找這個(gè)文件對應(yīng)的服務(wù)器媒體會(huì)話是否存在?梢酝ㄟ^代碼
  fOurServer.lookupServerMediaSession(urlSuffix);
  來實(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í)例,需要自己編寫?梢允褂靡韵麓a:
  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ì)話存在,就跳過創(chuàng)建流。當(dāng)客戶端通過RTSP會(huì)話要求播放媒體文件時(shí),可以直接播放。
  4結(jié)束語
   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


轉(zhuǎn)載請注明來自:http://www.jinnzone.com/yingshilw/7345.html