redirigir el sonido (micrófono) a través de ssh, ¿cómo llamar por teléfono a través de ssh?

48

¿Cómo puedo redirigir el micrófono de una computadora para escucharlo en otra computadora a través de ssh? ¿Cuál es el dispositivo correcto o cuál es la línea de comando correcta?

Hace algunos años, era fácil y divertido redirigir el sonido de un micrófono remoto a una computadora local o viceversa: era un teléfono fácil. Hay algunas instrucciones para ello, pero ninguna de ellas parece funcionar en computadoras más nuevas / distribuciones de Linux. Ni siquiera tengo una /dev/audioen mi computadora (Fedora 17).

Creo que puede tener algo que ver con el audio de pulso. ¿O no necesito audio de pulso para este teléfono simple? ¿Cuál es el dispositivo correcto?

Puedo ver todos mis dispositivos de sonido cuando inicio alsamixery presiono la tecla F6. Pero no sé cuáles son los dispositivos en mi /devárbol.

erik
fuente

Respuestas:

55

OK, lo acabo de encontrar y todavía funciona. Muy divertido. No necesita ninguna aplicación sofisticada, mensajería instantánea o similar. Con este comando, envía su audio al host remoto.

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

O si te gusta más ffmpeg

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

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


Si quieres un teléfono real:

El comando anterior era solo para una dirección. Para la otra dirección, debe comenzar otra sesión ssh. Entonces, para recibir lo que el otro usuario te dice , usa

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

O si te gusta más ffmpeg

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

donde hw:3es el alsadevice que desea grabar (encontrarlo con arecord -l, también se puede utilizar un nombre de dispositivo, encontrar esto con arecord -L, en muchos casos basta con utilizar el dispositivo que aparece con el siguiente comando: arecord -L | grep sysdefault).

Actualizar

En 2018, en mis sistemas Linux Fedora ffmpegno se incluye soporte para alsa (parece ser lo mismo en sistemas RaspberryPi con Raspbian). Pero hay una solución simple sin recompilar. Simplemente canalice la salida de arecord (el alsarecorder) a ffmpeg:

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

Obtiene el dispositivo de entrada plughw:2al encontrar su dispositivo en la salida del siguiente comando:

arecord -l

En mi caso veo card0y card2(mi cámara web que tiene un micrófono). Entonces escribí plughw:2para card2.

Actualización 2 (sin mplayer)

Si no tiene o le gusta mplayerpero ffplay(que es parte de ffmpeg) puede usar:

  • audio de onda sin comprimir (gran ancho de banda, muy bajo uso de CPU en el lado de grabación)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • comprimido con flac (bajo ancho de banda, bajo uso de CPU en el lado de grabación)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • comprimido con ogg (ancho de banda muy bajo, alto uso de CPU en el lado de grabación)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    
erik
fuente
1
¿Hay alguna razón que estás haciendo en cat - | mplayer -lugar de solo mplayer -?
Chris Down
La razón es: acabo de copiar el comando de la fuente citada. Puede ser redundante. Lo he eliminado, parece que todavía funciona. ¿Tal vez hay un caso extremo en el que se necesitaba y el autor lo sabía sin decirlo en su publicación?
erik
3

La respuesta de Erik funciona bien, pero al usarla como está, al usar flaco oggenc, hay un retraso significativo.
Una solución es agregar -cache 256al mplayercomando, para que tenga el siguiente aspecto:

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

Otra cosa a mencionar es que hoy en día casi todas las distribuciones modernas usan PulseAudio, que toma el control del dispositivo de hardware, por lo tanto, el uso plughw:2fallará si PulseAudio se está ejecutando.
En general, defaultdebería funcionar bien y usar PulseAudio, donde puede usar pavucontrolo similar para seleccionar la fuente de entrada deseada con PulseAudio.

Eso haría el comando de la siguiente manera:

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

PERO: Esto introduce un retraso. En mi caso, son alrededor de ocho segundos. Eso es terrible.


La solución es mucho más simple que cualquier otro comando:

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

Eso es. Esto está utilizando apenas cualquier CPU (0.1% según htop). Está utilizando ~ 60 KB / s de ancho de banda para mí.

Si desea sonido estéreo: ssh <user>@<host> "arecord -f cd" | aplay
solo es útil si tiene un micrófono estéreo, aumenta el ancho de banda a ~ 150 KB / s para mí. (Dado que también aumenta la frecuencia de muestreo a 44100Hz).

Puede encontrar más información sobre la frecuencia de muestreo ( -r) y la velocidad de bits (afectada por -f) aquí .
Básicamente: cuanto más bajo sea, peor será la calidad, pero menor será el ancho de banda necesario.

Esta solución es totalmente compatible con PulseAudio, puede controlar el dispositivo de salida, el volumen y más utilizando pactlo la pavucontrolaplicación GUI:

control de pavu

papel picado
fuente