Mejorar VP9 sin cambiarlo - Parte 3

20 de noviembre de 2017
  por Equipo del blog
Comparación del rendimiento de distintas versiones de VP9

En las partes uno y dos de esta serie de blogs, hablamos de VP9 y de la implementación de la escalabilidad. En esta última entrega, cubriremos el códec en sí y los beneficios de la nueva implementación de VP9 escalable de Vidyo.

Leer más Mejorar VP9 sin cambiarlo - Parte 1
Leer más Mejorar VP9 sin cambiarlo - Parte 2

La asimetría entre la complejidad del codificador y la del descodificador se remonta a los primeros diseños de codificadores de vídeo digital de finales de los 80 (H.261) y es una característica inherente a las estructuras híbridas predictivas con compensación de movimiento que se han utilizado históricamente. La sofisticación del codificador siempre ha sido un punto de diferenciación entre las implementaciones de códecs, y muchas empresas han desarrollado su propia "salsa secreta" para mejorar la calidad y la eficacia de la compresión.

Este es a menudo un punto de confusión para los no expertos. Las normas de codificación de vídeo normalizan el proceso de descodificación y la sintaxis del flujo de bits, no el proceso de codificación. Los programadores tienen una gran libertad para optimizar el proceso de codificación. Es interesante que en el códec MPEG-2 que se utiliza en los DVD, el rendimiento del codificador casi se duplicó (es decir, la mitad de la tasa de bits para la misma calidad) en un período de 10 años sin ningún cambio en la sintaxis del flujo de bits subyacente. Lo que ocurrió fue que los codificadores pudieron tomar decisiones más inteligentes sobre dónde gastar los bits. Esto se debe a que los ingenieros han mejorado los diseños, pero también a que cada vez se dispone de más potencia de procesamiento para realizar estos cálculos, incluso en tiempo real.

Vidyo lanzó recientemente su propia oferta de Plataforma como Servicio (PaaS), en vidyo.io. Como PaaS, está diseñado para estar al alcance de todos: basta con descargar el SDK gratuito para su lenguaje y entorno de programación y conectar el código a su propia aplicación. El servicio está basado en la nube y se cobra en función del uso. Puedes leer más sobre la ingeniería que hay detrás de vidyo.io en entrada en mi blog.

Para nosotros era importante poder ofrecer un códec que fuera totalmente compatible con la escalabilidad, estuviera libre de los requisitos de derechos de autor actualmente conocidos y ofreciera interoperabilidad nativa con WebRTC. Aunque podríamos haber utilizado la versión de código abierto de VP9 escalable disponible en el proyecto WebM, decidimos desarrollar una implementación de VP9 escalable desde cero.

Vidyo siempre ha puesto mucho énfasis en una experiencia y un rendimiento de alta calidad en la gama más amplia posible de plataformas, desde móviles hasta sistemas 5K de gama alta y más allá. A lo largo de los años hemos desarrollado una gran experiencia en el diseño de codificadores de vídeo y en el desarrollo de implementaciones optimizadas en diversas plataformas, especialmente diseñadas teniendo en cuenta las comunicaciones interactivas en tiempo real. También queríamos poder utilizar los mecanismos de resistencia y ocultación de errores que hemos incorporado a nuestra plataforma, algunos de los cuales están patentados y van mucho más allá de lo que ofrecen los proyectos de código abierto, incluido WebRTC.

Para nosotros es especialmente importante el rendimiento móvil. Dado que la codificación se realiza mediante software, es imprescindible exprimir al máximo el rendimiento de la CPU y la batería disponibles. De hecho, como mostramos a continuación (puede consultar la Tabla 1), incluso en su modo de funcionamiento más sencillo (denominado modo CPU 8), en nuestras pruebas la versión de código abierto de VP9 (denominada OVP9) no ofrecía un rendimiento adecuado en tiempo real para la codificación escalable espacialmente de contenidos 720p en plataformas móviles típicas. Las frecuencias de cuadro rondaban los 15 fps, la mitad de los 30 fps que se suelen necesitar. Esta fue una motivación clave para que desarrolláramos nuestra propia versión optimizada".

Los resultados de nuestro trabajo ya están disponibles en nuestro vidyo.io PaaS, y pronto estará disponible en toda la plataforma Vidyo. La mejora del rendimiento es impresionante. Para demostrarlo, tenemos que comparar los dos códecs en tres parámetros: calidad frente a tasa de bits frente a complejidad. Los tres parámetros se afectan mutuamente, así que para hacer una comparación adecuada tenemos que arreglar al menos uno de ellos. Aquí compararemos la calidad de los códecs en toda su gama de funcionamiento y su complejidad. A continuación se muestran aspectos de nuestras pruebas internas en condiciones específicas; obviamente, otras pruebas o resultados de la vida real pueden variar, pero estos resultados demuestran el tipo de ventajas de rendimiento que puede aportar nuestro nuevo códec VP9.

720p 30fps

Figura 6: Comparación del rendimiento de distintas versiones de VP9 para un vídeo de 720p utilizando 2 capas espaciales y 3 capas temporales

