众所周知,Android中播放音视频一般使用系统提供的MediaPlayer,但用过MediaPlayer的人都知道,它有很多缺点,播放速度不够快,稳定性和兼容性很差,5.0以下系统性能很差,基本处于不可用的状态,说了半天缺点有没有什么可替代的方案呢,答案当然是有的,就是我大B站的ijkplayer,它是一款基于FFmpeg的轻量级 Android/iOS视频播放器,网上资料挺多的,而且官方也有维护,和MediaPlayer 差不多的接口,性能和稳定性要比MediaPlayer高一个档次,但是它官方提供的so不支持https, 接下来我就要教大家如何在Linux上编译ijkplayer的so库。
话不多说,立马开干。
安装环境
- 安装 git, yasm
sudo apt-get install git
sudo apt-get install yasm
注:如安装出错,先执行sudo apt-get update
进行更新,再执行以上指令
-
下载并配置Android SDK和NDK
SDK就不说了,你开发安卓肯定会有的,NDK一般是不默认下载的,推荐到Android官方网站下载:https://developer.android.google.cn/ndk/downloads/index.html,编译ijkplayer的NDK的最小版本支持是10e,目前不支持NDK15及以上版本!
接着是配置环境变量:
可以参考我的一篇文章:https://www.jianshu.com/p/756ad1ad3375
开始编译
- 拉取ijkplayer源码
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
- 初始化android
./init-android.sh
- 初始化openssl支持Https
./init-android-openssl.sh
注:如果出现NDK或者SDK找不到,可以执行一下source ~/.bash_profile
- 清除一波
cd android/contrib
./compile-openssl.sh clean
./compile-ffmpeg.sh clean
- 编译openssl
./compile-openssl.sh all
编译时出现Failed to create toolchain.
错误,请安装python
sudo apt-get install python
编译时出现 FD: libncurses.so.5: cannot open shared object file: No such file or directory
错误,请安装libncurses5
:
sudo apt-get install libncurses5
- 编译ffmpeg
这里的话看你需要,如果想编译所有版本的so库,就跟all,如果是特定 CPU架构就跟cpu架构,比如:./compile-ffmpeg.sh armv7a
编译特定需要的肯定是比全部耗时短~
./compile-ffmpeg.sh all
- 编译ijkplayer
加all默认编译所有架构的so库,不加默认只编译armv7a架构!
cd ..
./compile-ijk.sh all
编译成功后,会生成如下三个文件:
将so文件复制到项目的libs目录,如下图,并在build.gradle中加入如下代码:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
注意:不同架构要单独创建相应的文件夹。
到此,编译一个支持HTTPS的ijkplayer就完成了
最后附上我自己写的一个基于ijkplayer的播放器,https://github.com/dueeeke/dkplayer