一. 摘要
从开始接触ijkplayer
,到全流程编译ijkplayer
真的是各种的惨痛教训和坑,经历了3天才算成功.
所以把这一路的填坑过程全部记录下来,一方面,下次需要编译的时候直接使用. 另一方面,分享给更多的朋友们.让朋友能够快速的编译.
二. 环境要求以及注意事项
这是我的环境和建议,建议大家可以好好参考,特别是
NDK
版本
另一方面,我已经将我验证过的所有文件放在百度云,供大家快速下载
- 虚拟机: VMware Workstation 16 Pro
建议使用比较新的版本,原因:①我最初使用的是VMware 12 安装虚拟机的时候总是显示我电脑没有虚拟设备,经过各种踩坑和设置宿主机的cpu.最终的原因是因为VMware Workstations 版本太低导致
- Ubuntu 20.04xxx
特别注意:
在使用VMware安装虚拟机的分配磁盘大小时,一定要分配大一点. 至少40G+
我选择了100G
原因: 我第一安装vm的时候就是用了默认的20G
安装完基本环境 sdk , ndk , 下载了代码,准备编译的时候,提示内存空间不足… 然后各种折腾扩容 , 后来由于电脑出了问题 ,也不想折腾扩容,就直接重新创建 , 分配了100G
- NDK选择
android-ndk-r12b-linux-x86_64.zip
- 这个版本的选择非常重要 , 直接影响成败. 官网推荐的是
android-ndk-r13b-linux-x86_64.zip
但是我实际检测这个NDK不行.- 经过各种了解和群里大佬指导,我使用的是
android-ndk-r12b-linux-x86_64.zip
- 我听大佬说, 使用
android-ndk-r13b-linux-x86_64.zip
需要修改脚本文件. 我估计也是.因为最后编译时总是报一个touch: 无法创建 '/home/xxxxxxijkplayer/android/contrib/build/ffmpeg-armv7a/toolchain/touch': 没有那个文件或目录
,我猜测跟一下执行脚本,然后做一个文件夹是否存在的判断,使用mkdir -p xxx
创建文件夹.但是具体的我没有测试,没时间折腾了.
- SDK选择
android-sdk_r24.4.1-linux.tgz
- 其他软件
相关软件:
sudo apt-get update
,git
,vim
,openssh-server
,
其他具体的命令, 需要什么的时候就直接安装.
- 相关工具
WinSCP
: 安装包都是我再我宿主机上,所以通过此工具上传至Ubuntu (这个可以自由选择)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
注意:
- 执行
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中方案
- 使用我提供的百度网盘, 缺点: 不会实时更新.
- 使用gitee的急速下载仓库: https://gitee.com/mirrors/ijkplayer.git
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下载速度较慢的问题
- 没有其他办法 , 要么自己搭建梯子 , 要么下载gitee上的 .另外就是使用我提供的(我下载了好几个小时,没有搭建梯子…)
- 由于
ffmpeg
也是已经下载好的 , 所以在执行init-android.sh
的时候要进行修改:①. 注释掉31行,拉取方从github拉取代码(看下面截图) ②. 将已下载好的目录,复制到/extra
并且要注意ffmpeg
的大小写(具体为什么要复制到/extra
目录,请查看执行脚本逻辑)
2. 因NDK
版本问题导致的异常
-
我首次使用的是
android-ndk-r13b-linux-x86_64.zip
, 为什么? 因为这是官网推荐的.但是我使用此版本会报错
-
之后经过群好友,指点使用了
android-ndk-r12b-linux-x86_64.zip
圆满解决
总结:
- 这一路总来,折腾的太久了,导致睡觉都睡不好,做梦都在想着,哪儿出问题了.从安装虚拟机开始就各种的坑.
- 安装虚拟机的时候,分配硬盘空间太小了.导致要扩容. 扩容就要折腾好久.而且当时环境也不太对,所以宁愿重装系统.
- 安装虚拟机至少装了4~5此, 因为每次都卡在最后的更新操作 , 从上午开始安装,到下午还没装好 . 最后各种百度,就直接断网处理 . 断网后,安装15–20分钟就搞定了
- 然后就是,bilibili的各种仓库代码下载的问题 , 1kb/s , 恶心的一批 . 某个早上睡不着,然后就起床下载,某个瞬间下载速度特别快达到5MB/s 所以把
ffmpeg
,ijkplayer
全部都下载了 . 使用自己下载的库,就意味着要逐一的修改执行脚本 . 后来权衡了下 , 只有ffmpeg
仓库比较大 ,所以执行改了init-android.sh
的代码,修改也很简单,只是注释了拉取库而已,其他的那些库都比较小,还能忍受- 这也是最大的一个坑 , 使用官方推荐的
NDK r13b
各种的报错 , 解决 . 原本打算跟一遍编译脚本然后逐一修改 . 后来问了下群友 , 有个大佬说是ndk版本问题 , 换了个ndk直接就解决了.综上, 不懈的坚持,总算是圆满的解决了,整个流程也非常清楚 , 包括如何编译,编译的逻辑.都全部跟了一遍. 今天总算可以睡个好觉了. 哈哈
2020年11月23日23:08:18
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。