【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韓曙亮?
博客地址 :?http://blog.csdn.net/shulianghan/article/details/42707293
轉載請注明出處 :?http://blog.csdn.net/shulianghan
VLC 二次開發 視頻教程 :?http://edu.csdn.net/course/detail/355
博客總結?:?
--?本博客目的?: 讓 Android?開發者通過看本博客能夠掌握獨立移植 VLC Media Player 核心框架到自己的 app 中, 進行 VLC Media Player Android 平臺的二次開發, 進行全功能全格式的視頻編碼解碼功能;
編譯相關資源下載 : 注意一定要使用這些資源, 其它的資源編不過, 編譯系統必須要完全符合我提出的要求;
-- 編譯相關文件 (百度網盤) :?點擊打開鏈接;
-- VLC Media Player - Anroid 編譯源碼 (800M 左右可以直接編譯, 無需下載其它庫和源碼, 壓縮后 549M?百度網盤下載) :?點擊打開鏈接?;
-- SDK 下載 (包含 Android-5.0 最新 SDK, 注意 這是 Ubuntu 上編譯用的) :?點擊打開鏈接?;
-- NDK 下載 (r9 版本的可用 NDK 官方不建議使用 r10 版本) :?點擊打開鏈接?;
-- VLC Media Player - Android 源碼 (可以直接在 eclipse 上進行調試的源碼) :?點擊打開鏈接?;
--?VLC Media Player - Android 源碼 編譯過程 (整個編譯過程中的命令行日志信息, 可對照查看自己的編譯錯誤位置, 在哪卡住了) :?點擊打開鏈接
-- protobuf-3.0 源碼下載 :?點擊打開鏈接?;
-- Windows SDK 下載 (26G 包含所有內容) :?點擊打開鏈接?;
-- 友情提示 : 使用 git 獲取的源碼只有 20M 左右, 這 20M 主要是 Android 的依賴庫, 依賴工程, 配置文件, 還需要下載 800M 左右的第三方庫和源碼, 有許多被國內墻了, 需要 VPN 連接才能下載成功, 這里不建議大家再下載這些文件, 我已經完全下載下來, 上傳到了百度網盤供大家學習使用;
-- 如果各位 CSDN 的朋友需要 VLC 學習 的與本博客相關的其他資源, 可以再博客下方給我留言, 我會上傳到 百度網盤 或者 CSDN 上供大家下載;
編譯環境總結?:
--?操作系統?: Win8 + Vmware?11.0.0 + Ubuntu 14.04.1 LTS, 編譯操作系統一定要是 Ubuntu 14.04.1 LTS 版本, Ubuntu 12.04 編譯會出錯;
--?Android SDK?: 需要下載最新版本的 SDK, 即 android-21 需要 5.0 版本的 SDK;
--?Android NDK?: 文檔中指出 編譯使用的 NDK 必須是 r9 版本的, 所以建議也使用這個版本;
技術資料參考?:?
--?官方網站?:?http://www.videolan.org/vlc/?;
--?開發者社區?:?https://wiki.videolan.org/Developers_Corner/?;
--?官方文檔 (AndroidCompile)?:?https://wiki.videolan.org/AndroidCompile?;
-- VLC Android 文檔 :?https://wiki.videolan.org/Documentation:Android/ ;
-- VLC 大神博客 : http://www.cnblogs.com/mythou/tag/vlc/;
一. VLC Media Player 簡介
VLC 學習路線圖?: 介紹地址?點擊打開鏈接;?
--?1. 獲取源碼?: 使用 Git 工具獲取 VLC 的源碼, 源碼獲取地址?點擊打開鏈接;
--?2. 編譯源碼?: 在本地編譯 VLC 的源碼, 源碼編譯介紹?點擊打開鏈接;
--?3. 研究 Mini Project?: Mini Project 是一個簡化版的 VLC 播放器, 通過該工程可以快速了解 VLC, 工程地址?點擊打開鏈接;
--?4. libVLCcore 核心?: libVLCcore 是 VLC Media Player 核心, 核心簡介地址?點擊打開鏈接;
--?5. VLC 模塊加載?: VLC 除了一個 核心 Core 之外, 還有幾百個模塊(Module), 根據需要加載不同模塊, 介紹地址?點擊打開鏈接;
--?6. VLC 模塊編寫?: 模塊 (Module) 編寫介紹,?點擊打開鏈接;
--?7. 學習 VLC 代碼樹?: VLC 代碼樹地址?點擊打開鏈接;
--?8. 閱讀文檔?: 閱讀 VLC 代碼文檔, 文檔地址?點擊打開鏈接;
二. VLC Media Player Android 平臺源碼編譯
官方參考文檔 :?https://wiki.videolan.org/AndroidCompile;
編譯環境總結 :?
-- 操作系統 : Win8 + Vmware?11.0.0 + Ubuntu 14.04.1 LTS, 一定要是 Ubuntu 14.04.1 版本, Ubuntu 12.04 編譯會出錯;
-- Android SDK : 需要下載最新版本的 SDK, 即 android-21 5.0 版本的 SDK;
-- Android NDK : 文檔中指出 編譯使用的 NDK 必須是 r9 版本的, 所以建議也使用這個版本;
1. 編譯環境準備
(1) 操作系統準備
操作系統要求 : 源碼編譯需要在 Linux 或者是 MAC OS 上進行編譯;
-- 使用系用 : 本博客編譯使用 Ubuntu 14.04.1 LTS 版本, 32 位 操作系統, 其它版本請自行摸索;
-- 注意 : 一定要是 32 未的操作系統, 64 位操作系統無法編譯 VLC 源碼(一些編譯工具如果不是 32 位的會出錯);
(2) 編譯所需軟件
編譯所需軟件 :?
-- ant :?將軟件編譯、測試、部署等步驟聯系在一起加以自動化的一個工具;
-- autoconf :?用于包以適應多種Unix類系統的 shell腳本的工具;
-- automake : 產生供make程式使用的Makefile,用來編譯程式;
-- cmake :?開源的跨平臺自動化建構系統,利用配置文件控制建構過程;
-- gawk :?linux下查找替換文本工具;
-- gcc : C 語言編譯工具;
-- g++ : C ++ 語言編譯工具;
-- libtool :?屬于GNU建構系統的GNU程序設計工具,用來產生便攜式的庫;
-- m4 :?宏處理器.將輸入拷貝到輸出,同時將宏展開;
-- patch : 制作 patch 文件的必要工具;
-- pkg-config?:?提供從源代碼中編譯軟件時查詢已安裝的庫時使用的統一接口的計算機軟件;
-- protobuf?: 全稱?protocol buffer,?google 的一種數據交換的格式,它獨立于語言,獨立于平臺;
-- ragel :?有限狀態機編譯器,它將基于正則表達式的狀態機編譯成傳統語言(C,C++,D,Java,Ruby等)的解析器;
--?subversion : SVN 代碼管理工具;
-- unzip : zip 的壓縮解壓縮工具;
-- git : git 版本管理工具;
安裝命令 :?sudo apt-get install -y ant autoconf automake cmake gawk gcc g++ libtool m4 patch pkg-config ragel subversion unzip git ;
-- 注意 : 有些軟件可能不支持 apt-get 安裝, 如 protobuf, 需要使用源碼安裝;
(3) 安裝?protobuf
安裝 protobuf 流程 : 注意 必須要安裝 最新版本 3.0 版本 的, 否則會報錯;
-- 官方下載地址 :?https://github.com/google/protobuf/releases?;
-- CSDN 下載地址 :?http://download.csdn.net/detail/han1202012/8371977;
-- 簡介 : 使用 Ubuntu 的 apt-get 可以安裝除?protobuf 之外的其它軟件 或 軟件包,?protobuf 需要使用源碼安裝;
-- protobuf?源碼下載 : 提供了 CSDN 下載, 下載地址 : 點擊打開鏈接;
-- 解壓源碼 : 使用 tar -xvzf protobuf-cpp-3.0.0-alpha-1.tar.gz 解壓源碼,?進入?protobuf 源碼目錄;
-- 配置環境?: 執行?./autogen.sh 命令;
-- 生成 Makefile 文件 : 執行 ./configure 命令, 生成本平臺的 Makefile 文件;
-- 編譯 : 執行 make 命令, 進行編譯;
-- 檢查編譯結果 : 執行 make check 命令, 檢查編譯結果是否正確, 出現以下內容說明編譯很順利, 沒有錯誤;
-- 安裝軟件 : 執行 sudo make install 命令, 注意一定要帶 root 權限;
-- 配置環境變量 : 編輯 vim ~/.profile 文件, 在最后一行添加?export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib, 之后執行 source ~/.profile 命令, 使用 protoc --version 命令查看版本;
(4) JDK 安裝
JDK 安裝流程 :?
-- 下載 JDK 頁面?: 這里下載 Linux x86 的??jdk-8u25-linux-i586.tar.gz?文件?http://www.oracle.com/technetwork/java/javase/downloads/index.html?;
-- 修改文件名稱 : 下載完畢后 文件名稱是?jdk-8u25-linux-i586.gz, 將文件名修改成?jdk-8u25-linux-i586.tar.gz 即可解壓;
-- 安裝 JDK : 將 JDK 拷貝到 /usr/lib/jvm 目錄下, 解壓;
-- 配置環境變量文件?: vim /etc/profile 文件, 在最后添加以下內容;
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
-- 將該 JDK 加入到當前版本控制 :?update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_25/bin/java 300 ;
update-alternatives 命令詳解?:?
-- 命令作用 : 當 Ubuntu 中有相同名稱的 命令時, 使用該命令進行維護;?
-- display 參數 : 查看命令鏈接組信息, 命令格式?update-alternatives --display cmdName?命令, cmdName 參數是命令名稱;?
octopus@octopus:~$ update-alternatives --display java java - 手動模式鏈接目前指向 /usr/lib/jvm/jdk1.8.0_25/bin/java /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java - 優先級 1071slave java.1.gz:/usr/lib/jvm/java-7-openjdk-i386/jre/man/man1/java.1.gz /usr/lib/jvm/jdk1.8.0_25/bin/java - 優先級 300 目前“最佳”的版本為 /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java。
-- install 參數 : 將命令加入版本管理, 命令格式?update-alternatives --install link name path priority, link 公共鏈接目錄, name 公共鏈接名稱, path 要加入的命令的路徑, priority 優先級;?
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_25/bin/java 300
(4) SDK 安裝
我在博客開始的位置提供了 SDK 最新版本的下載, 可以直接下載百度網盤中的 SDK;
SDK 下載流程 : 需要安裝最新的 5.0.1 SDK;
-- 下載頁面 :?http://developer.android.com/sdk/index.html?, 也可以到我的博客?http://blog.csdn.net/shulianghan/article/details/38023959?下載;
-- 下載地址 :?https://dl.google.com/android/android-sdk_r24.0.2-linux.tgz, 點擊即可下載;
| Windows | installer_r24.0.2-windows.exe(Recommended) | 91428280 bytes | edac14e1541e97d68821fa3a709b4ea8c659e676 |
| android-sdk_r24.0.2-windows.zip | 139473113 bytes | 51269c8336f936fc9b9538f9b9ca236b78fb4e4b | |
| Mac OS X | android-sdk_r24.0.2-macosx.zip | 87262823 bytes | 3ab5e0ab0db5e7c45de9da7ff525dee6cfa97455 |
| Linux | android-sdk_r24.0.2-linux.tgz | 140097024 bytes | b6fd75e8b06b0028c2427e6da7d8a09d8f956a86 |
-- 使用 SDK Tools 工具 : 將上面下載的?android-sdk_r24.0.2-linux.tgz 解壓, 進入?android-sdk-linux 目錄, 執行?./tools/android 命令, 出現下面情況;
-- 解決 SDK 無法更新問題 : 點擊菜單欄 Tools, 選擇 Options... 選項, 在 Http 代理服務器 設置為?mirrors.neusoft.edu.cn, 端口 80, 并且選中 Others 中的第一個選項;
-- 此時可以下載最新的 SDK 了 :?
(5) NDK 安裝
我在博客開始的位置提供了 NDK r9版本的下載, 可以直接下載百度網盤中的 SDK, 下面是 r10 版本, 不推薦;
NDK 安裝流程 :?
-- NDK 下載地址 :?
| Windows 32-bit | android-ndk-r10d-windows-x86.exe | 455427281 | c0930abfae0c990c4d191cc4ebd46b68 |
| Windows 64-bit | android-ndk-r10d-windows-x86_64.exe | 472613732 | 9a33f96da58a7e0b70e47d27b4a880b4 |
| Mac OS X 32-bit | android-ndk-r10d-darwin-x86.bin | 441545213 | 0aeb3dc062dc457a4cd01e72eadb2379 |
| Mac OS X 64-bit | android-ndk-r10d-darwin-x86_64.bin | 442691567 | cb101e1e62d56ea75b215f6bc6c27fae |
| Linux 32-bit (x86) | android-ndk-r10d-linux-x86.bin | 449997190 | 70ed6d8c34e7e620c145b791e8eeef89 |
| Linux 64-bit (x86) | android-ndk-r10d-linux-x86_64.bin | 459151600 | 263b83071e6bca15f67898548d8d236e |
-- 安裝 NDK : 執行 ./android-ndk-r10d-linux-x86.bin 命令, 安裝 ndk;
(6) 設置交叉編譯指令集
查看手機 cpu 指令集?: 這個值需要在配置環境變量時使用;
--?查看命令?: 進入?adb shell?手機命令行;
--?查看 /proc/cpuinfo 文件?: 執行?cat /proc/cpuinfo?命令;
(7) 配置 SDK 和 NDK 環境變量
配置環境變量文件 :?
-- 配置文件 : 使用 vim /etc/profile 命令, 添加如下內容;
export ANDROID_SDK=/home/octopus/develop/android-sdk-linux export ANDROID_NDK=/home/octopus/develop/android-ndk-r9c export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools export ANDROID_ABI=armeabi-v7a export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib配置環境變量(命令行形式)?:?
--?配置 SDK 目錄?:?export ANDROID_SDK=/home/octopus/develop/android-sdk-linux?;
--?配置 NDK 目錄?:?export ANDROID_NDK=/home/octopus/develop/android-ndk-r9c?;
--?配置 SDK 工具目錄?:?export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools?;
--?配置交叉編譯指令集?:?export ANDROID_ABI=armeabi-v7a?;
--?配置?protobuf 環境變量?:?export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib?;
--?家里的 Win8 + Vmware 虛擬機 11 (Ubuntu 14.04.1 LTS)?:?
octopus@octopus:~/develop/vlc_android/android$ export ANDROID_SDK=/home/octopus/develop/android-sdk-linux octopus@octopus:~/develop/vlc_android/android$ export ANDROID_NDK=/home/octopus/develop/android-ndk-r9c octopus@octopus:~/develop/vlc_android/android$ export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools octopus@octopus:~/develop/vlc_android/android$ export ANDROID_ABI=armeabi-v7a octopus@octopus:~/develop/vlc_android/android$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib最終的 /etc/profile 環境變量文件最后追加的內容?:?
請仔細核對, 除了?SDK, NDK, JDK具體路徑 和 交叉編譯指令 不一樣?之外, 變量名稱 必須一致;
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATHexport ANDROID_SDK=/home/octopus/develop/android-sdk-linux export ANDROID_NDK=/home/octopus/develop/android-ndk-r9c export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools export ANDROID_ABI=armeabi-v7a export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
2. 執行編譯
坎坷的編譯過程 :?
-- 獲取源碼 :
git clone git://git.videolan.org/vlc-ports/android.git-- 前置條件 : 之前配置好了 /etc/profile, 重啟下 確認下環境變量生效, 切換到 root 用戶, 使用 su root 命令;
-- 編譯 debug 版本?: 執行 sh compile.sh 命令, 如果前面的配置完全正確, 編譯會順利進行, 如果出現錯誤, 自求多福吧, 慢慢調試, 使用 Google 搜索, 不要使用百度, 百度搜不到有用的結果, 編譯成功后在 vlc-android/bin 目錄下會生成沒有簽名的 apk 文件;
-- 編譯 release 版本 : 執行 sh compile.sh release 命令, 即可編譯成功;
-- 編譯成功標志 : 出現以下內容即編譯成功;
BUILD SUCCESSFUL Total time: 30 seconds rm android-libs/libui.c android-libs/libmedia.c android-libs/libhardware.c android-libs/libcutils.c android-libs/libbinder.c android-libs/libutils.c android-libs/libstagefright.c Generating environment script. This is a script that will export many of the variables used in this script. It will allow you to compile parts of the build without having to rebuild the entire build (e.g. recompile only the Java part).To use it, include the script into your shell, like this:source env.shNow, you can use this command to build the Java portion:make -eThe file will be automatically regenerated by compile.sh, so if you change your NDK/SDK locations or any build configurations, just re-run this script (sh compile.sh) and it will automatically update the file.
3. 編譯錯誤解決方案
(1) 由于政府原因墻了 googlecode.com (使用 VPN)
政府屏蔽站點 :
-- 報錯信息?: ?
--2015-01-16 11:14:29-- http://openjpeg.googlecode.com/files/openjpeg-1.5.0.tar.gz 正在解析主機 openjpeg.googlecode.com (openjpeg.googlecode.com)... 173.194.72.82, 2404:6800:4008:c01::52 正在連接 openjpeg.googlecode.com (openjpeg.googlecode.com)|173.194.72.82|:80... 失敗:連接超時。 正在連接 openjpeg.googlecode.com (openjpeg.googlecode.com)|2404:6800:4008:c01::52|:80... 失敗:網絡不可達。 make: *** [../../contrib/tarballs/openjpeg-1.5.0.tar.gz] 錯誤 4
-- 解決方案 : 連上 VPN 即可, 本人買了一條 4M 的美國 VPN 獨享帶寬的專線, 做 Android 開發沒有 VPN 可不行;
(2) 文件下載失敗錯誤
文件下載失敗錯誤 :?
-- 報錯信息 :?
curl -f -L -- "http://heanet.dl.sourceforge.net/sourceforge/freetype/freetype2/2.5.3/freetype-2.5.3.tar.gz" > "../../contrib/tarballs/freetype-2.5.3.tar.gz"% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed0 409 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 00 355 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 022 2214k 22 503k 0 0 5760 0 0:06:33 0:01:29 0:05:04 19510 curl: (18) transfer closed with 1751664 bytes remaining to read make: *** [../../contrib/tarballs/freetype-2.5.3.tar.gz] 錯誤 18 make: *** 正在刪除文件“../../contrib/tarballs/freetype-2.5.3.tar.gz” -- 解決方案 : 重新執行編譯, 或者連上 VPN 即可;
(3) make: *** [.a52] 錯誤
make: *** [.a52] 錯誤 :?
-- 報錯信息 : 該錯誤是在 Ubuntu 12.04.4 LTS 版本中出現的, 需要使用最新的版本進行編譯;
checking for inttypes.h... autoreconf: running: /home/octopus/vlc_player/vlc_android/android/vlc/extras/tools/build/bin/autoheader --include=/home/octopus/vlc_player/vlc_android/android/vlc/contrib/arm-linux-androideabi/share/aclocal --force yes configure.in:74: error: possibly undefined macro: AC_DISABLE_SHAREDIf this token and others are legitimate, please use m4_pattern_allow.See the Autoconf documentation. configure.in:75: error: possibly undefined macro: AC_LIBTOOL_WIN32_DLL configure.in:76: error: possibly undefined macro: AC_PROG_LIBTOOL checking for stdint.h... autoreconf: /home/octopus/vlc_player/vlc_android/android/vlc/extras/tools/build/bin/autoconf failed with exit status: 1 make: *** [.a52] 錯誤 1 make: *** 正在等待未完成的任務.... configure.in:20: error: possibly undefined macro: AM_PROG_LIBTOOLIf this token and others are legitimate, please use m4_pattern_allow.See the Autoconf documentation. autoreconf: /home/octopus/vlc_player/vlc_android/android/vlc/extras/tools/build/bin/autoconf failed with exit status: 1 make: *** [.ogg] 錯誤 1
-- 報錯原因 :?使用的 Ubuntu 操作系統版本略低, 使用的 Ubuntu 12.04.5 LTS 操作系統版本太老, 主要是?config.guess 和 config.sub 兩個腳本需要更新;
-- 解決方案 : 使用更高級別的 Ubuntu 操作系統, 使用 Ubuntu 14.04.1 LTS 版本?的 Ubuntu 編譯 VLC 源碼即可編譯通過;
make: *** [.a52] 錯誤二?:?
-- 報錯信息 :?
BEGIN failed--compilation aborted at /home/octopus/vlc_com/vlc_android/android/vlc/extras/tools/build/bin/autoreconf line 39. make: *** [.a52] Error 2 make: *** Waiting for unfinished jobs.... make: *** [.fribidi] Error 2 make: *** [.openjpeg] Error 2 -- 錯誤原因 :?
-- 解決方案 :?
(4) make[3]: *** [unittest_proto_middleman] 錯誤
protobuf 版本過低 :?
-- 報錯信息 :?
make[3]: *** [unittest_proto_middleman] 錯誤 1 make[2]: *** [all-recursive] 錯誤 1 make[1]: *** [all] 錯誤 2 make: *** [.protobuf] 錯誤 2
-- 報錯原因 : 使用了?protobuf 2.5 版本, 這個版本太低了;
-- 解決方案 : 使用?protobuf 3.0 最新版本?即可, 該錯誤即可解決;
(5)?Perhaps JAVA_HOME does not point to the JDK 錯誤
JDK 錯誤 :?
-- 報錯信息 :?
BUILD FAILED /home/octopus/develop/android-sdk-linux/tools/ant/build.xml:601: The following error occurred while executing this line: /home/octopus/develop/android-sdk-linux/tools/ant/build.xml:720: The following error occurred while executing this line: /home/octopus/develop/android-sdk-linux/tools/ant/build.xml:734: Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK. It is currently set to "/usr/lib/jvm/java-7-openjdk-i386/jre"Total time: 3 seconds make: *** [vlc-android/bin/VLC-debug.apk] 錯誤 1-- 錯誤原因 : 這是因為沒有進行 JDK 的安裝和配置, 需要配置 JAVA_HOME 環境變量, Ubuntu 14.04.1 LTS 版本 默認安裝的 JDK 是錯誤的, 需要重新安裝 Oracle JDK 8;
-- 解決方案 : 執行下面的 JDK 安裝流程, 注意一定要配置 JAVA_HOME 環境變量, 這樣就能成功進行編譯;
JDK 安裝流程?:?
--?下載 JDK 頁面?: 這里下載 Linux x86 的??jdk-8u25-linux-i586.tar.gz?文件?http://www.oracle.com/technetwork/java/javase/downloads/index.html?;
--?修改文件名稱?: 下載完畢后 文件名稱是?jdk-8u25-linux-i586.gz, 將文件名修改成?jdk-8u25-linux-i586.tar.gz 即可解壓;
--?安裝 JDK?: 將 JDK 拷貝到?/usr/lib/jvm?目錄下, 解壓;
--?配置環境變量文件?:?vim /etc/profile?文件, 在最后添加以下內容;
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH--?將該 JDK 加入到當前版本控制?:?update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.7.0_51/bin/java 300?;
三. 導入源碼到 eclipse
1. 環境準備
需要的環境 (必須滿足) : SDK, eclipse, ADT, JDK 必須都是最新版本的, 低一個版本都會導入出錯;
-- SDK : 調試該源碼需要最新版本的 SDK, 即需要安裝最新版本的 SDK Tools 24.0.2, 以及 android-5.0.1 的 sdk 平臺, 在下面的鏈接中下載對應版本的 SDK;
| Windows | installer_r24.0.2-windows.exe(Recommended) | 91428280 bytes | edac14e1541e97d68821fa3a709b4ea8c659e676 |
| android-sdk_r24.0.2-windows.zip | 139473113 bytes | 51269c8336f936fc9b9538f9b9ca236b78fb4e4b | |
| Mac OS X | android-sdk_r24.0.2-macosx.zip | 87262823 bytes | 3ab5e0ab0db5e7c45de9da7ff525dee6cfa97455 |
| Linux | android-sdk_r24.0.2-linux.tgz | 140097024 bytes | b6fd75e8b06b0028c2427e6da7d8a09d8f956a86 |
-- eclipse : 下載最新的 eclipse 4.4.1, 如果你的電腦室 64 位的, 就下載 64 位 eclipse, 在下面提供 Windows, Linux, MAC OS 三個平臺的下載;
-- ADT : 下載最新版本的 ADT 23.04 版本,?點擊打開鏈接?;
-- JDK : 需要 Oracle JDK 8, 如果你的電腦室 64位的, 就下載 64 位 JDK, 下載頁面 :?點擊打開鏈接;
eclipse 下載地址 (被墻了, 這里給出相關版本下載地址) :?
-- Windows 版本 :?
Eclipse IDE for Java EE Developers, 254 MB
Downloaded 111,514 TimesTools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn...
Windows 32 BitWindows 64 Bit
-- Linux 版本 :?
Eclipse IDE for Java EE Developers, 252 MB
Downloaded 111,514 TimesTools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn...
Linux 32 BitLinux 64 Bit
-- MAC OS 版本 :?
Eclipse IDE for Java EE Developers, 252 MB
Downloaded 111,514 TimesTools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn...
Mac OS X 32 BitMac OS X 64 Bit
2. eclipse 調試源碼
(1) 源碼介紹
相關源碼介紹 : VLC 源碼依賴于 另外四個工程;
-- vlc-android 工程 :?VLC 的主要源碼;?
-- appcompat 工程 : ?低版本兼容庫,?VLC 源碼 vlc-android 需要依賴該工程;
--?cardview 工程 :?VLC 源碼?vlc-android 需要依賴該工程;
--?libvlc 工程 :?VLC 源碼?vlc-android 需要依賴該工程;
--?WheelView 工程 :?VLC 源碼?vlc-android 需要依賴該工程;
(2) 源碼導入
將源碼導入 eclipse : 主需要重新設置一下依賴, 其它不用修改;
-- vlc 源碼依賴 : vlc 依賴其余的四個工程, 下面的是?project.properties 內容;
target=android-21 android.library.reference.1=..\\libvlc android.library.reference.2=../appcompat android.library.reference.3=../cardview android.library.reference.4=../WheelView
(3) 執行安裝
執行效果 :?
四. 程序結構詳解
1. 包結構詳解
VLC Android 源碼包結構分析 :?
-- 主包結構截圖 : org.vedio.vlc 包下的內容;
-- audio 包 : 音頻相關的包;
-- gui 包 : 界面 UI 相關包;
? ? ?
-- interfaces 包 : 定義各種接口;
-- widget 包 : 自定義組件相關的包;
-- utils 包 : 相關工具類;
2. 主要類介紹
注意?:?以下介紹僅限于我個人理解, 不一定正確, 請結合自己的理解去閱讀代碼, 不要被我帶溝里;
(1)?org.videolan.vlc 下類介紹
org.videolan.vlc 下類介紹 :?
--?MediaDatabase 介紹 : 數據庫操作相關類, 該類中定義了 SQLiteOpenHelper 子類, 并且定義了幾個數據庫, 創建了以下數據表?directories_table 路徑表,?media_table 媒體信息表,?playlist_table 單個播放列表,?playlist_media_table 播放列表集合表,?searchhistory_table 搜索記錄表,?mrl_table mrl 表;
--?MediaGroup 介紹 : 繼承了 Media 類(在 libvlc 中維護, 維護視頻音頻后綴名稱或擴展名), 用于維護一個 Media 集合;?
--?MediaLibrary 介紹 : Media 相關庫, 該類中維護了一個條目列表, 主要對這個條目列表進行操作 (疑問, 沒看懂);
--?PhoneStateReceiver 介紹 : 廣播接收者, 一個監聽手機電話狀態的廣播接收者, 如果有電話打入, 或結束通過, 進行對應的操作;
--?RemoteControlClientReceiver 介紹 : 廣播接收者, 通過遠程 wifi, 藍牙, 屏幕鎖定解鎖 等接收事件, 進行響應的操作;
--?Thumbnailer 介紹 : 是 Runnable 子類,?thumbnail 用于代表要執行的動作, 等待播放的流媒體;
--?VLCApplication 介紹 : Application 子類, 進行全局的設置;
--?VLCCallbackTask 介紹 :?AsyncTask 的子類, 這是個回調的幫助類, 能夠在線程中更容易實現回調;
--?VLCCrashHandler 介紹 : 用于處理未捕獲的崩潰信息, 打印到日志 或者 文件中;
(2)?org.videolan.vlc.audio 下類介紹
org.videolan.vlc.audio 包類介紹 :?
--?AudioService 介紹 : 集成 Service, 播放音頻的后臺服務;
--?AudioServiceController 介紹 : 音頻服務控制類;
--?RepeatType 介紹 : 重復類型枚舉定義, 不重復, 重復一次, 循環;
(3)?org.videolan.vlc.widget 下類介紹
org.videolan.vlc.widget 類介紹 :?
--?AnimatedCoverView 介紹 : 繼承 View 組件, 自定義組件, 動畫切換相關的 自定義 View;
--?AudioMediaSwitcher 介紹 : 繼承結構?AudioMediaSwitcher ->?FlingViewGroup ->?ViewGroup, 音頻媒體切換相關類;
--?AudioPlaylistItemViewGroup 介紹 : 繼承結構?AudioPlaylistItemViewGroup ->?FlingViewGroup, 音頻播放列表相關類;
--?ContentLinearLayout 介紹 : 繼承 LinearLayout, 重寫了?onInterceptTouchEvent 方法, 用于攔截觸摸事件, 當媒體正在播放的時候, 如果觸摸子組件, 觸發事件, 會影響播放, 此時我們需要攔截這些觸摸事件;
--?EqualizerBar 介紹 : 繼承 LinearLayout, 均衡器調節條;
--?ExpandableLayout 介紹 : 主要內容;
--?FlingViewGroup 介紹 : 繼承 ViewGroup, 主要是修改了一些手勢操作, 覆蓋重寫了?onScrollChanged,?onTouchEvent,?onInterceptTouchEvent 方法;
--?HeaderScrollView 介紹 : 繼承?HorizontalScrollView, 橫向滑動的 View 組件;
--?SlidingPaneLayout 介紹 : 繼承 ViewGroup, 這個類是從 Android 中剝離出來的, 屬于 support-v4 中的一個類, 如果想要上下滑動, 不是左右側劃, 需要修改一些地方;
--?VerticalSeekBar 介紹 : 繼承 SeekBar, 這個組件是一個垂直的拖動條;
--?VLCAppWidgetProvider 介紹 : 集成?AppWidgetProvider 類, App 組件提供者, 相當與一個廣播接收者;
(4)?org.videolan.vlc.util 下類介紹
org.videolan.vlc.util 包類介紹 :?
--?AndroidDevices 類 : 獲取手機相關信息, 是否有內存卡, 手機型號, 獲取存儲路徑, 獲取媒體目錄;
--?BitmapCache 類 : 圖片緩存相關類, 使用?LruCache 實現圖片的流暢緩存;
--?BitmapUtil 類 : 處理位圖相關類, 提供 邊緣切割, 縮放, 從緩存中獲取圖片;
--?CustomDirectories 類 : 管理用戶信息存放路徑;
--?Logcat 類 : 獲取日志, 將日志輸出到文件中;
-- MurmurHash?:?MurmurHash算法:高運算性能,低碰撞率,由Austin Appleby創建于2008年;
--?Preferences :?SharedPreferences 操作相關;
--?Strings : 用于處理字符串相關的工具類;
--?Util : 一些小公共方法;
--?VLCInstance : libvlc 相關的類, 與 libvlc 工程相關;
--?VLCRunnable : 繼承 Runnable,?線程相關類;
--?WeakHandler : 繼承?Handler;
(5)?org.videolan.vlc.interfaces 下類介紹
org.videolan.vlc.interfaces 包介紹 :?
--?IAudioPlayer 介紹 : 音頻播放接口, 提供了更新 和 更新進度條方法;
--?IAudioPlayerControl 介紹 : 音頻播放控制接口, 提供了一系列的音頻控制方法;
(4)?org.videolan.vlc.audio 下類介紹
org.videolan.vlc.gui.audio.widget 包介紹 :?
--?CoverMediaSwitcher 介紹 : 繼承結構?CoverMediaSwitcher ->?AudioMediaSwitcher ->?FlingViewGroup ->?ViewGroup;
--?HeaderMediaSwitcher 介紹 : 繼承結構?HeaderMediaSwitcher ->?AudioMediaSwitcher ->?FlingViewGroup ->?ViewGroup;
作者?:?韓曙亮?
博客地址?:?http://blog.csdn.net/shulianghan/article/details/42707293
轉載請注明出處?:?http://blog.csdn.net/shulianghan
總結
以上是生活随笔為你收集整理的【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【嵌入式开发】 Bootloader 详
- 下一篇: 【Android应用开发】 Androi