Android VLC播放器二次开发1——程序结构分析
最近因?yàn)橐粋€(gè)新項(xiàng)目需要一個(gè)多媒體播放器,所以需要做個(gè)視頻、音頻、圖片方面的播放器。也查閱了不少這方面的資料,如果要從頭做一個(gè)播放器工作量太大了,而且難度也很大。所以最后選擇了VLC作為基礎(chǔ),進(jìn)行二次開發(fā)。選擇VLC的原因有兩個(gè),第一:VLC在其他平臺很成熟,解碼器方面支持很完善。第二:VLC已經(jīng)實(shí)現(xiàn)了完整的視頻播放和音頻播放功能。開發(fā)速度可以加快很多。
下面給出兩張截圖,主要是為了方便后面講解程序結(jié)構(gòu)使用,可以對照著圖片看。界面和原版VLC差不多,我只是把ActionBar和視頻列表做了一些調(diào)整。
(PS:新建的QQ群,有興趣可以加入一起討論:Android群:322599434)
1、背景
一開始本來是想修改Android自帶的Gallery3D程序,因?yàn)檫@個(gè)程序自帶了視頻播放功能,不過解碼方面并不理想,很多格式不支持。無奈只能選用第三方的解碼庫,因此最后才選擇了VLC作為二次開發(fā)基礎(chǔ)。選擇它的原因上面已經(jīng)說過,這里不重復(fù)。
VLC播放器不多介紹,相信做過音視頻的朋友都了解,而且它基本上支持目前常見的平臺。我這次二次開發(fā)的目的是把VLC原本的界面和一些播放控制修改一下,適應(yīng)平板電腦上面使用,另外一個(gè)就是想掌握VLC的解碼庫如何使用。第一個(gè)目的,修改界面難度不會很大,因?yàn)檎麄€(gè)界面邏輯結(jié)構(gòu),我不需要大改,只是做一些調(diào)整。所以主要目的就是了解VLC整個(gè)程序的實(shí)現(xiàn)。
目前對VLC的分析主要是java層的實(shí)現(xiàn),解碼庫那方面現(xiàn)在還沒精力去分析,而且那一塊也比較復(fù)雜。后面有時(shí)間,在考慮解碼庫的分析。目前主要是分析java部分代碼和如何使用解碼庫。閱讀優(yōu)秀開源項(xiàng)目可以學(xué)到不少東西,分析Launcher就讓我提高了不少,也學(xué)到了很多Android的開發(fā)知識,例如:多個(gè)ViewGroup和view之間處理觸摸事件的流程。通過分析Launcher對Android觸摸機(jī)制了解很深入。相信通過這次分析和修改VLC播放器,也能學(xué)到很多新知識。
另外補(bǔ)充一點(diǎn),VLC的源碼都是開源的(包括解碼庫部分代碼),可以用git獲取,自行編譯即可,我前面已經(jīng)寫了一篇詳細(xì)獲取VLC源碼和編譯的文章,如果不了解如何獲取源碼和如何編譯的朋友,可以查看文章最后的鏈接。那篇文章提供了一個(gè)VLC的工程,可以直接導(dǎo)入到Eclipse里面使用。
2、程序結(jié)構(gòu)
整個(gè)VLC播放器的模塊可以分為下面幾個(gè)重要的模塊:
VLCLib解碼庫
界面GUI
音頻部分
視頻部分
接口定義
控件和widget
整個(gè)程序可以劃分為上面的主要模塊,對應(yīng)上面源碼的src包目錄就可以看出來,至于每部分模塊具體代碼類,這里暫且不說,我個(gè)人也還沒有完全分析完。只是掌握了程序結(jié)構(gòu)和每個(gè)類大概功能。具體的后面我分析了,會繼續(xù)寫相關(guān)文章。
直接主要說說程序界面邏輯,從我上面給出的截圖可以看出來,程序剛啟動默認(rèn)就是進(jìn)入視頻列表。VLC的界面主要是由SlidingMenu和ActionBar構(gòu)成,里面嵌入了好幾個(gè)Fragment。SlidingMenu負(fù)責(zé)功能模塊的切換(視頻、音頻、目錄),具體進(jìn)入視頻還是音頻,這個(gè)就是切換Fragment,也就是說具體的功能實(shí)現(xiàn)都是由Fragment實(shí)現(xiàn)的。SLidingMenu就是提供了切換功能,ActionBar提供了一些常用功能按鈕,搜索、刷新、視頻流輸入、排序、設(shè)置等功能。大部分界面都會存在ActionBar,除了音頻和視頻播放界面。
3、程序主要模塊簡述
程序的入口類是org.videolan.vlc.gui.MainActivity,也就是上面目錄里面的gui下面的主Activity,這個(gè)Activity主要是檢測VLC解碼庫以及創(chuàng)建相關(guān)界面的類對象和初始化功能,還有就是響應(yīng)SlidingMenu和ActionBar的操作。具體的代碼分析,下一篇文章再進(jìn)行,今天先講解個(gè)大概邏輯。
視頻模塊的入口是視頻列表org.videolan.vlc.gui.video.VideoGridFragment,上面已經(jīng)說過,VLC的界面大部分都是基于Fragment實(shí)現(xiàn)的,視頻列表也是基于Fragment,具體播放界面是另外一個(gè)Activity——VideoPlayerActivity,video包下面主要就是這兩個(gè)類實(shí)現(xiàn)了視頻播放的功能,一個(gè)是列表界面,一個(gè)是視頻播放界面。其他的就是一些適配器和輔助類,到時(shí)候?qū)σ曨l詳細(xì)解析的時(shí)候,再講解相關(guān)類。
音頻模塊主要是org.videolan.vlc.gui.audio.AudioBrowserFragment類是入口,音頻播放模塊里面又分了幾個(gè)頁面,實(shí)現(xiàn)了類似ViewPaper的滑動切換功能,這個(gè)倒是和元素Android的Music布局差不多。這些具體到時(shí)候分析音頻模塊在講解。
Widget和控件模塊:這兩個(gè)主要是實(shí)現(xiàn)了一些VLC自己的控件以及桌面的Widget,VLC做了一個(gè)桌面Widget是用來播放音頻的,跟Android原生Music的Widget類似。
4、總結(jié)
今天主要是介紹一下VLC的代碼結(jié)構(gòu)和主要的功能模塊,下一篇文章開始會介紹VLC具體模塊的分析。還有把我個(gè)人修改的情況記錄下來,給有這方面開發(fā)需要的朋友參考一下。其實(shí)VLC整個(gè)java部分的代碼還是挺多的,而且邏輯結(jié)構(gòu)也區(qū)分很仔細(xì)。如果你已經(jīng)分析過一些代碼量比較多的開源工程,那分析VLC并不困難,但是如果你閱讀的代碼不多,這個(gè)對你來說可能是一個(gè)比較難的坎。
整個(gè)工程其實(shí)用到了挺多技術(shù),例如SlidingMenu、ActionBar、Fragment、AIDL、Widget、自定義View等等,如果你對這些技術(shù)都不熟悉,建議你先了解一下,特別是SlidingMenu和Fragment,這兩個(gè)基本上構(gòu)建了整個(gè)VLC播放器的界面。
另外,我打算把VLC解碼庫的使用方法弄清楚,因?yàn)槲掖蛩惆裋LC的解碼核心移植出來,做成一個(gè)可以方便使用的第三方庫。主要是移植到我個(gè)人業(yè)余開發(fā)的一款網(wǎng)絡(luò)收音機(jī)上面使用。另外就是獨(dú)立出來,方便移植使用。
相關(guān)文章
Linux 下編譯Android-VLC開源播放器詳解(附源碼下載)
Edited by mythou
原創(chuàng)博文,轉(zhuǎn)載請標(biāo)明出處:http://www.cnblogs.com/mythou/p/3235698.html
總結(jié)
以上是生活随笔為你收集整理的Android VLC播放器二次开发1——程序结构分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 变化多端的列表
- 下一篇: Android学习笔记49:Socket