999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于directshow的視頻播放器設(shè)計(jì)與實(shí)現(xiàn)

2015-04-24 14:24:08伍開勝
科技視界 2015年31期
關(guān)鍵詞:設(shè)置功能

伍開勝 羅 宇 劉 斌

(西華師范大學(xué)計(jì)算機(jī)學(xué)院,四川 南充637000)

0 引言

隨著信息技術(shù)的發(fā)展,多媒體播放器迎來新的挑戰(zhàn)。在多媒體應(yīng)用技術(shù)中,對(duì)多媒體大量的數(shù)據(jù)傳輸、高效的數(shù)據(jù)處理、音視頻流的同步、媒體流的格式轉(zhuǎn)換,一直是需要解決的主要問題,怎樣使流媒體的處理變得簡單而富有成效逐漸成為了焦點(diǎn)問題。而選擇一種合適的應(yīng)用方案,將事半功倍。

本文以微軟的Visual C++作為開發(fā)工具,以Directshow為框架設(shè)計(jì)一個(gè)能播放RMVB,MP4,AVI等常見格式的播放器。

1 DirectShow概述

在DirectShow中,一個(gè)應(yīng)用程序必須實(shí)例化一個(gè)或者多個(gè)過濾器,并將它們連接起來.所有這些過濾器和它們之間的連接被稱為過濾器圖表(FilterGraph)。應(yīng)用程序通過過濾器圖表管理器(Filter Graph Manager)來創(chuàng)建相應(yīng)的Filter Graph.其中,Filter Graph Manager也是個(gè)COM組件,它為應(yīng)用程序提供了建立Filter Graph的各種方法,控制著FilterGraph的運(yùn)行。

2 Filter和Filter Graph

DirectShow是基于模塊化,每個(gè)功能模塊都采取COM組件方式,稱為過濾器(Filter)。Directshow提供了一部分標(biāo)準(zhǔn)的過濾器可直接使用,開發(fā)者也可開發(fā)自己的功能Filter來擴(kuò)展Directshow的應(yīng)用。下面用一個(gè)簡單的小例子來說明如何使用Filter來播放一個(gè)格式為AVI的視頻文件。

(1)先從文件中讀取AVI數(shù)據(jù),形成字節(jié)流(由源Filter完成這一步驟)。

(2)檢查AVI數(shù)據(jù)流的頭格式,然后通過AVI分割Filter將視頻流和音頻流分離。

(3)根據(jù)數(shù)據(jù)壓縮格式的不同,選取不同的decoder Filter對(duì)視頻進(jìn)行解碼。

(4)使用Renderer Filter重畫視頻圖像。

(5)音頻流送到聲卡進(jìn)行播放,一般采用缺省的DirectSound DeviceFilter。

圖1中的箭頭表示Filter鏈表中的數(shù)據(jù)流的方向。在DirectShow中,像上面的這樣一個(gè)Filter鏈表我們稱為Filter Graph。Filter一般分為下面幾種類型。

(1)源過濾器(Source Filter):源過濾器引入數(shù)據(jù)到過濾器圖中,數(shù)據(jù)來源可以是文件、網(wǎng)絡(luò)、照相機(jī)等。不同的源過濾器處理不同類型的數(shù)據(jù)源。

(2)變換過濾器(Transform Filter):變換過濾器的工作是獲取輸入流,處理數(shù)據(jù),并生成輸出流。變換過濾器對(duì)數(shù)據(jù)的處理包括編解碼、格式轉(zhuǎn)換、壓縮解壓縮等。

(3)提交過濾器(Renderer Filter):提交過濾器在過濾器圖里處于最后一級(jí),它們接收數(shù)據(jù)并把數(shù)據(jù)提交給外設(shè)。

Filter有三種狀態(tài):運(yùn)行、暫停、停止,F(xiàn)ilter Graph中所有的Filter的狀態(tài)的改變都是統(tǒng)一的,所以Filter Graph也有運(yùn)行,停止,暫停三種狀態(tài)。

3 播放器的主要功能

(1)播放器基本功能:播放、暫停、停止;

(2)實(shí)現(xiàn)解碼回放有關(guān)的功能:如拖動(dòng)進(jìn)度條,調(diào)節(jié)播放進(jìn)度;

(3)截圖功能:抓取圖片并保存為一個(gè)本地的位圖;

(4)聲音、聲道控制:調(diào)節(jié)音量、調(diào)整音道功能。

按照播放器的功能,將播放器模塊進(jìn)行劃分,得到系統(tǒng)的功能結(jié)構(gòu)圖如下:

4 具體功能實(shí)現(xiàn)

