Creación de FFmpeg desde el código fuente para Android en macOS
Esta página explica cómo configurar y compilar FFmpeg para Android. La compilación para Android es una compilación cruzada y presupone el uso de macOS como sistema anfitrión. Los pasos necesarios son:
- Obtener el código fuente de FFmpeg.
- Instalar las dependencias necesarias.
- Configurar FFmpeg desde la línea de comandos.
- Construir las librerías de desarrollo.
Obtener el código fuente de FFmpeg
Puedes obtener el código fuente de FFmpeg de las siguientes maneras:
- Descarga desde la página de descargas de FFmpeg.
- Clonar desde git. Por ejemplo, este comando clona la versión 7.1.3 de las fuentes de FFmpeg a
~/ffmpeg.git clone --branch n7.1.3 https://git.ffmpeg.org/ffmpeg.git ffmpeg
Se recomienda utilizar la misma versión de FFmpeg que la documentada en la página principalQt Multimedia .
En los párrafos siguientes se asume que almacenas el código fuente de FFmpeg en ~/ffmpeg.
Requisitos previos
Para compilar FFmpeg, se necesitan estas herramientas y paquetes:
- Homebrew.
- Paquetes Homebrew (yasm).
También necesitarás el Android NDK, SDK y JDK instalados y configurados. Puedes encontrar más información sobre cómo configurarlos aquí Getting Started with Qt for Android.
Instalación de Homebrew
Para instalar Homebrew, ejecuta
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Instalar paquetes Homebrew
Para instalar el paquete Yasm de Homebrew, ejecuta:
brew install yasm
Establecer variables de entorno
Esta parte no es estrictamente necesaria pero ayudará a mantener el comando configure un poco más limpio y corto.
El siguiente comando asume que Andorid SDK está instalado en ~/Library/Android/sdk y que la versión de Android NDK es 26.1.10909125.
export ANDROID_NDK_ROOT=~/Library/Android/sdk/ndk/26.1.10909125
Se recomienda usar la misma versión de NDK que la documentada en Getting Started with Qt for Android.
La arquitectura para la que debe compilar depende de los dispositivos de destino:
- aarch64 (ARM64-v8a): Utilizada por la mayoría de los dispositivos Android modernos (64 bits).
- armv7 (armeabi-v7a): Para dispositivos ARM de 32 bits más antiguos.
- x86: Principalmente para emuladores de Android que se ejecutan en procesadores Intel.
- x86_64: Para emuladores basados en Intel de 64 bits o dispositivos especializados.
Configurar variables específicas de la arquitectura
- 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
Configurar y compilar FFmpeg
Cree un directorio build-android dentro del directorio ~/ffmpeg y navegue hasta él:
mkdir ~/ffmpeg/build-android cd ~/ffmpeg/build-android
Para configurar FFmpeg, ejecute:
../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-stripEl argumento --prefix especifica una ruta donde se instalan las bibliotecas de desarrollo de FFmpeg después de la compilación. La documentación no es necesaria, pero las funciones de red deben estar habilitadas. Para construir FFmpeg como bibliotecas estáticas, omite la opción --enable-shared.
Si estás construyendo FFmpeg con un backend de seguridad, tienes 4 opciones para elegir (las mismas que cuando construyes para Linux) pero sólo OpenSSL está probado por los mantenedores de QtMultimedia por ahora. Elige la opción apropiada y añádela durante la configuración de FFmpeg:
--enable-openssl # For OpenSSL --enable-gnutls # For GnuTLS --enable-libtls # For LibreSSL (libtls) --enable-mbedtls # For MbedTLS
Si estás usando OpenSSL también necesitas añadir las siguientes opciones durante la configuración de FFmpeg. No olvide sustituir <ANDROID_OPENSSL_INCLUDE_DIR> y <ANDROID_OPENSSL_LIBS_DIR> por las rutas reales.
--extra-cflags=-I<ANDROID_OPENSSL_INCLUDE_DIR> --extra-ldflags=-L<ANDROID_OPENSSL_LIBS_DIR>
Si se incluye el backend de seguridad, debes ocuparte tú mismo de su entrega, asegurándote de que las librerías correctas están instaladas en la plataforma de destino o utilizando stubs. Las librerías OpenSSL enlazadas deben llamarse libssl.so y libcrypto.so, sin ningún sufijo de versión. El usuario debe garantizar que las bibliotecas son de la misma versión ABI que las cabeceras OpenSSL con las que se compiló FFmpeg. Para más información, consulta Añadir compatibilidad con OpenSSL para Android.
Google Play requiere tamaños de página de 16 KB; para compilar binarios de FFmpeg compatibles, añade las siguientes opciones de configuración a FFmpeg.
--extra-ldflags=-Wl,-z,max-page-size=16384
Para conocer los requisitos de Google Play, consulta Requisitos de compatibilidad de Google Play con tamaños de página de 16 KB.
Una vez finalizado el comando configure, compila e instala FFmpeg mediante el comando make.
make -j install
Si la compilación finaliza sin errores, las bibliotecas de desarrollo de FFmpeg se instalarán en el directorio ../install-android. Si construyes Qt Multimedia, esta ruta se almacena en la variable FFMPEG_DIR utilizada al configurar 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.