如果没有配置NDK环境,需要先配置NDK的环境,具体配置可以看Ubuntu 配置Android NDK环境
接着,从官网下载FFmpeg,选择Old Releases
可下载历史版本(老版本比较稳定且遇到问题容易在网上找到答案),比如 2.6.9
接着解压缩,放到任意目录下
然后新建一个build_android.sh
脚本文件,内容如下
#!/bin/bash make clean export NDK=/home/heiko/Android/ndk/android-ndk-r10e/ export SYSROOT=$NDK/platforms/android-9/arch-arm/ export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64 export CPU=arm export PREFIX=$(pwd)/android/$CPU export ADDI_CFLAGS="-marm" ./configure --target-os=linux \ --prefix=$PREFIX --arch=arm \ --disable-doc \ --enable-shared \ --disable-static \ --disable-yasm \ --disable-symver \ --enable-gpl \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-doc \ --disable-symver \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make clean make make install
其中,export NDK
需要替换为你的NDK路径。
export SYSROOT
中的android-9代表着是针对那个Android版本编译的,要尽可能低,这样可以兼容老版本的Android。
export PREFIX
表示生成文件的目标路径。(pwd表示当前目录)
然后由于Android中无法识别ffmpeg生成的libpostproc.so.53
这种so后缀的文件(Ubuntu能识别这种后缀,但是Android识别不了),所以我们需要修改configure,使其生成的文件变已so作为后缀的文件,比如libpostproc-53.so
。
配置configure,将configure中的下面的这些配置注释
#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' #LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' #SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' #SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
增加如下配置
SLIBNAME_WITH_MAJOR=’
(FULLNAME)-
(SLIBSUF)’
LIB_INSTALL_EXTRA_CMD=’$
(LIBDIR)/
(SLIBNAME_WITH_MAJOR)’
SLIB_INSTALL_LINKS=’$(SLIBNAME)’
如下图所示
接着给予权限
chmod -R 777 .
配置编译环境
sudo apt install make sudo apt install make-guile
开始编译
./build_android.sh
这需要几分钟时间,完成后如图所示
然后,我们可以在ffmpeg目录下看到一个Android文件夹
可以看到,Android文件夹里有include文件夹(头文件)和lib文件夹(so文件),这就是我们开发要使用的文件,至此,ffmpeg就编译成功了。