En esta página

Bibliotecas FFmpeg en Linux y Android

Visión general

Para soportar el enlazado dinámico de FFmpeg de acuerdo con la licencia LGPL, Qt Multimedia utiliza librerías stub para manejar dependencias externas opcionales en plataformas Linux y Android.

En estas plataformas, FFmpeg puede necesitar bibliotecas compartidas adicionales que no se incluyen con Qt:

  • OpenSSL - necesaria para la transmisión segura en red.
  • VAAPI (sólo Linux) - permite la decodificación y codificación de vídeo acelerada por hardware.

A menudo, estas bibliotecas no están disponibles o no pueden incluirse debido a restricciones de licencia. Para asegurar que las características basadas en FFmpeg siguen siendo funcionales (excluyendo las partes no soportadas), Qt proporciona librerías stub como fallbacks.

Por qué son necesarios los stubs

Si estas dependencias no están presentes en tiempo de ejecución, FFmpeg no se cargará o funcionará correctamente. El mecanismo stub permite:

  • La carga correcta de FFmpeg incluso cuando faltan OpenSSL o VAAPI.
  • Degradación gradual de la funcionalidad (por ejemplo, la falta de VAAPI hace que no haya aceleración por hardware, pero la reproducción sigue funcionando).
  • Los usuarios pueden optar por utilizar las versiones de estas librerías proporcionadas por su propio sistema, si están disponibles.

Qué son los Stubs

Las bibliotecas "stub" imitan las interfaces de las bibliotecas reales (por ejemplo, libssl.so, libva.so) pero no implementan la funcionalidad completa. En su lugar:

  • Proporcionan implementaciones ficticias que devuelven valores alternativos seguros o no-ops.
  • Intentan resolver dinámicamente los símbolos reales a través de QLibrary::load / QLibrary::resolve.
  • Fallan si no se encuentran las bibliotecas reales.

Qt incluye estos stubs bajo los nombres:

  • libQt6FFmpegStub-ssl.so.x
  • libQt6FFmpegStub-crypto.so.x
  • libQt6FFmpegStub-va.so.x
  • libQt6FFmpegStub-va-drm.so.x
  • libQt6FFmpegStub-va-x11.so.x
  • (es posible que se añadan más en el futuro)

Cómo funcionan los stubs en Qt

Cuando FFmpeg está enlazado dinámicamente:

  • Normalmente espera ser enlazado con librerías del sistema como libssl.so.3 o libva.so.2.
  • Qt parchea los binarios de FFmpeg usando la herramienta patchelf para reemplazar estas dependencias reales con equivalentes stub.

Ejemplo:

# Original linkage
libffmpegmediaplugin.so: needs libavcodec.so (depends on the FFmpeg libs)
libavcodec.so: needs libssl.so.3

# After patching
libffmpegmediaplugin.so: needs libavcodec.so (no changes)
libavcodec.so: needs libQt6FFmpegStub-ssl.so.3
libQt6FFmpegStub-ssl.so.3: optionally needs libssl.so.3 (no explicit linkage)

Este parcheado se realiza automáticamente como parte del proceso de compilación/distribución.

Comportamiento en tiempo de ejecución y notas de seguridad

  • Los plugins de FFmpeg se cargan con dlopen(..., RTLD_LOCAL), por lo que los símbolos stub no se filtran a la tabla de símbolos global.
  • Si la aplicación ya utiliza OpenSSL o VAAPI, las bibliotecas del sistema pueden recogerse del ámbito global y deben ser compatibles bíblicamente.
  • Los binarios suministrados de QtMultimedia y FFmpeg son compatibles con:
    • OpenSSL 3.x.x (con versionado de símbolos @OPENSSL_3.0.0)
    • VAAPI ABI 0.33 (ABI 0.32 anterior no es compatible explícitamente)

Para eliminar por completo el uso de bibliotecas stub, hay dos opciones:

  • Utilizar patchelf para restaurar las dependencias de FFmpeg a las bibliotecas del sistema (por ejemplo, sustituir libQt6FFmpegStub-ssl.so.3 por libssl.so.3). Esto debe hacerse para todas las bibliotecas FFmpeg: libavcodec, libavformat, libavutil, libswresample, y libswscale.
  • Sustituya las bibliotecas FFmpeg suministradas por otras creadas manualmente por el usuario. Ver Construir FFmpeg desde el código fuente.

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