"Después del juego es antes del juego"
Sepp Herberger

Mostrando entradas con la etiqueta tv. Mostrar todas las entradas
Mostrando entradas con la etiqueta tv. Mostrar todas las entradas

miércoles, 22 de mayo de 2019

TVHeadend: configuración y uso (II)

Seguimos con el Tvheadend. Después de instalarlo, configurarlo y conectarlo a varios streams de IPTV para jugar con ellos, en este post vamos a ver como configurarlo con una tarjeta de TV física.

1. Hardware.

Para ello usaremos una tarjeta TDT PCI. En su día ya estuvimos lidiando con otra parecida. Identifiquemos la tarjeta:
# lspci -nnvv

04:01.0 Multimedia controller [0480]: Philips Semiconductors SAA7134/SAA7135HL Video Broadcast Decoder [1131:7134] (rev 01)
 Subsystem: Creatix Polymedia GmbH Medion 7134 [16be:0003]
 Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
 Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
 Latency: 64 (21000ns min, 8000ns max)
 Interrupt: pin A routed to IRQ 16
 Region 0: Memory at febffc00 (32-bit, non-prefetchable) [size=1K]
 Capabilities: [40] Power Management version 1
  Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
  Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME-
 Kernel driver in use: saa7134
 Kernel modules: saa7134
La carga del driver la he configurado así:
# cat /etc/modprobe.d/saa7134.conf 
options saa7134 card=12 alsa=1
install saa7134 /sbin/modprobe --ignore-install saa7134; /sbin/modprobe saa7134-dvb ; /sbin/modprobe tuner ; /sbin/modprobe tda9887
En el arranque, el syslog recoge estos mensajes de detección:
# dmesg |grep saa
[   13.906748] saa7134: saa7130/34: v4l2 driver version 0, 2, 17 loaded
[   13.906963] saa7134: saa7134[0]: found at 0000:04:01.0, rev: 1, irq: 16, latency: 64, mmio: 0xfebffc00
[   13.906971] saa7134: saa7134[0]: subsystem: 16be:0003, board: Medion 7134 [card=12,insmod option]
[   13.906999] saa7134: saa7134[0]: board init: gpio is 0
[   14.076684] saa7134: i2c eeprom 00: be 16 03 00 54 20 1c 00 43 43 a9 1c 55 d2 b2 92
[   14.076688] saa7134: i2c eeprom 10: 00 ff 86 0f ff 20 ff 00 01 50 32 79 01 3c ca 50
[   14.076690] saa7134: i2c eeprom 20: 01 40 01 02 02 03 01 00 06 ff 00 1f 02 51 96 2b
[   14.076692] saa7134: i2c eeprom 30: a7 58 7a 1f 03 8e 84 5e da 7a 04 b3 05 87 b2 3c
[   14.076694] saa7134: i2c eeprom 40: ff 1d 00 c2 86 10 01 01 00 00 fd 79 44 9f c2 8f
[   14.076696] saa7134: i2c eeprom 50: ff ff ff ff ff ff 06 06 0f 00 0f 00 0f 00 0f 00
[   14.076698] saa7134: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076701] saa7134: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076703] saa7134: i2c eeprom 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076705] saa7134: i2c eeprom 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076707] saa7134: i2c eeprom a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076709] saa7134: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076711] saa7134: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076714] saa7134: i2c eeprom d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076716] saa7134: i2c eeprom e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.076718] saa7134: i2c eeprom f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   14.106696] saa7134: saa7134[0] Board has DVB-T
[   14.106700] saa7134: saa7134[0] Tuner type is 63
[   14.513476] saa7134: saa7134[0]: registered device video0 [v4l2]
[   14.513564] saa7134: saa7134[0]: registered device vbi0
[   14.513639] saa7134: saa7134[0]: registered device radio0
[   14.609062] saa7134_dvb: dvb_init() allocating 1 frontend
[   14.706705] DVB: registering new adapter (saa7134[0])
[   14.706713] saa7134 0000:04:01.0: DVB: registering adapter 0 frontend 0 (Philips TDA10046H DVB-T)...
[   17.115786] saa7134_alsa: saa7134 ALSA driver for DMA sound loaded
[   17.115822] saa7134_alsa: saa7134[0]/alsa: saa7134[0] at 0xfebffc00 irq 16 registered as card -1
[   30.560105] saa7134 0000:04:01.0: DVB: adapter 0 frontend 0 frequency 0 out of range (51000000..858000000)
Y puesto que el driver está bien configurado, crea los dispositivos adecuados en /dev:
# ls -l /dev/dvb/adapter0/*
crw-rw----+ 1 root video 212, 4 may 15 16:49 /dev/dvb/adapter0/demux0
crw-rw----+ 1 root video 212, 5 may 15 16:49 /dev/dvb/adapter0/dvr0
crw-rw----+ 1 root video 212, 3 may 15 16:49 /dev/dvb/adapter0/frontend0
crw-rw----+ 1 root video 212, 7 may 15 16:49 /dev/dvb/adapter0/net0

