(三)FFmpeg-4.3.1配合android-ndk-r21b编译成一个so文件

参考两个大佬文章应该就没问题

编译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文件

1638166504(1).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文件

你可能感兴趣的:((三)FFmpeg-4.3.1配合android-ndk-r21b编译成一个so文件)