2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設(shè)計(論文)</b></p><p>  題 目: 播放器的設(shè)計與實現(xiàn) </p><p>  指導(dǎo)教師: 職稱: </p><p><b>  播放器的設(shè)計與實現(xiàn)</b></p><p><b&

2、gt;  摘 要</b></p><p>  隨著計算機(jī)的廣泛運用,Internet的迅速發(fā)展,多媒體技術(shù)也是迅速發(fā)展。各種音頻視頻資源在網(wǎng)上隨處可見,在人們的日常生活中,幾乎不可或缺,于是各種播放器緊跟著發(fā)展起來。本文旨在通過在.net開發(fā)平臺上開發(fā)一個簡單的視頻播放器的過程,了解播放器的功能實現(xiàn),掌握播放器開發(fā)的相關(guān)技術(shù),同時利用軟件工程的相關(guān)理論知識,了解軟件開發(fā)的方法與步驟。</p

3、><p>  首先,本文簡單介紹下市場上流行的播放器,比如暴風(fēng)影音等,然后了解這些播放器的功能,還有各種播放器播放的特別編碼格式文件,分析各種編碼格式的優(yōu)缺點;其次選擇在微軟的.net開發(fā)平臺上使用C#語言進(jìn)行開發(fā),編寫出功能簡單實用方便的播放器。主要包括以下幾個方面:開發(fā)本軟件所使用的開發(fā)平臺與技術(shù);功能模塊;功能設(shè)計;功能實現(xiàn)等。最后,對本軟件的開發(fā)過程進(jìn)行簡要總結(jié),并介紹一下本人的體會和感想。</p>

4、;<p>  【關(guān)鍵詞】:播放器 ;.NET;DirectX 9.0;C#</p><p>  Design and implementation of video player</p><p><b>  Abstract</b></p><p>  Along with the computers are widely use

5、d, Internet rapid development and the multimedia technology is also developing rapidly. A variety of audio and video resources can be seen everywhere on the Internet, in people’s daily lives, almost indispensable, then a

6、ll kinds of Player is developed. This paper aim at to understand the functions implementations of Player, to master the development technologies of Player, and use the theory of software engineering to understand the met

7、hod and step of softw</p><p>  First of all, this paper introduce some popular players in brief on the market, such as storm video, etc., then to understand some functons of these players, all kinds of speci

8、al coding format file they can play, to analyze the advantages and disadvantages of various coding formats; second I choose Microsoft .Net development platform and use the C # language to write a function of simple and p

9、ractical and convenient player. Includeing the following main aspects: the development platform and tech</p><p>  【Keywords】:player;.NET;DirectX;C#</p><p><b>  目 錄</b></p><

10、;p><b>  第一章 概述5</b></p><p>  1.1項目背景與意義5</p><p>  1.2市面流行播放器舉例簡介5</p><p>  1.2.1暴風(fēng)影音5</p><p>  1.2.2風(fēng)雷影音6</p><p>  1.2.3幾種常見格式簡介7

11、</p><p>  1.3相關(guān)技術(shù)及開發(fā)工具介紹8</p><p>  1.3.1Visual Studio .Net集成開發(fā)環(huán)境簡介8</p><p>  1.3.2C#語言簡介9</p><p>  1.3.3DirectX SDK 9.0簡介10</p><p>  第二章 總體功能設(shè)計與實現(xiàn)

12、12</p><p>  2.1 功能設(shè)計12</p><p>  2.1.1 功能設(shè)計及描述12</p><p>  2.1.2 功能模塊圖13</p><p>  2.2 功能實現(xiàn)13</p><p>  2.2.1 主界面實現(xiàn)13</p><p>  2.2.2 文件控制的實現(xiàn)

13、15</p><p>  2.2.3 播放控制的實現(xiàn)16</p><p>  2.2.4 進(jìn)度控制的實現(xiàn)19</p><p>  2.2.5 聲音控制21</p><p>  2.2.6 顯示控制的實現(xiàn)22</p><p>  2.2.7 系統(tǒng)說明24</p><p><b>

14、;  第三章 總結(jié)26</b></p><p><b>  致 謝27</b></p><p><b>  參考文獻(xiàn)28</b></p><p><b>  第一章 概述</b></p><p><b>  項目背景與意義</b>&l

15、t;/p><p>  在2000年1月,使用媒體播放器(不論是離線播放器還是網(wǎng)絡(luò)播放器)的家庭用戶是3320萬,到2001年1月猛增到4170萬。在工作中使用媒體播放器的專業(yè)用戶數(shù)量也較去年同期上升了34.9%,從2000年1月的1160萬增加到2001年1月的1570萬。而隨著計算機(jī)的廣泛運用,Internet的迅速發(fā)展,多媒體技術(shù)也是迅速發(fā)展,各種音頻視頻資源在網(wǎng)上隨處可見,于是播放器在人們的日常生活中,幾乎是不

16、可或缺的一部分?,F(xiàn)在用戶量更是龐大到不可思議的地步,比之九年前那是云泥之別。</p><p>  但是現(xiàn)在的播放器一味追求花哨的外觀,龐大的功能,比如一些多媒體播放器在播放網(wǎng)絡(luò)視頻時啟動網(wǎng)絡(luò)加速器,使其他網(wǎng)絡(luò)用戶造成網(wǎng)絡(luò)堵塞,在目前網(wǎng)絡(luò)速度很快的情況下這種損人利己的行為是不對的,也是沒必要的。就是太多這些沒必要的功能、花哨的外觀等對用戶的計算機(jī)造成很大的資源浪費,當(dāng)用戶進(jìn)行多任務(wù)操作時帶來很多不便。對于大多數(shù)的普

17、通用戶來說,很多功能、外觀形同虛設(shè),根本用不上。對于他們,他們的計算機(jī)來說,這些都是負(fù)擔(dān)。</p><p>  本人作為學(xué)習(xí)軟件工程專業(yè)的一員,對軟件工程,程序設(shè)計等理論知識有了較深的認(rèn)識,同事也掌握了一定的軟件開發(fā)理論,借助這次畢業(yè)設(shè)計,把這些理論知識付諸實踐,結(jié)合上述情況,本人選擇了開發(fā)一個簡單方便易操作的個人音頻視頻播放器,能夠播放常見的音頻視頻格式,滿足一般用戶聽歌看電影的需求。但作為畢業(yè)設(shè)計,時間緊迫,

