通过ssh重定向声音(麦克风),如何通过ssh打电话?


47

如何重定向一台计算机的麦克风以通过ssh在另一台计算机上收听?哪个是正确的设备或哪个是正确的命令行?

几年前,将声音从远程麦克风重定向到本地计算机很容易又有趣,反之亦然-这是一部简单的电话。有一些 说明,但似乎没有一个适用于较新的计算机/ Linux发行版。我什至没有/dev/audio计算机(Fedora 17)。

我认为这可能与脉冲音频有关。还是我不需要此简单电话的脉冲音频?哪个是正确的设备?

启动alsamixer并按F6键时,我可以看到所有声音设备。但是我不知道我的/dev树中有哪些设备。

Answers:


53

好的,我刚刚找到了它,但是它仍然有效!真是可笑。您不需要任何精美的应用程序,即时通讯工具或类似工具。使用此命令,您可以将音频发送到远程主机。

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

或者,如果您更喜欢ffmpeg

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

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


如果您想要一部真正的电话:

上面的命令仅用于一个方向。对于另一个方向,您必须启动另一个ssh会话。因此,要接收其他用户对您说的话,请使用

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

或者,如果您更喜欢ffmpeg

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

hw:3您要记录的alsadevice 在哪里(找到arecord -l;您还可以使用设备名称,使用arecord -L; 找到它;在许多情况下,您可以仅使用通过以下命令列出的设备:)arecord -L | grep sysdefault

更新资料

在我的Fedora Linux系统ffmpeg上,2018年不包含alsa支持(在具有Raspbian的RaspberryPi系统上似乎相同)。但是有一个简单的解决方案,无需重新编译。只需 arecord(alsarecorder)的输出传递给ffmpeg:

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

您可以plughw:2通过在以下命令的输出中找到您的设备来获取输入设备:

arecord -l

就我而言,我看到card0card2(我的网络摄像头带有麦克风)。所以我写plughw:2card2

更新2(无mplayer)

如果您没有或喜欢,mplayer但是ffplay(属于ffmpeg),可以使用:

  • 未压缩的波形音频(高带宽,记录侧的cpu使用率非常低)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • 用flac压缩(记录端的低带宽,低CPU使用率)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • 用ogg压缩(记录侧的带宽非常低,CPU使用率很高)

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

1
您是否有其他原因在做cat - | mplayer -而不是在做mplayer -呢?
克里斯·

原因是:我只是从引用的源复制了命令。可能是多余的。我已删除它,似乎仍然可以使用。也许有一个极端的情况需要它,而作者知道了它却没有在帖子中透露?
erik 2014年

3

Erik的答案很好用,但是按原样使用,flac或者使用oggenc,都有很大的滞后。
一种解决方案是将命令添加-cache 256到该mplayer命令,因此其外观如下所示:

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

还要提到的另一件事是,如今,几乎每个现代发行版都使用PulseAudio来控制硬件设备,因此,plughw:2如果PulseAudio正在运行,则使用将失败。
通常,default应该可以正常工作并使用PulseAudio,在这里您可以使用PulseAudio pavucontrol或类似方法来选择所需的输入源。

这将使命令如下所示:

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

但是:这会带来滞后。就我而言,大约是八秒钟。这太可怕了。


该解决方案比任何其他命令都简单得多:

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

而已。这几乎没有使用任何CPU(根据占0.1%htop)。它为我使用了约60KB / s的带宽。

如果要立体声:ssh <user>@<host> "arecord -f cd" | aplay
仅当您有立体声麦克风时才有用,对我来说带宽增加到〜150KB / s。(因为它还将采样率提高到44100Hz)。

有关采样率(-r)和比特率(受-f)影响的更多信息,请参见此处
基本上:走得越低,质量越差,但所需的带宽越低。

此解决方案与PulseAudio完全兼容,您可以使用pactlpavucontrolGUI应用程序控制输出设备,音量等。

掌控

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.