Figura 6 muestra un ejemplo de codificación de una secuencia 720p, 30 fps con 2 capas espaciales y 3 capas temporales utilizando las dos versiones del códec VP9. El gráfico muestra PSNR (Peak Signal-to-Noise Ratio) frente a la tasa de bits. (Los números se refieren a la PSNR de la capa superior y a la tasa de bits total. En primer lugar, el vídeo se codifica (utilizando un cuantificador fijo) en cuatro puntos operativos diferentes utilizando OVP9 en modo CPU 8. Como hemos mencionado antes, este es el modo operativo más sencillo de esta implementación de software en particular, es decir, utiliza la menor cantidad de recursos de la CPU y, por supuesto, proporciona la menor eficiencia de compresión. Pero incluso en ese modo OVP9 no proporcionó un rendimiento en tiempo real (es decir, 30 fps) para 2 capas escalables a 720p. El mismo vídeo también se ha codificado utilizando la implementación de Vidyo de VP9 (denominada aquí VVP9) en dos modos de complejidad diferentes: baja y media. Podemos ver que VVP9 en el modo bajo ofrece aproximadamente el mismo rendimiento o ligeramente mejor que OVP9, mientras que en el modo medio se obtiene una mejora adicional.

Figura 6 nos dice que en esta configuración hemos igualado el rendimiento cualitativo de los dos códecs. Sin embargo, la comparación clave ahora es ver a qué coste de procesamiento obtenemos esta eficacia de compresión. Ahí es donde las cosas se ponen interesantes. Cuadro 1 a continuación se muestra el rendimiento de los dos códecs en términos de fotogramas por segundo en dos plataformas móviles populares, un iPhone 6 Plus y un Samsung Galaxy S6 Edge+ (ambos en modo de subproceso único).

Rendimiento de la CPU en plataformas iOS y Android

Tabla 1: Rendimiento de la CPU en las plataformas iOS y Android

Las columnas de la izquierda muestran los fps absolutos, mientras que las de la derecha muestran el porcentaje de velocidad de codificación y descodificación de OVP9 conseguido por VVP9 (en los dos modos). Podemos ver que, de media, en los dos dispositivos y tasas de bits conseguimos una velocidad 2,7-2,8x mayor al codificar, al tiempo que producimos incluso una calidad de vídeo ligeramente mejor (PSNR). En el caso del iPhone, VVP9 en el modo bajo proporcionó más del triple de velocidad. Debemos subrayar que estos resultados se refieren a la codificación escalable, con dos capas espaciales. Sin embargo, incluso en el modo de una sola capa observamos aumentos de velocidad de hasta 1,7 veces. Como ya se ha indicado, la velocidad de descodificación también fue mayor, aunque no de forma tan significativa. Era de esperar, ya que el proceso de descodificación es mucho más sencillo y hay menos margen para la optimización.

En particular, el aumento significativo de la velocidad de codificación repercute directamente en la duración de la batería de los dispositivos móviles. Una mayor velocidad de codificación, medida en fps, significa que la CPU del dispositivo necesita menos tiempo para codificar cada fotograma de vídeo. Si la velocidad de codificación es inferior a 30 fps, como ocurrió con los resultados de la prueba OVP9, significa que aunque la CPU dedique todo su tiempo a codificar vídeo, no podrá seguir el ritmo de los 30 fps de una cámara típica. Si la tasa de codificación es muy superior a 30 fps, como ocurrió con nuestros resultados VVP9, esto significa que la CPU tiene tiempo suficiente para codificar un vídeo, y luego ocuparse de otras tareas de la aplicación o simplemente irse a dormir. Esto se traduce inmediatamente en un menor uso de la batería. La menor mejora en la velocidad de descodificación tiene un beneficio similar, pero correspondientemente menos significativo, en el consumo de energía. La mejora total del consumo de energía depende también de las demás tareas que tenga que realizar la aplicación de comunicación de vídeo, como la codificación y descodificación de audio, la gestión de la interfaz de usuario, etc. En los dispositivos móviles dedicados a la codificación de vídeo (por ejemplo, las cámaras corporales que llevan los primeros intervinientes), el ahorro puede traducirse fácilmente en el doble de duración de la batería.

Algunas de estas mejoras también están presentes en las aplicaciones de escritorio. Por ejemplo, en un entorno Windows de 64 bits, hemos observado que la velocidad de VVP9 es entre 1,6 y 1,7 veces superior a la de OVP9 al codificar el mismo contenido 720p. (En entornos de escritorio, las comparaciones de velocidad de descodificación son menos relevantes, ya que la velocidad de descodificación en ambos códecs ya es varias veces superior a la de tiempo real). Obviamente, los recursos de la batería y el procesador no suelen ser tan limitados en los ordenadores de sobremesa como en los dispositivos móviles, pero el aumento del rendimiento de la codificación puede traducirse en tiempo de procesador liberado para otras tareas y/o mayor duración de la batería en los portátiles.

El resultado neto para los usuarios finales de Vidyo es que pueden disfrutar de todos los beneficios de un estándar abierto con total compatibilidad con la implementación existente basada en navegador, o realmente cualquier implementación VP9, mientras que al mismo tiempo disfrutan de un rendimiento sustancialmente mejor y amplían significativamente la capacidad de sus dispositivos móviles para codificar vídeo antes de necesitar ser conectados. Este es uno de los grandes puntos fuertes de los estándares abiertos: permitir diferentes implementaciones que pueden interoperar entre sí.

Más información:

Mejorar VP9 sin cambiarlo - Parte 1
Mejorar VP9 sin cambiarlo - Parte 2

Suscribirse al blog

Reciba una notificación cuando se publiquen nuevos blogs en esta categoría: .

Síguenos

Ir al contenido