微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编译ijkplayer最详尽的编译过程教程以及编译过程中的各种坑

一. 摘要

从开始接触ijkplayer,到全流程编译ijkplayer真的是各种的惨痛教训和坑,经历了3天才算成功.
所以把这一路的填坑过程全部记录下来,一方面,下次需要编译的时候直接使用. 另一方面,分享给更多的朋友们.让朋友能够快速的编译.

二. 环境要求以及注意事项

这是我的环境和建议,建议大家可以好好参考,特别是NDK版本
另一方面,我已经将我验证过的所有文件放在百度云,供大家快速下载

  1. 虚拟机: VMware Workstation 16 Pro

建议使用比较新的版本,原因:①我最初使用的是VMware 12 安装虚拟机的时候总是显示我电脑没有虚拟设备,经过各种踩坑和设置宿主机的cpu.最终的原因是因为VMware Workstations 版本太低导致

  1. Ubuntu 20.04xxx
  1. 我的镜像文件ubuntu-20.04.1-desktop-amd64.iso 这个镜像文件选择倒不重要自己随意就好.
    PS: 我安装了2个虚拟机一个desktopserver 这个无所谓
  2. Ubuntu的安装过程要格外注意 , 安装的时候吧宿主机断网. 原因: ①.安装Ubuntu的时候,有一个过程就是安装更新,这一步会安装特别长的时间,有可能一整天都安装不好.断网就是避免无底线的更新. 官网安装速度很快10分钟可以解决

特别注意:
在使用VMware安装虚拟机的分配磁盘大小时,一定要分配大一点. 至少40G+ 我选择了100G
原因: 我第一安装vm的时候就是用了认的20G 安装完基本环境 sdk , ndk , 下载了代码,准备编译的时候,提示内存空间不足… 然后各种折腾扩容 , 后来由于电脑出了问题 ,也不想折腾扩容,就直接重新创建 , 分配了100G

在这里插入图片描述

在这里插入图片描述

  1. NDK选择 android-ndk-r12b-linux-x86_64.zip
  1. 这个版本的选择非常重要 , 直接影响成败. 官网推荐的是android-ndk-r13b-linux-x86_64.zip但是我实际检测这个NDK不行.
  2. 经过各种了解和群里大佬指导,我使用的是android-ndk-r12b-linux-x86_64.zip
  3. 我听大佬说, 使用android-ndk-r13b-linux-x86_64.zip需要修改脚本文件. 我估计也是.因为最后编译时总是报一个touch: 无法创建 '/home/xxxxxxijkplayer/android/contrib/build/ffmpeg-armv7a/toolchain/touch': 没有那个文件或目录,我猜测跟一下执行脚本,然后做一个文件夹是否存在的判断,使用mkdir -p xxx创建文件夹.但是具体的我没有测试,没时间折腾了.
  1. SDK选择 android-sdk_r24.4.1-linux.tgz
  1. SDK的过程倒还是比较顺利,但是下载的东西太多了.等了很久,
  2. 我使用的是android-sdk_r24.4.1-linux.tgz
  3. 为了避免在Linux下下载速度过慢, 我已经全部打包放在百度网盘了.
  1. 其他软件

相关软件: sudo apt-get update,git , vim,openssh-server,
其他具体的命令, 需要什么的时候就直接安装.

  1. 相关工具
  1. WinSCP : 安装包都是我再我宿主机上,所以通过此工具上传至Ubuntu (这个可以自由选择)
  2. MobaXterm: shell工具

三. 软件安装与环境搭建

1. 初始化系统, 更新系统

> sudo apt-get update

2. 安装vim,openssh-server

# 安装vim
apt install vim
# 安装 net-tools
apt install net-tools
# 安装openssh-server
apt install openssh-server
# 启动ssh
sudo service ssh start

# 安装git
sudo apt install git
# 安装之后,使用命令进行最初的设置,然后进行配置信息的查看:
git config --global user.name "your name" git config --global user.email "youre mail" git config --list

3. 安装JDK配置其环境变量

安装jdk , ndk ,sdk 这些安装包我全是通过WinSCP工具从宿主机传过来的.当然也可以直接通过wget命令下载

将压缩包jdk-8u161-linux-x64.tar.gz复制到安装目录
我这儿是/usr/local/java

# 复制压缩包到指定目录
> cp jdk-8u161-linux-x64.tar.gz /usr/local/java
# 解压压缩包
> tar -zxvf jdk-8u161-linux-x64.tar.gz
# 配置环境变量
> vim /etc/profile

# 添加以下环境变量

# java
export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export JRE_HOME=${JAVA_HOME}/jre
export CLAsspATH=:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH


# 生效环境变量
> source /etc/profile

# 校验是否成功
> java -version

java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

4. 配置NDK的环境变量

这个使用了wget命令下载

# 下载安装包
> wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz
# 解压
> tar -xvf android-sdk_r24.2-linux.tgz
# 进入该目录
> cd android-sdk-linux
# 执行命令
> tools/android update sdk --no-ui
# 至于为什么要执行此命令 , 在`SDK Readme.txt`中已经写明

