EPG para middleware OTT

La guía de programación de la base de datos EPG se entrega a los sistemas externos (descodificadores, aplicaciones y middleware OTT) de dos formas: como documento XMLTV completo mediante un servidor EPG dedicado y como programación diaria de un canal en JSON mediante la API HTTP del nodo.

Entrega de XMLTV

XMLTV lo distribuye un servidor EPG integrado independiente. Se habilita en la pantalla «Servidor EPG» (Servidor EPG): «Habilitar el servidor EPG», el puerto HTTP (43973 por defecto), si es necesario HTTPS con certificado (puerto 43983 por defecto) y el «Nombre de host». La habilitación y la deshabilitación actúan de inmediato, sin reiniciar el servicio; un servidor deshabilitado no abre ni el puerto HTTP ni el HTTPS.

El acceso se concede por cuentas (pestaña «Cuentas» de la pantalla «Ajustes de EPG», Ajustes de EPG): usuario y contraseña, «Conjunto de canales», «Fecha de finalización» de la vigencia, «IP permitida» y el indicador «Pausado». El contenido de la entrega lo determina el conjunto de canales:

  • los conjuntos se crean en la pestaña «Conjuntos de canales»;

  • los canales se incluyen en los conjuntos en la base de datos EPG (Base de datos EPG); un canal puede pertenecer a varios conjuntos;

  • a una cuenta se le asigna un único conjunto — sin él la entrega está vacía;

  • un conjunto asignado a una cuenta no se puede eliminar; al eliminar un conjunto se elimina también su contenido.

El documento está disponible en la ruta /xmltv (y /xmltv.gz — el archivo comprimido); la autorización se realiza mediante HTTP Digest o a través de los parámetros de la consulta. Las horas de los programas se emiten con la zona horaria del canal; en el documento solo se incluyen los eventos actuales y futuros. Si un mismo identificador de canal ha llegado de fuentes distintas, el canal se emite una sola vez y la omisión se comunica en el registro. Desde la versión 2.0.2.418, junto con el canal se omiten también sus programas; antes entraban en el documento con el identificador del canal emitido, junto a sus propios programas, y un programa podía repetirse.

Exportación completa con datos de vinculación

Desde la versión 2.0.2.418, el servidor EPG ofrece también una exportación XMLTV completa para vincular los canales emitidos con la guía de programación: la ruta /xmltv-src (y /xmltv-src.gz — el archivo comprimido). A diferencia de /xmltv, incluye los canales de todas las fuentes (o de las seleccionadas), con los datos por los que un canal se vincula con su fuente:

  • el identificador del canal en la exportación es <fuente>:<canal>; es único aunque el mismo canal esté en varias fuentes;

  • cada canal lleva el número y el nombre de la fuente (src-id, src-name), el identificador propio del canal en el archivo XMLTV (channel-id, la clave de vinculación), el identificador adicional (channel-id2) si está definido, la zona horaria (time-zone) y la hora de fin del último programa (last-stop);

  • todos los nombres e iconos del canal; el canal se emite aunque no tenga programas, y un canal sin nombre recibe como nombre su identificador;

  • las horas de los programas están en UTC (+0000): la zona horaria del canal no se aplica y se transmite como atributo; cada programa lleva todos sus títulos, descripciones, géneros y clasificaciones por edad. Desde la versión 2.0.2.419, el subtítulo del programa (por ejemplo, el título del episodio) se emite como elemento <sub-title> independiente, y <title> va sin él; qué subtítulo se separa se describe más abajo, en Programación diaria en JSON.

Parámetros de la consulta:

  • src — all (por defecto) o números de fuentes separados por comas; 0 es la fuente integrada «importación de flujos». Las fuentes desactivadas y los números desconocidos se omiten;

  • programmes — 1 (por defecto) devuelve canales y programas; 0, solo el catálogo de canales;

  • days-back — 0 (por defecto) devuelve los programas actuales y futuros, como /xmltv; N, a partir de la medianoche UTC de hace N días, pero no más atrás que el plazo de conservación del historial («Conservar historial, días», Configuración de las fuentes).

