當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于Android系統(tǒng)的影音播放器開發(fā)

摘要:基于開源移動終端操作系統(tǒng)Android開發(fā)了一個影音播放器。影音播放器由文件瀏覽器、視頻播放、音頻播放、播放列表管理及歌詞同步顯示等模塊組成,界面采用XML,腳本配置生成。軟件基于文件測覽器的方式實現(xiàn)了媒體庫的管理,大大方便了用戶的操作。軟件每次啟動時都會對儲存設(shè)備進(jìn)行掃描,將掃描到的歌詞文件信惠保存到歌詞數(shù)據(jù)庫中。對正在播放的歌曲,根據(jù)歌曲名字檢索歌詞文件,并同步顯示歌詞。在Android模擬器和OMAP 3530開發(fā)板上對播放器進(jìn)行了功能測試與驗證。
關(guān)鍵詞:Android;影音播放器;歌詞顯示;OMAP3530

0 引言
    Android一詞的本義指“機(jī)器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源移動終端操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,是首個為移動終端打造的真正開放和完整的移動軟件。
    隨著科技的不斷發(fā)展,手機(jī)不再只是人們?nèi)粘I畹囊苿油ㄐ殴ぞ撸且粋€多媒體平臺,可提供強(qiáng)大的多媒體功能,越來越多的人喜歡用手機(jī)聽音樂、看電影。Android系統(tǒng)內(nèi)置的音樂播放器基于媒體庫對歌曲進(jìn)行管理,并且不支持歌詞的同步顯示。對于部分已經(jīng)習(xí)慣的基于文件瀏覽器形式播放器的用戶,操作起來會有所不便。對于Android手機(jī)操作系統(tǒng),可以充分利用它豐富的可編程擴(kuò)展性,開發(fā)出新的播放器應(yīng)用軟件。

1 Android平臺
    Android軟件開發(fā)主要涉及到的相關(guān)技術(shù)包括Android SDK(開發(fā)插件、調(diào)試工具包等)、Android系統(tǒng)架構(gòu)和Android應(yīng)用程序組件。
1.1 Android SDK
    Android SDK(Software Development Kit)提供了Android平臺上使用Java語言進(jìn)行Android應(yīng)用開發(fā)的API接口和工具。其中,最重要的工具是Android模擬器和Eclipse的Android開發(fā)工其插件,同時SDK也包含了各種在模擬器上用于調(diào)試、打包和安裝的工具。
    Eclipse IDE的Android開發(fā)工具插件(AndroidDevelopment Tools Plugin for the Eclipse IDE,ADT)大大擴(kuò)展了Eclipse集成環(huán)境功能,使得生成和調(diào)試Android應(yīng)用程序既容易又迅速。使用Eclipse,ADT插件可以加快開發(fā)Android應(yīng)用程序的速度。
    Android模擬器是在計算機(jī)上運(yùn)行的一個虛擬移動設(shè)備,可以使用模擬器來模擬一個實際的Android運(yùn)行環(huán)境,來設(shè)計、調(diào)試和測試應(yīng)用程序。
    Dalvik調(diào)試監(jiān)視器服務(wù)(Dalvik Debug MonitorService,DDMS)集成了Dalvik(為Android平臺定制的虛擬機(jī)(VM)),能夠在模擬器或者設(shè)備上管理進(jìn)程并協(xié)助調(diào)試。DDMS提供進(jìn)程管理,產(chǎn)生跟蹤數(shù)據(jù),觀察堆和線程信息,截取模擬器屏幕畫面,模擬來電或短信等功能。
1.2 Android系統(tǒng)架構(gòu)
    Android是一個專門針對移動設(shè)備的軟件集,它包括一個操作系統(tǒng),中間件和一些重要的應(yīng)用程序。Android的系統(tǒng)架構(gòu)從上往下依次是應(yīng)用程序、應(yīng)用程序框架和組件、Android運(yùn)行時庫和其他庫、優(yōu)化的Linux內(nèi)核。
