ffmpeg 编译Android

追风赶月莫停留,平芜尽处是春山。这篇文章主要讲述ffmpeg 编译Android相关的知识,希望能为你提供帮助。
环境 macOS 10.15.4      NDK 21.3.6528147    ffmpeg 4.2.3
1.执行sudo xcodebuild -license,防止编译的时候找不到一些文件报错
2.下载ffmpeg(4.2.3),解压后进入主目录,修改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)‘

3.下载NDK,我这里直接在android Studio上下载,路径在~/Library/Android/sdk/ndk/21.3.6528147 ,将NDK路径加入path
编辑~/.bash_profile:
NDK_HOME=~/Library/Android/sdk/ndk/21.3.6528147 PATH=${PATH}:${NDK_HOME}export PATH export NDK_HOME

执行source ~/.bash_profile,使得路径实时生效
4.
#!/bin/sh
# 测试通过 sh android.sh armv8-a    sh android.sh armv7a sh android.sh i686 sh android.sh x86-64

NDK=${NDK_HOME}
ANDROID_API=29
# armv8-a armv7a aarch64 i686 x86_64
CPU=armv8-a
# arm aarch64 i686 x86_64
ARCH=arm64
PLATFORM=darwin-x86_64
TOOLCHAIN=${NDK}/toolchains/llvm/prebuilt/${PLATFORM}


#OPTIMIZE_CFLAGS="-march=$CPU"
if [ "$#" -lt 1 ]; then
      CPU=armv8-a
else
      CPU=$(tr [A-Z] [a-z] < < < "$1")
fi
case ${CPU} in
      arm|armv5|armv6|armv7|armeabi)
      echo ${CPU}
      ; ;
      armv7a|armeabi-v7a)
      ARCH=arm
      CC=${TOOLCHAIN}/bin/armv7a-linux-androideabi${ANDROID_API}-clang
      CXX=${TOOLCHAIN}/bin/armv7a-linux-androideabi${ANDROID_API}-clang++
      CROSS_PREFIX=${TOOLCHAIN}/bin/arm-linux-androideabi-
      ; ;
      hard|armv7a-hard|armeabi-v7a-hard)
      echo ${CPU}
      ; ;
      neon|armv7a-neon)
      ; ;
      armv8|armv8-a|aarch64|arm64|arm64-v8a)
      # 验证成功
      ARCH=arm64
      CC=${TOOLCHAIN}/bin/aarch64-linux-android${ANDROID_API}-clang
      CXX=${TOOLCHAIN}/bin/aarch64-linux-android${ANDROID_API}-clang++
      CROSS_PREFIX=${TOOLCHAIN}/bin/aarch64-linux-android-
      ; ;
      mips|mipsel)
      echo ${CPU}
      ; ;
      mips64|mipsel64|mips64el)
      echo ${CPU}
      ; ;
      i686)
      ARCH=x86
      CC=${TOOLCHAIN}/bin/i686-linux-android${ANDROID_API}-clang
      CXX=${TOOLCHAIN}/bin/i686-linux-android${ANDROID_API}-clang++
      CROSS_PREFIX=${TOOLCHAIN}/bin/i686-linux-android-
      ; ;
      x86-64|x64)
      ARCH=x86_64
      CC=${TOOLCHAIN}/bin/x86_64-linux-android${ANDROID_API}-clang
      CXX=${TOOLCHAIN}/bin/x86_64-linux-android${ANDROID_API}-clang++
      CROSS_PREFIX=${TOOLCHAIN}/bin/x86_64-linux-android-
      ; ;
esac
echo "CPU:${CPU}"
echo "ARCH:${ARCH}"
# mac下是darwin-x86_64,Windows是windows-x86_64

#TARGET=${CPU}-linux-androideabi
PREFIX=$(pwd)/android/$CPU
SYSROOT=${TOOLCHAIN}/sysroot
PREFIX=$(pwd)/android/$CPU
CFFLAGS="-Os -fpic -march=${CPU}"
LDFLAGS="-marm"


function build_android
{
      ./configure
      --prefix=${PREFIX}
      --cross-prefix=${CROSS_PREFIX}
      --target-os=android
      --arch=${ARCH}
      --cpu=${CPU}
      --sysroot=${SYSROOT}
      --extra-cflags="-Os -fpic -march=${CPU}"
      --extra-ldflags=${LDFLAGS}
      --cc=${CC}
      --cxx=${CXX}
      --disable-doc
      --disable-ffplay
      --disable-ffprobe
      --disable-symver
      --disable-static
      --enable-ffmpeg
      --enable-avdevice
      --enable-cross-compile
      --enable-shared
      --enable-jni
      --enable-neon
      --enable-hwaccels
      --enable-gpl
      --enable-postproc
      $ADDITIONAL_CONFIGURE_FLAG
      make clean
      make -j16
      make install
}
build_android


【ffmpeg 编译Android】 

    推荐阅读