27 julho 2005

Mythtv

Descobri mais algumas coisas que tenho que fazer no Mythtv. O grabber não traz o horário correto de um programa que atravessa a meia-noite. Isso eu me lembro que era uma pendência, já que o site onde eu busco os dados só tem o horário de início de um programa e eu repito o horário de início do programa seguinte no horário de término. Mas, se o programa em questão for o último do dia eu deveria buscar o horário de início do primeiro programa do dia seguinte e isso eu não fiz. Coloquei meia-noite no término. Além disso, não há garantia que o programa termina naquele horário, pois a emissora pode ficar algum tempo fora do ar. Enfim, vou ter que arrumar tempo para continuar o desenvolvimento do grabber (também falta buscar as sinopses dos programas).

Mas ontem eu descobri algo interessante. Lembra que eu disse que o grabber não estava funcionando no HTPC? Não era bem assim...

Segunda-feira, quando eu fiz mais testes, consegui inserir a programação de segunda e baixar a de mais 10 dias (mas não estava conseguindo inserir na base de dados tudo de uma vez). Tentei, então, baixar só a programação de terça (já tinha passado de meia-noite) e inserir na base. Funcionou. O mythfilldatabase, ao que parece, só consegue inserir um dia por vez.

Ontem fui, então, baixar os 10 dias, um de cada vez. O grabber não trazia quase nada. Só o primeiro programa de alguns canais. Aí fui no escritório e tentei baixar lá. Também não veio quase nada. Possível problema: timeout! Em dias de muito tráfego na rede, o grabber não funciona! E aí? Como resolver isso? Alguma sugestão?

Aproveitei o embalo e me distraí um pouco com o Frozen Bubbles e o Tux Race... :-)

25 julho 2005

A Saga Continua...

Conforme prometido, na semana passada tivemos fortes emoções nas tentativas de configurar o Mythtv. Mas as coisas estão, finalmente, caminhando!

Depois que descobri o modelo correto da placa e do tuner, resolvi configurar os canais (já contei essa parte? então vale como "cenas do episódio anterior"). Como não temos um grabber xmltv decente para os canais do Brasil, tentei fazer na munheca, mesmo. Sem chance. O Mythtv é muito mal documentado. Simplesmente não conseguia fazer as coisas funcionarem.

Mais alguns passeios pelo fórum e pelo wiki e descobri que uma das opções do mythfilldatabase lê um arquivo de configuração do xawtv (que estava funcionando) e insere os canais no banco do Mythtv. Rodei. Bateu, pegou! :-)

Viva! Agora consigo sintonizar os canais que a TVA deixa abertos no cabo da antena! Só com um detalhe (sempre tem um...): assim que a TV é selecionada, o som fica mudo. Mudando de canal, o som aparece. Menos mal...

Só que eu não estava nada contente com o consumo de CPU. Estava em 100%. Dependendo do tipo de programa, a imagem ficava pulando muito. Desenhos animados, então, pareciam histórias em quadrinhos interpretadas. Horrível.

Voltando ao fórum, descobri que ativar a aceleração gráfica resolveria esse problema. Só que o script de instalação dos drivers nVidia não está funcionando legal na minha máquina. Ele até instala tudo direitinho, só que assume que você está usando um monitor de última geração. Deixa as freqüências altas demais para meu velho SyncMaster 3.

Depois de fuçar um pouco no XF86config-4 (acho que o arquivo é esse), resolvi baixar a resolução para 640x480. Fiquei contente com o resultado. Tenho splash screen da nVidia quando o X sobe, tenho aceleração gráfica e tenho mais de 30% de cpu em "idle" quando estou vendo TV. Sem pulos, imagem limpa! Para conseguir mais, só quando for possível ativar a compressão por hardware da placa de TV. Mas isso, até onde eu consegui descobrir, é deficiência do driver...

Mas eu queria mais (e ainda quero...). Fui pesquisar sobre o lirc. Tem um howto no wiki. Segui, ajustando para usar o sensor da placa de captura (já tinha contado isso?). Descobri uma coisa muito importante, que derrubou alguns dos meus planos:

O lirc foi criado para ler pulsos de uma porta serial e transformar esses pulsos em um código (keystrokes) inteligível pelos programas compatíveis. Então, ele tem alguns processos "independentes". Primeiro, ele lê a serial e identifica o padrão do sinal. Aí, através de um arquivo de configuração, traduz esse padrão em um comando inteligível, tipo "volume+" ou "ch-". Esse comando, através de outro arquivo de configuração, é transformado num comando (ou keystroke) que o software que está sendo controlado entenda, tipo "V" ou "seta para baixo".