2. Canales TDT.

Cada zona de España tiene sus propios canales TDT en función del repetidor. Por tanto, según sea nuestra ubicación geográfica debemos conocer que frecuencias se utilizan y qué canales hay disponibles dentro de cada frecuencia. Esto se puede consultar en la página http://www.tdt1.com, donde aparece la información tal que así:


Para no tener que meter las frecuencias a mano, todos los programas de manejo de la TDT (vlc, kaffeine, Tvheadend, ...) cuentan con algún script o fichero de configuración donde vienen las frecuencias de nuestra zona. En el caso de Tvheadend la ubicación de estos ficheros es:
# ls /usr/share/tvheadend/data/dvb-scan/dvb-t/es-*
/usr/share/tvheadend/data/dvb-scan/dvb-t/es-Alava
/usr/share/tvheadend/data/dvb-scan/dvb-t/es-Albacete
/usr/share/tvheadend/data/dvb-scan/dvb-t/es-Alfabia
/usr/share/tvheadend/data/dvb-scan/dvb-t/es-Alicante
...
Como a veces el gobierno reubica las frecuencias con el fin de hacer sitio para la telefonía móvil puede suceder que estos ficheros anteriores estén obsoletos. Afortunadamente hay gente que pone en github un repositorio con ficheros actualizados. Por tanto no está mal comparar el fichero correspondiente a nuestra zona con el del repositorio y actualizarlo si fuese necesario.

3. Configuración de Tvheadend.

Una vez pinchada la tarjeta y arrancado el PC, esta aparece en la configuración de Tvheadend al entrar por su interface web:


A partir de aquí, la secuencia de pasos es bastante parecida a lo hecho en el post anterior:

  • Creamos una red para la TDT: Configuration->DVB Inputs->Networks->Add Network->DVB-T Network (el nombre técnico real de la TDT es "DVB-T"):


    En el formulario seleccionamos "Enabled", damos nombre a la red ("TDT"), y en "Pre-defined muxes" elegimos el fichero de configuración de frecuencias TDT correspondiente a nuestra zona (la que vimos en el apartado previo - en mi caso es "es-Carceres". No es un error: hace años alguien lo escribió mal y la errata se ha perpetuado):


    Al dar a "Create" se crea la red y los muxes asociados a las frecuencias definidas en el fichero de configuración asociado.
  • Ahora hay que vincular la tarjeta de TV y la red, ya que si no Tvheadend no sabe dónde sintonizar las frecuencias definidas para los muxes recién creados. Para ello vamos a Configuration->DVB Inputs->TV Adapters y pinchamos sobre la tarjeta de TV. Aparecerá un formulario para la configuración de la misma. Allí nos aseguramos de que "Enabled" y "Over-the-air EPG" estén activados. En el desplegable "Networks" seleccionamos "TDT", que es la red creada en el paso anterior. Al dar al botón "Save" se guardan y aplican los cambios.

  • Muxes y servicios: ahora los muxes encuentran un "origen" de señal y empiezan a sintonizar los canales. En Configuration->DVB Inputs->Muxes nos aparece la lista de muxes, uno asociado a cada frecuencia (expresada en MHz):


    Dentro de cada mux/frecuencia hay varios canales multiplexados. Esos canales deberían aparecer en la pestaña Configuration->DVB Inputs->Services:


    Nota: en el caso de que no aparezcan los servicios de forma automática podemos volver a la pestaña Muxes y darle al reproductor de cada mux (botón de la columna más a la izquierda que muestra la etiqueta "Play this stream"), eso descarga un fichero con un stream que se abrirá en vlc y mostrará uno de los canales del mux. Al hacer esto se fuerza la detección de los canales y la creación de los servicios correspondientes.

  • Mapeo de los servicios en canales de Tvheadend: una vez tenemos cada uno de los canales de TDT sintonizados metido como servicio en Tvheadend es el momento de decidir que canal queremos que se converta en un canal de Tvheadend.

    Recordemos que Tvheadend distingue entre servicio (un stream de vídeo entrante) y canal (canal de Tvheadend que aparecerá en el interface web, las aplicaciones cliente android y sobre el que podremos programar grabaciones). De esta manera podemos ignorar los canales entrantes que no nos interesen y configurar solo unos cuantos de ellos de cara al usuario final.

    Esto lo hacemos en Configuration->DVB Inputs->Services->Map Selected, que permite mapear los servicios que queramos en canales:


    Una vez mapeado, si nos vamos a Channel EPG->Channel podremos ver el canal recién creado:

    Con esto dicho canal ya estará disponible en los clientes Tvheadend y sobre el podremos programar grabaciones y timeshifts. A partir de aquí sólo tendremos que repetir esto con todos los canales que nos interese tener.

