色偷偷伊人-色偷偷综合-色无五月-色香蕉影院-色亚洲影院

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

所屬欄目:影視教育論文 發(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

相關(guān)問題解答

SCI服務(wù)

搜論文知識網(wǎng) 冀ICP備15021333號-3

主站蜘蛛池模板: 新婚无套啪啪对白 | 一级性黄色 | 欧美精品亚洲二区 | 高清不卡毛片免费观看 | 色图视频| 不卡的在线视频免费观看 | 九九精品免视频国产成人 | 久久国产精品男女热播 | 久久精品99成人中文字幕880 | 无毒不卡在线播放 | 国产美妇 | 91日本在线精品高清观看 | 久久青青草原精品老司机 | 国产白领丝袜办公室在线视频 | 亚洲国产成人精品一区二区三区 | 91在线 | 亚洲| 欧美一区二区三区免费观看视频 | 久久亚洲伊人成综合人影院 | 49pao强力在线高清基地 | 婷婷色九月 | 亚洲最大色图 | 国产亚洲一区二区在线观看 | 中国一级特黄大片毛片 | 草草在线播放 | 蜜臀在线观看 | 秀人网福利视频在线观看 | 国产丝袜护土调教在线视频 | 国产日本韩国不卡在线视频 | 成人国产在线24小时播放视频 | 东京不热视频在线观看 | 污污网站免费在线观看 | 日韩中文字幕免费在线观看 | 国产在线精品福利大全 | 韩国免费人成在线观看网站 | 亚洲综合色站 | 国产视频播放 | 91四虎国自产在线播放线 | 麻豆视频免费 | 亚洲国产精品网站久久 | 国产91久久精品 | 青青草在线视频视频 |