視頻播放器設(shè)計(jì)_第1頁
視頻播放器設(shè)計(jì)_第2頁
視頻播放器設(shè)計(jì)_第3頁
視頻播放器設(shè)計(jì)_第4頁
視頻播放器設(shè)計(jì)_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、視頻播放器設(shè)計(jì)1 需求分析由于計(jì)算機(jī)的普及,極大地改變了人們的生活。隨之帶來了開發(fā)各種軟件的需求。家用型計(jì)算機(jī)主要用于家用軟件、學(xué)習(xí)軟件、游戲軟件和多媒體和多媒體軟件,以及播放CD、VCD、DVD、MP3等多媒體信息。然而多媒體播放器的開發(fā)仍然不能滿足人們的需求,多媒體文件格式多樣,但卻沒有一款播放器能夠滿足所有格式的解碼。人們渴望解碼能力更強(qiáng)大,功能更完備的多媒體播放器?!岸嗝襟w”是一種新型的信息處理與傳播技術(shù)。有人認(rèn)為它是信息及其傳輸媒介方面的一場(chǎng)根本革命。人們對(duì)新技術(shù)的渴望和歡迎、新奇感和占有欲、宣傳熱情和贊美態(tài)度,是發(fā)自內(nèi)心的。特別是計(jì)算機(jī)多媒體技術(shù)的功能,令人大開眼界,驚嘆不已。它在

2、商業(yè)、信息檢索、文化娛樂和教育等方面的應(yīng)用效果明顯,前景廣闊。由多媒體播放器的開發(fā)現(xiàn)狀看來,并沒有哪一款播放器能適應(yīng)所有多媒體文件的解讀,隨著視頻、音頻的迅猛發(fā)展,媒體文件的格式層出不窮,由過往美國(guó)在線(AOL)公司的Nullsoft部門開發(fā)的Winamp獨(dú)占鰲頭,到Real Networks公司的Real Player和微軟公司的Windows Media Player風(fēng)靡全球,再到如今播放器開發(fā)的百花齊放的競(jìng)爭(zhēng)時(shí)代,多媒體播放器的開發(fā)經(jīng)歷了許多風(fēng)浪和變化,但是,仍然沒有出現(xiàn)全能的播放器,始終沒有跨越編碼格式的局限,隨著多媒體技術(shù)的不斷發(fā)展,人們對(duì)多媒體軟件的要求也不斷高漲,所以對(duì)多媒體軟件

3、的開發(fā)也成為當(dāng)今計(jì)算機(jī)開發(fā)的重要課題。目前的音頻、視頻格式繁多,研制格式覆蓋面廣的多媒體播放器前景非常廣泛。 隨著計(jì)算機(jī)、家電、通信等技術(shù)的不斷發(fā)展,多媒體技術(shù)有著廣泛的開發(fā)前景,尤其是多媒體播放器的開發(fā),開發(fā)格式覆蓋面更廣,兼容性更好,功能更完備的播放器勢(shì)在必行。本文主要采用C+ Builder2009作為開發(fā)工具,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)多媒體播放器??刹シ臡P3,AVI,WMV,WMA,RM,RMVB,SWF等多種格式的多媒體文件,并且能夠控制播放,暫停,停止,快進(jìn),后退,音量控制的調(diào)節(jié),選擇上一曲,選擇下一曲,圖像的顯示,文件的計(jì)時(shí),列表文件的添減操作等多種播放控制功能,界面簡(jiǎn)明,操作簡(jiǎn)單。2

4、系統(tǒng)總體設(shè)計(jì)2.1DirectShow概述DirectShow是一種通過自定義或內(nèi)置的大量的Filter(過濾器)來處理多媒體數(shù)據(jù)的體系結(jié)構(gòu)。這些Filter大致分三類:Source Filter(源過濾器)、Transform Filter(轉(zhuǎn)換過濾器)、Render Filter(呈現(xiàn)過濾器)。源過濾器主要負(fù)責(zé)獲取數(shù)據(jù),數(shù)據(jù)源可以是文件、網(wǎng)絡(luò)、計(jì)算機(jī)采集卡或數(shù)字?jǐn)z像機(jī)里的,然后數(shù)據(jù)向下傳輸?shù)絋ransform Filter,它主要負(fù)責(zé)數(shù)據(jù)的格式轉(zhuǎn)換,然后繼續(xù)向下傳輸?shù)絉ender Filter,它主要負(fù)責(zé)數(shù)據(jù)的最終去向,將數(shù)據(jù)送給顯卡聲卡進(jìn)行播放或輸出變成文件存儲(chǔ)起來,見圖2-1。圖2-1

5、 DirectShow開發(fā)應(yīng)用程序原理圖過濾器Filter是建立在COM技術(shù)基礎(chǔ)上的,每個(gè)Filter本身就是一個(gè)COM組件,各個(gè)Filter集合組成過濾器圖(FilterGraph),DirectShow提供Filter Graph Manager組件來管理整個(gè)過濾器圖,比如Filter間的連接和數(shù)據(jù)流動(dòng)。Filter之間通過Pin(針腳)連接。更多感性認(rèn)識(shí)DirectShow,可以DirectX SDK中的自帶的實(shí)用的程序GraphEdit,位于安裝目錄BinDXUtilsgraphedt.exe。GraphEdit是構(gòu)造Filter Graph Manager的可視化工具,在GraphE

