ubalab > MidiaLivre > TransmiPi

Transmipi

Criar uma estacão de transmissão de áudio via icecast com uma Raspberry Pi e uma placa de som USB. Todos os scripts estão disponíveis no repositório no gitlab.

Responsável: efeefe

Documentação

Retomando o projeto em maio de 2016.

16/05/16
  • Instalei o Dietpi em uma Raspi 2 com placa de som USB.
  • Assegurei-me que a interface de rede estava pegando IP automático por DHCP.
  • apt-get install darkice. Trouxe junto um monte de dependências.
18/05/16

Em experiências prévias com estações que se conectavam automaticamene, uma das primeiras questões que enfrentei foi descobrir qual o endereço IP da estação quando pega via DHCP. Aqui tem algumas dicas de como encontrar esses endereços. Fiz um script bash para enviá-los para o servidor da gaivota (e adicionei a chave SSH da Pi ao servidor da gaivota para que isso vai funcionar).

Encontrei um pequeno problema: uma vez que tinha enviado os arquivos txt para o servidor, não conseguia substituí-los. Percebi que o horário na Pi estava errado, o que pode ter sido o motivo de problemas com o rsync. Rodei o dietpi-config para mudar o timezone, e agora aparentemente está ok. O script já está no gitlab.

Aproveitei esta dica para decidir como rodar o script. O mais interessante me pareceu colocar no /etc/network/interfaces, logo abaixo da definição da interface:

allow-hotplug eth0
iface eth0 inet dhcp
  up /usr/local/bin/informa-ips

Acho que não funcionou automaticamente. Depois voltarei a isso. Por enquanto, fazendo testes com o darkice. Usei novamente o comando dietpi-software para instalar o ALSA (e aproveitei para mandar o FFMPEG também, mesmo que não use por enquanto pode vir a ser útil). Então peguei um arquivo de configuração do darkice que costumo usar para outros projetos (tem um exemplo razoável aqui) e comecei um stream. Único senão: a placa USB barata que estou usando não deixou usar os dois canais. De todo modo, vou testando para ver quantas horas ele permanece sem problemas…

Stream funcionando ok, mas teve alguns buffer overruns (como já tive em outros testes). Ainda tenho a dúvida se isso acontece por causa da própria placa de som, de instabilidade na rede, ou das restrições de clock da própria Pi. Para experimentar sobre essa última, usei o comando dietpi-config para fazer um overclock médio. Testando novamente.

Ainda com bastante buffer overrun. Pensando em deixar de lado o darkice do repositório e fazer uma versão compilada. Encontrei um tutorial aqui.

20/05/16

Aproveitei a ocasião do Workshop sobre Dados Georreferenciados da plataforma Ciência Aberta para testar a TransmiPi. Primeiro problema: a internet não estava funcionando no auditório da Escola Tancredo Neves. Por sorte havia levado a EstacaoRedeMovel, que andava parada desde o ano passado mas funcionou razoavelmente.

O script para informar o IP não está rodando, mas através da interface web de administração do roteador wifi da estação, consegui verificar quais eram os clientes que haviam pedido IP por DHCP e consegui assim entrar na Pi. Rodei o darkice, e o stream começou. Estava usando um microfone ambiente, só para testes mesmo. Testei algumas vezes com o mplayer e consegui escutar, mesmo com todas as limitações da qualidade do áudio e da conexão. Usei o curl para gravar um pedaço no meu computador. Consegui um arquivo de 4.1Mb, com duração de menos de sete minutos:

Depois, a conexão 3G caiu. Ainda conseguia acessar a Pi pela rede local, mas não consegui mais fazer a EstacaoRedeMovel conectar-se. Talvez algo a ver com a franquia diária de dados do plano pré-pago de 3G que estava usando com ela. De todo modo, para todos os efeitos a transmissão funcionou.

Nos próximos dias, temos uma oportunidade real para testar a Transmipi em um evento grande. Para isso, preciso fazer o darkice iniciar automaticamente, configurar a conexão direto pelo modem 3G USB, e talvez usar o noip para descobrir o IP da conexão (apesar de achar que a Vivo não vai me deixar conversar direto com ela, remotamente).

25/5/16
  • Instalando o cliente no-ip. Não está no repo da Dietpi, mas esse tutorial resolve. Configurei um domínio grátis, mas só depois do 3G funcionar vou saber se a operadora me deixa acessar a máquina de fora.
  • Quando inicio a Pi com o modem 3G, ele está em modo mass storage. Preciso então rodar o usb_modeswitch. Depois de penar um pouco, consegui encontrar um tutorial que funciona com o meu modelo (Huawei E303).
  • Uma vez modificado o modo USB para poder acessar o modem, precisei encontrar uma solução para conectar à rede 3G. Usei o Sakis3G. Encontrei também um tutorial sobre como rodar o Sakis automaticamente a cada boot. Precisei dos dados da operadora para fazer funcionar.
  • Voltando ao Darkice: simplesmente habilitar o daemon em /etc/defaults/darkice não surtiu efeito. Tentei seguir os passos descritos aqui, mas não deram certo. A correção do script rolou, então o comando service darkice start funciona. Mas o início automático não.
27/5/16

A ideia era usar a Transmipi para fazer o stream do Sampa Jazz Fest, na Praça da Baleia. A ausência de internet na praça atrasou os testes. Eu usaria um modem 3G emprestado, já que o meu não tem sustentado a conexão por muito tempo. Mas só consegui pegar o emprestado na noite de quinta-feira, quando o primeiro show já começava. Vai ficar para outra ocasião, infelizmente.

28/5/16

De volta à bancada. Inseri um cartão wifi, configurei para pegar um IP estático na minha rede doméstica. Entrei na PI e comecei a transmissão, a partir da saída analógica de uma mesinha de som conectada ao meu laptop e com um microfone plugado. A transmissão funcionou relativamente bem (engasgou um pouco nos primeiros minutos, mas depois ficou estável). Tinha um lag de cerca de trinta segundos até sair do outro lado. Mas o som estava horrível, com um ruído de fundo bem agudo, o tempo inteiro. Agora preciso isolar esse problema. Minha primeira suspeita é a placa de som USB, dessas baratinhas sem marca.

TODO

  • Conectar a Pi diretamente pelo 3G.
  • Fazer o darkice rodar automático (daemon ou script?)
  • Descobrir o IP e testar se consigo acessar.

Arquivo

Sessões de trabalho: