Como transmitir minha saída de áudio GNU / Linux para dispositivos Android via WI-FI?

39

Quero transmitir minha saída de áudio pela rede (Wi-Fi) para meus dispositivos Android. Não estou procurando uma solução de streaming de música / vídeo, mas transmitiria qualquer saída de áudio da minha área de trabalho GNU / Linux para o meu Android como um fone de ouvido bluetooth.

Meu desktop GNU / Linux é o Debian Wheezy e o som é fornecido pelo pulseaudio.

Eu tentei o módulo raop do Pulseaudio (e o habilitei em paprefs) + o aplicativo AirBuddle do Android, mas o áudio não é transmitido (o pulseaudio parece conectar-se ao AirBuddle, mas o som não é reproduzido, há uma falha de conexão em alguns softwares, em alguns outros softwares, o som fica preso).

semente
fonte

Respostas:

27

Existe uma solução muito simples porque o PulseAudio já possui todas as ferramentas necessárias.

  1. Obtenha o nome do seu dispositivo de origem com o comando pactl list | grep Name
  2. Crie o seguinte script chamado pashare:

    #!/bin/sh
    case "$1" in
      start)
        $0 stop 
        pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=<source_name_here> record=true port=8000
        ;;
      stop)
        pactl unload-module `pactl list | grep tcp -B1 | grep M | sed 's/[^0-9]//g'`
        ;;
      *)
        echo "Usage: $0 start|stop" >&2
        ;;
    esac
    
  3. Faça algumas verificações e preparações (para permitir a execução do script e verifique se a porta foi aberta com êxito):

    chmod 755 pashare
    ./pashare start
    netstat -nlt | grep 8000 
    telnet 127.0.0.1 8000
    
  4. Baixe e instale o PulseDroid.apk

  5. Inicie o aplicativo no seu telefone; defina o endereço IP para o seu computador e a porta para 8000.

PS Você também pode consultar esta página do Wiki para obter informações gerais sobre o streaming de rede Pulseaudio e esta página sobre o streaming RTP. Não espere muito da transmissão de áudio bruto por WiFi; são necessárias enormes quantidades de largura de banda. Mesmo com um AP / roteador sem fio de ponta com um sinal poderoso, não consegui obter mais do que áudio gaguejante. Sua melhor aposta é provavelmente configurar um servidor de mídia adequado (como o Rygel, que funciona bem com o Pulseaudio) para transcodificar o áudio bruto para algo como MP3 e transmitir em vez disso.

AlexAndersan
fonte
7
Isso também funciona perfeitamente com este aplicativo para Android: Simple Protocol Player play.google.com/store/apps/… Observe que o padrão é taxa = 44100, no entanto, é recomendável usá-lo.
Janes
11
Apenas para esclarecer: a saída de pactl list sources short é melhor encontrar o número do parâmetro de origem.
wolfmanx
4
usando pactl list | grep "Monitor Source"mostra fontes mais relevantes para mim.
MarkRoxor #
18

Você pode usar o VLC para servir um fluxo MP3 da saída do pulseaudio via HTTP.
A principal vantagem é que você não precisa instalar nenhum software especial no seu dispositivo remoto; basta um navegador da web (ou reprodutor de música) para reproduzir o fluxo. A desvantagem é que é apenas áudio, alguns segundos atrasados ​​o tornam inútil para vídeos

  1. Encontre o nome da saída do pulseaudio com:

    pactl list | grep "Monitor Source" 
    
  2. Inicie o servidor http VLC, substituindo XXXX pelo seu nome de saída:

    cvlc -vvv pulse://XXXX --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
    
  3. Se necessário, encontre seu endereço IP local com ifconfig

  4. No seu dispositivo remoto, aponte o navegador (ou aplicativo de streaming de áudio) para:

    http://your.local.ip.address:8888/pc.mp3
    

Nota: O fluxo não é afetado pelo volume definido no servidor, a menos que você o silencie totalmente. Se necessário, você pode manter o nível um pouco acima de 0 para ouvir apenas o dispositivo remoto.


As duas primeiras etapas combinadas em uma por polynomial_donut :

