Sound (Mikrofon) über ssh umleiten, wie über ssh telefonieren?

47

Wie kann ich das Mikrofon eines Computers umleiten, um es auf einem anderen Computer über ssh anzuhören? Welches ist das richtige Gerät oder welche ist die richtige Befehlszeile?

Vor einigen Jahren war es einfach und unterhaltsam, den Ton von einem entfernten Mikrofon auf einen lokalen Computer umzuleiten oder umgekehrt - es war ein einfaches Telefon. Es gibt einige Anweisungen dafür, aber keine scheint auf neueren Computern / Linux-Distributionen zu funktionieren. Ich habe noch nicht einmal einen /dev/audioauf meinem Computer (Fedora 17).

Ich denke, dass es etwas mit Puls-Audio zu tun haben könnte. Oder brauche ich für dieses einfache Telefon kein Puls-Audio? Welches ist das richtige Gerät?

Ich kann alle meine Audiogeräte sehen, wenn ich starte alsamixerund die Taste F6 drücke. Aber ich weiß nicht, welche Geräte in meinem /devBaum sind.

erik
quelle

Antworten:

53

OK, ich habe es gerade gefunden und es funktioniert immer noch! Wirklich lustig. Sie benötigen keine ausgefallenen Anwendungen, Instant Messenger oder ähnliches. Mit diesem Befehl senden Sie Ihre Audiodaten an den Remote-Host.

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

Oder wenn dir ffmpeg besser gefällt

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

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


Wenn Sie ein echtes Telefon wünschen:

Der obige Befehl galt nur für eine Richtung. Für die andere Richtung müssen Sie eine weitere SSH-Sitzung starten. Verwenden Sie also, um zu empfangen, was der andere Benutzer zu Ihnen sagt

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

Oder wenn dir ffmpeg besser gefällt

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

wo hw:3ist das alsadevice das sie aufnehmen wollen (suchen mit arecord -l; sie können auch einen gerätenamen verwenden, suchen mit arecord -L; in vielen fällen können sie einfach das mit folgendem befehl aufgeführte gerät verwenden:) arecord -L | grep sysdefault.

Aktualisieren

Im Jahr 2018 war auf meinen Fedora Linux-Systemen ffmpegkeine Unterstützung enthalten (dies scheint auf RaspberryPi-Systemen mit Raspbian der Fall zu sein). Es gibt aber eine einfache Lösung ohne Neukompilierung. Leiten Sie einfach die Ausgabe von arecord (dem alsarecorder) an ffmpeg weiter:

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

Sie erhalten das Eingabegerät, plughw:2indem Sie Ihr Gerät in der Ausgabe des folgenden Befehls suchen:

arecord -l

In meinem Fall sehe ich card0und card2(meine Webcam, die ein Mikrofon hat). Also schrieb ich plughw:2für card2.

Update 2 (ohne mplayer)

Wenn Sie nicht haben oder mögen, mplayeraber ffplay(was ein Teil von ist ffmpeg), können Sie verwenden:

  • unkomprimiertes Wave-Audio (hohe Bandbreite, sehr niedrige CPU-Auslastung auf der Aufnahmeseite)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • komprimiert mit flac (geringe Bandbreite, geringe CPU-Auslastung auf der Aufnahmeseite)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • komprimiert mit ogg (sehr geringe Bandbreite, hohe CPU-Auslastung auf der Aufnahmeseite)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    
erik
quelle
1
Gibt es irgendeinen Grund, den du tust cat - | mplayer -anstatt nur mplayer -?
Chris Down
Der Grund ist: Ich habe gerade den Befehl aus der angegebenen Quelle kopiert. Könnte überflüssig sein. Ich habe es gelöscht, scheint noch zu funktionieren. Vielleicht gibt es einen Randfall, in dem es gebraucht wurde und der Autor davon wusste, ohne es in seinem Beitrag zu erwähnen?
Erik
3

Eriks Antwort funktioniert gut, aber wie es ist, mit flacoder oggenc, gibt es erhebliche Verzögerung.
Eine Lösung besteht darin -cache 256, dem mplayerBefehl Folgendes hinzuzufügen :

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

Eine andere Sache, die erwähnt werden muss, ist, dass heutzutage so ziemlich jede moderne Distribution PulseAudio verwendet, das die Kontrolle über das Hardwaregerät übernimmt. Daher plughw:2schlägt die Verwendung fehl, wenn PulseAudio ausgeführt wird.
Im Allgemeinen defaultsollte funktionieren und PulseAudio verwenden, wo Sie pavucontroloder ähnliches verwenden können, um Ihre gewünschte Eingangsquelle mit PulseAudio auszuwählen.

Das würde den Befehl wie folgt machen:

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

ABER: Dies führt zu einer Verzögerung. In meinem Fall sind es ungefähr acht Sekunden. Das ist furchtbar.


Die Lösung ist viel einfacher als jeder andere Befehl:

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

Das ist es. Dies verbraucht kaum CPU (0,1% laut htop). Ich verbrauche etwa 60 KB / s Bandbreite.

Wenn Sie Stereo-Sound wollen: ssh <user>@<host> "arecord -f cd" | aplay
Nur nützlich, wenn Sie ein Stereo-Mikrofon haben, erhöht sich die Bandbreite für mich auf ~ 150KB / s. (Da es auch die Abtastrate auf 44100Hz erhöht).

Weitere Informationen zu Abtastrate ( -r) und Bitrate (betroffen von -f) finden Sie hier .
Grundsätzlich gilt: Je niedriger Sie gehen, desto schlechter ist die Qualität, desto geringer ist jedoch die benötigte Bandbreite.

Diese Lösung ist vollständig mit PulseAudio kompatibel. Sie können das Ausgabegerät, die Lautstärke und mehr mithilfe pactlder pavucontrolGUI-Anwendung steuern :

pavucontrol

Konfetti
quelle