18、加之本人沒有任何軟件開發(fā)的經(jīng)驗,他肯定存在許許多多不足之處,但對它的改善和對自己知識的完備不會隨著畢業(yè)設(shè)計的結(jié)束而終止。</p><p>  市面流行播放器舉例簡介</p><p>  本小節(jié)舉例介紹下時下比較常見播放器,比如國產(chǎn)暴風(fēng)影音、風(fēng)雷影音等。比較分析它們的功能,及特有的解碼功能等;還有再介紹下集中常見的編碼格式以及它們的特點。</p><p><b&

19、gt;  暴風(fēng)影音</b></p><p>  暴風(fēng)影音是暴風(fēng)網(wǎng)際公司推出的一款視頻播放器,該播放器兼容大多數(shù)的視頻和音頻格式。從2003年開始,5年來,暴風(fēng)的工程師分析了數(shù)以十萬計的視頻文件,掌握了超過500種視頻格式的支持方案。到2009年1月,暴風(fēng)影音每天使用用戶超過2200萬,暴風(fēng)影音成功的幫助了超過1億5000萬的中國互聯(lián)網(wǎng)用戶輕松的觀看視頻。來自艾瑞的數(shù)據(jù)顯示:截止2009年1月,暴風(fēng)影音

20、每天為互聯(lián)網(wǎng)用戶播放超過1.5億個/次視頻文件;每天,有2200萬人點擊藍(lán)色的膠片圖標(biāo),打開暴風(fēng)影音這款軟件;每天,通過暴風(fēng)影音播放的視頻文件占中國所有互聯(lián)網(wǎng)視頻播放量的50%。暴風(fēng)影音已經(jīng)成為中國最大的互聯(lián)網(wǎng)視頻播放平臺。2008年7月,全新的暴風(fēng)影音2008第一次涵蓋了互聯(lián)網(wǎng)用戶觀看視頻的所有服務(wù)形式,包括:本地播放、在線直播、在線點播、高清播放等;</p><p>  軟件特色:通過自動偵測用戶的電腦硬件配

21、置;自動匹配相應(yīng)的解碼器、渲染鏈;自動調(diào)整對硬件的支持。它提供和升級了系統(tǒng)對常見絕大多數(shù)影音文件和流的支持,包括 :RealMedia、QuickTime、MPEG2、MPEG4 (ASP/AVC)、VP3/6/7、Indeo、FLV 等流行視頻格式;AC3/DTS/LPCM/AAC/OGG/MPC/APE/FLAC/TTA/WV 等流行音頻格式;3GP/Matroska/MP4/OGM/PMP/XVD 等媒體封裝及字幕支持等。暴風(fēng)影音

22、采用 NSIS 封裝,為標(biāo)準(zhǔn)的 Windows 安裝程序,特點是單文件多語種(目前為簡體中文 + 英文),具有穩(wěn)定靈活的安裝、卸載、維護(hù)和修復(fù)功能,并對集成的解碼器組合進(jìn)行了盡可能的優(yōu)化和兼容性調(diào)整,適合普通的大多數(shù)以多媒體欣賞或簡單制作為主要使用需求的用戶。</p><p>  在兼容問題上,暴風(fēng)影音和一些軟件部相容,但問題不大,可以解決,但是要用戶自己解決。比如安裝暴風(fēng)影音后,麗臺電視卡無法使用,解決也很簡單

23、,下載安裝該電視卡全套的最新版本驅(qū)動和電視播放軟件即可(注意僅僅驅(qū)動是不行的,一定要包括播放軟件);播放AVI的時候畫面出錯或CPU占有率奇高——解決方案:通常是解碼器兼容問題;等等,雖然有點麻煩,但可以解決。</p><p>  從以上簡單的介紹可以看出,暴風(fēng)影音整體還是個很強(qiáng)大,很好用的播放器。單個人看來,它仍然有一些問題。暴風(fēng)影音截止到現(xiàn)在版本已經(jīng)升級很多次了,幾乎每次升級都添加了新功能,優(yōu)化了某些功能,修

24、正個別bug,到現(xiàn)在暴風(fēng)能播放幾百種格式的媒體文件,功能龐大。這些看似很好,但是對于一般用戶來說看電影聽音樂看網(wǎng)上視頻能使用幾種格式的文件,甚至有部分用戶不能上網(wǎng),對于這些用戶來說絕大部分的功能是白費了,浪費資源而已。</p><p><b>  風(fēng)雷影音</b></p><p>  功能特色:獨創(chuàng)雙播放內(nèi)核,更快速、更清晰、更流暢,國內(nèi)首家獨創(chuàng)真正雙播放內(nèi)核影音播放

25、器,聚合MPlayer和MPC強(qiáng)大優(yōu)勢功能,實現(xiàn)快速解碼,挑戰(zhàn)最快</p><p>  播放極限,播放影片更快速、更清晰、更流暢;全面支持高清影片播放(無需安裝第三方軟件),從2.1版本起,全面支持高清影片播放,且無需另外安裝第三方軟件,全面支持HD-DVD/BD-DVD、VC-1、EAC3、EVO、TS、TP、MKV 等高清格式影片;獨創(chuàng)高清智能連接技術(shù)、VC-1智能橋接技術(shù)、啟用顯卡硬解功能,充分發(fā)揮顯卡硬解

26、MPEG2,讓高清播放更流暢;播放206種影音格式;多分層過濾解碼,全面提升影片兼容播放,在雙播放內(nèi)核的基礎(chǔ)上采用多分層過濾解碼,保證不同格式不同編碼的影片都能找到對應(yīng)的分離器和解碼器并順暢播放,大大提升了影片播放的兼容性;智能連續(xù)劇播放,智能連續(xù)劇識別,無需多次選擇播放連續(xù)劇影片,自動連續(xù)劇播放,讓您不間斷欣賞影片更順暢、更舒心;跳過連續(xù)劇片頭/片尾,在播放連續(xù)劇影片時,可以通過按 F9/F10 來設(shè)置跳過連續(xù)劇的片頭/片尾,讓劇情播

