首页 > 代码库 > 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

【流媒体开发】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 简介




1. VLC 相关产品简介



(1) VLC 学习路线图






2. 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 - 优先级 1071
  slave 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, 点击即可下载;

PlatformPackageSizeSHA-1 Checksum
Windowsinstaller_r24.0.2-windows.exe(Recommended)91428280 bytesedac14e1541e97d68821fa3a709b4ea8c659e676
android-sdk_r24.0.2-windows.zip139473113 bytes51269c8336f936fc9b9538f9b9ca236b78fb4e4b
Mac OS Xandroid-sdk_r24.0.2-macosx.zip87262823 bytes3ab5e0ab0db5e7c45de9da7ff525dee6cfa97455
Linuxandroid-sdk_r24.0.2-linux.tgz140097024 bytesb6fd75e8b06b0028c2427e6da7d8a09d8f956a86

-- 使用 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 下载地址

PlatformPackageSize (Bytes)MD5 Checksum
Windows 32-bitandroid-ndk-r10d-windows-x86.exe455427281c0930abfae0c990c4d191cc4ebd46b68
Windows 64-bitandroid-ndk-r10d-windows-x86_64.exe4726137329a33f96da58a7e0b70e47d27b4a880b4
Mac OS X 32-bitandroid-ndk-r10d-darwin-x86.bin4415452130aeb3dc062dc457a4cd01e72eadb2379
Mac OS X 64-bitandroid-ndk-r10d-darwin-x86_64.bin442691567cb101e1e62d56ea75b215f6bc6c27fae
Linux 32-bit (x86)android-ndk-r10d-linux-x86.bin44999719070ed6d8c34e7e620c145b791e8eeef89
Linux 64-bit (x86)android-ndk-r10d-linux-x86_64.bin459151600263b83071e6bca15f67898548d8d236e

-- 安装 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:$PATH

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



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.sh

Now, you can use this command to build the Java portion:
    make -e

The 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  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0   409    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0   355    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0
 22 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_SHARED
      If 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_LIBTOOL
      If 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;

PlatformPackageSizeSHA-1 Checksum
Windowsinstaller_r24.0.2-windows.exe(Recommended)91428280 bytesedac14e1541e97d68821fa3a709b4ea8c659e676
android-sdk_r24.0.2-windows.zip139473113 bytes51269c8336f936fc9b9538f9b9ca236b78fb4e4b
Mac OS Xandroid-sdk_r24.0.2-macosx.zip87262823 bytes3ab5e0ab0db5e7c45de9da7ff525dee6cfa97455
Linuxandroid-sdk_r24.0.2-linux.tgz140097024 bytesb6fd75e8b06b0028c2427e6da7d8a09d8f956a86

-- 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 Times

Tools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn...

Windows 32 Bit
Windows 64 Bit





-- Linux 版本

技术分享

Eclipse IDE for Java EE Developers, 252 MB

Downloaded 111,514 Times

Tools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn...

Linux 32 Bit
Linux 64 Bit





-- MAC OS 版本

技术分享

Eclipse IDE for Java EE Developers, 252 MB

Downloaded 111,514 Times

Tools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn...

Mac OS X 32 Bit
Mac 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可调试播放器源码下载)