reindirizzare il suono (microfono) via ssh, come telefonare via ssh?


48

Come posso reindirizzare il microfono di un computer per ascoltarlo su un altro computer tramite ssh? Qual è il dispositivo giusto o qual è la riga di comando giusta?

Alcuni anni fa è stato facile e divertente reindirizzare l'audio da un microfono remoto a un computer locale o viceversa: era un telefono facile. Ci sono alcune istruzioni per farlo, ma nessuna sembra funzionare su distribuzioni di computer / Linux più recenti. Non ho nemmeno un /dev/audiosul mio computer (Fedora 17).

Penso che potrebbe avere qualcosa a che fare con l'audio a impulsi. O non ho bisogno di audio ad impulsi per questo semplice telefono? Qual è il dispositivo giusto?

Posso vedere tutti i miei dispositivi audio all'avvio alsamixere premere il tasto F6. Ma non so quali siano i dispositivi nel mio /devalbero.

Risposte:


55

OK, l'ho appena trovato e funziona ancora! Molto divertente. Non hai bisogno di applicazioni fantasiose, di messaggistica istantanea o simili. Con questo comando invii l'audio all'host remoto.

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

O se ti piace meglio ffmpeg

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

Fonte: http://shmerl.blogspot.de/2011/06/some-fun-with-audio-forwarding.html


Se vuoi un vero telefono:

Il comando sopra era solo per una direzione. Per l'altra direzione devi iniziare un'altra sessione ssh. Quindi, per ricevere ciò che l'altro utente ti dice , usa

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

O se ti piace meglio ffmpeg

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

dove si hw:3trova l'alsadevice che vuoi registrare (trovalo con arecord -l; puoi anche usare un nome di dispositivo, trovalo con arecord -L; in molti casi puoi semplicemente usare il dispositivo elencato con il seguente comando :) arecord -L | grep sysdefault.

Aggiornare

Nel 2018 sui miei sistemi Fedora Linux ffmpegnon è incluso il supporto alsa (sembra essere lo stesso sui sistemi RaspberryPi con Raspbian). Ma esiste una soluzione semplice senza ricompilazione. Basta inviare l'output di arecord (alsarecorder) a ffmpeg:

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

Ottieni il dispositivo di input plughw:2trovando il tuo dispositivo nell'output del seguente comando:

arecord -l

Nel mio caso vedo card0e card2(la mia webcam che ha un microfono). Quindi ho scritto plughw:2per card2.

Aggiornamento 2 (senza mplayer)

Se non hai o ti piace mplayerma ffplay(di cui fa parte ffmpeg) puoi usare:

  • audio wave non compresso (larghezza di banda elevata, utilizzo della cpu molto basso sul lato della registrazione)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • compresso con flac (bassa larghezza di banda, basso utilizzo della cpu sul lato della registrazione)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • compresso con ogg (larghezza di banda molto bassa, elevato utilizzo della cpu sul lato della registrazione)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    

1
C'è qualche motivo che stai facendo cat - | mplayer -invece di solo mplayer -?
Chris Down,

Il motivo è: ho appena copiato il comando dalla fonte citata. Potrebbe essere ridondante. L'ho eliminato, sembra funzionare ancora. Forse c'è un caso limite in cui era necessario e l'autore lo sapeva senza dirlo nel suo post?
erik,

3

La risposta di Erik funziona bene, ma usandola così com'è, usando flaco oggenc, c'è un ritardo significativo.
Una soluzione è aggiungere -cache 256al mplayercomando, quindi dovrebbe apparire come segue:

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

Un'altra cosa da menzionare è che al giorno d'oggi praticamente tutte le moderne distribuzioni utilizzano PulseAudio, che prende il controllo del dispositivo hardware, quindi l'utilizzo plughw:2fallirà se PulseAudio è in esecuzione.
In generale, defaultdovrebbe funzionare correttamente e utilizzare PulseAudio, dove è possibile utilizzare pavucontrolo simili per selezionare la sorgente di input desiderata utilizzando PulseAudio.

Ciò renderebbe il comando come segue:

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

MA: questo introduce un ritardo. Nel mio caso, sono circa otto secondi. È terribile.


La soluzione è molto più semplice di qualsiasi altro comando:

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

Questo è tutto. Questo utilizza quasi nessuna CPU (0,1% secondo htop). Per me sta usando ~ 60KB / s di larghezza di banda.

Se vuoi un suono stereo: ssh <user>@<host> "arecord -f cd" | aplay
utile solo se hai un microfono stereo, aumenta la larghezza di banda a ~ 150KB / s per me. (Dal momento che aumenta anche la frequenza di campionamento a 44100Hz).

Maggiori informazioni sulla frequenza di campionamento ( -r) e sulla velocità di trasmissione (influenzata da -f) sono disponibili qui .
Fondamentalmente: più basso si va, peggiore è la qualità ma minore è la larghezza di banda necessaria.

Questa soluzione è completamente compatibile con PulseAudio, è possibile controllare il dispositivo di output, il volume e altro utilizzando pactlo l' pavucontrolapplicazione GUI:

pavucontrol

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.