4. Enlaces.

Para escribir este post he tenido que buscar la información en varias fuentes muy interesantes donde se hablan tanto de sintonización TDT como satélite, así que pongo los enlaces usados por si quisieramos ampliar:

Veamos esta foto:


La sonda lunar del Estado Nación Judío de Israel se hace un selfie un ratito antes de estrellarse violentamente contra la Luna, en lugar de aterrizar suavemente. Quizá lo confundió con la franja de Gaza.

martes, 12 de marzo de 2019

TVHeadend: configuración y uso (I)


Aquí conté mi interés por ver y grabar determinados programas de TV desde el PC. Esta era una forma artesanal de hacerlo, pero investigando al respecto he hallado una joyita llamada TVHeadend. Aviso de que este post es un tocho con el resumen de lo que he ido montando en las últimas semanas.

1. ¿Qué es TVHeadend?

TVHeadend es una aplicación servidor gestionada por un interface web que puede recibir streams de vídeo de diferentes fuentes:

  • Streams de IPTV por Internet.
  • Señal de TDT recibida por una tarjeta de TDT PCI/USB.
  • Señal de TV analógica recibida por una tarjeta de TV PCI/USB.
  • Señal de TV por satélite recibida mediante una tarjeta SAT PCI/USB.
  • Señal de televisión por cable.
  • Otras emisiones de TV más exóticas

Una vez configurados los streams de vídeo (que se corresponderían con los canales de TV), TVHeadend nos permite:

  • Grabarlos en un dispositivo de almacenamiento, funcionando como un PVR.
  • Retransmitirlos a otros puntos de nuestra red o a Internet.
  • Transcodificarlos a otro formato de vídeo.

La versión de TVHeadend que he usado es la 4.3, que aunque es una versión beta funciona razonablemente bien.

2. Instalación.

Yo lo instalé en un PC que tengo encendido 24/7, pero la mayoría de la gente opta por hacerlo en una Raspberry Pi u otro minipc con un disco externo conectado si desea grabar contenidos. Es el tipo de PC ideal para estos casos, aunque hay incluso una solución todavía mas austera usando OpenWrt.

En mi caso, con Manjaro la instalación es tan sencilla como hacer:
# yaourt -S tvheadend-git
Para Debian/Ubuntu los pasos son igualmente sencillos.

Una vez instalada y arrancada como servicio con
# systemctl restart tvheadend.service
Queda escuchando en el puerto 9981 de la máquina donde está instalado. Accederemos a él desde el navegador web con http://ip:9981.


La primera vez que entramos salta un asistente que nos permite configurar el idioma del interface, la lengua preferida para los canales, nos hace crear un usuario administrador y un usuario raso y, si tenemos un sintonizador de TV instalado, detectar los canales. Como en mi caso no tenía sintonizador pues me salté esta última parte.

Una vez configurado el asistente en mi caso tuve un pequeño problema: no me permitía entrar con los usuarios creados anteriormente. Mirando en Internet comentaban verificar si el programa estaba lanzándose con el parámetro "-C", para ello tuve que mirar el fichero .service:

# cat /usr/lib/systemd/system/tvheadend.service 
[Unit]
Description=Tvheadend - a TV streaming server and DVR
After=syslog.target network.target auditd.service