媒體播放器的定位接口的獲取、全屏實(shí)現(xiàn)、音量控制和靜音設(shè)置關(guān)鍵代碼實(shí)例。

4.1 定位

首先獲取Filter Graph的各個(gè)控制接口,查詢接口函數(shù)的代碼如下:

//得到播放器控制接口、定位接口等

bool CDXGraph::QueryInterfaces(void)

{

if(mGraph)

{

HRESULT hr=NOERROR;

//得到播放控制接口

hr|=mGraph ->QueryInterface (IID_IMediaControl,(void**)&mMediaControl);

//得到媒體事件接口

hr|= mGraph->QueryInterface (IID_IMediaEventEx,(void**)&mEvent);

//得到視頻窗口接口

hr|=mGraph ->QueryInterface (IID_IVideoWindow,(void**)&mVideoWindow);

//得到音頻相關(guān)接口

hr|= mGraph->QueryInterface (IID_IBasicVideo, (void **)&mBasicVideo);

//得到音頻相關(guān)接口

hr|= mGraph->QueryInterface (IID_IBasicAudio, (void **)&mBasicAudio);

{

mSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME);

}

return SUCCEEDED(hr);

圖1 播放AVI文件的過濾器圖管理器

圖2

}

return false;

}

//設(shè)置視頻窗口并設(shè)置消息通知窗口

mFilterGraph->SetDisplayWindow(mVideoWindow.GetSafeHwnd());

mFilterGraph->SetNotifyWindow(this->Get SafeHwnd());

4.2 聲音調(diào)節(jié)/靜音設(shè)置

獲取聲音控制接口指針mBasicAudio,聲音大小控制函數(shù):

bool CDXGraph::SetAudioVolume(long inVolume)

{

if(mBasicAudio)

{

HRESULT hr=mBasicAudio->put_Volume(inVolume);

return SUCCEEDED(hr);

}

return false;

}

進(jìn)行靜音設(shè)置:

void CSimplePlayerDlg::OnMute()

{

m_bMute=!m_bMute;

//當(dāng)播放鏈路存在時(shí),設(shè)置是否靜音

if(mFilterGraph){

if(m_bMute)

mFilterGraph->SetAudioVolume(VOLUME_MUTE);

else

mFilterGraph->SetAudioVolume(VOLUME_NORMAL);

}

//播放鏈路尚未建立時(shí),設(shè)置是否靜音(isInitedSilence在播放按鈕響應(yīng)函數(shù)中使用,指示初次播放是否靜音)

else

{

if(m_bMute)

{

isInitedSilence=0;

}

else

{

isInitedSilence=1;

}

}

4.3 全屏實(shí)現(xiàn)

通過QueryInterfaces函數(shù)獲取IVideoWindow視頻窗口控制接口,根據(jù)傳入的布爾值,設(shè)置為全屏播放文件(在全屏模式下,按ESC將恢復(fù)到正常模式)。

bool CDXGraph::SetFullScreen(BOOL inEnabled)

{

if(mVideoWindow)

{

HRESULT hr= mVideoWindow->put_FullScreenMode

(inEnabled?OATRUE:OAFALSE);

return SUCCEEDED(hr);

}

return false;

}

5 性能測試

選取了兩款開源視頻播放器Mplayer,VLC Media Player還有Windows系統(tǒng)自帶的Media Player進(jìn)行測試,測試視頻為BBC記錄片《美麗中國》的發(fā)行版,分辨率為1024*576,該紀(jì)錄片是第一部表現(xiàn)中國野生動(dòng)植物和自然人文景觀的大型電視紀(jì)錄片,從一個(gè)前所未有的角度,向電視觀眾展示中國的魅力。

測試平臺(tái)主要配置:

操作系統(tǒng) Windows XP專業(yè)版32位SP3(DirectX 9.0c)

處理器英特爾第二代酷睿i7-2670QM@2.20GHz

內(nèi)存 4 GB(Team DDR3 1333MHz)

顯卡 Nvidia GeForce GT 540M

本播放器基于2002年Microsoft發(fā)布的Directshow SDK 9.0進(jìn)行開發(fā),而測試中使用的2015年編譯的Mplayer和VLC Media Player發(fā)布版本雖然對(duì)Intel酷睿2架構(gòu)有更好的支持,更好的利用了最新的SSE4等指令集,OpenGL的功能也很強(qiáng)大,但因?yàn)镈irectshow在windows平臺(tái)上的優(yōu)勢,在性能上依然與本設(shè)計(jì)存在一定差距。而本播放器因?yàn)楣δ茌^為精簡的原因,在性能上對(duì)同出自于Directshow的Windows Media Player仍有一定優(yōu)勢。

6 結(jié)語