1.3 Android應(yīng)用程序的組件
    手機(jī)的運(yùn)行環(huán)境比較復(fù)雜,一個程序運(yùn)行時經(jīng)常會出現(xiàn)很多的突發(fā)情況,例如,來電或者短信及電量不足等。這些問題在Android中都有解決方案,在Android的應(yīng)用程序中,以下幾個組件特別重要:
    (1)Activity
    顧名思義,Activity就是活動。應(yīng)用程序必須至少包含一個Activity。Activity提供了一個虛擬的用戶接口,每一個Activity都有一個默認(rèn)的窗口可以用來顯示用戶界面,一般情況下,它是全屏的窗口。例如,影音播放軟件的每個用戶界面就是Activity。
    (2)Service
    Service與Activity的主要區(qū)別在于,Service是在后臺活動的,它沒有用戶界面。典型的應(yīng)用場景是,用戶選擇了一個播放列表開始播放后,離開了該用戶界面(Activity),如果仍然希望歌曲不會暫停,就可以用Service去調(diào)用播放器,而不是在Activity中調(diào)用播放器。
    (3)Intent
    在Android中,每一個行為都可以抽象為一個Intent??梢院唵蔚匕袸ntent理解為一個包含了數(shù)據(jù)的消息。Intent可以用于啟動一個Act-ivity或者Service,可以用于進(jìn)程間的通信。事實上,應(yīng)用程序的啟動也是通過Intent實現(xiàn)的。
    (4)Content providers
    Android平臺內(nèi)置了一套SQLite數(shù)據(jù)儲存機(jī)制,并包含一系列管理SQLite Database的相關(guān)方法。在應(yīng)用程序中,可以通過Content prov-iders訪問數(shù)據(jù)庫。每個Content provider都定義了一系列的方法用于訪問它對應(yīng)的數(shù)據(jù)庫。應(yīng)用程序在新建數(shù)據(jù)庫時也可以定義相應(yīng)的Con-tent provider用于向其他應(yīng)用程序共享數(shù)據(jù)。一般情況下,應(yīng)用程序不直接調(diào)用Content provider定義的函數(shù),而是通過ContentResolver間接調(diào)用。這樣設(shè)計的好處是一個ContentResolver可以訪問任何的Content provider,統(tǒng)一了接口。

2 硬件平臺
    系統(tǒng)的硬件平臺采用基于OMAP3530的開發(fā)板DevKit8000。美國TI公司的OMAP3530應(yīng)用處理器集成了600 MHz的ARM Cortex-A8 CPU內(nèi)核和430 MHz的C64x+DSP內(nèi)核,并提供了USB 2.OOTG,SD/MMC和LCD等豐富的外設(shè)接口,適用于各種無線手持終端應(yīng)用。DevKit8000開發(fā)板外接了一個4.3寸的LCD屏、電阻式觸摸屏和音頻輸入/輸出接口,可以用于對基于Android系統(tǒng)的影音播放器的開發(fā)。
    通過打補(bǔ)丁包和開發(fā)LCD驅(qū)動、觸摸屏驅(qū)動、按鍵驅(qū)動等外設(shè)驅(qū)動,在DevKit8000開發(fā)板上移植了版本為6.2.29的Linux內(nèi)核和版本為1.6的Android系統(tǒng)。
[!--empirenews.page--]
3 Android影音播放器軟件開發(fā)
3.1 軟件功能
    Android的影音播放軟件主要包括以下功能:
    (1)播放視頻
    支持快進(jìn)、快退、暫停、繼續(xù)和進(jìn)度拖拽。
    (2)播放音頻
    支持快進(jìn)、快退、上一首、下一首、暫停、繼續(xù)、停止和進(jìn)度拖拽;支持隨機(jī)播放、循環(huán)播放兩種模式;支持歌詞同步顯示。
3.2 各模塊之間的關(guān)系
    影音播放軟件工程文件主要包括src文件夾(Java源碼)、res文件夾(資源文件)和AndroidManifest.xml(程序清單)。軟件主要由8個Activities組成,每個Activity對應(yīng)于一個模塊。不同的Activities通過Intent進(jìn)行通信和相互調(diào)用。
    各個模塊之間的關(guān)系如圖1所示。


    視頻播放調(diào)用順序依次是<啟動畫面>、<主菜單>、<文件瀏覽器>、<視頻播放器>;
    音頻播放調(diào)用順序依次是<啟動畫面>、<主菜單>、<播放列表管理>、<播放列表內(nèi)容管理>、<正在播放>。在<正在播放>的界面上。點擊相應(yīng)的按鈕就可以執(zhí)行歌詞同步顯示功能。
    在工程目錄的AndroidManifest.xml(清單文件)里面,添加各Activity的說明。下面為對應(yīng)啟動畫面的描述:

