Presentación

Presentación

Mi trabajo y mis hobbies están muy relacionados con el uso de dispositivos electrónicos de todo tipo, así que suelo apuntarme en ficheros Le...

miércoles, 7 de agosto de 2019

IPTV, Tvheadend, Synology, Canales Españoles en Kodi

Aunque la plataforma utilizada en este tutorial es un NAS de Synology, muchos de los pasos enumerados aquí pueden ser útiles en otros NAS y en ordenadores con Linux (como la Raspberry Pi). En este tutorial se presentan algunas pautas para no fracasar en el intento de instalar Tvheadend en un NAS de Synology, y de esta manera poder ver y grabar los canales TDT españoles mediante IPTV. La idea es que el NAS, o el ordenador donde se instale TvHeadend, se encargue de las grabaciones y dar servicio de TV mediante streaming a cualquier cliente, como por ejemplo Kodi, instalado en cualquier plataforma,

Instalación de Tvheadend en el NAS

La web oficial de Tvheadend es https://tvheadend.org/ pero para el NAS de Synology ya hay un paquete oficial preparado para ello, por lo que basta con it al centro de paquetes, buscar tvheadend, apretar un botón para instalarlo y ya lo tenemos. En otras plataformas, siempre basadas en Linux, tendremos que bajar el paquete de instalación e instalarlo, si es que no está disponible directametne en el repositorio de la distribución. A continuación se describe cómo instalar la lista de canales españoles en tvheadend, una vez instalado en la plataforma.

Canales Españoles IPTV

Desde hace algún tiempo hay un equipo de entusiastas de la TV que mantienen y actualizan una lista de enlaces IPTV de las emisoras que emiten en abierto a través de la red. Según comentan, estos enlaces son legales pues son los que ofrecen las propias compañías. Los listados se ofrecen en varios formatos y se encuentran en https://github.com/LaQuay/TDTChannels

A nosotros nos interesa el listado de canales IPTV en formato m3u8 que se encuentra en http://www.tdtchannels.com/lists/channels.m3u8

El procedimiento habitual para incorporar una lista IPTV a Tvheadend consiste en importar directamente la lista de canales anterior, sin embargo, muchos canales no funcionarán y los que funcionen puede que empiecen en el pasado. Para evitarlo, es necesario transcodificar los canales para que pueda entenderlos tvheadend.

Transcodificación previa

Si piensas que tvheadend va a entender los codecs de la lista de programas, puedes saltarte este paso e importar la lista directamente tal como se explica en el apartado posterior. Igual en Linux funciona sin transcodificar, o quizá funcione con la última versión de tvheadend, pero en el NAS de synology y con la versión de tvheadend de 2019, era necesario transcodificar.

La transcodificación se realiza mediante ffmpeg. Suponiendo que tenemos ffmpeg instalado (ver el correspondiente subapartado más adelante) debemos modificar el listado original de la siguiente manera:
  • Descargamos el listado de canales a partir del enlace de arriba y lo guardamos en local.
  • Lo abrimos con un editor de texto y veremos que hay dos lineas por cada canal, la primera empieza por #EXTINF y contiene parámetros que describen el canal. No lo tocaremos salvo que queramos cambiar algo sabiendo lo que hacemos.
  • La segunda línea es una url sin más y esta línea es la que deberemos cambiar. Suponiendo que en la linea había algo como
    • https://unacosa.ejemplo.es/ejemplolist.m3u8
  • lo cambiaremos por
    • pipe:///usr/local/ffmpeg/bin/ffmpeg -i https://unacosa.ejemplo.es/ejemplolist.m3u8  -c copy -f mpegts pipe:1
  • Estamos suponiendo que el ejecutable ffmpeg se encuentra en /usr/local/ffmpeg/bin/ffmpeg que es lo habitual en el NAS de synology, pero que puede ser otra cosa en otro sistema.
  • Esta acción se repetirá para cada canal que sepamos que falla y que necesita un codec especial.
  • Una vez se tiene el nuevo listado, se puede incorporar a Tvheadend tal como se describe en el siguiente apartado, para ello habría que subir dicho fichero a un servidor web y poner la url correspondiente.
  • Otra opción consiste en copiar dicho fichero a un directorio compartido del NAS, en cuyo caso especificaremos el path (camino) completo a dicho fichero. Si el directorio compartido se llama por ejemplo "prueba" y el fichero de canales "canales.m3u8" el camino completo suele ser /volume1/prueba/canales.m3u8 aunque puede variar según la configuración del NAS. En otros sistemas podremos poner ese fichero en algún sitio del sistema con permisos de lectura.
Aunque algunos canales no necesitan transcodificarse, resulta conveniente hacerlo pues Tvheadend parece que tiene un bug y empieza a reproducir los streams donde le parece en lugar del punto en directo. Si estos canales se filtran con ffmpeg, este problema desaparece.

Importación de la lista en tvheadend (transcodificada o no)

Este procedimiento es el común para importar cualquier lista IPTV a Tvheadend, tanto si se utiliza transcodificación como si no.

El listado se puede incorporar a Tvheadend de la siguiente manera:
  • Vamos a Configuration > DVB Inputs > Networks y pulsamos sobre el icono +Add
  • En el primer formulario ponemos "IPTV Automatic Network"
  • En el segundo formulario solo tenemos que poner un nombre a la red (Network name, el que queramos) y en la URL pegamos la dirección donde se encuentra el listado de canales (puede ser una dirección web o un camino al sistema de ficheros local). El resto de opciones las podemos dejar como vienen.
  • Pulsamos en +Create y se creará el canal.
  • Una vez creado el canal veremos que nos aparecen varios muxes (uno por canal) y una vez hagamos el mapeo tendremos los servicios, que son los canales que finalmente veremos en nuestro cliente.
