在 macOS 上从源代码构建适用于 Android 的 FFmpeg
本页面介绍了如何配置和构建适用于 Android 的FFmpeg。Android 版本的编译属于交叉编译,且假设以 macOS 作为主机系统。所需步骤如下:
- 获取 FFmpeg 源代码。
- 安装所需的依赖项。
- 通过命令行配置 FFmpeg。
- 构建开发库。
获取 FFmpeg 源代码
您可以通过以下方式获取 FFmpeg 源代码:
- 从FFmpeg 下载页面下载。
- 从 Git 克隆。例如,以下命令将 FFmpeg 9.0.1 版本的源代码克隆到
~/ffmpeg。git clone --branch n9.0.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
建议使用与Qt Multimedia 主页中所述相同的 FFmpeg 版本。
下文假设您将 FFmpeg 源代码存储在~/ffmpeg 目录下。
先决条件
要构建 FFmpeg,需要以下工具和软件包:
- Homebrew。
- Homebrew 软件包(yasm)。
此外,您还需要安装并配置好 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` 命令更加简洁明了。
以下命令假设 Android SDK 已安装在~/Library/Android/sdk 路径下,且 Android NDK 版本为 26.1.10909125。
export ANDROID_NDK_ROOT=~/Library/Android/sdk/ndk/26.1.10909125建议使用《Qt for Android 入门指南》中所述的相同 NDK 版本。
应构建的架构取决于目标设备:
- aarch64 (ARM64-v8a):大多数现代 Android 设备使用(64 位)。
- armv7 (armeabi-v7a):适用于较旧的 32 位 ARM 设备。
- x86:主要适用于在英特尔处理器上运行的 Android 模拟器。
- 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.so 和libcrypto.so ,且不带任何版本后缀。用户必须确保这些库的 ABI 版本与 FFmpeg 编译时使用的 OpenSSL 头文件版本一致。 有关更多信息,请参阅《为 Android 添加 OpenSSL 支持》。
Google Play 要求页面大小为 16KB,要构建兼容的 FFmpeg 二进制文件,请向 FFmpeg 中添加以下配置选项。
--extra-ldflags=-Wl,-z,max-page-size=16384有关 Google Play 的要求,请参阅《Google Play 16 KB 页大小兼容性要求》。
configure 命令执行完毕后,请使用make 命令构建并安装FFmpeg。
make -j install如果构建过程没有错误,FFmpeg 开发库将安装在../install-android 目录中。如果您构建了Qt Multimedia ,该路径将存储在FFMPEG_DIR 变量中,该变量在配置Qt Multimedia 时会被使用。
© 2026 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.