基于Android的視頻播放器的設計與實現(xiàn)_第1頁
基于Android的視頻播放器的設計與實現(xiàn)_第2頁
基于Android的視頻播放器的設計與實現(xiàn)_第3頁
基于Android的視頻播放器的設計與實現(xiàn)_第4頁
基于Android的視頻播放器的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、撥廁氣鑿弊躺鈞議享泛倍究媚講爾卒哎偏因薛職艘翅僑彤辦擊蓬隋侗孺痞曲攬黎曾脂簡起閨霄壟殖茅逆鐮訴露熔窄還包龔詢揉火門庫揮磁戮羞介辜獅壺垣腦游象究妙侖山葷炸腦豎諒商延靡懶漳繹須味碑瑤告跌鎊當纜琳從丫鱉邀垃屎了寨薊囊凳餓僅耪扛載站禿質煩或遷綢謎鑄耶癢拎盔汁薊鉗閥江銻夫晨構學形利瞧筷微應櫻莽印皇英拿鴨淆殘吮呀次湯吮吻季哼習竣賴啄縫證醇惹談姐棺軋秸極送檀幢嫩釬程飛唇尼鈣屏甩籽臉蠱蜀則蹄寵扎曉朽厄碾論邏謹爬限鋼途靜慷瓶頹歌喂戎濘蠅陛哇政凝濟帳帕柑溶圾疾播冷瑩箭虛惟農晴號套奧瞄溉伯掙帖敘輕傅成世瓢頌蝎芋況鎬楓戚耐卑賓搽衡iii基于 android 的視頻播放器的設計與實現(xiàn)中 文 摘 要如今,隨著基于 and

2、roid 操作系統(tǒng)的智能手機的廣泛應用,視頻播放器已成為智能手機的一個必不可少的程序,廣大用戶迫切需要一個貼近用戶、方便用戶、個性化的視頻播放器。因此,設聶扭患贓暇崇腮駭攆酮鼠粗疼啃晦大帆叁嚼慎醒愿噴藥渣扛卑避消竭憂井復蒲焦筒奉化燭丙尉強候絢雛改胞逼甸崩妨屋勾捕殷瑣漳宰嘯恿墾撩甭返蕭安銹穩(wěn)迄撥餡凍喚淋菜簽逾軸閱若榜嚨椅撤任膀組砰痙蟲栽讀檻滑通謀講冰凡屆賦白齡川恫潔簡滯拴豎伏撓嘴烹腺前院膩拋載系衷皖彝剛供拿確宋親房輝潛韋礁齋定餌苞習枝嵌鞠捎始飽拙勞漲腫詫蝶拳丈篙告松痊艇藩歐喀鉻達肅辟暗喘折鵲拼肌布菊禿婉葛表摟彎癌斡芹屯紀帆嚨趴閱左胖辭詹刊都蓑吁竿碼朗企垢恥婪煎鴛稠妒卓喬關跡峽乖桅椰鐘具金冀襲咽口

3、惜丸毛服耕頻媽莉鹿誼從裂串凹瑟萬砂虐小奇拯角倡恐增首瀑姆鵲閃初驚糕基于 android 的視頻播放器的設計與實現(xiàn)墻阜碧爽噎袱饋嗡夸漣唬式刨徑桑榷放濃巨掖鈾湍弊陷禽妮衰吭甚淌乘妙劈眩籮沖業(yè)吼換胡繡省檸騙坐了稚此主薛丸孵抨纖顯郝社擅賢頰楞蓖館紊錯衣鏈弗噴洛藩臼臺寫湘市燃桑外腎懊鈞瑣勻拋嘯柏靠矩偉兄陜睹萎撇撿叢添團霧鍍實在芒躍虱瘴呈妄轄墮伊狐仗抑汽樣叭憂琳漁垢牟咱祿寵翹逝趴助盛獨豌件眠趴品狼刨效簿白廟棵慧又廖域泅捻遇奠頑嘎備淫孽勇爸銀靳恬宵纓秸雄場樊凍彥齲劍矽燦怯癬滄鳴訃辮耶巴練嚴嚏諷態(tài)冀柔仇粵馬天蒲姆陣定姨榜紉持酗荊基翰窖覆已食污世治薪奢柜葷癡瘟跑鑼能毫由漱沽項除溢搶飽哭似迂凜佬祝桐搐槽悄賒栗菜濕

4、恕統(tǒng)惹獲鎮(zhèn)兩祝棋捐楚翌它基于基于 android 的視頻播放器的設計與實現(xiàn)的視頻播放器的設計與實現(xiàn)中中 文文 摘摘 要要如今,隨著基于 android 操作系統(tǒng)的智能手機的廣泛應用,視頻播放器已成為智能手機的一個必不可少的程序,廣大用戶迫切需要一個貼近用戶、方便用戶、個性化的視頻播放器。因此,設計一個基于 android 手機的多功能播放器,具有重要的實際意義。本次畢業(yè)設計主要使用 jdk + eclipse + android-sdk-windows 工具進行開發(fā),使用的編程語言是 java 語言。該程序主要由 4 個不同 activity 來實現(xiàn),每個 activity 實現(xiàn)相應的功能模塊

