美文网首页安卓开发相关Android ijkplayer
在Ubuntu下编译IjkPlayer-android

在Ubuntu下编译IjkPlayer-android

作者: Ggx的代码之旅 | 来源:发表于2017-05-04 13:32 被阅读1841次

    前端时间项目中用到了视频播放的功能,没办法又不想使用系统自带的播放器,没有为什么就是不想用,我也希望谷歌爸爸能出一款最基础的播放器控件,然后可以灵活的自己定制UI,唉!经过一番寻找终于找到了IjkPlayer,这是Bilibili的一款基于ffmpeg视频编解码库的播放器控件,看起来挺不错的。此外还发现了一篇二次封装的UI效果 基于ijkplayer的视频播放器,仿Bilibili客户端,集成沉浸式全屏、弹幕、触屏控制、视频源切换等功能 封装的不错。于是采用这个来做自己的播放器控件了。但实践的过程中还是有不少坑要踩的,比如视频的解码格式的支持,安卓各CPU平台的兼容,以及https的支持这些都是我遇到的问题,网上的很多库都是对这些支持都是不全的,怎么办呢?还是自己动手丰衣足食,重新去编译一遍Ijkplayer的源码。找到 ijpliayer github 地址看到它的Readme中有编译过程的描述,嗯!大致就酱紫, 不过还是有些需要注意的。下面带大家一起一步一步的重新编译。

    • 准备工作

    这里我使用在ubuntu下去编译它,没有为什么就是方便。
    1.下载virtualbox虚拟机官网地址
    2.下载unbutu17.04镜像文件
    3.下载winSCP百度搜一下就有,用来方便在win和unbutu之间传输文件用

    • 开始安装工作

    当系统安装完成以后,我们进入桌面,开始编译ijkplayer。

    1.首先先去下载androidNDK 以及SDK

    android NDK选择Linux的
    android SDK选择一个高一点的Linux版本就好。
    下载完成之后打开终端
    Ctrl+Alt+T
    我们在home\Downloads目录下会看到我们下载的ndk和sdk压缩包我们把它们解压出来,一个是.zip的另一个是.tgz的。
    cd ~/Downloads
    unzip xxx.zip
    tar zxvf xxx.taz
    将两个压缩文件解压到当前目录即可。

    2.下载openjdk

    sudo apt-get install openjdk-8-jre-headless
    之后会自动安装好。

    3.配置SDK和NDK环境变量

    新下载好的linux版本的sdk缺少一点东西,需要我们自己去下,好在官方readme中已经说明了打开和windows中的sdkmanager一样的东西,在Linux中不叫这个名字,叫做android.sh 在tools目录下。说明如下
    To start the SDK Manager,please execute the program "android".
    启动android sdk manager
    sh ~/Downloads/android-sdk-linux/tools/android
    之后就是和windows一样了。
    我们下载最新的Android SDK Tools和Android SDK Platform-tools以及Android SDK Build-tools,在下载一个最新的Android SDK Platform即可。
    配置环境变量
    sudo gedit /etc/profile
    /etc/profile 的文件是让所有用户都可用。
    在配置文件末尾加入如下部分并保存:

    export PATH=~/Downloads/android-sdk-linux/platform-tools:$PATH
    export PATH=~/Downloads/android-sdk-linux/tools:$PATH
    export ANDROID_NDK=~/Downloads/android-ndk-r14b
    export PATH=~/Downloads/android-ndk-r14b:$PATH
    

    让环境变量立即生效
    source /etc/profile
    你可以用简单的命令来测试一下是否生效了如
    adb -version

    3.安装一些软件

    sudo apt-get update
    sudo apt-get install git
    sudo apt-get install yasm

    4.下载ijkplayer-android

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

    • 5.开始编译

    cd ijkplayer-android
    先做初始化
    ./init-android.sh
    初始化从网上提取ffmpeg库,有段时间,可以先去泡杯茶。
    如果视频播放需要支持Https协议的还需要执行一遍如下初始化脚本。
    ./init-android-openssl.sh

    1.编译各个平台的openssl

    cd android/contrib
    ./compile-openssl.sh clean
    之后最好一个一个的对应CPU平台去编译openssl,也能一次全部编译,但是我之前出过问题,后来单独编译就好了。可以更具自己的需求分别选择执行下面步骤,过程也是挺漫长的。

    ./compile-openssl.sh armv7a
    ./compile-openssl.sh armv5a
    ./compile-openssl.sh arm64
    ./compile-openssl.sh x86
    ./compile-openssl.sh x86_64
    
    2.编译各个平台的ffmpeg

    根据官方的说法,如果我们需要更多的编解码格式,得先执行下面的命令


    ijkplayer

    回到ijkplayer-android目录并链接module文件

    cd ../..
    cd config/
    rm module.sh
    ln -s module-default.sh module.sh
    cd ..
    cd android/contrib/
    ./compile-ffmpeg.sh clean
    

    其实打开module.sh里面是各个编解码的格式,可以在里面开启或禁用
    如果需要启用/停用某个解码器或功能只需要修改 enable/disable即可。
    之后最好一个一个的对应CPU平台去编译ffmpeg,也能一次全部编译,但是我之前出过问题,后来单独编译就好了。可以更具自己的需求分别选择执行下面步骤,过程也是挺漫长的。

    ./compile-ffmpeg.sh armv7a
    ./compile-ffmpeg.sh armv5a
    ./compile-ffmpeg.sh arm64
    ./compile-ffmpeg.sh x86
    ./compile-ffmpeg.sh x86_64
    
    3.编译ijkplayer native代码

    做法也是一个一个平台去编译它。不要图省事一起编译。

    cd ..
    ./compile-ijkplayer.sh armv7a
    ./compile-ijkplayer.sh armv5a
    ./compile-ijkplayer.sh arm64
    ./compile-ijkplayer.sh x86
    ./compile-ijkplayer.sh x86_64
    

    编译好后就能在android/ijkplayer目录中对于的文件夹里找到了这里截取一段x86文件夹的图

    ijkplayer-x86

    新版的编译后新增了一个libijksound.so文件,之前是没有的,通常libijkffmpeg.so 有我图中这么大就差不多了,不同的平台大小都不一样。其他两个文件相对来是就几百k。
    到这里一切都ok了。我们可以使用winSCP工具把编译好的ijkplayer传送到win上然后使用。

    欢迎共同探讨更多安卓,java,c/c++相关技术QQ群:392154157

    相关文章

      网友评论

      • reverse_Android:为什么我编译完只有一个libijkffmpeg.so文件?另外博主请问一下,你用的ffmpeg的库版本是多少?我用官方给的那个版本一直会报错。
        leil_c493:哥们 ,你解决了吗?我的也是只有一个so文件
        Ggx的代码之旅:要想编译最新的可能这篇文章需要更新了
        Ggx的代码之旅:我哪会编译的比较旧了
      • 醉卧赏血:首先还是谢谢作者的贡献,再次我想请问2个问题,1当我通过./compile-openssl.sh all 编译所有文件时,的确生成了相关文件,但是我不明白这个地方的文件有何作用?因为我在最后都没有看到有生成关于它的文件哈。2文中你说的时生成4个格式的so文件,但是我这边试了2次,一次按照你的方法,一次按照原始方法,均生成3个so文件,请问这是什么情况? 麻烦回我一下,谢谢。
        醉卧赏血:@Ggx的代码之旅 我的jdk是1.9,sdk是最新的,ndk是R12,ndk用过13或者15,均失败!所以我觉得有点蹊跷,我用的够新了吧,始终只是三个so哈。。。
        Ggx的代码之旅:@Ggx的代码之旅 基本上你按照这个步骤编译下去最终需要的是各个平台的so库,只要这个出来 且文件大小正常 就OK
        Ggx的代码之旅:编译openssl是为了只是https的视频链接播放,否则无法播放。编译的过程是直接编译进去了。后面的4个so文件 和使用的版本有关系。我这个文章写的时候 用的是旧的 ,新版的有点不一样了。
      • hubsul_nvtag:ubuntu16.04 jdk8 ndk r15c sdk r24编译出错了IJK_NDK_REL=15.2.4203891
        You need the NDKr10e or later
        没懂怎么个意思 坑不好填啊
        chenzhenlindx:NDK版本太高了,换成r14b就可以了
        hubsul_nvtag: @Ggx的代码之旅 我ndk15.4
        换成10就编译通过了
        Ggx的代码之旅:@hubsul_nvtag 你这个是NDK版本太低了 升级一下吧
      • a7f899c4ef21:source /ect/profile 写错了 etc
        Ggx的代码之旅:多谢 以更正
      • 文庆_12fb:虽然看不大懂 但是觉得好6
        Ggx的代码之旅:哈哈 只是总结而已

      本文标题:在Ubuntu下编译IjkPlayer-android

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