Ubuntu编译ijkplayer支持https和更多视频格式
关于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 gitsudo apt-get install yasmsudo 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-r13bexport PATH=$PATH:$ANDROID_NDKexport ANDROID_SDK=/opt/Android/sdkexport PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
完成后重启Ubuntu。
编译ijkplayer
编译之前的配置
下面三种是ijkplayer给出的配置,我这里执行的是第一种
If you prefer more codec/format
cd configrm module.shln -s module-default.sh module.shcd ..cd android/contrib# cd iossh compile-ffmpeg.sh clean
If you prefer less codec/format for smaller binary size (include hevc function)
cd configrm module.shln -s module-lite-hevc.sh module.shcd android/contrib# cd iossh compile-ffmpeg.sh clean
If you prefer less codec/format for smaller binary size (by default)
cd configrm module.shln -s module-lite.sh module.shcd android/contrib# cd iossh 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' } }}
更多相关文章
- Android(安卓)ijkplayer编译(支持https协议)
- 如何将Android(安卓)源码中编译出的apk进行自己的签名
- Android(安卓)Studio 编译缓存(Build Cache)
- Mac编译FFmpeg Android动态so库实践
- android 编译命令
- Android(安卓)MVPR 架构模式-Part1
- android使用ffmpeg的实例程序
- Ubuntu下ndk-build编译C++出错:non-numeric second argument to `
- [置顶] android自动化测试之CTS