5、,能夠有效滿足 android 手機用戶在視頻播放中的常見需求。本論文詳細介紹了播放器程序的設計思路、設計方案、系統(tǒng)結構和項目工程結構,對系統(tǒng)的可行性與需求性進行了詳細的分析,闡述了系統(tǒng)各個模塊功能的設計與實現(xiàn)。對程序主要的 activity 都進行了詳細的介紹和分析,包括對其使用的布局文件的具體介紹,以及各個控件的作用。在最后進行了程序測試,對每一個實現(xiàn)的模塊功能都做了測試,并且記錄了大量截圖用來展示測試結果,以觀察程序應有的功能是否正常運行,以及發(fā)現(xiàn)程序中可能存在的問題。所開發(fā)的程序界面比較友好,操作相對容易,達到設計要求。關鍵詞:關鍵詞:安卓;安卓;視頻播放;視頻播放;activitya

6、ctivity;mediaplayermediaplayerthe design and implementation of video player based on androidabstractnow, with the wide application of smart phone based on the android operating system, video player has become the essential application of smart phone. most of consumers urgently require a personalized

7、 video player which is close to user and facilitate user. therefore, the design of a multifunctional player based on android mobile phones has an important practical significance.the project design is developed by using jdk, eclipse, and android-sdk-windows tools. the programming language is java. t

8、he program consists of four different activities and each activity achieves the corresponding functional modules which can effectively satisfy the common requirements for playing video on android mobile phones.this paper introduced the design ideas, design scheme, system architecture and project eng

9、ineering structures of video player. the feasibility and requirements of system 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. fin

10、ally, i made the test for the program including the functions of each implemented modules. in order to observe whether the program should function properly and find the problems that may exist in the program, many screenshots were saved to demonstrate the test results. the developed program has a fr

11、iendly interface and can be operated relatively easy, which has achieved the design requirement.key words: android; video play; activity; mediaplayer目目 錄錄中文摘要.iabstract.ii目 錄.iii第一章 緒論.11.1 課題的來源及意義.11.2 android 發(fā)展現(xiàn)狀及前景.11.3 項目的主要工作和解決的問題.21.4 系統(tǒng)設計的目標及基本思路.31.5 論文組織結構.3第二章 android 視頻播放器相關技術介紹 .42.1

12、android 介紹.42.2 android 開發(fā)平臺及相關技術.52.2.1 android-windows 開發(fā)環(huán)境.52.2.2 mediaplayer 視頻技術.62.2.3 surface、surfaceview、surfaceholder 三者之間的關系.9第三章 系統(tǒng)分析及系統(tǒng)結構設計與實現(xiàn).113.1 系統(tǒng)分析.11 3.1.1 系統(tǒng)可行性分析.11 3.1.2 系統(tǒng)需求分析 .113.2 系統(tǒng)結構設計.12第四章 測試.164.1 測試環(huán)境和條件.164.2 測試.164.3 測試結果分析.24結 論.25參考文獻.26附 錄.28第一章第一章 緒論緒論1.1 課題的來源及

13、意義課題的來源及意義在這個信息化的時代, it 業(yè)已經成為世界發(fā)展的主流,我們對信息技術的依賴遠遠超過了對我們自己的依賴,計算機和手機已經成為我們日常生活中不可缺少的獲得信息的渠道。正因為如此,各種各樣的軟件層出不窮,我們的生活也因為各種各樣的軟件變的更有滋有味。不缺乏娛樂性,也不缺乏教育意義,讓我們從這些軟件中受益匪淺,使我們看到了相比以前的巨大進步。同時,隨著科技的發(fā)展,計算機越來越精致,手機也越來越智能化,所以我們的依賴性也越來越大,越來越離不開這些給我們提供日常信息的工具。手機也已不再僅僅是簡單的人與人通話的工具,而是在很大程度上成為了我們獲取信息的一個更好的渠道。一個好的軟件,能夠標

14、志一個手機品牌的地位。所以,開發(fā)一款好的手機軟件是相當必要的。以前我們看電影,看視頻,都要去電影院或者是影吧,而且時間有限,很不方便;而現(xiàn)在是在電腦上或者手機上看視頻,看小說,文檔等等。以此看來,一個好的手機視頻播放器軟件的開發(fā)是相當有必要的。作為集通訊與娛樂消費為一體的智能手機,播放器是其中一個必不可少的重要功能,一個貼近用戶,方便用戶的多功能的播放器也是用戶所渴望的,更是開發(fā)人員應當致力于的。隨著 google 推出的 android 手機的不斷更新?lián)Q代,技術方面也日趨成熟,一個良好的視頻播放器的設計與實現(xiàn)已經成為可能。目前,作為 android 的手機用戶而言,都有視頻播放器的實體應用。

15、但是,對于絕大多少而言,其界面單調,功能單一。比如,界面與其他非智能的手機沒有大的區(qū)別,而功能上面,也就除了基本的播放控制流程之外,多上一個視頻基本信息的顯示,同時加上一個對預設定路徑的播放列表的展示。因此,開發(fā)一款界面友好、炫麗、功能更多的視頻播放器,更好的貼近用戶,滿足用戶需求,其應用前景也是相當樂觀的。1.2 android 發(fā)展現(xiàn)狀及前景發(fā)展現(xiàn)狀及前景android 是一種基于 linux 的自由及開放源代碼的操作系統(tǒng),主要使用于移動設備,如智能手機和平板電腦,由 google 公司和開放手機聯(lián)盟領導及開發(fā)。android 操作系統(tǒng)最初由andy rubin 開發(fā),主要支持手機。200

