模仿、求学都不是我们的目的,最终我们都希望在求知的过程中,有所领悟。最终走出自己的道。淡定、从容,如果不是刻意伪装,相信当事者必有丰富的人生阅历。把学习记录下面,不仅是为了备忘,更是对学习过程的梳理。当我们可以站在过去的肩膀上,又可以很好地向别人表达自己的思想。相信我们的人生一定会更加精彩。道路维艰,且让我们脚踏实地,步步为营。
下面的文章参考了众多博客,亦夹杂了个人在编译过程的一些理解。力求通过一篇博客,让自己从容编译FFmpeg for Android。
一、准备(重点)
1、系统:Ubuntu18.04
2、FFmpeg:ffmpeg-4.0.2
3、NDK:android-ndk-r14b-linux-x86_64
二、下载FFmpeg
1、百度网盘
链接:https://pan.baidu.com/s/118QiHGVCkFnk2B9ox7572g
提取码:zug8
2、官网地址
http://www.ffmpeg.org/download.html
3、在git上的地址
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
四、下载NDK
https://developer.android.google.cn/ndk/downloads/older_releases.html
五、将下载压缩包解压
1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar –xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压
六、配置编译脚本
1、进入ffmpeg-4.0.2目录
2、在ffmpeg目录下新建build_android.sh脚本文件(文件名称可以随便取)。
3、编写脚本
1 #!/bin/bash
2 # 清空上次的编译
3 make clean
4 #你自己的NDK路径。
5 export NDK=/opt/download/android-ndk-r14b
6 # 设置你的android平台编译器的版本 这里采用Android4.0
7 export SYSROOT=$NDK/platforms/android-23/arch-arm64/
8 #编译使用的toolchain
9 export TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
10 export CPU=aarch64
11 # 这个是输出的路径
12 export PREFIX=$(pwd)/android/$CPU
13 export ADDI_CFLAGS="-march=armv8-a"
14 ./configure --target-os=linux \
15 --prefix=$PREFIX --arch=arm64 \
16 --disable-doc \
17 --enable-shared \
18 --disable-static \
19 --disable-x86asm \
20 --disable-symver \
21 --enable-gpl \
22 --disable-ffmpeg \
23 --disable-ffplay \
24 --disable-ffprobe \
25 --disable-doc \
26 --disable-symver \
27 --cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
28 --enable-cross-compile \
29 --sysroot=$SYSROOT \
30 --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
31 --extra-ldflags="$ADDI_LDFLAGS" \
32 $ADDITIONAL_CONFIGURE_FLAG
33 make clean
34 make
35 make install
4、脚本说明
1) 如果大家只是要编译一个可用的so库,不考虑so库大小的话,可以拷贝上述脚本代码作为模板,上图画圈部分根据自己实际情况,进行配置。
2)因为上图是根据我的情况配置,从我的实际中挑出几处,供对号入座。为实际操作提供参考
5、 安卓 CPU架构
6、注意事项
在编译x86或x86_64时,将--disable-x86asm \这项注释掉,并在编译脚本时,根据错误提示,安装相应的指令。
七、修改配置文件
1、修改FFmpeg下的configure配置文件生成标准的.so,而不是.so.xxx,将变量右侧的内容改为以下配置:
2、 对这几行代码的查找可以通过vim命令快速定位
八、编译
执行脚本命令:./build_android.sh
九、问题
1、C compiler test failed.(来自网络)
导致这种现象是因为写的程序脚本中SYSROOT=${NDK}/platforms/android-8/arch-arm
的android-8
的版本过低导致的,提高到21以上就好了。
2、答案来自https://blog.youkuaiyun.com/weixin_42471952/article/details/101713096
3、答案来自https://blog.youkuaiyun.com/weixin_42471952/article/details/101713096
4、答案来自https://blog.youkuaiyun.com/weixin_42471952/article/details/101713096
十、编译成功
参考链接:
https://www.cnblogs.com/wangluochong/p/7194037.html
https://blog.youkuaiyun.com/c6E5UlI1N/article/details/82836627
https://blog.youkuaiyun.com/iamcxl369/article/details/79900492
https://blog.youkuaiyun.com/weixin_42471952/article/details/101713096