ijkplayer Android 编译运行遭遇记

2023-03-16  本文已影响0人  冰奇

首先按官方 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
上一篇 下一篇

猜你喜欢

热点阅读