Fluster: Una herramienta para la conformidad de decodificadores multimedia

29 de Diciembre de 2022 a las 07:00

Fluster: Una herramienta para la conformidad de decodificadores multimedia

Por Michalis Dimopoulos

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