Este documento describe el hardware, el software, y los procedimientos necesarios para usar una capturadora de vídeo o una tarjeta de TV, basadas en los chipsets bt8x8, bajo Linux. 1. Introducción La posibilidad de capturar y ver fuentes de vídeo es una de las más interesantes características multimedia de Linux. Están soportados varios dispositivos de vídeo a través de la API video4linux ( http://roadrunner.swansea.uk.linux.org/v4l.shtml), entre ellos varias tarjetas de TV basadas en los chipsets de Conexant bt848 y bt878. Este documento explica como usar estas tarjetas en un sistema Linux. 2. Requerimientos de Hardware Del README de bttv: Bttv es un controlador de dispositivo para capturadoras de vídeo que usen la familia de chips Conexant ( http://www.conexant.com) Bt848. entre estos se cuentan Bt848, Bt848A, Bt849, Bt878 y Bt879. La diferencia principal (y a veces la única) entre los diversos fabricantes es el tipo de sintonizador y algunos componentes adicionales en las tarjetas. Por ejemplo, algunas tarjetas de Hauppauge tiene un decodificador adicional de Teletexto (que no es necesario con el soft adecuado) o un decodificador de sonido. Sólo algunos de estos componentes adicionales están soportados por bttv. También pueden diferir el tipo de entradas (Compuesto o S-Video) y su número. Las siguientes tarjetas deben funcionar: AverMedia TV98 http://www.aver.com/products.html AVerMedia TV-Phone http://www.aver.com/lite/products/avertvphone.html Diamond DTV2000 http://www.diamondmm.com/products/current/dtv-2000.cfm Hauppauge Win/TV pci (y otras tarjetas Hauppauge) http://www.hauppauge.com/ IDS Imaging FALCON http://www.ids-imaging.de/ Lifeview Flyvideo II http://www.lifeview.de/lifeview/html/produkte.htm#karte Matrix Vision MV-Delta http://www.matrix-vision.de/ miroVIDEO PCTV http://www.pinnaclesys.com/ Osprey-100 http://www.mmac.com/products/osprey/osprey100.html STB TV PCI http://www.stb.com/products/multimedia/tvpci/tvpci.html Terratec TERRA TV+ http://www.terratec.de/produkte/terratv/terratv_info.htm Videologic Captivator PCI http://www.videologic.com/Productinfo/capt_pci.htm 3. Requisitos de Software Para usar estas tarjetas de TV bajo Linux, necesitará los controladores de dispositivo apropiados en el núcleo. Los controladores de dispositivo de bttv son parte de la distribución del núcleo de Linux desde la versión 2.2.0. Opcionalmente puede obtener la última versión del paquete de los controladores de dispositivo y usarlo con los kernel 2.0.35 y superiores. Aun así, no se garantiza que funcione con la anterior serie de núcleos 2.0.x. El paquete actualizado de bttv está disponible en http://www.strusel007.de/linux/bttv/. Si es Usted nuevo en el mundo de los controladores de dispositivo de bttv, le sugerimos que comience con la versión incluida en el último núcleo. Si experimenta problemas con él, o encuentra que su tarjeta no está soportada, entonces atrévase con la serie 0.7.x actualizada de los controladores de dispositivo en las direcciones arriba indicadas. Si se siente aventurero, puede probar la serie de drivers 0.8.x de Gerd Knorr, que se incorporarán en los núcleos 2.4. Estos están disponibles en http://www.strusel007.de/linux/bttv/. Este documento está basado principalmente en los controladores de dispositivo del núcleo 2.4.6, con alguna mención de las características de la serie 0.7.x. Nota: Si tienes un kernel de la serie 2.2.18 o superior y no te apetece cambiar al 2.4.6 (yo era contrario al cambio porque no me gusta el iptables), puedes usar un pequeño parche existente en la web http://www.strusel007.de/linux/bttv/ para que tu Kernel soporte I2C. 4. Configuración del sistema 4.1 Instalación del Hardware Si tiene miedo de abrir la carcasa de su ordenador, lea primero este documento completo y anota las características de su tarjeta, tales como sintonizador, número de sus circuitos integrados, la frecuencia de sintonización y datos similares. En otro caso, abra su ordenador e instale la tarjeta en una ranura libre. Elija una que soporte la transferencia del bus PCI y el PCI Bus Mastering; si no sabe si su placa base tiene todas estas características, mírelo en su manual. Le harán falta para el modo Overlay. Con respecto al sonido hay dos formas diferentes de conectar su tarjeta capturadora y la de sonido. Una es internamente. Conecte su cable de audio digital del lector CD-ROM a la entrada de sonido de la tarjeta de vídeo y la salida a la entrada de la de sonido, donde iba el cable del CD-ROM. Otra forma es conectar el conector «jack» externo de sonido de 3.5 mm. de la tarjeta de vídeo con la entrada de línea de la tarjeta de sonido. También puede, simplemente, conectar unos altavoces amplificados a la salida de la tarjeta de vídeo, si no tiene una de sonido o no le apetece pasarlo a través de ella. (Algunas tarjetas nuevas Bt878 no tienen ningún conector de sonido, ya que envían la señal digital de audio a través del bus PCI. No hay soporte para esto en el momento de escribirlo). 4.2 Configuración del Núcleo Su núcleo necesitará estar compilado con las siguientes opciones, por favor, comprueba tu configuración para ver si lo tienes todo correcto o de lo contrario compila de nuevo: En la sección "Sound": Tv Card (bt848) mixer support En la sección "Multimedia Devices": Video for Linux [*] v4l information in proc filesystem --- Video Adapters BT848 Video For Linux SAA5249 Teletext processor SAB3036 tuner En la seccion "Character devices": I2C support ---> I2C support I2C bit-banging interfaces I2C device interface Con esto sera suficiente, ahora puede compilar su nucleo para que asimile estas opciones. Una vez recompilado, pase a la seccion 4.4 ya que los puntos 4.3 son para los paquetes actualizados bttv-0.7.x 4.3 Usar los paquetes 0.7.x actualizados Si desea usar los paquetes 0.7.x actualizados, debe obtener primero el archivo de uno de los sitios mencionados arriba. Descomprímalo con la orden: tar -xvzf bttv-0.7.x.tar.gz y cámbiese al recién creado directorio con permisos de superusuario, y escriba make en el directorio principal para crear los controladores de dispositivo. (Puede ignorar tranquilamente la información del fichero INSTALL con respecto a editar los makefiles ya que pasaremos esta información al controlador de dispositivo, en forma de parámetros de los módulos.) Entonces teclee: make install para instalarlos y finalmente ejecute /sbin/depmod -a para actualizar las información sobre dependencias de los módulos. Como paso adicional, una vez realizado el "make" puedes cambiar al directorio bttv-0.6.x/src/ y ejecutar un "make list", con lo cual veras todas las tarjetas soportadas por el driver. 4.3.2 Ficheros especiales en /dev (Solo para los paquetes 0.7.x actualizados) Después necesitará crear los fichero especiales de carácter en el directorio /dev. Teclee ls /dev/video*; ls /dev/radio* para ver si ya existen. Si no existen necesitaremos crearlos. Todos los ficheros tendrán como major device number 81, y el minor device number dependerá del dispositivo específico (vídeo, radio, etc.) así como múltiples instancias de estos ficheros. Recuerde que si usted no ha usado los drivers actualizados sino que usa un kernel 2.4.x, el mismo kernel habra creado ya los dispositivos necesarios. Mire en la API de Video4Linux ( http://roadrunner.swansea.uk.linux.org/v4lapi.shtml) para los detalles relativos a la programación. Hay un guión del intérprete de órdenes (script de shell) llamado MAKEDEV en el directorio driver del paquete de los controladores de dispositivo bttv, que creará por Usted cuatro dispositivos de vídeo. También puede hacerlo fácilmente Usted mismo, si sólo dispone de una tarjeta de vídeo. Como root, teclee: mknod /dev/video0 c 81 0 chmod 666 /dev/video0 ln -s /dev/video0 /dev/video mknod /dev/radio0 c 81 64 chmod 666 /dev/radio0 ln -s /dev/radio0 /dev/radio Hay también dispositivos de teletexto y VBI que pueden crearse si tiene alguna aplicación que los necesite (Actualmente son pocas). Teclee: mknod /dev/vtx0 c 81 192 chmod 666 /dev/vtx0 ln -s /dev/vtx0 /dev/vtx mknod /dev/vbi0 c 81 224 chmod 666 /dev/vbi0 ln -s /dev/vbi0 /dev/vbi 4.3.3 Carga de los módulos (Solo para los paquetes 0.7.x actualizados) El controlador de dispositivo bttv proporciona varios módulos diferentes, con distintas opciones, que se describen en el apéndice de este documento. Con tantos módulos y opciones, puede desear hacerlo todo a mano hasta tenerlo funcionando. En el caso de que esto pudiese ocasionar un bloqueo en el ordenador, no será perjudicial escribir: sync; sleep 1; sync para vaciar los buffers antes de proceder. Entonces, usando la orden insmod como el usuario root, intente cargar estos módulos. Los dos primeros son fáciles, ya que generalmente no necesitan ninguna opción: insmod videodev insmod i2c Ahora está preparado para cargar el propio módulo bttv: modprobe -v bttv Por defecto el módulo bttv intenta autodetectar su tipo de tarjeta. Observe /var/log/messages para ver lo que encuentra. Si no lo autodetecta correctamente, puede Usted añadir la opción card=n al final de la orden anterior para forzar un tipo de tarjeta, con "n" elegido de de la siguiente lista. (Se dan los tipos de 0 hasta 19, en los controladores de dispositivo del núcleo bttv-0.7.x se incluye soporte para los tipos desde el 20 hasta el 27). Puede también añadir la opción radio=1 si su tarjeta tiene sintonizador de FM. Después, cargue el módulo del sintonizador con: modprobe tuner type=n Probablemente necesite mirar en la tarjeta cuál es el que tiene. Algunas tarjetas (Miro y Hauppauge) permiten detectar automáticamente el sintonizador detectado, pero puede que necesite especificarlo. El sintonizador tendría que tener la marca y especificar si es NTSC o PAL. Para los PAL, está marcado con 28.xxxMHz (donde xxx son tres dígitos). Para NTSC, la chapa deberá rezar 35.xxxMHz. Una vez que lo tenga identificado, selecciona el valor de n de la lista siguiente (los tipos 8 y 9 están sólo incluidos en bttv-0.7.x) (Nota: En España se utiliza el sistema PAL, como en la mayoría del continente europeo, exceptuando Francia, que usa SECAM. Además los sintonizadores más corrientes son el Philips y el Temic, por lo que lo habitual en su tarjeta, suponiendo que esté en España, será 0 ó 5.) Finalmente, inserte los módulos de sonido que necesite. De nuevo necesitará mirar detenidamente la tarjeta para saber lo que tiene. Tenga en cuenta que los controladores de dispositivo para los chips TEA6300, TDA8425, TDA9855 y DPL3518 sólo están incluidos en los controladores de dispositivo de la serie 0.6.4h y no lo están en los actuales (2.2.14) controladores de dispositivo del núcleo. modprobe msp3400 o tea3600 o tda8425 o tda9855 o dpl3518 (consulte el apéndice para más detalles y opciones) Ponga en marcha tu programa favorito de video4linux y compruebe si funciona. Si no puede cambiar de canal, asegúrese de haber insertado el módulo con el sintonizador correcto. Si no escucha nada, compruebe el módulo del sonido, y que el canal no esté silenciado, si mete el audio a través de la tarjeta de sonido. 4.4 Automatización del proceso. Ahora debemos completar el archivo modules.conf para que se realize todo automaticamente. Para ello, bastara con añadir las siguientes lineas: # i2c alias char-major-89 i2c-dev options i2c-core i2c_debug=1 options i2c-algo-bit bit_test=1 # bttv alias char-major-81 videodev alias char-major-81-0 bttv alias char-major-81-64 bttv options bttv card=41 radio=1 pll=1 options tuner type=5 Mira la Documentaciñon para más opciones. (/usr/src/linux/Documentation/video4linux/bttv) Fíjate que en nuestro caso, en la linea del "options bttv" hemos puesto un card=41 porque disponemos de una Avermedia TVPhone98. El soporte de Avermedia genérico se obtiene poniendo card=6, pero en las tarjetas más modernas no funciona correctamente. Aquí tienes una lista de las tarjetas mas comunes: 0: Autodetectar 1: Miro 2: Hauppauge (viejas tarjetas bt848) 3: STB 4: Intel 5: Diamond 6: AVerMedia 7: MATRIX Vision MV-Delta 8: FlyVideo 9: TurboTV 10: Hauppauge (nuevas trajetas bt878) 11: MIRO PCTV pro 12: Terratec/Vobis TV-Boostar 13: Nueva Hauppauge WinCam (bt878) 14: MAXI TV Video PCI2 15: Terratec TerraTV+ 16: Aimslab VHX 17: PXC200 18: AVermedia98 19: FlyVideo98 (nuevas FlyVideo cards) 20: Zoltrix TV-Max 21: iProTV 22: ADS Technologies Channel Surfer TV 23: Pixelview PlayTV (bt878) 24: Leadtek WinView 601 25: AVEC Intercapture 26: LifeView FlyKit sin sintonizador 27: Intel Create and Share PCI Ahora ya estamos preparados para reiniciar el PC. Una vez hecho estoy para comprobar que linux nos reconoce bien nuestra tarjeta, ejecutamos el comando "lspci" como root y debemos obtener algo parecido a esto: (Para el caso de la Avermedia TvPhone98 (card=41)) 00:0f.0 Multimedia video controller: Brooktree Corporation Bt878 (rev 11) (Para el caso de la Avermedia (card=6)) 00:09.0 Multimedia video controller: Brooktree Corporation Bt848 TV with DMA push (rev 12) Como veis, el chip que lleva la TvPhone98 es mas moderno que el que lleva la Avermedia normal, es por eso por lo que hay que ajustar el parametro "card=" al tipo de tarjeta que tu tengas. 5. Aplicaciones. Ahora que tu núcleo y los dispositivos están configurados y los módulos insertados, necesitará una aplicación para ver y capturar imágenes desde su tarjeta. Hay varios disponibles: bttvgrab - Proporciona captura de alta calidad para grabación de vídeo http://moes.pmnet.uni-oldenburg.de/bttvgrab/ Gnome-o-Vision - Un visor para el escritorio Gnome (actualmente bajo desarrollo en Gnome CVS) http://cvs.gnome.org/lxr/source/gnomovision/ kwintv - Un visor de TV basado en Qt para KDE http://www.mathematik.uni-kl.de/~wenk/kwintv/ wmtune - Applet de Window Maker sintonizador de radio para tarjetas de TVy radio basadas en bttv http://home.pages.de/~fionn/archive/wmtune-1.0_bttv.tar.bz2 wmtv - Aplicación de Tv para Window Maker http://www.student.uwa.edu.au/~wliang/ XawTV - Una aplicación de TV y algunas utilidades http://www.strusel007.de/linux/xawtv/ XtTV - Sencillo programa de TV y Vídeo para Linux/X Window http://home.pages.de/~rasca/xttv/ La explicación que vamos a dar a continuación estará referida al programa XawTV, ya que de todos los que hemos visto, ese es el que mas nos ha gustado. Nosotros utilizamos la versión xawtv-3.72 ya que con la versión 3.7x no funciona el control remoto. Lo podeis bajar de http://www.bytesex.org/xawtv/index.html. Es recomendable leer toda la información que trae, pero aquí os explicamos la configuración utilizada por nosotros a modo de ejemplo: ./configure --enable-lirc --enable-xfree-ext --enable-xvideo --with-x Luego hacemos un "make" y finalmente (como root) "make install" Para comprobar que todo ha funcionado bién, podemos ejecutar desde la linea de comandos "radio" y deberia aparecernos un sintonizador de radio. Pon tu estación favorita y tomate unos minutos de descanso mientras nos preparamos para acabar con los ajuste de la imagen. Hacemos un lsmod y se debe ver algo similar a esto: Module Size Used by tuner 4160 1 (autoclean) tvaudio 8176 0 (autoclean) (unused) bttv 53728 1 (autoclean) i2c-algo-bit 7296 1 (autoclean) [bttv] i2c-core 13008 0 (autoclean) [tuner tvaudio bttv i2c-algo-bit] -- Lee esto, pero hay tarjetas de las nuevas generaciones AverMedia que funcionan sin este paso Bien, ahora viene una parte un poco complicada... Si dispones de una version de xfree inferior a la 4.0.x (3.3.6 por ejemplo) no tendras que hacer nada raro, simplemente lanzar el "xawtv" y empezar a configurar tus canales favoritos. Si tu version de xfree es la 4.0.x o superior, entonces debes activar el DGA Support, ya que por defecto viene desactivado. Para ello, edita el /etc/X11/XF86Config y busca la siguiente linea: # This loads the miscellaneous extensions module, and disables # initialisation of the XFree86-DGA extension within that module. SubSection "extmod" Option "omit xfree86-dga" # don't initialise the DGA extension EndSubSection Esto es lo que tenemos que modificar para que reze lo siguiente: # This loads the miscellaneous extensions module, and disables # initialisation of the XFree86-DGA extension within that module. SubSection "extmod" Option "xfree86-dga" # don't initialise the DGA extension EndSubSection Es decir, basta con quitar la palabra "omit". Ahora salvamos los cambios y relanzamos las X para que coja ya el nuevo archivo de configuración. -- Ahora ejecutamos el programa "scantv" que es parte del xawtv y este nos reconocerá los canales de la Tv. Este programa nos pedira la norma utilizada en nuestro pais y que seleccionemos una tabla de frecuencia... nuevamente depende del pais en el que nos encontremos. Ahora ya podemos lanzar el "xawtv" y ponernos a sintonizar y almacenar todos los canales en las frecuencias que nos haya mostrado el "scantv". Si conoces las frecuencias y quieres hacerlo mas rápido, puedes editar directamente el archivo $HOME/.xawtv que te generará la primera vez que lanzes el xawtv. Disfruta de la Tv. 6. Teletexto. Instalar el Teletexto en linux es una tarea bastante sencilla en comparación con lo que hemos hecho hasta ahora. Hay varios programas sintonizadores de teletexto, pero nosotros preferimos el AleVT (bajatelo de http://lecker.essen.de/~froese/). Una vez bajemos y descomprimamos el archivo, hacemos un "make" y empezara a compilar el programa y algunas aplicaciones mas como "alevt-date" y "alevt-cap". Os recomendamos que leais con atención el archivo README. En nuestro caso, al llegar a la compilacion del "alevt-date" da un error con la tabla de caracteres que es non-USA (:?), pero este error importa poco porque ya ha compilado el "alevt". Debemos moverlo a la ruta que queramos, lo mas normal es a /usr/local/bin Ahora ya lo tenemos instalado, solo debemos abrir el xawtv y sintonizar un canal con teletexto, despues lanzar el alevt y se abrira la página 900 de ayuda del programa, haz un click con el ratón para activar el alevt y pon la página índice (es España es la 100), deberia abrirse la principal del canal que tengas sintonizado. 7. Mando a Distancia Algunos modelos de tarjetas tienen mando a distáncia. Para hacerlo funcionar necesitamos el soporte de linux que podemos encontrar en http://www.lirc.org. Nosotros estamos utilizando la versión lirc-0.6.5. Tomaros vuestro tiempo para leer la documentación y despues ejecutar un pequeño script llamado "setup.sh". Este script os abrira un pequeño API donde podeis decirle que tipo de tarjeta teneis (reconoce perfectamente las dos de este ejemplo, la Avermedia y la Avermedia TVPhone98). Para ello, debemos seleccionar la opcion 1 "Driver Configuration", depues seleccionar "TV Card" (el resto de opciones es para otros dispositivos inalambricos como ratones, teclados...). Ahora nos saldrán la lista de tarjetas soportadas. Las dos de este HOWTO estan sin problemas, pero te aconsejo que mires el valor del card= para ver exactamente cual coincide con tu tarjeta en el caso de que no aparezca. Despues le damos a la opcion de "Salvar y ejecutar configure" con lo cual el solito lanzara el configure con las opciones correctas y nos lo dejara a punto para el "make" y el "make install". Ahora debemos volver a editar nuestro archivo /etc/modules.conf e insertar la linea siguiente: #lirc alias char-major-61 lirc_gpio Reiniciamos el ordenador y el modulo del lirc nos creara dos archivos automaticamente, el /etc/lircd.conf (en versiones anteriores de lirc, el archivo de configuracion se hubicaba en /usr/local/etc, comprueba que tu version sea la ultima disponible) y el /etc/lircmd.conf (este segundo es para usar un ratón inalámbrico, pero nosotros no lo vamos a utilizar... tal vez en otro Howto y en otro momento). Ahora necesitamos un archivo que interprete lo anterior, el cual lo encontramos en el paquete xawtv-3.72. En el directorio "contrib" de este paquete hay un archivo llamado dot.lircrc, debemos renombrarlo como .lircrc y copiarlo a $HOME/ asi el xawtv ya sabra que hemos instalado un lirc. ** Nota: en las versiones de xawtv-3.7x el autor decidió cambiar la manera de configurar el mando a distancia y no servia el .lircrc, pero debido a las criticas y a que esto no funcionaba en todas las tarjetas, se ha vuelto a implantar en la version 3.72. Si ves que no te funciona, asegurate primero de que tienes esta version o superior y leete el Changelog del xawtv por si han cambiado algo importante. ** Lanzamos el daemon del lirc /usr/local/sbin/lircd (metelo en /etc/rc.d/rc.local para que se cargue al inicio siempre... asi te evitas lanzarlo cada vez) y lanzamos el xawtv con el parametro -xv (consulta la documentación para otras opciones), asi tendremos lista toda la instalacion de todos los componentes. Este documento ha sido realizado por Marcelo y Carlos