# 配置环境变量
> vim /etc/profile

# 添加以下环境变量

# java
export ANDROID_SDK=/usr/local/java/android-sdk-linux
export PATH=$ANDROID_SDK:$PATH

# 生效环境变量
> source /etc/profile

在这里插入图片描述

在这里插入图片描述

注意:

  1. 执行tools/android update sdk --no-ui命令后,会一次下载android的各种API , 耗时很长,如果不想等待,可以只写及下载我提供的安装包

5. 安装ndk

# 解压 android-ndk-r12b-linux-x86_64.zip
> unzip android-ndk-r12b-linux-x86_64.zip

# 配置环境变量
> vim /etc/profile

# 添加以下环境变量

# set ndk environment
export ANDROID_NDK=/usr/local/java/android-ndk-r12b
export PATH=$ANDROID_NDK:$PATH

# 生效环境变量
> source /etc/profile

# 校验是否生效
> ndk-build --version
GNU Make 4.2.1
为 x86_64-pc-linux-gnu 编译

copyright (C) 1988-2016 Free Software Foundation, Inc.
许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本软件是自由软件:您可以自由修改和重新发布它。
在法律允许的范围内没有其他保证。

至此已经安装好基础的环境变量,
整体性查看下环境变量:

在这里插入图片描述

四. 编译ijkplayer

说明:
由于github 非常慢 , 再次推荐2中方案

  1. 使用我提供的百度网盘, 缺点: 不会实时更新.
  2. 使用gitee的急速下载仓库: https://gitee.com/mirrors/ijkplayer.git
  3. ijkplayer所需要的的ffmpeg 在gitee中没有备份,所以自己考虑,要么在github上下载

1. 克隆所ijkplayer仓库

使用命令git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android拷贝ijkplayer到当前目录。

在这里插入图片描述

执行命令cd ijkplayer-android git checkout -B latest k0.8.4

在这里插入图片描述


初始化需要进行编译的代码,使用命令./init-android.sh内容较多,我贴多一些初始化的过程图片

在这里插入图片描述

2. 进入ijkplayer阶段

2.1 编译ffmpeg

执行以下命令:cd android/contrib ./compile-ffmepg.sh clean ./compile-ffmpeg.sh all

在这里插入图片描述


在这里插入图片描述

2.2 编译ijkplayer

# 执行以下命令
cd .. ./compile-ijk.sh

在这里插入图片描述


在这里插入图片描述

五. 总结问题

1. 由于github下载速度较慢的问题

  1. 没有其他办法 , 要么自己搭建梯子 , 要么下载gitee上的 .另外就是使用我提供的(我下载了好几个小时,没有搭建梯子…)
  2. 由于ffmpeg也是已经下载好的 , 所以在执行init-android.sh的时候要进行修改:①. 注释掉31行,拉取方从github拉取代码(看下面截图) ②. 将已下载好的目录,复制到 /extra 并且要注意ffmpeg的大小写(具体为什么要复制到/extra目录,请查看执行脚本逻辑)

    在这里插入图片描述


    在这里插入图片描述

2. 因NDK版本问题导致的异常

  1. 我首次使用的是android-ndk-r13b-linux-x86_64.zip, 为什么? 因为这是官网推荐的.但是我使用此版本会报错

    在这里插入图片描述

  2. 之后经过群好友,指点使用了android-ndk-r12b-linux-x86_64.zip圆满解决

总结:

  1. 这一路总来,折腾的太久了,导致睡觉都睡不好,做梦都在想着,哪儿出问题了.从安装虚拟机开始就各种的坑.
  2. 安装虚拟机的时候,分配硬盘空间太小了.导致要扩容. 扩容就要折腾好久.而且当时环境也不太对,所以宁愿重装系统.
  3. 安装虚拟机至少装了4~5此, 因为每次都卡在最后的更新操作 , 从上午开始安装,到下午还没装好 . 最后各种百度,就直接断网处理 . 断网后,安装15–20分钟就搞定了
  4. 然后就是,bilibili的各种仓库代码下载的问题 , 1kb/s , 恶心的一批 . 某个早上睡不着,然后就起床下载,某个瞬间下载速度特别快达到5MB/s 所以把ffmpeg ,ijkplayer 全部都下载了 . 使用自己下载的库,就意味着要逐一的修改执行脚本 . 后来权衡了下 , 只有ffmpeg仓库比较大 ,所以执行改了init-android.sh代码,修改也很简单,只是注释了拉取库而已,其他的那些库都比较小,还能忍受
  5. 这也是最大的一个坑 , 使用官方推荐的NDK r13b 各种的报错 , 解决 . 原本打算跟一遍编译脚本然后逐一修改 . 后来问了下群友 , 有个大佬说是ndk版本问题 , 换了个ndk直接就解决了.

综上, 不懈的坚持,总算是圆满的解决了,整个流程也非常清楚 , 包括如何编译,编译的逻辑.都全部跟了一遍. 今天总算可以睡个好觉了. 哈哈

2020年11月23日23:08:18

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