版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 基于Android的視頻播放器的設計與實現(xiàn)</p><p> 中 文 摘 要</p><p> 如今,隨著基于Android操作系統(tǒng)的智能手機的廣泛應用,視頻播放器已成為智能手機的一個必不可少的程序,廣大用戶迫切需要一個貼近用戶、方便用戶、個性化的視頻播放器。因此,設計一個基于android手機的多功能播放器,具有重要的實際意義。</p>&l
2、t;p> 本次畢業(yè)設計主要使用JDK + Eclipse + Android-SDK-Windows工具進行開發(fā),使用的編程語言是Java語言。該程序主要由4個不同Activity來實現(xiàn),每個Activity實現(xiàn)相應的功能模塊,能夠有效滿足Android手機用戶在視頻播放中的常見需求。</p><p> 本論文詳細介紹了播放器程序的設計思路、設計方案、系統(tǒng)結(jié)構(gòu)和項目工程結(jié)構(gòu),對系統(tǒng)的可行性與需求性進行了
3、詳細的分析,闡述了系統(tǒng)各個模塊功能的設計與實現(xiàn)。對程序主要的Activity都進行了詳細的介紹和分析,包括對其使用的布局文件的具體介紹,以及各個控件的作用。在最后進行了程序測試,對每一個實現(xiàn)的模塊功能都做了測試,并且記錄了大量截圖用來展示測試結(jié)果,以觀察程序應有的功能是否正常運行,以及發(fā)現(xiàn)程序中可能存在的問題。所開發(fā)的程序界面比較友好,操作相對容易,達到設計要求。</p><p> 關(guān)鍵詞:安卓;視頻播放;Ac
4、tivity;Mediaplayer</p><p> The Design and Implementation of Video Player Based on Android</p><p><b> ABSTRACT</b></p><p> Now, with the wide application of smart phon
5、e based on the Android operating system, video player has become the essential application of smart phone. Most of consumers urgently require a personalized video player which is close to user and facilitate user. Theref
6、ore, the design of a multifunctional player based on android mobile phones has an important practical significance.</p><p> The project design is developed by using JDK, Eclipse, and Android-SDK-Windows too
7、ls. The programming language is Java. The program consists of four different Activities and each Activity achieves the corresponding functional modules which can effectively satisfy the common requirements for playing vi
8、deo on Android mobile phones.</p><p> This paper introduced the design ideas, design scheme, system architecture and project engineering structures of video player. The feasibility and requirements of syste
9、m were analyzed in detail. The system function and each module were explained. The main Activity of the program are described and analyzed in detail including the using layout file, as well as the role of each control. F
10、inally, I made the test for the program including the functions of each implemented modules. In order to observe</p><p> KEY WORDS: Android; Video Play; Activity; Mediaplayer</p><p><b>
11、目 錄</b></p><p><b> 中文摘要I</b></p><p> ABSTRACTII</p><p> 目 錄III</p><p><b> 第一章 緒論1</b></p><p> 1.1課題的來源及意義1&l
12、t;/p><p> 1.2 Android發(fā)展現(xiàn)狀及前景1</p><p> 1.3項目的主要工作和解決的問題2</p><p> 1.4系統(tǒng)設計的目標及基本思路3</p><p> 1.5論文組織結(jié)構(gòu)3</p><p> 第二章 Android視頻播放器相關(guān)技術(shù)介紹4</p><p
13、> 2.1 Android介紹4</p><p> 2.2 Android開發(fā)平臺及相關(guān)技術(shù)5</p><p> 2.2.1 Android-Windows開發(fā)環(huán)境5</p><p> 2.2.2 Mediaplayer視頻技術(shù)6</p><p> 2.2.3 Surface、SurfaceView、SurfaceHo
14、lder三者之間的關(guān)系9</p><p> 第三章 系統(tǒng)分析及系統(tǒng)結(jié)構(gòu)設計與實現(xiàn)11</p><p> 3.1系統(tǒng)分析11</p><p> 3.1.1系統(tǒng)可行性分析11</p><p> 3.1.2 系統(tǒng)需求分析11</p><p> 3.2系統(tǒng)結(jié)構(gòu)設計12</p><p&g
15、t;<b> 第四章 測試16</b></p><p> 4.1測試環(huán)境和條件16</p><p><b> 4.2測試16</b></p><p> 4.3測試結(jié)果分析24</p><p><b> 結(jié) 論25</b></p><
16、p><b> 參考文獻26</b></p><p><b> 附 錄28</b></p><p><b> 第一章 緒論</b></p><p> 1.1課題的來源及意義</p><p> 在這個信息化的時代, IT業(yè)已經(jīng)成為世界發(fā)展的主流,我們對信
17、息技術(shù)的依賴遠遠超過了對我們自己的依賴,計算機和手機已經(jīng)成為我們?nèi)粘I钪胁豢扇鄙俚墨@得信息的渠道。正因為如此,各種各樣的軟件層出不窮,我們的生活也因為各種各樣的軟件變的更有滋有味。不缺乏娛樂性,也不缺乏教育意義,讓我們從這些軟件中受益匪淺,使我們看到了相比以前的巨大進步。同時,隨著科技的發(fā)展,計算機越來越精致,手機也越來越智能化,所以我們的依賴性也越來越大,越來越離不開這些給我們提供日常信息的工具。手機也已不再僅僅是簡單的人與人通話的
18、工具,而是在很大程度上成為了我們獲取信息的一個更好的渠道。一個好的軟件,能夠標志一個手機品牌的地位。所以,開發(fā)一款好的手機軟件是相當必要的。以前我們看電影,看視頻,都要去電影院或者是影吧,而且時間有限,很不方便;而現(xiàn)在是在電腦上或者手機上看視頻,看小說,文檔等等。以此看來,一個好的手機視頻播放器軟件的開發(fā)是相當有必要的。</p><p> 作為集通訊與娛樂消費為一體的智能手機,播放器是其中一個必不可少的重要功能
19、,一個貼近用戶,方便用戶的多功能的播放器也是用戶所渴望的,更是開發(fā)人員應當致力于的。隨著Google推出的Android手機的不斷更新?lián)Q代,技術(shù)方面也日趨成熟,一個良好的視頻播放器的設計與實現(xiàn)已經(jīng)成為可能。</p><p> 目前,作為Android的手機用戶而言,都有視頻播放器的實體應用。但是,對于絕大多少而言,其界面單調(diào),功能單一。比如,界面與其他非智能的手機沒有大的區(qū)別,而功能上面,也就除了基本的播放控制
20、流程之外,多上一個視頻基本信息的顯示,同時加上一個對預設定路徑的播放列表的展示。因此,開發(fā)一款界面友好、炫麗、功能更多的視頻播放器,更好的貼近用戶,滿足用戶需求,其應用前景也是相當樂觀的。</p><p> 1.2 Android發(fā)展現(xiàn)狀及前景</p><p> Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設備,如智能手機和平板電腦,由Google公司
21、和開放手機聯(lián)盟領(lǐng)導及開發(fā)。Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發(fā)商及電信營運商組建開放手機聯(lián)盟共同研發(fā)改良Android系統(tǒng)。隨后Google以Apache開源許可證的授權(quán)方式,發(fā)布了Android的源代碼。第一部Android智能手機發(fā)布于2008年10月。Android逐漸擴展到平板電腦及其他領(lǐng)域上,如電視、
22、數(shù)碼相機、游戲機等。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。 2012年11月數(shù)據(jù)顯示,Android占據(jù)全球智能手機操作系統(tǒng)市場76%的份額,中國市場占有率為90%。由此可見,Android占有非??捎^的市場前景。</p><p> 具有開源特性的Android平臺打破了之前Symbian、Windows mobile等操作系統(tǒng)收取高額授權(quán)費用的模式,使得智能手機成本
23、大大的降低。而正是由于它開放源代碼,使得手機產(chǎn)生更多個性化的應用。同時,合作方能夠在這里得到利潤或者創(chuàng)造價值,手機軟件行業(yè)得到維護協(xié)調(diào)發(fā)展。以Google、蘋果和諾基亞為中心各自形成的生態(tài)鏈將以原來數(shù)倍的速度推動移動互聯(lián)網(wǎng)的發(fā)展,這正是Google發(fā)布Android平臺的意義,也是Android平臺存在的使命所在。作為Android平臺成員之一的中國移動也投資成立了一家通訊公司,專門從事G oogle手機軟件的應用以及本地化的軟件的開發(fā)
24、,比如將在Google手機平臺上添加飛信、 輸入法等一系列符合國內(nèi)用戶使用特色的功能。國內(nèi)眾多企業(yè)也將眼光投入到Android上面,并啟動了相關(guān)的計劃來深入的理解并發(fā)展Android。更多的手機軟件開發(fā)企業(yè)已經(jīng)或者籌備著將公司進行轉(zhuǎn)型,從其他方向的開發(fā)轉(zhuǎn)向到Android的開發(fā)。由此可見,無論是在國內(nèi)還是在國外,Android平臺對手機軟件行業(yè)和移動手機平臺 將發(fā)揮極大地推動作用,而在未來的幾年時間里,Android將越</p&g
25、t;<p> 目前國內(nèi)的Android開發(fā)還是主要以應用開發(fā)為主,主要分成3類:為企業(yè)開發(fā)應用、開發(fā)通用應用(放到Android Market或者其他App Market銷售)以及游戲開發(fā)(放到Android Market或者其他App Market銷售)。第一類開發(fā)者一般身處規(guī)模較大的公司,這些公司主要為自有品牌或者其他品牌設計手機或者平板電腦的總體方案。除了根據(jù)需求對系統(tǒng)進行定制外,更多的工作在于為這些系統(tǒng)編寫定制的
26、應用。第二類開發(fā)者,一般處于創(chuàng)業(yè)型公司或者是獨立開發(fā)者,他們的盈利方式主要是2種:為國外公司進行外包開發(fā),或者通過Google的移動廣告(AdMob)通過廣告點擊分成。而理論上的通過付費下載的形式來盈利的,現(xiàn)在國內(nèi)鮮見成功者。第三類開發(fā)者,目前和第二類開發(fā)者類似[3]。</p><p> 1.3項目的主要工作和解決的問題</p><p> 本課題的研究目的就是要通過對基于Android
27、的多功能視頻播放的系統(tǒng)設計與實現(xiàn),探討該系統(tǒng)的實現(xiàn)過程,以有效滿足Android手機用戶在視頻播放中常見的需求。本課題的主要內(nèi)容為:</p><p> (1)根據(jù)對Android手機視頻播放器功能的了解和分析,從功能和實用的角度出發(fā),設計并實現(xiàn)Android視頻播放器;</p><p> (2)對Android視頻播放器進行模塊劃分;</p><p> (3)
28、對各模塊分析并設計、實現(xiàn);</p><p> (4)從功能多樣性角度考慮,盡可能添加一些附加的設計方案并實現(xiàn)。</p><p> 1.4系統(tǒng)設計的目標及基本思路</p><p> 本次畢業(yè)設計使用Eclipse + ADT插件 + DDMS插件搭建的Android開發(fā)平臺環(huán)境,開發(fā)語言為Java語言。需要開發(fā)出基于Android平臺的視頻播放器應用程序,并能夠
29、在Android手機上運行。</p><p><b> 基本思路介紹如下:</b></p><p> 第一步:程序運行時進入主Activity,通過更新或查看文件列表,選擇一個視頻文件;</p><p> 第二步:讀入視頻文件,調(diào)用Mediaplayer.setDataSource()方法設置文件路徑,并通過Mediaplayer.pre
30、pare()方法將Mediaplayer對象置為準備狀態(tài);</p><p> 第三步:調(diào)用Mediaplayer.start()方法播放視頻,此時可以調(diào)節(jié)音量、進度,暫停播放,重置播放等等操作;</p><p> 第四步:播放完成后,Mediaplayer對象進入了PlaybackCompleted狀態(tài),此時可以選擇其他視頻文件進入下一個視頻的播放或者退出程序。</p>
31、<p><b> 1.5論文組織結(jié)構(gòu)</b></p><p> 本文主要由:中英文摘要、目錄、緒論、課題相關(guān)技術(shù)介紹、系統(tǒng)可行性分析、系統(tǒng)需求分析、程序?qū)崿F(xiàn)、測試、結(jié)束語、參考文獻、致謝語以及附錄構(gòu)成。</p><p> 第一章緒論主要分析和介紹背景、課題主要研究的問題以及系統(tǒng)設計的目標及基本思路。</p><p> 第二章主
32、要介紹課題的相關(guān)技術(shù)。</p><p> 第三章是系統(tǒng)分析以及系統(tǒng)功能的設計與實現(xiàn),其中包括系統(tǒng)可行性分析和系統(tǒng)需求分析。</p><p> 第四章是程序測試和結(jié)果的分析與研究等。</p><p> 最后對全文進行了總結(jié)和展望,附錄部分為主要功能的函數(shù)源代碼。</p><p> 第二章 Android視頻播放器相關(guān)技術(shù)介紹</p
33、><p> 2.1 Android介紹</p><p> Android是“機器人”的意思,是Google公司于2007年11月5日發(fā)布的一個機遇Linux平臺的開源手機操作系統(tǒng)。該系統(tǒng)由底向上一共分為了4層,如圖2-1。每一層對把底層實現(xiàn)封裝,并提供調(diào)用接口給上一層。 </p>
34、<p> 圖2-1 Android系統(tǒng)架構(gòu)</p><p> (1) Linux內(nèi)核(Linux Kernel)。Android運行在Linux Kernel2.6之上,但是把Linux內(nèi)核GNU協(xié)議約束的部分做了取代。這樣,運行在Android上的程序可以用于商業(yè)目的。Linux內(nèi)核是硬件和軟件層之間的抽象層。</p><p> (2) 中間件。中間件包括兩部分:核心
35、庫和運行時環(huán)境(Libraries & Android Runtime)。核心庫包括,SurfaceManager,顯示系統(tǒng)管理庫,負責把2D或3D內(nèi)容 顯示到屏幕;MediaFramework,媒體庫,負責支持圖像,支持多種視頻和音頻的錄制和回放;SQLite,數(shù)據(jù)庫,一個功能十分強大的輕量級嵌入式關(guān)系數(shù)據(jù)庫;WebKit瀏覽器引擎等。運行時環(huán)境主要包括一個Dalvik Virtual Machin,Dalvik虛擬機,區(qū)別于
36、Java虛擬機的是,每一個Android應用程序都在自己的進程中運行,都有一個屬于自己的Dalvik虛擬機,這一點可以讓系統(tǒng)在運行時可以達到優(yōu)化,程序間的影響大大降低。Dalvik虛擬機并非運行Java字節(jié)碼,而是運行自己的字節(jié)碼。</p><p> (3)應用程序框架。豐富而又可擴展性的視圖(View),可以用來構(gòu)建應用程序,它包括列表(List),網(wǎng)格(Grids),文本框(Textboxs),按鈕(But
37、ton),可嵌入的Web瀏覽器等。內(nèi)容提供者(Content Providers)使得應用程序可以訪問另一個應用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),或者共享他們各自的數(shù)據(jù)。資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和布局文件(LayoutFiles)。通知管理器(Notification Manager)使得應用程序可以在狀態(tài)欄中顯示自己定義的提示信息?;顒庸芾砥?Activity Manager
38、)用來管理應用程序的生命周期,并提供常用的導航回退功能。</p><p> (4)應用程序。Android系統(tǒng)會內(nèi)置一些應用程序包,包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理器等等。Android應用程序由強大的Java語言來編寫,也支持其他一些語言如C、Perl等。其中Java應用最為廣泛,其他語言已經(jīng)就看不到了[4]。</p><p> 2.2 Andr
39、oid開發(fā)平臺及相關(guān)技術(shù)</p><p> 2.2.1 Android-Windows開發(fā)環(huán)境</p><p> (1) JDK1.6.0_16:JDK(Java Development Kit)是Sun Microsystems針對Java開發(fā)員的產(chǎn)品。自從Java推出以來,JDK已經(jīng)成為使用最廣泛的Java SDK。JDK 是整個Java的核心,包括了Java運行環(huán)境、Java工具
40、和Java基礎類庫。SE(J2SE),standard edition,標準版,是我們通常用的一個版本,從JDK 5.0開始,改名為Java SE。EE(J2EE),enterprise edition,企業(yè)版,使用這種JDK開發(fā)J2EE應用程序,從JDK 5.0開始,改名為Java EE。ME(J2ME),micro edition,主要用于移動設備、嵌入式設備上的java應用程序,從JDK 5.0開始,改名為Java ME。沒有JD
41、K的話,無法編譯Java程序[10]。</p><p> (2) Eclipse-SDK-3.6.2-win32:Eclipse 是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse 附帶了一個標準的插件集,包括Java開發(fā)工具(Java Development Kit,JDK)[10]。</p><
42、p> (3) Android-SDK:SDK(software development kit)稱為軟件開發(fā)工具包。被軟件開發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應用軟件的開發(fā)工具的集合。因此,Android SDK 指的是Android專屬的軟件開發(fā)工具包。</p><p> (4) ADT_16:Android Development Tools--安卓開發(fā)工具。目前Andr
43、oid開發(fā)所用的開發(fā)工具是Eclipse,在Eclipse編譯IDE環(huán)境中,安裝ADT,為Android開發(fā)提供開發(fā)工具的升級或者變更,簡單理解為在Eclipse下開發(fā)工具的升級下載工具[2]。</p><p> (5) AVD:AVD的全稱為:Android Virtual Device,就是Android運行的虛擬設備,他是Android的模擬器識別。建立的Android要運行,必須創(chuàng)建AVD,每個AVD上
44、可以配置很多的運行項目。創(chuàng)建AVD的方法有兩種。一是通過eclipse 開發(fā)環(huán)境,二是通過命令行創(chuàng)建[5]。</p><p> 2.2.2 Mediaplayer視頻技術(shù)</p><p> 在Android系統(tǒng)中,最簡單、最常用的視頻技術(shù)是Mediaplayer接口 ,通過此接口可以播放指定的音頻和視頻文件,另外也可以通過VideoView來播放視頻,雖然VideoView比Media
45、player簡單易用,但定制性不如Mediaplayer,要視情況選擇。Mediaplayer播放音頻比較簡單,但是要播放視頻就需要SurfaceView。SurfaceView比普通的自定義View在繪圖上更有優(yōu)勢,它支持完全的OpenGL ES庫。</p><p> Mediaplayer能被用來控制音頻/視頻文件或流媒體的回放,可以在VideoView里找到關(guān)于如何使用這個類中的方法的例子。使用Media
46、player時限音頻和視頻播放的基本步驟,首先生成Mediaplayer對象,根據(jù)播放文件從不同的地方使用不同的生成方式;得到Mediaplayer對象后,根據(jù)實際需要調(diào)用不同的方法,如start()、stop()、pause()、release()等。需要注意的是,在不需要播放的時候要及時釋放掉與Mediaplayer對象相連接的播放文件[7]。</p><p> 圖2-2顯示了一個Mediaplayer對象
47、被支持的播放控制操作驅(qū)動的生命周期和狀態(tài)。橢圓標識代表Mediaplayer對象可能主流的狀態(tài)。由一個箭頭開始的弧線代表同步的方法調(diào)用,而以雙箭頭開頭的弧線代表異步調(diào)用方法。通過圖2-2可以知道一個Mediaplayer對象有如下狀態(tài)。</p><p> 當一個MediaPlayer對象被剛剛用new操作符創(chuàng)建或是調(diào)用了reset()方法后,它就處于Idle狀態(tài)。當調(diào)用了release()方法后,它就處于End
48、狀態(tài)。這兩種狀態(tài)之間的時間是MediaPlayer對象的生命周期。</p><p> 在一個新構(gòu)建的MediaPlayer對象和一個調(diào)用了reset()方法的MediaPlayer對象之間有個微笑但十分重要的差別。在Idle狀態(tài)時,調(diào)用getCurrentPosition()、getDuration()、getVideoHeight()、getVideoWidth()、setAudioStreamType(in
49、t)、setLooping(boolean)、setVolume(float,float)、pause()、start()、stop()、seekTo(int)、prepare()或者是prepareAsync()方法都是編程錯誤。當一個MediaPlayer對象處于剛被創(chuàng)建的時候,內(nèi)部的播放引擎和對象的狀態(tài)都沒有改變,在這個時候調(diào)用以上方法,框架將無法回調(diào)客戶端程序注冊的OnErrorListener.onError()方法;但若這個
50、MediaPlayer對象調(diào)用了reset()方法之后,再調(diào)用以上方法,內(nèi)部的播放引擎就會回調(diào)客戶端注冊的OnErrorListener.onError()方法,并將錯誤的狀態(tài)傳入。</p><p> 圖2-2 Mediaplayer對象狀態(tài)</p><p> 所以,一旦一個MediaPlayer對象不再被使用,應立即調(diào)用release()方法來釋放咋內(nèi)部的播放引擎中與這個MediaP
51、layer對象關(guān)聯(lián)的資源。資源可能包括如硬件加速組件的單態(tài)組件,若沒有調(diào)用release()方法可能會導致之后 dMediaPlayer對象實例無法使用這個單態(tài)硬件資源,從而運行失敗。一旦MediaPlayer對象進入了End狀態(tài),它不能再被使用,也沒有辦法遷移到其他狀態(tài)[8]。</p><p> 此外,使用new創(chuàng)建的MediaPlayer對象處于Idle狀態(tài),而那些通過重載的create()便利方法創(chuàng)建 的
52、MediaPlayer對象卻不是處于Idle狀態(tài)。事實上,如果成功調(diào)用了重載的create()方法,那么這些對象已經(jīng)是處于Prepare狀態(tài)了。</p><p> 在一般情況下,由于種種原因,一些播放控制操作可能會失敗,如不支持視頻格式,缺少隔行掃描,分辨率過高,流超時等等。因此,錯誤報告和回復在這種情況下是非常重要的。有時,由于編程的錯誤,在處于無效狀態(tài)的情況下調(diào)用了一個播放控制操作可能發(fā)生。在所有可能的錯誤
53、條件下,內(nèi)部的播放器引擎會自動的調(diào)用一個由程序自身所提供的OnErrorListener.onError()方法。程序可以通過調(diào)用Mediaplayer.setOnErrorListener()方法來注冊OnErrorListener。如一旦發(fā)生錯誤,MediaPlayer對象會進入到Error狀態(tài)。為了重用一個處于Error狀態(tài)的MediaPlayer對象,可以調(diào)用reset()方法把這個對象恢復成Idle狀態(tài)。注冊一個OnError
54、Listener獲知內(nèi)部播放心情發(fā)生的錯誤時良好的編程習慣。在不合法的狀態(tài)下調(diào)用一些方法,如prepare()、prepareAsync()和setDataSource()方法等會拋出IllegalStateException異常。</p><p> 調(diào)用setDataSource(FileDescription)方法、setDataSource(String)方法、或者是setDataSource(Uri)方
55、法、setDataSource(FileDescriptor,long,long)方法,便可以使MediaPlayer對象從Idle狀態(tài)遷移到Initialized狀態(tài)。若此時MediaPlayer對象處于其他狀態(tài)下,調(diào)用setDataSource()方法會拋出IllegalStateException異常。</p><p> 在開始播放前,MediaPlayer對象必須進入Prepared狀態(tài)。在此有兩種方法
56、(同步和異步)可以實現(xiàn)。調(diào)用Prepare()方法(同步),此方法返回表示MediaPlayer對象已經(jīng)進入Prepared狀態(tài)。調(diào)用prepareAsync()方法(異步),此方法返回表示MediaPlayer對象進入Preparing狀態(tài)并返回,而內(nèi)部的播放引擎繼續(xù)未完成的準備工作。</p><p> 在開始播放時,必須調(diào)用start()方法。當方法返回成功時,MediaPlayer對象應當處于Starte
57、d狀態(tài)。isPlaying()方法可以被調(diào)用來測試某個MediaPlayer對象是否處于Started狀態(tài)。</p><p> 播放可以被暫停、停止,以及調(diào)整當前的播放位置。Pause()方法可以是MediaPlayer對象進入Paused狀態(tài)。注意Started狀態(tài)和Paused狀態(tài)的相互轉(zhuǎn)換在內(nèi)部播放引擎中是異步的。所以可能需要一點時間在isPlaying()方法中更新狀態(tài)。</p><
58、p> 調(diào)用stop()方法會停止播放,并且還會讓一個處于Started、Paused、Prepared狀態(tài)的MediaPlayer對象進入Stopped狀態(tài)。對一個已經(jīng)處于Stopped狀態(tài)的MediaPlayer對象的stop()方法沒有影響。</p><p> 調(diào)用seekTo()方法可以調(diào)整播放的位置。seekTo(int)方法是異步執(zhí)行的,所以它可以馬上返回,但是實際的定位播放操作可能需要一段時
59、間才能完成,尤其是播放流形式的音頻/視頻。當實際的定位操作完成之后,內(nèi)部播放引擎會調(diào)用程序提供的OnSeekComplete()回調(diào)方法。在此需要注意的是,seekTo(int)方法也可以在其他狀態(tài)下調(diào)用,比如Prepared、Paused和PlaybackCompleted狀態(tài)。此外,當前的音頻/視頻播放位置,實際上可以調(diào)用getCurrentPosition()方法來得到,它可以幫助播發(fā)器的應用程序不斷更新播放進度。</p&g
60、t;<p> 當播放到流的末尾時完成播放。如果調(diào)用setlooping(boolean)方法開啟了循環(huán)模式,那么這個MediaPlayer對象會重新進入Started狀態(tài)。如果沒有開啟循環(huán)模式,那么內(nèi)部播放引擎會調(diào)用OnCompletion.onCompletion()回調(diào)方法。一旦調(diào)用了該方法,說明這個MediaPlayer對象進入了PlaybackCompleted狀態(tài)。此時可以再調(diào)用start()方法來讓這個Med
61、iaPlayer對象進入Started狀態(tài)[6]。</p><p> 2.2.3 Surface、SurfaceView、SurfaceHolder三者之間的關(guān)系</p><p> (1) Surface</p><p> Surface就是“表面”的意思。在SDK的文檔中,對Surface的描述是這樣的:“Handle onto a raw buffer t
62、hat is being managed by the screen compositor”,翻譯成中文就是“由屏幕顯示內(nèi)容合成器(screen compositor)所管理的原生緩沖器的句柄”,這句話包括下面兩個意思:通過Surface(因為Surface是句柄)就可以獲得原生緩沖器以及其中的內(nèi)容。就像在C語言中,可以通過一個文件的句柄,就可以獲得文件的內(nèi)容一樣;原生緩沖器(rawbuffer)是用于保存當前窗口的像素數(shù)據(jù)的。引伸地,
63、可以認為Android中的Surface就是一個用來畫圖形(graphics)或圖像(image)的地方。根據(jù)Java方面的常規(guī)知識,我們知道通常畫圖是在一個Canvas對象上面進行的,由此,可以推知一個Surface對象中應該包含有一個Canvas對象,事實上的確如此,而且這一點可以很容易通過debug運行程序的方式得到證明。Surface中有一個Canvas成員,專門用于畫圖的。所以,Surface中的Canvas</p>
64、;<p> (2) SurfaceView</p><p> SurfaceView,顧名思義就是Surface的View,通過SurfaceView就可以看到Surface的部分或者全部的內(nèi)容,下面用一個圖來形象地描述一下Surface和SurfaceView的關(guān)系:</p><p> 圖2-3 Surface與SurfaceView</p><p
65、> 也就是說,Surface是用通過SurfaceView才能展示其中的內(nèi)容。由此來說,SurfaceView中的View之確切的含義應該是viewport即“視口”的意思,類似數(shù)據(jù)庫的設計,假定一個數(shù)據(jù)表有20個字段,但我們常常只用到其中的5個字段,那么就可以在原數(shù)據(jù)表的基礎上,通過SQL語句CREATEVIEW來創(chuàng)建只包含那5個字段內(nèi)容的view。另一方面,SurfaceView是Android中View的子類。事實上,在A
66、ndroid中所有用于界面展示的類皆為View的子類,包括那些不可見的、各種各樣的Layout。所以說,SurfaceView中的View有兩個含義:視口(viewport)的意思和SurfaceView是View的派生類在Android中Surface是從Object派生而來,且實現(xiàn)了Parcelable接口。看到Parcelable就讓人能很自然地想到數(shù)據(jù)容器,SurfaceView就是用來展示Surface中的數(shù)據(jù)的。在這個層面上
67、而言,Surface就是管理數(shù)據(jù)的地方,SurfaceView就是展示數(shù)據(jù)的地方[3]。</p><p> (3)SurfaceHolder</p><p> SurfaceHolder是一個接口,其作用就像一個關(guān)于Surface的監(jiān)聽器。提供訪問和控制SurfaceView背后的Surface 相關(guān)的方法 (providingaccess and control over this
68、SurfaceView's underlying surface),它通過三個回調(diào)方法,讓我們可以感知到Surface的創(chuàng)建、銷毀或者改變。在SurfaceView中有一個方法getHolder,可以很方便地獲得SurfaceView所對應的Surface所對應的SurfaceHolder。</p><p> 從設計模式的高度來看,Surface、SurfaceView和SurfaceHolder實質(zhì)上
69、就是廣為人知的MVC,即Model-View-Controller。Model就是模型的意思,或者說是數(shù)據(jù)模型,或者更簡單地說就是數(shù)據(jù),也就是這里的Surface;View即視圖,代表用戶交互界面,也就是這里的SurfaceView;SurfaceHolder很明顯可以理解為MVC中的Controller(控制器)。這樣看起來三者之間的關(guān)系就清楚了很多[9]。</p><p> 第三章 系統(tǒng)分析及系統(tǒng)結(jié)構(gòu)設計與
70、實現(xiàn)</p><p><b> 3.1系統(tǒng)分析</b></p><p> 3.1.1系統(tǒng)可行性分析</p><p> 可行性研究是為了弄清楚系統(tǒng)開發(fā)的項目是不是可以實現(xiàn)和值得進行研究的過程,實際上是一次大大簡化系統(tǒng)分析和系統(tǒng)設計的過程,所以,進行可執(zhí)行性的分析是非常必要的,也是很重要的,經(jīng)過最初的設計目標和進行的實時調(diào)查得出以下四點的可行
71、性分析:</p><p> 技術(shù)可行性:Eclipse + Android ADT的技術(shù)已經(jīng)較為成熟,通過SUN公司(現(xiàn)被ORCEL公司收購)推出的跨平臺、動態(tài)的JAVA語言進行開發(fā)。</p><p> 運行可行性:該系統(tǒng)需要Android虛擬機環(huán)境,Eclipse中安裝ADT,DDMS等Google Android相關(guān)插件。其運行環(huán)境已經(jīng)相當穩(wěn)定,它功能豐富,包括了完備的Androi
72、d程序的編碼、調(diào)試、測試和發(fā)布功能,其中支持所有Android應用開發(fā)相關(guān)技術(shù),包括SQLite,Skia,3D制作,Android XML,能夠很好的發(fā)布Android的應用程序APK包。</p><p> (3)法律可行性:因為是自主開發(fā)設計,所以不會構(gòu)成侵權(quán),在法律上是可行的。</p><p> 通過以上的可行性分析,將采用Eclipse+Android ADT + DDMS技術(shù)
73、,運用JAVA語言進行系統(tǒng)的開發(fā)。</p><p> 3.1.2 系統(tǒng)需求分析</p><p> 根據(jù)分析需求,這個系統(tǒng)必須實現(xiàn)以下的功能:</p><p> 實現(xiàn)手機支持的視頻格式文件的播放功能。</p><p> 作為播放器,其核心就是能夠流暢的播放視頻文件。手機一般不會支持對解碼要求太高的格式,如rmvb。作為手機硬件能夠承載的
74、視頻流文件,都應當能夠流暢的播放。</p><p> 能夠在手機里面定位視頻文件。</p><p> 在本播放器設計中,一個亮點就是自定義一個文件列表,能夠訪問手機里面任何能夠進入的文件。這樣,也就能夠不需要將視頻文件放在一個系統(tǒng)固定的位置,您可以自己新建一個存放視頻文件的文件夾,放在任何你想要放的地方。這樣,需要播放你的視頻文件的時候,直接定位再好不過。</p><
75、;p> 能夠智能搜索出所有android sdcard中的視頻文件。</p><p> 做視頻的智能搜索,也是能夠快速定位位于sdcard中的視頻文件的另一個快捷的方法。</p><p> 在智能搜索設計中,通過mediascanner進行sdcard中的所有視頻文件的掃描,包括自動搜索和手動添加。同時,將其顯示到界面。一般,當手機中存放的視頻文件過多,但對于新添加的視頻文件位
76、置很清楚時,選擇手都添加比較好。</p><p> 能夠?qū)σ曨l文件常規(guī)信息信息進行讀取。</p><p> 當播放視頻文件時,視頻名稱、視頻時間長度等信息顯示在屏幕相應位置。</p><p><b> 3.2系統(tǒng)結(jié)構(gòu)設計</b></p><p> 本次課題設計的Android視頻播放器應用程序組要由4個Activ
77、ity組成,分別是Mediaplayer Activity,MediaList Activity,F(xiàn)ileChooser Activity,UpdateMediaList Activity。每一個Activity實現(xiàn)相應部分的功能,每一個Activity對應有一個或多個.xml的布局文件。在布局文件中,添加用來實現(xiàn)相應部分功能的各種控件。如圖3-1所示。</p><p> 圖3-1 系統(tǒng)結(jié)構(gòu)框圖</p&g
78、t;<p> MeidaPlayerActivity</p><p> MediaplayerActivity中包含的控件數(shù)量最多,與用戶打交道也最為廣泛,每個控件都對應有各自的功能,如圖3-2所示。</p><p> 圖3-2 MediaplayerActivity控件分布</p><p> 第一行中:CheckButton,查看列表按鈕。按
79、下此按鈕之后,顯示手機中存在的視頻文件,并以列表的形式顯示顯示在手機屏幕上。關(guān)于視頻文件的列表的顯示,在MediaListActivity中實現(xiàn)。ChooserButton,添加視頻按鈕。按下此按鈕之后,手機屏幕將顯示SDCard中文件列表,通過瀏覽不同路徑,添加所需的視頻文件至視頻列表中。ImageButton,之后的三個ImageButton分別是volumeButton,upButton,downButton,即聲音按鈕,加大音量
80、按鈕,減小音量按鈕。</p><p> 第二行中:TextView,文本視圖控件。前一個TextView用來顯示“視頻文件:”,即一個提示信息;后一個TextView用來顯示正播放的視頻文件的名稱。然后是ImageButton控件,這里添加一個聲音的小圖標。最后是一個ProgressBar控件,該控件是一個進度條。當我們加大或者減小音量時,該進度條會相應的發(fā)生變化。</p><p>
81、第三行中:一個SurfaceView控件加上一個ImageView控件。SurfaceView用來將視頻畫面投放到手機屏幕上,而ImageView用來顯示視頻是否處于播放狀態(tài)。即當暫停視頻播放時,ImageView處于Visible(可見)狀態(tài),當繼續(xù)之前暫停的視頻播放時,ImageView處于InVisible(不可見)狀態(tài)。</p><p> 第四行中:兩個TextView分別用來顯示當前正雜播放的視頻的時
82、間信息,前者顯示當前播放時間長度,后者顯示視頻文件的最大時間長度。</p><p> 第五行中:SeekBar,另一種進度條,隨著視頻播放進度而變化。</p><p> 第六行中:六個ImageButton控件,分別為play,pause,reset,stop,last,next,即播放按鈕,暫停按鈕,重置按鈕,停止按鈕,上一個按鈕,下一個按鈕。</p><p>
83、; MediaListActivity</p><p> 接下來是MediaListActivity。該Activity引用的是medialist.xml布局文件。由于只需要顯示視頻文件列表,所以在medialist.xml布局文件中只添加了一個ListView控件用來實現(xiàn)視頻列表的顯示功能,如圖3-3所示。</p><p> 圖3-3 MediaList</p>&l
84、t;p> FilechooserActivity</p><p> 然后是FileChooserActivity,當按下添加視頻Button時,由MediaplayerActivity跳轉(zhuǎn)到此Activity,并根據(jù)用戶操作來完成添加視頻文件的操作。該Activity引用fileselect.xml布局文件。該布局文件中包含一個TextView,一個ListView,和兩個Button控件。</p
85、><p> TextView用來顯示當前正在瀏覽的路徑,ListView用來顯示當前路徑下存在的文件或者文件夾。當選中視頻文件后,單擊確認Button即可。若不打算添加,則取消即可,如圖3-4所示。</p><p> 圖3-4FileChooserActivity布局</p><p> UpdateMediaListActivity</p><
86、p> 最后是UpdateMediaListActivity。當用戶通過Menu菜單點擊“更新列表”選項時,程序跳轉(zhuǎn)到此Activity。該Activity引用updatelist.xml布局文件。該布局文件中也僅僅只包含一個ListView控件,用來顯示更新選項。如圖3-5所示。</p><p><b> 圖3-5 更新列表</b></p><p><
87、b> 第四章 測試</b></p><p> 4.1測試環(huán)境和條件</p><p> 本次軟件測試環(huán)境在AVD(Android Virtual Device)和真機中測試。</p><p> 真機硬件配置:手機型號:ZTE V889D;Android版本;4.0.4;內(nèi)核版本號:3.0.8-perf-svn22921zte-kernel@Z
88、droid-SMT;RAM:512M;CPU:800MHz。</p><p><b> 4.2測試</b></p><p><b> 系統(tǒng)運行的流程如下</b></p><p> 運行程序后,首先進入的是主Activity,即MediaPlayer Activity。如圖4-1。</p><p&g
89、t; 圖4-1 程序運行時主界面</p><p> 當點擊菜單Menu時,會出現(xiàn)三個選項:播放列表,更新列表,退出。如圖4-2所示。</p><p><b> 圖4-2 菜單選項</b></p><p> 選擇更新列表操作,進入UpdateMediaList Activity,如圖4-3所示。</p><p>
90、 圖4-3 更新列表操作</p><p> 單擊選擇自動搜索,程序自行掃描SDCard中的文件,并將掃描到的視頻文件添加到視頻列表中去。如圖4-4和圖4-5所示。</p><p> 圖4-4 自動搜索視頻文件</p><p> 圖4-5 自動更新結(jié)果</p><p> 搜索完成后點擊產(chǎn)看列表查看視頻文件列表,也可以通過菜單中的播放列表
91、選項查看。查看結(jié)果如圖4-6所示。</p><p> 圖4-6 查看視頻文件列表</p><p> 在更新列表界面下,用戶也可以通過手動添加來添加視頻文件。如圖4-7所示,被選中的視頻文件會被打上對勾,以表示選中。</p><p> 圖4-7手動添加視頻文件</p><p> 單擊確定按鈕完成添加。添加后顯示圖4-8。</p&g
92、t;<p> 圖4-8 添加視頻文件完成</p><p> 接下來從視頻列表中選擇一個視頻文件來播放。如圖4-9所示。</p><p> 圖4-9 播放視頻文件</p><p> 由上圖可知,視頻播放時,可以獲得一些視頻文件信息。如視頻名稱,播放進度,視頻時長,視頻后綴名。當按下暫停按鈕時,視頻暫停播放,并且Image View顯示出來。如圖4
93、-10所示。</p><p> 圖4-10 暫停視頻播放</p><p> 再按下play按鈕即可繼續(xù)視頻播放,若按下reset按鈕,怎視頻從頭開始播放。視頻的進度可以通過進度條直接進行拖拽。通過調(diào)節(jié)音量的3個Button可以對音量進行調(diào)節(jié)。按下Volume Button時,視頻靜音,此時Volume Button也改變。按下加大或者減小按鈕時,聲音進度條顯示并發(fā)生相應的變化。如圖4-
94、11和圖4-12所示。</p><p> 圖4-11 靜音操作</p><p> 圖4-12 聲音進度條變化</p><p> 在視頻播放過程中,若將手機屏幕橫置,并不能實現(xiàn)視頻的自動旋轉(zhuǎn),原因在于重力感應功能沒有能夠?qū)崿F(xiàn),如圖4-13所示。</p><p> 圖4-13 手機屏幕橫置</p><p> 關(guān)于
95、重力感應這部分功能,Android中的很多游戲的游戲都使用了重力感應的技術(shù),簡單來說,Android重力感應系統(tǒng)的坐標系下,以屏幕的左下方為原點箭頭指向的方向為正。從-10到10,以浮點數(shù)為等級單位,如圖4-14所示。</p><p> 手機屏幕向上(z軸朝天)水平放置的時侯,(x,y,z)的值分別為(0,0,10);</p><p> 手機屏幕向下(z軸朝地)水平放置的時侯,(x,y
96、,z)的值分別為(0,0,-10);</p><p> 手機屏幕向左側(cè)放(x軸朝天)的時候,(x,y,z)的值分別為(10,0,0);</p><p> 手機豎直(y軸朝天)向上的時候,(x,y,z)的值分別為(0,10,0);</p><p> 其他的如此類推,規(guī)律就是:朝天的就是正數(shù),朝地的就是負數(shù)。利用x, y, z三個值求三角函數(shù),就可以精確檢測手機的
97、運動狀態(tài)了。</p><p> 圖4-14 重力感應下系統(tǒng)坐標</p><p> 對于重力感應相關(guān)函數(shù)、方法的具體實現(xiàn),以及如何監(jiān)聽手機的運動狀態(tài),由于需要與視頻對象綁定,并實現(xiàn)相應的變化,此功能較為復雜因此暫未實現(xiàn)。</p><p> 至此,視頻播放器功能測試完畢。</p><p><b> 4.3測試結(jié)果分析</b
98、></p><p> 在程序測試中,既在虛擬機中進行了測試,也在真機中進行了測試。主要是從方便的角度出發(fā)。在虛擬機中,對于程序運行到各個環(huán)節(jié)的截圖操作十分方便,容易及時捕捉,便于記錄并觀察。但虛擬設備無法進行視頻的播放,故在真機中測試??傮w來說,視頻播放還是很流暢的,各部分的功能都能很好的實現(xiàn)。但對于用戶的操作,程序不能第一時間響應,表現(xiàn)出有些許延遲,可能是由于硬件薄弱的問題造成的,主要是因為RAM偏小,
99、僅僅是有512M,加上CPU頻率不到1GHz。所以,程序運行稍微偏多,CPU負擔就會比較大,就會變的有點卡。界面上不算十分華麗,但也能給用戶帶來不錯的體驗,基本的視頻播放功能都可以正常運行。</p><p><b> 結(jié) 論</b></p><p> 經(jīng)過幾個月的不斷努力,畢業(yè)設計終于完成。在本次畢業(yè)設計的過程中,通過自身的不斷努力和學習,通過指導老師王曉峰
100、老師的細心指導,使我的提出問題、分析問題、解決實際問題的能力有了很大的提高,同時也深切的體會到理論與實踐相結(jié)合的重要性,認識到在實踐中運用知識研究、解決問題的能力和自學能力是十分重要的。通過這次的畢業(yè)設計,不僅讓我學到了更多的東西,最終使我對一些新知識的學習上有了很多經(jīng)驗,相信在以后的工作學習中也會有很大的幫助。</p><p> 經(jīng)過這幾個月的努力,本次畢業(yè)設計的主要學習成果有:</p><
101、;p> (1)更加了解了Mediaplayer對象的狀態(tài)問題。</p><p> ?。?)學習了掃描SD Card中的文件的方法。</p><p> ?。?)熟悉了Android工程項目的結(jié)構(gòu)目錄。</p><p> ?。?)了解并能夠簡單實用更多的Android控件。</p><p> 在程序設計中,還是碰到了一些問題,下面列舉一
102、些較為關(guān)鍵的:</p><p> (1)在程序開始的初期,搭建Android開發(fā)運行環(huán)境時,出現(xiàn)了一些小小的問題。工欲善其事,必先利其器。在添加Android-SDK-Windows至系統(tǒng)環(huán)境變量時,添加過后,在CMD環(huán)境并不能使用Android相關(guān)的一些命令。具體問題不是很清楚,但在重新安裝JDK、再次添加環(huán)境變量之后可以正常使用。此外,對Android-SDK-Windows進行升級,再安裝ADT插件,出現(xiàn)
103、插件安裝失敗問題。之后查閱資料了解到,Android-SDK-Windows不能盲目升級過高,應當與ADT版本搭配使用才行。但Android-SDK-Windows一旦升級過后,不能降級。這時候使用一個小技巧即可。進入到Android-SDK-Windows的一個目錄,修改一個配置文件,將Android-SDK-Windows的版本修改和ADT版本相同即可。環(huán)境搭建工作到此完成了。</p><p> (2)在程
104、序開發(fā)過程中,遇到問題是常有的事了。最多的就是Android中各種方法實現(xiàn)什么樣的功能,方法的調(diào)用,方法的重用,方法的復寫等等,還有就是方法的參數(shù)問題。這里可以參考E:\android-sdk-windows\docs\index.html文檔。這是Android的幫助文檔,里面包含了所有Android.jar包的方法及其用法。包括詳細的方法功能介紹和參數(shù)介紹,如何調(diào)用,何時調(diào)用等等。是學習Android的最好的參考資料。</p&
105、gt;<p><b> 參考文獻</b></p><p> 靳巖,姚尚郎. Google Android開發(fā)入門與實踐[M/CD]. 北京:人民郵電出版社, 2009</p><p> 余志龍,陳旻勛等. Google Android SDK開發(fā)范例大全[M]. 北京:人民郵電出版社, 2009</p><p> 公磊,周
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android的視頻播放器的設計與實現(xiàn)
- 基于android平臺的音樂播放器設計與實現(xiàn)畢業(yè)論文
- 基于android的視頻播放器的設計與實現(xiàn)論文 .doc
- 基于android平臺的音樂播放器設計與實現(xiàn)畢業(yè)論文
- 畢業(yè)論文——基于android音樂播放器的設計
- 基于android的音樂播放器畢業(yè)論文
- 基于android的音樂播放器的設計-畢業(yè)論文
- 基于android平臺的視頻播放器設計論文
- 基于android技術(shù)的網(wǎng)絡視頻播放器的設計與實現(xiàn)
- 基于android平臺的音樂播放器-畢業(yè)論文
- 畢業(yè)論文——基于android平臺的音樂播放器
- 畢業(yè)論文--android在線音樂播放器設計與實現(xiàn)
- 軟件工程畢業(yè)論文-基于android的音樂播放器的設計與實現(xiàn)
- 基于Android音樂播放器的設計與開發(fā)畢業(yè)論文.doc
- 基于Android平臺的視頻播放器的設計與實現(xiàn).pdf
- 基于android技術(shù)的網(wǎng)絡視頻播放器的設計與實現(xiàn)
- 畢業(yè)論文設計 基于android手機平臺的音樂播放器
- 基于android的多功能視頻播放器的系統(tǒng)設計與實現(xiàn)
- 軟件工程畢業(yè)論文-基于android的音樂播放器的設計與實現(xiàn)2
- 基于android手機平臺的音樂播放器-畢業(yè)論文
評論
0/150
提交評論