jueves, 3 de noviembre de 2011

[HT] Instalar KWorld PCI Analog TV Card Lite (aka pvr-tv 7134se {aka SAA7134})

UPDATE 1: GRAVAR y VER a la vez.

Desde que compre esta tarjeta para grabar los programas de cocina de mi mamá me vi en la penosa necesidad de usar windows por que no tenia ni idea de como configurar la grabación en Linux, de hecho, poder ver tv Linux con esa tarjeta ya era un reto. Después de meses procrastinando y leyendo le atine a como hacerlo y otra vez disfruto de no usar el otro OS.

Este how to es una pisca avanzado, pero procurare facilitarte la vida, pero ante todo:

¡LEE TODO ANTES DE EJECUTAR ALGO!

Un poco de teoría antes que todo
Lo primero que me percate en el proceso es que la tarjeta usa un chip genérico SAA7134, tal vez este HT sirva para otras tarjetas, Eso lo puedes ver por el comando lspci



Ahora bien, lo bueno de esto es que Linux ya tiene driver para este chip entonces ya tienes instalado el driver, lo no tan bueno es que tiene más de un driver (refiriéndome a la parte de sonido) y en el proceso esto nos entretendrá. Para entender el problema con el sonido hay que ver un poco el historial de los drivers de audio que Linux ha tenido, son 3: OSS (ubuntu ya no lo soporta), ALSA y PulseAudio (el más actual); el meollo del asunto, veremos, que los programas para usar la tarjeta apuntan al driver de OSS pero si no esta el driver pues no hay sonido.

... bueno empecemos

ALISTAR EL TV
Los fierros:
Buscando y probando encontré muchas opciones para tv en Linux pero al final solo 2 opciones me funcionaron una fue tvtime y otra mplayer, así que te recomiendo instalarlas.
si quieres por terminal:
sudo apt-get install tvtime mplayer


en este punto ya puedes usar tvtime configurar canales y escuchar... nada no hay sonido T.T

para usar el mplayer puedes usar este comando:
mplayer \
-tv driver=v4l2:device=/dev/video0:input=0:normid=0:width=496:height=371:chanlist=us-cable \
-vo xv tv://3


En español:

  1. Linea: El reproductor ¬¬

  2. Linea: Información para el programa de donde sacar el vídeo, en este caso -tv


    • driver=v4l2 (video for linux) El driver de vídeo que utiliza

    • device=/dev/video0 El lugar donde sale el vídeo (puede ser diferente a 0)

    • input=0 0:TV 1:Composite 2:S-Video

    • normid=0 0:NTSC 4:PAL 13:SECAM

    • width=496:height=371 Tamaño de la pantalla

    • chanlist=us-cable Para mi funciono como la opción cable... del manual: disponibles: europe-east, europe-west, us-bcast, us-cable, etc


  3. La salida


    • xv Usa xorg, otra es GL usa OpenGL (en mi caso uso más cpu ¬¬)

    • tv://3 El canal que quiera ver (si no pones canal iniciara en el ultimo canal o en el canal 0 {creo})


Con H y K podrás cambiar canales.

EL SONIDO

Ahora bien si no te sonó seguramente es por que usas un ubuntu con pulseAudio. Para solucionar esto primero debes de buscar donde está la tarjeta en el driver de sonido alsa
para eso usamos el comando de entradas de alsa y pedimos la lista de dispositivos:
arecord -L


Busca algo como:
hw:CARD=SAA7134,DEV=0
SAA7134, SAA7134 PCM
Direct hardware device without any conversions
la primera linea te dirá donde esta la tarjeta.

Para TVTime:
En este paso todavía estoy jugando, el problema aquí es un retraso de sonido pequeño.

Ármate un script con lo siguiente:

#!/bin/sh
arecord -D hw:SAA7134,0 -r 32000 -c 2 -f S16_LE | aplay - & tvtime -M;
wait 1 tvtime
killall arecord;
killall aplay;
killall tvtime

El script hace que escuche y a continuación reproduzca lo que la tarjeta envíe, arecord escucha el device (-D) hw:"card","dev" (que encontramos anteriormente), el resto son parámetros de como entra el audio, aplay reproduce el sonido y tvtime muestra la imagen.

Para MPlayer:
A diferencia de TVTime no hay retraso de sonido, pero no se como cambiar canales enviando el canal (pasar del 3 al 8 sin ver los canales intermedios), para agregar el sonido solo hay que agregar más parámetros a -tv:

mplayer \
-tv driver="mucho texto":alsa:adevice=hw.SAA7134:amode=1:audiorate=32000:immediatemode=0 \
-vo xv tv://22

Donde:

  • alsa le dice que use el driver de alsa (¬¬)

  • adevice=hw."card""dev" (alsadevice)

  • amode=1 1:Estereo 2y3:SAP (no me funciono)

  • audiorate=32000 La calidad de sonido que da la tarjeta

  • immediatemode=0 Suena conectado normalmente (1 el sonido sale por el conector verde de la tarjeta)


En este punto ya puedes ver tv sin problema...

ALISTAR LA GRABADORA


UPDATE1: Uno de los problemas que vi en el proceso fue que si grababa no reproducía, gracias a este script doy solución.
agrega justo al final de la linea la letra & y agrega:
mencoder "blablabla" &
sleep 1
mplayer $PATH1/${TODAY}_${NOW}_CH.mp4 -vo xv
killall mencoder


Una de las razones para comprar la tarjeta era grabar digitalmente y dejar atrás los cassettes (mi mamá tiene como 15). En Linux es hasta fácil grabar después de todo gracias a mplayer y si gemelo mencoder.

