Erstellen von FFmpeg aus dem Quellcode für Android unter macOS

Diese Seite erklärt, wie man FFmpeg für Android konfiguriert und erstellt. Die Kompilierung für Android ist eine Cross-Kompilierung und setzt die Verwendung von macOS als Host-System voraus. Die erforderlichen Schritte sind:

  • Holen Sie sich den FFmpeg-Quellcode.
  • Installieren Sie die erforderlichen Abhängigkeiten.
  • Konfigurieren Sie FFmpeg über die Kommandozeile.
  • Erstellen Sie die Entwicklungsbibliotheken.

Beschaffung des FFmpeg-Quellcodes

Sie können den FFmpeg-Quellcode auf folgende Weise erhalten:

  • Download von der FFmpeg Download-Seite.
  • Klonen von git. Zum Beispiel klont dieser Befehl die Version 7.1.1 der FFmpeg-Quellen nach ~/ffmpeg.
    % git clone --branch n7.1.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg

Es wird empfohlen, die gleiche FFmpeg-Version zu verwenden, die auf der HauptseiteQt Multimedia dokumentiert ist.

In den folgenden Abschnitten wird davon ausgegangen, dass Sie den FFmpeg-Quellcode unter ~/ffmpeg speichern.

Voraussetzungen

Um FFmpeg zu bauen, werden diese Werkzeuge und Pakete benötigt:

Außerdem müssen das Android NDK, SDK und JDK installiert und konfiguriert sein. Informationen über die Einrichtung dieser Tools finden Sie unter Erste Schritte mit Qt für Android.

Installation von Homebrew

Um Homebrew zu installieren, führen Sie aus:

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

Installieren von Homebrew-Paketen

Um das Homebrew-Paket Yasm zu installieren, führen Sie aus:

% brew install yasm

Umgebungsvariablen setzen

Dieser Teil ist nicht unbedingt notwendig, aber er hilft dabei, den configure-Befehl etwas sauberer und kürzer zu halten.

Der folgende Befehl geht davon aus, dass das Andorid SDK auf ~/Library/Android/sdk installiert ist und die Android NDK Version 26.1.10909125 ist.

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

Es wird empfohlen, die gleiche NDK-Version zu verwenden, wie sie in Getting Started with Qt for Android dokumentiert ist.

Die Architektur, für die Sie bauen sollten, hängt von den Zielgeräten ab:

  • aarch64 (ARM64-v8a): Wird von den meisten modernen Android-Geräten (64-Bit) verwendet.
  • armv7 (armeabi-v7a): Für ältere 32-Bit-ARM-Geräte.
  • x86: Hauptsächlich für Android-Emulatoren, die auf Intel-Prozessoren laufen.
  • x86_64: Für 64-Bit-Emulatoren auf Intel-Basis oder spezielle Geräte.

Richten Sie architekturspezifische Variablen ein:

  • 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

Konfigurieren und Erstellen von FFmpeg

Erstellen Sie ein Verzeichnis build-android innerhalb des Verzeichnisses ~/ffmpeg und navigieren Sie in dieses Verzeichnis:

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

Um FFmpeg zu konfigurieren, führen Sie aus:

% ../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

Das Argument --prefix gibt einen Pfad an, in dem die FFmpeg-Entwicklungsbibliotheken nach der Erstellung installiert werden. Die Dokumentation wird nicht benötigt, aber die Netzwerkfunktionen sollten aktiviert sein. Um FFmpeg als statische Bibliotheken zu bauen, lassen Sie die Option --enable-shared weg.

Wenn Sie FFmpeg mit einem Sicherheits-Backend bauen, haben Sie 4 Optionen zur Auswahl (dieselben wie beim Bauen für Linux), aber nur OpenSSL wird derzeit von den QtMultimedia Maintainern getestet. Wählen Sie die entsprechende Option und fügen Sie sie während der FFmpeg-Konfiguration hinzu:

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

Wenn Sie OpenSSL verwenden, müssen Sie auch die folgenden Optionen während der FFmpeg-Konfiguration hinzufügen. Vergessen Sie nicht, <ANDROID_OPENSSL_INCLUDE_DIR> und <ANDROID_OPENSSL_LIBS_DIR> durch die tatsächlichen Pfade zu ersetzen.

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

Wenn ein Sicherheits-Backend enthalten ist, sollten Sie sich selbst um dessen Bereitstellung kümmern und sicherstellen, dass die richtigen Bibliotheken auf der Zielplattform installiert sind oder Stubs verwenden. Die OpenSSL-Bibliotheken, die gelinkt werden, müssen libssl.so und libcrypto.so heißen, ohne Versionssuffixe. Der Benutzer muss sicherstellen, dass die Bibliotheken die gleiche ABI-Version haben wie die OpenSSL-Header, mit denen FFmpeg kompiliert wurde. Weitere Informationen finden Sie unter Hinzufügen von OpenSSL-Unterstützung für Android.

Sobald der Befehl configure beendet ist, erstellen und installieren Sie FFmpeg mit dem Befehl make.

% make -j install

Wenn der Build ohne Fehler abgeschlossen wird, werden die FFmpeg-Entwicklungsbibliotheken im Verzeichnis ~/ffmpeg/install-android installiert. Wenn Sie Qt Multimedia erstellen, wird dieser Pfad in der Variable FFMPEG_DIR gespeichert, die bei der Konfiguration von Qt Multimedia verwendet wird.

© 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.