前两天看一个视频转换成gif的软件。用起来很不舒服,然后呢就想自己做一个看看。就开始研究ffmpeg,第一步编译成so文件就把我搞得死去活来的,主要是一点经验也没有,然后就是各种失败,最后总算出来,发现这两天忙项目,都快忘记了,今天写一下做下记录。
需要准备下载的东西
MinGW下载安装
mingw 下载地址。下载完双击下一步下一步就好。但是要记住的你的安装地址,等会要配置。
下载完打开,把下图这些全部安装了。
环境配置path下面
双击打开msys.bat等会要用到。
ffmpeg下载最新的就好,我下载的是ffmpeg-4.4.1,往下一拖就看见了
NDK 以前用android studio安装过了,也可以不用下载,但是要用20+的版本,好像是17+以上的就可以,主要涉及到了编译文件的区别。后面说一下。
ffmpeg开始编译
1.修改ffmpeg的configure文件
地址看下图。直接拖动到android studio中就好。
--cross-prefix-clang=PREFIX use PREFIXfor compilation clang tools [$cross_prefix]
cross_prefix_clang
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix_clang}${cc_default}"
cxx_default="${cross_prefix_clang}${cxx_default}"
nm_default="${cross_prefix}${nm_default}"
完事,根据图复制对应的就好了,行数也差不多。
2编写build_android.sh文件
在configure同目录下新建build_android.sh文件,直接拖到android studio,复制下面代码,修改NDK参数,其他不变。
NDK=D:/sdk/ndk/21.1.6352462
SYSROOT=$NDK/toolchains/llvm/prebuilt/windows-x86_64/sysroot
PLATFORM=$NDK/toolchains/llvm/prebuilt/windows-x86_64
function build
{
./configure\
--prefix=$PREFIX \
--target-os=android \
--arch=$CPU \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-symver \
--enable-cross-compile \
--sysroot=$SYSROOT \
--cross-prefix=$PLATFORM/bin/arm-linux-androideabi- \
--cross-prefix-clang=$PLATFORM/bin/armv7a-linux-androideabi16- \
--extra-cflags="-I$SYSROOT/usr/include"\
--extra-ldflags="-L$SYSROOT/usr/lib"
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
}
CPU=armv7-a
PREFIX=$(pwd)/android_all/$CPU
build
read -p"Press any key to continue."
3开始编译
操作如下图所示,开始等着就好了。完成后会在ffmpeg的目录下面生成android_all文件夹。
步骤没问题的话基本上等半个来小时就可以了。
问题总结
看这篇文章的时候,可能已经搜索了很多文章了。其实编译错误的主要问题就是版本问题,很多文章都提到不要用最新的。最新的编译会失败报错,我也是转悠了好多,这里面主要涉及到了高版本ndk的问题,低版本是带着gcc编译器的,好像是从ndk17以后就不带这个编译器了,开始使用 clang进行编译。所以在编译过程中有一大部分提示gcc或者clang找不到,建议使用clang编译,gcc有很多问题,还要修改头文件指定,而且还不是最新的版本。如果不行,除了MinGW其他的都重新走一遍。万里长城第一步,突然项目就忙起来了。只能发下抽空在看了。
搞得时候感觉很麻烦,有一堆问题。现在出来了,过了几天以前的哪堆问题全忘记了。