El comando estrella es:
mencoder \
-tv driver=v4l2:device=/dev/video0:input=0:normid=0:alsa:adevice=hw.2:amode=1:audiorate=32000:immediatemode=0:width=496:height=371:chanlist=us-cable \
-ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=600 \
-oac mp3lame -lameopts cbr:br=64 \
-endpos 15 -o tvchachi.avi tv://


Donde:
  • -tv "y el resto" es el driver del vídeo eso ya lo vimos
  • -ovc (Output Video Codec) el codec de vídeo a usar
  • -oac (Output Audio Codec) el codec de audio a usar
  • -endpos # tiempo que desea grabar (#:Segundos 02:05:0 2 horas 5 minutos 0 segundos) este es opcional
  • -o nombre-de-archivo.avi (Output) archivo de salida
  • tv://# Canal que desea grabar
La elección de los codecs es para usar poco espacio en disco con calidad suficiente para leer claro (la lista de recetas XD) usa 603 MB para 2 horas y 5 minutos

Para programar grabaciones es bueno usar cron y un script (mira un ejemplo), hay una practica interfaz gráfica llamada gnome-schedule para programar cuando grabar


ALISTAR EL CONTROL


Por ultimo el control de por si funciona sin necesidad de Driver... pero no como uno quiere. En Linux se puede configurar como uno quiera para esto primero instalamos ir-keytable

sudo apt-get install ir-keytable


al usar el comando inicialmente lista los sensores InfraRojos:
Found /sys/class/rc/rc0/ (/dev/input/event4) with:
Driver saa7134, table rc-kworld-plus-tv-analog
Supported protocols:
Enabled protocols:
Repeat delay = 500 ms, repeat period = 33 ms

La información que nos da es muy valiosa por ejemplo table rc-kworld-plus-tv-analog nos dice que configuración de botones está usando,Supported protocols: que protocolos soporta (no aparece ninguno entonces es desconocido UNKNOWN). En las carpetas /etc/rc_keymaps /lib/udev/rc_keymaps/ se alojan las posibles configuraciones a usar, selecciona la tabla que se este usando y la editas si quieres (mira la lista de opciones aquí )

mira mi configuración (para el control de la foto)

una cosa a tener en cuenta, hay unas teclas que se mezclan por ejemplo el 1, 2 y 3 y las direccionales, yo preferí el uso de las direccionales, igual para esto alguien me dijo que se puede parchear el kernel y ya, pero como no se ahora entonces lo dejo así (por el momento).

Para ver teclas => id usa sudo ir-keytable -t cuando ya tengas listo el archivo puedes probarlo con las siguientes lineas
sudo ir-keytable -c
sudo ir-keytable -w /etc/rc_keymaps/"tabla configurada"
sudo ir-keytable -t

Para fijar permanentemente la configuración edita el archivo /etc/rc_maps.cfg y saca de comentario la linea de la configuración que editaste guarda y listo

por ultimo como los botones que presionas son parte de un estandar, fácilmente puedes modificar su función en el gestor de atajos del teclado



FUENTES:
http://forum.xbmc.org/showthread.php?t=101151
linuxtv.org/wiki/index.php/Saa7134-alsa
https://patchwork.kernel.org/patch/888492/

6 comentarios:

Anónimo dijo...

Hola,, soy notavo en esto de Linux... Tengo esta tarjeta de TV, y leyendo pude llegar hasta instalar....
Puedo ver TV pero sin sonido.

Lei que hay que hacerse un script, pero, que es un script? cómo hago eso. Dónde lo pongo, como lo guardo...

Espero una respuesta sencilla, repito, soy nuevo en linux, y no se nada.

Gracias

Amaeth dijo...

Un script es un archivo de texto por lo general terminado en .sh (miScrip.sh) con permisos de ejecución (click derecho propiedades > permisos > chulea la opción de ejecución). ese archivito le puedes dar luego doble click y ejecutar para ya correr tu script (como si fuera un programa). Cuentame por aqui como te fue, vale?

Anónimo dijo...

Hola amigo, antes de nada muchas gracias por responder mi pregunta, y segundo, gracias por explicarme lo del sript.
Hice lo que me dijiste, y Sí, efectivamente pude escuchar el audio de la tarjeta de manera sincronizada a la imagen, pero un detalle, me di cuenta que tengo que ejecutar el script cada vez que quiero ver tv, y la terminal se mantiene abierta. (si cierro la terminal se cierra todo)
Hay alguna manera de que el audio se incorpore a la imagen sin tener que ejecutar el script siempre, y sin que quede la terminal abierta?

Realmente no me afecta hacer ese paso, pero te quería consultar si es posible.

Muchísimas gracias de nuevo,ya voy como 6 días en linux ubuntu, y la verdad, ni extraño a windows, estoy muy feliz acá, más ahora que mi tarjeta de Tv la puedo usar.

Chao.

Claw dijo...

Saludos, disculpa la molestia, veo que el TVtime toma inmediatamente la tarjeta de tv pvr-tv7134se de forma excelente, me interesa resolver lo del control remoto pero estoy hecho un lio con esto, en la guia no me queda claro cuales lineas descomentar al archivo /etc/rc_maps.cfg, el control funciona como si usara las teclas, eso es muy bueno pero el control no me sube ni bala el volumen y existe alguna forma de iniciar el programa con e boton power

Anónimo dijo...

Hola, buenas noches, en el caso de que mi señal de tv sea por aire? Q tendría que ponerle a chanlist? pues us-cable no tendría lógica, no es asi? Saludos

Anónimo dijo...

Hola, el tvtime funciona muy bien, pero tengo problemas con el sonido, el comando que se publica en el blog no me funciona, intento configurando el tvtime o las configuraciones de sonido pero no suena, aunque todo lo demás del tvtime funciona bien. Agradezco que me puedan ayudar a solucionar el problema y agradezco su pronta respuesta.