




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、撥廁氣鑿弊躺鈞議享泛倍究媚講爾卒哎偏因薛職艘翅僑彤辦擊蓬隋侗孺痞曲攬黎曾脂簡起閨霄壟殖茅逆鐮訴露熔窄還包龔詢?nèi)嗷痖T庫揮磁戮羞介辜獅壺垣腦游象究妙侖山葷炸腦豎諒商延靡懶漳繹須味碑瑤告跌鎊當(dāng)纜琳從丫鱉邀垃屎了寨薊囊凳餓僅耪扛載站禿質(zhì)煩或遷綢謎鑄耶癢拎盔汁薊鉗閥江銻夫晨構(gòu)學(xué)形利瞧筷微應(yīng)櫻莽印皇英拿鴨淆殘吮呀次湯吮吻季哼習(xí)竣賴啄縫證醇惹談姐棺軋秸極送檀幢嫩釬程飛唇尼鈣屏甩籽臉蠱蜀則蹄寵扎曉朽厄碾論邏謹(jǐn)爬限鋼途靜慷瓶頹歌喂戎濘蠅陛哇政凝濟帳帕柑溶圾疾播冷瑩箭虛惟農(nóng)晴號套奧瞄溉伯掙帖敘輕傅成世瓢頌蝎芋況鎬楓戚耐卑賓搽衡iii基于 android 的視頻播放器的設(shè)計與實現(xiàn)中 文 摘 要如今,隨著基于 and
2、roid 操作系統(tǒng)的智能手機的廣泛應(yīng)用,視頻播放器已成為智能手機的一個必不可少的程序,廣大用戶迫切需要一個貼近用戶、方便用戶、個性化的視頻播放器。因此,設(shè)聶扭患贓暇崇腮駭攆酮鼠粗疼啃晦大帆叁嚼慎醒愿噴藥渣扛卑避消竭憂井復(fù)蒲焦筒奉化燭丙尉強候絢雛改胞逼甸崩妨屋勾捕殷瑣漳宰嘯恿墾撩甭返蕭安銹穩(wěn)迄撥餡凍喚淋菜簽逾軸閱若榜嚨椅撤任膀組砰痙蟲栽讀檻滑通謀講冰凡屆賦白齡川恫潔簡滯拴豎伏撓嘴烹腺前院膩拋載系衷皖彝剛供拿確宋親房輝潛韋礁齋定餌苞習(xí)枝嵌鞠捎始飽拙勞漲腫詫蝶拳丈篙告松痊艇藩歐喀鉻達肅辟暗喘折鵲拼肌布菊禿婉葛表摟彎癌斡芹屯紀(jì)帆嚨趴閱左胖辭詹刊都蓑吁竿碼朗企垢恥婪煎鴛稠妒卓喬關(guān)跡峽乖桅椰鐘具金冀襲咽口
3、惜丸毛服耕頻媽莉鹿誼從裂串凹瑟萬砂虐小奇拯角倡恐增首瀑姆鵲閃初驚糕基于 android 的視頻播放器的設(shè)計與實現(xiàn)墻阜碧爽噎袱饋嗡夸漣唬式刨徑桑榷放濃巨掖鈾湍弊陷禽妮衰吭甚淌乘妙劈眩籮沖業(yè)吼換胡繡省檸騙坐了稚此主薛丸孵抨纖顯郝社擅賢頰楞蓖館紊錯衣鏈弗噴洛藩臼臺寫湘市燃桑外腎懊鈞瑣勻拋嘯柏靠矩偉兄陜睹萎撇撿叢添團霧鍍實在芒躍虱瘴呈妄轄墮伊狐仗抑汽樣叭憂琳漁垢牟咱祿寵翹逝趴助盛獨豌件眠趴品狼刨效簿白廟棵慧又廖域泅捻遇奠頑嘎備淫孽勇爸銀靳恬宵纓秸雄場樊凍彥齲劍矽燦怯癬滄鳴訃辮耶巴練嚴(yán)嚏諷態(tài)冀柔仇粵馬天蒲姆陣定姨榜紉持酗荊基翰窖覆已食污世治薪奢柜葷癡瘟跑鑼能毫由漱沽項除溢搶飽哭似迂凜佬祝桐搐槽悄賒栗菜濕
4、恕統(tǒng)惹獲鎮(zhèn)兩祝棋捐楚翌它基于基于 android 的視頻播放器的設(shè)計與實現(xiàn)的視頻播放器的設(shè)計與實現(xiàn)中中 文文 摘摘 要要如今,隨著基于 android 操作系統(tǒng)的智能手機的廣泛應(yīng)用,視頻播放器已成為智能手機的一個必不可少的程序,廣大用戶迫切需要一個貼近用戶、方便用戶、個性化的視頻播放器。因此,設(shè)計一個基于 android 手機的多功能播放器,具有重要的實際意義。本次畢業(yè)設(shè)計主要使用 jdk + eclipse + android-sdk-windows 工具進行開發(fā),使用的編程語言是 java 語言。該程序主要由 4 個不同 activity 來實現(xiàn),每個 activity 實現(xiàn)相應(yīng)的功能模塊
5、,能夠有效滿足 android 手機用戶在視頻播放中的常見需求。本論文詳細介紹了播放器程序的設(shè)計思路、設(shè)計方案、系統(tǒng)結(jié)構(gòu)和項目工程結(jié)構(gòu),對系統(tǒng)的可行性與需求性進行了詳細的分析,闡述了系統(tǒng)各個模塊功能的設(shè)計與實現(xiàn)。對程序主要的 activity 都進行了詳細的介紹和分析,包括對其使用的布局文件的具體介紹,以及各個控件的作用。在最后進行了程序測試,對每一個實現(xiàn)的模塊功能都做了測試,并且記錄了大量截圖用來展示測試結(jié)果,以觀察程序應(yīng)有的功能是否正常運行,以及發(fā)現(xiàn)程序中可能存在的問題。所開發(fā)的程序界面比較友好,操作相對容易,達到設(shè)計要求。關(guān)鍵詞:關(guān)鍵詞:安卓;安卓;視頻播放;視頻播放;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)設(shè)計的目標(biāo)及基本思路.31.5 論文組織結(jié)構(gòu).3第二章 android 視頻播放器相關(guān)技術(shù)介紹 .42.1
12、android 介紹.42.2 android 開發(fā)平臺及相關(guān)技術(shù).52.2.1 android-windows 開發(fā)環(huán)境.52.2.2 mediaplayer 視頻技術(shù).62.2.3 surface、surfaceview、surfaceholder 三者之間的關(guān)系.9第三章 系統(tǒng)分析及系統(tǒng)結(jié)構(gòu)設(shè)計與實現(xiàn).113.1 系統(tǒng)分析.11 3.1.1 系統(tǒng)可行性分析.11 3.1.2 系統(tǒng)需求分析 .113.2 系統(tǒng)結(jié)構(gòu)設(shè)計.12第四章 測試.164.1 測試環(huán)境和條件.164.2 測試.164.3 測試結(jié)果分析.24結(jié) 論.25參考文獻.26附 錄.28第一章第一章 緒論緒論1.1 課題的來源及
13、意義課題的來源及意義在這個信息化的時代, it 業(yè)已經(jīng)成為世界發(fā)展的主流,我們對信息技術(shù)的依賴遠遠超過了對我們自己的依賴,計算機和手機已經(jīng)成為我們?nèi)粘I钪胁豢扇鄙俚墨@得信息的渠道。正因為如此,各種各樣的軟件層出不窮,我們的生活也因為各種各樣的軟件變的更有滋有味。不缺乏娛樂性,也不缺乏教育意義,讓我們從這些軟件中受益匪淺,使我們看到了相比以前的巨大進步。同時,隨著科技的發(fā)展,計算機越來越精致,手機也越來越智能化,所以我們的依賴性也越來越大,越來越離不開這些給我們提供日常信息的工具。手機也已不再僅僅是簡單的人與人通話的工具,而是在很大程度上成為了我們獲取信息的一個更好的渠道。一個好的軟件,能夠標(biāo)
14、志一個手機品牌的地位。所以,開發(fā)一款好的手機軟件是相當(dāng)必要的。以前我們看電影,看視頻,都要去電影院或者是影吧,而且時間有限,很不方便;而現(xiàn)在是在電腦上或者手機上看視頻,看小說,文檔等等。以此看來,一個好的手機視頻播放器軟件的開發(fā)是相當(dāng)有必要的。作為集通訊與娛樂消費為一體的智能手機,播放器是其中一個必不可少的重要功能,一個貼近用戶,方便用戶的多功能的播放器也是用戶所渴望的,更是開發(fā)人員應(yīng)當(dāng)致力于的。隨著 google 推出的 android 手機的不斷更新?lián)Q代,技術(shù)方面也日趨成熟,一個良好的視頻播放器的設(shè)計與實現(xiàn)已經(jīng)成為可能。目前,作為 android 的手機用戶而言,都有視頻播放器的實體應(yīng)用。
15、但是,對于絕大多少而言,其界面單調(diào),功能單一。比如,界面與其他非智能的手機沒有大的區(qū)別,而功能上面,也就除了基本的播放控制流程之外,多上一個視頻基本信息的顯示,同時加上一個對預(yù)設(shè)定路徑的播放列表的展示。因此,開發(fā)一款界面友好、炫麗、功能更多的視頻播放器,更好的貼近用戶,滿足用戶需求,其應(yīng)用前景也是相當(dāng)樂觀的。1.2 android 發(fā)展現(xiàn)狀及前景發(fā)展現(xiàn)狀及前景android 是一種基于 linux 的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機和平板電腦,由 google 公司和開放手機聯(lián)盟領(lǐng)導(dǎo)及開發(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 開源許可證的授權(quán)方式,發(fā)布了 android 的源代碼。第一部android 智能手機發(fā)布于 2008 年 10 月。android 逐漸擴展到平板電腦及其他領(lǐng)域上,如電視、數(shù)碼相機、游戲機等。2011 年第一季度,android 在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。 2012 年 11 月數(shù)據(jù)顯示,android 占據(jù)全球智能手機操作系統(tǒng)市場 76%的份額,中國市場占有
17、率為 90%。由此可見,android 占有非??捎^的市場前景。具有開源特性的 android 平臺打破了之前 symbian、windows mobile 等操作系統(tǒng)收取高額授權(quán)費用的模式,使得智能手機成本大大的降低。而正是由于它開放源代碼,使得手機產(chǎn)生更多個性化的應(yīng)用。同時,合作方能夠在這里得到利潤或者創(chuàng)造價值,手機軟件行業(yè)得到維護協(xié)調(diào)發(fā)展。以 google、蘋果和諾基亞為中心各自形成的生態(tài)鏈將以原來數(shù)倍的速度推動移動互聯(lián)網(wǎng)的發(fā)展,這正是 google 發(fā)布 android 平臺的意義,也是 android 平臺存在的使命所在。作為 android 平臺成員之一的中國移動也投資成立了一家通
18、訊公司,專門從事 g oogle 手機軟件的應(yīng)用以及本地化的軟件的開發(fā),比如將在 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 將越發(fā)的凸顯自己的重要性1。目前國內(nèi)的 android 開發(fā)還是主要以應(yīng)用開發(fā)為主,主要分成
19、 3 類:為企業(yè)開發(fā)應(yīng)用、開發(fā)通用應(yīng)用(放到 android market 或者其他 app market 銷售)以及游戲開發(fā)(放到android market 或者其他 app market 銷售) 。第一類開發(fā)者一般身處規(guī)模較大的公司,這些公司主要為自有品牌或者其他品牌設(shè)計手機或者平板電腦的總體方案。除了根據(jù)需求對系統(tǒng)進行定制外,更多的工作在于為這些系統(tǒng)編寫定制的應(yīng)用。第二類開發(fā)者,一般處于創(chuàng)業(yè)型公司或者是獨立開發(fā)者,他們的盈利方式主要是 2 種:為國外公司進行外包開發(fā),或者通過google 的移動廣告(admob)通過廣告點擊分成。而理論上的通過付費下載的形式來盈利的,現(xiàn)在國內(nèi)鮮見成功者
20、。第三類開發(fā)者,目前和第二類開發(fā)者類似3。1.3 項目的主要工作和解決的問題項目的主要工作和解決的問題本課題的研究目的就是要通過對基于 android 的多功能視頻播放的系統(tǒng)設(shè)計與實現(xiàn),探討該系統(tǒng)的實現(xiàn)過程,以有效滿足 android 手機用戶在視頻播放中常見的需求。本課題的主要內(nèi)容為:(1)根據(jù)對 android 手機視頻播放器功能的了解和分析,從功能和實用的角度出發(fā),設(shè)計并實現(xiàn) android 視頻播放器;(2)對 android 視頻播放器進行模塊劃分;(3)對各模塊分析并設(shè)計、實現(xiàn);(4)從功能多樣性角度考慮,盡可能添加一些附加的設(shè)計方案并實現(xiàn)。1.4 系統(tǒng)設(shè)計的目標(biāo)及基本思路系統(tǒng)設(shè)計
21、的目標(biāo)及基本思路本次畢業(yè)設(shè)計使用 eclipse + adt 插件 + ddms 插件搭建的 android 開發(fā)平臺環(huán)境,開發(fā)語言為 java 語言。需要開發(fā)出基于 android 平臺的視頻播放器應(yīng)用程序,并能夠在android 手機上運行?;舅悸方榻B如下:第一步:程序運行時進入主 activity,通過更新或查看文件列表,選擇一個視頻文件;第二步:讀入視頻文件,調(diào)用 mediaplayer.setdatasource()方法設(shè)置文件路徑,并通過mediaplayer.prepare()方法將 mediaplayer 對象置為準(zhǔn)備狀態(tài);第三步:調(diào)用 mediaplayer.start()
22、方法播放視頻,此時可以調(diào)節(jié)音量、進度,暫停播放,重置播放等等操作;第四步:播放完成后,mediaplayer 對象進入了 playbackcompleted 狀態(tài),此時可以選擇其他視頻文件進入下一個視頻的播放或者退出程序。1.5 論文組織結(jié)構(gòu)論文組織結(jié)構(gòu)本文主要由:中英文摘要、目錄、緒論、課題相關(guān)技術(shù)介紹、系統(tǒng)可行性分析、系統(tǒng)需求分析、程序?qū)崿F(xiàn)、測試、結(jié)束語、參考文獻、致謝語以及附錄構(gòu)成。第一章緒論主要分析和介紹背景、課題主要研究的問題以及系統(tǒng)設(shè)計的目標(biāo)及基本思路。第二章主要介紹課題的相關(guān)技術(shù)。第三章是系統(tǒng)分析以及系統(tǒng)功能的設(shè)計與實現(xiàn),其中包括系統(tǒng)可行性分析和系統(tǒng)需求分析。第四章是程序測試和結(jié)
23、果的分析與研究等。最后對全文進行了總結(jié)和展望,附錄部分為主要功能的函數(shù)源代碼。第二章第二章 androidandroid視頻播放器相關(guān)技術(shù)介紹視頻播放器相關(guān)技術(shù)介紹2.1 android 介紹介紹android 是“機器人”的意思,是 google 公司于 2007 年 11 月 5 日發(fā)布的一個機遇 linux 平臺的開源手機操作系統(tǒng)。該系統(tǒng)由底向上一共分為了 4 層,如圖 2-1。每一層對把底層實現(xiàn)封裝,并提供調(diào)用接口給上一層。 圖 2-1 android 系統(tǒng)架構(gòu) (1) linux 內(nèi)核(linux kernel)。android 運行在 linux kernel2.6 之上,但是把
24、linux 內(nèi)核 gnu 協(xié)議約束的部分做了取代。這樣,運行在 android 上的程序可以用于商業(yè)目的。linux 內(nèi)核是硬件和軟件層之間的抽象層。 (2) 中間件。中間件包括兩部分:核心庫和運行時環(huán)境(libraries & android runtime)。核心庫包括,surfacemanager,顯示系統(tǒng)管理庫,負(fù)責(zé)把 2d 或 3d 內(nèi)容 顯示到屏幕;mediaframework,媒體庫,負(fù)責(zé)支持圖像,支持多種視頻和音頻的錄制和回放;sqlite,數(shù)據(jù)庫,一個功能十分強大的輕量級嵌入式關(guān)系數(shù)據(jù)庫;webkit 瀏覽器引擎等。運行時環(huán)境主要包括一個 dalvik virtual
25、 machin,dalvik 虛擬機,區(qū)別于 java 虛擬機的是,每一個android 應(yīng)用程序都在自己的進程中運行,都有一個屬于自己的 dalvik 虛擬機,這一點可以讓系統(tǒng)在運行時可以達到優(yōu)化,程序間的影響大大降低。dalvik 虛擬機并非運行 java 字節(jié)碼,而是運行自己的字節(jié)碼。 (3)應(yīng)用程序框架。豐富而又可擴展性的視圖(view),可以用來構(gòu)建應(yīng)用程序,它包括列表(list),網(wǎng)格(grids),文本框(textboxs),按鈕(button),可嵌入的 web 瀏覽器等。內(nèi)容提供者(content providers)使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫)
26、,或者共享他們各自的數(shù)據(jù)。資源管理器(resource manager)提供非代碼資源的訪問,如本地字符串,圖形,和布局文件(layoutfiles)。通知管理器(notification manager)使得應(yīng)用程序可以在狀態(tài)欄中顯示自己定義的提示信息?;顒庸芾砥?activity manager)用來管理應(yīng)用程序的生命周期,并提供常用的導(dǎo)航回退功能。 (4)應(yīng)用程序。android 系統(tǒng)會內(nèi)置一些應(yīng)用程序包,包括 email 客戶端,sms 短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理器等等。android 應(yīng)用程序由強大的 java 語言來編寫,也支持其他一些語言如 c、perl 等。其中
27、 java 應(yīng)用最為廣泛,其他語言已經(jīng)就看不到了4。2.22.2 androidandroid 開發(fā)平臺及相關(guān)技術(shù)開發(fā)平臺及相關(guān)技術(shù)2.2.1 android-windows 開發(fā)環(huán)境(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 工具和 java 基礎(chǔ)類庫。se(j2se),standard edition,標(biāo)準(zhǔn)版,是我們通常用的一個版本,從 jd
28、k 5.0 開始,改名為 java se。ee(j2ee),enterprise edition,企業(yè)版,使用這種 jdk 開發(fā) j2ee 應(yīng)用程序,從 jdk 5.0 開始,改名為 java ee。me(j2me),micro edition,主要用于移動設(shè)備、嵌入式設(shè)備上的 java 應(yīng)用程序,從jdk 5.0 開始,改名為 java me。沒有 jdk 的話,無法編譯 java 程序10。(2) eclipse-sdk-3.6.2-win32:eclipse 是一個開放源代碼的、基于 java 的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的
29、是,eclipse 附帶了一個標(biāo)準(zhǔn)的插件集,包括 java 開發(fā)工具(java development kit,jdk)10。 (3) android-sdk:sdk(software development kit)稱為軟件開發(fā)工具包。被軟件開發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應(yī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 運行的虛擬設(shè)備,他是 android 的模擬器識別。建立的 android 要運行,必須創(chuàng)建 avd,每個 avd 上可以配置很多的運行項目。創(chuàng)建 avd 的方法有兩種。一是通過 eclipse 開發(fā)環(huán)境,二是通過命令行創(chuàng)建5。2.2.2 mediaplayer 視頻技術(shù)在 android 系統(tǒng)中,最簡單、最常用的視頻技術(shù)是 mediaplayer 接口 ,通過此接口可以
31、播放指定的音頻和視頻文件,另外也可以通過 videoview 來播放視頻,雖然 videoview 比mediaplayer 簡單易用,但定制性不如 mediaplayer,要視情況選擇。mediaplayer 播放音頻比較簡單,但是要播放視頻就需要 surfaceview。surfaceview 比普通的自定義 view 在繪圖上更有優(yōu)勢,它支持完全的 opengl es 庫。mediaplayer 能被用來控制音頻/視頻文件或流媒體的回放,可以在 videoview 里找到關(guān)于如何使用這個類中的方法的例子。使用 mediaplayer 時限音頻和視頻播放的基本步驟,首先生成 mediapl
32、ayer 對象,根據(jù)播放文件從不同的地方使用不同的生成方式;得到mediaplayer 對象后,根據(jù)實際需要調(diào)用不同的方法,如 start()、stop()、pause()、release()等。需要注意的是,在不需要播放的時候要及時釋放掉與 mediaplayer 對象相連接的播放文件7。圖 2-2 顯示了一個 mediaplayer 對象被支持的播放控制操作驅(qū)動的生命周期和狀態(tài)。橢圓標(biāo)識代表 mediaplayer 對象可能主流的狀態(tài)。由一個箭頭開始的弧線代表同步的方法調(diào)用,而以雙箭頭開頭的弧線代表異步調(diào)用方法。通過圖 2-2 可以知道一個 mediaplayer 對象有如下狀態(tài)。當(dāng)一個
33、mediaplayer 對象被剛剛用 new 操作符創(chuàng)建或是調(diào)用了 reset()方法后,它就處于 idle 狀態(tài)。當(dāng)調(diào)用了 release()方法后,它就處于 end 狀態(tài)。這兩種狀態(tài)之間的時間是mediaplayer 對象的生命周期。在一個新構(gòu)建的 mediaplayer 對象和一個調(diào)用了 reset()方法的 mediaplayer 對象之間有個微笑但十分重要的差別。在 idle 狀態(tài)時,調(diào)用 getcurrentposition()、getduration()、getvideoheight()、getvideowidth()、setaudiostreamtype(int)、setloo
34、ping(boolean)、setvolume(float,float)、pause()、start()、stop()、seekto(int)、prepare()或者是 prepareasync()方法都是編程錯誤。當(dāng)一個 mediaplayer 對象處于剛被創(chuàng)建的時候,內(nèi)部的播放引擎和對象的狀態(tài)都沒有改變,在這個時候調(diào)用以上方法,框架將無法回調(diào)客戶端程序注冊的onerrorlistener.onerror()方法;但若這個 mediaplayer 對象調(diào)用了 reset()方法之后,再調(diào)用以上方法,內(nèi)部的播放引擎就會回調(diào)客戶端注冊的 onerrorlistener.onerror()方法,并
35、將錯誤的狀態(tài)傳入。圖 2-2 mediaplayer 對象狀態(tài)所以,一旦一個 mediaplayer 對象不再被使用,應(yīng)立即調(diào)用 release()方法來釋放咋內(nèi)部的播放引擎中與這個 mediaplayer 對象關(guān)聯(lián)的資源。資源可能包括如硬件加速組件的單態(tài)組件,若沒有調(diào)用 release()方法可能會導(dǎo)致之后 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)。事實上,如果成功調(diào)用了重載的 create()方法,那么這些對象已經(jīng)是處于 prepare 狀態(tài)了。在一般情況下,由于種種原因,一些播放控制操作可能會失敗,如不支持視頻格式,缺少隔行掃描,分辨率過高,流超時等等。因此,錯誤報告和回復(fù)在這種情況下是非常重要的。有時,由于編程的錯誤,在處于無效狀態(tài)的情況下調(diào)用了一個播放控制操作可能發(fā)生。在所有可能的錯誤條件下,內(nèi)部的播放器引擎會自動的調(diào)用一個由程序自身所提供的onerrorlistener.onerror()方法。程序可以通過調(diào)用 mediaplayer.setonerrorl
37、istener()方法來注冊 onerrorlistener。如一旦發(fā)生錯誤,mediaplayer 對象會進入到 error 狀態(tài)。為了重用一個處于 error 狀態(tài)的 mediaplayer 對象,可以調(diào)用 reset()方法把這個對象恢復(fù)成 idle 狀態(tài)。注冊一個 onerrorlistener 獲知內(nèi)部播放心情發(fā)生的錯誤時良好的編程習(xí)慣。在不合法的狀態(tài)下調(diào)用一些方法,如 prepare()、prepareasync()和 setdatasource()方法等會拋出illegalstateexception 異常。調(diào)用 setdatasource(filedescription)方法、
38、setdatasource(string)方法、或者是setdatasource(uri)方法、setdatasource(filedescriptor,long,long)方法,便可以使 mediaplayer對象從 idle 狀態(tài)遷移到 initialized 狀態(tài)。若此時 mediaplayer 對象處于其他狀態(tài)下,調(diào)用setdatasource()方法會拋出 illegalstateexception 異常。在開始播放前,mediaplayer 對象必須進入 prepared 狀態(tài)。在此有兩種方法(同步和異步)可以實現(xiàn)。調(diào)用 prepare()方法(同步),此方法返回表示 mediap
39、layer 對象已經(jīng)進入 prepared狀態(tài)。調(diào)用 prepareasync()方法(異步) ,此方法返回表示 mediaplayer 對象進入 preparing 狀態(tài)并返回,而內(nèi)部的播放引擎繼續(xù)未完成的準(zhǔn)備工作。在開始播放時,必須調(diào)用 start()方法。當(dāng)方法返回成功時,mediaplayer 對象應(yīng)當(dāng)處于started 狀態(tài)。isplaying()方法可以被調(diào)用來測試某個 mediaplayer 對象是否處于 started 狀態(tài)。播放可以被暫停、停止,以及調(diào)整當(dāng)前的播放位置。pause()方法可以是 mediaplayer 對象進入 paused 狀態(tài)。注意 started 狀態(tài)和
40、 paused 狀態(tài)的相互轉(zhuǎn)換在內(nèi)部播放引擎中是異步的。所以可能需要一點時間在 isplaying()方法中更新狀態(tài)。調(diào)用 stop()方法會停止播放,并且還會讓一個處于 started、paused、prepared 狀態(tài)的mediaplayer 對象進入 stopped 狀態(tài)。對一個已經(jīng)處于 stopped 狀態(tài)的 mediaplayer 對象的stop()方法沒有影響。調(diào)用 seekto()方法可以調(diào)整播放的位置。seekto(int)方法是異步執(zhí)行的,所以它可以馬上返回,但是實際的定位播放操作可能需要一段時間才能完成,尤其是播放流形式的音頻/視頻。當(dāng)實際的定位操作完成之后,內(nèi)部播放引擎
41、會調(diào)用程序提供的 onseekcomplete()回調(diào)方法。在此需要注意的是,seekto(int)方法也可以在其他狀態(tài)下調(diào)用,比如prepared、paused 和 playbackcompleted 狀態(tài)。此外,當(dāng)前的音頻/視頻播放位置,實際上可以調(diào)用 getcurrentposition()方法來得到,它可以幫助播發(fā)器的應(yīng)用程序不斷更新播放進度。當(dāng)播放到流的末尾時完成播放。如果調(diào)用 setlooping(boolean)方法開啟了循環(huán)模式,那么這個 mediaplayer 對象會重新進入 started 狀態(tài)。如果沒有開啟循環(huán)模式,那么內(nèi)部播放引擎會調(diào)用 oncompletion.onc
42、ompletion()回調(diào)方法。一旦調(diào)用了該方法,說明這個mediaplayer 對象進入了 playbackcompleted 狀態(tài)。此時可以再調(diào)用 start()方法來讓這個mediaplayer 對象進入 started 狀態(tài)6。2.2.3 surface、surfaceview、surfaceholder 三者之間的關(guān)系(1) surfacesurface 就是“表面”的意思。在 sdk 的文檔中,對 surface 的描述是這樣的:“handle onto a raw buffer that is being managed by the screen compositor”,翻譯成
43、中文就是“由屏幕顯示內(nèi)容合成器(screen compositor)所管理的原生緩沖器的句柄”,這句話包括下面兩個意思:通過 surface(因為 surface 是句柄)就可以獲得原生緩沖器以及其中的內(nèi)容。就像在 c 語言中,可以通過一個文件的句柄,就可以獲得文件的內(nèi)容一樣;原生緩沖器(rawbuffer)是用于保存當(dāng)前窗口的像素數(shù)據(jù)的。引伸地,可以認(rèn)為 android 中的 surface 就是一個用來畫圖形(graphics)或圖像(image)的地方。根據(jù) java 方面的常規(guī)知識,我們知道通常畫圖是在一個 canvas 對象上面進行的,由此,可以推知一個 surface 對象中應(yīng)該包
44、含有一個 canvas 對象,事實上的確如此,而且這一點可以很容易通過 debug 運行程序的方式得到證明。surface中有一個 canvas 成員,專門用于畫圖的。所以,surface 中的 canvas 成員,是專門用于供程序員畫圖的場所,就像黑板一樣;其中的原生緩沖器是用來保存數(shù)據(jù)的地方;surface 本身的作用類似一個句柄,得到了這個句柄就可以得到其中的 canvas、原生緩沖器以及其它方面的內(nèi)容3。(2) surfaceviewsurfaceview,顧名思義就是 surface 的 view,通過 surfaceview 就可以看到 surface 的部分或者全部的內(nèi)容,下面用
45、一個圖來形象地描述一下 surface 和 surfaceview 的關(guān)系:圖 2-3 surface 與 surfaceview也就是說,surface 是用通過 surfaceview 才能展示其中的內(nèi)容。由此來說,surfaceview 中的 view 之確切的含義應(yīng)該是 viewport 即“視口”的意思,類似數(shù)據(jù)庫的設(shè)計,假定一個數(shù)據(jù)表有 20 個字段,但我們常常只用到其中的 5 個字段,那么就可以在原數(shù)據(jù)表的基礎(chǔ)上,通過 sql 語句 createview 來創(chuàng)建只包含那 5 個字段內(nèi)容的 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 是一個接口,其作用就像一個關(guān)于 surface 的監(jiān)聽器。提供訪問和控制surfaceview 背后的 surface 相關(guān)的方法 (providingaccess and control over this surfaceviews underlying surface) ,它通過三個回調(diào)方法,讓我們可以感知到 surface 的創(chuàng)建、銷毀或者改變。在 surfaceview 中有一個方法 getholder,可以很方便地獲得 surfaceview 所對應(yīng)的surface 所對應(yīng)的 surfaceholder。從設(shè)計模式的高度來看,surface、su
48、rfaceview 和 surfaceholder 實質(zhì)上就是廣為人知的mvc,即 model-view-controller。model 就是模型的意思,或者說是數(shù)據(jù)模型,或者更簡單地說就是數(shù)據(jù),也就是這里的 surface;view 即視圖,代表用戶交互界面,也就是這里的surfaceview;surfaceholder 很明顯可以理解為 mvc 中的 controller(控制器) 。這樣看起來三者之間的關(guān)系就清楚了很多9。第三章第三章 系統(tǒng)分析及系統(tǒng)結(jié)構(gòu)設(shè)計與實現(xiàn)系統(tǒng)分析及系統(tǒng)結(jié)構(gòu)設(shè)計與實現(xiàn)3.1 系統(tǒng)分析系統(tǒng)分析3.1.1 系統(tǒng)可行性分析可行性研究是為了弄清楚系統(tǒng)開發(fā)的項目是不是可以
49、實現(xiàn)和值得進行研究的過程,實際上是一次大大簡化系統(tǒng)分析和系統(tǒng)設(shè)計的過程,所以,進行可執(zhí)行性的分析是非常必要的,也是很重要的,經(jīng)過最初的設(shè)計目標(biāo)和進行的實時調(diào)查得出以下四點的可行性分析:(1)技術(shù)可行性:eclipse + android adt 的技術(shù)已經(jīng)較為成熟,通過 sun 公司(現(xiàn)被orcel 公司收購)推出的跨平臺、動態(tài)的 java 語言進行開發(fā)。(2)運行可行性:該系統(tǒng)需要 android 虛擬機環(huán)境,eclipse 中安裝 adt,ddms 等google android 相關(guān)插件。其運行環(huán)境已經(jīng)相當(dāng)穩(wěn)定,它功能豐富,包括了完備的 android程序的編碼、調(diào)試、測試和發(fā)布功能,其
50、中支持所有 android 應(yīng)用開發(fā)相關(guān)技術(shù),包括sqlite,skia,3d 制作,android xml,能夠很好的發(fā)布 android 的應(yīng)用程序 apk 包。(3)法律可行性:因為是自主開發(fā)設(shè)計,所以不會構(gòu)成侵權(quán),在法律上是可行的。通過以上的可行性分析,將采用 eclipse+android adt + ddms 技術(shù),運用 java 語言進行系統(tǒng)的開發(fā)。3.1.2 系統(tǒng)需求分析根據(jù)分析需求,這個系統(tǒng)必須實現(xiàn)以下的功能:(1) 實現(xiàn)手機支持的視頻格式文件的播放功能。作為播放器,其核心就是能夠流暢的播放視頻文件。手機一般不會支持對解碼要求太高的格式,如 rmvb。作為手機硬件能夠承載的視
51、頻流文件,都應(yīng)當(dāng)能夠流暢的播放。(2) 能夠在手機里面定位視頻文件。在本播放器設(shè)計中,一個亮點就是自定義一個文件列表,能夠訪問手機里面任何能夠進入的文件。這樣,也就能夠不需要將視頻文件放在一個系統(tǒng)固定的位置,您可以自己新建一個存放視頻文件的文件夾,放在任何你想要放的地方。這樣,需要播放你的視頻文件的時候,直接定位再好不過。(3) 能夠智能搜索出所有 android sdcard 中的視頻文件。做視頻的智能搜索,也是能夠快速定位位于 sdcard 中的視頻文件的另一個快捷的方法。在智能搜索設(shè)計中,通過 mediascanner 進行 sdcard 中的所有視頻文件的掃描,包括自動搜索和手動添加。
52、同時,將其顯示到界面。一般,當(dāng)手機中存放的視頻文件過多,但對于新添加的視頻文件位置很清楚時,選擇手都添加比較好。(4) 能夠?qū)σ曨l文件常規(guī)信息信息進行讀取。當(dāng)播放視頻文件時,視頻名稱、視頻時間長度等信息顯示在屏幕相應(yīng)位置。3.2 系統(tǒng)結(jié)構(gòu)設(shè)計系統(tǒng)結(jié)構(gòu)設(shè)計本次課題設(shè)計的 android 視頻播放器應(yīng)用程序組要由 4 個 activity 組成,分別是mediaplayer activity,medialist activity,filechooser activity,updatemedialist activity。每一個 activity 實現(xiàn)相應(yīng)部分的功能,每一個 activity 對應(yīng)有
53、一個或多個.xml 的布局文件。在布局文件中,添加用來實現(xiàn)相應(yīng)部分功能的各種控件。如圖 3-1 所示。圖 3-1 系統(tǒng)結(jié)構(gòu)框圖(1) meidaplayeractivity mediaplayeractivity 中包含的控件數(shù)量最多,與用戶打交道也最為廣泛,每個控件都對應(yīng)有各自的功能,如圖 3-2 所示。圖 3-2 mediaplayeractivity 控件分布第一行中:checkbutton,查看列表按鈕。按下此按鈕之后,顯示手機中存在的視頻文件,并以列表的形式顯示顯示在手機屏幕上。關(guān)于視頻文件的列表的顯示,在medialistactivity 中實現(xiàn)。chooserbutton,添加視
54、頻按鈕。按下此按鈕之后,手機屏幕將顯示 sdcard 中文件列表,通過瀏覽不同路徑,添加所需的視頻文件至視頻列表中。imagebutton,之后的三個 imagebutton 分別是 volumebutton,upbutton,downbutton,即聲音按鈕,加大音量按鈕,減小音量按鈕。第二行中:textview,文本視圖控件。前一個 textview 用來顯示“視頻文件:” ,即一個提示信息;后一個 textview 用來顯示正播放的視頻文件的名稱。然后是 imagebutton 控件,這里添加一個聲音的小圖標(biāo)。最后是一個 progressbar 控件,該控件是一個進度條。當(dāng)我們加大或者減
55、小音量時,該進度條會相應(yīng)的發(fā)生變化。第三行中:一個 surfaceview 控件加上一個 imageview 控件。surfaceview 用來將視頻畫面投放到手機屏幕上,而 imageview 用來顯示視頻是否處于播放狀態(tài)。即當(dāng)暫停視頻播放時,imageview 處于 visible(可見)狀態(tài),當(dāng)繼續(xù)之前暫停的視頻播放時,imageview 處于invisible(不可見)狀態(tài)。第四行中:兩個 textview 分別用來顯示當(dāng)前正雜播放的視頻的時間信息,前者顯示當(dāng)前播放時間長度,后者顯示視頻文件的最大時間長度。第五行中: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,當(dāng)按下添加視頻 button 時,由 mediaplayeractivity 跳轉(zhuǎn)到此 activity,并根據(jù)用戶操作來完成添加視頻文件的操作。該 activity 引用 fileselect.xml 布局文件。該布局文件中包含一個 textview,一個 listview,和兩個 button 控件。textview 用來顯示當(dāng)前正在瀏覽的路徑,listview 用來顯示當(dāng)前路徑下存在的文件或者文件夾。當(dāng)選中視頻文件后,單擊確認(rèn) button 即可。若不打算添加,則取消即可,如圖3-4 所示。圖 3-4filechooseractivity 布局(4) updatemedialist
58、activity最后是 updatemedialistactivity。當(dāng)用戶通過 menu 菜單點擊“更新列表”選項時,程序跳轉(zhuǎn)到此 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;內(nèi)核版本號:3.0.8-perf-svn2
59、2921zte-kernelzdroid-smt;ram:512m;cpu:800mhz。4.2 測試測試系統(tǒng)運行的流程如下運行程序后,首先進入的是主 activity,即 mediaplayer activity。如圖 4-1。圖 4-1 程序運行時主界面當(dāng)點擊菜單 menu 時,會出現(xiàn)三個選項:播放列表,更新列表,退出。如圖 4-2 所示。圖 4-2 菜單選項選擇更新列表操作,進入 updatemedialist activity,如圖 4-3 所示。圖 4-3 更新列表操作單擊選擇自動搜索,程序自行掃描 sdcard 中的文件,并將掃描到的視頻文件添加到視頻列表中去。如圖 4-4 和圖
60、4-5 所示。圖 4-4 自動搜索視頻文件圖 4-5 自動更新結(jié)果搜索完成后點擊產(chǎn)看列表查看視頻文件列表,也可以通過菜單中的播放列表選項查看。查看結(jié)果如圖 4-6 所示。圖 4-6 查看視頻文件列表在更新列表界面下,用戶也可以通過手動添加來添加視頻文件。如圖 4-7 所示,被選中的視頻文件會被打上對勾,以表示選中。圖 4-7 手動添加視頻文件單擊確定按鈕完成添加。添加后顯示圖 4-8。圖 4-8 添加視頻文件完成接下來從視頻列表中選擇一個視頻文件來播放。如圖 4-9 所示。圖 4-9 播放視頻文件由上圖可知,視頻播放時,可以獲得一些視頻文件信息。如視頻名稱,播放進度,視頻時長,視頻后綴名。當(dāng)按下暫停按
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年電弧光母線保護系統(tǒng)項目投資價值分析報告
- 2025至2030年礦泉水瓶蓋模具項目投資價值分析報告
- 銀行內(nèi)訓(xùn)師培訓(xùn)課件
- 2025至2030年毛葉棗項目投資價值分析報告
- 2025至2030年機動車超速監(jiān)測系統(tǒng)項目投資價值分析報告
- 酮癥酸中毒患者護理查房
- 2025至2030年仿真皮沙發(fā)布項目投資價值分析報告
- 2025至2030年中國青公寓行業(yè)競爭戰(zhàn)略分析及市場需求預(yù)測報告
- 2025至2030年中國圓領(lǐng)T恤項目投資可行性研究報告
- 2025年縫紉機摩擦片項目可行性研究報告
- SMI發(fā)展歷史簡介
- 路基防護噴播植草掛網(wǎng)客土噴播植草施工作業(yè)指導(dǎo)書ztzyzd06
- 高桿燈專項施工方案
- 鋼筆字練習(xí)模板
- 檸檬茶項目財務(wù)數(shù)據(jù)分析(參考范文)
- 車間員工質(zhì)量意識培訓(xùn)
- 鄉(xiāng)村旅游-課件(PPT演示) (1)
- 國家開放大學(xué)《會計學(xué)概論》章節(jié)測試參考答案
- RationalDMIS客戶培訓(xùn)手冊
- 小升初個人簡歷表
- 法律文獻檢索報告(范例)
評論
0/150
提交評論