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

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

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

获取 FFmpeg 源代码

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

  • FFmpeg 下载页面下载
  • 从 git 克隆。例如,此命令将 7.1 版的 FFmpeg 源代码克隆到C:\FFmpeg\ffmpeg
    C:\FFmpeg> git clone --branch n7.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg

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

以下段落假定您将 FFmpeg 源代码存储在C:\FFmpeg\ffmpeg 下。

先决条件

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

  • MinGW-w64 编译器。
  • MSYS2.
  • MSYS 软件包(make、yasm)。

您还需要安装和配置 Android NDK、SDK 和 JDK。有关这些设置的更多信息,请点击这里:Getting Started with Qt for Android(开始使用 Qt for Android)。

有关 Qt 也支持的推荐编译器,请参见 Qtfor Windows - Building from Source。您可以使用Qt Online Installer 安装受支持的 MinGW-w64 编译器。

安装 MSYS2

要安装 MSYS2,您可以

本文档中的说明依赖于 MSYS2 安装到C:\msys64\ ,这是使用winget 时的默认路径。

安装完成后,从 Windows 开始菜单启动MSYS2 MINGW64 shell,并使用它安装必要的库。

$ pacman -S --noconfirm make yasm

在编译 FFmpeg 之前,MSYS2 的PATH 中必须有一个编译器。对于安装在C:\Qt\Tools\mingw1310_64\bin 下的 MinGW-w64,可以通过导出 PATH 环境变量将其添加到PATH

$ export PATH=/c/Qt/Tools/mingw1310_64/bin:$PATH

请注意,也可以使用 pacman 安装 MinGW-w64。

$ pacman -S mingw-w64-x86_64-toolchain

设置环境变量

严格来说,这部分不是必须的,但它有助于让 configure 命令更简洁明了。

以下命令假定 Andorid SDK 已安装到C:\Users\<USER>\AppData\Local\Android\Sdk ,Android NDK 版本为 26.1.10909125。不要忘记将路径中的<USER> 替换为实际用户名。

$ export ANDROID_NDK_ROOT=/c/Users/<USER>/AppData/Local/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

从准备好的 MSYS2 shell,导航到/c/FFmpeg 目录。在该目录中,创建一个build-android 目录,其中将包含 FFmpeg 的构建工件,并导航到该目录。

$ cd /c/FFmpeg/build-android

要配置 FFmpeg,请运行:

$ ../ffmpeg/configure --prefix=../install-android --disable-doc --enable-network --enable-shared \
    --host-os=windows-x86_64 --target-os=android \
    --enable-cross-compile --arch=${ARCH} --cpu=${CPU} \
    --enable-jni --enable-mediacodec \
    --sysroot=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/windows-x86_64/sysroot \
    --sysinclude=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/ \
    --cc=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/windows-x86_64/bin/${TOOLCHAIN_ARCH}24-clang \
    --cxx=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/windows-x86_64/bin/${TOOLCHAIN_ARCH}24-clang++ \
    --strip=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/windows-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 开发库将安装在C:\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.