在 macOS 上为 Android 从源代码构建 FFmpeg

本页介绍如何配置和构建 Android 版FFmpeg。针对 Android 的编译是交叉编译,并假定使用 macOS 作为主机系统。所需步骤如下

  • 获取 FFmpeg 源代码。
  • 安装所需的依赖项。
  • 从命令行配置 FFmpeg。
  • 构建开发库。

获取 FFmpeg 源代码

您可以通过以下方式获取 FFmpeg 源代码:

  • FFmpeg 下载页面下载
  • 从 git 克隆。例如,该命令将 7.1.1 版的 FFmpeg 源代码克隆到~/ffmpeg
    % git clone --branch n7.1.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg

建议使用与Qt Multimedia 主页中记录的相同的 FFmpeg 版本。

以下段落假定您将 FFmpeg 源代码存储在~/ffmpeg 下。

先决条件

要构建 FFmpeg,需要以下工具和软件包:

您还需要安装和配置 Android NDK、SDK 和 JDK。有关如何设置这些工具的信息,请参阅《Android 版 Qt 入门》

安装 Homebrew

要安装 Homebrew,请运行

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装 Homebrew 软件包

要安装 Homebrew 软件包 Yasm,请运行

% brew install yasm

设置环境变量

这部分并非绝对必要,但有助于使 configure 命令更简洁明了。

以下命令假定 Andorid SDK 已安装到~/Library/Android/sdk ,Android NDK 版本为 26.1.10909125。

% export ANDROID_NDK_ROOT=~/Library/Android/sdk/ndk/26.1.10909125

建议使用与《Android 版 Qt 入门》中记录的相同的 NDK 版本。

您应构建的架构取决于目标设备:

  • aarch64 (ARM64-v8a):被大多数现代 Android 设备(64 位)使用。
  • armv7 (armeabi-v7a):用于较旧的 32 位 ARM 设备。
  • x86:主要用于在英特尔处理器上运行的安卓模拟器。
  • x86_64:用于基于英特尔处理器的 64 位模拟器或专用设备。

设置特定架构变量:

  • aarch64
    % export ARCH=aarch64
    % export TOOLCHAIN_ARCH=aarch64-linux-android
    % export CPU=armv8-a
  • armv7
    % export ARCH=armv7
    % export TOOLCHAIN_ARCH=armv7a-linux-androideabi
    % export CPU=armv7-a
  • x86
    % export ARCH=x86
    % export TOOLCHAIN_ARCH=i686-linux-android
    % export CPU=i686
  • x86_64
    % export ARCH=x86_64
    % export TOOLCHAIN_ARCH=x86_64-linux-android
    % export CPU=x86-64

配置和构建 FFmpeg

~/ffmpeg 目录内创建build-android 目录并导航进入:

% mkdir ~/ffmpeg/build-android
% cd ~/ffmpeg/build-android

要配置 FFmpeg,请运行:

% ../configure --prefix=../install-android --disable-doc --enable-network --enable-shared \
    --host-os=darwin-x86_64 --target-os=android \
    --enable-cross-compile --arch=${ARCH} --cpu=${CPU} \
    --enable-jni --enable-mediacodec \
    --sysroot=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot \
    --sysinclude=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/ \
    --cc=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/${TOOLCHAIN_ARCH}24-clang \
    --cxx=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/${TOOLCHAIN_ARCH}24-clang++ \
    --strip=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-strip

--prefix 参数指定了构建后安装 FFmpeg 开发库的路径。不需要文档,但应启用网络功能。要将 FFmpeg 作为静态库构建,请省略--enable-shared 选项。

如果要使用安全后端构建 FFmpeg,您有 4 个选项可供选择(与为 Linux 构建时相同),但目前只有 OpenSSL 由QtMultimedia 维护者测试。请选择合适的选项,并在配置 FFmpeg 时添加它:

% --enable-openssl # For OpenSSL
% --enable-gnutls # For GnuTLS
% --enable-libtls # For LibreSSL (libtls)
% --enable-mbedtls # For MbedTLS

如果使用 OpenSSL,还需要在 FFmpeg 配置中添加以下选项。不要忘记将<ANDROID_OPENSSL_INCLUDE_DIR><ANDROID_OPENSSL_LIBS_DIR> 替换为实际路径。

% --extra-cflags=-I<ANDROID_OPENSSL_INCLUDE_DIR> --extra-ldflags=-L<ANDROID_OPENSSL_LIBS_DIR>

如果包含安全后端,则应自行处理其交付问题,确保在目标平台上安装了正确的库或使用存根。链接的 OpenSSL 库必须称为libssl.solibcrypto.so ,不含任何版本后缀。用户必须确保库的 ABI 版本与编译 FFmpeg 时使用的 OpenSSL 头文件相同。更多信息,请参阅为 Android 添加 OpenSSL 支持

configure 命令完成后,使用make 命令构建并安装 FFmpeg。

% make -j install

如果编译无误,FFmpeg 开发库将安装在~/ffmpeg/install-android 目录中。如果构建了Qt Multimedia ,该路径将存储在配置Qt Multimedia 时使用的FFMPEG_DIR 变量中。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.