27、放無縫連接,等等。</p><p>  從上述功能(并不完全,只是介紹一下特色功能)可以看出,風(fēng)雷影音也是個很不錯的播放器,特別是其在雙播放內(nèi)核、高清影音上別具特色。但是對于部分在網(wǎng)上看視頻的用戶來說有一點缺陷,它不支持在線播放(只提供對firefox瀏覽器進(jìn)行常見流格式的在線播放支持插件)。</p><p><b>  幾種常見格式簡介</b></p>

28、<p>  MPEG格式:它的英文全稱為Moving Picture Expert Group,即運動圖像專家組格式,家里??吹腣CD、SVCD、DVD就是這種格式。MPEG文件格式是運動圖像壓縮算法的國際標(biāo)準(zhǔn),它采用了有損壓縮方法減少運動圖像中的冗余信息,說的更加明白一點就是MPEG的壓縮方法依據(jù)是相鄰兩幅畫面絕大多數(shù)是相同的,把后續(xù)圖像中和前面圖像有冗余的部分去除,從而達(dá)到壓縮的目的(其最大

29、壓縮比可達(dá)到200:1)。目前MPEG格式有三個壓縮標(biāo)準(zhǔn),分別是MPEG-1、MPEG-2、和MPEG-4。</p><p>  AVI格式:音頻視頻交錯(Audio Video Interleaved)的英文縮寫。AVI這個由微軟公司發(fā)表的視頻格式在視頻領(lǐng)域已經(jīng)存在好幾個年頭了。AVI格式調(diào)用方便、圖像質(zhì)量好,但缺點就是文件體積過于龐大,壓縮標(biāo)準(zhǔn)不統(tǒng)一。</p><p>  RM格式:N

30、etworks公司所制定的音頻視頻壓縮規(guī)范稱之為Real Media,用戶可以使用RealPlayer或RealOne Player對符合RealMedia技術(shù)規(guī)范的網(wǎng)絡(luò)音頻/視頻資源進(jìn)行實況轉(zhuǎn)播,并且RealMedia還可以根據(jù)不同的網(wǎng)絡(luò)傳輸速率制定出不同的壓縮比率,從而實現(xiàn)在低速率的網(wǎng)絡(luò)上進(jìn)行影像數(shù)據(jù)實時傳送和播放。這種格式的另一個特點是用戶使用RealPlayer或RealOne Player播放器可以在不下載音頻/視頻內(nèi)容的條件

31、下實現(xiàn)在線播放。</p><p>  RMVB格式:這是一種由RM視頻格式升級延伸出的新視頻格式,它的先進(jìn)之處在于RMVB視頻格式打破了原先RM格式那種平均壓縮采樣的方式,在保證平均壓縮比的基礎(chǔ)上合理利用比特率資源,就是說靜止和動作場面少的畫面場景采用較低的編碼速率,這樣可以留出更多的帶寬空間,而這些帶寬會在出現(xiàn)快速運動的畫面場景時被利用。這樣在保證了靜止畫面質(zhì)量的前提下,大幅地提高了運動圖像的畫面質(zhì)量,從而圖像

32、質(zhì)量和文件大小之間就達(dá)到了微妙的平衡</p><p>  WMV格式:一種獨立于編碼方式的在Internet上實時傳播多媒體的技術(shù)標(biāo)準(zhǔn),Microsoft公司希望用其取代QuickTime之類的技術(shù)標(biāo)準(zhǔn)以及WAV、AVI之類的文件擴(kuò)展名。WMV的主要優(yōu)點在于:可擴(kuò)充的媒體類型、本地或網(wǎng)絡(luò)回放、可伸縮的媒體類型、流的優(yōu)先級化、多語言支持、擴(kuò)展性等。</p><p>  WMA格式:WMA的全

33、稱是Windows Media Audio,是微軟力推的一種音頻格式。WMA格式是以減少數(shù)據(jù)流量但保持音質(zhì)的方法來達(dá)到更高的壓縮率目的,其壓縮率一般可以達(dá)到1:18,生成的文件大小只有相應(yīng)MP3文件的一半。這對只裝配32M的機(jī)型來說是相當(dāng)重要的,支持了WMA和RA格式,意味著32M的空間在無形中擴(kuò)大了2倍。此外,WMA還可以通過DRM(Digital Rights Management)方案加入防止拷貝,或者加入限制播放時間和播放次數(shù),

34、甚至是播放機(jī)器的限制,可有力地防止盜版。</p><p>  MP3格式: MP3具有不錯的壓縮比,使用LAME編碼的中高碼率的mp3,聽感上已經(jīng)非常接近源WAV文件。使用合適的參數(shù),LAME編碼的MP3很適合于音樂欣賞。由于MP3推出年代已久,加之不錯的音質(zhì)及壓縮比,不少游戲也使用mp3作事件音效和背景音樂。幾乎所有著名的音頻編輯軟件也提供了對MP3的支持,可以將mp3像wav一樣使用,但由于mp3編碼是有損的

35、,因此多次編輯后,音質(zhì)會急劇下降,mp3并不適合保存素材,但作為作品的demo確實相當(dāng)優(yōu)秀的。mp3長遠(yuǎn)的歷史和不錯的音質(zhì),使之成為應(yīng)用最廣的有損編碼之一,網(wǎng)絡(luò)上可以找到大量的mp3資源,mp3player日漸成為一種時尚。不少VCD Player、DVD Player甚至手機(jī)都可以播放mp3,mp3是被支持的最好的編碼之一。MP3也并非完美,在較低碼率下表現(xiàn)不好。MP3也具有流媒體的基本特征,可以做到在線播放。 其音質(zhì)好,壓縮比比較高