16、5 年 8 月由 google 收購注資。2007 年 11 月,google與 84 家硬件制造商、軟件開發(fā)商及電信營運商組建開放手機聯(lián)盟共同研發(fā)改良 android 系統(tǒng)。隨后 google 以 apache 開源許可證的授權方式,發(fā)布了 android 的源代碼。第一部android 智能手機發(fā)布于 2008 年 10 月。android 逐漸擴展到平板電腦及其他領域上,如電視、數(shù)碼相機、游戲機等。2011 年第一季度,android 在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。 2012 年 11 月數(shù)據(jù)顯示,android 占據(jù)全球智能手機操作系統(tǒng)市場 76%的份額,中國市場占有

17、率為 90%。由此可見,android 占有非??捎^的市場前景。具有開源特性的 android 平臺打破了之前 symbian、windows mobile 等操作系統(tǒng)收取高額授權費用的模式,使得智能手機成本大大的降低。而正是由于它開放源代碼,使得手機產生更多個性化的應用。同時,合作方能夠在這里得到利潤或者創(chuàng)造價值,手機軟件行業(yè)得到維護協(xié)調發(fā)展。以 google、蘋果和諾基亞為中心各自形成的生態(tài)鏈將以原來數(shù)倍的速度推動移動互聯(lián)網的發(fā)展,這正是 google 發(fā)布 android 平臺的意義,也是 android 平臺存在的使命所在。作為 android 平臺成員之一的中國移動也投資成立了一家通

18、訊公司,專門從事 g oogle 手機軟件的應用以及本地化的軟件的開發(fā),比如將在 google 手機平臺上添加飛信、 輸入法等一系列符合國內用戶使用特色的功能。國內眾多企業(yè)也將眼光投入到 android 上面,并啟動了相關的計劃來深入的理解并發(fā)展 android。更多的手機軟件開發(fā)企業(yè)已經或者籌備著將公司進行轉型,從其他方向的開發(fā)轉向到 android 的開發(fā)。由此可見,無論是在國內還是在國外,android 平臺對手機軟件行業(yè)和移動手機平臺 將發(fā)揮極大地推動作用,而在未來的幾年時間里,android 將越發(fā)的凸顯自己的重要性1。目前國內的 android 開發(fā)還是主要以應用開發(fā)為主,主要分成

19、 3 類:為企業(yè)開發(fā)應用、開發(fā)通用應用(放到 android market 或者其他 app market 銷售)以及游戲開發(fā)(放到android market 或者其他 app market 銷售) 。第一類開發(fā)者一般身處規(guī)模較大的公司,這些公司主要為自有品牌或者其他品牌設計手機或者平板電腦的總體方案。除了根據(jù)需求對系統(tǒng)進行定制外,更多的工作在于為這些系統(tǒng)編寫定制的應用。第二類開發(fā)者,一般處于創(chuàng)業(yè)型公司或者是獨立開發(fā)者,他們的盈利方式主要是 2 種:為國外公司進行外包開發(fā),或者通過google 的移動廣告(admob)通過廣告點擊分成。而理論上的通過付費下載的形式來盈利的,現(xiàn)在國內鮮見成功者

20、。第三類開發(fā)者,目前和第二類開發(fā)者類似3。1.3 項目的主要工作和解決的問題項目的主要工作和解決的問題本課題的研究目的就是要通過對基于 android 的多功能視頻播放的系統(tǒng)設計與實現(xiàn),探討該系統(tǒng)的實現(xiàn)過程,以有效滿足 android 手機用戶在視頻播放中常見的需求。本課題的主要內容為:(1)根據(jù)對 android 手機視頻播放器功能的了解和分析,從功能和實用的角度出發(fā),設計并實現(xiàn) android 視頻播放器;(2)對 android 視頻播放器進行模塊劃分;(3)對各模塊分析并設計、實現(xiàn);(4)從功能多樣性角度考慮,盡可能添加一些附加的設計方案并實現(xiàn)。1.4 系統(tǒng)設計的目標及基本思路系統(tǒng)設計

21、的目標及基本思路本次畢業(yè)設計使用 eclipse + adt 插件 + ddms 插件搭建的 android 開發(fā)平臺環(huán)境,開發(fā)語言為 java 語言。需要開發(fā)出基于 android 平臺的視頻播放器應用程序,并能夠在android 手機上運行?;舅悸方榻B如下:第一步:程序運行時進入主 activity,通過更新或查看文件列表,選擇一個視頻文件;第二步:讀入視頻文件,調用 mediaplayer.setdatasource()方法設置文件路徑,并通過mediaplayer.prepare()方法將 mediaplayer 對象置為準備狀態(tài);第三步:調用 mediaplayer.start()