6、dit中可以很方便地設(shè)計(jì)出過濾器圖,并驗(yàn)證其可行性。比如:播放一個(gè)典型的Demo1.mpg文件(將文件拖動(dòng)到GraphEdit窗口)所自動(dòng)構(gòu)建的Filter Graph。見圖2-2。圖2-2 MPEG文件播放的Filter Graph如圖2所示,箭頭方向即是數(shù)據(jù)的流動(dòng),可以看到:MPEG-1 Stream Splitter屬于Source Filters,負(fù)責(zé)接收源文件數(shù)據(jù);MPEG Audio Decoder、MPEG Video Decoder屬于Transform Filters;分別負(fù)責(zé)視頻、音頻的解碼;Default DirectSound Device、Video Renderer

7、屬于Render Filters,分別負(fù)責(zé)對(duì)視頻顯示和音頻播放。執(zhí)行菜單Graph-Play,可以看到播放的影音文件。在Graph-Insert Filters可以看到DirectShow提供的大量的支持基本應(yīng)用的Filter。2.2軟件的總體架構(gòu)圖2-3 軟件架構(gòu)2.3 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)下面在C+ Builder中,利用DirectShow技術(shù)設(shè)計(jì)媒體播放器,介紹了DirectShow程序的一般編寫方法。以兩種方法實(shí)現(xiàn):一種是直接用DirectX SDK;另一種是用基于DirectShow技術(shù)的第三方控件包DsPack。2.3.1 直接用Direct X SDK中的DirectShow技術(shù)的媒

8、體播放器。用DirectShow編寫播放器,可以說主要包括三步:創(chuàng)建一個(gè)Filter Graph Manager組件。根據(jù)實(shí)際的應(yīng)用,創(chuàng)建一條完整的鏈路。比如播放一個(gè)本地文件:m_FilterGraph-RenderFile(“Demo1mpg”,NULL);調(diào)用Filter Graph Manager(或某個(gè)Filter)上的各個(gè)接口方法進(jìn)行控制。并完成Filter Gramph Manager與應(yīng)用程序的事件交互。比如IMediaControl接口方法Run()、Stop()來控制媒體的播放與停止。在本實(shí)例中,第一步創(chuàng)建一個(gè)Filter Graph Manager組件,由自定義的封裝類CD

9、XGraph來完成,它的實(shí)現(xiàn)文件是CDXGraph.cpp和CDXGraph.h。第二三步要實(shí)現(xiàn)與CDXGraph之問的事件交互。由主窗口MainForm(MainUnit.cpp和MainUnit.h)完成。該程序部分主要代碼如下:/定義基本接口。IGraphBuilder是最重要的接口,用于構(gòu)造Filter graph;IMediaControl播放控制接口,控制播放、停止、暫停等;IMediaEventEx:應(yīng)用程序通過此接口獲得播放過程中發(fā)生的事件,如播放完畢等。IBasicVideo、IBasicAudio分別是圖像和聲音控制接口;IVideoWindow視頻窗口控制接口;IMedi

10、aSeeking用于媒體數(shù)據(jù)流的定位,提供對(duì)播放的精確控制,如獲得當(dāng)前播放位置等。IGraphBuilder *mGraph;IMediaControl *mMediaControl;IMediaEVentEx *mEvent;IBasicVideo *mBasicVideo;IBasicAudio *mBasicAudio;IVideoWindow *mVideoWindow;IMediaSeeking *mSeeking;/用API函數(shù)初始化COM組件庫CoInitialize(NULL);/創(chuàng)建Filter graph對(duì)象,得到IGraphBuilder接口的接口指針mGrphHRESU