Un valor de parámetro no válido se rechaza con el código 400. El acceso es por cuentas del servidor EPG, como en /xmltv: una cuenta con el indicador all-channels (en el archivo de configuración o mediante la API; desde la versión 2.0.2.419, el interruptor «Todos los canales en /xmltv-src», Ajustes de EPG) recibe todos los canales de las fuentes seleccionadas; las demás, solo los canales de su conjunto. Una consulta desde el propio nodo (desde una dirección local) recibe todos los canales sin cuenta, solo en esta ruta.

La exportación se genera en el servidor y se guarda en caché hasta que cambian los datos de sus fuentes o la configuración, pero no más de 5 minutos. Una consulta repetida del mismo contenido con la cabecera If-None-Match recibe la respuesta 304. Una exportación grande con días pasados tarda minutos en generarse; a la vez solo se genera una exportación con programas y las demás esperan. Si la exportación no puede generarse ahora (el servicio se está deteniendo, se está eliminando una fuente, la cola está ocupada), el servidor responde 503 con la cabecera Retry-After: 30. El formato de /xmltv no cambia.

Programación diaria en JSON

Para las interfaces de middleware el nodo devuelve la programación de un canal correspondiente a un día con una sola consulta a la API HTTP en formato JSON (la autorización es la misma que para el resto de las consultas de la API):

GET /data/epg/channel?src=<fuente>&ch=<canal>&lang=<idioma>&t=<hora>

Se devuelve la lista de los eventos del día (en UTC) en el que se sitúa la hora t: inicio, fin, título y descripción de cada programa en el idioma solicitado; si no hay traducción, se utiliza el idioma por defecto y, a continuación, cualquiera de los disponibles. Desde la versión 2.0.2.418, un programa con clasificación por edad la lleva también, como objeto rating: age (la edad en años, 16 para la clasificación 16+, 0 para 0+) y system (el sistema de clasificación del archivo XMLTV o el código de país DVB, si se conoce). La clasificación se toma del elemento <rating> del archivo XMLTV o de la clasificación parental de DVB EIT; si un programa tiene varias, se devuelve la edad más alta. Un programa sin clasificación no tiene este objeto.

Desde la versión 2.0.2.419, el subtítulo del programa (el elemento <sub-title> del archivo XMLTV, por ejemplo el título del episodio) se devuelve en un campo sub independiente, en el idioma del título, y title ya no incluye el subtítulo. Hasta la versión 2.0.2.418 inclusive, el subtítulo se añadía al título: Noticias. Episodio 1. Un programa sin subtítulo no tiene el campo sub.

Solo se devuelve por separado el subtítulo en el idioma del título o sin idioma indicado. Un subtítulo en otro idioma (por ejemplo, uno en inglés bajo un título en ruso) se sigue añadiendo al título y no tiene campo propio. Si un programa tiene dos subtítulos —uno en el idioma del título y, a continuación, uno extranjero—, el campo independiente contiene ambos unidos por un punto: A. B.

La entrega habitual /xmltv, el EIT de salida y la interfaz web siguen mostrando el título junto con el subtítulo. Tras actualizar el nodo, la base de datos EPG se amplía en el sitio, sin pérdida de datos; los subtítulos aparecen tras la siguiente actualización de cada fuente.

Un día vacío es una lista vacía válida. El servidor almacena las respuestas en caché y las actualiza automáticamente cuando llegan nuevos datos de EPG.

La caché integrada está dimensionada para aproximadamente mil clientes simultáneos; en instalaciones mayores se recomienda situar tanto la entrega de XMLTV como la de JSON detrás de un proxy inverso con caché o de una CDN.

La reproducción del archivo DVR a partir de un evento de la guía de programación (parámetro epg en la URL de reproducción) se describe en Reproducción del archivo (VOD).