[Service]
EnvironmentFile=/etc/conf.d/tvheadend
ExecStart=/usr/bin/tvheadend -f -p /var/run/tvheadend.pid $OPTIONS
PIDFile=/var/run/tvheadend.pid
Type=forking
Restart=on-failure
RestartSec=54s

# To enable watchdog functionality, uncomment these, remove Type=forking
# and compile with --enable-libsystemd_daemon
#Type=notify
#WatchdogSec=1m
#TimeoutStartSec=5m
#TimeoutStopSec=20

[Install]
WantedBy=multi-user.target
Examinando este fichero determino que la configuración se toma de /etc/conf.d/tvheadend. Allí se define la variable OPTIONS con todos los parámetros usados para levantar el proceso. Entre ellos no estaba "-C", así que lo añado:
# cat /etc/conf.d/tvheadend 
# Configuration file for the tvheadend service.

MALLOC_ARENA_MAX=4
OPTIONS="-u hts -g video -6 --http_port 9981 --htsp_port 9982 -C"
Y luego reinicio el servicio. Despues de esto ya si podía conectarme al interface web con los usuarios creados.

3. Configuración de un stream de vídeo IPTV de entrada.

Como no tengo tarjetas de TV de ningún tipo (vamos, que no me han llegado de Aliexpress) vamos a configurar como fuente una emisión de IPTV. Ya comenté que el mejor sitio para los canales de TV española es éste, ya que se actualiza a menudo (por algún extraño motivo que se me escapa, las cadenas de TV privadas cambian con cierta frecuencia la URL para acceder a sus streamings de vídeo) y está muy ordenadio.

Cogemos la URL de Canal Extremadura:
http://hlstv.canalextremadura.es/livetv/multistream.smil/playlist.m3u8.
Para ver si funciona, nada mas sencillo que hacer:
# vlc http://hlstv.canalextremadura.es/livetv/multistream.smil/playlist.m3u8
Entramos en el interface web, en Configuration->DVB Inputs->Networks y creamos una red de tipo IPTV:


A continuación vamos a Configuration->DVB Inputs->Muxes y añadimos un mux. Nos preguntará en que red y diremos que en la creada en el paso anterior. Luego nos sale el formulario:


Debemos rellenar el campo URL con:
pipe:///usr/bin/ffmpeg -i http://hlstv.canalextremadura.es/livetv/multistream.smil/playlist.m3u8
-vcodec copy -acodec copy -f mpegts pipe:1
En negrita pongo la URL original de acceso a Canal Extremadura online. Con eso construimos una URL de TVHeadend en la que se define el comando que leerá ese streaming.

En Mux name y Service name ponemos "canal-extremadura". Guardamos el mux y esperamos un rato:


Cuando en la columna "Scan result" aparece un OK quiere decir que ha conectado con el streaming. Ahora nos vamos a Configuration->DVB Inputs->Services y vemos que se ha creado un "Servicio" para el streaming:


Ya casi estamos. Nos vamos a Configuration/Channel-EPG/Channel y añadimos el canal:


Completando los campos Name con "canal-extremadura" y Services con el servicio creado anteriormente. Con esto aparece el canal en la lista:


Dando al icono de "Play" de la parte izquierda de la lista se descarga un fichero que al abrirlo lanza el vlc y comienza a visualizarse el canal:


Con esto ya tenemos dado de alta un canal como entrada para TVHeadend. Para dar de alta el resto de canales se procedería igual, incluyendo aquí los canales de TV de pago si disponemos de las URL adecuadas para configurarlos. En Internet hay información de sobra sobre como configurar Movistar+, Canal Satélite, etc con TVHeadend.

4. Clientes TVHeadend.

Una vez tenemos los canales configurados la primera utilidad es poder redirigirlos a otros dispositivos dentro de nuestra red o incluso hacia fuera (por ejemplo, podríamos ver Canal Extremadura en Bulgaria o Movistar+ en la casa del pueblo). Para poder verlos simplemente vale con poner en un navegador "https://ip:9981", validarse (es conveniente usar un usuario no administrador de TVHeadend para poder ver canales) y podremos visualizar los canales configurados.

