最近在Android做流媒体相关的开发,一直想学习一下强大的VLC,正好趁此机会研究研究VLC-for-android的代码,看看优秀的开源音视频播放器是如何实现的。本文总结下在Linux平台下如何编译VLC-for-android。
编译环境:Ubuntu 14.04 64bit,VLC版本2.1.5
参考的文章:https://wiki.videolan.org/AndroidCompile/
1. 准备编译环境
基本上按照这篇wiki的介绍就足够了,为了顺利完成编译,建议首先保证相关的软件或者依赖库都已经下载好了,我再强调一下几个重点注意事项。
(1) Android SDK:必须使用SDK Platform Android 5.0, API 21,因为VLC-for-android用到了Android 5.0 的一些API。
(2) 最好通过apt-get install 把下面这些依赖的软件都安装一遍,或更新到最新版
git,apache-ant (or ant), autoconf, automake, autopoint, cmake, gawk (or nawk), gcc, g++, libtool, m4, patch, pkg-config, ragel, subversion, unzip.
2. 下载源码包
直接通过git下载VLC-for-android最新的源码即可:
1
class="bash plain">git clone git:
//git
.videolan.org
/vlc-ports/android
.git
3. 编译VLC源码和VLC Android工程
(1) 配置编译环境变量
具体参考wiki的介绍,你可以写个shell脚本来执行,避免每次编译都要配置,下面是我的环境变量,可以根据你的路径修改:
1 2 3 4 5 6
#! /bin/sh
functions">export
ANDROID_SDK=
/opt/android/sdk/
export
ANDROID_NDK=
/opt/android/android-ndk-r10/
export
ANT_DIR=
/opt/android/ant/
export
PATH=$PATH:$ANDROID_SDK
/platform-tools
:$ANDROID_SDK
/tools
:$ANT_DIR
export
ANDROID_ABI=armeabi-v7a
(2) 执行编译
1
sh compile.sh
VLC不愧是使用这么广泛的播放器,它的编译脚本写得非常强大和智能,直接通过执行compile.sh,它会自动check所有的依赖,并通过网络去下载缺失的库。
首先,它会下载vlc的源码,并存放在当前目录下。然后去下载依赖的第三方库文件。
当然,由于GFW的存在,有的时候下载会失败,这个时候,就需要你手动去Google搜索它正在下载的依赖文件,手动下载好了之后放到 vlc/contrib/tarballs目录下,然后再回到命令行重新执行 sh compile.sh
它依赖的全部第三方库文件如图所示:
(3) 编译问题
编译过程还算顺利,只出现过一个大问题,如下:
1 2 3
google
/protobuf/unittest
.proto:853:21: Missing field number.
google
/protobuf/unittest
.proto:862:1: Reached end of input
in
message definition (missing
'}'
).
make
[3]: *** [unittest_proto_middleman] Error 1
网上也搜不到解决方案,我看了下GitHub上Protobuf的Readme,然后下载了最新的protobuf放到vlc/contrib/tarballs/contrib-android-arm-linux-androideabi/protobuf目录下,执行./configure --disable-shared,再编译,没想到就直接过了。
4. 加载VLC-For-Android的Java工程
编译通过后,就可以直接在vlc-android/bin目录下看到debug版的apk了,下面简单说说在Eclipse中加载vlc-android的整个工程。
打开Eclipse,选择Import,把vlc-for-android目录下所有的工程到导入到Eclipse中(我去掉了TV工程),如图所示,有5个必须的工程,其中,VLC是主工程,其他四个都是Lib工程。没有什么意外的话,直接运行VLC工程,就可以在Android手机上看到VLC播放器应用了!
5. 总结
Vlc-for-android的编译过程就简单地介绍到这儿了,有任何疑问欢迎留言讨论或者来信lujun.hust@gmail.com交流。