11、LT hr=CoCreateInstance(CLSID_FilteGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void * *)mGraph);/用QueryInterface()函數(shù)獲取接口指針hr = mGraph - QueryInterface(IID_IMediaControl,(void * *)mMediaControl);hr = mGraph - QueryInterface(IID_IMediaEventEx,(void * *)&mEvent);hr = mGraph - QueryInterface(IID_I

12、BasicVideo,(void * *)mBasicVideo);hr = mGraph - QueryInterface(IID_IBasicAudio,(void * *)&mBasicAudio);hr = mGraph - QueryInterface(IID_ideowindow,(void * *)&mVideowindow);hf = mGraph - QueryInterface(IID_lMediaSeeking,(void * *)&mseeking);/連接輸入輸出Pin針腳,連接各個(gè)Filterhr=mGraph - ConnectDirect(inOutputPin

13、,inInputPin,inMediaTyp);/IGraphBuilder接口的方法RenderFile來連接給定的媒體文件,完成Filter Graph的構(gòu)建。m_FilterGraph - RenderFile(m_SourceFile.c_str();/設(shè)置視頻窗口并設(shè)置消息通知窗口m_FilteGraph - SetDisplaywindow(Panell -Handle);m_FilteGraph - SetNotifyWindow(this -Handle);/開始播放m_FilteGraph -Run();/關(guān)閉COM組件庫,釋放資源CoUtlinitialize();2.3.

14、2 基于DirectShow技術(shù)的第三方控件包DSPack的媒體播放器Dspack2.34是C+ Builder中用于做DirectShow開發(fā)的免費(fèi)VCL控件。下載地址:圖2-4組件面板上的DSPack2.34Dspack2.34中有七個(gè)組件:FilterGraph、VideoWindow、SampleGrabber、Filter、ASFWriter、DSTrackBar、DSVideoWindowEx2。見圖5-1。FilterGraph組件基本對(duì)應(yīng)于DirectShow中的Filter Graph Manager,F(xiàn)ilter Graph的創(chuàng)建和控制由它完成。Filter組件可以充當(dāng)Di

15、rectShow中的各種Filter,VideoWindow組件相當(dāng)于是一個(gè)RenderingFilter,用來顯示采集到的視頻圖像。其它各組件的詳細(xì)說明可以參照DSPack安裝目錄下的幫助文檔help.chm2-3。程序由一個(gè)主窗體MainForm組成。MainForm窗體上放置FilterGraph組件,屬性Name命名為FilterGraph,Mode屬性為gmNormal;放置VideoWindow組件,F(xiàn)ilterGraph屬性設(shè)置為FilterGraph;放置DSTrackBar組件,用于顯示播放進(jìn)度;其它放置0penDialog、MainMenu、四個(gè)Button組件,Capti

16、on分別設(shè)置為打開、播放、暫停、停止。MainForm中主要代碼如下:Buttonl的0nclick事件添加如下代碼:if(0penDialog - Execute()|FilterGraph - Active = TRUE;/初始化各個(gè)Filter,并建立FilterGraph FilterGraph - RenderFile(OpenDialog -FileNalm);/播放文件名給FilterGraphButton2的OnClick事件添加如下代碼:FilterGraph - Play(); /控制FilterGraph的播放Button3、Button4的0nclick事件分別添加如下

17、代碼:FilterGraph - Paus(); /播放暫停FilterGraph - Stop(); /播放停止VideoWindw的OnDblClick雙擊事件添加代碼:VideoWindow - FullScreen =! VideoWindow -FullScreen;/全屏播放MainForm的OnCloseQuery事件添加如下代碼:FiherGraph - Active = FALsE;/釋放各個(gè)Filter本程序開發(fā)環(huán)境WindowsXP + DirectX9.O + DSPack2.34。本程序編譯后成功運(yùn)行。3 測(cè)試與維護(hù)3.1 創(chuàng)建和測(cè)試應(yīng)用程序?yàn)榱舜_保本系統(tǒng)能夠正常運(yùn)行

18、,需要在開發(fā)完成之后做一次較全面的測(cè)試?,F(xiàn)將具體操作及過程舉例說明如下:創(chuàng)建和測(cè)試應(yīng)用程序應(yīng)是交替進(jìn)行的,既要注意開發(fā)的效率也要注意它的穩(wěn)定性。每編寫一個(gè)模塊,就要對(duì)這個(gè)模塊進(jìn)行測(cè)試,看它能否根據(jù)特定的要求工作。及早發(fā)現(xiàn)問題,及早解決,否則到最后再來測(cè)試的話,難度會(huì)大大增加。3.2 程序改進(jìn)本軟件沒有考慮到刪除播放列表中文件在ListBox中的索引號(hào)小于當(dāng)前值的時(shí)候,刪除之后不能把光標(biāo)移動(dòng)到當(dāng)前播放文件。本軟件沒有提供解碼更新,這是本軟件以后要著重改的地方。3.3測(cè)試方法一般來說,對(duì)程序測(cè)試有兩種測(cè)試方法:如果已經(jīng)知道了軟件系統(tǒng)應(yīng)具有的功能,可通過測(cè)試來對(duì)每個(gè)功能是否都能正常使用;如果知道程序

19、的內(nèi)部工作過程,可以通過測(cè)試來檢測(cè)程序內(nèi)部是否按照規(guī)格說明書的規(guī)定正常進(jìn)行。前一種方法稱為黑盒測(cè)試,后一種方法稱為白盒子測(cè)試。黑盒測(cè)試又稱為功能測(cè)試,白盒子測(cè)試又稱為結(jié)構(gòu)測(cè)試。4 本系統(tǒng)采用黑盒測(cè)試,以下以播放WMV文件為例子。界面如下:4 總結(jié)基于兩種不同方法實(shí)現(xiàn)媒體播放器程序時(shí)的代碼比較,我們采用了C+ Bui- ldel2009 + Direct X SDK9.O + DSPack2.34編寫該播放器。因?yàn)橛胏+ Buildel2009 + Directx SDK9.0編寫時(shí),代碼行約為400行,并需要深入的DirectShow和COM組件知識(shí);而采用C+ Buildel2009 + Direct X SDK9.O + DSPack2.34編寫時(shí),代碼行約為20行,僅需

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論