Pois bem, quando você opta por usar o sensor de uma placa de TV, a primeira parte (traduzir o sinal em comando para o lirc) é feita por hardware. A placa já entrega ao lirc o comando, e não o sinal. A princípio, isso seria uma grande vantagem, por tirar do software o peso dessa interpretação. Só que cria uma restrição que eu não desejava: a placa só entende sinais do controle remoto que veio com ela. Para usar um controle remoto universal (minha intenção desde o início do projeto), ele tem que ser compatível com a placa (duvido que exista) ou "inteligente" (tem que aprender a transmitir como o controle original). Um investimento que estava totalmente fora do meu orçamento. E o controle da PixelView é muito fraquinho para o Mythtv. Tem poucos botões e nenhum grupo em formato de diamante. Uma pena...

De qualquer forma, resolvi configurar o controle. E descobri que essa é uma tarefa que exige mais planejamento do que parece. Escolher que botão é melhor para cada função é difícil, especialmente quando se tem menos botões do que se gostaria. Mas cheguei a uma solução. E agora tenho controle remoto "total" sobre o Mythtv, o mplayer e o xine!

Próximo passo: a grade de programação. Não sei por que cargas, a rede ainda não está legal no meu HTPC. Eu consigo fazer ssh do escritório para ele, navegar na internet com o Mythbrowser e até baixar a previsão do tempo. Mas não consigo mapear um compartilhamento NFS do escritório nem baixar a grade de programação com o meu script. Só no micro do escritório.

Então, para testar, "apelei": gerei um arquivo xmltv no escritório para os canais que tenho no HTPC, queimei num CD-RW e levei para a sala. O mythfilldatabase (outra vez ele) tem uma opção para ler um xmltv e inserir na grade. O problema é fazer com que ele entenda que os canais já estão cadastrados. Ele insiste em criar novos canais.

Depois de uns ajustes, consegui fazer o guia funcionar, ainda em testes. É muito legal! Quando você muda de canal, ele mostra o nome do programa que está sendo exibido. E o guia tem dúzias de opções de localização e gravação. FUNCIONA! Só falta automatizar a carga.

Resolvi testar uma gravação. Abri o guia, selecionei um programa de meia hora e apertei a tecla "Record" do controle remoto. Ele marcou o programa para ser gravado. Deixei o micro ligado e voltei mais tarde. Ele gravou! Só tem um detalhe: lembra do problema que eu citei lá em cima sobre o som ficar mudo até que você mude de canal? Pois é: ele gravou sem som! :-(

Já li sobre esse problema no fórum, mas ontem estava muito tarde para pesquisar. Então fica para o próximo capítulo...

Coisas que ainda quero fazer:

- Automatizar a grade de programação;
- Acertar o RTC automaticamente (o relógio da placa adianta...);
- Configurar o joypad de PlayStation para os jogos;
- Instalar mais jogos e emuladores;
- Colocar sites nacionais de notícias no Mythnews;
- Criar um bookmark útil no Mythbrowser;
- Começar a gravar os programas que não consigo assistir;
- Arrumar tempo para assistir os programas que eu gravar... ;-)

Não perca os próximos capítulos!

19 julho 2005

Capítulo Duplo!

Faz tempo que não escrevo sobre o Mythtv, então aí vai um capítulo "duplo":

No final de semana passado (09-10/07) resolvemos colocar a TV no quarto das crianças. Com ela foi o decodificador da TVA. Aí eu tive que fazer alguma coisa com aquela placa de TV que tenho no HTPC e que estava totalmente sem uso. Antes disso, peguei um monitor velho que tinha em casa (Samsung SyncMaster 3) e pluguei no micro. Espantoso! Não precisei alterar nenhuma configuração. A placa nVidia está trabalhando em "twin" e não tive nenhum problema (nessa parte...).

Aí fui atrás de fazer funcionar a Pixelview PlayTV MPEG2. Ainda bem que só agora estou escrevendo, ou eu iria xingar muito essa placa. Procurei em todo canto da internet e não achei nada consistente sobre como configurá-la no Linux. Nos fóruns do Mythtv, então, ela é solenemente ignorada.

Como eu já comentei, cada um diz para configurar de um jeito. E ela não existe (explicitamente) nos arquivos CARDLIST do driver bttv. Aí li em algum post para procurar pelo modelo dos circuitos integrados. Arranquei a danada do micro, anotei tudo e espetei de volta no lugar. Nem assim. Mas nem tudo estava perdido...

Um adesivo atrás da placa dizia seu modelo (não me lembro agora qual é). Busquei por esse número e achei alguns rumores que deveria configurar o driver como type=72. Eu já tinha tentado isso, mas vamos lá. Depois de um boot, fui olhar as mensagens com o dmesg. Legal. Tava tudo lá: reconheceu a placa, criou o /dev/video0, /dev/vbi (ainda não sei o que é isso), /dev/radio (uau!) e /dev/remote. Melhor que eu esperava.

Pluguei a saída AV do videocassete na entrada auxiliar da placa e na placa de som. Cara, o troço funcionou! A imagem ficou tosca, engasgada, mas eu consegui assistir TV e video. Fui ver no top o que estava acontecendo e descobri que o Mythtv usa dois processos pesados para apresentar TV: um que captura o que vem da placa, codifica em DVB e grava em disco e outro que lê do disco, decodifica e exibe o programa. Em alguns momentos, um ficava esperando o outro. Pelo que eu entendi, ele não está usando o codificador MPEG da placa, ou gravaria direto no HD. Mas já tivemos alguma diversão.

Deixei quieto durante toda a semana. No domingo foi hilário: sábado mostramos para minha filha como parar um filme gravado no HD para fazer alguma coisa (no caso dela, tomar banho) e depois continuar. Só que no domingo de manhã eu estava vendo o Auto Esporte e ela pediu um copo de leite. Falei "espera um pouco, que eu estou vendo TV". Aí ela replicou: "não dá para parar?" Foi quando caiu minha ficha: DÁ! Apertei o pause, fui atender minha filha e continuei a ver o programa de onde tinha parado. A Globo já estava transmitindo o Esporte Espetacular e eu tava vendo Auto Esporte. Como essa liberdade é boa! :-)

Mas ainda faltava uma coisa: fazer funcionar o seletor de canais.

FIM DO PRIMEIRO CAPÍTULO

Na segunda (ontem), recebi uma mensagem do Fórum Boa Dica, com um link para este artigo:

http://www.boadica.com.br/layoutdica.asp?codigo=450

Legal! Então quer dizer que o driver da Pixelview para Windows é um lixo? Fizeram outro driver para Windows, também? Quem sabe tem alguma coisa útil...

E tinha! Apesar do artigo falar de outra placa (PlayTV PRO), o sintonizador é o mesmo: tuner=16.

Cheguei em casa e fui tentar. Eureka! Todos os canais sintonizados com ótima imagem (no xawtv). Só faltava o som.

Aí descobri algumas coisas legais sobre essa placa. Ela tem dois conjuntos de 4 pinos. Em cada um deles se encaixa um cabo de audio de CD. O distribuidor dela no Brasil tinha me informado que era uma saída auxiliar, para ligar em placas de som com entrada auxiliar interna. Minha mobo tem essa entrada. Então eu tinha espetado um cabo lá. Aí, no aumix descobri uma entrada chamada Line1 (Line é a entrada "principal" da placa), além de uma entrdada "video". Aumentei o volume e... nada! Liguei o cabo de audio do videocassete na entrada de audio da Pixelview. Aí sim, o audio do video apareceu nas caixas. Mas não o dos canais sintonizados. Eu mudava de canal e o audio sempre era o do canal sintonizado no video.

Resolvi tentar a outra saída interna. Agora, sim! Um dos conectores é um pass-thru da entrada de audio. O outro é a saída de audio do tuner. Então no xawtv estava tudo funcionando legal.

Mas no Mythtv ainda estava sem audio. Na verdade, nem os canais ele consegue sintonizar. Visitei uma penca de fóruns, mas ainda não descobri a solução. Acho que vou ter que mesclar algumas sugestões para tentar fazer funcionar. Resolvi deixar para mais tarde...

Aí fui mexer no lirc. Peguei um tutorial, removi o lirc que veio com o KnoppMyth, baixei a versão recomendada, configurei para usar a entrada IR da Pixelview, compilei, instalei (tive que pesquisar para descobrir como fazer isso - todos os tutoriais dão exemplos usando a serial) e... FUNCIONA!

Quer dizer, um programa de teste que acompanha o pacote consegue reconhecer os sinais enviados pelo controle que acompanha a placa. Agora falta configurar para o Myth (e o mplayer, xine, cdplay, etc...) reconhecer esses comandos.

Enfim, pela primeira vez eu realmente acho que é só uma questão de tempo para fazer tudo funcionar direito. Eu estava até pensando em repassar essa placa...

Nos próximos dias vou tentar acertar esses detalhes. Pelo jeito, a semana vai ser de fortes emoções! ;-)