1 环境搭建
1.1 编译环境说明
ijkplayer目前支持linux,mac平台编译。windows平台暂不支持。如果没有linux环境,可以使用win10自带的子系统ubuntu进行编译。win10子系统开启方法参见:https://www.jianshu.com/p/58090215bda8也可自行度娘。
本文档主要以win10子系统ubuntu为编译环境进行说明。其它平台都比win10子系统简单,这里就不做具体说明。
1.2 ijkplayer版本说明
ijkplayer默认版本支持的音视频格式和网络协议有限,基本上不满足产品需要(默认支持:mp4、flv、f4v、mkv等)。对于wav、m3u8、https协议等都不支持。需要自己编译ijkplayer源码。编译后的库的大小会有所增加。请根据自己的需要选择编译。全量支持的库大小大概有30M左右。
1.3 环境准备
NDK:android-ndk-r14b-linux-x86_64(ijkplayer仅支持r10e以上r14b及以下的NDK版本),尽量不要使用最新版本的NDK。本人使用r14b验证通过,其它版本没有验证。
SDK:https://developer.android.google.cn/请自行下载android sdk
2 编译步骤
2.1 安装组件
$ sudo apt-get install vim openssh-server git curl wget tar unzip build-essential openjdk-8-jdk yasm python
说明:如果安装失败,请先升级ubuntu:sudo apt-get update
2.2 配置环境变量
2.2.1 NDK环境变量配置
$ sudo unzip android-ndk_r14b-linux-x86_64.zip //在win10子系统中,先进入到windows环境中的ndk下载目录。cd /mnt/e/XXX e代表windows盘符
$ sudo mv android-ndk-r13b /opt/Android/ //如果没有Android目录,可以手动创建mkdir Android
添加NDK到环境变量中
$ sudo vim /etc/profile
在文件末尾添加如下内容,并保存退出
export ANDROID_NDK=/opt/Android/android-ndk-r14b
export PATH=$PATH:$ANDROID_NDK
2.2.2 SDK环境变量配置
android SDK的环境变量配置与NDK配置一样,参见2.2.1
完成后重启Ubuntu或者在终端中source一下profile,建议重启ubuntu,以免source不生效,后面编译报错。
2.3 代码克隆
git clone https://github.com/Bilibili/ijkplayer ijkplayer-android
cd ijkplayer-android
git checkout -B local_k0.8.8 k0.8.8 //切换分支,取k0.8.8分支。local_k0.8.8是本地分支,可以自己命名。切记一定要切换到k0.8.8分支,master或其他分支后续的编译会报错
2.4 ijkplayer编译步骤
2.4.1 编译配置
ijkplayer有三种编译配置
1)支持较多格式(完全编译,几乎所有格式都支持了),文件较大。本人使用的此种方式。最终的大小估计有30M左右。
$ cd config
$ rm module.sh
$ ln -s module-default.sh module.sh
2)支持较少格式,包含hevc
$ cd config
$ rm module.sh
$ ln -s module-lite-hevc.sh module.sh
3)支持较少格式(默认)
$ cd config
$ rm module.sh
$ ln -s module-lite.sh module.sh
2.4.2 ffmpege和openssl编译
下载源码:
开源项目中并没有直接包含ffmpeg和openssl源码,所以编译前需要先下载
// 进入工程根目录
$ cd ijkplayer-android
// checkout ffmpeg 源码,ffmpeg有300多M,下载可能会有点慢
$ ./init-android.sh
// checkout openssl android源码
$ ./init-android-openssl.sh
编译
// 编译openssl(用于支持https)
$ cd android/contrib
$ ./compile-openssl.sh clean
$ ./compile-openssl.sh all
// 编译 ffmpeg
$ ./compile-ffmpeg.sh clean
$ ./compile-ffmpeg.sh all
如果在编译ffmpeg时有报:fatal error: linux/perf_event.h: No such file or directory错误,那么在ijkplayer-android/config/module.sh的末尾添加如下配置,再重新编译即可
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"
2.4.3 ijkplayer编译
// 编译ijkplayer
$ cd ..
$ ./compile-ijk.sh all
编译完成后的包在:ijkplayer-android/android/ijkplayer目录下。
2.5 集成
集成:
ijkplayer-android/android/ijkplayer目录是一个 Android Studio 工程,经过编译后即是一个完整的工程,可以直接拷贝出来用Android Studio打开使用。
ijkplayer-example:示例
ijkplayer-java:java层的库(必须的)
ijkplayer-xxx:各种架构的so库
ijkplayer-exo:对ExoPlayer的封装
也可以将lib工程中的so拷贝到新建的工程中,只需要依赖对应版本的java层的库即可,这里是k0.8.8
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' //也可以将ijkplayer-java源码直接拷贝到工程中。
ijkplayer全量包下载地址:https://github.com/whtnlily/MyIjkplayer.git