最近开始学习和捣鼓ijkplayer,记录一下编译相关过程。
我是在安卓平台上开发的,所以主要记录的也是ijkplayer-android的编译过程,环境是在Ubuntu下编译的。
一、我的编译环境
1、系统:Ubuntu18.04.6
2、jdk:1.8.0_312
3、ndk:android-ndk-r10e-linux-x86_64
4、sdk:android-sdk_r24.4.1-linux
二、编译环境及相关依赖搭建
1、安装必要的软件和依赖
sudo apt-get update
sudo apt-get install git
sudo apt-get install yasm
sudo apt-get install make
2、下载安装openjdk
sudo apt-get install openjdk-8-jre-headless
3、下载安装android NDK和SDK
在Ubuntu下编译,需要下载android ndk和sdk的Linux版本,以便安卓的交叉编译
android NDK下载链接 选择一个Linux版本的即可,ijkplayer官方推荐是android-ndk-r10e
android SDK下载链接 选择一个稍微高一点的Linux版本即可,我用的是android-sdk_r24.4.1-linux
然后把androidNDK和androidSDK分别解压到某个文件夹下。如/xxx/xxx/android-sdk-linux和/xxx/xxx/android-ndk-r10e
新下载好的sdk还需要一些初始化,可能就像windows下的SDKmanager一样还需要去下载一些工具插件之类的东西。我们需要打开android sdk manager,如下脚本启动:
sh /xxx/xxx/android-sdk-linux/tools/android
然后就跟windows下一样,选择下载一些必要的工具等,下载最新的Android SDK Tools和Android SDK Platform-tools以及Android SDK Build-tools,再下载一个最新的Android SDK Platform即可。
4、配置交叉编译相关环境变量
sudo gedit /etc/profile
在/etc/profile配置文件的末尾加入如下部分相关变量:
export PATH=/xxx/xxx/android-sdk-linux/platform-tools:$PATH
export PATH=/xxx/xxx/android-sdk-linux/tools:$PATH
export ANDROID_NDK=/xxx/xxx/android-ndk-r10e
export PATH=/xxx/xxx/android-ndk-r10e:$PATH
让环境变量生效,运行如下命令,每次开机后一般需要运行一次:
source /etc/profile
环境变量配置好后,可以通过如下命令测试是否生效:
//测试ndk是否生效,如果有打印相关版本信息等,即是生效
ndk-build -v
//测试sdk是否生效,如果有打印相关版本信息等,即是生效
adb --version
三、下载ijkplayer源码
下载ijkplayer源码,指明ijkplayer-android,即:
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
四、开始编译
进入源码根目录:
cd ijkplayer-android
1、初始化
运行初始化脚本:
./init-android.sh
这个初始化脚本主要是去提取ffmpeg相关的库,以及libyuv和soundtouch等相关的库,需要保证网络的通畅,下载需要一段时间,若中间有错误,拉取失败,可多次运行拉取,直到成功
如果需要支持https协议的还需要执行如下的初始化脚本(一般都会需要):
./init-android-openssl.sh
2、编译openssl
先编译openssl,即是与https相关的编译。如下脚本编译:
先回到源码根目录,然后:
cd android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all
最后跟all表示全平台编译,若只需要单独编译某个CPU平台,则后面的参数改为arm64、armv7a等等这些。
编译过程部分截图如下:
到最后Finished,即是编译openssl完成。
3、编译ffmpeg
打开config/module.sh,里面是各个编解码的格式,可以在里面根据自己的需要去开启或者禁用。这里暂不修改,使用默认的。
如下脚本进行编译:
先回到源码根目录,然后:
cd android/contrib/
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
同openssl,最后跟all表示全平台编译,若只需要单独编译某个CPU平台,则后面的参数改为arm64、armv7a等等这些。
编译过程部分截图如下:
到最后Finished,即是编译ffmpeg完成。
4、最后编译ijkplayer
如下脚本进行编译:
先回到源码根目录,然后:
cd android
./compile-ijk.sh all
同理,后面跟的all代表全平台编译。
编译过程部分截图如下:
可以看到最后会生成很多so库。
编译成功之后会在android/ijkplayer/下生成对应的android工程,以及各个平台相关库等:
五、编译完成,导入AS工程并运行
编译完成后,可以使用androidstudio打开android/ijkplayer,然后sync成功后,编译并运行到手机上。若运行到手机上,能正常播放它自带的一些流地址,则可初步判断刚才的编译没有问题。
(导入AS并编译工程的过程中也出现了不少问题,会在另一篇文章 --编译好的ijkplayer导入AS工程进行二次开发 中专门讲导入AS过程中出现的问题,这里暂不详述)
运行在手机上并播放截图如下,点击上面的sample,选择其中一个流地址来播放:
至此,ijkplayer整个编译过程即结束,导入AS工程后,还可以对其进行二次开发。