多媒體播放器設(shè)計_第1頁
多媒體播放器設(shè)計_第2頁
多媒體播放器設(shè)計_第3頁
多媒體播放器設(shè)計_第4頁
多媒體播放器設(shè)計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本科畢業(yè)設(shè)計(論文)題目: 多媒體播放器設(shè)計 學(xué)生姓名:學(xué)號:系(部):數(shù)學(xué)與計算機(jī)科學(xué)系 專業(yè):計算機(jī)科學(xué)與技術(shù) 入學(xué)時間: 201年月導(dǎo)師姓名: 職稱/學(xué)位: 教授 導(dǎo)師所在單位:多媒體播放器設(shè)計摘 要本文主要是開發(fā)了一款簡單的多媒體播放器??梢圆シ哦喾N格式的音頻、視頻文件,該播放器實現(xiàn)了的基本功能包括:音頻視頻文件的打開、添加到菜單、媒體的播放、音量大小的調(diào)節(jié)、播放時間的拖動、暫停播放、停止等。使之成為一款簡易的媒體播放設(shè)備,能夠完美的播放市面上大多數(shù)的音頻、視頻文件。在畢業(yè)設(shè)計中,系統(tǒng)開發(fā)平臺為Windows XP操作系統(tǒng),程序設(shè)計環(huán)境采用Visual Studio 2010。程序通過

2、調(diào)試運行,初步實現(xiàn)了設(shè)計目標(biāo),本程序是基于MFC集成開發(fā)環(huán)境,利用directshow sdk實現(xiàn)媒體播放的功能的,除了基本的播放控制外,還具有全屏播放、靜音等實用功能。關(guān)鍵詞:多媒體;播放器;directshow sdkThe Design and Implementation of Multimedia Player AbstractThis article is developed a simple multimedia player. It can play multiple formats of audio,video files, The players realize the b

3、asic functions include that open the Audio and video files, addto the menu, and media playback, adjust the volume size, play time, drag, pause, stop and so on.Making it a simple media player device, most audio or video files in the market can be played perfectly by this media player. In the Graduati

4、on, The System Development Platform is Windows XP, The Programming Environment is Visual Studio2010.Program by commissioning,Initial design goals achieved, the program is based on MFC.Integrated Development Environment. Using the directshow sdk control to achieve the functions of media player. In ad

5、dition to the basic playback controls, It also has many other utility functions, such as playing Full Screen,Mute and so on.Keywords: multimedia; player;directshow sdk目 錄第一章緒 論11.1引言1系統(tǒng)設(shè)計的目的和意義1研究背景21.4 論文主要研究內(nèi)容及論文結(jié)構(gòu)安排4第二章開發(fā)平臺介紹和軟件的初步設(shè)計5開發(fā)平臺的介紹5軟件的需求分析和模塊設(shè)計52.2.1 軟件的需求分析5軟件的模塊設(shè)計6第三章多媒體播放器軟件設(shè)計7開發(fā)環(huán)境配置

6、7實現(xiàn)GRAPHEDIT模擬83.3 DIRECTSHOW接口實現(xiàn)函數(shù)說明8模塊實現(xiàn)函數(shù)說明9主要變量聲明10設(shè)計多媒體播放器的界面11播放器模塊設(shè)計11第四章程序?qū)崿F(xiàn)結(jié)果18程序運行結(jié)果演示18結(jié)束語:19參考文獻(xiàn)20致謝21多媒體播放器設(shè)計第一章緒 論引言多媒體就是多重媒體的意思,可以理解為直接作用于人感官的文字、圖形、圖像、動畫、聲音和視頻等各種媒體的統(tǒng)稱,即多種信息載體的表現(xiàn)形式和傳遞方式。我們所提到的多媒體技術(shù),就是利用電腦把文字、圖形、影象、動畫、聲音及視頻等媒體信息都數(shù)位化,并將其整合在一定的交互式界面上,使電腦具有交互展示不同媒體形態(tài)的能力。它極大的改變了人們獲取信息的傳統(tǒng)方法

