




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)xxxxx 學(xué)院學(xué)院本科畢業(yè)設(shè)計(jì)(論文)本科畢業(yè)設(shè)計(jì)(論文)題題目:目: 多媒體播放器設(shè)計(jì)多媒體播放器設(shè)計(jì) 學(xué)生姓名:學(xué)生姓名: 學(xué)號(hào):學(xué)號(hào): 系(部):系(部):數(shù)學(xué)與計(jì)算機(jī)科學(xué)系數(shù)學(xué)與計(jì)算機(jī)科學(xué)系 專業(yè):專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)計(jì)算機(jī)科學(xué)與技術(shù) 入學(xué)時(shí)間:入學(xué)時(shí)間: 201年年 月月導(dǎo)師姓名:導(dǎo)師姓名: 職稱職稱/ /學(xué)位:學(xué)位: 教授教授 導(dǎo)師所在單位:導(dǎo)師所在單位: 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)多媒體播放器設(shè)計(jì)多媒體播放器設(shè)計(jì)摘摘 要要本文主要是開(kāi)發(fā)了一款簡(jiǎn)單的多媒體播放器??梢圆シ哦喾N格式的音頻、視頻文件,該播放器實(shí)現(xiàn)了的基本功能
2、包括:音頻視頻文件的打開(kāi)、添加到菜單、媒體的播放、音量大小的調(diào)節(jié)、播放時(shí)間的拖動(dòng)、暫停播放、停止等。使之成為一款簡(jiǎn)易的媒體播放設(shè)備,能夠完美的播放市面上大多數(shù)的音頻、視頻文件。在畢業(yè)設(shè)計(jì)中,系統(tǒng)開(kāi)發(fā)平臺(tái)為 Windows XP 操作系統(tǒng),程序設(shè)計(jì)環(huán)境采用 Visual Studio 2010。程序通過(guò)調(diào)試運(yùn)行,初步實(shí)現(xiàn)了設(shè)計(jì)目標(biāo),本程序是基于 MFC 集成開(kāi)發(fā)環(huán)境,利用directshow sdk 實(shí)現(xiàn)媒體播放的功能的,除了基本的播放控制外,還具有全屏播放、靜音等實(shí)用功能。關(guān)鍵詞:多媒體;播放器;關(guān)鍵詞:多媒體;播放器;directshow sdk精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Th
3、e Design and Implementation of Multimedia Player Abstract This article is developed a simple multimedia player. It can play multiple formats of audio,video files, The players realize the basic functions include that open the Audio and video files, addto the menu, and media playback, adjust the volum
4、e 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 Graduation, The System Development Platform is Windows XP, The Programming Environment is Visual Studio2010.Program by c
5、ommissioning,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 addition to the basic playback controls, It also has many other utility functions, such as playing Full Screen,Mut
6、e and so on.Keywords: multimedia; player;directshow sdk 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)目目 錄錄精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)多媒體播放器設(shè)計(jì)多媒體播放器設(shè)計(jì)第一章 緒緒 論論1.11.1 引言引言多媒體就是多重媒體的意思,可以理解為直接作用于人感官的文字、圖形、圖像、動(dòng)畫(huà)、聲音和視頻等各種媒體的統(tǒng)稱,即多種信息載體的表現(xiàn)形式和傳遞方式。我們所提到的多媒體技術(shù),就是利用電腦把文字、圖形、影象、動(dòng)畫(huà)、聲音及視頻等媒體信息都數(shù)位化,并將其整合在一定的交互式界面上,使電腦具有交互展示不同媒體形態(tài)的能力。它極大的改變了人們
7、獲取信息的傳統(tǒng)方法,符合人們?cè)谛畔r(shí)代的閱讀方式。在當(dāng)今信息社會(huì),以多媒體為特征的信息技術(shù)和信息產(chǎn)業(yè)的發(fā)展及應(yīng)用對(duì)人類社會(huì)產(chǎn)生的影響和作用愈來(lái)愈明顯,愈來(lái)愈重要。多媒體能改變信息的包裝,實(shí)現(xiàn)知識(shí)信息數(shù)字化,為人們獲得知識(shí)信息提供極大的方便和無(wú)窮的樂(lè)趣。友善的人機(jī)界面、多種多樣的多媒體教學(xué)軟件、誘人的電子游藝節(jié)目、身臨其境的多媒體導(dǎo)購(gòu)系統(tǒng)、五花八門的信息家電和高效方便的網(wǎng)上查詢等等,無(wú)不滲透著多媒體的作用,它引導(dǎo)人們進(jìn)入了一個(gè)有聲有色的世界。同時(shí),多媒體的發(fā)展和應(yīng)用,極大地推動(dòng)了各行各業(yè)的相互滲透和飛速發(fā)展,大大改變了人類社會(huì)的工作環(huán)境和生活方式??珊敛豢鋸埖卣f(shuō),多媒體產(chǎn)業(yè)的形成和發(fā)展,不僅引起
8、了計(jì)算機(jī)工業(yè)的一次革命,也正在深刻地影響人類社會(huì)發(fā)生巨大的變革。多媒體技術(shù)的發(fā)展在很大程度上依靠于多媒體軟件開(kāi)發(fā)的水平。目前,不管是支撐多媒體系統(tǒng)的系統(tǒng)軟件,還是管理和開(kāi)發(fā)軟件,以及多媒體的應(yīng)用軟件都在能力和數(shù)量上還難以滿足多媒體飛速發(fā)展的需要。特別是多媒體應(yīng)用軟件的缺乏一直是制約多媒體產(chǎn)業(yè)發(fā)展的瓶頸問(wèn)題,因此己成為多媒體研究和開(kāi)發(fā)的關(guān)鍵問(wèn)題。如何制作和設(shè)計(jì)出大量高質(zhì)量的多媒體應(yīng)用軟件是計(jì)算機(jī)從業(yè)人員所面臨的迫切課題,也是廣大人民群眾所關(guān)心的事情。多媒體播放器的設(shè)計(jì)是一門集計(jì)算機(jī)技術(shù)和數(shù)字多媒體技術(shù)于一體的綜合設(shè)計(jì)。隨著中國(guó)計(jì)算機(jī)技術(shù)、寬帶網(wǎng)絡(luò)技術(shù)的發(fā)展,越來(lái)越多的人開(kāi)始重視多媒體播放器的發(fā)展
9、與應(yīng)用。 1.21.2 系統(tǒng)設(shè)計(jì)的目的和意義系統(tǒng)設(shè)計(jì)的目的和意義這個(gè)課程設(shè)計(jì)的目的就是制作一個(gè)能夠播放音頻、視頻文件的播放器,并使它具備一些簡(jiǎn)單的操作處理功能,如播放暫停的控制,音量的調(diào)節(jié),視頻的全屏播放,視頻進(jìn)度的調(diào)節(jié)等等。將這個(gè)小型播放軟件做得盡量的小巧、實(shí)用。多媒體技術(shù)是當(dāng)今信息技術(shù)領(lǐng)域發(fā)展最快、最活躍的技術(shù),是新一代電子技術(shù)發(fā)展和競(jìng)爭(zhēng)的焦點(diǎn)。多媒體技術(shù)融計(jì)算機(jī)、聲音、文本、圖像、動(dòng)畫(huà)、視精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)頻和通信等多種功能于一體,借助日益普及的高速信息網(wǎng),可實(shí)現(xiàn)計(jì)算機(jī)的全球聯(lián)網(wǎng)和信息資源共享,因此被廣泛應(yīng)用在咨詢服務(wù)、圖書(shū)、教育、通信、軍事、金融、醫(yī)療等諸多行業(yè)
10、,并正潛移默化地改變著我們生活的面貌。多媒體技術(shù)已經(jīng)成為當(dāng)今比較熱門的研究課題,特別是伴隨著多媒體技術(shù)的網(wǎng)絡(luò)化,使得多媒體技術(shù)的發(fā)展前景無(wú)限廣闊,因此掌握多媒體及多媒體技術(shù)的相關(guān)知識(shí),了解多媒體技術(shù)當(dāng)前的發(fā)展?fàn)顩r及未來(lái)的發(fā)展前景,并能熟練地進(jìn)行多媒體技術(shù)的開(kāi)發(fā),對(duì)于當(dāng)前即將畢業(yè)的大學(xué)生來(lái)講,是很有發(fā)展前途的?;诖耍疫x擇了此課題多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn),期望通過(guò)對(duì)此課題的研究與開(kāi)發(fā),能深入了解多媒體技術(shù),特別是掌握多媒體技術(shù)在媒體播放器中的應(yīng)用。1.31.3 研究背景研究背景本設(shè)計(jì)采用的 Microsoft Visual Studio 2010 是微軟公司發(fā)布的Microsoft Visua
11、l Studio 軟件開(kāi)發(fā)工具的較新版本,此開(kāi)發(fā)軟件支持C#、VB.NET、C+、ASP.NET 等多種編程語(yǔ)言,功能非常強(qiáng)大。由于本設(shè)計(jì)要實(shí)現(xiàn)音頻和視頻解碼,所以要用到 directshow sdk 開(kāi)發(fā)包。DirectShow 是微軟公司在 ActiveMovie 和 Video for Windows 的基礎(chǔ)上推出的新一代基于 COM(Component Object Model)的流媒體處理的開(kāi)發(fā)包,與DirectX 開(kāi)發(fā)包一起發(fā)布。DirectShow 使用一種叫 Filter Graph 的模型來(lái)管理整個(gè)數(shù)據(jù)流的處理過(guò)程,運(yùn)用 DirectShow,我們可以很方便地從支持 WDM
12、驅(qū)動(dòng)模型的采集卡上捕獲數(shù)據(jù),并且進(jìn)行相應(yīng)的后期處理乃至存儲(chǔ)到文件中。這樣使在多媒體數(shù)據(jù)庫(kù)管理系統(tǒng)(MDBMS)中多媒體數(shù)據(jù)的存取變得更加方便。它廣泛地支持各種媒體格式,包括 Asf、Mpeg、Avi、Dv、Mp3、Wave 等,為多媒體流的捕捉和回放提供了強(qiáng)有力的支持。ActiveMovie,開(kāi)發(fā)代號(hào) Quartz,這個(gè)由 Geraint Davies 為微軟公司設(shè)計(jì)的 DirectShow 的前身,在 Windows 3.0 時(shí)代,是作為一種對(duì)當(dāng)時(shí)最流行的媒體平臺(tái) QuickTime 的回應(yīng)而開(kāi)發(fā)的。ActiveMovie 最早的出現(xiàn)是被附加在 Windows 95 上面的并且需要系統(tǒng)安裝了
13、 IE3.0 。它當(dāng)時(shí)的使命是作為 IE 的附件播放在其窗口內(nèi)的媒體文件,正如當(dāng)時(shí) QuickTime 為 Netscape 以及 IE 提供的服務(wù)那樣,它的另一個(gè)功能是作為 Windows 視頻技術(shù)(VFW,Video For Windows)的一個(gè)替換,特別地為在 VFW 架構(gòu)中難于處理的 MPEG(移動(dòng)圖象專家組格式文件)文件提供輔助處理。在 1998 年,大致在 DirectX 5 年代的時(shí)候,ActiveMovie 被重命名為 DirectShow(反映了微軟公司在那時(shí)正在努力加強(qiáng)“直接地”在一個(gè)通常的取精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)名系統(tǒng)之下與硬件合作的技術(shù))并且被包含
14、為 DirectMedia SDK 的一部份。在 DirectX 的 7 版中,DirectShow 變成了 DirectX SDK 主要組成部分而且如同 DirectInput 等其它 DirectX APIs 一樣被給予了它自己的位置。甚至之后, DirectShow 被主要用來(lái)接收來(lái)自像一個(gè)手提攝像機(jī)這樣的電視輸入裝置的數(shù)據(jù),而且它從文件中顯示數(shù)據(jù)的能力被廣泛用在 Windows Media Player 上面。 從 2005 年四月起,DirectShow 被從 DirectX SDK 移除,必須單獨(dú)下載 Extra 包才能得以支持,之后 DirectShow 的文檔和示例被轉(zhuǎn)移到 W
15、indows SDK,DirectShow 也正式成為 Windows 的一個(gè)組件。然而,在編譯某些 DirectShow 的示例時(shí),DirectX SDK 仍然是必需的。本次設(shè)計(jì)出來(lái)的多媒體播放器主要支持 avi、wmv、flv、rmvb 和 mkv 幾種網(wǎng)絡(luò)上常見(jiàn)的視頻格式,對(duì)此做簡(jiǎn)要介紹。Avi 的英文全稱為 Audio Video Interleaved,即音頻視頻交錯(cuò)格式。它于1992 年被 Microsoft 公司推出,隨 Windows3.1 一起被人們所認(rèn)識(shí)和熟知。所謂“音頻視頻交錯(cuò)” ,就是可以將視頻和音頻交織在一起進(jìn)行同步播放。這種視頻格式的優(yōu)點(diǎn)是圖像質(zhì)量好,可以跨多個(gè)平臺(tái)
16、使用,但是其缺點(diǎn)是體積過(guò)于龐大,而且更加糟糕的是壓縮標(biāo)準(zhǔn)不統(tǒng)一,因此經(jīng)常會(huì)遇到高版本 Windows 媒體播放器播放不了采用早期編碼編輯的 AVI 格式視頻,而低版本 Windows 媒體播放器又播放不了采用最新編碼編輯的 AVI 格式視頻。其實(shí)解決的方法也非常簡(jiǎn)單,我們將在后面的視頻轉(zhuǎn)換、視頻修復(fù)部分中給出解決的方案。Rmvb 是一種由 RM 視頻格式升級(jí)延伸出的新視頻格式,它的先進(jìn)之處在于RMVB 視頻格式打破了原先 RM 格式那種平均壓縮采樣的方式,在保證平均壓縮比的基礎(chǔ)上合理利用比特率資源,就是說(shuō)靜止和動(dòng)作場(chǎng)面少的畫(huà)面場(chǎng)景采用較低的編碼速率,這樣可以留出更多的帶寬空間,而這些帶寬會(huì)在出
17、現(xiàn)快速運(yùn)動(dòng)的畫(huà)面場(chǎng)景時(shí)被利用。這樣在保證了靜止畫(huà)面質(zhì)量的前提下,大幅地提高了運(yùn)動(dòng)圖像的畫(huà)面質(zhì)量,從而圖像質(zhì)量和文件大小之間就達(dá)到了微妙的平衡。FLV 是 FLASH VIDEO 的簡(jiǎn)稱,F(xiàn)LV 流媒體格式是隨著 Flash MX 的推出發(fā)展而來(lái)的視頻格式。由于它形成的文件極小、加載速度極快,使得網(wǎng)絡(luò)觀看視頻文件成為可能,它的出現(xiàn)有效地解決了視頻文件導(dǎo)入 Flash 后,使導(dǎo)出的 SWF文件體積龐大,不能在網(wǎng)絡(luò)上很好的使用等缺點(diǎn)。WMV(Windows Media Video)是微軟推出的一種流媒體格式,它是在“同門”的 ASF(AdvancedStreamFormat)格式升級(jí)延伸來(lái)得。在同等
18、視頻質(zhì)量下,WMV格式的文件可以邊下載邊播放,因此很適合在網(wǎng)上播放和傳輸。MKV 不是一種壓縮格式,而是 Matroska 的一種媒體文件,Matroska 是一種新的多媒體封裝格式,也稱多媒體容器 (Multimedia Container)。它可將多種精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)不同編碼的視頻及 16 條以上不同格式的音頻和不同語(yǔ)言的字幕流封裝到一個(gè)Matroska Media 文件當(dāng)中。MKV 最大的特點(diǎn)就是能容納多種不同類型編碼的視頻、音頻及字幕流。了解了以上的相關(guān)知識(shí),使得開(kāi)發(fā)多媒體播放軟件有了一個(gè)更加清晰的思路。1.41.4 論文主要研究?jī)?nèi)容及論文結(jié)構(gòu)安排論文主要研究
19、內(nèi)容及論文結(jié)構(gòu)安排 本畢業(yè)設(shè)計(jì)是制作一個(gè)可播放目前主流媒體格式的多媒體播放器,其基本功能應(yīng)具有媒體播放、音量調(diào)節(jié)、播放進(jìn)度選擇、暫停、停止以及抓圖等,使之成為一款簡(jiǎn)易的媒體播放設(shè)備,能夠完美的播放市面上大多數(shù)的音頻、視頻文件。 論文的結(jié)構(gòu)安排: 第一章 緒論介紹研究背景,目的和意義等;第二章 開(kāi)發(fā)工具介紹,軟件的需求分析和模塊設(shè)計(jì);第三章 多媒體播放器軟件設(shè)計(jì); 第五章 播放器實(shí)現(xiàn)結(jié)果演示;最后是結(jié)束語(yǔ)以及參考文獻(xiàn)和附錄的相關(guān)內(nèi)容。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)第二章 開(kāi)發(fā)平臺(tái)介紹和軟件的初步設(shè)計(jì)2.12.1 開(kāi)發(fā)平臺(tái)的介紹開(kāi)發(fā)平臺(tái)的介紹Visual Studio 是微軟公司推出的
20、開(kāi)發(fā)環(huán)境。是目前最流行的 Windows 平臺(tái)應(yīng)用程序開(kāi)發(fā)環(huán)境。Visual Studio 2010 版本于 2010 年 4 月 12 日上市,其集成開(kāi)發(fā)環(huán)境(IDE)的界面被重新設(shè)計(jì)和組織,變得更加簡(jiǎn)單明了。Visual Studio 2010 同時(shí)帶來(lái)了 NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview-CTP),并且支持開(kāi)發(fā)面向 Windows 7 的應(yīng)用程序。除了 Microsoft SQL Server,它還支持 IBM DB2 和 Oracle 數(shù)據(jù)庫(kù)。在 vs2010
21、 開(kāi)發(fā)平臺(tái)上開(kāi)發(fā)用戶界面應(yīng)用程序,我們需要用到 mfc 類庫(kù)。MFC(Microsoft Foundation Classes),是一個(gè)微軟公司提供的類庫(kù)(class libraries) ,以 C+類的形式封裝了 Windows 的 API,并且包含一個(gè)應(yīng)用程序框架,以減少應(yīng)用程序開(kāi)發(fā)人員的工作量。其中包含的類包含大量Windows 句柄封裝類和很多 Windows 的內(nèi)建控件和組件的封裝類。MFC 是 WinAPI 與 C+的結(jié)合。API,即微軟提供的 Windows 下應(yīng)用程序的編程語(yǔ)言接口,是一種軟件編程的規(guī)范,但不是一種程序開(kāi)發(fā)語(yǔ)言本身,可以允許用戶使用各種各樣的第三方(如我是一方,
22、微軟是一方,Borland 就是第三方)的編程語(yǔ)言來(lái)進(jìn)行對(duì) Windows 下應(yīng)用程序的開(kāi)發(fā),使這些被開(kāi)發(fā)出來(lái)的應(yīng)用程序能在 Windows 下運(yùn)行,比如 VB、VC+、Java、Delhpi。編程語(yǔ)言函數(shù)本質(zhì)上全部源于 API,因此用它們開(kāi)發(fā)出來(lái)的應(yīng)用程序都能工作在 Windows 的消息機(jī)制和繪圖里,遵守 Windows 作為一個(gè)操作系統(tǒng)的內(nèi)部實(shí)現(xiàn),這其實(shí)也是一種必要。微軟如果不提供 API,這個(gè)世上對(duì) Windows 編程的工作就不會(huì)存在,微軟的產(chǎn)品就會(huì)迅速?gòu)臅r(shí)尚變成垃圾。上面說(shuō)到 MFC 是微軟對(duì) API 函數(shù)的專用 C+封裝,這種結(jié)合一方面讓用戶使用微軟的專業(yè) C+ SDK 來(lái)進(jìn)行
23、Windows 下應(yīng)用程序的開(kāi)發(fā)變得容易,因?yàn)?MFC 是對(duì) API 的封裝,微軟做了大量的工作,隱藏了好多程序開(kāi)發(fā)人員在 Windows 下用 C+ & MFC 編制軟件時(shí)的大量?jī)?nèi)節(jié),如應(yīng)用程序?qū)崿F(xiàn)消息的處理、設(shè)備環(huán)境繪圖,這種結(jié)合是以方便為目的的,必定要付出一定代價(jià)(這是微軟的一向作風(fēng)),因此就造成了 MFC 對(duì)類封裝中的一定程度的的冗余和迂回,但這是可以接受的。2.22.2 軟件的需求分析和模塊設(shè)計(jì)軟件的需求分析和模塊設(shè)計(jì)2.2.1 軟件的需求分析本軟件要實(shí)現(xiàn)的基本功能是實(shí)現(xiàn)音視頻文件的播放,要求實(shí)現(xiàn)的控制功能是打開(kāi)、播放、暫停、音量調(diào)節(jié)、播放進(jìn)度的控制、全屏播放、抓圖、結(jié)束、退
24、出等功能,而且要求能夠播放 rmvb、avi、flv、mkv 等常見(jiàn)的視頻格式。根精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)據(jù)這些要求,需要有相應(yīng)的軟/硬件來(lái)支持,硬件方面的要求是計(jì)算機(jī)要有聲卡和顯卡,軟件方面的要求有:windows xp 操作系統(tǒng)、vs2010、directshow sdk 開(kāi)發(fā)包、ffdshow 編解碼軟件以及各種視頻格式解碼器。視頻編解碼器,是指一個(gè)能夠?qū)?shù)字視頻進(jìn)行壓縮或者解壓縮的程序或者設(shè)備。通常這種壓縮屬于有損數(shù)據(jù)壓縮。ffdshow 是一套免費(fèi)的編解碼軟件,可支持 H.264、FLV、WMV、MPEG-1、MPEG-2 以及 MPEG-4 等格式視頻檔。ffds
25、how 本身并不包含媒體播放器,但各種媒體播放器都可以使用 ffdshow 進(jìn)行解碼。2.2.2 軟件的模塊設(shè)計(jì)多媒體播放器:打開(kāi)模塊、播放模塊、暫停模塊、停止模塊、抓圖模塊、退出模塊、拖拽模塊、菜單模塊。如圖 1:圖圖 1 1: 多媒體播放器模塊設(shè)計(jì)多媒體播放器模塊設(shè)計(jì)打開(kāi)模塊:打開(kāi)目標(biāo)文件,如音頻、視頻。退出模塊:關(guān)閉播放器。播放模塊:播放音頻、視頻。暫停模塊:暫時(shí)停止正在播放的音/視頻文件。停止模塊:結(jié)束當(dāng)前視頻的播放。抓圖模塊:對(duì)視頻進(jìn)行截圖保存。拖拽模塊:拖拽音/視頻的進(jìn)度條,控制音量的大小與視頻的進(jìn)度。菜單模塊:設(shè)置右鍵快捷菜單,菜單中包括有對(duì)視頻播放速率的控制以及全屏、靜音等功能
26、。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)第三章 多媒體播放器軟件設(shè)計(jì)3.13.1 開(kāi)發(fā)環(huán)境配置開(kāi)發(fā)環(huán)境配置在開(kāi)發(fā)之前我們需要在 vs2010 中搭建 directshow sdk 開(kāi)發(fā)包。首先我們將下載好的 directshow sdk 安裝到本機(jī)上。接著我們打開(kāi) directshow 的 sdk 安裝目錄:C:/DX90SDK/Samples/C+/DirectShow/,在里面找到一個(gè)叫 baseclasses 的工程。雙擊 baseclasses.sln 打開(kāi),按照提示轉(zhuǎn)換工程,打開(kāi)后對(duì)它進(jìn)行編譯。如圖 2 所示,我們會(huì)看到編譯失敗,提示有很多錯(cuò)誤。圖圖 2 2 :編譯中的錯(cuò)誤:編譯
27、中的錯(cuò)誤我們將項(xiàng)目-屬性-配置屬性-C/C+- 常規(guī)-附加包含目錄里面的內(nèi)容(.,././././include)刪掉。接著我們將項(xiàng)目-屬性-配置屬性-C/C+- 語(yǔ)言-強(qiáng)制 For 循環(huán)范圍中的合規(guī)性設(shè)置為否。再接著我們?cè)陧?xiàng)目-屬性-配置屬性-C/C+- 命令行-其它選項(xiàng)中增加/wd4430 選項(xiàng)。最后我們?cè)俅尉幾g,發(fā)現(xiàn)編譯成功。編譯成功之后,我們?cè)陧?xiàng)目-屬性-配置屬性-vc+ 目錄里選擇包含目錄然后增加C:DXSDKInclude;C:DXSDKSamplesC+CommonInclude;C:DXSDKSamplesC+DirectShowBaseClasses,在庫(kù)目錄中增加 C:DX
28、SDKLib。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)3.23.2 實(shí)現(xiàn)實(shí)現(xiàn) GraphEditGraphEdit 模擬模擬實(shí)際使用 Directshow 播放器,首先需要使用 GraphEdit 來(lái)模擬實(shí)現(xiàn),驗(yàn)證插入濾波器的運(yùn)行特點(diǎn),體會(huì)濾波器的操作過(guò)程,為播放器能夠正常播放視頻做好保障。在使用 graphedit 進(jìn)行模擬實(shí)現(xiàn)視頻播放的過(guò)程中,我們發(fā)現(xiàn)無(wú)法正常建立濾波器鏈表。進(jìn)行了相關(guān)知識(shí)的了解之后,我才知道這是由于沒(méi)有安裝相應(yīng)的解碼器。如圖 3 所示,我安裝了相應(yīng)的解碼器。圖圖 3 3:. .安裝解碼器安裝解碼器如圖 4 所示,在安裝了解碼器之后,則能正常的建立濾波器鏈表了。圖圖 4
29、4 建立濾波器鏈表建立濾波器鏈表3.33.3 directshowdirectshow 接口實(shí)現(xiàn)函數(shù)說(shuō)明接口實(shí)現(xiàn)函數(shù)說(shuō)明Directshow 有關(guān)的接口和方法主要封裝在 CDXGraph 類中,這個(gè)類也是本設(shè)計(jì)中兩個(gè)重要的類之一。以下就是該類中所包含的主要方法以及作用:精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)函數(shù)名 函數(shù)功能Bool CDXGraph:Create(void)生成濾波器鏈表管理器Bool CDXGraph:QueryInterfaces(void)查詢各類接口Bool CDXGraph:RenderFile(TCHAR * inFile)剖析媒體文件Bool CDXGraph
30、: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)獲取播放時(shí)間長(zhǎng)度Bool CDXGraph:GetCurrentPosition(double * outPosition)獲取當(dāng)前播放位置Bool CDXG
31、raph: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è)置視頻開(kāi)始結(jié)束位置Bool CDXGraph:Mute( )靜音模式Bool CDXGraph:UnMute( )非靜音模式Bool CDXGraph:
32、SetFullScreen(BOOL inEnabled)設(shè)置全屏Bool CDXGraph:SnapshotBitmap(TCHAR *outFIle)抓圖保存表表 1 1:CDGraphCDGraph 類中的主要函數(shù)及其作用類中的主要函數(shù)及其作用3.43.4 模塊實(shí)現(xiàn)函數(shù)說(shuō)明模塊實(shí)現(xiàn)函數(shù)說(shuō)明實(shí)現(xiàn)模塊功能的具體函數(shù)則均屬于 CMediaPlayer 類,它是本設(shè)計(jì)中兩個(gè)重要的類中的另外一個(gè),它是在建立 MediaPlayer 工程時(shí)由 MFC 建立的一個(gè)對(duì)話框的類,在該對(duì)話框上進(jìn)行的操作函數(shù)即可實(shí)現(xiàn)程序所需要的所有功能,其精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)實(shí)現(xiàn)函數(shù)則是調(diào)用 CDXGr
33、aph 類的相關(guān)函數(shù),從而完成各項(xiàng)具體功能。各個(gè)模塊的具體實(shí)現(xiàn)函數(shù)描述如表 2:模塊名稱 實(shí)現(xiàn)函數(shù) 打開(kāi)模塊void CMediaPlayerDlg:OnBnClickedButtonOpen() 播放模塊void CMediaPlayerDlg:OnBnClickedButtonPlay()暫停模塊void CMediaPlayerDlg:OnBnClickedButtonPause()停止模塊void CMediaPlayerDlg:OnBnClickedButtonStop() 抓圖模塊void CMediaPlayerDlg:OnBnClickedButtonGrasp()退出模塊vo
34、id CMediaPlayerDlg:OnBnClickedButtonExit()拖拽模塊void CMediaPlayerDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)菜單模塊void CMediaPlayerDlg:OnMenuOpenfile() void CMediaPlayerDlg:OnMenuHalfrate()void CMediaPlayerDlg:OnMenuNormalrate()void CMediaPlayerDlg:OnMenuDoublerate()void CMediaPlayerD
35、lg:OnMenuFullscreen()void CMediaPlayerDlg:OnMenuAlwaysontop()void CMediaPlayerDlg:OnMenuMute()void CMediaPlayerDlg:OnMenuClosefile()void CMediaPlayerDlg:OnMenuPlay()void CMediaPlayerDlg:OnMenuStop()void CMediaPlayerDlg:OnMenuGrabimage()void CMediaPlayerDlg:OnMenuExit()表表 2 2:各個(gè)模塊及其實(shí)現(xiàn)函數(shù):各個(gè)模塊及其實(shí)現(xiàn)函數(shù)3.5
36、3.5 主要變量聲明主要變量聲明程序中用到得主要控件有:6 個(gè)按鈕控件,一個(gè)圖像控件,兩個(gè)進(jìn)度條控件。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)控件名稱變量類型變量名說(shuō)明IDC_BUTTON_OPENCButtonm_Open打開(kāi)IDC_BUTTON_PLAYCButtonm_Play播放IDC_BUTTON_PAUSECButtonm_Pause暫停IDC_BUTTON_STOPCButtonm_Stop停止IDC_BUTTON_GRASPCButtonm_Grap抓圖IDC_BUTTO_EXITCButtonm_Exit退出IDC_SLIDER_PLAYCSliderCtrlm_slide
37、rPlayer視頻進(jìn)度條IDC_SLIDER_VOLUMECSliderCtrlm_siderVolume音量進(jìn)度條IDC_VIDEO_WINDOWCStaticm_videoWindow圖像控件表表 3 3:程序中的主要變量:程序中的主要變量3.63.6 設(shè)計(jì)多媒體播放器的界面設(shè)計(jì)多媒體播放器的界面播放器主界面設(shè)計(jì)如圖 5:圖圖 5 5:播放器主界面:播放器主界面精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)3.73.7 播放器模塊設(shè)計(jì)播放器模塊設(shè)計(jì)為界面添加 Picture Control 圖像控件,兩個(gè)進(jìn)度條控件以及打開(kāi)、播放、暫停、停止、抓圖、退出等按鈕控件。下面對(duì)各個(gè)模塊的實(shí)現(xiàn)函數(shù)及其代
38、碼做簡(jiǎn)要分析:(1)單擊播放器界面中的“打開(kāi)”按鈕,即可打開(kāi)要播放的媒體文件。在下述代碼中,將以只讀方式打開(kāi)要播放的文件,并且過(guò)濾了流媒體文件的格式,獲取了媒體的路徑和文件名。void CMediaPlayerDlg:OnBnClickedButtonOpen() CString strFilter = _T(AVI File (*.avi) | *.avi|); strFilter += MPEG File (*.mpg; *.mpeg) | *.mpg; *.mpeg|; strFilter += MP3 File (*.mp3) | *.mp3|; strFilter += WMA Fi
39、le (*.wma) | *.wma|; strFilter += All File (*.*) | *.*|; /編輯下拉選項(xiàng)框CFileDialog dlg(TRUE,NULL,NULL,OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, strFilter, this); /設(shè)置打開(kāi)文件對(duì)話框 if (dlg.DoModal() = IDOK)/當(dāng)用戶打開(kāi)文件時(shí),做以下行為m_sourceFile = dlg.GetPathName();/獲取文件所在的路徑名m_mediaFileName =GetFileTitleFromFileName(m_sourceFile,
40、1);/獲取文件名稱CreateGraph();創(chuàng)建鏈表,連接濾波器(2)單擊“播放”按鈕后,開(kāi)始選擇播放的媒體文件。同時(shí)在標(biāo)題欄中顯示播放速率和媒體文件名,具體代碼如下:void CMediaPlayerDlg:OnBnClickedButtonPlay() if (m_pFilterGraph) /如果 CDXGraph 對(duì)象已創(chuàng)建成功,則執(zhí)行以下代碼 SetWindowText(_T(1 倍速播放 ) + m_mediaFileName); /設(shè)置窗口標(biāo)題欄文本內(nèi)容精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)m_pFilterGraph-Run(); /播放視頻文件m_pFilterGra
41、ph-ChangeAudioVolume(m_volume); /改變音量m_sliderVolume.SetPos(m_volume); /設(shè)置音量進(jìn)度條的位置if (m_playerTimer = 0) /設(shè)置定時(shí)器m_playerTimer = SetTimer(SLIDER_TIMER, 100, NULL); (3)點(diǎn)擊“暫?!卑粹o,暫停播放視頻。void CMediaPlayerDlg:OnBnClickedButtonPause()if (m_pFilterGraph != NULL)/如果 CDXGraph 對(duì)象不為空,則執(zhí)行代碼m_pFilterGraph-Pause();/
42、暫停播放視頻 (4)點(diǎn)擊“停止”按鈕,停止播放視頻。void CMediaPlayerDlg:OnBnClickedButtonStop()if (m_pFilterGraph != NULL)/如果 CDXGraph 對(duì)象不為空,則執(zhí)行代碼m_pFilterGraph-Stop();/停止播放視頻 (5)點(diǎn)擊“退出”按鈕,退出程序。void CMediaPlayerDlg:OnBnClickedButtonExit() OnBnClickedButtonStop();/停止播放 CoUninitialize();/關(guān)閉程序的所有線程精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) CDialog:
43、OnOK();/關(guān)閉窗口(6)點(diǎn)擊“抓圖”按鈕,實(shí)現(xiàn)視頻截圖功能,并且將圖片保存到軟件的同一目錄下。 void CMediaPlayerDlg:OnBnClickedButtonGrasp() static int c = 0; TCHAR szFilenameMAX_PATH; DWORD dwPathLen = 0; if(dwPathLen=:GetModuleFileName(:AfxGetInstanceHandle(),szFilename, MAX_PATH )= 0)/得到程序整個(gè)路徑名長(zhǎng)度 return; for( int i=dwPathLen-1; i=0; i-)/獲取
44、圖片保存的目錄 if( = szFilenamei) | (/ = szFilenamei) break; else szFilenamei = 0; /設(shè)置圖片保存的完整路徑名稱CString str;str.Format(_T(%s),szFilename);CString strTemp;strTemp.Format(_T(%d),c);str += strTemp + _T(.bmp);c+;TCHAR *p=str.GetBuffer(str.GetLength();str.ReleaseBuffer();精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)/進(jìn)行抓圖,并且將圖片放在指定路徑下
45、if (m_pFilterGraph != NULL)if (m_pFilterGraph-SnapshotBitmap(p)elseMessageBox(_T(抓圖失敗!); (7)實(shí)現(xiàn)拖拽功能,使得手動(dòng)拖動(dòng)進(jìn)度條控件,能夠控制音量的大小以及視頻的進(jìn)度。void CMediaPlayerDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)if(pScrollBar-GetSafeHwnd()=m_sliderPlayer.GetSafeHwnd()/如果拖動(dòng)消息來(lái)自視頻進(jìn)度條,則執(zhí)行代碼if (m_pFilterGrap
46、h != NULL)/CDXGraph 對(duì)象不為空double duration =1.0;/定義事件長(zhǎng)度對(duì)象m_pFilterGraph-GetDuration(&duration);/獲取流媒體文件時(shí)間長(zhǎng)度double pos = duration * m_sliderPlayer.GetPos()/1000.0;/計(jì)算得到進(jìn)度條位置m_pFilterGraph-SetCurrentPosition(pos);/設(shè)置當(dāng)前進(jìn)度條的位置else if(pScrollBar-GetSafeHwnd()=m_sliderVolume.GetSafeHwnd()/如果拖動(dòng)消息來(lái)自音量進(jìn)度條i
47、f (m_pFilterGraph != NULL)m_volume = m_sliderVolume.GetPos();/獲取音量進(jìn)度條位置m_pFilterGraph-ChangeAudioVolume(m_volume);/改變當(dāng)前音精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)量 elseCDialog:OnHScroll(nSBCode, nPos, pScrollBar);(8)設(shè)置靜音或非靜音模式void CMediaPlayerDlg:OnMenuMute()if (m_pFilterGraph != NULL)/CDXGraph 對(duì)象不為空 static int flag=0;/
48、設(shè)置信號(hào)量if (!flag)/判斷信號(hào)量是否為真,即判斷當(dāng)前是否為靜音模式m_pFilterGraph-Mute();/設(shè)置為靜音模式flag = 1;/設(shè)置信號(hào)量為真elsem_pFilterGraph-UnMute();/設(shè)置為非靜音模式flag = 0;設(shè)置信號(hào)量為假 (9)設(shè)置全屏播放模式。 void CMediaPlayerDlg:OnMenuFullscreen()static int flag=0; /設(shè)置信號(hào)量 if (m_pFilterGraph != NULL) if (!flag)/判斷信號(hào)量的值是否為真,即判斷當(dāng)前是否為全屏m_pFilterGraph-SetFull
49、Screen(TRUE);/設(shè)置為全屏模式flag = 1;/設(shè)置信號(hào)量為真精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)elsem_pFilterGraph-SetFullScreen(FALSE);/關(guān)閉全屏模式flag = 0;/設(shè)置信號(hào)量為假 (10)設(shè)置置頂播放模式,但用戶將播放器設(shè)置成置頂播放模式后,播放器就不會(huì)被其他窗口所覆蓋。void CMediaPlayerDlg:OnMenuAlwaysontop() static int flag=0; 設(shè)置信號(hào)量 if (!flag)/判斷信號(hào)量是否為真,即判斷當(dāng)前是否為置頂模式 :SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSI ZE);/設(shè)置窗口為置頂flag = 1;/設(shè)置信號(hào)量為真 else :SetWindowP
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同產(chǎn)品加盟合同8篇
- 辦公樓裝修合同與辦公用品供貨合同2篇
- 營(yíng)銷活動(dòng)委托標(biāo)準(zhǔn)合同2篇
- 個(gè)人簡(jiǎn)單版擔(dān)保合同示范文本5篇
- 2025年委托制作合同范本3篇
- 上海市有產(chǎn)權(quán)住房租賃合同6篇
- 第三方服務(wù)單位廉政合同3篇
- 夫妻房產(chǎn)約定協(xié)議書(shū)
- 深圳市二手車買賣合同合同5篇
- 商務(wù)合作協(xié)議公司治理5篇
- 打印版醫(yī)師執(zhí)業(yè)注冊(cè)健康體檢表(新版)
- 《空中領(lǐng)航》全套教學(xué)課件
- 人教版五年級(jí)下冊(cè)數(shù)學(xué)操作題期末專項(xiàng)練習(xí)(及解析)
- 中藥熏洗法操作評(píng)分標(biāo)準(zhǔn)與流程
- 學(xué)習(xí)解讀《執(zhí)業(yè)獸醫(yī)和鄉(xiāng)村獸醫(yī)管理辦法》課件
- 室內(nèi)裝飾不銹鋼技術(shù)交底
- 1.3.1動(dòng)量守恒定律課件(共13張PPT)
- 白黑白裝飾畫(huà)欣賞黑白裝飾畫(huà)的特點(diǎn)黑白裝飾畫(huà)的表現(xiàn)形式黑白裝飾 bb
- TCECS 850-2021 住宅廚房空氣污染控制通風(fēng)設(shè)計(jì)標(biāo)準(zhǔn)
- 調(diào)度指揮與統(tǒng)計(jì)分析課程教學(xué)設(shè)計(jì)
- GB∕T 25119-2021 軌道交通 機(jī)車車輛電子裝置
評(píng)論
0/150
提交評(píng)論