Un archivo de texto, no un contenido
El formato M3U nació en los años noventa con los reproductores de audio de escritorio, en particular Winamp, para guardar una lista de canciones que se reproducen una tras otra. Su principio no ha cambiado desde entonces: una lista M3U es un archivo de texto plano que contiene una serie de direcciones (rutas locales o URL) que el reproductor abre en orden. No contiene imagen, ni sonido, ni vídeo. Se limita a decirle al reproductor dónde buscar cada flujo y cómo mostrarlo.

Esto explica dos cosas que a menudo se entienden mal. Primero, un archivo M3U de unos cientos de kilobytes puede «contener» miles de entradas: dentro solo hay texto. Segundo, la lista solo vale por las direcciones a las que remite: si el servidor al que apunta está fuera de línea, el archivo sigue siendo perfectamente válido, pero no se reproduce nada. Un reproductor como un reproductor de vídeo multimedia no hace más que interpretar estas líneas; la legalidad y la disponibilidad de los flujos dependen por completo de su origen, y debes tener los derechos sobre lo que ves.
Hoy se encuentran listas M3U en tres situaciones principales: las listas de archivos de audio o vídeo guardados en un disco o un NAS, las listas de radios y canales que sus editores emiten en línea, y las listas que facilita un servicio de televisión al que estás suscrito.
La estructura mínima: #EXTM3U y #EXTINF
Una lista llamada «extendida» (Extended M3U) empieza obligatoriamente con la cabecera #EXTM3U en la primera línea. Cada entrada ocupa después dos líneas: una línea de descripción que empieza por #EXTINF y luego la línea de la propia dirección. Este es un ejemplo completo y válido, con dos radios ficticias:
#EXTM3U
#EXTINF:-1,Radio Exemple Info
https://flux.exemple.fr/info/live.mp3
#EXTINF:-1,Radio Exemple Musique
https://flux.exemple.fr/musique/playlist.m3u8
Descompongamos la línea #EXTINF:-1,Radio Exemple Info:
#EXTINF:anuncia la información de la entrada que sigue.-1es la duración en segundos. Para una canción se indicaría, por ejemplo,215; para un flujo en directo, que no tiene final, la convención es-1(algunas listas ponen0, que la mayoría de los reproductores toleran).- la coma separa la parte técnica del nombre que se muestra. Todo lo que sigue a la última coma de los atributos es el título que verá el usuario.
Las líneas que empiezan por # y no son directivas conocidas se tratan como comentarios y se ignoran. En principio se toleran las líneas vacías, pero conviene evitarlas entre un #EXTINF y su dirección: algunos reproductores pierden entonces la asociación entre el nombre y el flujo.
Los atributos extendidos: tvg-id, tvg-logo, group-title
Para las listas de canales se ha impuesto un uso: añadir atributos entre la duración y la coma, con la forma nombre="valor". No forman parte de ninguna norma oficial, pero casi todos los reproductores de televisión los reconocen.
#EXTM3U url-tvg="https://guide.exemple.fr/epg.xml.gz"
#EXTINF:-1 tvg-id="exemple1.fr" tvg-name="Exemple 1" tvg-logo="https://img.exemple.fr/ex1.png" group-title="Generalistas",Exemple 1 HD
https://tv.exemple.fr/live/ex1.m3u8
| Atributo | Función | Error frecuente |
|---|---|---|
tvg-id | Identificador que vincula el canal con su guía de programación (EPG). | Identificador distinto del que figura en el archivo XMLTV: la guía queda vacía. |
tvg-name | Nombre «técnico», a veces usado en lugar del tvg-id para la correspondencia con la EPG. | Espacios o tildes distintos de los de la guía. |
tvg-logo | Dirección de la imagen que se muestra junto al canal. | Enlace en http bloqueado por el aparato, o imagen demasiado pesada. |
group-title | Categoría en la que se clasifica el canal (Deportes, Noticias, Infantil…). | Erratas que crean dos categorías casi idénticas. |
tvg-shift | Desfase horario de la guía, en horas, para este canal. | Se usa para compensar una zona horaria mal declarada en el origen. |
catchup, catchup-days | Indican que es posible ver contenido ya emitido (catch-up) y durante cuántos días. | Los ignoran los reproductores que no admiten esa función. |
En la línea de cabecera, el atributo url-tvg (o su variante x-tvg-url) indica la dirección de la guía de programación en formato XMLTV. El funcionamiento de esa guía se detalla en nuestro artículo sobre la EPG y el formato XMLTV.
Dos reglas de sintaxis evitan la mayoría de los problemas: los valores van siempre entre comillas rectas (", nunca « » ni “ ”), y el nombre que se muestra no debe contener comillas sin escapar. Una coma dentro de un valor entre comillas la aceptan los buenos analizadores, pero una coma en el propio nombre del canal puede truncar el título en algunos reproductores.
M3U o M3U8: ¿qué diferencia hay?
La extensión .m3u8 designa originalmente una lista M3U codificada en UTF-8. De ahí viene el «8». Un archivo .m3u clásico, en cambio, se leía históricamente con la codificación local del sistema (a menudo Windows-1252 en Europa occidental), lo que convertía «Información» en «Información» al abrir en una máquina un archivo escrito en otra.
En 2009, Apple retomó esta extensión para su protocolo de emisión HLS (HTTP Live Streaming), normalizado después en la RFC 8216. Un archivo .m3u8 puede designar, por tanto, dos cosas muy distintas:
- una lista de canales o de canciones, escrita por una persona o un servicio, que cargas en tu reproductor;
- un manifiesto HLS, generado automáticamente por un servidor de emisión, que enumera los pequeños segmentos de vídeo de unos segundos de un único canal o de una única película.
El segundo contiene directivas propias de HLS, como #EXT-X-TARGETDURATION o #EXT-X-STREAM-INF. Si abres una dirección y ves desfilar nombres como segment_10452.ts, estás viendo un manifiesto HLS, no una lista de canales. Nuestro artículo HLS, MPEG-TS y DASH explica este mecanismo en detalle.
En la práctica, los reproductores actuales leen indistintamente .m3u y .m3u8 y detectan el UTF-8 en la mayoría de los casos. Lo más seguro sigue siendo guardar siempre tus listas en UTF-8, sea cual sea la extensión.
Codificación, BOM y fines de línea: las trampas invisibles
Muchas listas «que no funcionan» están perfectamente escritas… pero mal guardadas. Tres detalles invisibles en pantalla causan problemas.
El BOM de UTF-8
Algunos editores, entre ellos versiones antiguas del Bloc de notas de Windows, añaden al principio del archivo tres bytes invisibles llamados BOM (Byte Order Mark: EF BB BF en hexadecimal). Un reproductor estricto que comprueba que el archivo empieza exactamente por #EXTM3U ve entonces #EXTM3U y rechaza la lista, o ignora la primera entrada. La solución: guardar en «UTF-8» y no en «UTF-8 con BOM». En Notepad++, el menú Codificación ofrece explícitamente las dos opciones; en Visual Studio Code, la codificación se muestra abajo a la derecha de la ventana y se cambia con un clic.
Las tildes mal convertidas
Si los nombres se muestran con secuencias como é o con rombos �, el archivo se escribió con una codificación y se leyó con otra. Vuelve a abrirlo en un editor que permita elegir la codificación de lectura (Windows-1252 o ISO-8859-1 si las tildes vuelven a ser correctas) y guárdalo de nuevo en UTF-8.
Los fines de línea
Windows termina las líneas con dos caracteres (CR LF); Linux, macOS y Android, con uno solo (LF). Los reproductores recientes aceptan ambos, pero un CR residual pegado al final de una URL puede invalidarla en un servidor puntilloso. En caso de duda, convierte a LF, algo que ofrecen los editores de código.
Los errores de sintaxis más comunes
Estos son los defectos que más se encuentran al abrir una lista rebelde, con su síntoma y su corrección.
| Síntoma | Causa probable | Corrección |
|---|---|---|
| «Archivo no válido» nada más abrirlo | Cabecera #EXTM3U ausente, mal escrita o precedida de un BOM | Poner #EXTM3U solo en la línea 1 y guardar en UTF-8 sin BOM |
| Los nombres están desplazados un canal | Falta una URL o hay una línea #EXTINF duplicada | Comprobar la alternancia estricta descripción / dirección |
| Todos los canales se llaman «-1» | Falta la coma antes del nombre | Escribir #EXTINF:-1 atributos,Nombre |
| Se ignoran categorías y logotipos | Comillas tipográficas o apóstrofos en lugar de " | Sustituirlos por comillas rectas |
| Una sola entrada no se reproduce | Espacio al final de la URL, carácter sin codificar (espacio, tilde) en la dirección | Eliminar los espacios y codificar el espacio como %20 |
| El archivo descargado es una página HTML | La dirección devuelve una página de error o de inicio de sesión en lugar de la lista | Abrir la dirección en un navegador para leer el mensaje del servidor |
Para las listas muy grandes, un último reflejo útil: contar las líneas #EXTINF y las líneas de direcciones. En Windows, PowerShell lo hace con (Select-String -Path liste.m3u -Pattern '^#EXTINF').Count. Los dos números deben ser iguales.
Crear y editar tu propia lista
Construir una lista a mano es sencillo y permite agrupar, por ejemplo, las radios y los canales que sus editores emiten gratis en sus propios sitios, o los vídeos de tu NAS. El método:
- Abre un editor de texto que controle la codificación: Notepad++ o Visual Studio Code en Windows, TextEdit en modo «texto sin formato» en Mac. Evita los procesadores de texto (Word, LibreOffice Writer), que insertan comillas tipográficas.
- Escribe la cabecera
#EXTM3Uen la primera línea, seguida si procede deurl-tvg="…"si dispones de una guía. - Añade cada entrada en dos líneas:
#EXTINF:-1 group-title="Radios",Nombrey después la dirección completa, empezando porhttp://ohttps://para un flujo de red, o por una ruta para un archivo local. - Guarda en UTF-8 sin BOM, con la extensión
.m3uo.m3u8. - Prueba la lista en tu reproductor y corrige una a una las entradas que fallen.
Para los archivos locales, prefiere las rutas relativas (Films/vacances-2024.mp4) cuando la lista está guardada en la misma carpeta que los vídeos: la lista sigue siendo válida si mueves todo a otro disco. Una ruta absoluta como C:\Users\… solo funcionará en la máquina de origen.
Por último, para cargar una lista en un reproductor suele haber dos opciones: indicar su dirección web (el reproductor la vuelve a descargar en cada actualización, lo que refleja los cambios del origen) o importar un archivo local (fijo mientras no lo sustituyas). En AICKO IPTV, los dos métodos se describen paso a paso en la página Xtream Codes y M3U.
En resumen
- Una lista M3U es un archivo de texto que enumera direcciones; no contiene ningún vídeo.
- Empieza por
#EXTM3Uy después alterna una línea#EXTINFy una línea de dirección para cada entrada. - Los atributos
tvg-id,tvg-logoygroup-titlegestionan la guía, los logotipos y las categorías. - .m3u8 significa «M3U en UTF-8», pero designa también los manifiestos del protocolo HLS.
- Guarda siempre en UTF-8 sin BOM, con comillas rectas.
Preguntas frecuentes
¿Se puede abrir un archivo M3U con el Bloc de notas?
Sí. Es un simple archivo de texto, legible y editable con cualquier editor. Para guardarlo, elige la codificación UTF-8; las versiones recientes del Bloc de notas de Windows 10 y 11 guardan en UTF-8 sin BOM por defecto.
¿Por qué mi lista se carga pero no arranca ningún canal?
El archivo se lee correctamente, pero las direcciones que contiene no responden: servidor fuera de línea, enlace caducado o acceso denegado. Prueba una dirección aislada en un navegador o en otro reproductor para saber si el problema viene del origen o del aparato.
¿Es peligroso un archivo M3U?
El propio archivo solo contiene texto y no puede ejecutarse. El riesgo viene de su origen: una lista obtenida de una fuente dudosa puede apuntar a contenidos emitidos de forma ilegal. Carga solo listas procedentes de servicios de los que seas cliente o de editores oficiales.
¿Cuál es el tamaño máximo de una lista?
El formato no fija ningún límite. Las restricciones vienen del aparato: una lista de varias decenas de miles de entradas puede ralentizar la carga en un dispositivo de TV poco potente. Eliminar las categorías innecesarias mejora claramente la rapidez de respuesta.