7、,符合人們在信息時代的閱讀方式。在當(dāng)今信息社會,以多媒體為特征的信息技術(shù)和信息產(chǎn)業(yè)的發(fā)展及應(yīng)用對人類社會產(chǎn)生的影響和作用愈來愈明顯,愈來愈重要。多媒體能改變信息的包裝,實現(xiàn)知識信息數(shù)字化,為人們獲得知識信息提供極大的方便和無窮的樂趣。友善的人機(jī)界面、多種多樣的多媒體教學(xué)軟件、誘人的電子游藝節(jié)目、身臨其境的多媒體導(dǎo)購系統(tǒng)、五花八門的信息家電和高效方便的網(wǎng)上查詢等等,無不滲透著多媒體的作用,它引導(dǎo)人們進(jìn)入了一個有聲有色的世界。同時,多媒體的發(fā)展和應(yīng)用,極大地推動了各行各業(yè)的相互滲透和飛速發(fā)展,大大改變了人類社會的工作環(huán)境和生活方式??珊敛豢鋸埖卣f,多媒體產(chǎn)業(yè)的形成和發(fā)展,不僅引起了計算機(jī)工業(yè)的一次

8、革命,也正在深刻地影響人類社會發(fā)生巨大的變革。多媒體技術(shù)的發(fā)展在很大程度上依靠于多媒體軟件開發(fā)的水平。目前,不管是支撐多媒體系統(tǒng)的系統(tǒng)軟件,還是管理和開發(fā)軟件,以及多媒體的應(yīng)用軟件都在能力和數(shù)量上還難以滿足多媒體飛速發(fā)展的需要。特別是多媒體應(yīng)用軟件的缺乏一直是制約多媒體產(chǎn)業(yè)發(fā)展的瓶頸問題,因此己成為多媒體研究和開發(fā)的關(guān)鍵問題。如何制作和設(shè)計出大量高質(zhì)量的多媒體應(yīng)用軟件是計算機(jī)從業(yè)人員所面臨的迫切課題,也是廣大人民群眾所關(guān)心的事情。多媒體播放器的設(shè)計是一門集計算機(jī)技術(shù)和數(shù)字多媒體技術(shù)于一體的綜合設(shè)計。隨著中國計算機(jī)技術(shù)、寬帶網(wǎng)絡(luò)技術(shù)的發(fā)展,越來越多的人開始重視多媒體播放器的發(fā)展與應(yīng)用。這個課程設(shè)

9、計的目的就是制作一個能夠播放音頻、視頻文件的播放器,并使它具備一些簡單的操作處理功能,如播放暫停的控制,音量的調(diào)節(jié),視頻的全屏播放,視頻進(jìn)度的調(diào)節(jié)等等。將這個小型播放軟件做得盡量的小巧、實用。多媒體技術(shù)是當(dāng)今信息技術(shù)領(lǐng)域發(fā)展最快、最活躍的技術(shù),是新一代電子技術(shù)發(fā)展和競爭的焦點。多媒體技術(shù)融計算機(jī)、聲音、文本、圖像、動畫、視頻和通信等多種功能于一體,借助日益普及的高速信息網(wǎng),可實現(xiàn)計算機(jī)的全球聯(lián)網(wǎng)和信息資源共享,因此被廣泛應(yīng)用在咨詢服務(wù)、圖書、教育、通信、軍事、金融、醫(yī)療等諸多行業(yè),并正潛移默化地改變著我們生活的面貌。多媒體技術(shù)已經(jīng)成為當(dāng)今比較熱門的研究課題,特別是伴隨著多媒體技術(shù)的網(wǎng)絡(luò)化,使得

10、多媒體技術(shù)的發(fā)展前景無限廣闊,因此掌握多媒體及多媒體技術(shù)的相關(guān)知識,了解多媒體技術(shù)當(dāng)前的發(fā)展?fàn)顩r及未來的發(fā)展前景,并能熟練地進(jìn)行多媒體技術(shù)的開發(fā),對于當(dāng)前即將畢業(yè)的大學(xué)生來講,是很有發(fā)展前途的?;诖?,我選擇了此課題多媒體播放器的設(shè)計與實現(xiàn),期望通過對此課題的研究與開發(fā),能深入了解多媒體技術(shù),特別是掌握多媒體技術(shù)在媒體播放器中的應(yīng)用。本設(shè)計采用的Microsoft Visual Studio 2010是微軟公司發(fā)布的Microsoft Visual Studio軟件開發(fā)工具的較新版本,此開發(fā)軟件支持C#、C+、等多種編程語言,功能非常強(qiáng)大。由于本設(shè)計要實現(xiàn)音頻和視頻解碼,所以要用到direct

11、show sdk開發(fā)包。DirectShow是微軟公司在ActiveMovie和Video for Windows的基礎(chǔ)上推出的新一代基于COM(Component Object Model)的流媒體處理的開發(fā)包,與DirectX開發(fā)包一起發(fā)布。DirectShow使用一種叫Filter Graph的模型來管理整個數(shù)據(jù)流的處理過程,運用DirectShow,我們可以很方便地從支持WDM驅(qū)動模型的采集卡上捕獲數(shù)據(jù),并且進(jìn)行相應(yīng)的后期處理乃至存儲到文件中。這樣使在多媒體數(shù)據(jù)庫管理系統(tǒng)(MDBMS)中多媒體數(shù)據(jù)的存取變得更加方便。它廣泛地支持各種媒體格式,包括Asf、Mpeg、Avi、Dv、Mp3、

12、Wave等,為多媒體流的捕捉和回放提供了強(qiáng)有力的支持。ActiveMovie,開發(fā)代號 Quartz,這個由 Geraint Davies 為微軟公司設(shè)計的 DirectShow 的前身,在 Windows 3.0 時代,是作為一種對當(dāng)時最流行的媒體平臺 QuickTime 的回應(yīng)而開發(fā)的。ActiveMovie 最早的出現(xiàn)是被附加在 Windows 95 上面的并且需要系統(tǒng)安裝了IE3.0 。它當(dāng)時的使命是作為 IE 的附件播放在其窗口內(nèi)的媒體文件,正如當(dāng)時 QuickTime 為 Netscape 以及 IE 提供的服務(wù)那樣,它的另一個功能是作為 Windows 視頻技術(shù)(VFW,Vide

13、o For Windows)的一個替換,特別地為在 VFW 架構(gòu)中難于處理的MPEG(移動圖象專家組格式文件)文件提供輔助處理。在 1998 年,大致在 DirectX 5 年代的時候,ActiveMovie 被重命名為 DirectShow(反映了微軟公司在那時正在努力加強(qiáng)“直接地”在一個通常的取名系統(tǒng)之下與硬件合作的技術(shù))并且被包含為 " DirectMedia SDK" 的一部份。在 DirectX 的 7 版中,DirectShow 變成了 DirectX SDK 主要組成部分而且如同 DirectInput 等其它 DirectX APIs 一樣被給予了它自己的位

14、置。甚至之后, DirectShow 被主要用來接收來自像一個手提攝像機(jī)這樣的電視輸入裝置的數(shù)據(jù),而且它從文件中顯示數(shù)據(jù)的能力被廣泛用在 Windows Media Player 上面。 從 2005 年四月起,DirectShow 被從 DirectX SDK 移除,必須單獨下載Extra包才能得以支持,之后DirectShow的文檔和示例被轉(zhuǎn)移到Windows SDK,DirectShow也正式成為Windows的一個組件。然而,在編譯某些 DirectShow 的示例時,DirectX SDK 仍然是必需的。本次設(shè)計出來的多媒體播放器主要支持avi、wmv、flv、rmvb和mkv幾種網(wǎng)

15、絡(luò)上常見的視頻格式,對此做簡要介紹。Avi的英文全稱為Audio Video Interleaved,即音頻視頻交錯格式。它于1992年被Microsoft公司推出,隨Windows3.1一起被人們所認(rèn)識和熟知。所謂“音頻視頻交錯”,就是可以將視頻和音頻交織在一起進(jìn)行同步播放。這種視頻格式的優(yōu)點是圖像質(zhì)量好,可以跨多個平臺使用,但是其缺點是體積過于龐大,而且更加糟糕的是壓縮標(biāo)準(zhǔn)不統(tǒng)一,因此經(jīng)常會遇到高版本W(wǎng)indows媒體播放器播放不了采用早期編碼編輯的AVI格式視頻,而低版本W(wǎng)indows媒體播放器又播放不了采用最新編碼編輯的AVI格式視頻。其實解決的方法也非常簡單,我們將在后面的視頻轉(zhuǎn)換、

