Saltar al contenido principal
🇬🇧 English 🇧🇷 Português 🇩🇪 Deutsch
Convertidor de imágenes Convertidor de vídeo Convertidor de audio Convertidor de documentos
Herramientas Guías Formatos Precios API
Iniciar sesión
Guía

M3U8 y HLS: Guía Completa de HTTP Live Streaming

PC Por Pablo Cirre

Preguntas frecuentes

M3U es un formato de lista de reproducción simple para archivos multimedia locales o remotos, mientras que M3U8 es la versión codificada en UTF-8 que forma la base de HLS (HTTP Live Streaming). Un archivo M3U básico enumera rutas de archivos multimedia con metadatos EXTINF opcionales. Un M3U8 de HLS es mucho más complejo: puede ser una lista de reproducción maestra (que enumera múltiples variantes de calidad) o una lista de reproducción de medios (que enumera segmentos de vídeo cortos con información de tiempo). HLS M3U8 permite el streaming de tasa de bits adaptativa, donde el reproductor cambia automáticamente de calidad según la velocidad de red.

AV1 es el más eficiente (libre de royalties, ~30% menor que H.265) pero la codificación es lenta. H.265 (HEVC) ahorra ~30–50% sobre H.264 y lo soportan todos los móviles y ordenadores modernos. H.264 sigue siendo el más compatible con dispositivos antiguos. Regla práctica: archivado → AV1, uso diario → H.265, máxima compatibilidad → H.264.

Usa FFmpeg con la opción de copia de flujo: ffmpeg -i https://ejemplo.com/stream/master.m3u8 -c copy -movflags +faststart salida.mp4. Esto descarga todos los segmentos y los fusiona sin recodificar. Para contenido en plataformas de streaming, yt-dlp es una mejor opción ya que gestiona la autenticación, la selección de calidad y la fusión de subtítulos: yt-dlp -f 'best[height<=1080]' https://plataforma.com/video/xyz.

CRF (Constant Rate Factor) es el mejor por defecto para archivos offline: ffmpeg ajusta el bitrate frame a frame manteniendo la calidad percibida. Two-pass solo es mejor cuando debes acertar un tamaño final exacto (DVD). Bitrate constante es para streaming con canal fijo. Para "más pequeño a calidad X" usa siempre CRF.

Usa FFmpeg con el indicador -f hls. Para una transmisión básica de calidad única: ffmpeg -i entrada.mp4 -codec:v libx264 -crf 20 -codec:a aac -b:a 128k -hls_time 10 -hls_list_size 0 -hls_segment_filename 'seg_%03d.ts' salida.m3u8. Para streaming adaptativo multi-tasa de bits, usa filter_complex de FFmpeg para dividir el vídeo en múltiples flujos y el indicador -var_stream_map para crear listas de reproducción separadas para cada nivel de calidad.

Causas comunes: (1) framerate variable renderizado como constante (usa <code>-vsync vfr</code> para preservar VFR); (2) sample rates de audio distintos sin resamplear (añade <code>-ar 48000</code>); (3) limitaciones del contenedor (MP4 con VFR da problemas — usa MKV durante edición, codifica a MP4 solo al final). Compara tiempos con <code>ffprobe</code> en origen y destino.

Safari e iOS/iPadOS tienen soporte HLS nativo — simplemente establece el src del vídeo en la URL del .m3u8. Para Chrome, Firefox y Edge, usa la biblioteca JavaScript hls.js: inclúyela desde una CDN, verifica Hls.isSupported(), crea una nueva instancia Hls(), llama a hls.loadSource(m3u8Url) y hls.attachMedia(elementoVideo). La biblioteca gestiona la obtención de segmentos, el almacenamiento en búfer y el cambio automático de calidad mediante el algoritmo ABR (Adaptive Bitrate).

Sí, si solo cambias el contenedor: <code>ffmpeg -i in.mkv -c copy out.mp4</code>. Esto remuxea el stream sin recodificar, tarda segundos incluso con horas de material. Limitación: el códec debe ser compatible con el contenedor destino (no puedes poner H.264 en WebM, solo VP8/VP9/AV1). Para reducir tamaño hay que re-codificar.

Usamos cookies y tecnologías similares para personalizar contenido y anuncios, y para analizar el tráfico. Más información sobre cookies.