Ubuntu编译ijkplayer支持https和更多视频格式

来源:互联网 发布:实对称矩阵的性质 编辑:程序博客网 时间:2024/05/20 10:12

关于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_SDKANDROID_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 已经可以正常运行了。
image
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'        }    }}
阅读全文
0 0