参考两个大佬文章应该就没问题
编译FFmpeg4.3.1 、x264并移植到Android_Vinson-CSDN博客
Android最简单的基于FFmpeg的例子(三)---编译FFmpeg成一个SO库 | binglingziyu的博客 (ihubin.com)
编译环境
- Ubuntu
- FFmpeg-n4.3.1
- android-ndk-r21
编译前配置:
修改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)'
添加编译脚本 build_android.sh
此次需要注意的是,这次是要编译成一个so,所以不能直接先编译成so,要全部编译成.a文件,所以需要修改的是:
--disable-shared
--enable-static \
#!/bin/bash
PREFIX=/home/it/ffmpeg-4.3.1/android/armeabi-v7a
TOOLCHAIN=/home/it/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64
build()
{
./configure \
--prefix=$PREFIX \
--disable-shared \
--enable-static \
--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-
sudo make clean
sudo make -j4
sudo make install
}
build
编译过后,会产生.a文件
![](https://img.haomeiwen.com/i2325960/9d0c85e7564a36b5.png)
最后合成一个libffmpeg.so
进入刚生成.a文件的地方,创建一个sh编译文件union_ffmpegso.sh,添加如下编译命令:
echo "开始编译ffmpeg so"
#NDK路径.
export NDK=/home/liuf/ndk/android-ndk-r21
PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
PREFIX=$(pwd)
$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$PLATFORM/usr/lib \
-L$PLATFORM/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
libavcodec.a \
libavfilter.a \
libswresample.a \
libavformat.a \
libavutil.a \
libpostproc.a \
libswscale.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a \
echo "完成编译ffmpeg so"
最后执行编译: sudo ./union_ffmpegso.sh
执行速度很快,在当前目录下会得到一个libffmeg.so文件
网友评论