FFMpeg编译
介绍
编译FFmpeg Android版本太难了,搜了各种民间教程,教程的操作系统、NDK版本、FFmpeg版本都不一样。那如果想整一个最新的版本怎么办呢?今天我就来试试,我的系统是Mac os,也同样适用于Linux,Window系统的话暂时不行
下载
- 下载FFmpeg源码 源码下载
- 如果你是用Mac或Linux用户并且安装了AndroidStudio,用AndroidStudio更新NDK即可,不需要重新下载
- Windows用户暂时不知道怎么整
- 你想重新下载也可以 下载地址
解压
tar -xvf ffmpeg-4.2.1.tar.bz2
开始编译
1. 修改so文件命名规则
# 将ffmpeg-4.2.1目录中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)'
2. 创建并粘贴编译脚本文件
- 将终端切换到ffmpeg-4.2.1目录下,创建build_android.sh
cd ffmpeg-4.2.1
touch build_android.sh
- 粘贴以下内容到build_android.sh并保存
#!/bin/bash
NDK=/Users/julian/Library/Android/sdk/ndk-bundle
HOST_TAG=darwin-x86_64
#HOST_TAG 的值根据系统修改
#macOS darwin-x86_64
#Linux linux-x86_64
#32-bit Windows windows
#64-bit Windows windows-x86_64
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
API=21
function build_android
{
echo "Compiling FFmpeg for $CPU and prefix is $PREFIX"
./configure \
--prefix=$PREFIX \
--disable-x86asm \
--disable-neon \
--disable-hwaccels \
--disable-gpl \
--disable-postproc \
--enable-shared \
--enable-jni \
--disable-mediacodec \
--disable-decoder=h264_mediacodec \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--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 -j2
# make install
echo "The Compilation of FFmpeg for $CPU is completed"
}
# arm64-v8a aarch64-linux-android
# ARCH=arm64
# CPU=armv8-a
# TRIPLE=aarch64-linux-android
# STRIP=aarch64-linux-android
# OPTIMIZE_CFLAGS="-march=$CPU"
# armeabi-v7a armv7a-linux-androideabi
ARCH=arm
CPU=armv7-a
TRIPLE=armv7a-linux-androideabi
STRIP=arm-linux-androideabi
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
# # x86 i686-linux-android
# ARCH=x86
# CPU=x86
# TRIPLE=i686-linux-android
# STRIP=i686-linux-android
# OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
# x86-64 x86_64-linux-android
# ARCH=x86_64
# CPU=x86-64
# TRIPLE=x86_64-linux-android
# STRIP=x86_64-linux-android
# OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
CC=$TOOLCHAIN/bin/$TRIPLE$API-clang
CXX=$TOOLCHAIN/bin/$TRIPLE$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/$HOST_TAG/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/$STRIP-
PREFIX=$(pwd)/android/$CPU
build_android
3. 配置build_android.sh参数
- 配置NDK路径,示例中我配置的是AndroidStudio安装后的bundle
NDK=/Users/julian/Library/Android/sdk/ndk-bundle
- 修改HOST_TAG的配置
HOST_TAG 的值根据系统修改,由于我的是mac 所以我的HOST_TAG=darwin-x86_64
电脑操作系统 | HOST_TAG 的值 |
---|---|
macOS | darwin-x86_64 |
Linux | linux-x86_64 |
32-bit Windows | windows |
64-bit Windows | windows-x86_64 |
- 选择需要编译的版本 默认为 armv7-a
一次只能编译一种版本 通过注释和取消注释
- 修改build_android.sh权限
chmod +x build_android.sh
4. 编译
./build_android.sh
网友评论