36、,被大量軟件和硬件支持,應(yīng)用廣泛。適用于比較高要求的音樂欣賞。</p><p>  相關(guān)技術(shù)及開發(fā)工具介紹</p><p>  本系統(tǒng)采用面向?qū)ο蟮能浖_發(fā)辦法,以Microsoft公司的可視化集成開發(fā)環(huán)境 Visual Studio .Net 作為開發(fā)平臺,以C#作為開發(fā)語言實現(xiàn)預(yù)定的需求功能。</p><p>  Visual Studio .Net集成開發(fā)環(huán)境

37、簡介</p><p>  .Net是 Microsoft XML Web services 平臺。.Net 平臺為創(chuàng)建新一代分布式Web應(yīng)用提供了所有的工具和技術(shù)(表示技術(shù)、構(gòu)件技術(shù)和數(shù)據(jù)庫技術(shù))。它支持標(biāo)準(zhǔn)的Internet協(xié)議,包括HTTP協(xié)議、XML(可擴(kuò)展標(biāo)記語言)和SOAP(簡單對象訪問協(xié)議),從而實現(xiàn)了異構(gòu)系統(tǒng)間應(yīng)用程序的集成和通信。.Net 平臺包括5個主要部分:</p><p&

38、gt;  Windows .Net</p><p>  .Net企業(yè)級服務(wù)器</p><p>  .Net Web服務(wù)構(gòu)件</p><p>  .Net Framework</p><p>  Visual Studio .Net</p><p>  Visual Studio .Net 是為建立基于.Net Fram

39、ework應(yīng)用程序而設(shè)的一個可視化集成開發(fā)環(huán)境(Integrated Development Enviroment,IDE)。它提供了更優(yōu)秀的多種編譯語言的編輯和編譯統(tǒng)一的開發(fā)平臺,他是一個快速開發(fā)企業(yè)級Web應(yīng)用程序以及高性能桌面應(yīng)用的工具。它為所有的編程語言提供了簡單統(tǒng)一的代碼編輯器,包括XML編輯器、HTML編輯器、SQL Server接口、以圖形化的方法設(shè)計服務(wù)器構(gòu)件的設(shè)計器、監(jiān)控遠(yuǎn)程機(jī)器的Server Explorer??梢哉f

40、,VisualStdio .Net集中了建立分布式應(yīng)用所需的功能。使用此集成開發(fā)工具而不是用SDK編輯C#程序有以下主要原因:</p><p>  IDE支持首行縮進(jìn),切c#程序的關(guān)鍵字等可用不同的顏色直觀表示,以便檢查。</p><p>  IDE的語法導(dǎo)航功能可實現(xiàn)動態(tài)查找、提示編輯工程中的錯誤。</p><p>  便于開發(fā)Windows應(yīng)用程序??梢韵馰is

41、ual Basic一樣直接拖放控件來“繪制”Windows窗體。</p><p>  結(jié)合我要編寫的程序播放器可知使用此集成開發(fā)環(huán)境更方便高效。</p><p><b>  C#語言簡介</b></p><p>  C#是一種現(xiàn)代的、面向?qū)ο蟮恼Z言,它結(jié)合了C/C++和Visual C++的強(qiáng)大功能以及Visual Basic 的簡單易用性。C

42、#有以下新特性:</p><p>  簡單。C#做了些該進(jìn),使語言更簡單。</p><p>  面向?qū)ο蟆#支持面向?qū)ο蟮娜N編程原則:封裝、繼承和多態(tài)。</p><p>  類型安全。C#去掉了指針,從根本上保證了程序的穩(wěn)定性和類型安全。</p><p>  版本控制。C#實現(xiàn)了版本技術(shù),避免了“DLL災(zāi)難”。</p>&l

43、t;p>  兼容性。C#允許在遵守.Net Framework CLS 的條件下訪問不同的API,可以與Windows的幾種傳統(tǒng)服務(wù)交互。</p><p>  靈活性。C#允許聲明一些不安全的方法和類,從而使用指針、結(jié)構(gòu)和靜態(tài)數(shù)組。</p><p>  總之,C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的,由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言。它在繼承C和C++強(qiáng)大功能的同時去掉了一些

