Afortunadamente GNU/Linux dispone de la herramientas necesarias para la sintonización y visualización de los diferentes canales de TV utilizando los más habituales modelos de sintonizadoras del mercado (TVCapture98, EasyTV, etc.) o sus clones (tarjetas con otros nombres pero que siguen el mismo comportamiento que las originales), como puede apreciarse en la figura 1.
En el caso de las versiones actuales del núcleo de Linux, existe un amplio soporte para sintonizadoras de TV (no todas aunque sí las más habituales, cubriendo casi el 100% del mercado). Este soporte viene en forma de controlador integrado en el núcleo en la sección Video4Linux o en forma de módulos (bajándose los drivers bttv o usando el mismo Video4Linux pero en módulos).
Los pasos a seguir son los siguientes:
Si queremos oir el sonido obtenido de la sintonizadora de TV necesitaremos además una tarjeta de sonido soportada por Linux (preferiblemente FullDuplex) y una conexión mediante un cable macho-macho de la salida de Audio de la sintonizadora de TV a la entrada de línea de la tarjeta de sonido instalada en nuestro PC. Podemos utilizar directamente la salida de la tarjeta de TV si la conectamos a unos altavoces, pero en ese caso no será posible decodificar el audio de emisiones codificadas. Es importante que en el mixer (mezclador, como aumix, kmix o similares) tengamos habilitada y con suficiente volumen la señal de entrada de línea. Podemos utilizar la entrada de micrófono si no disponemos de entrada de línea, siempre y cuando nuestra tarjeta soporte el suficiente volumen por dicha entrada sin dañarla (como en el caso de la Sound Blaster 64 PCI, la cual no tiene entrada de línea externa pero sí una entrada de micrófono bastante robusta).
Con esto podremos ver sin problemas la TV bajo X-Window. Si deseamos ver la TV bajo la consola de Linux, necesitaremos una tarjeta de vídeo con soporte para VESA 2.0, requisito indispensable para utilizar el programa fbTV, aunque esto es algo que queda fuera del alcance de este artículo, centrado en la utilización de X-Window como entorno de trabajo habitual para aplicaciones gráficas como pueda serlo la visualización de TV.
Las diferentes tarjetas sintonizadoras soportadas (y su identificador, que más tarde necesitaremos) son las que pueden verse en la tabla 1.
ID TARJETA 0 Auto-Detect 1 Miro BestBuy Easy TV 2 Hauppauge (bt848) 3 STB 4 Intel 5 Diamond 6 AVerMedia 7 MATRIX Vision MV-Delta 8 FlyVideo 9 TurboTV 10 Hauppauge (bt878) 11 Miro Pro 12 TV-Boostar 13 Hauppauge WinCam 14 MAXI 15 Terratec TerraTV+ 16 Aimslab VHX Pixelview Play TV 17 PXC200 18 AVermedia98 19 FlyVideo98 (newer FlyVideo cards)
Otras tarjetas que no aparecen en la lista son también soportadas por compatibilidad con alguna de las anteriores (puede averiguarse testeando nuestra tarjeta con el ID de otra de la lista).
Por otra parte, también necesitaremos programas de televisión como XawTV o KwinTV.
cd /usr/src/linux make xconfig (seleccionamos las opciones y grabamos) make dep clean bzImage mv arch/i386/boot/bzImage /boot lilo -v make modules modules_install make cleanEn concreto, si tan sólo vamos a cambiar módulos no necesitamos realizar toda la compilación:
cd /usr/src/linux make xconfig (seleccionamos las opciones y grabamos) make dep modules modules_install cleanPara seleccionar las opciones (en el paso make xconfig), en la sección Video For Linux deberemos marcar los como módulos que necesitemos para la instalación de la TV. La descripción de los diferentes módulos es la siguiente:
Módulo Descripción Bttv Módulo general BTTV. msp3400 Sonido estéreo. Videodev Driver de la API Video4linux i2c Driver del bus i2c tuner Driver del sintonizador de TV.
Un ejemplo de módulos a marcar sería el siguiente:
M - Video For Linux M - BT848 Video For Linux M - MSP3400 (en la sección Additional Low Level Sound Drivers).
mkdir temp cd temp tar xvzf ../bttv-version.tar.gzA continuación compilamos e instalamos los módulos en /lib/modules/
make make installDeberemos repetir el proceso si cambiamos nuestro kernel (simplemente con make y make install), de forma que los módulos sean compilados con la versión del kernel que estemos utilizando.
En el caso de los drivers BTTV, incluyen un script llamado MAKEDEV que creará todos los ficheros necesarios para que los programas se comuniquen con la tarjeta. Sólo hará falta ejecutarlo una vez en el sistema, aunque cambiemos de versión de drivers o de kernel. El script se ejecuta (estando en el mismo directorio que dicho script) con:
./MAKEDEVEl código del script es el siguiente (por si no disponemos de él o queremos saber cómo se crean los diferentes dispositivos):
#!/bin/bash function makedev () { for dev in 0 1 2 3; do echo "/dev/$1$dev: char 81 $[ $2 + $dev ]" rm -f /dev/$1$dev mknod /dev/$1$dev c 81 $[ $2 + $dev ] chmod 666 /dev/$1$dev done # symlink for default device rm -f /dev/$1 ln -s /dev/${1}0 /dev/$1 } makedev video 0 makedev radio 64 makedev vtx 192 makedev vbi 224 ln -s /dev/video0 /dev/bttv0 ln -s /dev/radio0 /dev/radio ln -s /dev/radio0 /dev/bttv-fm ln -s /dev/vbi0 /dev/bttv-vbi
Lo ideal en este caso es crear un script que inserte los módulos en memoria para así poder probar diferentes configuraciones, fácilmente testeando si funcionan con algún programa de TV como XawTV o KwinTV. Utilizaremos otro script para descargar los módulos de memoria cuando no los necesitemos.
Primero crearemos el script inicia_tv:
#!/bin/sh if test "$UID" = "0"; then # running as root anyway, don't need sudo INSMOD="/sbin/insmod" RMMOD="/sbin/rmmod" fi function xrmmod () { grep -qe "^$1" /proc/modules || return echo rmmod $1 $RMMOD $1 || exit 1 } function xinsmod () { echo insmod $* $INSMOD -f $* || exit 1 } # prepare for crashing the box -- flush dirty buffers sync; sleep 1; sync # kill old modules ... xrmmod bttv xrmmod msp3400 xrmmod tda8425 xrmmod tea6300 xrmmod tuner xrmmod i2c_chardev xrmmod i2c-dev xrmmod algo-bit xrmmod i2c xrmmod videodev # ... and load the new ones xinsmod videodev xinsmod i2c verbose=1 scan=1 i2c_debug=0 test -f i2c_chardev.o && xinsmod i2c_chardev xinsmod tuner debug=0 type=0 xinsmod msp3400 debug=0 #simple=0 #xinsmod tda8425 #xinsmod tea6300 xinsmod bttv radio=0 card=6 pll=1 triton1=0 #------ finTecleamos eso en un fichero, lo grabamos como inicia_tv, le damos permisos de ejecución con chmod +x inicia_tv, cambiamos los parámetros de las últimas líneas del script a aquellos que se corresponda nuestra tarjeta, y lo ejecutamos mediante ./inicia_tv .
Para el correcto funcionamiento de este script necesitaremos crear otro en /usr/local/bin, llamado xinsmod, con permisos de ejecución (chmod +x) y con el siguiente contenido:
function xinsmod () { echo insmod $* $INSMOD -f $* || exit 1 sleep 2 sync }Finalmente, creamos otro script llamado descarga_tv (también con permisos de ejecución):
#!/bin/sh if test "$UID" = "0"; then # running as root anyway, don't need sudo INSMOD="/sbin/insmod" RMMOD="/sbin/rmmod" fi function xrmmod () { grep -qe "^$1" /proc/modules || return echo rmmod $1 $RMMOD $1 || exit 1 } function xinsmod () { echo insmod $* $INSMOD -f $* || exit 1 } # prepare for crashing the box -- flush dirty buffers sync; sleep 1; sync # kill old modules ... xrmmod bttv xrmmod msp3400 xrmmod tda8425 xrmmod tea6300 xrmmod tuner xrmmod i2c_chardev xrmmod i2c-dev xrmmod algo-bit xrmmod i2c xrmmod videodev¿Qué hemos conseguido con este proceso? Tenemos los módulos preparados en /lib/modules y ahora disponemos de un script (ejecutable con ./inicia_tv) que instala esos módulos en memoria con los parámetros adecuados. Tras ejecutar dicho script ya podremos iniciar cualquier programa de TV y visualizar los diferentes canales con su audio incluído. Una vez acabemos de ver la TV, podremos descargar los drivers de memoria (liberando así recursos del sistema) mediante la ejecución del script descarga_tv (con ./descarga_tv). Esto nos permitirá hacer las pruebas necesarias (cambiando los parámetros de las líneas finales del script inicia_tv) hasta conseguir visualizar la TV en algún programa como XawTV, que permite buscar canales mediante las teclas de cursor :
./inicia_tv xawtv (aquí comprobamos el correcto funcionamiento de la TV) (si algún parámetro es incorrecto, modificamos inicia_tv). ./descarga_tvLas opciones de módulos más importantes son:
verbose = Indica si el driver debe (1) o no (0) dar información extra. Scan = Indica si se debe o no (1/0) escanear los buses i2c. Radio = Indica si disponemos o no (1/0) de radio en nuestra tarjeta de TV. Card = Identificador de la tarjeta de TV (ver tabla 1). Pll = Suele ser 0, 1 o 2.2 según tarjeta.Para más información sobre las diferentes opciones, consultar el BTTV-Mini-Como de http://lucas.hispalinux.es sección Insflug COMOS o bien la documentación de /usr/src/linux/Documentation/video4linux/ y /usr/src/linux/Documentation/video4linux/bttv.
Tras averiguar la perfecta configuración de la tarjeta ya será posible configurar el sistema para que inicialice los módulos automáticamente, como se describe en el siguiente apartado.
videodev i2c verbose=1 scan=0 i2c_debug=1 msp3400 debug=1 tuner debug=1 type=5 bttv card=6 radio=0 pll=1Otro ejemplo (con la Avermedia TV Capture98 del autor) sería:
alias char-major-89 i2c-dev options i2c-core verbose=1 scan=1 i2c_debug=0 options i2c-algo-bit bit_test=1 alias char-major-81 bttv alias char-major-81-0 bttv pre-install bttv modprobe -k msp3400; modprobe -k tuner options bttv radio=0 card=6 pll=1 triton1=0 options tuner debug=0 type=0 options msp3400 debug=0De esta forma informamos al kernel de todas las opciones de los diferentes módulos (options) y las dependencias entre ellos (pre-install) de forma que éste sea capaz de instalar los módulos en memoria y de eliminarlos automáticamente. Con el comando lsmod podremos ver los módulos instalados en memoria y sus opciones.
- KwinTV: Este programa para KDE incorpora gran cantidad de menúes y opciones para escaneo de canales, capturas de pantalla, configuración, etc. En la figura 5 puede apreciarse este programa sintonizando un canal nacional.
- XAWTV: Sencillo programa con variadas opciones pero algo tosco en cuanto a interface. Se configura mediante menúes o creando un fichero de configuración en el directorio HOME llamado .xawtv que incluya las opciones y los diferentes canales, como el siguiente fichero de ejemplo:
norm = pal capture = overlay source = television mixer = line freqtab = pal-europe fullscreen=800x600 [TVE1] channel = E5 key=1 [La2] channel = 22 key=2 (etc..)
- XawTV-fbtv: Este programa viene incluido dentro de xawtv y permite (si tenemos soporte de framebuffer en el kernel) utilizar la TV bajo la consola de Linux utilizando /dev/fd0. Para más información se recomienda consultar la ayuda en línea y documentación de XawTV y fbTV.
- XawTV-nagra, nagraTV: son programas que permite decodificar la señal de canales privados de TV (como Canal+), programado con fines educacionales (dado que la decodificación de estos canales es ilegal). Estos programas decodifican sólo el vídeo de la señal, siendo necesarios otros programas para la decodificación simultánea del audio junto con el vídeo (nagraudio, so_plus, etc).
- lirc: LIRC nos permite controlar la tarjeta de TV con el mando a distancia que algunas de ellas incorporan. En principio lo más sencillo es utilizarlo para controlar los programas de TV y de radio, pero en realidad el programa es mucho más amplio y puede ser utilizado para controlar con dicho mando cualquier programa de GNU/linux, pudiendo utilizarse para navegar, como ratón, lanzar reproducción de unos MP3 determinados, etc.
- gradio: Este programa permite oir la radio bajo Linux en aquellas tarjetas sintonizadoras de TV con soporte para radio. Un ejemplo de uso sería el siguiente (para escuchar la emisora 94.2 de FM):
gradio -d /dev/radio -f 94.2 -c -v1- aleVT: esta pequeña aplicación permite visudalizar las páginas de teletexto de los diferentes canales en una ventana Xwindow. Esto nos permitirá consultar la programación o cualquier otro servicio de teletexto de los diferentes canales que sintonicemos Al ser ejecutado, el programa lee todas las páginas de teletexto con lo cual posteriormente la navegación por el mismo es instantánea, sin espera alguna para cargar las páginas.
Santiago Romero
Todos estos programas están disponibles para su descarga en Internet. La página oficial de cada uno de estos programas puede encontrarse a través de http://www.freshmeat.net, introduciendo el nombre del programa en la celdilla de texto y pulsando enter. De este modo accederemos a las diferentes páginas oficiales con las últimas versiones de los programas. Los usuarios de paquetes RPM podrán encontrar este tipo de paquetes en la EN RESUMEN
La configuración de las sintonizadoras de TV bajo Linux es algo laboriosa debido a la negativa de los diferentes fabricantes de tarjetas TV a realizar drivers para Linux, pero una vez realizada permite una correcta visualización bastante más estable que los drivers oficiales para otros Sistemas Operativos. No obstante, lo importante es poder visualizar la TV bajo nuestro S.O. favorito: GNU/Linux, cosa que el lector podrá realizar a partir de este momento mediante esta introducción a Video4Linux.