HLS y DASH: cómo funciona el streaming adaptativo
4 min de lectura
Si alguna vez has visto que un vídeo empieza borroso y a los pocos segundos se vuelve nítido, o que baja de calidad cuando el wifi flojea, has visto el streaming adaptativo en acción. Casi todo el vídeo por internet se sirve así, con dos sistemas: HLS y DASH. Funcionan de forma parecida, y entenderlos explica muchos comportamientos que parecen fallos y no lo son.
La idea: trocear y ofrecer varias calidades
En lugar de un archivo enorme, el servidor guarda el vídeo partido en segmentos de pocos segundos. Y no una vez, sino varias: la misma película en 1080p, en 720p, en 480p, cada versión con su tasa de datos o bitrate. El reproductor descarga primero un índice, el manifiesto, que le dice qué versiones hay y dónde está cada trozo. Luego va pidiendo los segmentos uno a uno y, en cada momento, elige la calidad que cree que tu conexión puede sostener.
Las ventajas son claras: el vídeo arranca rápido porque empieza con trozos ligeros, se adapta a la red sin cortarse y permite saltar a cualquier punto descargando solo lo necesario. Las emisiones en directo funcionan igual: el manifiesto se va actualizando con los segmentos nuevos.
HLS
HLS (HTTP Live Streaming) lo creó Apple y es el más extendido. Su manifiesto es un archivo de texto con extensión .m3u8, y hay dos tipos.
La lista maestra enumera las calidades disponibles. Cada una lleva su ancho de banda, su resolución y sus códecs:
#EXTM3U#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.640028,mp4a.40.2"1080p/index.m3u8#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"720p/index.m3u8
La lista de medios de cada calidad enumera sus segmentos y lo que dura cada uno:
#EXTM3U#EXT-X-TARGETDURATION:6#EXTINF:6.0,segmento-001.ts#EXTINF:6.0,segmento-002.ts#EXT-X-ENDLIST
La etiqueta #EXT-X-ENDLIST indica que el vídeo está completo, es decir, bajo demanda. Si no aparece, es una emisión en directo y el reproductor vuelve a pedir la lista cada pocos segundos. Los segmentos pueden ser TS o fMP4 (MP4 fragmentado, que se reconoce por la etiqueta #EXT-X-MAP). El audio en otros idiomas y los subtítulos pueden ir como pistas aparte, declaradas con #EXT-X-MEDIA.
Por cierto, que el manifiesto de HLS tenga la misma extensión que muchas listas de vídeos crea confusión; lo aclaramos en M3U, M3U8 y W3U.
DASH
DASH (Dynamic Adaptive Streaming over HTTP, o MPEG-DASH) es un estándar internacional abierto. Su manifiesto es un archivo XML con extensión .mpd. Organiza el contenido en conjuntos de adaptación (el vídeo, el audio de cada idioma, los subtítulos) y, dentro de cada uno, representaciones, que son las calidades. Lo usan muchas plataformas y webs. Para quien mira, la diferencia con HLS es casi nula: cambia el formato del índice, no la idea.
¿Por qué cambia la calidad?
El reproductor mide lo rápido que le llegan los segmentos y cuántos segundos tiene guardados por delante, el búfer. Si la descarga va sobrada, sube de calidad; si va justa, baja antes de quedarse sin vídeo. Por eso:
- El arranque suele ser borroso: aún no sabe cuánto da tu conexión y empieza con prudencia.
- Baja cuando otro aparato de casa descarga algo o cuando te alejas del router.
- Tarda unos segundos en subir aunque la red mejore, porque cambia en el siguiente segmento, no al instante.
- Un vídeo puede no pasar de 720p aunque tengas fibra, si el servidor no ofrece más o si el aparato no puede decodificar la versión superior.
Que la calidad baje un rato no es un fallo: es el sistema evitando un corte. Si los cortes son frecuentes, mira cortes, tirones y carga lenta.
Directo, retraso y ventana
En una emisión en directo, el reproductor no se coloca en el último segundo emitido, sino unos cuantos segmentos por detrás, para tener margen. Por eso un directo por internet suele ir con retraso respecto a la televisión tradicional, y dos aparatos pueden ir desacompasados. Algunas emisiones dejan volver atrás un rato, lo que dure la ventana del manifiesto; otras solo ofrecen los últimos segmentos.
Cifrado y DRM
HLS permite cifrar los segmentos con AES-128 y una clave que se descarga de una dirección. Eso no es DRM: cualquier reproductor HLS lo abre si puede descargar la clave, y Whatplay también. El DRM (Widevine, PlayReady, FairPlay) es otra cosa: un sistema de licencias ligado al aparato que usan las plataformas de pago, que en HLS se declara con métodos como SAMPLE-AES y en DASH con la etiqueta ContentProtection. Whatplay no reproduce contenido con DRM; lo explicamos en el navegador de Whatplay y el DRM.
HLS y DASH en Whatplay
- Puedes poner la dirección de un .m3u8 o de un .mpd en una lista, o abrirla una vez con «Añadir lista» y «Solo reproducir, sin guardar».
- La calidad se elige sola. En «Opciones» del reproductor ves la resolución y los Mb/s de lo que está sonando.
- En el navegador, cuando una web usa HLS o DASH, la hoja «Vídeos de esta página» dice hasta qué resolución llega («hasta 1080p») y cuántas calidades tiene.
- Al enviarlo a un Chromecast, la tele suele descargar los segmentos ella sola. Si el servidor pide datos de acceso que la tele no puede enviar, el móvil hace de puente y tiene que seguir en la wifi.