vlc-android代碼分析一

最近因爲一個新項目需要一個多媒體播放器,所以需要做個視頻、音頻、圖片方面的播放器。也查閱了不少這方面的資料,如果要從頭做一個播放器工作量太大了,而且難度也很大。所以最後選擇了VLC作爲基礎,進行二次開發。選擇VLC的原因有兩個,第一:VLC在其他平臺很成熟,解碼器方面支持很完善。第二:VLC已經實現了完整的視頻播放和音頻播放功能。開發速度可以加快很多。

  下面給出兩張截圖,主要是爲了方便後面講解程序結構使用,可以對照着圖片看。界面和原版VLC差不多,我只是把ActionBar和視頻列表做了一些調整。

  

(PS:新建的QQ羣,有興趣可以加入一起討論:Android羣:322599434)

 

 

1、背景

  一開始本來是想修改Android自帶的Gallery3D程序,因爲這個程序自帶了視頻播放功能,不過解碼方面並不理想,很多格式不支持。無奈只能選用第三方的解碼庫,因此最後才選擇了VLC作爲二次開發基礎。選擇它的原因上面已經說過,這裏不重複。

  VLC播放器不多介紹,相信做過音視頻的朋友都瞭解,而且它基本上支持目前常見的平臺。我這次二次開發的目的是把VLC原本的界面和一些播放控制修改一下,適應平板電腦上面使用,另外一個就是想掌握VLC的解碼庫如何使用。第一個目的,修改界面難度不會很大,因爲整個界面邏輯結構,我不需要大改,只是做一些調整。所以主要目的就是了解VLC整個程序的實現。

  目前對VLC的分析主要是java層的實現,解碼庫那方面現在還沒精力去分析,而且那一塊也比較複雜。後面有時間,在考慮解碼庫的分析。目前主要是分析java部分代碼和如何使用解碼庫。閱讀優秀開源項目可以學到不少東西,分析Launcher就讓我提高了不少,也學到了很多Android的開發知識,例如:多個ViewGroup和view之間處理觸摸事件的流程。通過分析Launcher對Android觸摸機制瞭解很深入。相信通過這次分析和修改VLC播放器,也能學到很多新知識。

  另外補充一點,VLC的源碼都是開源的(包括解碼庫部分代碼),可以用git獲取,自行編譯即可,我前面已經寫了一篇詳細獲取VLC源碼和編譯的文章,如果不瞭解如何獲取源碼和如何編譯的朋友,可以查看文章最後的鏈接。那篇文章提供了一個VLC的工程,可以直接導入到Eclipse裏面使用。

 

 

2、程序結構

整個VLC播放器的模塊可以分爲下面幾個重要的模塊:

  • VLCLib解碼庫
  • 界面GUI
  • 音頻部分
  • 視頻部分
  • 接口定義
  • 控件和widget

  整個程序可以劃分爲上面的主要模塊,對應上面源碼的src包目錄就可以看出來,至於每部分模塊具體代碼類,這裏暫且不說,我個人也還沒有完全分析完。只是掌握了程序結構和每個類大概功能。具體的後面我分析了,會繼續寫相關文章。

  直接主要說說程序界面邏輯,從我上面給出的截圖可以看出來,程序剛啓動默認就是進入視頻列表。VLC的界面主要是由SlidingMenu和ActionBar構成,裏面嵌入了好幾個Fragment。SlidingMenu負責功能模塊的切換(視頻、音頻、目錄),具體進入視頻還是音頻,這個就是切換Fragment,也就是說具體的功能實現都是由Fragment實現的。SLidingMenu就是提供了切換功能,ActionBar提供了一些常用功能按鈕,搜索、刷新、視頻流輸入、排序、設置等功能。大部分界面都會存在ActionBar,除了音頻和視頻播放界面。

 

 

3、程序主要模塊簡述

  程序的入口類是org.videolan.vlc.gui.MainActivity,也就是上面目錄裏面的gui下面的主Activity,這個Activity主要是檢測VLC解碼庫以及創建相關界面的類對象和初始化功能,還有就是響應SlidingMenu和ActionBar的操作。具體的代碼分析,下一篇文章再進行,今天先講解個大概邏輯。

  視頻模塊的入口是視頻列表org.videolan.vlc.gui.video.VideoGridFragment,上面已經說過,VLC的界面大部分都是基於Fragment實現的,視頻列表也是基於Fragment,具體播放界面是另外一個Activity——VideoPlayerActivity,video包下面主要就是這兩個類實現了視頻播放的功能,一個是列表界面,一個是視頻播放界面。其他的就是一些適配器和輔助類,到時候對視頻詳細解析的時候,再講解相關類。

  音頻模塊主要是org.videolan.vlc.gui.audio.AudioBrowserFragment類是入口,音頻播放模塊裏面又分了幾個頁面,實現了類似ViewPaper的滑動切換功能,這個倒是和元素Android的Music佈局差不多。這些具體到時候分析音頻模塊在講解。

  Widget和控件模塊:這兩個主要是實現了一些VLC自己的控件以及桌面的Widget,VLC做了一個桌面Widget是用來播放音頻的,跟Android原生Music的Widget類似。

 

4、總結

  今天主要是介紹一下VLC的代碼結構和主要的功能模塊,下一篇文章開始會介紹VLC具體模塊的分析。還有把我個人修改的情況記錄下來,給有這方面開發需要的朋友參考一下。其實VLC整個java部分的代碼還是挺多的,而且邏輯結構也區分很仔細。如果你已經分析過一些代碼量比較多的開源工程,那分析VLC並不困難,但是如果你閱讀的代碼不多,這個對你來說可能是一個比較難的坎。

  整個工程其實用到了挺多技術,例如SlidingMenu、ActionBar、Fragment、AIDL、Widget、自定義View等等,如果你對這些技術都不熟悉,建議你先了解一下,特別是SlidingMenu和Fragment,這兩個基本上構建了整個VLC播放器的界面。

  另外,我打算把VLC解碼庫的使用方法弄清楚,因爲我打算把VLC的解碼核心移植出來,做成一個可以方便使用的第三方庫。主要是移植到我個人業餘開發的一款網絡收音機上面使用。另外就是獨立出來,方便移植使用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章