【linux】全网最全ijkplayer编译教程

ijkplayer编译教程

前言

​ ijkplayer作为一个流行的移动端的开源的播放软件,基于ffplay,对于入门音视频领域来说是必须要经历的。以下是我在公司实习期间所完成的ijkplayer编译,仅供大家参考

​ 本文参考ijkplayer官方readme文档,详情请见:https://github.com/bilibili/ijkplayer

大致流程

  • 首先下载ijkplayer的源代码,我们就是要编译它
  • 因为ijkplayer是依赖于ffmpeg的,所以我们需要先编译ffmpeg,生成so动态链接文件
  • 接着再编译ijkplayer,同样生成so文件
  • 利用gradle工具将整个项目构建起来

编译前准备

  • 首先,我们需要一个linux环境(以Ubuntu16为例)
  • 安装必要的软件,这些软件在shell脚本中都会有所涉及,所以必须提前安装
sudo apt-get install git
sudo apt-get install yasm
sudo apt-get install make
  • 其次,我们需要安卓的ndk和sdk资源包(从公司内网下载,注意ndk版本选择14,我用的是android-ndk-r14b),或从互联网下载(请自行查找资料)
  • 配置linux的环境变量,具体可参考https://blog.csdn.net/daydayupchen/article/details/126158229?spm=1001.2014.3001.5501
# add these lines to your ~/.bash_profile or ~/.profile
# export ANDROID_SDK=<your sdk path>
# export ANDROID_NDK=<your ndk path>
  • 配置完sdk和ndk的环境变量后,我们需要拿到ijkplayer的源码,也就是编译原材料
git clone xxxxxxxxxxxxx   #建议使用码云地址,以免网络问题

接下来看看按照官方文档继续前进

  • If you prefer more codec/format
#第一步
cd config
rm module.sh
ln -s module-default.sh module.sh

在3个版本中,我们选择最全的一个,拥有最全的编码和格式支持

  • 先让我们来看看这个module.sh到底是啥

在这里插入图片描述

  • 其实就是就三个.sh脚本文件,module.sh就是根据情况软连接到一个.sh文件,这可以由我们自由更改

  • 这里我们链接到module-default.sh文件,打开这个.sh文件发现里面其实就是一些配置的环境变量

在这里插入图片描述

#第二步
cd android/contrib
sh compile-ffmpeg.sh clean
  • 接着我们进入项目的android/contrib目录下,这个目录下放的是第三方工具
  • 看看compile-ffmpeg.sh里写的是些啥
#----------
case "$FF_TARGET" in
    "")
        echo_archs armv7a
        sh tools/do-compile-ffmpeg.sh armv7a
    ;;
    armv5|armv7a|arm64|x86|x86_64)
        echo_archs $FF_TARGET $FF_TARGET_EXTRA
        sh tools/do-compile-ffmpeg.sh $FF_TARGET $FF_TARGET_EXTRA
        echo_nextstep_help
    ;;
    all32)
        echo_archs $FF_ACT_ARCHS_32
        for ARCH in $FF_ACT_ARCHS_32
        do
            sh tools/do-compile-ffmpeg.sh $ARCH $FF_TARGET_EXTRA
        done
        echo_nextstep_help
    ;;
    all|all64)
        echo_archs $FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_64
        do
            sh tools/do-compile-ffmpeg.sh $ARCH $FF_TARGET_EXTRA
        done
        echo_nextstep_help
    ;;
    clean)
        echo_archs FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_ALL
        do
            if [ -d ffmpeg-$ARCH ]; then
                cd ffmpeg-$ARCH && git clean -xdf && cd -
            fi
        done
        rm -rf ./build/ffmpeg-*
    ;;
    check)
        echo_archs FF_ACT_ARCHS_ALL
    ;;
    *)
        echo_usage
        exit 1
    ;;
esac
  • 我们来看主体这段,当我们输入命令

  • sh compile-ffmpeg.sh clean
    

    clean就会当做一个参数($1)传给FF_TARGET,源码如下

