Colocando uma PixelView PlayTV MPEG2 para funcionar no Ubuntu
Atenção : Esse artigo só vale para Ubuntu 8.04 (Hardy Heron)
Por ocasião da atualização do Ubuntu para a mais nova versão tive que acertar algumas coisinhas, por exemplo, minha placa de TV denominada "PixelView PlayTV MPEG2 PV-M4900 FM.RC" da PixelView que funcionava de primeira numa versão antiga do Ubuntu (6.04), nunca funcionou nas versões posteriores sem uma pequena intervenção. A mudança que faço pós-instalação é sempre a mesma que usei no Ubuntu versão 7.04, 7.10 e agora o 8.04. Se voce tem uma placa de TV igual ou similar a minha então veja como pô-la para funcionar. Como já manjado, eis o passo a passo :
Passo 1) Minha placa foi reconhecida pelo Ubuntu ?
Primeiramente veja se sua placa playTV é reconhecida e autoconfigurada pelo Ubuntu, veja :
$ dmesg |grep bttv [ 13.276000] bttv: driver version 0.9.17 loaded [ 13.276000] bttv: using 8 buffers with 2080k (520 pages) each for capture [ 13.276000] bttv: Bt8xx card found (0). [ 13.276000] bttv0: Bt878 (rev 17) at 0000:04:02.0, irq: 19, latency: 32, mmio: 0xd3200000 [ 13.276000] bttv0: detected: Prolink Pixelview PV-BT [card=72], PCI subsystem ID is 1554:4011 [ 13.276000] bttv0: using: Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) [card=72,autodetected] [ 13.276000] bttv0: gpio: en=00000000, out=00000000 in=006fc0ff [init] [ 13.276000] bttv0: using tuner=5 [ 13.276000] bttv0: i2c: checking for TDA7432 @ 0×8a… not found [ 13.376000] bttv0: i2c: checking for TDA9887 @ 0×86… not found [ 13.408000] bttv0: registered device video0 [ 13.408000] bttv0: registered device vbi0 [ 13.408000] bttv0: registered device radio0 [ 13.408000] bttv0: PLL: 28636363 => 35468950 ..<6>usbcore: registered new interface driver gspca [ 13.440000] input: bttv IR (card=72) as /class/input/input3 [ 2114.136000] bttv0: PLL can sleep, using XTAL (28636363). [ 2249.252000] bttv0: PLL: 28636363 => 35468950 .. ok [ 3040.804000] bttv0: PLL can sleep, using XTAL (28636363). [ 3148.896000] bttv0: PLL: 28636363 => 35468950 .. ok [ 3148.928000] bttv0: PLL can sleep, using XTAL (28636363).
Inclusive o controle remoto, que no log acima foi exibido como :
[ 13.440000] input: bttv IR (card=72) as /class/input/input3
Apesar de as linhas acima indicarem que a placa usa sintonizador tuner=5 e estar de acordo com a tabela :
Verá mais tarde que precisei de trocar o código do tuner.
Para descartar alguns problemas que podem ocorrer e evitar que perdamos tempo com uma placa que não irá funcionar no Linux, temos de fazer três testes :
teste 1) Verificar se a placa de TV foi devidamente reconhecida pelo seu sistema, para verificar isso, execute no terminal :
$ lspci 00:00.0 Host bridge: Intel Corporation 82955X Memory Controller Hub (rev 81) 00:01.0 PCI bridge: Intel Corporation 82955X PCI Express Root Port (rev 81) 00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01) 00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01) 00:1c.3 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 (rev 01) 00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 01) 00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 01) 00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 01) 00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 01) 00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1) 00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01) 00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev 01) 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01) 01:00.0 VGA compatible controller: nVidia Corporation G71 [GeForce 7900 GS] (rev a1) 03:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 11) 04:02.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11) 04:02.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11) 04:07.0 FireWire (IEEE 1394): Texas Instruments TSB82AA2 IEEE-1394b Link Layer Controller (rev 01)
As linhas em negrito identificam que a placa de TV foi reconhecida, isto não significa que ela funciona, apenas que o sistema ao listar todo o hardware PCI alistou a sua placa. Se não houver nada na relação que indique que a placa de TV foi encontrada no seu sistema então temos um problema, sua placa está com defeito, mal encaixe e nem adianta prosseguir com o artigo, pois será perda de tempo. Se sua placa for USB então troca-se o comando ‘lspci’ por ‘lsusb’ e note se ela aparecerá na relação.
teste 2) A segunda etapa envolve se os módulos(como chamamos drivers no linux) já foram carregados, se foram aparecerão no boot do seu sistema, como o boot do sistema é algo bastante rápido então peça um replay executando no terminal :
$ dmesg |grep bttv [ 13.276000] bttv: driver version 0.9.17 loaded [ 13.276000] bttv: using 8 buffers with 2080k (520 pages) each for capture [ 13.276000] bttv: Bt8xx card found (0). [ 13.276000] bttv0: Bt878 (rev 17) at 0000:04:02.0, irq: 19, latency: 32, mmio: 0xd3200000 [ 13.276000] bttv0: detected: Prolink Pixelview PV-BT [card=72], PCI subsystem ID is 1554:4011 [ 13.276000] bttv0: using: Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) [card=72,autodetected] [ 13.276000] bttv0: gpio: en=00000000, out=00000000 in=006fc0ff [init] [ 13.276000] bttv0: using tuner=5 [ 13.276000] bttv0: i2c: checking for TDA7432 @ 0×8a… not found [ 13.376000] bttv0: i2c: checking for TDA9887 @ 0×86… not found [ 13.408000] bttv0: registered device video0 [ 13.408000] bttv0: registered device vbi0 [ 13.408000] bttv0: registered device radio0 [ 13.408000] bttv0: PLL: 28636363 => 35468950 ..<6>usbcore: registered new interface driver gspca [ 13.440000] input: bttv IR (card=72) as /class/input/input3
Novamente, observe as linhas em negrito, elas indicam que o módulo para a placa de TV (bttv) foi carregado, inclusive o controle remoto (bttv IR).
teste 3)Se o controle remoto consta na relação então podemos investigar que evento do sistema controla tal placa, isto é necessário porque a partir do kernel 2.6.22 não mais é necessário o módulo ‘lirc_gpio’ para controlar esse modelo de controle remoto. Tudo é coordenado pelos eventos do sistema como se fosse um teclado, veja :
$cat /proc/bus/input/devices (...) I: Bus=0001 Vendor=1554 Product=4011 Version=0001 N: Name="bttv IR (card=72)" P: Phys=pci-0000:04:02.0/ir0 S: Sysfs=/class/input/input18 U: Uniq= H: Handlers=kbd event3 B: EV=100003 B: KEY=2c0814 100004 0 0 0 4 2008000 2090 2001 1e0000 4400 0 ffc
Agora que testamos e recolhemos toda a informação a respeito dessa placa, vamos coloca-la para funcionar.
Passo 2) Sua placa é mesmo card=72 ?
Acontece que o log do Linux indica que minha placa de tv foi autodetectada como card=72. E como não bastasse também noutros documentos como /usr/src/linux/Documentation/video4linux/bttv/ e também na página online :
Também identificam minha placa PixelView PlayTV MPEG2 como card=72.
Mas temos um vergonhoso problema, se eu usar card=72 minha placa de TV funcionará e sintonizará os canais, porém com problemas com o audio. Por essa razão identifiquei outra placa de TV que é semelhante a minha, mas não tem problemas de audio, é o card=37.
Passo 3) Meu sintonizador é realmente ‘tuner=5′ ?
Na mesma tabela abaixo há uma relação de sintonizadores e seus respectivos códigos :
Usando a tabela acima e realizando alguns testes determinei que meu tunner é 38. Como fiz os testes ? No passo seguinte eu explico.
Passo 4) Fazendo teste de sintonia de audio e video
Há também uma outra maneira de determinar quais são os sintonizadores para uma placa especifica (card=n), um script que varre todas as possibilidades e caso um sintonizador seja válido ele passa a sintonizar canais exibindo o audio e também o vídeo :
Execute no terminal :
sudo apt-get install scantv
E depois crie o script abaixo com permissão de execução :
#!/bin/bash
video="/dev/video0"
vbi="/dev/vbi0"
echo "testando :"
echo " video = $video"
echo " vbi = $vbi"
card_no=37
for tuner_no in `seq 1 45` ; do
sleep 3s
echo "Testando o card ${card_no}"
echo "Testando o tuner ${tuner_no}"
sudo rmmod bt878
sudo rmmod bttv
sudo rmmod tuner
sleep 1s
sudo modprobe bttv card=$card_no tuner=$tuner_no
#sleep 1s
#sudo modprobe bt878
#sleep 1s
scantv -n PAL-M -f us-bcast -c $video -C $vbi
done
Ao executar o script acima, voce sintonizará todos as bandas para o modelo de placa escolhido card=37 e ficará sabendo quais os sintonizadores (tunner=n) que realmente sintonizam canais. Vou logo dizendo que é cansativo, pois esse processo de ficar sentado na frente do monitor e ficar observando um tunner=n de cada vez e ver passar todos os canais com audio é demorado. Apesar disso, se sua placa for igual a minha, não tem nem o que testar, é tuner= 38.
As linhas em negrito, são linhas que podem ser modificadas, por exemplo, card=37 é o modelo correspondente a minha PixelView, mas não existe apenas um modelo de PixelView e voce poderá ser tentado a usar outro, incluindo até mesmo o card=72 que foi o que o Ubuntu reconheçeu automaticamente. Se voce tiver mais de uma placa de tv ou webcam, as variaveis video="/dev/video0" e vbi="/dev/vbi0" talvez tenham de ser alteradas.
Passo 5)Dando um ‘bypass’ no autoreconhecimento do ubuntu
Pois é, depois de determinar que o autoreconhecimento da placa de TV do Ubuntu falhou é hora de especificar no momento de boot que voce deseja usar parametros diferentes do autoreconhecimento da placa PixelView. Dê um ALT+F2 e execute :
gksu gedit /etc/modprobe.d/bttv
e coloque o seguinte conteúdo :
options bttv card=37 tuner=38 radio=1 remote=1
Passo 6) Alterar o xorg.conf
Não é obrigatório, mas me falaram que alguns programas que sintonizam canais de TV requerem o modulo "v4l" seja carregado no Xorg, assim dê um ALT+F2 e execute "gksu gedit /etc/X11/xorg.conf" e acrescente a linha "Load" na sua sessão "Module" :
Section "Module" Load "v4l" EndSection
Salve o arquivo e reinicie o seu sistema. Vou ser sincero com você, minha placa de sintonia de TV funciona com ou sem as alterações no xorg.conf, então ele não é determinante para o funcionamento da placa de TV.
Passo 7 ) Instalando programas
sudo apt-get install tvtime transcode
Passo 8) Capturando videos
Uma ajuda para compreender como funciona capturar videos a partir da placa de captura é esse artigo :
http://www.cefetsc.edu.br/~delmar/sl/slackware/artigos/mplayer-mencoder-chipset-bt8xx.html
Vamos a um exemplo de como capturar e gravar um .avi a partir do seu seletor de canais :
mencoder tv:// -tv driver=v4l2:input=0:normid=4:channel=13:\ chanlist=us-bcast:width=352:height=240:contrast=-25:\ saturation=-25:brightness=-0:\ device=/dev/video1:adevice=/dev/dsp \ -oac mp3lame -lameopts cbr:br=64 \ -ovc xvid -xvidencopts bitrate=800 -o gravacao_canal_13.avi
Para gravar o audio eu tenho que ajustar o mixer do gnome de acordo, e não é tão simples quanto parece.
Problemas encontrados :
Se eu usar o card=72 que é o indicado pela documentação e tal como foi reconhecido pelo Ubuntu, mesmo com as conexões de entrada de audio estando corretas eu tenho problemas com o volume - não há som- mesmo fuçando no mixer do volume do GNOME. Apesar disso, o controle remoto funciona e sintoniza os canais normalmente, apenas o audio não funciona. Testei várias combinações de tuner com card=72 e todas elas apresentaram o mesmo problema, por essa razão, troquei card=72 por card=37 e agora funciona bem, só que o modelo card=37 é desprovido de controle remoto. Assim, mesmo tendo o controle remoto, sou obrigado a despreza-lo.
Na realidade, posso usar card=72 e tuner=38 e a principio o som não irá funcionar, mas voce pode resolver temporariamente esse problema mudando o audio para ‘mono’. No tvtime tem de ir em configuracao de entrada->modo de audio preferido-> e mudar de mono para estereo e depois para "mono", e deve repetir toda vez que mudar de canal, sim, é uma chateação. Por isso a solução mais fácil é usar card=37 e viver sem o controle remoto.
Programas como o TVTime vem pré-ajustado para usar sempre o /dev/video0, as vezes é um problema se voce tiver mais de uma placa de TV ou webcam porque /dev/video0 poderá não corresponder a placa de Video. Para resolver esse problema voce tem que usar parâmetros do tvtime como ‘tvtime -d /dev/video1′ se sua placa de TV estiver neste endereço.
Conclusão
A receita de bolo aí acima é para minha placa de TV funcionar, estou compartilhando com vocês e quem sabe isso possa ajudar bastante gente. Mas, não espere que eu responda se não funcionar contigo. Normalmente quando posto algum artigo sobre funcionamento de hardware, chovem comentários me perguntando onde ou como fazer funcionar também o modelo XYZ. Da ultima vez que postei por exemplo como fazer uma epson CX700 funcionar no Linux teve gente até pedindo onde conseguia CD de instalação para windows. Por essa razão, não espere nada de mim, mas se precisar de ajuda eis uma lista de discussão que poderá procurar : https://lists.ubuntu.com/mailman/listinfo/ubuntu-br












