1、ffmpeg下载地址:http://ffmpeg.org/download.html,打开下载地址选择需要的平台和版本号进行下载,下载可以先下载下来,然后在上传到linux上,也可以使用以下命令,在linux上直接下载:
wget http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.bz2
2、解压下载好的ffmpeg,解压命令如下:
tar xvf ffmpeg-4.3.1.tar.bz2
3、解压后会生成一个解压目录ffmpeg-4.3.1,在这个目录下创建android/armeabi-v7a文件夹用来存放编译生成的ffmpeg静态库或者动态库
4、下载并解压ndk(r21b),下载和解压命令:
wget https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip
unzip android-ndk-r21b-linux-x86_64.zip
5、修改so文件的命名规则:
#将ffmpeg-4.3.1目录中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='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
6、创建一个build_android_r21b.sh文件,在文件中添加一下脚本:
#!/bin/bash
PREFIX=/usr/hui/ndk/ffmpeg-4.3.1/android/armeabi-v7a
TOOLCHAIN=/usr/hui/ndk/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64
build()
{
./configure \
--prefix=$PREFIX \
--disable-static \
--enable-shared \
--enable-small \
--enable-gpl \
--disable-doc \
--disable-programs \
--disable-avdevice \
--enable-cross-compile \
--target-os=android \
--arch=armeabi-v7a \
--cc=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
make clean
make -j4
make install
}
build
7、为build_android_r21b.sh文件设置可执行权限:
chmod +x build_android_r21b.sh
8、执行build_android_r21b.sh进行交叉编译:
./build_android_r21b.sh
9、执行完成后可以去文件生成目录(/usr/hui/ndk/ffmpeg-4.3.1/android/armeabi-v7a)查看编译生成的文件:
10、在第9步中查看到生成的文件是动态库so格式的,如果要想编译成静态库,只需要修改第6步中的两个配置参数:
--disable-static \
--enable-shared \
修改为
--enable-static \
--disable-shared \
修改后重新进行编译生成静态库结果如下: