HTTP Live Streaming (HLS) es un protocolo de transmisión adaptativa de datos multimedia desarrollado por Apple. HLS entrega video y audio a través de conexiones HTTP, dividiendo el contenido en una secuencia de pequeños archivos de segmentos y gestionando la reproducción mediante listas de reproducción de texto en formato M3U8. Según el informe Sandvine Internet Phenomena Report (2025), HLS maneja más del 65% del tráfico mundial de streaming adaptativo de video. El protocolo es compatible con todas las plataformas Apple y está disponible en Android, Windows y Smart TV a través de bibliotecas de terceros.
Puntos clave
HTTP Live Streaming (HLS) es un protocolo de transmisión de medios desarrollado por Apple en 2009 y presentado por primera vez en iOS 3.0 y Safari. En 2017, el protocolo fue propuesto como estándar de Internet a través de RFC 8216, confirmando su estatus como especificación abierta disponible para implementación en cualquier plataforma.
La idea principal de HLS consiste en dividir un flujo de medios continuo en segmentos cortos de 2 a 10 segundos de duración. Cada segmento es un archivo independiente que puede descargarse mediante una solicitud HTTP normal. La gestión del flujo se realiza mediante listas de reproducción de texto en formato M3U8, que contienen referencias a los segmentos y metadatos para su reproducción correcta.
La adaptabilidad es la ventaja clave de HLS. El servidor prepara varias versiones del mismo contenido con diferentes tasas de bits, desde 200 Kbps para conexiones débiles hasta más de 20 Mbps para video 4K. El cliente selecciona automáticamente la tasa de bits adecuada según el ancho de banda actual del canal. Según una investigación de Apple (WWDC 2024), LL-HLS reduce el tiempo de cambio entre tasas de bits a 500 milisegundos, garantizando cambios de calidad suaves sin pausas notables.
La primera versión de HLS (2009) solo admitía segmentos MPEG-2 TS con códec de audio AAC y códec de video H.264. iOS 8 (2014) añadió soporte para segmentos fMP4 (fragmented MP4), lo que permitió usar HLS con códecs más modernos, incluido HEVC (H.265). iOS 11 (2017) introdujo soporte para HDR10 y Dolby Vision. iOS 13 (2019) introdujo Low-Latency HLS, reduciendo la latencia de los tradicionales 6–30 segundos a 2–6 segundos.
En 2023, Apple amplió HLS con soporte para los códecs AV1 y EVC (Essential Video Coding), e introdujo Content Steering, un mecanismo de redirección dinámica de clientes entre servidores CDN para una carga óptima. Content Steering permite al servidor cambiar las URL de los segmentos sobre la marcha, redirigiendo al cliente al nodo CDN más cercano o menos cargado sin interrumpir la reproducción.
La arquitectura de HLS consta de tres componentes principales: el lado del servidor (servidor de origen + codificador), la red de distribución (CDN) y el lado del cliente (reproductor compatible con HLS). Todo el proceso, desde la captura de video hasta la reproducción en el dispositivo del usuario, incluye varias etapas secuenciales, cada una crítica para la calidad del streaming.
El video original primero se codifica en múltiples variantes con diferentes tasas de bits y resoluciones. Los codificadores profesionales, como FFmpeg o AWS Elemental MediaConvert, crean simultáneamente de 4 a 12 variantes de flujo: desde 240p (400 Kbps) hasta 4K (40 Mbps). Cada variante se divide en segmentos de igual duración, típicamente de 2 a 6 segundos para LL-HLS o de 6 a 10 segundos para HLS tradicional.
Para cada variante se crea una lista de reproducción de variante (variant playlist) que contiene las URL de todos los segmentos y su duración. Además, se crea una lista de reproducción maestra (master playlist) que combina todas las variantes e incluye información sobre cada una: resolución, tasa de bits, códec y pistas de audio. El cliente carga primero la lista maestra y luego selecciona la variante adecuada según el análisis de la velocidad de conexión.
Los segmentos y las listas de reproducción se almacenan en caché en servidores CDN ubicados geográficamente cerca de los usuarios. El uso del protocolo HTTP estándar para la distribución da a HLS una ventaja crítica: cualquier CDN, balanceador de carga o servidor proxy compatible con HTTP funciona con HLS sin configuración adicional. Esto diferencia a HLS de los protocolos en tiempo real como RTMP o WebRTC, que requieren servidores especializados.
import subprocess
subprocess.run([
"ffmpeg",
"-i", "input.mp4",
"-codec:v", "libx264",
"-codec:a", "aac",
"-hls_time", "6",
"-hls_list_size", "0",
"-var_stream_map", "v:0,a:0 v:1,a:1",
"-map", "v:0", "-b:v:0", "5000k",
"-map", "v:1", "-b:v:1", "1000k",
"-f", "hls",
"stream/output.m3u8"
])
El lado del cliente utiliza un algoritmo de selección de tasa de bits (ABR). El reproductor HLS carga la lista maestra, analiza las variantes disponibles y comienza la reproducción con la tasa de bits más adecuada. Durante la reproducción, el reproductor monitorea constantemente la velocidad de descarga de segmentos y el nivel del búfer, decidiendo si cambiar a una tasa de bits más alta o más baja. Los algoritmos ABR modernos consideran no solo la velocidad de la red, sino también el tamaño del búfer, el tipo de contenido e incluso el consumo de energía del dispositivo.
Comprender la estructura de un flujo HLS es necesario para configurar correctamente la codificación, distribución y depuración de problemas de reproducción. Cada flujo HLS consta de dos niveles de listas de reproducción y numerosos segmentos de medios organizados en una jerarquía estricta.
La lista de reproducción maestra es el punto de entrada para el reproductor HLS. El archivo con extensión .m3u8 contiene referencias a todas las variantes del flujo y sus características. El reproductor carga este archivo primero y, basándose en la información sobre tasas de bits y resoluciones, toma la decisión inicial sobre qué variante seleccionar. La lista maestra también puede contener referencias a pistas de audio alternativas, subtítulos y listas de reproducción I-Frame para búsqueda rápida.
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
1080p/video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360
360p/video.m3u8
La lista de reproducción de medios contiene la lista real de segmentos para una variante de flujo. Cada segmento se especifica con su duración y URI. La lista de reproducción de medios puede ser estática (para VOD, una lista completa de todos los segmentos) o actualizarse dinámicamente (para transmisiones en vivo, los segmentos antiguos se eliminan y se añaden nuevos).
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST
HLS admite dos formatos principales de segmentos de medios: MPEG-2 Transport Stream (.ts) y Fragmented MP4 (.m4s o .mp4). MPEG-2 TS es el formato original de HLS, que proporciona la máxima compatibilidad. fMP4 es un formato más moderno que admite HDR, HEVC y una compresión más eficiente. Apple recomienda fMP4 para todos los proyectos nuevos a partir de iOS 10 y macOS Sierra.
Los elementos adicionales del flujo HLS incluyen listas de reproducción I-Frame para búsqueda rápida, metadatos ID3 para sincronizar subtítulos y marcadores publicitarios, y Session Data para transmitir información de visualización a servidores de análisis. Todos estos elementos son opcionales, pero su uso mejora la calidad de la experiencia del usuario.
HLS domina el mercado de streaming de video gracias a varias ventajas arquitectónicas, pero también tiene limitaciones que deben tenerse en cuenta al elegir un protocolo para un proyecto específico. Comparemos HLS con protocolos alternativos de distribución de video.
| Característica | HLS | DASH | RTMP |
|---|---|---|---|
| Transporte | HTTP (80/443) | HTTP (80/443) | TCP (1935) |
| Adaptabilidad | Sí (ABR) | Sí (ABR) | No |
| Baja latencia | 2–6 s (LL-HLS) | 3–8 s (LL-DASH) | 0.5–2 s |
| Soporte HDR | Sí (iOS 11+) | Sí | Limitado |
| iOS nativo | Sí (Safari, AVPlayer) | Mediante reproductores de terceros | No |
| Simplicidad CDN | Máxima (HTTP) | Máxima (HTTP) | Servidores especializados |
La principal ventaja de HLS es el soporte nativo en todos los dispositivos Apple (iPhone, iPad, Apple TV, Mac) a través del AVPlayer integrado. Esto convierte a HLS en el estándar de facto para aplicaciones iOS/macOS. Además, el uso de HTTP estándar para la distribución permite almacenar en caché el contenido en cualquier CDN y servidor proxy sin configuración adicional, lo que simplifica significativamente la infraestructura de distribución.
Las desventajas de HLS incluyen una mayor latencia en comparación con RTMP o WebRTC para transmisiones en vivo. Incluso con LL-HLS, la latencia mínima es de 2 a 6 segundos, lo que es inaceptable para escenarios interactivos en tiempo real. Además, HLS genera más archivos en el servidor (cada segmento es un archivo separado), lo que puede crear carga en el sistema de archivos con un gran número de transmisiones simultáneas.
La integración de HLS en aplicaciones móviles difiere según la plataforma. En iOS y macOS, HLS es compatible a nivel del sistema operativo a través de AVFoundation y AVPlayer, lo que proporciona decodificación acelerada por hardware y un consumo mínimo de energía. En Android, HLS no es compatible con el MediaPlayer integrado, pero está disponible a través de ExoPlayer, el reproductor multimedia oficial de Google.
En la plataforma Apple, la reproducción de HLS es lo más simple posible gracias al soporte integrado en AVPlayer. Basta con crear un AVPlayer con la URL de la lista maestra, y el sistema maneja automáticamente el cambio adaptativo de tasa de bits, la selección de pistas de audio y el procesamiento de subtítulos. El desarrollador también obtiene control total sobre la reproducción a través de AVPlayerItem y AVAssetResourceLoader.
import AVFoundation
let url = URL(string: "https://example.com/stream.m3u8")!
let player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.player = player
present(controller, animated: true) {
player.play()
}
Para Android se utiliza ExoPlayer, que admite HLS a través de un módulo de extensión separado. ExoPlayer proporciona un control más preciso sobre el flujo HLS: se puede gestionar la selección de tasa de bits, configurar el almacenamiento en búfer y manejar errores de carga de segmentos individualmente. LL-HLS requiere ExoPlayer versión 2.14.0 o superior.
val player = ExoPlayer.Builder(this).build()
val uri = Uri.parse("https://example.com/stream.m3u8")
val mediaItem = MediaItem.fromUri(uri)
player.setMediaItem(mediaItem)
player.prepare()
player.play()
Las aplicaciones móviles requieren un enfoque especial para la configuración de HLS debido a la inestabilidad de las redes celulares y las limitaciones de tráfico. Las principales recomendaciones incluyen: configurar la tasa de bits inicial según el tipo de red (Wi-Fi o celular), usar duraciones de segmento más cortas (2–4 segundos) para una adaptación más rápida, precargar el búfer al cambiar a Wi-Fi y priorizar la pista de audio en señales débiles.
Apple en la especificación HLS Authoring Specification for Apple Devices (2024) recomienda usar un tamaño de segmento de no más de 6 segundos para dispositivos móviles y al menos 4 variantes de tasa de bits. Para ahorrar tráfico en redes móviles, el servidor debe entregar segmentos con el encabezado HTTP Cache-Control, permitiendo almacenar en caché el contenido en servidores proxy intermedios de los operadores de telecomunicaciones.
Preguntas frecuentes
MP4 es un contenedor para almacenar un archivo de video completo que debe descargarse por completo antes de comenzar la reproducción. HLS divide el video en pequeños segmentos y permite comenzar la visualización entre 2 y 6 segundos después de cargar el primer segmento, adaptando automáticamente la calidad a la velocidad de Internet.
Sí, HLS no requiere software de servidor de Apple. Cualquier servidor HTTP (Nginx, Apache, CDN) puede distribuir contenido HLS. Para codificar video en HLS se utiliza FFmpeg o codificadores profesionales. El único requisito es una configuración correcta del tipo MIME para archivos .m3u8.
Sí, HLS fue desarrollado originalmente para transmisiones en vivo. Durante una transmisión en vivo, la lista de reproducción de medios se actualiza dinámicamente: el servidor añade nuevos segmentos y elimina los antiguos. Low-Latency HLS (LL-HLS) reduce la latencia a 2–6 segundos, lo que hace que HLS sea adecuado para transmisiones deportivas y noticieros.
La lista de reproducción maestra combina todas las variantes del mismo contenido con diferentes tasas de bits y resoluciones. El reproductor la carga primero, analiza las características de cada variante (tasa de bits, resolución, códec) y selecciona la óptima para las condiciones actuales de la red. Sin una lista maestra, el cambio adaptativo de calidad es imposible.
HLS admite el cifrado AES-128 de segmentos y la integración con sistemas DRM: FairPlay Streaming (Apple), Widevine (Google) y PlayReady (Microsoft). Las claves de cifrado se transmiten por un canal seguro separado. Para protección adicional, se utiliza autenticación basada en tokens para el acceso a las listas de reproducción.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también