16、視頻修復(fù)部分中給出解決的方案。Rmvb是一種由RM視頻格式升級延伸出的新視頻格式,它的先進(jìn)之處在于RMVB視頻格式打破了原先RM格式那種平均壓縮采樣的方式,在保證平均壓縮比的基礎(chǔ)上合理利用比特率資源,就是說靜止和動作場面少的畫面場景采用較低的編碼速率,這樣可以留出更多的帶寬空間,而這些帶寬會在出現(xiàn)快速運動的畫面場景時被利用。這樣在保證了靜止畫面質(zhì)量的前提下,大幅地提高了運動圖像的畫面質(zhì)量,從而圖像質(zhì)量和文件大小之間就達(dá)到了微妙的平衡。FLV 是FLASH VIDEO的簡稱,F(xiàn)LV流媒體格式是隨著Flash MX的推出發(fā)展而來的視頻格式。由于它形成的文件極小、加載速度極快,使得網(wǎng)絡(luò)觀看視頻文件成

17、為可能,它的出現(xiàn)有效地解決了視頻文件導(dǎo)入Flash后,使導(dǎo)出的SWF文件體積龐大,不能在網(wǎng)絡(luò)上很好的使用等缺點。WMV(Windows Media Video)是微軟推出的一種流媒體格式,它是在“同門”的ASF(AdvancedStreamFormat)格式升級延伸來得。在同等視頻質(zhì)量下,WMV格式的文件可以邊下載邊播放,因此很適合在網(wǎng)上播放和傳輸。MKV不是一種壓縮格式,而是Matroska的一種媒體文件,Matroska是一種新的多媒體封裝格式,也稱多媒體容器 (Multimedia Container)。它可將多種不同編碼的視頻及16條以上不同格式的音頻和不同語言的字幕流封裝到一個Mat

18、roska Media文件當(dāng)中。MKV最大的特點就是能容納多種不同類型編碼的視頻、音頻及字幕流。了解了以上的相關(guān)知識,使得開發(fā)多媒體播放軟件有了一個更加清晰的思路。1.4 論文主要研究內(nèi)容及論文結(jié)構(gòu)安排本畢業(yè)設(shè)計是制作一個可播放目前主流媒體格式的多媒體播放器,其基本功能應(yīng)具有媒體播放、音量調(diào)節(jié)、播放進(jìn)度選擇、暫停、停止以及抓圖等,使之成為一款簡易的媒體播放設(shè)備,能夠完美的播放市面上大多數(shù)的音頻、視頻文件。 論文的結(jié)構(gòu)安排: 第一章 緒論介紹研究背景,目的和意義等;第二章 開發(fā)工具介紹,軟件的需求分析和模塊設(shè)計;第三章 多媒體播放器軟件設(shè)計; 第五章 播放器實現(xiàn)結(jié)果演示;最后是結(jié)束語以及參考文獻(xiàn)

19、和附錄的相關(guān)內(nèi)容。第二章 開發(fā)平臺介紹和軟件的初步設(shè)計Visual Studio是微軟公司推出的開發(fā)環(huán)境。是目前最流行的Windows平臺應(yīng)用程序開發(fā)環(huán)境。Visual Studio 2010版本于2010年4月12日上市,其集成開發(fā)環(huán)境(IDE)的界面被重新設(shè)計和組織,變得更加簡單明了。Visual Studio 2010同時帶來了NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview-CTP),并且支持開發(fā)面向Windows 7的應(yīng)用程序。除了Microsoft SQL Server,

20、它還支持 IBM DB2和Oracle數(shù)據(jù)庫。在vs2010開發(fā)平臺上開發(fā)用戶界面應(yīng)用程序,我們需要用到mfc類庫。MFC(Microsoft Foundation Classes),是一個微軟公司提供的類庫(class libraries),以C+類的形式封裝了Windows的API,并且包含一個應(yīng)用程序框架,以減少應(yīng)用程序開發(fā)人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內(nèi)建控件和組件的封裝類。MFC是WinAPI與C+的結(jié)合。API,即微軟提供的Windows下應(yīng)用程序的編程語言接口,是一種軟件編程的規(guī)范,但不是一種程序開發(fā)語言本身,可以允許用戶使用各種