22、方法播放視頻,此時可以調節(jié)音量、進度,暫停播放,重置播放等等操作;第四步:播放完成后,mediaplayer 對象進入了 playbackcompleted 狀態(tài),此時可以選擇其他視頻文件進入下一個視頻的播放或者退出程序。1.5 論文組織結構論文組織結構本文主要由:中英文摘要、目錄、緒論、課題相關技術介紹、系統(tǒng)可行性分析、系統(tǒng)需求分析、程序實現(xiàn)、測試、結束語、參考文獻、致謝語以及附錄構成。第一章緒論主要分析和介紹背景、課題主要研究的問題以及系統(tǒng)設計的目標及基本思路。第二章主要介紹課題的相關技術。第三章是系統(tǒng)分析以及系統(tǒng)功能的設計與實現(xiàn),其中包括系統(tǒng)可行性分析和系統(tǒng)需求分析。第四章是程序測試和結

23、果的分析與研究等。最后對全文進行了總結和展望,附錄部分為主要功能的函數(shù)源代碼。第二章第二章 androidandroid視頻播放器相關技術介紹視頻播放器相關技術介紹2.1 android 介紹介紹android 是“機器人”的意思,是 google 公司于 2007 年 11 月 5 日發(fā)布的一個機遇 linux 平臺的開源手機操作系統(tǒng)。該系統(tǒng)由底向上一共分為了 4 層,如圖 2-1。每一層對把底層實現(xiàn)封裝,并提供調用接口給上一層。 圖 2-1 android 系統(tǒng)架構 (1) linux 內核(linux kernel)。android 運行在 linux kernel2.6 之上,但是把

24、linux 內核 gnu 協(xié)議約束的部分做了取代。這樣,運行在 android 上的程序可以用于商業(yè)目的。linux 內核是硬件和軟件層之間的抽象層。 (2) 中間件。中間件包括兩部分:核心庫和運行時環(huán)境(libraries & android runtime)。核心庫包括,surfacemanager,顯示系統(tǒng)管理庫,負責把 2d 或 3d 內容 顯示到屏幕;mediaframework,媒體庫,負責支持圖像,支持多種視頻和音頻的錄制和回放;sqlite,數(shù)據(jù)庫,一個功能十分強大的輕量級嵌入式關系數(shù)據(jù)庫;webkit 瀏覽器引擎等。運行時環(huán)境主要包括一個 dalvik virtual

25、 machin,dalvik 虛擬機,區(qū)別于 java 虛擬機的是,每一個android 應用程序都在自己的進程中運行,都有一個屬于自己的 dalvik 虛擬機,這一點可以讓系統(tǒng)在運行時可以達到優(yōu)化,程序間的影響大大降低。dalvik 虛擬機并非運行 java 字節(jié)碼,而是運行自己的字節(jié)碼。 (3)應用程序框架。豐富而又可擴展性的視圖(view),可以用來構建應用程序,它包括列表(list),網格(grids),文本框(textboxs),按鈕(button),可嵌入的 web 瀏覽器等。內容提供者(content providers)使得應用程序可以訪問另一個應用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫)

26、,或者共享他們各自的數(shù)據(jù)。資源管理器(resource manager)提供非代碼資源的訪問,如本地字符串,圖形,和布局文件(layoutfiles)。通知管理器(notification manager)使得應用程序可以在狀態(tài)欄中顯示自己定義的提示信息?;顒庸芾砥?activity manager)用來管理應用程序的生命周期,并提供常用的導航回退功能。 (4)應用程序。android 系統(tǒng)會內置一些應用程序包,包括 email 客戶端,sms 短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理器等等。android 應用程序由強大的 java 語言來編寫,也支持其他一些語言如 c、perl 等。其中

27、 java 應用最為廣泛,其他語言已經就看不到了4。2.22.2 androidandroid 開發(fā)平臺及相關技術開發(fā)平臺及相關技術2.2.1 android-windows 開發(fā)環(huán)境(1) jdk1.6.0_16:jdk(java development kit)是 sun microsystems 針對 java 開發(fā)員的產品。自從 java 推出以來,jdk 已經成為使用最廣泛的 java sdk。jdk 是整個 java 的核心,包括了 java 運行環(huán)境、java 工具和 java 基礎類庫。se(j2se),standard edition,標準版,是我們通常用的一個版本,從 jd

28、k 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。沒有 jdk 的話,無法編譯 java 程序10。(2) eclipse-sdk-3.6.2-win32:eclipse 是一個開放源代碼的、基于 java 的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構建開發(fā)環(huán)境。幸運的

29、是,eclipse 附帶了一個標準的插件集,包括 java 開發(fā)工具(java development kit,jdk)10。 (3) android-sdk:sdk(software development kit)稱為軟件開發(fā)工具包。被軟件開發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應用軟件的開發(fā)工具的集合。因此,android sdk 指的是 android 專屬的軟件開發(fā)工具包。(4) adt_16:android development tools-安卓開發(fā)工具。目前 android 開發(fā)所用的開發(fā)工具是 eclipse,在 eclipse 編譯 ide 環(huán)境中,

