首先按官方 bilibili/ijkplayer 说明进行项目 clone
0、配置 sdk/ndk 环境变量,brew install 插件
1、clone 项目后后运行 ./init-android.sh 会checkout ff4.0--ijk0.8.8--20210426--001 该tag 的ffmpeg 库
2、module-default.sh 注释 --disable-ffserver
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffserver"
3、./compile-ffmpeg.sh
3.1、./configure
需要使用 ndk16 版本,注意对应的每个架构的ffmpeg库都得改一遍,除非改 B站的ffmpeg 库,然后走回init-android的fork
问题:
./configure: line 782: 46802 Broken pipe: 13 map 'eval echo "$v \${$v:-no}"' "$@"
46803 Segmentation fault: 11 | awk "BEGIN { split(\"$files\", files) }
{
./configure: line 559: echo: write error: Broken pipe
./configure: line 782: 46812 Done map 'eval echo "$v \${$v:-no}"' "$@"
46813 Segmentation fault: 11 | awk "BEGIN { split(\"$files\", files) }
3.2、do-detect-env.sh 增加 16 版本的判断条件
case "$IJK_NDK_REL" in
11*|12*|13*|14*|16*)
3.3、do-compile-ffmpeg.sh
问题:
tools/do-compile-ffmpeg.sh: line 309: 46838 Segmentation fault: 11 make clean
处理:
修改 make -> usr/bin/make 解决 make 报错
4、如果忽略 3 出现的问题,直接多次执行 ./compile-ffmpeg.sh,大概三次,也能编出 so,但会发现只有 avutil的头文件和.a,其他都没有,所以 so 本身也是缺失的,这是由于 3.1 生成 ffmpeg的其他库所需要的.pc 文件。
5、compile-ijk.sh
do-compile-ffmpeg.sh 里面 android-21 改为 android-24
问题:
undefined reference to `stderr'
处理:
elif [ "$FF_ARCH" = "arm64" ]; then
FF_ANDROID_PLATFORM=android-24
6、到这里基本库和脚步编译完毕
7、AS 打开项目,配置 AS 很麻烦,修改如下“
7.1、AS 使用 4.1.1 版本
7.2、gradle 使用 v5.6.4
7.3、build.gradle 配置镜像
maven { url '[https://maven.aliyun.com/repository/google](https://maven.aliyun.com/repository/google)' }
maven { url '[https://maven.aliyun.com/repository/jcenter](https://maven.aliyun.com/repository/jcenter)’ }
7.4、其他修改
修改 minSdkVersion 21
删除 buildToolsVersion