cvlc -vvv pulse://$(pactl list | grep "Monitor Source" | awk '{print $3}') --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
wilks
fonte
11
impressionante! Há um atraso de 3 segundos, mas estou feliz com esse pequeno truque até encontrar aquele maldito cabo. Eu provavelmente vou ter que comprar outro ...
Slabo
@Slabo bom ponto, por algum motivo, eu assumi erradamente que o OP só queria transmitir música.
Editou
2
Um one-liner em vez das duas primeiras linhas: cvlc -vvv pulse://$(pactl list | grep "Monitor Source" | awk '{print $3}') --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
polynomial_donut
O fluxo é diretamente afetado pela configuração de volume para mim. Eu apenas conecto meus fones de ouvido para impedir que o som saia do laptop.
Rolf
A propósito, como faço para impedir que o atraso dure cerca de meia hora?
Rolf
9

Para transmitir a saída de áudio via wifi para o seu telefone Android, você precisa instalar o software do servidor, que envia áudio, no PC e o software cliente no dispositivo Android. As opções disponíveis são

Alto-falante sem fio de áudio WiFi

Execute o aplicativo WiFi Audio Android e pressione Iniciar, você verá o endereço IP do dispositivo móvel na parte inferior depois que o aplicativo Windows / Linux for executado, coloque o endereço IP do dispositivo móvel no campo Endereço IP e pressione Iniciar no aplicativo para PC. Agora todo o áudio que sai do PC será enviado para o dispositivo móvel e você ouvirá o áudio no dispositivo móvel.
Baixar

SoundWire

Sem fio transmitir qualquer música ou áudio do seu PC para o seu telefone Android, tablet ou outros PCs
Home page Veja também

Outros links úteis
XBMC android SE

totti
fonte
SoundWire fica por 1-2 seg
Gaurav Gupta
@gauravgupta Sem atrasos, se você escolher um tamanho de buffer menor. Tente também usar a compactação. Isso funcionou muito bem para mim.
raacer
você pode colocar o link para download de aplicativos para PC do WiFi Audio aqui?
seyed
11
O WiFi Audio Wireless Speaker foi removido do github e a versão compilada nos fóruns é relatada pelos usuários como um malware. Seja cuidadoso! O Soundwire também parece suspeito, pela maneira como é distribuído.
Genom 25/11
0

Para aqueles que usam o Soundwire e enviam wifi do seu laptop ou PC, use o ifconfig CERTIFIQUE-SE DE USAR O ENDEREÇO ​​IP CORRETO. Isso ainda funciona até hoje, mas a maioria das distribuições Linux precisa de um segundo adaptador wifi para enviar o wifi e você precisa usar aquele ao qual seu Android está conectado. não aquele que recebe internet. Aquele que está enviando para fora.

ie -> Se você estiver usando o adaptador wifi "A" para conectar-se à Internet e "B" para enviar Wi-Fi de "A", conecte o SoundWire no Android a "B" NÃO "A".

O SoundWire NÃO se conectará ou será transmitido se você se conectar ao adaptador que não estiver enviando o wifi, portanto, insira seu endereço IP no (s) aplicativo (s) Andoroid (s) de acordo, usando o comando terminal ifconfig adequadamente.

Sim, existe um atraso, mas este aplicativo, o SoundWire, é o sistema mais simples "multi-conectar ao ip e esquecer" por aí. Não há menus malucos para percorrer. E sim, ele aceita mais de uma conexão. Eu usei 2 no outro dia. Anexa o número de dispositivos conectados a ele na janela principal do dispositivo que está enviando a transmissão.

Usando isso pessoalmente como um sistema de rádio wifi com várias salas / curta distância em minha casa até hoje.

Apreciar.

Roiikka
fonte
-4

Uau, isso é velho ...

De qualquer forma, use o VLC. GUIs bonitas por todo o caminho.

  • Inicie o VLC na sua área de trabalho.
  • Hit Stream, selecione o arquivo (adicione quantos arquivos quiser), hit stream.
  • 'Próximo' se estiver tudo correto.
  • Para Novo destino, selecione "http" (ou o que você quiser usar). Selecione Exibir localmente se quiser reproduzi-lo na máquina da qual você está transmitindo também. Os próximos diálogos são todos auto-explicativos.

Inicie o VLC no seu dispositivo Android. Clique no ícone ao lado do botão de pesquisa (a seta apontando para o ponto). digite http://<IP ADDRESS O OF THE MACHINE RUNNING VLC>:8080/para mim isso foihttp://xxx.ca:8080/

Testado e funcionando. Agora, alguém poderia fazer isso no tempo antigo de 9 de junho de 13? Talvez, mas estou com preguiça de verificar os logs de confirmação do VLC;)

Zeroedout
fonte
3
Ele não está procurando uma solução de streaming de música / vídeo.
Cristian Ciupitu