Skip to content

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>
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 está en https://tv.example.com/playback/tv/playlist.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-id es 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-chno es 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.

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 lo construye el propio reproductor con los límites del programa que trae el XMLTV. 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.

Escenario: entregar al suscriptor el enlace de la lista

  1. Abra la ficha del suscriptor y copie el campo Token de reproducción.
  2. Componga la dirección: https://<dirección de la instalación>/playback/tv/playlist.m3u8?token=<token>.
  3. Compruébela en el navegador: debe descargarse un archivo de texto que empieza por #EXTM3U.
  4. 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.

Qué sigue