44、它們的復(fù)雜特性(例如沒有宏和模版,不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。</p><p>  DirectX SDK 9.0簡介</p><p>  Direct X其實是微軟公司推出的一個為Windows平臺的多媒體API函數(shù)庫,它提供標(biāo)準(zhǔn)接口來與顯卡和

45、聲卡、輸入設(shè)備等進(jìn)行交互。它可以讓windows為平臺的游戲或多媒體程序獲得更高的執(zhí)行效率,加強(qiáng)3d圖形和聲音效果,并提供設(shè)計人員一個共同的硬件驅(qū)動標(biāo)準(zhǔn),讓游戲開發(fā)者不必為每一品牌的硬件來寫不同的驅(qū)動程序,也降低用戶安裝及設(shè)置硬件的復(fù)雜度。如果沒有這組標(biāo)準(zhǔn)API函數(shù)庫,那你就需要為每一種顯卡、聲卡的每個組合和每種類型的鍵盤、鼠標(biāo)和游戲桿編寫不同的代碼。DirectX從具體的硬件中抽象出來,并且將一組通用指令轉(zhuǎn)換成硬件的具體命令。這樣開發(fā)

46、語言通過調(diào)用統(tǒng)一標(biāo)準(zhǔn)的Direct X函數(shù)庫就可以操作每一種顯卡、聲卡的每個組合和每種類型的鍵盤、鼠標(biāo)和游戲桿等多媒體了。</p><p>  Direct X SDK 9.0安裝及類庫介紹:.net Framework SDK中并沒有包含Direct X SDK,所以為了順利的完成本文后面介紹,必須先下載、安裝Direct X SDK。安裝完Direct X后,就會在存在"C:\WINDOWS\Mic

47、rosoft.NET\Managed DirectX"這樣一個目錄,此目錄中目錄中應(yīng)該有九個DLL文件和九個XML文件。九個DLL文件大致對應(yīng)于DirectX中的十個命名空間。編程中就是使用其中的命名空間來提供對輸入設(shè)備、聲音、網(wǎng)絡(luò)播放、圖形等的支持。而開發(fā)本播放器的程序中只使用了命名空間“Microsoft.DirectX.AudioVideoPlayback”和“Microsoft.DirectX.DirectSound”

48、。Microsoft.DirectX.AudioVideoPlayback命名空間主要就是支持播放音頻和視頻文件。Microsoft.DirectX.AudioVideoPlayback命名空間中定義了三個類:"Audio"、"Video"和"TextureRenderEventArgs"。其中前兩個類是最</p><p>  下表就是本程序使用的Mic

49、rosoft.DirectX.AudioVideoPlayback命名空間中定義的屬性及其具體的作用:</p><p><b>  表一</b></p><p>  下表是本程序使用的Microsoft.DirectX.AudioVideoPlayback命名空間中定義的方法及其具體的作用:</p><p><b>  表二</

50、b></p><p>  Microsoft.DirectX.DirectSound命名空間主要提供對聲音的支持。在這個命名空間中我們只使用了SecondaryBuffer 類,此類包含用于管理起支持作用的聲音緩沖器的方法和屬性。</p><p>  了解了以上和本程序有關(guān)的基礎(chǔ)知識及開發(fā)本程序鎖使用的有關(guān)技術(shù)后,下面開始介紹本程序的具體功能和實現(xiàn)方法。第二章 總體功能設(shè)計與實現(xiàn)&l

51、t;/p><p>  在第一章中分析了播放器的功能需求及常見的視頻音頻編碼格式,還有編寫本程序使用的技術(shù)、工具等。那么從本章開始介紹本程序的功能設(shè)計與實現(xiàn),本文將使用第一章中的技術(shù)等從功能設(shè)計、功能實現(xiàn)兩方面重點介紹。</p><p><b>  2.1 功能設(shè)計</b></p><p>  參考上一章中介紹的播放器的功能,對其功能進(jìn)行整理篩選,去

52、掉那些華而不實或基本無用的功能,保留最實用最常用的功能,整合編寫成本播放器。下面開始主要介紹本播放器的功能設(shè)計及描述、功能模塊圖等。</p><p>  2.1.1 功能設(shè)計及描述</p><p>  本播放器的主要任務(wù)和目的是播放一些常見的音頻視頻格式文件,達(dá)到功能簡潔方便,消耗資源少而又不影響日常娛樂的需求。其主要劃分為下面六個功能模塊,每個功能模塊的作用描述如下:</p>

53、<p>  文件控制;主要用于打開播放文件,本程序支持的格式主要是rmvb、rm、avi、mpeg(mpg)、wmv視頻格式和MP3、wma、wav音頻格式,還有管理播放列表:建立或刪除播放列表。</p><p>  播放控制;控制視頻或音頻的播放狀態(tài)。播放狀態(tài)有播放、暫停、停止三種狀態(tài)。還有切換視頻(音頻),就是播放當(dāng)前視頻(音頻)的前一個視頻(音頻)或后一個視頻(音頻)。播放過的視頻(音頻)按播

54、放順序自動顯示在當(dāng)前默認(rèn)的播放列表中,默認(rèn)的播放列表對播放過的記錄不進(jìn)行保存,就是在關(guān)閉、重啟播放器后以前的播放記錄被清空。</p><p>  進(jìn)度控制;顯示當(dāng)前視頻(音頻)的總長度和已播放的長度,可以使用鼠標(biāo)拖放進(jìn)度條,跳躍式快速播放。顯示是通過時間和進(jìn)度條兩方面同步顯示的。</p><p>  聲音控制;調(diào)整音量的大小,顯示是否靜音;調(diào)整聲音的聲道為左聲道、右聲道或正常。</p

55、><p>  顯示控制;若播放的是視頻文件則顯示圖像,可以調(diào)整屏幕是否為全屏,是否鋪滿屏幕或按原始比例播放,也可以使用鼠標(biāo)拖動調(diào)整屏幕大小,本播放器對屏幕有最小范圍規(guī)定(非最小化),就是小到一定程度時屏幕不能再縮小。最大屏幕為最大化(全屏除外)。</p><p>  系統(tǒng)說明;關(guān)于(about)說明,提示說明本播放器的一些信息,比如播放器能播放的格式,播放器的開發(fā)人開發(fā)時間等。</p&g

56、t;<p>  2.1.2 功能模塊圖</p><p>  其具體功能模塊圖如下:</p><p><b>  2.2 功能實現(xiàn)</b></p><p>  2.2.1 主界面實現(xiàn)</p><p>  本節(jié)主要講述如何根據(jù)上述的功能模塊圖實現(xiàn)具體的功能。</p><p>  下圖一為

57、本播放器的原始界面,由Visual Studio中已安裝模板Windows 應(yīng)用窗體程序(winform)生成,所用的控件、組件、容器、菜單、工具欄、對話框等都是有Winform提供(如果所要使用的控件等沒有提供,則需個人編寫)。其中圖片可以自己繪制,組件、控件等可用自己編寫代碼做成最適合自己要求的,這樣做出來的東西色彩比較統(tǒng)一,界面比較美觀大方,但那樣做相當(dāng)?shù)穆闊?,特別是編寫新的組件、控件等有很多困難。編寫本程序由于時間有限,圖片是下

58、載的,所以在美觀上有所欠缺。以后如有時間,另行繪制。由于界面是控件、組件等拖放組成,大部分代碼有窗體設(shè)計器自動生成,需個人改動的并不多,所用這部分就不詳細(xì)說明了,只把主窗體MainForm的代碼示下。</p><p><b>  圖一</b></p><p>  // MainForm</p><p>  this.AutoScaleDimen

59、sions = new System.Drawing.SizeF(6F, 12F);</p><p>  this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;</p><p>  this.BackColor = System.Drawing.Color.Black;</p><p>  this