21、各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的編程語言來進(jìn)行對Windows下應(yīng)用程序的開發(fā),使這些被開發(fā)出來的應(yīng)用程序能在Windows下運行,比如VB、VC+、Java、Delhpi。編程語言函數(shù)本質(zhì)上全部源于API,因此用它們開發(fā)出來的應(yīng)用程序都能工作在Windows的消息機(jī)制和繪圖里,遵守Windows作為一個操作系統(tǒng)的內(nèi)部實現(xiàn),這其實也是一種必要。微軟如果不提供API,這個世上對Windows編程的工作就不會存在,微軟的產(chǎn)品就會迅速從時尚變成垃圾。上面說到MFC是微軟對API函數(shù)的專用C+封裝,這種結(jié)合一方面讓用戶使用微軟的專業(yè)C+ SDK來進(jìn)行Windows下應(yīng)

22、用程序的開發(fā)變得容易,因為MFC是對API的封裝,微軟做了大量的工作,隱藏了好多程序開發(fā)人員在Windows下用C+ & MFC編制軟件時的大量內(nèi)節(jié),如應(yīng)用程序?qū)崿F(xiàn)消息的處理、設(shè)備環(huán)境繪圖,這種結(jié)合是以方便為目的的,必定要付出一定代價(這是微軟的一向作風(fēng)),因此就造成了MFC對類封裝中的一定程度的的冗余和迂回,但這是可以接受的。2.2.1 軟件的需求分析本軟件要實現(xiàn)的基本功能是實現(xiàn)音視頻文件的播放,要求實現(xiàn)的控制功能是打開、播放、暫停、音量調(diào)節(jié)、播放進(jìn)度的控制、全屏播放、抓圖、結(jié)束、退出等功能,而且要求能夠播放rmvb、avi、flv、mkv等常見的視頻格式。根據(jù)這些要求,需要有相應(yīng)的

23、軟/硬件來支持,硬件方面的要求是計算機(jī)要有聲卡和顯卡,軟件方面的要求有:windows xp操作系統(tǒng)、vs2010、directshow sdk開發(fā)包、ffdshow編解碼軟件以及各種視頻格式解碼器。視頻編解碼器,是指一個能夠?qū)?shù)字視頻進(jìn)行壓縮或者解壓縮的程序或者設(shè)備。通常這種壓縮屬于有損數(shù)據(jù)壓縮。ffdshow是一套免費的編解碼軟件,可支持H.264、FLV、WMV、MPEG-1、MPEG-2以及MPEG-4等格式視頻檔。ffdshow本身并不包含媒體播放器,但各種媒體播放器都可以使用ffdshow進(jìn)行解碼。多媒體播放器:打開模塊、播放模塊、暫停模塊、停止模塊、抓圖模塊、退出模塊、拖拽模塊、

24、菜單模塊。如圖1:圖1: 多媒體播放器模塊設(shè)計打開模塊:打開目標(biāo)文件,如音頻、視頻。退出模塊:關(guān)閉播放器。播放模塊:播放音頻、視頻。暫停模塊:暫時停止正在播放的音/視頻文件。停止模塊:結(jié)束當(dāng)前視頻的播放。抓圖模塊:對視頻進(jìn)行截圖保存。拖拽模塊:拖拽音/視頻的進(jìn)度條,控制音量的大小與視頻的進(jìn)度。菜單模塊:設(shè)置右鍵快捷菜單,菜單中包括有對視頻播放速率的控制以及全屏、靜音等功能。第三章 多媒體播放器軟件設(shè)計在開發(fā)之前我們需要在vs2010中搭建directshow sdk開發(fā)包。首先我們將下載好的directshow sdk安裝到本機(jī)上。接著我們打開directshow的sdk安裝目錄:C:/DX9

25、0SDK/Samples/C+/DirectShow/,在里面找到一個叫baseclasses的工程。雙擊baseclasses.sln打開,按照提示轉(zhuǎn)換工程,打開后對它進(jìn)行編譯。如圖2所示,我們會看到編譯失敗,提示有很多錯誤。圖2 :編譯中的錯誤我們將項目->屬性->配置屬性->C/C+-> 常規(guī)->附加包含目錄里面的內(nèi)容(.,././././include)刪掉。接著我們將項目->屬性->配置屬性->C/C+-> 語言->強(qiáng)制For循環(huán)范圍中的合規(guī)性設(shè)置為否。再接著我們在項目->屬性->配置屬性->C/C+-&g