Una vez se tienen los servicios (puede tardar un rato, paciencia) ya se tiene acceso a los canales que funcionen desde un cliente. Lo normal es acceder desde Kodi, para ello hay que instalar en Kodi el plugin correspondiente a tvheadend (no viene instalado por defecto, pero está en el repo oficial dentro del grupo PVR o video).

La guía de programa, EPG, habrá que instalarla tal como se describe en el apartado correspondiente más adelante.

Instalación ffmpeg en Synology NAS

Es posible que haya un ffmpeg ya instalado en el NAS e incluso esté en el path, pero lo normal es que esté anticuado y no funcione bien, por lo que se recomienda instalar un paquete específico de ffmpeg con el gestor de paquetes del NAS.

El paquete ffmpeg es de la comunidad, por lo que debemos incluir el repositorio de la comunidad y permitir fuentes de terceros en el gestor de paquetes. Todo esto se explica en https://costigator.com/system-administration/how-to-enable-dts-support-on-synology/

En otros sistemas basados en Linux debería ser muy sencillo instalar la última versión de ffmpeg desde el propio gestor de paquetes de la distribución.

Canales GEO y no GEO (Geolocalizados)

En la siguiente dirección se encuentran las dudas resueltas sobre estos dos tipos de enlaces: https://github.com/LaQuay/TDTChannels/wiki/FAQs#diferencia-entre-una-emisi%C3%B3n-geo-y-no-geo

Lo siguiente es lo que observé en su momento respecto de este tema, pero seguramente está anticuado respecto de lo que viene en el enlace anterior: Para varios canales se puede observar que existen dos versiones, una geo y otra sin geo. La geolocalización le permite a los distribuidores poder lanzar contenidos que están licenciados en una región bloqueando el acceso a las regiones para las cuales no tienen permiso de emisión . Por lo que he visto hasta ahora, parece que los que no tienen "geo" ofrecen más contenido que los otros y en directo, pero me parece que no siempre es así. También he visto que para algunos canales, sólo funcionan los geo, pero en este caso los contenidos sí que se ven en directo. Si estamos en España no deberíamos tener problema en acceder a todos los contenidos, probablemente a través del canal sin "geo".

Guía de Televisión (EPG, Electronic Program guide)

Una vez tenemos los canales funcionando resulta imprescindible añadir la guía de programación (EPG). Esto nos va a permitir poder grabar programas a partir de la guía.

En la misma web donde hemos conseguido la lista de canales, también ponen a disposición una guía de canales en xml que Tvheadend puede importar. Esta guía la actualizan al menos una vez al día. El procedimiento está basado en lo que pone en https://github.com/nurtext/tv_grab_file_synology y aunque es específico para synology, puede servir probablemente para cualquier sistema Linux:
  • Bajamos el fichero  https://raw.githubusercontent.com/nurtext/tv_grab_file_synology/master/src/remote/tv_grab_file y lo guardamos en como tv_grab_file
  • Modificamos la url de ejemplo que viene (http://example.com/path/to/epg.xml) y la sustituimos por la url de la guía que queremos incorporar (https://raw.githubusercontent.com/HelmerLuzo/TDTChannels_EPG/master/TDTChannels_EPG.xml)
  • Guardamos este fichero en un directorio compartido de nuestro NAS.
  • Entramos en el NAS mediante SSH con un usuario con privilegios de administración y que se pueda hacer pasar por root. (Busca en internet cómo habilitar el acceso ssh al NAS de synology pues no está habilitado por defecto).
  • Como root hay que hacer lo siguiente (suponemos que el directorio compartido se llama "public", se puede cambiar por lo que toque, igual que el camino completo que puede depender de la configuración del NAS):
    • ln -s /volume1/public/tv_grab_file /usr/bin/tv_grab_file
  • Si el enlace simbólico no funciona por alguna razón, se puede copiar directamente el fichero tv_grab_file en /usr/bin pero se recomienda usar el enlace.
  • Posteriormente hay que darle permisos de ejecución y lectura (siempre como root):
    • chmod a+xr /usr/bin/tv_grab_file
  • Ahora hay que reiniciar Tvheadend para que detecte este nuevo fichero. El reinicio se hace desde el gestor de paquetes del NAS, seleccionando el paquete de TVheadend, deteniéndolo y volviéndolo a iniciar.
  • Abrimos Tvheadend y si vamos a Configuration > Channel/EPG > EPG Grabber Modules veremos que hay uno nuevo (o dos) con el nombre "Internal: XMLTV: Remote". Elegiremos el que tiene como Path "/usr/bin/tv_grab_file" y activaremos la casilla de Enable (podemos poner la prioridad a 1 si tenemos otros grabbers y queremos que éste prevalezca).
  • Si no aparece, es posible que haya que reiniciar de nuevo TVheadend; a veces tarda en detectar el tv_grab_file y no lo hace a la primera (también podemos probar a cambiar el enlace por el fichero en sí).
  • Una vez seleccionado el grabber, veremos al poco tiempo que nuestros canales se mapean automáticamente con los de la guía, pero van a pasar varias horas (incluso un día) hasta que veamos contenido en la guía, así que paciencia (reiniciar Tvheadend quizá ayude).
  • Como esta guía de programa ya viene preparada para la lista de canales de TDTChannels, no es necesario hacer un mapeo explícito, aunque la guía en sí va a tardar en aparecer.