¿Qué es el streaming con tasa de bits adaptativa?
El streaming con tasa de bits adaptativa ofrece varias variantes del mismo contenido generadas mediante encoding. El reproductor alterna entre ellas según el ancho de banda, el estado del búfer y la capacidad del dispositivo durante la reproducción.
Cómo funciona el streaming con tasa de bits adaptativa
El streaming adaptativo divide las variantes alineadas temporalmente en segmentos multimedia direccionables y los describe en un manifiesto: una lista de reproducción en HLS y un documento XML llamado MPD en MPEG-DASH. El reproductor elige una variante para las próximas solicitudes de segmentos a partir de señales como el caudal medido y el contenido multimedia almacenado en el búfer, por lo que el cambio es una decisión de entrega del lado del cliente y no una transcodificación del lado del servidor durante la transmisión. Ambos protocolos pueden transportar segmentos MP4 fragmentados, lo que permite que el empaquetado CMAF sirva un único conjunto de archivos multimedia bajo ambos manifiestos.
Datos clave
- Los cambios sin interrupciones se determinan durante el encoding y el empaquetado. RFC 8216 exige que el contenido correspondiente de todas las variantes HLS tenga marcas de tiempo coincidentes, y la especificación de creación de Apple exige que cada segmento de video comience con un fotograma IDR y recomienda que los límites de los segmentos se sitúen en los mismos puntos temporales en todas las variantes. El perfil de interoperabilidad de DASH-IF también inicia cada segmento con un punto de acceso similar a IDR y alinea los límites de los segmentos dentro de un Adaptation Set.
- El algoritmo de cambio pertenece al reproductor, no al protocolo: RFC 8216 lo deja fuera de su alcance, por lo que una misma transmisión puede comportarse de forma distinta según el reproductor. En hls.js, por ejemplo, los ajustes predeterminados exigen un margen de ancho de banda mayor para subir de nivel (
abrBandWidthUpFactor) que para mantenerlo o bajarlo (abrBandWidthFactor), y limitar la calidad al tamaño del elemento de video o reaccionar a los fotogramas descartados solo ocurre cuando se activacapLevelToPlayerSizeocapLevelOnFPSDrop; ambas opciones están desactivadas de forma predeterminada. - La calidad inicial depende del orden de la lista de reproducción y de los ajustes del reproductor. La especificación de Apple considera predeterminada de cada grupo la primera variante que aparece en la lista de reproducción multivariante dentro de ese grupo de variantes con audio compatible. En hls.js, dejar
startLevelsin establecer no fija la reproducción en el primer nivel de la lista, aunque algunas partes de la documentación de su API afirman que sí: el código fuente de v1.6.13 elige el nivel inicial a partir de una estimación del ancho de banda, que la tasa de bits de la primera variante de la lista puede elevar, de modo que el orden de la lista influye en el inicio sin fijarlo. ConstartLevelen-1, hls.js descarga de forma predeterminada un fragmento del nivel más bajo para estimar el ancho de banda antes de elegir. - La separación entre niveles de la escala es una decisión que depende del contenido, y las tasas declaradas deben ser precisas. Apple presenta sus tablas de tasas de bits como objetivos iniciales que debes evaluar con tu propio contenido, y el trabajo por título de Netflix observó que una escala fija consume más bits de los que necesitan los títulos sencillos, mientras deja artefactos en los complejos. Su objetivo declarado es separar los niveles adyacentes aproximadamente por una diferencia apenas perceptible, para que los cambios sean suaves con el menor número de variantes. En HLS, RFC 8216 advierte que un valor de
BANDWIDTHimpreciso puede causar interrupciones o impedir que se reproduzca una variante.
Cuándo es relevante el streaming con tasa de bits adaptativa
Proporciona una escala de tasas de bits cuando los cambios en las condiciones de red causarían interrupciones de otro modo. Las variantes mal espaciadas pueden desperdiciar almacenamiento o forzar caídas visibles de calidad sin mejorar significativamente la continuidad.
Cómo ayuda Transloadit con el streaming con tasa de bits adaptativa
El Robot /video/adaptive de Transloadit empaqueta variantes generadas mediante encoding en una salida HLS, MPEG-DASH o CMAF y genera los archivos de listas de reproducción y manifiestos; con technique establecido en cmaf, los manifiestos DASH y HLS hacen referencia a los mismos segmentos fMP4. Las variantes suelen proceder de Steps del Robot /video/encode que utilizan los ajustes preestablecidos hls/ o dash/, y se agrupan en un único Step del Robot /video/adaptive.
Transloadit prepara los archivos; el reproductor que utilices elige la variante durante la reproducción. La documentación del Robot también describe cómo forzar fotogramas clave coincidentes en cada Step del Robot /video/encode para que los segmentos se alineen entre variantes, los encabezados CORS que debes configurar en tu servidor de archivos (necesarios cuando el reproductor carga los archivos desde otro origen) y los metadatos relative_path que debes utilizar al almacenar segmentos para que se resuelvan las referencias de las listas de reproducción.
- Robot de streaming adaptativo: empaquetado HLS, MPEG-DASH y CMAF
- Ajustes preestablecidos de encoding de video, incluidos los conjuntos hls/ y dash/
Explora las capacidades de transmisión de medios de Transloadit
Fuentes
- RFC 8216: HTTP Live Streaming (secciones 4.3.4.2 BANDWIDTH, 6.2.4 transmisiones variantes, 6.3.1 cambio de variante del lado del cliente)
- Apple: especificación de creación de HLS para dispositivos Apple (puntos 1.25, 1.32, 7.4 y 8.22; la página necesita JavaScript para mostrarse)
- Puntos de interoperabilidad de DASH-IF para MPEG-DASH, versión 4.3 (sección 3.1: alineación de segmentos y cambios sin interrupciones)
- Directrices de implementación de DASH-IF: el MPD y el modelo temporal de DASH
- Documentación de la API de hls.js: ajustes de ABR, nivel inicial y límite de nivel
- Código fuente de hls.js v1.6.13: level-controller.ts (nivel inicial y estimación inicial del ancho de banda)
- Código fuente de hls.js v1.6.13: abr-controller.ts (selección de firstAutoLevel)
- Spiteri, Urgaonkar, Sitaraman: BOLA, adaptación de la tasa de bits casi óptima para videos en línea
- Netflix Technology Blog: optimización del encoding por título (copia archivada)