本页内容

在 Linux 上从源代码构建适用于 Android 的 FFmpeg

本页面介绍如何配置和构建适用于 Android 的FFmpeg。针对 Android 的编译属于交叉编译,并假设使用 Linux 作为主机系统。所需步骤如下:

  • 获取 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,需要以下工具和软件包:

  • Yasm。
  • 您所选安全后端对应的开发者软件包(见下文)。

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

安装软件包

要安装所需的软件包(包括 FFmpeg 所需的 Yasm),请运行:

apt-get install yasm

此外,若要启用安全后端,您需要安装相应的开发者软件包,例如:

apt-get install libssl-dev

对于其他后端,请安装相关软件包:

  • 对于 OpenSSL:libssl-dev 。
  • 对于 GnuTLS:libgnutls-dev 。
  • 对于 LibreSSL(libtls):libtls-dev 。
  • 对于 MbedTLS:libmbedtls-dev 。

设置环境变量

这一步并非绝对必要,但有助于使 `configure` 命令更加简洁。

以下命令假设 Android SDK 安装在~/Android/sdk ,且 Android NDK 版本为 26.1.10909125。

export ANDROID_NDK_ROOT=~/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=linux-x86_64 --target-os=android \
    --enable-cross-compile --arch=${ARCH} --cpu=${CPU} \
    --enable-jni --enable-mediacodec \
    --sysroot=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
    --sysinclude=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ \
    --cc=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/${TOOLCHAIN_ARCH}24-clang \
    --cxx=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/${TOOLCHAIN_ARCH}24-clang++ \
    --strip=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-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.