參考兩個大佬文章應該就沒問題
編譯FFmpeg4.3.1 借卧、x264并移植到Android_Vinson-CSDN博客
Android最簡單的基于FFmpeg的例子(三)---編譯FFmpeg成一個SO庫 | binglingziyu的博客 (ihubin.com)
編譯環(huán)境
- 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
編譯過后,會產(chǎn)生.a文件
最后合成一個libffmpeg.so
進入剛生成.a文件的地方,創(chuàng)建一個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"
最后執(zhí)行編譯: sudo ./union_ffmpegso.sh
執(zhí)行速度很快,在當前目錄下會得到一個libffmeg.so文件