Pero hay alternativas bastante más elegantes, comentamos algunas:

  • Android: para dispositivos Android hay varias aplicaciones, como TVHClient, TVH Client y muchas más. En general es tan sencillo como dar la IP, el puerto y el usuario/contraseña y la aplicación nos permitirá ver los canales en el móvil
  • Kodi: si tenemos Kodi 18 o superior existe un addon muy potente (más que las aplicaciones Android) llamado "TVHeadend HTSP Client". Se configura rápidamente y tenemos acceso sencillo a muchas funcionalidades. Al ser Kodi multiplataforma podemos instalarlo en casi todos los sistemas operativos.
  • Aparte existen clientes para otros sistemas que funcionan con mayor o menor fortuna.

Mi recomendación es instalar Kodi y el complemento en los PC, tablets y Android Box, y una aplicación Android en los móviles. El addon se integra totalmente en Kodi, como podemos ver:


Si queremos emitir los canales hacia Internet sencillamente bastará con abrir los puertos 9981 y 9982 desde el router y darnos de alta en un servicio de DNS, como se haría para cualquier servicio que queramos ofrecer desde nuestro PC hacia el exterior (por ejemplo, para cámaras de vigilancia, clientes de descarga, servidores web, etc).

5. Cosas que se pueden hacer con el stream de entrada.

Parece que lo único que se puede hacer con el stream de entrada es verlo, pero no es así. Las posibilidades que nos ofrece TVHeadend son muchas más. Podemos:

  • Recodificar: los streams suelen venir en formato H.264 o similar, que son bastante pesados. Puede resultar interesante transcodificar al vuelo a otro formato de de vídeo antes de retransmitirlo. No he estudiado esta vía, así que poco puedo decir al respecto, solo que en Configuration/Stream/Stream Profiles hay diversos perfiles de codificación.
  • Grabar: esta parte es muy interesante para mi. Podemos realizar grabaciones de varios tipos desde la opción Digital Video Recording. Las distintas pestañas son:

    Upcoming/Current Recordings: permite ver las grabaciones pendientes y programar una grabación puntual de un canal en una fecha y hora concreta.


    Timers: permite programar una grabación periódica a unas horas fijas en determinados días de la semana.


    Autorecs: permite programar grabaciones "inteligentes" por distintos criterios (título de programa, intervalo de fecha, etc).


    Finished Recordings
    : permite visualizar, eliminar, descargar, etc las grabaciones que han finalizado. Adicionalmente si usamos el cliente Kodi podemos ver, avanzar y retroceder libremente por las grabaciones que se están efectuando en ese mismo momento.

    Failed Recordings: vemos las grabaciones que han fallado por el motivo que sea.

    Removed Recordings: grabaciones que han sido borradas.

    Todas las grabaciones van por defecto al directorio /home/hts de la máquina donde está TVHeadend (siendo hts el usuario creado en la instalación del programa). Podemos modificar el directorio destino cuando añadimos la grabación.

    En "Configuration/Recordings/Digital Video Recorder Profiles" podemos configurar muchos parámetros sobre como se realizarán las grabaciones, tanto de tiempo como de espacio ocupado. A mi me resulta útil "Recorded file(s) retention period" que dice cuantos días se mantendrá por defecto una grabación en el disco duro antes de ser automáticamente eliminada.

  • Timeshift: esta funcionalidad es la que nos permite "parar la TV" cuando estamos viendo un stream y tenemos una interrupción pero queremos seguir luego por donde ibamos. Lo que realmente se hace al parar el stream es iniciar una grabación que luego podemos poner en marcha y por la que queremos desplazarnos. Se activa y configura en Configuration->Recording->Timeshift.


    Una vez activada, con solo pulsar el botón de "Pause" en el cliente durante la reproducción de un stream empieza a funcionar el timeshift.

6. EPG.

Para finalizar veremos como conectar TVHeadend con una EPG para tener accesible la programación de los canales desde el interface web y los clientes. Esto no es en absoluto necesario, simplemente es una pijadita para dejarlo todo bonito.


Desde aquí podemos ver la programación y pulsando sobre el icono izquierdo de cada programa, crear un timer con su grabación:


TVHeadend no tiene un sistema propio para obtener la programación de EPG, pero usa un API bastante sencillo que facilita todo el proceso.

Los datos de EPG están en numerosos portales de Internet, por ejemplo FormulaTV, y en distintos formatos. Para extraer estos datos se usan unos programas llamados EPG Grabber, que conectan con el portal, lo parsean y generan un XML con los datos de programación de los canales durante los próximos días.