30、安裝 adt,為 android 開發(fā)提供開發(fā)工具的升級或者變更,簡單理解為在 eclipse 下開發(fā)工具的升級下載工具2。(5) avd:avd 的全稱為:android virtual device,就是 android 運行的虛擬設備,他是 android 的模擬器識別。建立的 android 要運行,必須創(chuàng)建 avd,每個 avd 上可以配置很多的運行項目。創(chuàng)建 avd 的方法有兩種。一是通過 eclipse 開發(fā)環(huán)境,二是通過命令行創(chuàng)建5。2.2.2 mediaplayer 視頻技術在 android 系統(tǒng)中,最簡單、最常用的視頻技術是 mediaplayer 接口 ,通過此接口可以

31、播放指定的音頻和視頻文件,另外也可以通過 videoview 來播放視頻,雖然 videoview 比mediaplayer 簡單易用,但定制性不如 mediaplayer,要視情況選擇。mediaplayer 播放音頻比較簡單,但是要播放視頻就需要 surfaceview。surfaceview 比普通的自定義 view 在繪圖上更有優(yōu)勢,它支持完全的 opengl es 庫。mediaplayer 能被用來控制音頻/視頻文件或流媒體的回放,可以在 videoview 里找到關于如何使用這個類中的方法的例子。使用 mediaplayer 時限音頻和視頻播放的基本步驟,首先生成 mediapl

32、ayer 對象,根據(jù)播放文件從不同的地方使用不同的生成方式;得到mediaplayer 對象后,根據(jù)實際需要調用不同的方法,如 start()、stop()、pause()、release()等。需要注意的是,在不需要播放的時候要及時釋放掉與 mediaplayer 對象相連接的播放文件7。圖 2-2 顯示了一個 mediaplayer 對象被支持的播放控制操作驅動的生命周期和狀態(tài)。橢圓標識代表 mediaplayer 對象可能主流的狀態(tài)。由一個箭頭開始的弧線代表同步的方法調用,而以雙箭頭開頭的弧線代表異步調用方法。通過圖 2-2 可以知道一個 mediaplayer 對象有如下狀態(tài)。當一個

33、mediaplayer 對象被剛剛用 new 操作符創(chuàng)建或是調用了 reset()方法后,它就處于 idle 狀態(tài)。當調用了 release()方法后,它就處于 end 狀態(tài)。這兩種狀態(tài)之間的時間是mediaplayer 對象的生命周期。在一個新構建的 mediaplayer 對象和一個調用了 reset()方法的 mediaplayer 對象之間有個微笑但十分重要的差別。在 idle 狀態(tài)時,調用 getcurrentposition()、getduration()、getvideoheight()、getvideowidth()、setaudiostreamtype(int)、setloo

34、ping(boolean)、setvolume(float,float)、pause()、start()、stop()、seekto(int)、prepare()或者是 prepareasync()方法都是編程錯誤。當一個 mediaplayer 對象處于剛被創(chuàng)建的時候,內部的播放引擎和對象的狀態(tài)都沒有改變,在這個時候調用以上方法,框架將無法回調客戶端程序注冊的onerrorlistener.onerror()方法;但若這個 mediaplayer 對象調用了 reset()方法之后,再調用以上方法,內部的播放引擎就會回調客戶端注冊的 onerrorlistener.onerror()方法,并

35、將錯誤的狀態(tài)傳入。圖 2-2 mediaplayer 對象狀態(tài)所以,一旦一個 mediaplayer 對象不再被使用,應立即調用 release()方法來釋放咋內部的播放引擎中與這個 mediaplayer 對象關聯(lián)的資源。資源可能包括如硬件加速組件的單態(tài)組件,若沒有調用 release()方法可能會導致之后 dmediaplayer 對象實例無法使用這個單態(tài)硬件資源,從而運行失敗。一旦 mediaplayer 對象進入了 end 狀態(tài),它不能再被使用,也沒有辦法遷移到其他狀態(tài)8。此外,使用 new 創(chuàng)建的 mediaplayer 對象處于 idle 狀態(tài),而那些通過重載的 create()便

36、利方法創(chuàng)建 的 mediaplayer 對象卻不是處于 idle 狀態(tài)。事實上,如果成功調用了重載的 create()方法,那么這些對象已經是處于 prepare 狀態(tài)了。在一般情況下,由于種種原因,一些播放控制操作可能會失敗,如不支持視頻格式,缺少隔行掃描,分辨率過高,流超時等等。因此,錯誤報告和回復在這種情況下是非常重要的。有時,由于編程的錯誤,在處于無效狀態(tài)的情況下調用了一個播放控制操作可能發(fā)生。在所有可能的錯誤條件下,內部的播放器引擎會自動的調用一個由程序自身所提供的onerrorlistener.onerror()方法。程序可以通過調用 mediaplayer.setonerrorl

37、istener()方法來注冊 onerrorlistener。如一旦發(fā)生錯誤,mediaplayer 對象會進入到 error 狀態(tài)。為了重用一個處于 error 狀態(tài)的 mediaplayer 對象,可以調用 reset()方法把這個對象恢復成 idle 狀態(tài)。注冊一個 onerrorlistener 獲知內部播放心情發(fā)生的錯誤時良好的編程習慣。在不合法的狀態(tài)下調用一些方法,如 prepare()、prepareasync()和 setdatasource()方法等會拋出illegalstateexception 異常。調用 setdatasource(filedescription)方法、

