ffmpeg 编译Android
Posted 雨中漫步
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章
Android集成ffmpeg(一,Linux平台下编译ffmpeg)
Android FFMPeg——FFMpeg+libx264编译
Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段