Hay muchos EPG Grabber, después de echar un vistazo me he decantado por WebGrab+Plus por su completitud. Todos los EPG que puede acceder están ordenados por paises aquí. De ellos yo he elegido FormulaTV para España, ya que es un portal bastante serio que lleva muchos años funcionando.

En Manjaro se instala y configura fácilmente, como vemos aquí. Una vez instalado hay que configurarlo para que se ejecute mediante crontab y que lea los datos de una de las posibles fuentes. La instalación en Manjaro/Arch se realiza sobre /opt/wg++, teniendo dentro un directorio /opt/wg++/siteini.pack/Spain con todos los grabbers para España.
# cd /opt/wg++/siteini.pack/Spain
# find | grep -i formula
formulatv.com.channels.xml
formulatv.com.ini
Vemos aquí que hay dos ficheros: el .ini contiene las instrucciones y configuración para realizar el parseo, esa parte no nos interesa. El fichero .channels.xml tiene la lista de canales que son leidos por el grabber:
# cat formulatv.com.channels.xml
<?xml version="1.0" encoding="UTF-8"?>
<site generator-info-name="WebGrab+Plus/w MDB &amp; REX Postprocess -- version V1.56.14 -- Jan van Straaten" site="formulatv.com">
 <channels>
  <channel update="i" site="formulatv.com" site_id="la1" xmltv_id="La 1">La 1</channel>
  <channel update="i" site="formulatv.com" site_id="la2" xmltv_id="La 2">La 2</channel>
  <channel update="i" site="formulatv.com" site_id="antena3" xmltv_id="Antena 3 Televisión">Antena 3 Televisión</channel>
  <channel update="i" site="formulatv.com" site_id="cuatro" xmltv_id="Cuatro">Cuatro</channel>
  <channel update="i" site="formulatv.com" site_id="telecinco" xmltv_id="Telecinco">Telecinco</channel>
  <channel update="i" site="formulatv.com" site_id="lasexta" xmltv_id="laSexta">laSexta</channel>
  <channel update="i" site="formulatv.com" site_id="movistar0" xmltv_id="#0">#0</channel>
  ....
  <channel update="i" site="formulatv.com" site_id="canal-extremadura" xmltv_id="Canal Extremadura">Canal Extremadura</channel>
  ....
 </channels>
</site>
Ahora debemos configurar un usuario para ejecutar WebGrab+Plus, en mi caso será con el usuario "hts" (ya creado para TVHeadend). En su home debemos copiar la carpeta "/usr/share/wg++" y programar la ejecución periódica del grabber.
# su hts
$ cp -R /usr/share/wg++ /home/hts/wg++
$ crontab -e
Metemos en el crontab del usuario "hts" la ejecución del grabber todos los días a las 2:15:
15 2 * * * /usr/bin/wg++
Ahora vamos a configurar el Grabber en /home/hts/wg++/WebGrab++.config.xml (como el usuario que ejecuta wg++ es "hts" se buscará en esa ruta).
$ cat /home/hts/wg++/WebGrab++.config.xml
<?xml version="1.0"?>
<settings>

<!-- for detailed info about the settings see http://webgrabplus.com/documentation/configuration/webgrabconfigxml -->

<filename>guide.xml</filename>
<mode></mode>
<postprocess grab="y" run="n">mdb</postprocess>
<user-agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0</user-agent>
<logging>on</logging>
<retry time-out="5">4</retry>
<timespan>2</timespan>
<update>f</update>

<channel update="i" site="formulatv.com" site_id="canal-extremadura" xmltv_id="canal-extremadura">Canal Extremadura</channel>
<channel update="i" site="formulatv.com" site_id="laSexta" xmltv_id="laSexta">laSexta</channel>
<channel update="i" site="formulatv.com" site_id="la1" xmltv_id="La 1">La 1</channel>

</settings>
Sobre la configuración anterior resalto en negrita las partes sensibles:
  • La salida de la ejecución de wg++ se guardará en /home/hts/wg++/guide.xml.
  • En "site" se pone el nombre de la fuente tal y como aparece en el site de formulatv.com.channels.xml.
  • Cada canal se define con un site_id exactamente igual a como aparece en formulatv.com.channels.xml.
  • En "timespan" ponemos el número de días en el futuro a descargar. Lo mejor es empezar probando con 2 y luego ir aumentando. Creo que FormulaTV proporciona hasta 7 días.
