Ubuntu 14.04 下编译 ijkplayer Android

ijkplayer 是一个基于 ffplay 的开源视频播放器核心,支持 iOS/Android 平台,由 bbcallen 编写。

更多特性参阅项目地址:https://github.com/bbcallen/ijkplayer

我的编译环境为 64 位的 Ubuntu 14.04,x86 用户请根据本文自行脑补。

准备文件

首先自然是准备好 git,若未装可通过命令 sudo apt-get install git 安装。
确保已安装 g++,未安装请执行 sudo apt-get install g++ 来安装。
然后找一个目录存放 ijkplayer 的代码仓库。如果想使用稳定分支的 ijkplayer,执行:

git clone https://github.com/bbcallen/ijkplayer.git ijkplayer-android-stable<br>cd ijkplayer-android-stable<br>git checkout -B latest n0.1.3

若使用最新的 master 分支(unstable),则执行:

git clone https://github.com/bbcallen/ijkplayer.git ijkplayer-android-master<br>cd ijkplayer-android-master<br>git checkout master

完毕后 cd 进入克隆的目录,执行:

./init-android.sh

这里会自动下载 ffmpeg 和 android-libyuv 依赖包,其中由于 ffmpeg 仓库在国外,故需要等待较长时间。本人以 15KB/s 的速度下载了两个多小时,等待期间可以做下面的准备。

其次是 Android SDK 以及 NDK。Android SDK 可从官网下载最新版。至于 NDK,目前暂不支持最新的 NDK r10 版本,需要使用上一版 r9d,下载 http://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2,或尝试百度盘 http://pan.baidu.com/s/1nvGUA2d  提取密码 dhmb

需要特别说明的是,下载 NDK 真是一件折腾死人的事,强烈建议在 Windows 中使用迅雷下完后再重启进 Linux 解压。我使用 GoAgent/ShadowSocks 在 ubuntu 的 chrome 中下载 Google 上的 NDK r9d,总是下了一会就断流了,且无法断点续传,反复数次都失败。遂尝试至百度云离线下载该文件,但这个文件下载速度死慢,根本拖不下来。

在这里我把 SDK 和 NDK 解压到了 ~/android-sdk-linux/ 和 ~/android-ndk-r9d/ 下。

准备环境

ubuntu 14.04 的 shell 默认是 dash,这里我们必须改为 bash,否则执行编译脚本时会有很多莫名其妙的问题:

sudo dpkg-reconfigure dash

它会问你是否使用 dash 作为系统缺省 shell,在这里当然是选 <否>/No

接下来需要设置环境变量 ANDROID_SDK 和 ANDROID_NDK。编辑 $HOME/.bashrc,在尾部添加:

export ANDROID_NDK="~/android-ndk-r9d/"<br>export ANDROID_SDK="~/android-sdk-linux/"<br>export PATH=$PATH:$ANDROID_NDK

保存后就可以正式进入编译流程了。

编译 ijkplayer

确保工作目录位于 ijkplayer 主目录,进入 android 子目录:

cd android

编译 ffmpeg 依赖库。由于大多数设备都为 armv7a 架构,故在这里使用之。使用 armv5|armv7a|x86 作为输入来设定平台,或传入 all|clean|check 进行[编译所有平台/清理/检查]。

sh compile-ffmpeg.sh armv7a

若报错,请检查以上各项配置是否正确;否则耐心等待编译完毕即可。

接下来就可以编译 ijkplayer 了:

sh compile-ijk.sh

稍等片刻即可完成编译。若输出中只有两个 Aborting 属正常现象,这是因为 armv5 和 x86 的 ffmpeg 没有编译导致的。如果这一步没有其它错误,那么 ijkplayer 的编译到此就成功完成了。

使用 ijkplayer

编译好的二进制文件位于 android/ijkmediaplayer 下。作者推荐使用 android/ijkmediaplayer 下的 MediaPlayer-Like 接口进行 ijk 调用,亦可使用 android/ijkmediawidget 下的 VideoView-Like 接口进行 ijk 调用。在 android/ijkmediademo 下有一份简单的 VideoActivity 演示,需要在 eclipse 中完整导入这三个项目才能进行测试。

至于 ijkplayer 到底怎么用,占坑,等会用了再回来填坑。

Remarks

ijkplayer 目前在 iOS 平台各方面表现较佳,Android 方面仍存在一些问题。请亲自体会或参阅 issues

相关推荐