60、.ClientSize = new System.Drawing.Size(555, 373);</p><p>  this.Controls.Add(this.playListBox);</p><p>  this.Controls.Add(this.controlPanel);</p><p>  this.Controls.Add(this.playScr

61、een);</p><p>  this.Controls.Add(this.menuStrip);</p><p>  this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));</p><p>  this.MainMenuStrip = this.menuS

62、trip;</p><p>  this.MinimumSize = new System.Drawing.Size(560, 389);</p><p>  this.Name = "MainForm";</p><p>  this.Text = "久久影音";</p><p>  this.Res

63、ize += new System.EventHandler(this.MainFormResize);</p><p>  this.menuStrip.ResumeLayout(false);</p><p>  this.menuStrip.PerformLayout();</p><p>  this.controlPanel.ResumeLayout(fa

64、lse);</p><p>  this.controlPanel.PerformLayout();</p><p>  ((System.ComponentModel.ISupportInitialize)(this.pauseButton)).EndInit(); ((System.ComponentModel.ISupportInitialize)

65、(this.pictureBoxCenter)).EndInit();</p><p>  ((System.ComponentModel.ISupportInitialize)(this.pictureBoxRight)).EndInit();</p><p>  ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLef

66、t)).EndInit();</p><p>  ((System.ComponentModel.ISupportInitialize)(this.pictureBoxFill)).EndInit();</p><p>  ((System.ComponentModel.ISupportInitialize)(this.movieTrack)).EndInit();</p>

67、<p>  this.ResumeLayout(false);</p><p>  this.PerformLayout();</p><p>  2.2.2 文件控制的實現(xiàn)</p><p>  打開文件的功能是許多應(yīng)用程序的一個常見任務(wù)。Windows Forms命名空間包含了一組常用對話框,支持這些類型的活動。在本程序中我們使用的是OpenFileDi

68、alog類,OpenFileDialog類表示常用的文件對話框,用于從磁盤上加載一個或多個文件,是用于打開現(xiàn)有文件的標(biāo)準(zhǔn)類。Filter屬性定義了這個對話框可用看到的文件類型列表,本程序中它來顯示可用播放的文件列表。部分實現(xiàn)代碼如下:</p><p>  OpenFileDialog dlg = new OpenFileDialog();</p><p>  dlg.Filter = &q

69、uot;Movies (*.avi, *.mpg(mpeg), *.wmv,*.rmvb,*.rm,*.mp3,*.wma) |*.avi;*.mpg;*.wmv;*.rmvb;*.rm;*.mp3;*.wma|All files (*.*)|*.*";</p><p>  dlg.InitialDirectory = "C:\\\\";</p><p>  

70、dlg.RestoreDirectory = false;</p><p>  dlg.Title = "打開";</p><p>  if (dlg.ShowDialog() == DialogResult.OK)</p><p><b>  {</b></p><p>  //如果存在已播放的Vi

71、deo,釋放它</p><p>  if(MyVideo != null )</p><p>  MyVideo.Dispose();</p><p>  PlayTheMovie(dlg.FileName);</p><p><b>  }</b></p><p>  Windows窗體List

72、View 控件顯示了帶圖標(biāo)的項的列表??墒褂昧斜硪晥D創(chuàng)建類似于 Windows 資源管理器右窗格的用戶界面。該控件有四種視圖模式,“LargeIcon”、“SmallIcon”、“List”和“Details”。本播放器的播放列表就是使用ListView控件建立,使用的是列表視圖模式(List模式)顯示小圖標(biāo),總是顯示在單列中。見下圖二。</p><p>  當(dāng)播放視頻(音頻)時,視頻(音頻)會自動顯示在默認(rèn)的播

73、放列表中,代碼如下,這行代碼出現(xiàn)在播放函數(shù)中:</p><p>  playListView.Items.Add(theMovieName);</p><p>  創(chuàng)建播放列表其實就是創(chuàng)建一個包含想要播放的視頻(音頻)名稱的文件,然后在這個文件中添加或刪除視頻(音頻),這里使用的是File類中Create方法。其部分代碼如下:</p><p>  string pa

74、th = @"c:\久久影音\MyPlayList.txt";</p><p>  if (File.Exists(path))</p><p>  File.Delete(path);</p><p>  using (FileStream fs = File.Create(path))</p><p>  Byte[]

75、 info = new UTF8Encoding(true).GetBytes("This is some text in the file.");</p><p><b>  圖二</b></p><p>  2.2.3 播放控制的實現(xiàn)</p><p>  播放才是一個播放器最重要的功能。由上章可知Microsoft.Di

76、rectX.AudioVideoPlayback命名空間中定義的屬性和方法為這塊功能的實現(xiàn)提供了很大的便利,比如播放、暫停、停止函數(shù)都有提供,詳見上一章表一表二。但是在調(diào)用這些函數(shù)之前還有很多工作需要做。參照下面播放函數(shù)PlayTheMovie(string theMovie)部分代碼進(jìn)行分析:</p><p>  string theMovieName = theMoive;</p><p&

77、gt;  initialClientWidth = this.ClientSize.Width; //獲取窗體工作區(qū)的寬度</p><p>  VideoDefaultSize = MyVideo.DefaultSize; //獲取Video的缺省的視頻大小</p><p>  int width = Math.Max(VideoDefaultSize.Width, initialCl

78、ientWidth); //獲取Video的缺省的寬度和窗體工作區(qū)的寬度較大的一個值</p><p>  int height = VideoDefaultSize.Height; //獲取 Video 的缺省的高度</p><p>  //重新設(shè)置播放視頻的視頻大小</p><p>  if (width >= 800) </p><p&

79、gt;<b>  {</b></p><p>  width = (int)(width * 0.55f);</p><p>  height = (int)(height * 0.55f);</p><p><b>  }</b></p><p>  this.ClientSize = new S

80、ize(width, height + menuStrip.Height + controlPanel.Height);</p><p>  MyVideo.Owner = this.playScreen;</p><p>  上面的代碼其實就是重新設(shè)置視頻和初始播放窗口的大小。剛啟動播放器時播放窗口(整個播放器界面)是固定大小的(見圖一),但加載視頻以后,播放窗口的大小被設(shè)置為和視頻的缺