UNI_BUILD_ROOT=`pwd`
FF_TARGET=$1
FF_TARGET_EXTRA=$2
  • 我们先来看看实际这样执行的结果

在这里插入图片描述

  • 大概就是如果某些目录存在那么就做一些删除的操作,初始化环境

继续前进!!!

  • For Ubuntu/Debian users.
# choose [No] to use bash
sudo dpkg-reconfigure dash
  • 可以参考https://blog.csdn.net/weixin_39212776/article/details/81097990

开始编译

cd到ijkplayer的目录下
git checkout -B latest k0.8.8

./init-android.sh
  • 这个init-android.sh会拉取FFmpeg的GitHub源码

在这里插入图片描述

  • 当你执行这个init-android时,可能因为网路问题需要换源,换成自己gitee

  • 在执行时,也许还会碰到需要换源的时候,这时你需要根据脚本再去其他脚本文件里找,继续换源,如下

在这里插入图片描述

请注意,这里需要注意的是,你必须使用bilibili的GitHub仓库中自带的FFmpeg的源代码,而不能使用FFmpeg官方的GitHub地址,否则会发现这个分支(标签)不存在

且当你重新拉取时,你需要把所有文件删干净,否则可能会出错!


  • 继续往下走,开始编译
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all #编译ffmpeg

cd ..
./compile-ijk.sh all #编辑ijkplayer
  • 当编译FFmpeg时,你可能会遇到问题如下
  • fatal:linux/perf_event.h: No such file or directory
  • 请参考如下文章:https://blog.csdn.net/wusejiege6/article/details/108310915?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-108310915-blog-125591523.pc_relevant_sortByStrongTime&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-108310915-blog-125591523.pc_relevant_sortByStrongTime&utm_relevant_index=1
  • 修改完module.sh后,我们就可以继续执行如下操作
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

  • 进入项目构建,这里我们使用gradle进行构建

  • # Gradle
    #     cd ijkplayer
    #     gradle
    
  • 首先你当然得下载Gradle,请访问gradle官网下载

  • 配置gradle环境变量

export GRADLE_HOME=/xxxxxx/xxxxx/gradle-2.0 
export PATH=$GRADLE_HOME/bin:$PATH
  • 验证gradle环境是否配置成功,显示出信息则视为成功
gradle -v

在这里插入图片描述

  • 进入目录为xxxx/ijkplayer/android/ijkplayer,在这个路径下编译安卓项目
gradlew -assembleDebug
  • 使用上面这个命令进行编译,gradle会自行安装一些需要的组件

    • 可能会遇到没有配置sdk_dir的情况,也就是没有配置环境变量$ANDROID_HOME,这是因为之前配置的环境变量是$ANDROID_SDK,所以你需要重新配置环境变量,且不要忘记source哦!!
  • 会在不同架构,例如armv7a下生成aar文件,但只有一个目录下存在apk文件(ijkplayer-example),可以直接使用手机安装

在这里插入图片描述

  • 安装后可以在菜单栏sample里播放样例,但其来自于apple公司,所以可能需要科学上网!

在这里插入图片描述

在这里插入图片描述

大功告成!完结撒花!


Tips

  • 如果你发现你的linux里ll命令不好用了,可能是因为你环境变量配置的问题

  • ll的命令写在~/.bashrc文件下,一般都是写好的,但你现在要不每次去source它,ll就不会生效,非常麻烦

  • 解决办法如下

  • cd 
    vim .bash_profile
    
    
    #输入以下内容
    # .bash_profile
            
    if [ -f ~/.bashrc ]; then
        . ~/.bashrc                                                                                                                    
    fi 
    
  • 这样系统就会自动执行了

  • 详细请参考https://blog.csdn.net/lei_qi/article/details/121694489

总结

  • 真的会遇到各种各样的问题,是一个复杂的过程,全部都是用脚本完成
  • 算是个人第一次编译开源项目,尤其是不熟悉安卓、gradle和git,真的一步步都还挺艰难的
  • 从一开始完全懵逼到现在逐渐理解,大约需要4~5天时间
  • 后期还需要进入细节继续学习
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值