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