81、省值(MyVideo.DefaultSize)一樣。經(jīng)過DirectX解碼后的視頻缺省和播放窗口(Owner)的大小并不一樣大,有的比播放窗口小,大部分比播放窗口大,甚至比播放窗口大的多,這時需要對視頻大小進(jìn)行調(diào)整,按正常比例縮放適應(yīng)在設(shè)置好的播放窗口。</p><p>  在本程序中,當(dāng)加載視頻后,獲取視頻缺省值的大?。▽捄透撸┖筒シ糯翱诘膶挾?,然后比較并獲取視頻缺省的寬度和播放窗口寬度中較大的一個(width

82、),大部分情況下是視頻的缺省寬度比較大,再把播放窗口的大小初始化為視頻缺省高度(height)和width的0.55倍。這個倍率比較合適,使播放屏幕不至太大或太小。見圖二、圖三。</p><p>  有了合適的播放屏幕還不完整,因為此時播放屏幕還不能任意調(diào)整大小,視頻也不一定顯示在播放屏幕的中間。下面的mainFormResize事件調(diào)用就是解決這個問題的,詳見顯示控制模塊中屏幕調(diào)整功能實現(xiàn)。下面這幾行代碼的作用

83、就是在上面設(shè)置好的播放窗口中把視頻顯示在播放屏幕的中間,并在播放器的頂端顯示視頻的名稱及視頻格式。見圖二、圖三、圖四的頂端顯示。</p><p>  If (playListView.Visible == true)</p><p>  mainFormResize(null, null);</p><p><b>  else</b><

84、/p><p>  MainFormResize(null, null);</p><p>  int LastIndex = theMovieName.LastIndexOf(@”\”);</p><p>  theMovieName = theMovieName.Substring(LastIndex + 1, (theMovieName.Length – LastI

85、ndex – 1));</p><p>  this.Text = theMovieName;</p><p>  在播放視頻(音頻)過程中,我們都期望能看到視頻的總長度以及已經(jīng)播放的長度。本程序中我們是使用movieTimer組件計時的。視頻的總長度是死的,我們只需調(diào)用Video的屬性Duration即可知道視頻的總長度,然后把其轉(zhuǎn)換為string格式顯示即可。見圖二。代碼如下:<

86、/p><p>  //顯示視頻的總長度(總時間)</p><p>  MovieDuration = (int)MyVideo.Duration;</p><p>  hours = MovieDuration / 3600;</p><p>  minutes = (MovieDuration - hours * 3600) / 60;<

87、/p><p>  seconds = (MovieDuration - hours * 3600 - minutes * 60);</p><p>  string hHour = ("00" + hours.ToString());</p><p>  hHour = hHour.Substring(hHour.Length -2, 2);<

88、/p><p>  string mMinute = ("00" + minutes.ToString());</p><p>  mMinute = mMinute.Substring(mMinute.Length - 2, 2);</p><p>  string sSecond = ("00" + seconds.ToStri

89、ng());</p><p>  sSecond = sSecond.Substring(sSecond.Length - 2, 2);</p><p>  movieDuration = hHour + ":" + mMinute + ":" + sSecond;</p><p>  totalTime.Text = &qu

90、ot;/" + movieDuration;</p><p>  MyVideo.Play();</p><p>  movieTimerEnabled = true;</p><p>  movieTimer.Start();</p><p>  movieTrack.Value = 0;</p><p>

91、  pauseButton.Visible = false;</p><p>  playListView.Items.Add(theMovieName);</p><p>  上面幾行代碼則是調(diào)用函數(shù),開始播放、計時,進(jìn)度條開始移動,并把視頻名稱添加到播放列表里。</p><p>  視頻的總長度很好計算、顯示,但是視頻當(dāng)前長的需要另行計算。視頻當(dāng)前長度的計算、顯

92、示和總長度的計算、顯示很相似,只是調(diào)用的屬性不同而已。這里我們調(diào)用的是CurrentPosition屬性,此屬性是用來獲取活設(shè)置播放的當(dāng)前位置。另外視頻的當(dāng)前長度和進(jìn)度條也是同步顯示,這部分功能則需要另外算法。先獲取視頻的總長度;然后獲取視頻的總長部和進(jìn)度條長度(movieTrack.Maximum)的比值,表示進(jìn)度條單位長度上的視頻長度;再用當(dāng)前視頻長度比上這個比值就得到當(dāng)前視頻長度對應(yīng)的進(jìn)度條長度,把其賦值給Value顯示出即可。分

93、代碼如下:</p><p>  float calibrationTime;</p><p>  MovieDuration = (int)MyVideo.Duration;</p><p>  calibrationTime = (float)((float)MovieDuration / (float)movieTrack.Maximum);</p>

94、<p>  MovieCurrentPosition = (int)MyVideo.CurrentPosition;</p><p>  movieTrack.Value = (int)(MovieCurrentPosition / calibrationTime);</p><p>  至于播放、暫停、停止功能則很容易實現(xiàn),這些功能實現(xiàn)所使用的函數(shù)在Microsoft.Di

95、rectX.AudioVideoPlayback 命名空間中都有提供,詳細(xì)情況請參看上一章。</p><p>  在本程序中,這三個功能分別有三個按鈕,其中播放、暫停按鈕是重疊在一起的,當(dāng)視頻處在其中一個狀態(tài)時,另一個狀態(tài)的按鈕就隱藏不顯示。見圖二、圖三下面按鈕區(qū)。這三個功能分別是使用三個Button事件實現(xiàn)的:對于播放、暫停功能先判斷視頻是否為空,為空則各功能按鈕不可交互(Enabled;鼠標(biāo)點擊無反應(yīng)),不為

