追风赶月莫停留,平芜尽处是春山。这篇文章主要讲述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】
推荐阅读
- LetsTalk_Android中引导用户加入白名单图
- appium设置不同版本的Chromedriver
- Android之contentProvider共享数据
- appium和weditor元素定位冲突
- 基于android(rk3288)的ADC光敏驱动注意事项
- Appium学习
- ##Django中Application labels aren't unique解决方法##
- 2020年GitHub 上那些优秀Android开源库,这里是Top10!
- 2020,6招玩转 Appium 自动化测试