美文网首页ndk
基于win10子系统ijkplayer全量编译(支持所有格式)流

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

作者: 天涯之外2099 | 来源:发表于2019-10-01 21:18 被阅读0次

    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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ojfsyctx.html