AverTV DVB-T Super 007 en Linux

Muchas lágrimas me ha costado montarme un mediacenter a mi gusto. Una de las responsables ha sido la tarjeta capturadora (baratilla) que tengo: Avermedia DVB-T Super 007.
Por si alguien tiene los mismos problemas que yo, dos cosas importantes:

  • Es necesario cargar un firmware para la capturadora durante el arranque. En Ubuntu, esto se consigue instalando el paquete linux-firmware-nonfree.
  • El módulo de la capturadora tiene un bug: si un programa intenta acceder a ella antes de que se haya cargado el firmware, no podrá y la capturadora se quedará 'tonta' hasta que no vuelvas a reiniciar el ordenador. En mi caso, uso tvheadend y este arranca al inicio, jodiendo el tema. En mi caso para solucionarlo he desactivado el arranque automático y en su lugar lo he sustituido por un script en bash que comprueba que se ha cargado el firmware correctamente y entonces lanza tvheadend. Para ello sigue los siguientes pasos:
Desactiva el servicio en el arranque con esta instrucción
# update-rc.d -f apache2 remove

Crea el siguiente script, yo lo he puesto en /opt/tvheadend.sh
#!/bin/bash
# Ejecutar tvheadend SOLO despues de haber cargado el firmware en la
# en la tarjeta de video
regex="tda1004x: found firmware revision .. -- ok"
for i in 1 2 3 4 5
do
        a=$(dmesg)
        if [[ $a =~ $regex ]]
        then
                echo "Firmware loaded. Booting tvheadend..."
                /usr/bin/tvheadend -f -u hts -g video
                exit 0
        fi
        echo "Firmware not loaded. Waiting 1 sec."
        $(sleep 5)
done
echo "Firmware not loaded."
exit 0
Si usas una distribución distinta, o un backend de TV distinto a tvheadend, simplemente tienes que cambiar la linea "/usr/bin/tvheadend -f -u hts -g video" por el comando necesario para arrancar el backend.
Luego tienes que hacer que el script sea ejecutable:
chmod +x /opt/tvheadend.sh
Y por último, se ha de llamar a este script en el arranque, por lo que has de añadirlo al archivo /etc/rc.local, que podría quedar así:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/opt/tvheadend.sh
exit 0
Volviendo a arrancar, tvheadend  podrá acceder a la capturadora sin problemas.