ndk

基于win10子系统ijkplayer全量编译(支持所有格式)流

2019-10-01  本文已影响0人  天涯之外2099

1 环境搭建

1.1 编译环境说明

ijkplayer目前支持linux,mac平台编译。windows平台暂不支持。如果没有linux环境,可以使用win10自带的子系统ubuntu进行编译。win10子系统开启方法参见:https://www.jianshu.com/p/58090215bda8也可自行度娘。

    本文档主要以win10子系统ubuntu为编译环境进行说明。其它平台都比win10子系统简单,这里就不做具体说明。

1.2 ijkplayer版本说明

ijkplayer默认版本支持的音视频格式和网络协议有限,基本上不满足产品需要(默认支持:mp4、flv、f4v、mkv等)。对于wav、m3u8、https协议等都不支持。需要自己编译ijkplayer源码。编译后的库的大小会有所增加。请根据自己的需要选择编译。全量支持的库大小大概有30M左右。

1.3 环境准备

NDK:android-ndk-r14b-linux-x86_64(ijkplayer仅支持r10e以上r14b及以下的NDK版本),尽量不要使用最新版本的NDK。本人使用r14b验证通过,其它版本没有验证。

SDK:https://developer.android.google.cn/请自行下载android sdk

2 编译步骤

2.1 安装组件

$ sudo apt-get install vim openssh-server git curl wget tar unzip build-essential openjdk-8-jdk yasm python

说明:如果安装失败,请先升级ubuntu:sudo apt-get update

2.2 配置环境变量

2.2.1 NDK环境变量配置

$ sudo unzip android-ndk_r14b-linux-x86_64.zip  //在win10子系统中,先进入到windows环境中的ndk下载目录。cd /mnt/e/XXX    e代表windows盘符

$ sudo mv android-ndk-r13b /opt/Android/    //如果没有Android目录,可以手动创建mkdir Android

添加NDK到环境变量中

$ sudo vim /etc/profile

在文件末尾添加如下内容,并保存退出

export ANDROID_NDK=/opt/Android/android-ndk-r14b

export PATH=$PATH:$ANDROID_NDK

2.2.2 SDK环境变量配置

android SDK的环境变量配置与NDK配置一样,参见2.2.1  

完成后重启Ubuntu或者在终端中source一下profile,建议重启ubuntu,以免source不生效,后面编译报错。

2.3 代码克隆

git clone https://github.com/Bilibili/ijkplayer ijkplayer-android

cd ijkplayer-android

git checkout -B local_k0.8.8 k0.8.8 //切换分支,取k0.8.8分支。local_k0.8.8是本地分支,可以自己命名。切记一定要切换到k0.8.8分支,master或其他分支后续的编译会报错

2.4 ijkplayer编译步骤

2.4.1 编译配置

ijkplayer有三种编译配置

1)支持较多格式(完全编译,几乎所有格式都支持了),文件较大。本人使用的此种方式。最终的大小估计有30M左右。

$ cd config

$ rm module.sh

$ ln -s module-default.sh module.sh

2)支持较少格式,包含hevc

$ cd config

$ rm module.sh

$ ln -s module-lite-hevc.sh module.sh

3)支持较少格式(默认)

$ cd config

$ rm module.sh

$ ln -s module-lite.sh module.sh

2.4.2 ffmpege和openssl编译

下载源码:

开源项目中并没有直接包含ffmpeg和openssl源码,所以编译前需要先下载

// 进入工程根目录

$ cd ijkplayer-android

// checkout ffmpeg 源码,ffmpeg有300多M,下载可能会有点慢

$ ./init-android.sh

// checkout openssl android源码

$ ./init-android-openssl.sh

编译

// 编译openssl(用于支持https)

$ cd android/contrib

$ ./compile-openssl.sh clean

$ ./compile-openssl.sh all

// 编译 ffmpeg

$ ./compile-ffmpeg.sh clean

$ ./compile-ffmpeg.sh all

如果在编译ffmpeg时有报:fatal error: linux/perf_event.h: No such file or directory错误,那么在ijkplayer-android/config/module.sh的末尾添加如下配置,再重新编译即可

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"

2.4.3 ijkplayer编译

// 编译ijkplayer

$ cd ..

$ ./compile-ijk.sh all

编译完成后的包在:ijkplayer-android/android/ijkplayer目录下。

2.5 集成

集成:

    ijkplayer-android/android/ijkplayer目录是一个 Android Studio 工程,经过编译后即是一个完整的工程,可以直接拷贝出来用Android Studio打开使用。

    ijkplayer-example:示例

    ijkplayer-java:java层的库(必须的)

    ijkplayer-xxx:各种架构的so库

    ijkplayer-exo:对ExoPlayer的封装

   也可以将lib工程中的so拷贝到新建的工程中,只需要依赖对应版本的java层的库即可,这里是k0.8.8

implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'    //也可以将ijkplayer-java源码直接拷贝到工程中。

ijkplayer全量包下载地址:https://github.com/whtnlily/MyIjkplayer.git

上一篇 下一篇

猜你喜欢

热点阅读