26、t; 命令行->其它選項中增加/wd4430選項。最后我們再次編譯,發(fā)現(xiàn)編譯成功。編譯成功之后,我們在項目->屬性->配置屬性->vc+ 目錄里選擇包含目錄然后增加C:DXSDKInclude;C:DXSDKSamplesC+CommonInclude;C:DXSDKSamplesC+DirectShowBaseClasses,在庫目錄中增加C:DXSDKLib。實際使用Directshow播放器,首先需要使用GraphEdit來模擬實現(xiàn),驗證插入濾波器的運行特點,體會濾波器的操作過程,為播放器能夠正常播放視頻做好保障。在使用graphedit進(jìn)行模擬實現(xiàn)視頻播放的過程

27、中,我們發(fā)現(xiàn)無法正常建立濾波器鏈表。進(jìn)行了相關(guān)知識的了解之后,我才知道這是由于沒有安裝相應(yīng)的解碼器。如圖3所示,我安裝了相應(yīng)的解碼器。圖3:.安裝解碼器如圖4所示,在安裝了解碼器之后,則能正常的建立濾波器鏈表了。圖4 建立濾波器鏈表3.3 directshow接口實現(xiàn)函數(shù)說明Directshow有關(guān)的接口和方法主要封裝在CDXGraph類中,這個類也是本設(shè)計中兩個重要的類之一。以下就是該類中所包含的主要方法以及作用:函數(shù)名 函數(shù)功能Bool CDXGraph:Create(void)生成濾波器鏈表管理器Bool CDXGraph:QueryInterfaces(void)查詢各類接口Bool

28、CDXGraph:RenderFile(TCHAR * inFile)剖析媒體文件Bool CDXGraph:SetDisplayWindow(HWND inWindow)設(shè)置顯示窗口Bool CDXGraph:SetNotifyWindow(HWND inWindow)設(shè)置窗口消息通知Bool CDXGraph:Run(void)播放視頻Bool CDXGraph:Stop(void)停止播放Bool CDXGraph:Pause(void)暫停播放Bool CDXGraph:GetDuration(double * outDuration)獲取播放時間長度Bool CDXGraph:Get

29、CurrentPosition(double * outPosition)獲取當(dāng)前播放位置Bool CDXGraph:SetCurrentPosition(double inPosition)設(shè)置當(dāng)前播放位置Bool CDXGraph:SetPlaybackRate(double inRate)設(shè)置播放速率Bool CDXGraph:GetStopPosition(double *outPosition)獲取視頻的結(jié)束位置Bool CDXGraph:SetStartStopPosition(double inStart,double inStop)設(shè)置視頻開始結(jié)束位置Bool CDXGraph

30、:Mute( )靜音模式Bool CDXGraph:UnMute( )非靜音模式Bool CDXGraph:SetFullScreen(BOOL inEnabled)設(shè)置全屏Bool CDXGraph:SnapshotBitmap(TCHAR *outFIle)抓圖保存表1:CDGraph類中的主要函數(shù)及其作用實現(xiàn)模塊功能的具體函數(shù)則均屬于CMediaPlayer類,它是本設(shè)計中兩個重要的類中的另外一個,它是在建立MediaPlayer工程時由MFC建立的一個對話框的類,在該對話框上進(jìn)行的操作函數(shù)即可實現(xiàn)程序所需要的所有功能,其實現(xiàn)函數(shù)則是調(diào)用CDXGraph類的相關(guān)函數(shù),從而完成各項具體功能

31、。各個模塊的具體實現(xiàn)函數(shù)描述如表2:模塊名稱 實現(xiàn)函數(shù) 打開模塊voidCMediaPlayerDlg:OnBnClickedButtonOpen() 播放模塊voidCMediaPlayerDlg:OnBnClickedButtonPlay()暫停模塊void CMediaPlayerDlg:OnBnClickedButtonPause()停止模塊void CMediaPlayerDlg:OnBnClickedButtonStop() 抓圖模塊void CMediaPlayerDlg:OnBnClickedButtonGrasp()退出模塊void CMediaPlayerDlg:OnBnC

32、lickedButtonExit()拖拽模塊void CMediaPlayerDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)菜單模塊void CMediaPlayerDlg:OnMenuOpenfile()void CMediaPlayerDlg:OnMenuHalfrate()void CMediaPlayerDlg:OnMenuNormalrate()void CMediaPlayerDlg:OnMenuDoublerate()void CMediaPlayerDlg:OnMenuFullscreen()void

