1、編譯FFmpeg4.2.2
1.1、編譯環境
操作系統:linux,筆者用的是自己的服務器小水管centos7
NDK版本:r21 https://developer.android.google.cn/ndk/downloads/
FFmpeg版本:4.2.2 http://ffmpeg.org/download.html
1.2、配置
1.2.1、修改FFmpeg 配置文件
下載完的FFmpeg解壓後,進入解壓後的目錄即FFmpeg根目錄,找到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)'
1.2.2、編寫編譯腳本
在FFmpeg源碼根目錄新建shell腳本build_ffmpeg_android.sh
#!/bin/bash
#設置ndk目錄
NDK=/usr/ffmpeg/android-ndk-r21
API=21
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
#armv7 arm64 x86 x86_64
ARCH=arm64
#arm aarch64 i686 x86_64
ARCH2=aarch64
#stat 以下不同平臺編譯選擇性註釋
#armv7a平臺
#PLATFORM=$ARCH2-linux-androideabi
#ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-
#其他平臺
PLATFORM=$ARCH2-linux-android
ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/$PLATFORM$API-
#end
OS=android
CROSS_PREFIX=$TOOLCHAIN/bin/$PLATFORM-
#保存目錄
PREFIX=/usr/ffmpeg/ndk_output/$ARCH
./configure \
--prefix=$PREFIX \
--enable-cross-compile \
--cross-prefix=$CROSS_PREFIX \
--arch=$ARCH \
--target-os=$OS \
--pkg-config=$(which pkg-config) \
--cc=${ANDROID_CROSS_PREFIX}clang \
--cxx=${ANDROID_CROSS_PREFIX}clang++ \
--disable-asm \
--disable-x86asm \
--disable-stripping \
--sysroot=$SYSROOT \
--fatal-warnings \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--enable-pic \
--enable-jni \
--enable-shared \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-decoder=hevc_mediacodec \
--enable-decoder=mpeg4_mediacodec \
--enable-decoder=vp8_mediacodec \
--enable-decoder=vp9_mediacodec \
--enable-encoder=aac \
--enable-decoder=aac \
--enable-decoder=aac_latm \
make clean
make -j 4
make install
腳本編寫完成,直接運行build_ffmpeg_android.sh就可以了
以下需要注意幾點:
1、需要注意的是NDK r19後使用clang編譯器,設置工具鏈目錄有所區別
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
在linux直接使用linux-x86_64,macos需要改爲
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
2、以上腳本還有個需要注意的地方,編譯armv7a要特殊一點
舉個例子編譯armv7a平臺需要修改ARCH 和 ARCH2爲註釋對應平臺
還有需要把以下注釋打開
#armv7a平臺
#PLATFORM=$ARCH2-linux-androideabi
#ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-
再把以下注釋掉
#其他平臺
PLATFORM=$ARCH2-linux-android
ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/$PLATFORM$API-
3、build_ffmpeg_android.sh腳本下的configure配置項根據需求配置需要的項目,可參考FFmpeg官方文檔
最後編譯完成會生成幾個文件夾:
lib生成的動態庫
include生成的頭文件
share演示demo