DirectShow提供的良好開發(fā)環(huán)境,使得媒體播放器開發(fā)實(shí)現(xiàn)比較方便。本系統(tǒng)采用的是智能連接,只要是曾在系統(tǒng)注冊(cè)過的Filter均可以使用,避免了重復(fù)編寫Filter的麻煩,造成代碼的冗余。雖然在性能上相對(duì)于同類軟件有一定優(yōu)勢,然而并沒有網(wǎng)絡(luò)功能,這也是今后要探索的方向。

[1]龐然.基于DirectX的音視頻播放器軟件設(shè)計(jì)[D].浙江:浙江大學(xué),2006.

[2]趙炯.利用VC_實(shí)現(xiàn)基于DirectShow的視頻播放器開發(fā)[J].成都大學(xué)學(xué)報(bào),2011.

[3]路錦正,周冬梅.VisualC++音頻/視頻處理技術(shù)及工程實(shí)踐[M].北京:電子工業(yè)出版社,2009.

[4]陸其明.DirectShow開發(fā)指南[M].北京:清華大學(xué)出版社:2003.

[5]張玲玲.VisualC++音頻/視頻技術(shù)開發(fā)與實(shí)戰(zhàn)[M].北京:清華大學(xué)出版社,2012.

[6]蒿淑勤.音視頻播放器的開發(fā)大連[D].大連理工大,2010.

猜你喜歡
設(shè)置功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
中隊(duì)崗位該如何設(shè)置
7招教你手動(dòng)設(shè)置參數(shù)
關(guān)于非首都功能疏解的幾點(diǎn)思考
懷孕了,凝血功能怎么變?
媽媽寶寶(2017年2期)2017-02-21 01:21:24
“簡直”和“幾乎”的表達(dá)功能
本刊欄目設(shè)置說明
中俄臨床醫(yī)學(xué)專業(yè)課程設(shè)置的比較與思考
艦船人員編制的設(shè)置與控制
中西醫(yī)結(jié)合治療甲狀腺功能亢進(jìn)癥31例
主站蜘蛛池模板: 欧美日韩激情| 国产在线一二三区| 色欲综合久久中文字幕网| 国产欧美日韩18| 国产精品久线在线观看| 综合五月天网| 成人噜噜噜视频在线观看| 永久毛片在线播| 国产原创演绎剧情有字幕的| 97国产在线视频| 素人激情视频福利| 性视频一区| 亚洲欧美人成人让影院| 国产亚洲精| 免费国产好深啊好涨好硬视频| 欧美精品1区| 色综合天天综合| 国产一二三区在线| 99精品视频在线观看免费播放| 久久男人资源站| 国产自无码视频在线观看| 国产精品漂亮美女在线观看| 亚洲日韩精品伊甸| 国产欧美一区二区三区视频在线观看| 日韩最新中文字幕| 另类专区亚洲| 国产精品粉嫩| 亚洲欧美极品| 国产精女同一区二区三区久| AV老司机AV天堂| 亚洲欧洲日产国产无码AV| 992tv国产人成在线观看| 一本大道无码高清| 国产成人高清精品免费5388| 亚洲免费人成影院| 欧美日韩第三页| 久久精品这里只有精99品| 制服丝袜在线视频香蕉| 色屁屁一区二区三区视频国产| 国产精品成人观看视频国产 | 欧洲日本亚洲中文字幕| 国产精品手机在线播放| 91精品网站| 欧美综合在线观看| 97亚洲色综久久精品| 5388国产亚洲欧美在线观看| 久久熟女AV| 国产在线视频福利资源站| 欧美一区二区三区国产精品| 亚洲国产成人综合精品2020 | 丁香六月激情婷婷| 亚洲欧洲国产成人综合不卡| 精品综合久久久久久97超人| 国产在线专区| 亚洲欧美激情另类| 国产不卡网| 亚洲欧美另类专区| 国产精品.com| 欧美亚洲欧美| 中文字幕 91| 思思99思思久久最新精品| 久久精品中文字幕少妇| 免费播放毛片| 国产精品自在在线午夜| 波多野结衣国产精品| 亚洲资源在线视频| 亚洲第一成网站| 亚洲Aⅴ无码专区在线观看q| 亚洲AV无码精品无码久久蜜桃| 亚洲国产黄色| 在线播放国产一区| 亚洲综合香蕉| 亚洲欧美自拍中文| 亚洲色图欧美视频| 国产综合精品日本亚洲777| 国产精品亚洲精品爽爽| 亚洲综合婷婷激情| 亚洲精品制服丝袜二区| 日本三级精品| 97久久免费视频| 亚洲欧洲天堂色AV| 久草视频中文|