Lista M3U y XMLTV¶
No todos los suscriptores ven la televisión en la vitrina: algunos prefieren su propio reproductor en el ordenador, el decodificador o el móvil. Para ellos Catena entrega lo mismo en dos archivos — la lista de canales en M3U y la guía de programación en XMLTV.
Ambos archivos contienen exactamente los canales que este suscriptor puede ver según la fórmula de acceso. Un canal sin stream asignado queda fuera: no hay nada que reproducir en él.
Direcciones¶
| Qué | Dirección |
|---|---|
| Lista de canales | /playback/tv/playlist.m3u8?token=<token> |
| Lista de canales para reproductores IPTV | /playback/tv/iptv.m3u8?token=<token> |
| Guía de programación | /playback/tv/xmltv.xml?token=<token> |
Las direcciones son relativas a la raíz de la instalación: si la vitrina se abre en https://tv.example.com/tv/, la lista habitual está en https://tv.example.com/playback/tv/playlist.m3u8, y la IPTV en https://tv.example.com/playback/tv/iptv.m3u8.
Vale cualquiera de los dos tokens:
- el token de reproducción del suscriptor — el que el operador ve en su ficha, campo Token de reproducción;
- un token de dispositivo obtenido al entrar en la vitrina.
La diferencia está solo en la revocación: al revocar un dispositivo se apaga también su enlace, mientras que el token de reproducción vive con el propio suscriptor.
Qué hay dentro de la lista¶
Una línea de canal se ve así:
#EXTINF:-1 tvg-id="ch_992YXaVtjYS" tvg-chno="1",News 24
/playback/tv/channels/ch_992YXaVtjYS/play?token=<token>
tvg-ides el identificador del canal en Catena. Ese mismo identificador está en el XMLTV, así que el reproductor casa por su cuenta el horario con el canal.tvg-chnoes el número del canal: con él el reproductor arma el orden al que el suscriptor está acostumbrado.
La dirección está escrita relativa a la raíz del servidor, y el reproductor la completa a partir de la dirección desde la que descargó la lista.
Esa dirección es un enlace de emisión, no una URL de flujo ya lista. Al abrirla, el reproductor recibe una redirección a la reproducción con un permiso recién emitido. La razón son los tiempos de vida: el archivo descargado vive semanas en casa del suscriptor y un permiso de reproducción vive horas, así que una lista con el permiso incrustado dejaría de funcionar esa misma noche.
De ahí una consecuencia: el reproductor tiene que seguir redirecciones. Todos los habituales lo hacen.
Lista para reproductores IPTV¶
La lista habitual está pensada para reproductores que aceptan una dirección relativa y siguen redirecciones. Algunos reproductores IPTV, al importar un M3U, se quedan solo con direcciones absolutas http:// y https:// y esperan de inmediato un HLS en vivo de la forma /{stream}/index.m3u8. Un enlace de emisión no lo cuentan como canal — la lista llega vacía.
Para ellos Catena entrega un segundo archivo en /playback/tv/iptv.m3u8. Es un formato de lista compatible con Flussonic: cualquier reproductor que funcionara con el esquema de Flussonic seguirá funcionando con iptv.m3u8. Los mismos canales, otras líneas:
#EXTINF:-1 tvg-id="ch_992YXaVtjYS" tvg-name="News 24" tvg-chno="1",News 24
http://tv.example.com/news/index.m3u8?token=<permiso>
- La dirección es absoluta: el reproductor ve un canal sin completar la ruta.
- La cola es HLS en vivo
index.m3u8. Catena acepta esa ruta y redirige a la reproducción. - En la URL va un permiso de reproducción, no el token del suscriptor: el archivo vive horas, no semanas. Cuando los enlaces dejan de reproducir, el suscriptor vuelve a descargar la lista.
- Si el stream tiene archivo, la entrada lleva
catchup="fs"ycatchup-days— el reproductor arma la ventana de catch-up a partir de la dirección en vivo. Sin archivo esos atributos no aparecen.
La guía de programación es la misma para las dos listas: el mismo XMLTV.
Qué hay dentro del XMLTV¶
El archivo contiene las declaraciones de canales y sus programas. La ventana por omisión es de un día atrás y seis adelante: el día pasado es lo que necesita el catch-up, y seis días es el propio límite de la guía.
La ventana puede fijarse con los parámetros from y to — momentos en formato RFC 3339, por ejemplo ?from=2026-08-20T00:00:00Z&to=2026-08-22T00:00:00Z.
Las horas de los programas siempre se pasan a UTC y se escriben en la forma XMLTV YYYYMMDDHHMMSS +0000. Un programa cuyos límites no se pueden leer se omite: una sola fecha rota hace que el reproductor dibuje todo el archivo como una parrilla vacía, no solo esa fila.
El horario viene de la guía de programación. Si está vacía, el XMLTV llegará con las declaraciones de canales y sin programas — y eso se arregla en la fuente, no en la exportación.
Límites¶
- El límite de pantallas rige también aquí. Una reproducción desde un reproductor externo ocupa una pantalla igual que una en la vitrina; al llegar al límite, el reproductor recibe un rechazo (Cuántas pantallas a la vez).
- El catch-up en la lista habitual lo construye el propio reproductor con los límites del programa que trae el XMLTV. En la lista IPTV la ventana se declara en la entrada si el stream tiene archivo. Lo que está grabado lo decide el archivo del stream: más allá no hay nada que reproducir.
- El archivo no se actualiza solo. Si aparece un canal nuevo en la suscripción, el suscriptor vuelve a descargar la lista. La lista IPTV también se vuelve a descargar cuando ha caducado el permiso de los enlaces.
Escenario: entregar al suscriptor el enlace de la lista¶
- Abra la ficha del suscriptor y copie el campo Token de reproducción.
- Componga la dirección:
https://<dirección de la instalación>/playback/tv/playlist.m3u8?token=<token>. - Compruébela en el navegador: debe descargarse un archivo de texto que empieza por
#EXTM3U. - Componga con el mismo par la dirección del XMLTV y entregue al suscriptor los dos enlaces — el reproductor necesita ambos.
Si el archivo llega vacío (solo #EXTM3U), el suscriptor no tiene ningún canal con stream asignado: mire el bloque Canales disponibles de su ficha.
Escenario: el reproductor descargó la lista pero no muestra canales¶
- Con el mismo token, componga la dirección IPTV:
https://<dirección de la instalación>/playback/tv/iptv.m3u8?token=<token>. - Compruébela en el navegador: el archivo debe contener direcciones absolutas
http://…/index.m3u8. - El XMLTV no cambia — el suscriptor sigue necesitando el mismo enlace a la guía de programación.
Qué sigue¶
- Vitrina — lo mismo dentro de la aplicación del espectador.
- Guía de programación — de dónde sale el horario del XMLTV.
- Suscriptores — el token de reproducción y los canales disponibles.