我们在开发播放在线流媒体或者静态文件时(比如播放我们树莓派摄像头的视频流),我们需要有播放器的支持,所以我们选择这款著名的开源播放器项目VLC。
VCL的开源代码从gitlab中可以下载下来,所以我们围绕着VCL 1.7.5 for Android版为基础,从Android的环境的安装(涉及到openjdk,Android sdk,Android ndk的安装,如果你已经安装了这些环境可以直接跳过)到vcl的apk编译。vcl的项目已经迁移到Android studio上,可以借由gradle进行编译,若我们成功编译出vcl项目,那么我们也可以借由这个项目迁移到我们自己的项目中。
1、编译前准备
首先我们需要准备系统,在本文中我选择Ubuntu 14来进行vlc项目的编译(官方要求必须是在linux下编译)(包括一些环境变量和ndk的安装都与linux有所不同)
首先先更新系统与内核
sudo apt-get update
更新完内核以后,安装我们所需要的一些软件,包括gcc(编译环境),git(用来克隆vcl项目)等
在安装前也要注意gettext的版本必须大于0.19.3
sudo apt-get install automake ant autopoint cmake build-essential libtool patch pkg-config protobuf-compiler ragel subversion unzip git
*2、安装环境
2.1、安装gcc4.9
因为Ubuntu默认的服务器ppa只到gcc4.8所以在编译最新的vlc时会报很多错误,所以在之前需要编译安装gcc4.9。
wget https://launchpad.net/ubuntu/+archive/primary/+files/gcc-4.9_4.9.3.orig.tar.gz
然后解压在本地
#压缩包含有gcc与gdc,所以需要cd进去再解压gcc
gunzip -c gcc-4.9_4.9.3.orig.tar.gz|tar xvf -
cd gcc-4.9_4.9.3.orig
安装gcc依赖
sudo apt-get install flex bison build-essential
# 如果要支持multilib(即使编译出来的gcc可以编译32位和64位的程序),需要安装下面的依赖
sudo apt-get install gcc-multilib
#如果你现用的gcc编译器不是Ubuntu 12.04源里的4.6版本,比如我使用的是ppa里的4.8版本,上面的命令需要改成
sudo apt-get install gcc-4.8-multilib
# 在gcc源代码的根目录执行下面的命令,这会下载gmp, mpfr, mpc,并装它们的编译集成到GCC的编译过程中
./contrib/download_prerequisites
建立一个编译目录
mkdir build
cd build
配置安装
../configure --program-suffix=-4.9 --enable-languages=c,c++ --enable-multilib --build=x86_64-linux-gnu --enable-checking=release
make -j4
sudo make install
安装gettext_0.19.6.0
首先,检查gettext的版本是否大于0.19.6.0
#如果版本大于0.19.6.0则跳过此步
gettext --version
下载包
wget https://launchpad.net/ubuntu/+archive/primary/+files/gettext_0.19.6.orig.tar.xz
gunzip -c gettext_0.19.6.orig.tar.xz|tar xvf -
cd gettext_0.19.6.orig
配置安装
./configure
make
sudo make install
2.2、安装openjdk
因为Android是以java为基础开发的,所以我们在使用Android之前需要安装jdk,这里我们采用的是jdk的开源版本openjdk-8。
因为现在Ubuntu14依赖安装最高版本只支持到openjdk7,所以我们在依赖安装之前首先要更新openjdk的下载源。
sudo add-apt-repository ppa:openjdk-r/ppa
更新完下载源以后,我们就可以依赖安装openjdk了
#更新完源以后更新一下系统,让源获取最新的软件列表
sudo apt-get update
sudo apt-get install openjdk-8-jdk
切换jdk版本(若你安装的系统内不包含jdk则可以跳过此步),因为在安装系统时,Ubuntu会默认安装openjdk7,所以现在我们的系统内包含两个jdk,但系统环境变量还指向老版的jdk,所以我们需要更新环境变量。
#将java与javac切换到最新的版本
sudo update-alternatives --config java
sudo update-alternatives --config javac
最后检查一下java的版本是否指向了所安装的openjdk8
java -version
2.3、安装Android SDK/NDK
去谷歌官方SDK下载页或者其他渠道下载到最新的SDK Manager或者也可以下载Android studio协同安装并下载Android。
去谷歌官方NDK下载页下载对应系统相应的NDK版本的二进制包(必须是NDK r10e及以上版本,否则运行脚本时会报NDK版本过低的错误)。
chmod a+x ndk_r10e.bin
#注意,直接运行会解压在当前文件夹下
./ndk_r10e.bin
最后,添加SDK及NDK的环境变量。
nano ~/.profile
#在文件尾部添加
export ANDROID_SDK=/path/to/android-sdk
export ANDROID_NDK=/path/to/android-ndk
export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools
2.4、git克隆VCL-Android
通过gitlab下载到VCL-Android的库
git clone https://code.videolan.org/videolan/vlc-android.git
cd vlc-android
此时若直接运行compile.sh会直接克隆vlc的库,并下载相应的contrib,但有一些库的源码无法在国内下到,需要自行去找,所以我在云盘中共享了vlc 2.2.0的源码以及所有所需的tools包及contrib包,将文件解压后把文件夹复制到vlc-android下即可
360云盘分享地址 https://yunpan.cn/crxqDsc2bKbAS 访问密码 1516
然后直接运行
#DEBUG版
sh compile.sh
#发行版
sh compile.sh release
#指定ABI(ABI默认为armeabi-v7a)
sh compile.sh -a <ABI>
最后贴出官方wiki,若有更新以官方wiki为准。
官方wiki页面
2.5、用Android studio加载项目
用Android studio直接打开vlc-android目录即可。
注意,有的时候我们可能需要移动vlc-android目录
但这时候有可能会报下面这样的错误../../src/extras/libc.c:37:22: fatal error: iconv.h: No such file or directory
,那是因为在一开始的生成的gradle和生成的MakeFile写死了之前的目录,这时需要如下操作:
#删除vlc的编译生成文件
rm -rf ~/android-vlc/vlc/build-android-arm-linux-androideabi
#清除make信息
cd ~/vlc-android/vlc/contrib/contrib-android-arm-linux-androideab
make clean