关于ijkplayer
基于 FFmpeg n3.1 的 Android/iOS 视频播放器,支持 MediaCodec, VideoToolbox,支持 RTMP/HTTP/HTTPS 视频流播放,支持本地视频播放。
项目地址:https://github.com/Bilibili/ijkplayer
如果是使用的 Windows 系统需要先用虚拟机装个 Linux 系统,因为 ijkplayer 相关库需要在 Linux 环境下编译。
开始
1) 所需环境
* 系统:Ubuntu 17.04 (windows下安装Linux虚拟机)
* NDK:android-ndk-r13b (建议使用 r10e 以上版本)
* SDK:android-sdk
2) 打开终端,执行下面命令,安装git、vim、yasm
sudo apt-get install git
sudo apt-get install yasm
sudo apt-get install vim
3) 克隆ijkplayer代码
// 把代码clone到本地
git clone https://github.com/Bilibili/ijkplayer ijkplayer-android
4) 配置环境变量
在开始编译之前需要先配置ANDROID_SDK
与ANDROID_NDK
环境变量。
下载(步骤1处得到)完成后执行下面命令解压SDK和NDK
$ sudo tar -zxvf android-sdk_r24.4.1-linux.tgz
$ sudo mv android-sdk-linux /opt/Android
$ sudo unzip android-ndk_r13b-linux-x86_64.zip
$ sudo mv android-ndk-r13b /opt/Android/
在命令行终端中运行命令$ sudo vim /etc/profile
在文件末尾添加如下内容
export ANDROID_NDK=/opt/Android/android-ndk-r13b
export PATH=$PATH:$ANDROID_NDK
export ANDROID_SDK=/opt/Android/sdk
export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
完成后重启Ubuntu。
编译ijkplayer
编译之前的配置
下面三种是ijkplayer给出的配置,我这里执行的是第一种
If you prefer more codec/format
cd config
rm module.sh
ln -s module-default.sh module.sh
cd ..
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
If you prefer less codec/format for smaller binary size (include hevc function)
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
If you prefer less codec/format for smaller binary size (by default)
cd config
rm module.sh
ln -s module-lite.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
1) 下载ijkplayer所需的FFmpeg代码
// 进入工程根目录
cd ijkplayer-android
// checkout ffmpeg 源码,默认从 https://github.com/Bilibili/FFmpeg.git checkout
./init-android.sh
2) 下载ijkplayer对https协议支持的代码
// checkout openssl android源码,默认从 https://github.com/Bilibili/openssl.git checkout
./init-android-openssl.sh
开始编译
1) 编译 openssl
// 首先 cd 到 ijkplayer/android/contrib 目录下,Android下编译脚本就放在该目录下
cd android/contrib
// 编译 openssl
./compile-openssl.sh clean
./compile-openssl.sh all
2) 编译 ffmpeg
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
3) 编译ijkplayer生成CPU架构的so
// 返回到 ijkplayer-android/android 目录
cd ..
// 编译生成各CPU架构的so,如果不加 all 默认只生成 armv7a 架构的 so
// 编译指定架构的so:compile-ijk.sh armv7a,具体参考 .sh 文件中的 Usage
./compile-ijk.sh all
编译完成后 so 就放在 ijkplayer/android/ijkplayer/ijkplayer-xxx/src/main/libs 目录下。此时编译好的 so 是支持 https 协议的。
ijkplayer-android/android/ijkplayer 是一个 Android Studio 工程,里面有 ijkplayer 的 example 和各架构的 Library Project。
ijkplayer/android/ijkplayer 是一个 Android Studio 工程,里面有 ijkplayer 的 example 和各架构的 Library Project。
此时,把 ijkplayer-android/android/ijkplayer 导入 Android Studio ,ijkplayer-example 已经可以正常运行了。
4) 在自己的工程中引用 ijkplayer 和自己编译的 so
(1) 在 build.gradle 添加 ijkplayer-java 依赖
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.4'
// compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.4' // 这个是 ijkplayer 对 exoplayer 的封装,支持webm格式视频,看项目需求是否添加
(2) 在工程 src\main 目录下新建一个 jniLibs 目录并把 so 拷贝到对应架构名称的目录下。
如果不想引入所有的so文件,可以在Module:app中加入以下代码
android {
defaultConfig {
ndk {
abiFilter "armeabi-v7a" //, 'x86', 'armeabi', 'x86_64', 'arm64-v8a'
}
}
}