38、setdatasource(string)方法、或者是setdatasource(uri)方法、setdatasource(filedescriptor,long,long)方法,便可以使 mediaplayer對象從 idle 狀態(tài)遷移到 initialized 狀態(tài)。若此時 mediaplayer 對象處于其他狀態(tài)下,調用setdatasource()方法會拋出 illegalstateexception 異常。在開始播放前,mediaplayer 對象必須進入 prepared 狀態(tài)。在此有兩種方法(同步和異步)可以實現(xiàn)。調用 prepare()方法(同步),此方法返回表示 mediap

39、layer 對象已經進入 prepared狀態(tài)。調用 prepareasync()方法(異步) ,此方法返回表示 mediaplayer 對象進入 preparing 狀態(tài)并返回,而內部的播放引擎繼續(xù)未完成的準備工作。在開始播放時,必須調用 start()方法。當方法返回成功時,mediaplayer 對象應當處于started 狀態(tài)。isplaying()方法可以被調用來測試某個 mediaplayer 對象是否處于 started 狀態(tài)。播放可以被暫停、停止,以及調整當前的播放位置。pause()方法可以是 mediaplayer 對象進入 paused 狀態(tài)。注意 started 狀態(tài)和

40、 paused 狀態(tài)的相互轉換在內部播放引擎中是異步的。所以可能需要一點時間在 isplaying()方法中更新狀態(tài)。調用 stop()方法會停止播放,并且還會讓一個處于 started、paused、prepared 狀態(tài)的mediaplayer 對象進入 stopped 狀態(tài)。對一個已經處于 stopped 狀態(tài)的 mediaplayer 對象的stop()方法沒有影響。調用 seekto()方法可以調整播放的位置。seekto(int)方法是異步執(zhí)行的,所以它可以馬上返回,但是實際的定位播放操作可能需要一段時間才能完成,尤其是播放流形式的音頻/視頻。當實際的定位操作完成之后,內部播放引擎

41、會調用程序提供的 onseekcomplete()回調方法。在此需要注意的是,seekto(int)方法也可以在其他狀態(tài)下調用,比如prepared、paused 和 playbackcompleted 狀態(tài)。此外,當前的音頻/視頻播放位置,實際上可以調用 getcurrentposition()方法來得到,它可以幫助播發(fā)器的應用程序不斷更新播放進度。當播放到流的末尾時完成播放。如果調用 setlooping(boolean)方法開啟了循環(huán)模式,那么這個 mediaplayer 對象會重新進入 started 狀態(tài)。如果沒有開啟循環(huán)模式,那么內部播放引擎會調用 oncompletion.onc

42、ompletion()回調方法。一旦調用了該方法,說明這個mediaplayer 對象進入了 playbackcompleted 狀態(tài)。此時可以再調用 start()方法來讓這個mediaplayer 對象進入 started 狀態(tài)6。2.2.3 surface、surfaceview、surfaceholder 三者之間的關系(1) surfacesurface 就是“表面”的意思。在 sdk 的文檔中,對 surface 的描述是這樣的:“handle onto a raw buffer that is being managed by the screen compositor”,翻譯成

43、中文就是“由屏幕顯示內容合成器(screen compositor)所管理的原生緩沖器的句柄”,這句話包括下面兩個意思:通過 surface(因為 surface 是句柄)就可以獲得原生緩沖器以及其中的內容。就像在 c 語言中,可以通過一個文件的句柄,就可以獲得文件的內容一樣;原生緩沖器(rawbuffer)是用于保存當前窗口的像素數(shù)據(jù)的。引伸地,可以認為 android 中的 surface 就是一個用來畫圖形(graphics)或圖像(image)的地方。根據(jù) java 方面的常規(guī)知識,我們知道通常畫圖是在一個 canvas 對象上面進行的,由此,可以推知一個 surface 對象中應該包

44、含有一個 canvas 對象,事實上的確如此,而且這一點可以很容易通過 debug 運行程序的方式得到證明。surface中有一個 canvas 成員,專門用于畫圖的。所以,surface 中的 canvas 成員,是專門用于供程序員畫圖的場所,就像黑板一樣;其中的原生緩沖器是用來保存數(shù)據(jù)的地方;surface 本身的作用類似一個句柄,得到了這個句柄就可以得到其中的 canvas、原生緩沖器以及其它方面的內容3。(2) surfaceviewsurfaceview,顧名思義就是 surface 的 view,通過 surfaceview 就可以看到 surface 的部分或者全部的內容,下面用

45、一個圖來形象地描述一下 surface 和 surfaceview 的關系:圖 2-3 surface 與 surfaceview也就是說,surface 是用通過 surfaceview 才能展示其中的內容。由此來說,surfaceview 中的 view 之確切的含義應該是 viewport 即“視口”的意思,類似數(shù)據(jù)庫的設計,假定一個數(shù)據(jù)表有 20 個字段,但我們常常只用到其中的 5 個字段,那么就可以在原數(shù)據(jù)表的基礎上,通過 sql 語句 createview 來創(chuàng)建只包含那 5 個字段內容的 view。另一方面,surfaceview 是 android 中 view 的子類。事實上

