redireciona o som (microfone) via ssh, como telefonar via ssh?

45

Como posso redirecionar o microfone de um computador para ouvi-lo em outro computador via ssh? Qual é o dispositivo certo ou qual é a linha de comando correta?

Alguns anos atrás, era fácil e divertido redirecionar o som de um microfone remoto para um computador local ou vice-versa - era um telefone fácil. Existem alguns instruções , mas nenhuma delas parece funcionar em novas distribuições de computadores / linux. Eu nem tenho um /dev/audio no meu computador (Fedora 17).

Eu acho que pode ter algo a ver com o áudio de pulso. Ou eu não preciso de áudio de pulso para esse telefone simples? Qual é o dispositivo certo?

Eu posso ver todos os meus dispositivos de som quando inicio alsamixer e pressiono a tecla F6. Mas eu não sei quais são os dispositivos na minha árvore /dev .

    
por erik 25.02.2014 / 21:05

2 respostas

52

OK, acabei de encontrar e ainda funciona! Realmente engraçado. Você não precisa de aplicativos sofisticados, mensageiros instantâneos ou afins. Com este comando, você envia seu áudio para o host remoto.

arecord -f cd -t raw | oggenc - -r | ssh <user>@<remotehost> mplayer -

Ou se você gosta do ffmpeg melhor

ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
    | ssh <user>@<remotehost> mplayer - -idle -demuxer ogg

Fonte: link

Se você quer um telefone de verdade:

O comando acima foi apenas para uma direção. Para a outra direção, você deve iniciar outra sessão ssh. Então, para receber o que o outro usuário diz para você, use

ssh <user>@<remotehost> 'arecord -f cd -t raw | oggenc - -r' | mplayer -

Ou se você gosta do ffmpeg melhor

ssh <user>@<remotehost> ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
    | mplayer - -idle -demuxer ogg

onde hw:3 é o alsadevice que você deseja registrar (encontre-o com arecord -l ; você também pode usar um nome de dispositivo, encontre isso com arecord -L ; em muitos casos, basta usar o dispositivo listado com o seguinte comando: arecord -L | grep sysdefault ).

Atualizar

Em 2018 nos meus sistemas Linux Fedora ffmpeg não tem suporte a alsa incluído (parece ser o mesmo em sistemas RaspberryPi com Raspbian). Mas há uma solução simples sem recompilar. Apenas canaliza a saída do arecord (o alsarecorder) para o ffmpeg:

ssh <user>@<remotehost> 'arecord -f cd -D plughw:2 | ffmpeg -ac 1 -i - -f ogg -' \
    | mplayer - -idle -demuxer ogg

Você obtém o dispositivo de entrada plughw:2 localizando seu dispositivo na saída do seguinte comando:

arecord -l

No meu caso, vejo card0 e card2 (minha webcam que tem um microfone). Então escrevi plughw:2 para card2 .

Atualização 2 (sem o mplayer)

Se você não tiver ou gostar de mplayer , mas ffplay (que faz parte de ffmpeg ), use:

  • wave-audio descompactado (alta largura de banda, uso de cpu muito baixo no lado da gravação)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • comprimido com flac (baixa largura de banda, baixo uso de cpu no lado da gravação)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • comprimido com ogg (largura de banda muito baixa, alto uso de cpu no lado da gravação)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    
por 25.02.2014 / 21:16
2

A resposta de Erik funciona bem, mas usando como é, usando flac ou oggenc , há um atraso significativo.
Uma solução é adicionar -cache 256 ao comando mplayer , assim ficaria da seguinte forma:

ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | mplayer -cache 256 -

Outra coisa a mencionar é que hoje em dia praticamente todas as distribuições modernas usam o PulseAudio, que controla o dispositivo de hardware, portanto, usar plughw:2 falhará se o PulseAudio estiver em execução.
Geralmente, default deve funcionar bem e usar o PulseAudio, onde você pode usar pavucontrol ou similar para selecionar a fonte de entrada desejada usando o PulseAudio.

Isso tornaria o comando da seguinte forma:

ssh <user>@<remotehost> "arecord -f cd | oggenc -" | mplayer -cache 256 -

MAS: Isso introduz um atraso. No meu caso, é em torno de oito segundos. Isso é terrível.

A solução é muito mais simples que qualquer outro comando:

ssh <user>@<host> "arecord -f S16_LE -r 36000" | aplay

É isso. Isso está usando quase nenhuma CPU (0,1% de acordo com htop ). Está usando ~ 60KB / s de largura de banda para mim.

Se você quiser som estéreo: ssh <user>@<host> "arecord -f cd" | aplay
Útil apenas se você tiver um microfone estéreo, aumenta a largura de banda para ~ 150KB / s para mim. (Uma vez que também aumenta a taxa de amostragem para 44100Hz).

Mais informações sobre taxa de amostragem ( -r ) e taxa de bits (afetadas por -f ) podem ser encontradas aqui .
Basicamente: Quanto mais baixo você for, pior será a qualidade, mas menor será a largura de banda necessária.

Esta solução é totalmente compatível com o PulseAudio, você pode controlar o dispositivo de saída, o volume e mais usando pactl ou o aplicativo pavucontrol GUI:

    
por 15.11.2018 / 06:43