Con todo esto ya tenemos un programa que se ejecutará a diario y que parseará el EPG de la fuente y canales definidos en /home/hts/wg++/WebGrab++.config.xml y lo dejará en formato XML en /home/hts/wg++/guide.xml. No hace falta esperar a las 2:15 para saberlo, podemos ejecutar wg++ a mano desde el usuario hts para que se genere el guide.xml y verificar que todo funciona.

Ahora falta la última parte: conectar el guide.xml para que lo lea TVHeadend y lo integre en su interface. En la página de WebGrabPlus se documenta cómo hacerlo interactuar con diferentes softwares, entre ellos TVHeadend.

Básicamente, hay que bajar un script y ponerlo en la ruta "/usr/bin/tb_grab....". Esto hará que TVHeadend lo reconozca automáticamente como un "grabber interno" y lo ejecute de forma periódica y automática para realizar la sincronización. Los pasos para instalarlo son:
$ sudo wget -O /usr/bin/tv_grab_wg++ http://www.webgrabplus.com/sites/default/files/tv_grab_wg.txt
$ sudo chmod +x /usr/bin/tv_grab_wg++
Después hay que modificar el script para decirle donde está el guide.xml:
$ cat /usr/bin/tv_grab_wg++ 
#!/bin/bash
#xmltv_file_location=~/.wg++/guide.xml
xmltv_file_location=/home/hts/wg++/guide.xml
dflag=
vflag=
...
...
Al ejecutarse desde el servicio TVHeadend el script /usr/bin/tv_grab_wg++ procesará guide.xml y generará unos datos EPG que se insertarán en el formato interno de TVHeadend, del cual desconocemos los detalles. Una cosa muy importante ya comentada en el enlace indicado anteriormente es que el nombre del canal en wg++ debe coincidir con el nombre del canal en TVHeadend. En este caso "canal-extremadura" debe ser igual en ambos sitios, ya que si no es así no podrá establecerse una relación directa entre canal de TVHeadend y canal obtenido de la EPG, y por tanto TVHeadend no podrá mostrar la programación aún cuando esté ahí.

El siguiente paso es activar el grabber en TVHeadend. Para ello iremos a Configuration->Channel/EPG y a las pestaña EPG Grabber Modules(1) activando en la lista que se muestra allí el grabber tv_grab_wg++ y ejecutando luego "Rerun Internal EPG Grabbers" para que se aplique de forma inmediata.


En las pestañas EPG Grabber Channels y Channels revisaremos que está la conexión entre los canales EPG y los canales de TVHeadend.



En la pestaña EPG Grabber podemos configurar ciertos aspectos de ejecución del grabber, como las horas de ejecución y la actualización de diversos datos.


(1) Aquí me he encontrado con un problema que me hizo perder un par de días: en el interface web no se veían las pestañas EPG Grabber Modules y EPG Grabber Channels en Configuration->Channel/EPG. Por tanto no podía activar el grabber interno. Tras mucho probar encontré en este enlace la causa: es un bug del interface web de TVHeadend, que oculta esas pestañas por defecto si no estás en modo de interface "Expert". La solución consiste en cambiar el modo de visualización general de Basic a Expert en General->Base->Default View Level. De esta manera ya aparecen ambas pestañas y podemos configurar el grabber.


Bueno, una vez hecho esto ya tenemos la EPG con los títulos y horas de los programas disponible en todos los interfaces y clientes de TVHeadend y doy por concluido el artículo. De momento no me interesa tocar más hasta que no reciba el adaptador USB de DVB.

7. Enlaces y ampliación.

Unos cuantos enlaces que me han servido de guía y en los que hay más información para seguir profundizando:


Dos fotos llenas de significado:



Son dos imágenes tomadas por el orbitador LRO de la Nasa de la sonda Chang'e 4 de China en la cara oculta de la Luna. Los americanos demostrando que los chinos han llegado a la Luna. En el año del 50 aniversario de alunizaje del Apolo XI estos gestos son muy importantes.

Siempre algún conspiranoico podrá decir que todo esto es CGI, pero junto con la Queqiao se lanzó un microsatelite Longjiang-2 que está realizando fotos y pueden ser descargadas desde la Tierra por cualquier radioaficionado con el equipo adecuado que apunte a Lagrange-2 en las frecuencias 435.400 y 436.400 MHz. Ahora vas y lo cascas.