33、 CMediaPlayerDlg:OnMenuAlwaysontop()void CMediaPlayerDlg:OnMenuMute()void CMediaPlayerDlg:OnMenuClosefile()void CMediaPlayerDlg:OnMenuPlay()void CMediaPlayerDlg:OnMenuStop()void CMediaPlayerDlg:OnMenuGrabimage()void CMediaPlayerDlg:OnMenuExit()表2:各個模塊及其實現(xiàn)函數(shù)程序中用到得主要控件有:6個按鈕控件,一個圖像控件,兩個進(jìn)度條控件。控件名稱變量類型變

34、量名說明IDC_BUTTON_OPENCButtonm_Open打開IDC_BUTTON_PLAYCButtonm_Play播放IDC_BUTTON_PAUSECButtonm_Pause暫停IDC_BUTTON_STOPCButtonm_Stop停止IDC_BUTTON_GRASPCButtonm_Grap抓圖IDC_BUTTO_EXITCButtonm_Exit退出IDC_SLIDER_PLAYCSliderCtrlm_sliderPlayer視頻進(jìn)度條IDC_SLIDER_VOLUMECSliderCtrlm_siderVolume音量進(jìn)度條IDC_VIDEO_WINDOWCStatic

35、m_videoWindow圖像控件表3:程序中的主要變量播放器主界面設(shè)計如圖5:圖5:播放器主界面為界面添加Picture Control圖像控件,兩個進(jìn)度條控件以及打開、播放、暫停、停止、抓圖、退出等按鈕控件。下面對各個模塊的實現(xiàn)函數(shù)及其代碼做簡要分析:(1)單擊播放器界面中的“打開”按鈕,即可打開要播放的媒體文件。在下述代碼中,將以只讀方式打開要播放的文件,并且過濾了流媒體文件的格式,獲取了媒體的路徑和文件名。void CMediaPlayerDlg:OnBnClickedButtonOpen()CString strFilter = _T("AVI File (*.avi) |

36、 *.avi|");strFilter += "MPEG File (*.mpg; *.mpeg) | *.mpg; *.mpeg|"strFilter += "MP3 File (*.mp3) | *.mp3|"strFilter += "WMA File (*.wma) | *.wma|"strFilter += "All File (*.*) | *.*|" /編輯下拉選項框CFileDialog dlg(TRUE,NULL,NULL,OFN_PATHMUSTEXIST|OFN_HIDEREADON

37、LY, strFilter, this); /設(shè)置打開文件對話框if (dlg.DoModal() = IDOK)/當(dāng)用戶打開文件時,做以下行為m_sourceFile = dlg.GetPathName();/獲取文件所在的路徑名m_mediaFileName =GetFileTitleFromFileName(m_sourceFile,1);/獲取文件名稱CreateGraph();創(chuàng)建鏈表,連接濾波器(2)單擊“播放”按鈕后,開始選擇播放的媒體文件。同時在標(biāo)題欄中顯示播放速率和媒體文件名,具體代碼如下:void CMediaPlayerDlg:OnBnClickedButtonPlay(

38、)if (m_pFilterGraph) /如果CDXGraph對象已創(chuàng)建成功,則執(zhí)行以下代碼SetWindowText(_T("1倍速播放 ") + m_mediaFileName); /設(shè)置窗口標(biāo)題欄文本內(nèi)容m_pFilterGraph->Run(); /播放視頻文件m_pFilterGraph->ChangeAudioVolume(m_volume); /改變音量m_sliderVolume.SetPos(m_volume); /設(shè)置音量進(jìn)度條的位置if (m_playerTimer = 0) /設(shè)置定時器m_playerTimer = SetTimer(

39、SLIDER_TIMER, 100, NULL); (3)點擊“暫?!卑粹o,暫停播放視頻。void CMediaPlayerDlg:OnBnClickedButtonPause()if (m_pFilterGraph != NULL)/如果CDXGraph對象不為空,則執(zhí)行代碼m_pFilterGraph->Pause();/暫停播放視頻(4)點擊“停止”按鈕,停止播放視頻。void CMediaPlayerDlg:OnBnClickedButtonStop()if (m_pFilterGraph != NULL)/如果CDXGraph對象不為空,則執(zhí)行代碼m_pFilterGraph-

