Mac环境交叉编译ffmpeg

  • 前言
  • 记录下自己在mac环境 对ffmpeg进行交叉编译生成动态库的步骤

  • 环境工具

macOS 10.14.6

ndk版本: android-ndk-r20b

ffmpeg版本:ffmpeg-4.2.2

  • 配置环境:
  1. 第一步下载ndk

推荐官网下载:https://developer.android.google.cn/ndk/downloads?hl=zh-cn

去官网选择自己需要下载的版本号,我选择的版本:android-ndk-r20b

下载成功之后解压并保存ndk的路径, 记录我的ndk路径 :/Users/mac/android-ndk-r20b/

  1. 第二步下载ffmpeg

ffmpeg这个库音视频必备 推荐下载官网最新版:http://ffmpeg.org/download.html

选择你需要的版本,推荐选择最新版本的ffmpeg进行编译,我选择的版本:ffmpeg-4.2.2

  1. 第三步编写shell脚本:

进入到ffmpeg的根目录下,该脚步直接放在当前目录

#通过命令创建shell文件
vim ./ffmpeg_build.sh

复制下方代码 到创建好的ffmpeg_build.sh文件中

该脚本交叉编译ffmpeg-4.2.2版本 使用 android-ndk-r20b版本 其他版本没有测试过!!!使用该脚本编译其他版本时一定先检查里面路径是否配置正确

#!/bin/bash
# 替换自己的NDK目录
NDK=/Users/mac/android-ndk-r20b
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
#sdk版本支持版本
API=21

echo "------------该脚本交叉编译ffmpeg-4.2.2版本 使用 android-ndk-r20b ------------"

function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \
 --prefix=$PREFIX \
 --disable-hwaccels \
 --disable-gpl \
 --disable-postproc \
 --enable-shared \
 --enable-jni \
 --disable-mediacodec \
 --enable-small \
 --enable-gpl \
 --disable-decoder=h264_mediacodec \
 --disable-static \
 --disable-doc \
 --disable-programs \
 --disable-ffmpeg \
 --disable-ffplay \
 --disable-ffprobe \
 --disable-avdevice \
 --disable-symver \
 --enable-neon \
 --disable-asm \
 --cross-prefix=$CROSS_PREFIX \
 --target-os=android \
 --arch=$ARCH \
 --cpu=$CPU \
 --cc=$CC \
 --cxx=$CXX \
 --enable-cross-compile \
 --sysroot=$SYSROOT \
 --extra-cflags="-mno-stackrealign -Os $OPTIMIZE_CFLAGS -fPIC" \
 --extra-ldflags="$ADDI_LDFLAGS" \
 $ADDITIONAL_CONFIGURE_FLAG
make clean
make -j16
make install
echo "------------The Compilation of FFmpeg for $CPU is completed-----------"
}

# armv8-a
ARCH=arm64
CPU=armv8-a


# r21版本的ndk中所有的编译器都在/toolchains/llvm/prebuilt/darwin-x86_64/目录下(clang)
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++

# ndk头文件环境
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-

# so文件输出路径
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android

# 交叉编译工具目录,对应关系如下
# armv8a -> arm64 -> aarch64-linux-android-
# armv7a -> arm -> arm-linux-androideabi-
# x86 -> x86 -> i686-linux-android-
# x86_64 -> x86_64 -> x86_64-linux-android-

# CPU架构
# armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -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=$TOOLCHAIN/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-clang
CXX=$TOOLCHAIN/bin/x86_64-linux-android$API-clang++
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
# 方法调用
echo "---------------开始编译---------------"
build_android
echo "---------------结束编译---------------"

确认无误

执行

#命令窗口直接运行
./ffmpeg_build.sh
#如果第一次运行没有权限使用
chmod +x ./ffmpeg_build.sh #获取权限之后再次运行./ffmpeg_build.sh

如果配置正确 此时会开始交叉编译了

等待10分钟左右 编译好之后当前路径中生成/android目录

如果需要修改编译文件输出路径,查找并修改shell文件中的 PREFIX=$(pwd)/android/$CPU

$(pwd):当前目录

总结

FFmpeg的交叉编译对于不熟悉C/C++和Cmake的有一定的难度,一步步提升自己,此文章记录自己编译过程的使用步骤。

如果编译失败首先检查版本号和路径是否都正确,可以查看ffmpeg目录下的android-build文件下的日志文件 根据错误排查。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值