96、空時若點擊暫停按鈕時,觸發(fā)播放事件,終止暫停開始播放,顯示播放按鈕標(biāo)志,若點擊播放按鈕時觸發(fā)暫停事件終止暫停開始暫停,顯示暫停按鈕;對于停止功能則先判斷視頻是否為空,為空各功能按鈕不可交互,不為空則判斷視頻是否處于停止?fàn)顟B(tài),若停止?fàn)顟B(tài)(Stopped)停止按鈕不可交互,非停止?fàn)顟B(tài)才可點擊停止按鈕,觸發(fā)停止事件,調(diào)用停止函數(shù)(Stop())。</p><p>  這部分功能在菜單項中“播放”的下拉菜單中也有實現(xiàn),實

97、現(xiàn)方式很相似,只是播放、暫停功能實現(xiàn)多了一道步驟:先判斷視頻的狀態(tài),播放(Playing)還是暫停(Paused)狀態(tài),然后才是根據(jù)不同狀態(tài)調(diào)用不同函數(shù)。這部分功能亦設(shè)有快捷鍵,暫停/播放的快捷鍵是Alt+空格鍵,停止的快捷鍵是Ctrl+S。</p><p>  下面只舉一個暫停功能實現(xiàn)的代碼例子(這是點擊播放按鈕時執(zhí)行的代碼),其部分代碼如下:</p><p>  if (MyVideo

98、 != null)</p><p><b>  {</b></p><p>  pauseButton.Enabled = true;</p><p>  playButton.Enabled = false;</p><p>  MyVideo.Pause();</p><p>  pauseB

99、utton.Visible = true;</p><p>  playButton.Visible = false;</p><p><b>  }</b></p><p>  至于實現(xiàn)播放當(dāng)前視頻的上一個下一個視頻已不難。先判斷當(dāng)前視頻在其所在的播放列表里是否第一個或最后一個,若是第一個則不能播放其上一個,若是最后一個則不能播放其下一個,否

100、則把當(dāng)前視頻的上一個或下一個視頻名稱作為參數(shù)傳給播放函數(shù)PlayTheMovie。這部分實現(xiàn)比較方便,代碼就不再累述。</p><p>  2.2.4 進(jìn)度控制的實現(xiàn)</p><p>  進(jìn)度控制的實現(xiàn)其實在上節(jié)就略有提及,其實就是把進(jìn)度條和當(dāng)前播放長度同步結(jié)合起來,并能使用鼠標(biāo)隨意拖放進(jìn)度條進(jìn)行選擇性播放。這里選擇使用了Windows Forms提供的TrackBar控件實現(xiàn)這個功能。&

101、lt;/p><p>  TrackBar是可滾動控件,可以通過以下方式配置跟蹤條的 Value 屬性值滾動的范圍:通過設(shè)置 Minimum 屬性指定該范圍的下限,設(shè)置 Maximum 屬性指定該范圍的上限。本程序?qū)inimum的值設(shè)為默認(rèn)值0,Maximum的值設(shè)為10000。其事件ValueChanged在跟蹤條的 Value 屬性由于滾動框的移動或者由于代碼中的操作而更改時發(fā)生。</p><

102、p>  而本程序中就是通過改變Value的值實現(xiàn)進(jìn)度條和當(dāng)前播放時間的同步,代碼見上節(jié)最后部分。當(dāng)鼠標(biāo)拖動進(jìn)度條時也就是跟蹤條的Value屬性值發(fā)生變化,此時事件ValueChanged發(fā)生。在實現(xiàn)這個功能時還需用到Microsoft.DirectX.AudioVideoPlayback中Video類的SeekCurrentPosition屬性。這個屬性實現(xiàn)從指定位置播放的功能,其有兩個參數(shù),一是位置,二是尋址方式。位置是浮點型的

103、,注意這里以 10000000 之一秒為單位,所以以秒為單位需要乘以 10000000。代碼和上節(jié)最后部分的代碼很相似,只不過當(dāng)事件ValueChanged發(fā)生時才執(zhí)行。參看圖二,圖三進(jìn)度條。其部分代碼如下:</p><p>  float calibrationTime;</p><p>  MovieDuration = (int)MyVideo.Duration;</p>

104、<p>  calibrationTime = (float)((float)MovieDuration / (float)movieTrack.Maximum);</p><p>  MovieCurrentPosition = (int)MyVideo.CurrentPosition;</p><p>  movieTrack.Value = (int)(MovieCur

105、rentPosition / calibrationTime);</p><p>  MyVideo.SeekCurrentPosition(MyVideo.CurrentPositon * 10000000, SeekPositionFlags.AbsolutePositioning)</p><p><b>  圖三</b></p><p>

106、;  2.2.5 聲音控制</p><p>  Video類中還有個屬性Audio,專門用來控制音頻的(其實就是前面提到的Audio類),控制音量就用它了。微軟對音量的設(shè)置比較古怪,其取值范圍是 -10000~0。如果音量控件的取值是0~100,那么可以使用此公式:value * 100 – 10000,控件最大值100對于音量的最大值0,控件最小值0對于音量最小值-10000。即靜音狀態(tài)下(快捷鍵設(shè)為Alt+M

107、)設(shè)置音量為0,代碼如下:</p><p>  MyVideo.Audio.Volume = -10000;</p><p>  當(dāng)放大或縮小音量時則觸發(fā)相應(yīng)的時間,本程序中對音量控件的取值范圍也是-10000~0,這樣不用使用公式,編寫代碼更方便些,機(jī)器執(zhí)行時也少了一道步驟。為了防止溢出(音量不能大于0或小于-10000),所以需要加控制條件。以放大音量為例,控制條件為:MyVideo.

108、Audio.Volume <= -100 && movieSound <= 0,因為每次音量的增大量為100,所以音量的起始量必須小于-100時才能增加;還有音量必須小于等于音量的最大值0。放大音量的快捷鍵為Ctrl+up鍵,縮小為Ctrl+domn鍵。下面是放大音量時觸發(fā)的事件的部分代碼,縮小音量是個相反的過程,代碼也非常相似,就不累述了。</p><p>  int movieSo

109、und = -10000;</p><p>  if (MyVideo != null)</p><p><b>  {</b></p><p>  if (MyVideo.Audio.Volume <= -100 && movieSound <= 0)</p><p><b>  

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論