Vídeo escalable
El vídeo escalable es una función para sesiones enrutadas que mejora la calidad de vídeo en sesiones multipartitas al permitir que cada abonado reciba una calidad de vídeo que se ajuste a sus condiciones de red actuales, independientemente de los demás abonados.
Sin vídeo escalable, el enrutador de medios envía la misma calidad de vídeo a todos los abonados de un flujo. Cuando la conexión de un abonado se degrada, el router utiliza la estimación del ancho de banda para indicar al editor que reduzca su tasa de bits, lo que disminuye la calidad para todos los abonados de esa transmisión. Con el vídeo escalable activo, el enrutador selecciona la capa de calidad más adecuada para cada abonado de forma independiente en tiempo real, sin afectar a lo que reciben los demás abonados.
El vídeo escalable requiere sesión enrutada (una sesión que utiliza el enrutador de medios). No está disponible en sesiones retransmitidas y no sería útil en ellas, ya que los flujos viajan directamente entre clientes sin router en la ruta para seleccionar o cambiar las capas de calidad. Véase El Media Router y los modos multimedia.
El vídeo escalable está activado por defecto. La configuración a nivel de aplicación es por defecto Auto, lo que significa que el Media Router activa automáticamente el vídeo escalable cuando hay más de dos clientes en una sesión y se cumplen todas las demás condiciones. También puede configurarlo para En (siempre activo) o Fuera de - ver Configuración del nivel de aplicación para más detalles. En la mayoría de las aplicaciones no es necesario modificar el código.
Codecs y modelos de escalabilidad
El funcionamiento del vídeo escalable depende del códec que negocie el editor. Comprender las diferencias le ayudará a elegir el códec adecuado para su caso de uso, por ejemplo, cuando necesite optimizar el uso de la CPU del editor, el ancho de banda de subida o la adaptación de la calidad del lado del abonado.
VP8: Simulcast
Con VP8El vídeo escalable se implementa mediante retransmisión simultánea. El editor codifica y transmite múltiples flujos de bits completamente independientes a diferentes resoluciones y frecuencias de imagen: por ejemplo, 1080p, 540p y 270p, cada uno con sus propias capas temporales (frecuencia de imagen). Cada flujo es independiente y puede descodificarse por sí solo.
Dado que cada flujo es totalmente independiente, el Media Router puede cambiar instantáneamente a cualquier abonado a un nivel de calidad diferente sin necesidad de recodificar, lo que proporciona una gran resistencia a las condiciones cambiantes de la red.
Contrapartida: La codificación y carga de múltiples flujos requiere más CPU y ancho de banda de subida por parte del editor que el envío de una sola calidad. Las capas de menor resolución son bastante más baratas de codificar que las de mayor calidad, pero el coste total sigue siendo mayor que el de un flujo no simulado.
VP9: Codificación de vídeo escalable (SVC)
Con VP9usos escalables del vídeo Codificación de vídeo escalable (SVC). El editor codifica un único flujo de bits con múltiples capas espaciales (resolución) y temporales (frecuencia de imagen) matemáticamente integradas. Cada capa superior depende de las inferiores, de modo que un descodificador que reciba sólo la capa base obtiene una calidad baja, mientras que uno que reciba todas las capas obtiene una calidad total, todo a partir del mismo flujo de bits.
El coste de CPU del editor para la codificación SVC es superior al de la codificación de un único flujo -aproximadamente comparable a la emisión simultánea VP8-, pero SVC requiere menos ancho de banda de subida porque sólo hay que cargar un flujo de bits en lugar de varios flujos independientes. A partir del único flujo codificado, el enrutador de medios puede extraer y reenviar exactamente el subconjunto de capas adecuado para cada abonado, lo que proporciona una adaptación de la calidad eficiente y flexible que también es más resistente a la pérdida de paquetes.
SVC requiere que tanto el punto final del editor como el enrutador de medios sean compatibles con VP9 SVC. Firefox admite VP9 pero no SVC - un editor de Firefox envía VP9 sin capas, por lo que el Media Router no puede adaptar la calidad para ese flujo.
Para una explicación completa de las capas del SVC, los modos de escalabilidad (L1T3, L2T3, L3T3), el comportamiento de archivado y la compatibilidad de dispositivos, consulte Codificación de vídeo escalable VP9 para sesiones enrutadas.
Principales diferencias
| Aspecto | Simulcast (VP8) | SVC (VP9) |
|---|---|---|
| Lo que envía el editor | Múltiples flujos de bits independientes con diferentes resoluciones y frecuencias de imagen (SSRC/RID distintos) | 1 flujo de bits con capas espaciales y temporales incrustadas (SSRC único) |
| Capas espaciales | Multi-stream: cada resolución es un flujo codificado independiente | Integrado en un único flujo de bits |
| Capas temporales | Cada flujo de emisión simultánea puede incluir capas temporales | Integrado en un único flujo de bits |
| Función de enrutador de medios | Elige qué flujo reenviar | Extraer y reenviar las capas adecuadas |
| Soporte para editores de Firefox | Compatible con codificaciones basadas en RID | VP9 sí; SVC no compatible con Firefox |
Ratio de resolución de la capa espacial: Cada paso espacial utiliza un Relación de resolución 2:1. Un L3T3 stream tiene capas al 100%, 50% y 25% de la resolución de la fuente (por ejemplo, 1080p → 540p → 270p). Por eso setPreferredResolution() pueden apuntar a resoluciones sustancialmente diferentes.
H.264: Vídeo escalable no soportado
El códec H.264 es totalmente compatible con la API de Video de Vonage para publicar y suscribirse, pero el vídeo escalable no está disponible para secuencias H.264. El Media Router no puede cambiar las capas de calidad para flujos H.264, y los ajustes de vídeo escalable no tienen efecto cuando se negocia H.264. Si su aplicación requiere vídeo escalable, utilice VP8 o VP9 en su lugar. Consulte Códecs de vídeo.
Soporte de vídeo escalable
El vídeo escalable es compatible con VP8 simulcast y VP9 SVC. No es compatible con Secuencias H.264. Sólo está disponible en sesiones enrutadas.
Los siguientes clientes admiten vídeo escalable:
- SDK web - Chrome, Firefox, Safari, Samsung Internet, WebView Android, WebView en iOS y Edge basado en Chromium. Nota: Firefox es compatible con VP8 simulcast, pero no con VP9 SVC.
- SDK para Android (en dispositivos compatibles)
- SDK para iOS (en dispositivos compatibles)
- SDK para Windows
- SDK para Linux
- SDK para macOS
- SDK de React Native (en dispositivos compatibles)
Para obtener información sobre la compatibilidad de dispositivos y navegadores con VP9 SVC, consulte Codificación de vídeo escalable VP9 para sesiones enrutadas.
Nota: Por defecto, el vídeo escalable está desactivado para los flujos de pantalla compartida y activado para los flujos de cámara y de fuente de vídeo personalizada. Para activar el vídeo escalable para la pantalla compartida, consulte Secuencias de pantalla compartida escalables.
Cómo utilizar el vídeo escalable
Configuración del nivel de aplicación
El vídeo escalable tiene tres modos que se pueden configurar por aplicación en la opción Panel de Vonage:
- Conéctese a su Cuenta de Video API de Vonage.
- En el menú de la izquierda, seleccione Applications.
- Para una aplicación existente, haga clic en el menú de tres puntos y seleccione Editar. Para una nueva aplicación, acceda a la sección de capacidades tras hacer clic en Crear una nueva aplicación.
- Activar Vídeo opción.
- Desplácese hacia abajo y haga clic en Mostrar funciones avanzadas.
- En Vídeo escalableElija una de las siguientes opciones:
- Auto (recomendado) - El Media Router habilita el vídeo escalable cuando hay más de dos clientes en una sesión. Deje esta opción seleccionada a menos que tenga una razón específica para anularla.
- En - El vídeo escalable está siempre activado (en los clientes compatibles) para todas las sesiones de esta aplicación.
- Fuera de - El vídeo escalable está desactivado para todas las sesiones de esta aplicación. Utilícelo para bloquear la resolución y la frecuencia de imagen, o para reducir el uso de la CPU y el ancho de banda del editor.
- Haga clic en Guardar cambios.
Nota: Este ajuste controla Emisión simultánea VP8 comportamiento. VP9 siempre utiliza SVC cuando está soportado, y H.264 no soporta vídeo escalable - ninguno se ve afectado por este ajuste.
Nota: Los flujos requieren más ancho de banda de subida del editor cuando el vídeo escalable está activo, porque se codifican y transmiten capas de calidad adicionales.
Secuencias de pantalla compartida escalables
Por defecto, el vídeo escalable es desactivado para flujos de pantalla compartida y habilitado para flujos de cámara y fuentes de vídeo personalizadas. El contenido de pantalla compartida suele cambiar con menos frecuencia que el vídeo de cámara, por lo que el coste de codificación adicional del vídeo escalable suele ser innecesario. Sin embargo, habilitarlo puede ser beneficioso en sesiones en las que los suscriptores de pantalla compartida tienen condiciones de red variables. Puede anular el valor predeterminado por editor:
| SDK | Método / Propiedad |
|---|---|
| SDK web | scalableScreenshare opción en OT.initPublisher() |
| SDK para Android | PublisherKit.Builder.scalableScreenshare() |
| SDK para iOS | OTPublisherKitSettings.scalableScreenshare |
| SDK para Windows | Publisher.Builder.ScalableScreenshare |
| SDK para Linux | otc_publisher_settings_set_scalable_screenshare() |
Configuración de la frecuencia de imagen y la resolución preferidas por el abonado
Cuando se publica un flujo con vídeo escalable, los abonados pueden señalar una calidad preferida al enrutador de medios. El Media Router selecciona la capa disponible más cercana que se ajuste a las condiciones reales de la red del abonado.
Importante: Llamando a setPreferredResolution() o setPreferredFrameRate() desencadena una renegociación con el enrutador de medios. Hacerlo repetidamente o en rápida sucesión es costoso: consume CPU y puede degradar la calidad general del flujo. Establezca los valores preferidos una vez (o sólo cuando la disposición del abonado cambie significativamente), en lugar de ajustarlos continuamente.
| SDK | Frecuencia de imagen | Resolución |
|---|---|---|
| SDK web | Subscriber.setPreferredFrameRate() - ver subscribe-streams Guía web | Subscriber.setPreferredResolution() - ver subscribe-streams Guía web |
| SDK para Android | SubscriberKit.setPreferredFrameRate() - ver subscribe-streams Guía Android | SubscriberKit.setPreferredResolution() - ver subscribe-streams Guía Android |
| SDK para iOS | OTSubscriberKit.preferredFrameRate - ver Guía subscribe-streams iOS | OTSubscriberKit.preferredResolution - ver Guía subscribe-streams iOS |
| SDK para Windows | Subscriber.PreferredFramerate - ver subscribe-streams Guía de Windows | Subscriber.PreferredResolution - ver subscribe-streams Guía de Windows |
| SDK para Linux | otc_subscriber_set_preferred_frame_rate() - ver subscribe-streams Guía de Linux | otc_subscriber_set_preferred_resolution() - ver subscribe-streams Guía de Linux |
| React Native | preferredFrameRate propiedad de OTSubscriber - ver subscribe-streams Guía React Native | preferredResolution propiedad de OTSubscriber - ver subscribe-streams Guía React Native |
Cómo Verificar que el Vídeo Escalable Funciona
No existe un indicador único de "vídeo escalable activo" en el SDK, pero puede confirmar que está funcionando utilizando los siguientes métodos.
Inspector de vídeo
En Inspector de vídeo del módulo Métricas de calidad muestra el códec, la resolución y la frecuencia de imagen. Pase el ratón sobre cualquier punto de la línea trazada para ver el códec que se está utilizando en ese momento. Cuando el vídeo escalable está activado, la resolución y/o la frecuencia de imagen para uno o más abonados puede ajustarse dinámicamente en respuesta a las condiciones cambiantes de la red.
Estadísticas de WebRTC
Cada SDK expone el informe de estadísticas WebRTC subyacente. En el lado del editor, inspeccione RTCOutboundRtpStreamStats:
- Con Emisión simultánea VP8verá múltiples
ssrcentradas con diferentesframeWidth/frameHeightuno por capa de emisión simultánea. - Con VP9 SVCverá un único
ssrccon unscalabilityMode(por ejemplo,L3T3).
Métodos SDK para acceder al informe de estadísticas:
- SDK web -
Publisher.getRtcStatsReport()ySubscriber.getRtcStatsReport() - Linux - véase Obtener estadísticas de flujo
Lista de control: Condiciones necesarias para que el vídeo escalable esté activo
Si no observa un comportamiento de calidad adaptable, Verifique lo siguiente:
- La sesión es enrutado (no retransmitido).
- El vídeo escalable no está configurado en Fuera de a nivel de aplicación.
- El códec negociado es VP8 o VP9 (no H.264).
- El editor se ejecuta en un cliente compatible.
Errores comunes y preguntas frecuentes
¿Es lo mismo el vídeo escalable que VP9 SVC?
No. "Video escalable" es el nombre de la función de Vonage Video API. El sitio mecanismo técnico depende del códec:
- VP8 implementa vídeo escalable a través de retransmisión simultánea - el editor envía varios flujos independientes.
- VP9 implementa vídeo escalable a través de VPC - el editor envía un flujo con capas incrustadas.
Ambos mecanismos permiten al Media Router adaptar la calidad que recibe cada abonado. Cuando la documentación menciona "vídeo escalable" sin especificar un códec, se refiere a la función en su conjunto.
¿Forzar un códec preferido activa el vídeo escalable?
No. Al seleccionar un códec preferido (en el panel de control o a través de la función preferredVideoCodecs opción de editor) es independiente del vídeo escalable. La activación del vídeo escalable depende de todo lo siguiente:
- La configuración de la aplicación de vídeo escalable (Activado / Desactivado / Auto).
- La sesión enrutada.
- El códec negociado que soporta vídeo escalable (VP8 o VP9 - no H.264).
- El cliente o navegador del editor que admite vídeo escalable.
¿Por qué Subscriber.setPreferredResolution() ¿No adaptar la calidad?
El lado del abonado setPreferredResolution() y setPreferredFrameRate() son sugerencias para el router multimediano comandos directos al codificador del editor. El Media Router sólo puede actuar sobre estas pistas cuando está seleccionando activamente entre capas de vídeo escalables para ese abonado. Si alguna de las siguientes condiciones es verdadera, no hay capas para seleccionar y las sugerencias no tienen efecto:
- El vídeo escalable se desactiva a nivel de aplicación o en el flujo del editor.
- El códec negociado es H.264 (no se admite vídeo escalable).
- El cliente del editor no produce capas escalables (por ejemplo, un editor de Firefox que envía VP9 sin capas SVC).
- El editor tiene una limitación de CPU o de ancho de banda y no está enviando capas superiores para que el router las seleccione.
- La sesión es retransmitida - en una sesión retransmitida, el Media Router no reenvía flujos, por lo que no puede producirse la selección de capa. Tenga en cuenta que en las sesiones retransmitidas (P2P), el codificador del editor adapta su salida directamente en función de las condiciones de red del abonado, pero esto no es lo mismo que la selección de capa de vídeo escalable.
Nota: En sesiones retransmitidas, algunos SDK pueden aceptar estas llamadas a la API sin errores, pero el enrutador de medios no participa en el reenvío de secuencias, por lo que las preferencias no pueden respetarse para la selección de la capa de calidad.
Nota: Las API de resolución y velocidad de fotogramas del editor (disponibles en algunos SDK) se comportan de forma diferente: controlan directamente la resolución y la velocidad de fotogramas del flujo codificado, no una sugerencia de calidad del Media Router.
¿Puedo mezclar editores escalables y no escalables en la misma sesión?
Sí, el vídeo escalable se determina por flujo, no por sesión. Una sesión puede tener simultáneamente editores que utilicen vídeo escalable y editores que no lo hagan (por ejemplo, editores H.264 o clientes que publiquen con el vídeo escalable desactivado). El enrutador de medios gestiona cada flujo de forma independiente.
¿Afecta el vídeo escalable al archivado?
Para Emisión simultánea VP8, el archivador graba utilizando la capa de mayor calidad disponible.
Para VP9 SVCLos archivos individuales almacenan el flujo de cada participante como WebM con codificación VP9 SVC. Los archivos compuestos siempre se transcodifican a H.264/AAC MP4, independientemente del códec de la sesión.
Es posible que la reproducción de archivos WebM VP9 SVC no funcione en todos los reproductores multimedia. Para obtener instrucciones de reproducción y comandos de transcodificación, consulte Notas sobre el archivo en la guía VP9.
Para más información, consulte este artículo de apoyo.