Mac平台下编译FFMPEG

编译环境

  1. Mac OS 10.14.4
  2. FFMPEG 4.3
  3. NDK ndk-r21c

下载

NDK 下载

FFMPEG 下载

编译过程

1..编写编译脚本

新建一个文本并将下面的内容复制粘贴进去后保存命名为build_android.sh

#!/bin/bash 

# 配置NDK环境,根据自己的ndk路径来
NDK=/Users/xxx/Library/Android/sdk/ndk/21.1.6352462
# 编译工具链目录
TOOLCHAIN_ROOT_DIR=darwin-x86_64
# 交叉编译环境
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR
# 很重要,如果使用静态库必须是 17,否则编译Android项目时会报:  error: undefined reference to ‘atof’
API=17 
# 不知道为什么 64架构的 clang 和 clang++ 最低都是21?
API_64=21

#配置 FFMpeg 编译参数
function build_android {
    echo "Compiling FFmpeg for $CPU" 
    ./configure \
    --prefix=$PREFIX \
    --disable-neon \
    --disable-hwaccels \
    --disable-gpl \
    --disable-postproc \
    --enable-shared \
    --enable-jni \
    --disable-mediacodec \
    --disable-decoder=h264_mediacodec \
    --enable-static \
    --enable-small \
    --enable-zlib \
    --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 -j16
    make install 
    echo "The Compilation of FFmpeg for $CPU is completed" 
}

#armv7-a 
ARCH=arm 
CPU=armv7-a 
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang 
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++ 
SYSROOT=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/sysroot 
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi- 
PREFIX=$(pwd)/android/$CPU 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm - march=$CPU " 
ADDI_LDFLAGS=$NDK/android-21/arch-arm/usr/lib
build_android 

3.开始编译

  1. 给编译脚本权限
     chmod 777 build_android.sh 
  1. 执行编译脚本
    ./build_android.sh

编译过程大概需要五六分钟左右,编译完成后可以根据脚本中你指定的输出目录中查看编译好的so文件和.a文件,脚本默认输出目录是:ffmpeg当前目录/android/CPU架构/ , 类似如下图所示:


image.png

如果需要其他CPU平台so可以根据需求自己修改对应的参数就可以了,不知道为什么最新的 NDK 中交叉编译工具 64 架构的都是从 API 21开始的有知道为什么的麻烦在下面给个评论,谢谢!下面列出几个常用的平台,直接复制到脚本中就可以了.

#armv8-a 
ARCH=aarch64 
CPU=armv8-a 
CC=$TOOLCHAIN/bin/aarch64-linux-android$API_64-clang 
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API_64-clang++ 
SYSROOT=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/sysroot 
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android- 
PREFIX=$(pwd)/android/$CPU 
OPTIMIZE_CFLAGS="-march=$CPU" 
build_android

#x86 
ARCH=x86 
CPU=x86 
CC=$TOOLCHAIN/bin/i686-linux-android$API-clang 
CXX=$TOOLCHAIN/bin/i686-linux-android$API-clang++ 
SYSROOT=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/sysroot 
CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android- 
PREFIX=$(pwd)/android/$CPU 
OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 - mfpmath=sse -m32" 
build_android 

#x86_64 
ARCH=x86_64 
CPU=x86-64 
CC=$TOOLCHAIN/bin/x86_64-linux-android$API_64-clang 
CXX=$TOOLCHAIN/bin/x86_64-linux-android$API_64-clang++ 
SYSROOT=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android- 
PREFIX=$(pwd)/android/$CPU 
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 - mtune=intel" 
build_android
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容