Fluster: Una herramienta para la conformidad de decodificadores multimedia
Written by:
Michalis Dimopoulos29 de Diciembre de 2022
¿Qué es Fluster?
Fluster es un framework creado por Fluendo pensando en la conformidad de los decodificadores multimedia sobre la marcha. La inspiración parte de la necesidad de crear una herramienta que pudiera ejecutarse en la máquina local del desarrollador y en un entorno de integración continua (IC).
La historia comenzó en 2020 con Andoni y Pablo, quienes trabajaron con el objetivo de crear una herramienta nativa basada en Python sin dependencias y capaz de llenar un vacío en la comunidad de ingenieros de desarrollo multimedia. Estamos orgullosos de anunciar que la primera versión oficial del proyecto ya está disponible y puede consultarse en el repositorio GitHub del proyecto.
La herramienta es compatible con decodificadores de audio y vídeo, siendo el de audio la última incorporación. El diseño del software (SW) se basa en el principio de modularidad, y hace que añadir nuevos decodificadores y suites de pruebas sea bastante fácil.
Se trata de un proyecto público de open source con licencia LGPLv3 y una comunidad activa que aporta regularmente nuevas funciones, mejoras y correcciones de errores. Está escrito en Python (compatible con 3.6 y superiores) y proporciona una aplicación de línea de comandos (CLI).
No hay dependencias obligatorias; sin embargo, hay una opcional que habilita el soporte para el formato JUnit XML del informe del resumen. Como resultado, es independiente del sistema operativo (SO).
Debian Linux Distribution decidió integrarlo en su conjunto de herramientas de prueba para la detección de regresiones durante el desarrollo. Se trata de un avance positivo para el proyecto, que demuestra que su comunidad lo valora. El esfuerzo está actualmente en curso y puedes echarle un vistazo aquí.
Recorrido por las funcionalidades
Vamos a explorar las partes integrantes y funcionalidades de la propia herramienta. Como se mencionó anteriormente, Fluster soporta decodificadores de audio y vídeo y a continuación te damos más detalles sobre ellos:
Codec | Nombre completo | Tipo de stream | Información relevante |
---|---|---|---|
AAC | Advanced Audio Coding | Audio | - |
AV1 | AOMedia Video 1 | Video | https://aomedia.org/av1/ |
H.264 | Advanced Video Coding - AVC | Video | - |
H.265 | High-Efficiency Video Coding - HEVC | Video | - |
H.266 | Versatile Video Coding - VVC | Video | - |
VP8 | - | Video | - |
VP9 | - | Video | https://www.webmproject.org/vp9 |
Es importante mencionar que se admiten varios decodificadores, incluidos los de GStreamer, los basados en FFmpeg y los personalizados de referencia. El usuario puede añadir nuevos si lo desea.
Aparte de los decodificadores, la otra pieza fundamental que necesita Fluster son las suites de pruebas. Se incluye al menos una suite de referencia por decodificador. Una suite sólo puede asociarse a un decodificador. A continuación se ofrece información sobre las suites disponibles.
Nombre | Decodificador asociado | # Vectores de prueba | Información relevante |
---|---|---|---|
ISO_IEC_13818-4_2004 | AAC | 62 | Click here |
ISO_IEC_14496-26_2010 | AAC | 9 | Click here |
AV1-TEST-VECTORS | AV1 | 239 | Click here |
CHROMIUM-8bit-AV1-TEST-VECTORS | AV1 | 13 | Click here |
CHROMIUM-10bit-AV1-TEST-VECTORS | AV1 | 23 | Click here |
JVT-AVC_V1 | H.264 | 135 | Click here |
JVT-FR-EXT | H.264 | 69 | Click here |
JCT-VC-HEVC_V1 | H.265 | 147 | Click here |
JVET-VVC_draft6 | H.266 | 282 | Click here |
VP8-TEST-VECTORS | VP8 | 61 | Click here |
VP9-TEST-VECTORS-HIGH | VP9 | 6 | - |
VP9-TEST-VECTORS | VP9 | 305 | - |
Las suites de prueba están escritas en formato JSON y se componen de una colección de vectores de test de referencia. Cada vector (junto con otra información), contiene un archivo de entrada codificado y un resultado esperado de checksum. Puedes ver un ejemplo a continuación:
Fluster facilita el proceso de construcción de algunos decodificadores de referencia: AAC, H.264, H.265 y H.266, este se basa en un Makefile y Cmake. Por lo tanto, es recomendable que se utilice un entorno basado en Linux, aunque es opcional.
La aplicación CLI proporcionada tiene cuatro modos de funcionamiento:
-
Listar: Imprime una lista de los suites de prueba y decodificadores disponibles
-
Descargar: Cuando se invoca, Fluster descarga y desempaqueta todos los archivos de test de las suites de prueba existentes, dejándolos listos para la ejecución de esta.
-
Ejecutar: Ejecuta las pruebas de conformidad en todos los decodificadores disponibles con todas las suites de prueba relevantes (modo por defecto) o sólo en el descodificador indicado con la(s) suite(s) de prueba indicada(s)
-
Referencia: Rellena los resultados esperados para todos los vectores de prueba de una combinación especificada de suites de prueba y decodificador.
En la siguiente tabla se resumen los decodificadores, las suites y vectores de prueba disponibles en el momento de la publicación.
Codec | # Decodificadores | # Suites de prueba | # Vectores de prueba |
AAC | 2 | 2 | 73 |
AV1 | 6 | 3 | 275 |
H.264 | 21 | 2 | 204 |
H.265 | 24 | 1 | 147 |
H.266 | 1 | 1 | 282 |
VP8 | 13 | 1 | 61 |
VP9 | 12 | 2 | 311 |
Total | 79 | 12 | 1353 |
En el siguiente gráfico se pueden ver en resumen datos relacionados con los vectores de prueba de cada codec:
El camino por recorrer
Fluendo se esfuerza por añadir nuevos decodificadores y suites de prueba a medida que se hacen públicos. El siguiente paso, es centrarse en el soporte para decodificadores de audio.
Además de nuestros propios planes para ampliar la funcionalidad, estamos atentos a lo que la comunidad le gustaría ver implementado. Damos la bienvenida a cualquier aportación que ayude a mejorar Fluster, así que siéntete libre de hacer fork, modificar y contribuir de nuevo a la herramienta. Para más información, consulta esta guía.