46、,在 android 中所有用于界面展示的類皆為 view 的子類,包括那些不可見的、各種各樣的 layout。所以說,surfaceview 中的view 有兩個含義:視口(viewport)的意思和 surfaceview 是 view 的派生類在 android 中surface 是從 object 派生而來,且實現(xiàn)了 parcelable 接口??吹?parcelable 就讓人能很自然地想到數(shù)據(jù)容器,surfaceview 就是用來展示 surface 中的數(shù)據(jù)的。在這個層面上而言,surface就是管理數(shù)據(jù)的地方,surfaceview 就是展示數(shù)據(jù)的地方3。(3)surfaceh

47、oldersurfaceholder 是一個接口,其作用就像一個關于 surface 的監(jiān)聽器。提供訪問和控制surfaceview 背后的 surface 相關的方法 (providingaccess and control over this surfaceviews underlying surface) ,它通過三個回調方法,讓我們可以感知到 surface 的創(chuàng)建、銷毀或者改變。在 surfaceview 中有一個方法 getholder,可以很方便地獲得 surfaceview 所對應的surface 所對應的 surfaceholder。從設計模式的高度來看,surface、su

48、rfaceview 和 surfaceholder 實質上就是廣為人知的mvc,即 model-view-controller。model 就是模型的意思,或者說是數(shù)據(jù)模型,或者更簡單地說就是數(shù)據(jù),也就是這里的 surface;view 即視圖,代表用戶交互界面,也就是這里的surfaceview;surfaceholder 很明顯可以理解為 mvc 中的 controller(控制器) 。這樣看起來三者之間的關系就清楚了很多9。第三章第三章 系統(tǒng)分析及系統(tǒng)結構設計與實現(xiàn)系統(tǒng)分析及系統(tǒng)結構設計與實現(xiàn)3.1 系統(tǒng)分析系統(tǒng)分析3.1.1 系統(tǒng)可行性分析可行性研究是為了弄清楚系統(tǒng)開發(fā)的項目是不是可以

49、實現(xiàn)和值得進行研究的過程,實際上是一次大大簡化系統(tǒng)分析和系統(tǒng)設計的過程,所以,進行可執(zhí)行性的分析是非常必要的,也是很重要的,經過最初的設計目標和進行的實時調查得出以下四點的可行性分析:(1)技術可行性:eclipse + android adt 的技術已經較為成熟,通過 sun 公司(現(xiàn)被orcel 公司收購)推出的跨平臺、動態(tài)的 java 語言進行開發(fā)。(2)運行可行性:該系統(tǒng)需要 android 虛擬機環(huán)境,eclipse 中安裝 adt,ddms 等google android 相關插件。其運行環(huán)境已經相當穩(wěn)定,它功能豐富,包括了完備的 android程序的編碼、調試、測試和發(fā)布功能,其

50、中支持所有 android 應用開發(fā)相關技術,包括sqlite,skia,3d 制作,android xml,能夠很好的發(fā)布 android 的應用程序 apk 包。(3)法律可行性:因為是自主開發(fā)設計,所以不會構成侵權,在法律上是可行的。通過以上的可行性分析,將采用 eclipse+android adt + ddms 技術,運用 java 語言進行系統(tǒng)的開發(fā)。3.1.2 系統(tǒng)需求分析根據(jù)分析需求,這個系統(tǒng)必須實現(xiàn)以下的功能:(1) 實現(xiàn)手機支持的視頻格式文件的播放功能。作為播放器,其核心就是能夠流暢的播放視頻文件。手機一般不會支持對解碼要求太高的格式,如 rmvb。作為手機硬件能夠承載的視

51、頻流文件,都應當能夠流暢的播放。(2) 能夠在手機里面定位視頻文件。在本播放器設計中,一個亮點就是自定義一個文件列表,能夠訪問手機里面任何能夠進入的文件。這樣,也就能夠不需要將視頻文件放在一個系統(tǒng)固定的位置,您可以自己新建一個存放視頻文件的文件夾,放在任何你想要放的地方。這樣,需要播放你的視頻文件的時候,直接定位再好不過。(3) 能夠智能搜索出所有 android sdcard 中的視頻文件。做視頻的智能搜索,也是能夠快速定位位于 sdcard 中的視頻文件的另一個快捷的方法。在智能搜索設計中,通過 mediascanner 進行 sdcard 中的所有視頻文件的掃描,包括自動搜索和手動添加。

52、同時,將其顯示到界面。一般,當手機中存放的視頻文件過多,但對于新添加的視頻文件位置很清楚時,選擇手都添加比較好。(4) 能夠對視頻文件常規(guī)信息信息進行讀取。當播放視頻文件時,視頻名稱、視頻時間長度等信息顯示在屏幕相應位置。3.2 系統(tǒng)結構設計系統(tǒng)結構設計本次課題設計的 android 視頻播放器應用程序組要由 4 個 activity 組成,分別是mediaplayer activity,medialist activity,filechooser activity,updatemedialist activity。每一個 activity 實現(xiàn)相應部分的功能,每一個 activity 對應有

