前言
FFmpeg是一个autoconf项目,cmake那套编译方法就没办法用了,因为autoconf只支持Unix-like的系统。所以最好在linux下编译、。网上有各种教程,但是跟着弄的时候又跑不通,关键问题在于ndk的版本,和build_android.sh脚本要对应,以下内容是采用ndk21版本编译出来的,不适用其他版本
正文
准备资源
准备ffmpeg源码 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
准备安卓ndk21 wget https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip unzip android-ndk-r21b-linux-x86_64.zip
配置解压后的文件夹ffmpeg中的configure
cd ffmpeg vim configure
3921行左右.将如下内容
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)'
这一步的主要目的是生成Android能够使用的 名称-版本.so文件的格式,不然的话生成的是Linux上使用库,Android不能用。
编写Android编译的脚本
ps:注意以下脚本只能配合ndk21使用
cd ffmpeg vim build_android.sh
#!/bin/bash
# 清空上次的编译
make clean
#你自己的NDK路径.
PREFIX=build_android
NDK=/home/anjoiner/Android/Sdk/ndk-bundle
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
API=21
function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \
--prefix=$PREFIX \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--enable-nonfree \
--enable-gpl \
--enable-small \
--enable-neon \
--enable-hwaccels \
--enable-avdevice \
--enable-postproc \
--enable-shared \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--nm=$NM \
--strip=$STRIP \
--cc=$CC \
--cxx=$CXX \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}
#armv8-a
ARCH=aarch64-linux-android-
VERSION=arm64
CPU=armv8-a
CROSS_PREFIX=$TOOLCHAIN/bin/${ARCH}
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
NM=$TOOLCHAIN/bin/${ARCH}nm
STRIP=$TOOLCHAIN/bin/${ARCH}strip
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android
#armv7-a
ARCH=arm-linux-androideabi-
VERSION=arm
CPU=armv7-a
CROSS_PREFIX=$TOOLCHAIN/bin/${ARCH}
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
NM=$TOOLCHAIN/bin/${ARCH}nm
STRIP=$TOOLCHAIN/bin/${ARCH}strip
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -march=$CPU"
build_android
编译
一定要sudo执行,否则无法再/usr/local/share目录下创建文件 ./configure --disable-x86asm sudo chmod +x build_android.sh sudo ./build_android.sh
|