40、>Stop();/停止播放視頻(5)點擊“退出”按鈕,退出程序。void CMediaPlayerDlg:OnBnClickedButtonExit()OnBnClickedButtonStop();/停止播放CoUninitialize();/關(guān)閉程序的所有線程CDialog:OnOK();/關(guān)閉窗口(6)點擊“抓圖”按鈕,實現(xiàn)視頻截圖功能,并且將圖片保存到軟件的同一目錄下。void CMediaPlayerDlg:OnBnClickedButtonGrasp()static int c = 0;TCHAR szFilenameMAX_PATH; DWORD dwPathLen = 0

41、; if(dwPathLen=:GetModuleFileName(:AfxGetInstanceHandle(),szFilename, MAX_PATH )= 0)/得到程序整個路徑名長度 return; for( int i=dwPathLen-1; i>=0; i-)/獲取圖片保存的目錄 if('' = szFilenamei) | ('/' = szFilenamei) break; else szFilenamei = '0' /設(shè)置圖片保存的完整路徑名稱CString str;str.Format(_T("%s&qu

42、ot;),szFilename);CString strTemp;strTemp.Format(_T("%d"),c);str += strTemp + _T(".bmp");c+;TCHAR *p=str.GetBuffer(str.GetLength();str.ReleaseBuffer();/進(jìn)行抓圖,并且將圖片放在指定路徑下if (m_pFilterGraph != NULL)if (m_pFilterGraph->SnapshotBitmap(p)elseMessageBox(_T("抓圖失敗!");(7)實現(xiàn)拖拽功

43、能,使得手動拖動進(jìn)度條控件,能夠控制音量的大小以及視頻的進(jìn)度。void CMediaPlayerDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)if(pScrollBar->GetSafeHwnd()=m_sliderPlayer.GetSafeHwnd()/如果拖動消息來自視頻進(jìn)度條,則執(zhí)行代碼if (m_pFilterGraph != NULL)/CDXGraph對象不為空double duration =1.0;/定義事件長度對象m_pFilterGraph->GetDuration(&dur

44、ation);/獲取流媒體文件時間長度double pos = duration * m_sliderPlayer.GetPos()/1000.0;/計算得到進(jìn)度條位置m_pFilterGraph->SetCurrentPosition(pos);/設(shè)置當(dāng)前進(jìn)度條的位置else if(pScrollBar->GetSafeHwnd()=m_sliderVolume.GetSafeHwnd()/如果拖動消息來自音量進(jìn)度條if (m_pFilterGraph != NULL)m_volume = m_sliderVolume.GetPos();/獲取音量進(jìn)度條位置m_pFilterGr

45、aph->ChangeAudioVolume(m_volume);/改變當(dāng)前音量 elseCDialog:OnHScroll(nSBCode, nPos, pScrollBar);(8)設(shè)置靜音或非靜音模式void CMediaPlayerDlg:OnMenuMute()if (m_pFilterGraph != NULL)/CDXGraph對象不為空static int flag=0;/設(shè)置信號量if (!flag)/判斷信號量是否為真,即判斷當(dāng)前是否為靜音模式m_pFilterGraph->Mute();/設(shè)置為靜音模式flag = 1;/設(shè)置信號量為真elsem_pFilte

46、rGraph->UnMute();/設(shè)置為非靜音模式flag = 0;設(shè)置信號量為假(9)設(shè)置全屏播放模式。void CMediaPlayerDlg:OnMenuFullscreen()static int flag=0; /設(shè)置信號量if (m_pFilterGraph != NULL)if (!flag)/判斷信號量的值是否為真,即判斷當(dāng)前是否為全屏m_pFilterGraph->SetFullScreen(TRUE);/設(shè)置為全屏模式flag = 1;/設(shè)置信號量為真elsem_pFilterGraph->SetFullScreen(FALSE);/關(guān)閉全屏模式flag = 0;/設(shè)置信號量為假(10)設(shè)置置頂播放模式,但用戶將播放器設(shè)置成置頂播放模式后,播放器就不會被其他窗口所覆蓋。void CMediaPlayerDlg:OnMenuAlwaysontop()static int flag=0; 設(shè)置信號量if (!flag)/判斷信號量是否為真,即判斷當(dāng)前是否為置頂模式:SetWindo

溫馨提示

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

評論

0/150

提交評論