Codificación de vídeo escalable VP9 para sesiones enrutadas
Acerca de la compatibilidad de VP9 con Scalable Video Coding (SVC) en sesiones enrutadas
Descripción general de VP9
VP9 es un formato de codificación de vídeo abierto y libre de derechos de autor desarrollado por Google. En es el sucesor de VP8 y ofrece una mayor eficiencia de compresión. En Esto significa que VP9 puede codificar vídeo de mayor calidad con la misma tasa de bits que VP8, aunque puede requerir más potencia de procesamiento para hacerlo. VP8, aunque puede requerir más potencia de procesamiento.
Para más información, consulte el Códecs de vídeo guía del desarrollador.
Codificación de vídeo escalable (SVC)
Una de las principales ventajas de VP9 es su compatibilidad con Codificación de vídeo escalable (SVC). La tecnología SVC permite que una única secuencia de vídeo contenga múltiples calidades espaciales y temporales. Esto permite que una SFU (unidad de reenvío selectivo), como la Router multimedia de vídeo de Vonage, para enviar diferentes resoluciones y velocidades de fotogramas a cada cliente suscrito a un emisor compatible con SVC. Esto resulta más eficiente que retransmisión simultánea, en el que el distribuidor envía varias secuencias de vídeo con diferentes resoluciones, como suele hacerse con VP8.
Modo de escalabilidad
El modo de escalabilidad en SVC define el número y los tipos de capas espaciales y temporales de un flujo SVC, así como las dependencias entre ellas. Para obtener más información, consulte el Especificación SVC de WebRTC del W3C. El modo de escalabilidad se define para un emisor, y el Vonage Video Media Router se encargará de reenviar al suscriptor la transmisión adecuada de entre las disponibles.
Al publicar una transmisión de cámara, la Video API de Vonage es compatible con los formatos L1T3, L2T3 y L3T3 modos de escalabilidad (tres capas temporales con un número variable de capas espaciales) tanto para clientes web como nativos.
Ten en cuenta que el número de capas espaciales se ajustará automáticamente en función de la resolución de la transmisión de la cámara y del ancho de banda estimado entre el editor y el Vonage Video Media Router. Si se dispone de ancho de banda suficiente, las capas espaciales para FHD son de 1920 x 1080, 960 x 540 y 480 x 270 píxeles. Para HD, son 1280x720, 640x360 y 320x180. Para SD, solo hay dos capas espaciales: 720x480 y 360x240. Del mismo modo, las capas temporales serán de 30 FPS para la capa temporal más alta, 15 FPS para la capa temporal intermedia y 7,5 FPS para la capa temporal más baja.
Tanto para los clientes web como para los nativos, al publicar una transmisión compartida de pantalla, el modo de escalabilidad se determina mediante una opción que se configura durante la publicación (más detalles en el Página de vídeo escalable. Si está desactivada, la transmisión utilizará el modo L1T1, que ofrece una única capa espacial y temporal (sin escalabilidad). Sin embargo, cuando está activada, el sistema seleccionará dinámicamente entre L1T1, L2T1 o L3T1 en función del ancho de banda estimado entre el editor y el Vonage Video Media Router, así como de la resolución de la transmisión compartida de pantalla.
Simulcast (utilizado en VP8) frente a SVC (utilizado en VP9)
En la transmisión simultánea (utilizada con VP8), el editor envía al servidor multimedia múltiples flujos de vídeo independientes, cada uno de los cuales consta de diferentes capas temporales con resoluciones y velocidades de bits variables. Estas capas temporales codificadas dentro de los múltiples flujos permiten al servidor seleccionar dinámicamente el flujo y la capa más adecuados para cada suscriptor en función de las condiciones de la red. Aunque este método mejora la eficiencia al ajustar la calidad del vídeo en tiempo real, requiere que el editor codifique (lo que aumenta la carga de la CPU) y transmita (lo que aumenta la carga de la red) varias versiones de la misma transmisión para adaptarse a las diferentes condiciones.
Por el contrario, el SVC (codificación de vídeo escalable), tal y como se implementa en VP9, integra múltiples niveles de calidad espacial y temporal en un único flujo. El servidor multimedia puede entonces extraer y reenviar la capa adecuada a cada suscriptor sin que el editor tenga que enviar múltiples flujos. Esto hace que el SVC sea más eficiente en cuanto al ancho de banda y mejora la eficiencia de la carga de trabajo del editor en comparación con la emisión simultánea.
Uso
Puedes probar esta función seleccionando VP9 como códec de vídeo preferido en la página «Proyecto» de tu Video API Account.
- Para las sesiones retransmitidas, el SVC está desactivado.
- En el caso de las sesiones enrutadas, la SVC se activará automáticamente.
Notas sobre el archivado con vídeos VP9
Nuestra plataforma ofrece dos modos de archivado: archivos compuestos y archivos de flujos individuales, y ambos seguirán funcionando al seleccionar VP9 como códec preferido. En los archivos compuestos, las grabaciones se almacenan como archivos MP4 compuestos con vídeo H.264 y audio AAC, lo que proporciona un único archivo de salida finalizado. Por el contrario, los archivos de flujos individuales almacenan los contenidos multimedia de cada participante por separado como flujos WebM, con vídeo VP9 SVC (codificación de vídeo escalable).
La compatibilidad con VP9 SVC tanto en reproductores comerciales como de código abierto puede variar, dependiendo de la versión y de la implementación concreta. Por ejemplo, al reproducir archivos de flujo individuales, no todos los reproductores pueden gestionar correctamente los flujos codificados en SVC. En el caso de FFMPEG, solo el códec libvpx-vp9 es capaz de decodificar correctamente estos flujos. Para una reproducción correcta, se puede utilizar el siguiente comando:
ffplay -vcodec libvpx-vp9 vp9_with_svc.webm
Además, si necesitas convertir un archivo WebM codificado en SVC a un flujo VP8 estándar sin SVC (para una mayor compatibilidad), puedes utilizar el siguiente comando de FFMPEG para transcodificar el vídeo:
ffmpeg -c:v libvpx-vp9 -i vp9_with_svc.webm -c:v libvpx vp8.webm
Esta transcodificación elimina las capas SVC, lo que garantiza que el vídeo se pueda reproducir en reproductores que no sean totalmente compatibles con VP9 y/o SVC.
Además, si quieres eliminar las capas SVC conservando el códec VP9, puedes utilizar:
ffmpeg -c:v libvpx-vp9 -i vp9_with_svc.webm vp9_without_svc.webm
Problemas conocidos
Somos conscientes de las siguientes limitaciones y problemas conocidos:
- En el caso de las cargas de trabajo de Experience Composer con contenido de vídeo muy dinámico y texturas complejas, la calidad de salida de las transmisiones de Experience Composer codificadas en VP9 obtuvo una puntuación inferior en las pruebas de calidad de vídeo perceptiva (VMAF) en comparación con las transmisiones de Experience Composer codificadas en VP8 de Experience Composer. Esta diferencia de calidad de Experience Composer no debería ser perceptible en los casos de uso habituales de videoconferencias con composición estándar.
Preguntas frecuentes
¿Cuál es el estado de la compatibilidad del formato VP9 con los navegadores?
A partir de 2024, VP9 es totalmente compatible con todos los principales navegadores. Entre ellos se incluyen Google Chrome, Firefox, Microsoft Edge, Samsung Internet, Opera y WebView para Android, que ofrecen compatibilidad total con VP9 desde aproximadamente 2016. Safari 15+ de Apple y WebView en iOS 15+ son compatibles con VP9.
¿Qué dispositivos son compatibles con VP9?
A partir de 2025, la mayoría de los dispositivos modernos serán totalmente compatibles con VP9 para los servicios WebRTC. Esto incluye ordenadores de sobremesa, portátiles y dispositivos móviles que ejecutan versiones recientes de los principales navegadores, como Google Chrome, Firefox, Microsoft Edge, Opera, WebView para Android y Safari, así como WebView para iOS (a partir de la versión 15). Aunque estos navegadores pueden realizar la codificación de vídeo mediante hardware, la compatibilidad de hardware para la codificación y la decodificación no es tan generalizada. Por ejemplo, aunque el hardware sea capaz de codificar y decodificar VP9, nuestros SDK nativos utilizarán la codificación de vídeo por software para VP9.
Por otro lado, el soporte de hardware y software SVC no está tan extendido.
Nota: Firefox es compatible con VP9, pero no con SVC.
¿Qué dispositivos se recomiendan?
VP9 ofrece una compresión de vídeo mejorada con respecto a VP8, aunque a cambio supone una mayor carga para la CPU. Cabe esperar que los modelos de dispositivos modernos de las principales marcas (por ejemplo, el iPhone de Apple, el Pixel de Google o el Galaxy de Samsung, entre otros) ofrezcan un buen rendimiento.
Otra función con limitaciones similares en cuanto a la CPU es la API de Vonage Media Processor. Cabe esperar que los dispositivos que cumplan esos requisitos gestionen bien el formato VP9.
Dispositivos recomendados por plataforma:
- Dispositivos Android recomendados
- Dispositivos iOS recomendados
- Dispositivos recomendados para la web
¿Qué versiones del Client SDK puedo utilizar?
Lo que se indica en el página de códecs se aplica. No obstante, la compatibilidad completa con VP9 y SVC, con las mejoras desarrolladas durante la fase de acceso anticipado, está disponible a partir de la versión 2.29. Si no puedes actualizar, la compatibilidad básica con VP9 y SVC está disponible a partir de la versión 2.27 del Client SDK para clientes web y nativos.
¿Qué ocurre si un navegador, un SDK o un dispositivo no es compatible con VP9?
Si se trata de un emisor, se utilizará VP8 como alternativa. Si se trata de un suscriptor, no podrá suscribirse al vídeo y solo recibirá audio.
¿Qué ocurre si un navegador, un SDK o un dispositivo es compatible con VP9 pero no con SVC?
Tanto para los editores como para los suscriptores, se utilizará VP9, pero sin compatibilidad con la escalabilidad. El terminal utilizará, de forma transparente, VP9 sin SVC.
¿Cómo controlo el códec en una sesión?
Al igual que con cualquier otro códec, la herramienta Video Inspector mostrará el códec, la resolución y la frecuencia de fotogramas en el módulo «Métricas de calidad». Basta con pasar el ratón por encima de cualquier punto de una línea trazada para ver el códec utilizado.
¿Cómo puedo saber qué códec utiliza un terminal?
Los SDK proporcionan métodos para recuperar el objeto RTCStatsReport de cada flujo, que incluirá el códec de audio y vídeo utilizado. Para ver ejemplos de código, echa un vistazo a la Manual de referencia del abonado o el Referencia del editor Manual para JS. En el caso de Linux, puedes encontrar información adicional aquí.