[!--empirenews.page--]
3.3 軟件模塊
    根據(jù)影音播放軟件功能,可以將軟件劃分為以下幾個模塊:
    (1)<啟動畫面>模塊。主要功能是顯示軟件啟動畫面。利用定時器線程去控制啟動畫面顯示時間,并且當(dāng)用戶按下按鍵的時候,會立即中斷啟動畫面的顯示并跳轉(zhuǎn)到<主菜單>模塊。
    (2)<主菜單>模塊。主要功能是提供播放軟件的用戶界面。用戶界面由Android的XML配置生成。
    主菜單提供三個選項,分別是視頻播放、音頻播放和退出程序;視頻播放時,調(diào)用<文件瀏覽器>模塊,讓用戶選擇需要播放的視頻文件。音頻播放時,調(diào)用<播放列表管理>模塊,讓用戶選擇需要播放的列表。
    (3)<文件瀏覽器>模塊。用于瀏覽內(nèi)存卡上的文件。如果路徑是文件夾,則列出該文件央下的所有文件;如果路徑是文件,則先檢查文件擴(kuò)展名是否為支持的視頻格式,如果是,則調(diào)用系統(tǒng)內(nèi)置的播放器播放。
    (4)<音頻播放>模塊。它包括以下幾個模塊:
    ①<播放列表管理>模塊。主要功能是添加、刪除、重命名列表。通過Content providers訪問系統(tǒng)的播放列表數(shù)據(jù)庫,并利用修改的結(jié)果更新數(shù)據(jù)庫。因為采用的是系統(tǒng)的數(shù)據(jù)庫,所以與系統(tǒng)內(nèi)置的音樂播放器列表共用。同時,它還提供添加列表內(nèi)容的接口。通過播放列表管理模塊進(jìn)入到<播放列表內(nèi)容管理>模塊。
    ②<播放列表內(nèi)容管理>模塊。主要功能是添加、刪除、多選播放列表中的歌曲。在Android中,每個列表都會有一個相應(yīng)的歹盯表內(nèi)容庫,保存了該列表里面所包含的歌曲ID。通過ContentProviders可以訪問并修改。其中,添加功能是基于文件瀏覽器實現(xiàn)的,在文件瀏覽器中可以對音樂文件的進(jìn)行標(biāo)記和添加。
    ③<正在播放>模塊。主要功能是顯示歌曲的相關(guān)信息(專輯封面、專輯名稱、歌手、長度等)和顯示正在播放歌曲的時間進(jìn)度,控制歌曲的播放。
    <正在播放>模塊的界面用XML配置生成。

    實際使用的效果圖如圖2所示。

[!--empirenews.page--]
    在Android的音樂庫已經(jīng)將歌曲的Idv2或Idv3標(biāo)簽進(jìn)行解析,并將歌曲的相關(guān)信息(包括演唱者、流派、時長等)保存在媒體數(shù)據(jù)庫中。只需要通過Content providers對該數(shù)據(jù)庫進(jìn)行訪問,就可以得到相關(guān)的信息并送顯示。獲取歌曲相關(guān)信息的程序源碼如下:


    通過創(chuàng)建MediaPlayer播放器類對象,調(diào)用Android提供的API就可以實現(xiàn)文件的解碼和播放。
    ④<歌詞同步顯示>模塊。程序啟動時,對內(nèi)存卡進(jìn)行掃描,將掃描到的歌詞文件名字和路徑保存到歌詞數(shù)據(jù)庫中。對正在播放的歌曲,根據(jù)歌曲名字自動檢索歌詞文件,并同步顯示歌詞。第一次啟動該程序時,需要新建歌詞數(shù)據(jù)庫,用于保存歌詞文件信息。Android提供了類SQLiteOpenHelper用于新建數(shù)據(jù)庫。

    DATABASE_CREATE是一個SQL原語的字符串宏,其內(nèi)容是“create table lyric_meta(_id integerprimary key autoincrement,_disp-alay_name text not null,_date text not null);”表示創(chuàng)建一個歌詞文件的表,包含_id,_display_name,_data三列。其中_id是自增的且惟一的整數(shù),_display_name是歌詞文件名稱,_data是歌詞文件路徑。歌詞顯示效果如圖3所示。



4 系統(tǒng)測試
    首先在Android SDK1.6的模擬器上對影音播放器的各項功能進(jìn)行調(diào)試。調(diào)試結(jié)束后,將編譯生成的安裝文件(.APK)拷貝到SD卡,利用Android文件管理器將播放軟件安裝到OMAP3530開發(fā)板的系統(tǒng)上,然后將測試用的視頻文件、MP3音樂文件及對應(yīng)的歌詞文件(.lrc)拷貝到SD卡,OMAP3530開發(fā)板上的影音播放器可以通過文件瀏覽器選擇視頻文件并正常播放,在播放音頻文件時可以正常顯示匹配的歌詞,支持快進(jìn)、快退、暫停等控制功能。

5 結(jié)語
    本文以Android上影音播放器的開發(fā)為范例,詳細(xì)給出了Android上應(yīng)用的開發(fā)方法。開發(fā)的影音播放器在Android手機(jī)模擬器和OMAP35 30開發(fā)板上測試通過。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