53、一個或多個.xml 的布局文件。在布局文件中,添加用來實現(xiàn)相應部分功能的各種控件。如圖 3-1 所示。圖 3-1 系統(tǒng)結構框圖(1) meidaplayeractivity mediaplayeractivity 中包含的控件數(shù)量最多,與用戶打交道也最為廣泛,每個控件都對應有各自的功能,如圖 3-2 所示。圖 3-2 mediaplayeractivity 控件分布第一行中:checkbutton,查看列表按鈕。按下此按鈕之后,顯示手機中存在的視頻文件,并以列表的形式顯示顯示在手機屏幕上。關于視頻文件的列表的顯示,在medialistactivity 中實現(xiàn)。chooserbutton,添加視

54、頻按鈕。按下此按鈕之后,手機屏幕將顯示 sdcard 中文件列表,通過瀏覽不同路徑,添加所需的視頻文件至視頻列表中。imagebutton,之后的三個 imagebutton 分別是 volumebutton,upbutton,downbutton,即聲音按鈕,加大音量按鈕,減小音量按鈕。第二行中:textview,文本視圖控件。前一個 textview 用來顯示“視頻文件:” ,即一個提示信息;后一個 textview 用來顯示正播放的視頻文件的名稱。然后是 imagebutton 控件,這里添加一個聲音的小圖標。最后是一個 progressbar 控件,該控件是一個進度條。當我們加大或者減

55、小音量時,該進度條會相應的發(fā)生變化。第三行中:一個 surfaceview 控件加上一個 imageview 控件。surfaceview 用來將視頻畫面投放到手機屏幕上,而 imageview 用來顯示視頻是否處于播放狀態(tài)。即當暫停視頻播放時,imageview 處于 visible(可見)狀態(tài),當繼續(xù)之前暫停的視頻播放時,imageview 處于invisible(不可見)狀態(tài)。第四行中:兩個 textview 分別用來顯示當前正雜播放的視頻的時間信息,前者顯示當前播放時間長度,后者顯示視頻文件的最大時間長度。第五行中:seekbar,另一種進度條,隨著視頻播放進度而變化。第六行中:六個

56、imagebutton 控件,分別為play,pause,reset,stop,last,next,即播放按鈕,暫停按鈕,重置按鈕,停止按鈕,上一個按鈕,下一個按鈕。(2) medialistactivity接下來是 medialistactivity。該 activity 引用的是 medialist.xml 布局文件。由于只需要顯示視頻文件列表,所以在 medialist.xml 布局文件中只添加了一個 listview 控件用來實現(xiàn)視頻列表的顯示功能,如圖 3-3 所示。圖 3-3 medialist(3) filechooseractivity然后是 filechooseractivi

57、ty,當按下添加視頻 button 時,由 mediaplayeractivity 跳轉到此 activity,并根據(jù)用戶操作來完成添加視頻文件的操作。該 activity 引用 fileselect.xml 布局文件。該布局文件中包含一個 textview,一個 listview,和兩個 button 控件。textview 用來顯示當前正在瀏覽的路徑,listview 用來顯示當前路徑下存在的文件或者文件夾。當選中視頻文件后,單擊確認 button 即可。若不打算添加,則取消即可,如圖3-4 所示。圖 3-4filechooseractivity 布局(4) updatemedialist

58、activity最后是 updatemedialistactivity。當用戶通過 menu 菜單點擊“更新列表”選項時,程序跳轉到此 activity。該 activity 引用 updatelist.xml 布局文件。該布局文件中也僅僅只包含一個 listview 控件,用來顯示更新選項。如圖 3-5 所示。圖 3-5 更新列表第四章第四章 測試測試4.1 測試環(huán)境和條件測試環(huán)境和條件本次軟件測試環(huán)境在 avd(android virtual device)和真機中測試。真機硬件配置:手機型號:zte v889d;android 版本;4.0.4;內核版本號:3.0.8-perf-svn2

59、2921zte-kernelzdroid-smt;ram:512m;cpu:800mhz。4.2 測試測試系統(tǒng)運行的流程如下運行程序后,首先進入的是主 activity,即 mediaplayer activity。如圖 4-1。圖 4-1 程序運行時主界面當點擊菜單 menu 時,會出現(xiàn)三個選項:播放列表,更新列表,退出。如圖 4-2 所示。圖 4-2 菜單選項選擇更新列表操作,進入 updatemedialist activity,如圖 4-3 所示。圖 4-3 更新列表操作單擊選擇自動搜索,程序自行掃描 sdcard 中的文件,并將掃描到的視頻文件添加到視頻列表中去。如圖 4-4 和圖

60、4-5 所示。圖 4-4 自動搜索視頻文件圖 4-5 自動更新結果搜索完成后點擊產看列表查看視頻文件列表,也可以通過菜單中的播放列表選項查看。查看結果如圖 4-6 所示。圖 4-6 查看視頻文件列表在更新列表界面下,用戶也可以通過手動添加來添加視頻文件。如圖 4-7 所示,被選中的視頻文件會被打上對勾,以表示選中。圖 4-7 手動添加視頻文件單擊確定按鈕完成添加。添加后顯示圖 4-8。圖 4-8 添加視頻文件完成接下來從視頻列表中選擇一個視頻文件來播放。如圖 4-9 所示。圖 4-9 播放視頻文件由上圖可知,視頻播放時,可以獲得一些視頻文件信息。如視頻名稱,播放進度,視頻時長,視頻后綴名。當按下暫停按

溫馨提示

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

評論

0/150

提交評論