HLS (HTTP Live Streaming) es un protocolo de transmisión de contenido multimedia desarrollado por Apple. Permite la transmisión de vídeo y audio a través de la web de manera adaptativa, ajustando la calidad del vídeo en tiempo real en función de la conexión del usuario. Este protocolo es especialmente popular debido a su capacidad para ofrecer una experiencia de visualización sin interrupciones incluso en condiciones de red variables.
El contenido de vídeo se divide en pequeños segmentos (chunks) de unos pocos segundos de duración. Cada segmento contiene una parte del vídeo en formato MPEG-TS (MPEG Transport Stream).
El servidor crea una lista de reproducción (playlist) en formato M3U8, que es un archivo de texto que contiene enlaces a cada uno de los segmentos del vídeo. Existen dos tipos de listas de reproducción:
El reproductor cliente (por ejemplo, un navegador web o una aplicación de vídeo) descarga la lista de reproducción maestra y selecciona la lista de reproducción de medios que mejor se adapta a las condiciones actuales de la red y del dispositivo. Durante la reproducción, el cliente puede cambiar dinámicamente entre diferentes calidades según sea necesario.
HLS utiliza HTTP para la transmisión de contenido, lo que significa que puede aprovechar la infraestructura existente de servidores web y redes de distribución de contenido (CDN).
HLS es adecuado en los siguientes escenarios:
A continuación, se detalla cómo implementar HLS en un servidor PHP.
Para segmentar el vídeo y crear las listas de reproducción, necesitamos herramientas como FFmpeg
. Instala FFmpeg en tu servidor:
sudo apt-get update
sudo apt-get install ffmpeg
Usa FFmpeg para segmentar el vídeo y crear las listas de reproducción M3U8:
ffmpeg -i input.mp4 -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8
Este comando:
-i input.mp4
: Especifica el archivo de entrada.
-codec: copy
: Copia el codec de entrada sin recodificar.
-start_number 0
: Establece el número inicial de los segmentos.
-hls_time 10
: Establece la duración de cada segmento en 10 segundos.
-hls_list_size 0
: Indica que la lista de reproducción debe contener todos los segmentos.
-f hls
: Especifica el formato de salida como HLS.
Crea un script PHP para servir las listas de reproducción y los segmentos:
<?php
$path = 'ruta/a/tus/archivos/hls/';
$file = $path . $_GET['file'];
if (file_exists($file)) {
header('Content-Type: application/vnd.apple.mpegurl');
readfile($file);
} else {
http_response_code(404);
echo 'Archivo no encontrado.';
}
?>
En tu HTML, incluye el reproductor de vídeo apuntando a tu script PHP:
<!DOCTYPE html>
<html>
<head>
<title>Reproductor HLS</title>
</head>
<body>
<video id="video" controls>
<source src="tu_script.php?file=index.m3u8" type="application/vnd.apple.mpegurl">
</video>
</body>
</html>
HLS adapta automáticamente la calidad del vídeo en función de la velocidad de la conexión del usuario, proporcionando una experiencia de visualización fluida.
Es compatible con una amplia gama de dispositivos, incluidos iOS, Android, macOS, Windows y varios navegadores web.
Utiliza HTTP, lo que significa que puede beneficiarse de la infraestructura existente de servidores web y CDNs, aumentando la fiabilidad y la escalabilidad.
HLS soporta mecanismos de seguridad como el cifrado AES y las solicitudes seguras de URLs firmadas, protegiendo el contenido de accesos no autorizados.
Dado que se basa en HTTP, no requiere configuraciones de servidor especializadas y puede integrarse fácilmente en plataformas web existentes.
En resumen, HLS es una solución poderosa y versátil para la transmisión de vídeo en línea, adecuada para una amplia gama de aplicaciones gracias a su adaptabilidad, compatibilidad y fiabilidad. Con una implementación relativamente sencilla en PHP, es accesible incluso para desarrolladores con experiencia limitada en transmisión de vídeo.
Jorge García
Fullstack developer