7 de junio de 2010

SBTVD en Linux (o mejor dicho, vea el mundial en Ubuntu)

Para muchos no es secreto que trabajé en televisión unos meses. Otros (los menos) saben que mi relación con la televisión viene de familia. Quizás por eso soy tan entusiasta de la TV. Hace un tiempo pedí una tarjeta USB para recibir el nuevo formato de TV Digital aprobado por el gobierno, que es una variación del estándar japonés ISDB-T (conocido también como SBTVD).

Lo genial es que ya hay señales de prueba de TV Digital, tanto en Alta Definición (HD) para televisores normales, como la señal conocida como "1-seg" hecha especialmente para teléfonos móviles (los cuales están empezando a llegar).

Y como por lo general ocurre... el aparato funciona genial en Windows, pero en Linux es un cacho horrendo si no se tiene toda la información. Los "asistentes" no sirven acá, así que compilé un pequeño HOWTO para poder ver TV Digital el mundial en Alta Definición.

Aquí vamos. Lo primero que hay que saber es que este tutorial fue probado usando Ubuntu Lucid Lynx, con el kernel 2.6.32-22. La tarjeta es la GeniaTech S870. Antes hay que bajar algunos paquetes importantes:

sudo apt-get install linux-headers-2.6.32-22-generic linux-source-2.6.32 ncurses-dev mercurial dvb-apps

Luego bajamos y compilamos el driver V4L (Video for Linux):

hg clone http://linuxtv.org/hg/v4l-dvb
cd v4l-dvb
make menuconfig (no cambiar nada en el menú. Solo hacer “Exit” y salvar los cambios)
editar v4l/.config y cambiar la parte que dice CONFIG_DVB_FIREDTV=m a CONFIG_DVB_FIREDTV=n
make
sudo make install


Luego de una compilación exitosa, ya podemos proceder a instalar el Firmware de la tarjeta S870. Para ello vamos a http://www.linuxtv.org/downloads/firmware/ y bajamos el driver para dubusb (en este caso es el dvb-usb-dibusb-6.0.0.8.fw). Luego lo copiamos a la carpeta de firmwares de nuestro kernel:

sudo cp dvb-usb-dibusb-6.0.0.8.fw /lib/firmware/2.6.32-22

Ahora a por los canales. Crear un archivo de definición de frecuencias para cada canal, a saber, ch_freq.conf, y agregarle el siguiente contenido:

T 473142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 14
T 479142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 15
T 485142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 16
T 491142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 17
T 497142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 18
T 503142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 19
T 509142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 20
T 515142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 21
T 521142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 22
T 527142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 23
T 533142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 24
T 539142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 25
T 545142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 26
T 551142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 27
T 557142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 28
T 563142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 29
T 569142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 30
T 575142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 31
T 581142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 32
T 587142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 33
T 593142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 34
T 599142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 35
T 605142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 36
# channel 37 not used
T 617142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 38
T 623142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 39
T 629142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 40
T 635142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 41
T 641142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 42
T 647142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 43
T 653142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 44
T 659142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 45
T 665142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 46
T 671142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 47
T 677142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 48
T 683142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 49
T 689142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 50
T 695142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 51
T 701142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 52
T 707142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 53
T 713142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 54
T 719142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 55
T 725142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 56
T 731142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 57
T 737142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 58
T 743142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 59
T 749142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 60
T 755142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 61
T 761142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 62
T 767142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 63
T 773142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 64
T 779142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 65
T 785142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 66
T 791142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 67
T 797142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 68
T 803142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 69


Teniendo la definición, realizaremos el scanner de canales para preparar así una lista de reproducción. Conectamos el receptor S870 al equipo, con buena señal de TV y hacemos:

scan ch_freq.conf > channels.conf

Con lo cual aparecerán en pantalla los diferentes canales, y si tienen transmisiones, aparecerán los nombres de estos ("TVN HD", "C13 HD", etc...). Y con esto nos queda un archivo llamado channels.conf el cual podremos abrir usando VLC (con la opción "Abrir Archivo Avanzado..."). Para cambiar de canal simplemente presionamos los botones de adelantar y retroceder canción, o simplemente usamos la lista de reproducción.