eri*_*rik 57 ssh remote audio telephony
如何通过 ssh 重定向一台计算机的麦克风以在另一台计算机上收听它?哪个是正确的设备或哪个是正确的命令行?
几年前,将声音从远程麦克风重定向到本地计算机,反之亦然——这是一部简单的电话。有一些 说明,但它们似乎都不适用于较新的计算机/Linux 发行版。/dev/audio我的电脑上什至没有(Fedora 17)。
我认为它可能与脉冲音频有关。或者我不需要这个简单电话的脉冲音频?哪个是正确的设备?
当我启动alsamixer并按 F6 键时,我可以看到我所有的声音设备。但我不知道我的/dev树中有哪些设备。
eri*_*rik 61
好的,我刚刚找到它,它仍然有效!真是可笑。您不需要任何花哨的应用程序、即时通讯工具等。使用此命令,您可以将音频发送到远程主机。
arecord -f cd -t raw | oggenc - -r | ssh <user>@<remotehost> mplayer -
Run Code Online (Sandbox Code Playgroud)
或者如果你更喜欢 ffmpeg
ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
| ssh <user>@<remotehost> mplayer - -idle -demuxer ogg
Run Code Online (Sandbox Code Playgroud)
来源:http : //shmerl.blogspot.de/2011/06/some-fun-with-audio-forwarding.html
上面的命令只针对一个方向。对于另一个方向,您必须启动另一个 ssh 会话。因此,要接收其他用户对您说的话,请使用
ssh <user>@<remotehost> 'arecord -f cd -t raw | oggenc - -r' | mplayer -
Run Code Online (Sandbox Code Playgroud)
或者如果你更喜欢 ffmpeg
ssh <user>@<remotehost> ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
| mplayer - -idle -demuxer ogg
Run Code Online (Sandbox Code Playgroud)
hw:3您要记录的 alsadevice在哪里(用 找到它arecord -l;您也可以使用设备名称,用 找到它arecord -L;在许多情况下,您可以使用以下命令列出的设备:arecord -L | grep sysdefault。
2018 年在我的 Fedora Linux 系统ffmpeg上没有包含 alsa 支持(在带有 Raspbian 的 RaspberryPi 系统上似乎是一样的)。但是有一个简单的解决方案,无需重新编译。只需将arecord(alarecorder)的输出通过管道传输到 ffmpeg:
ssh <user>@<remotehost> 'arecord -f cd -D plughw:2 | ffmpeg -ac 1 -i - -f ogg -' \
| mplayer - -idle -demuxer ogg
Run Code Online (Sandbox Code Playgroud)
您可以plughw:2通过在以下命令的输出中找到您的设备来获取输入设备:
arecord -l
Run Code Online (Sandbox Code Playgroud)
就我而言,我看到card0和card2(我的网络摄像头带有麦克风)。所以我plughw:2为card2.
如果您没有或喜欢mplayer但ffplay(它是 的一部分ffmpeg),您可以使用:
未压缩的波形音频(高带宽,录制端的 CPU 使用率非常低)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
Run Code Online (Sandbox Code Playgroud)用flac压缩(低带宽,录制端的cpu使用率低)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
Run Code Online (Sandbox Code Playgroud)用 ogg 压缩(非常低的带宽,录制端的 CPU 使用率高)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
Run Code Online (Sandbox Code Playgroud)Erik 的答案效果很好,但是使用它的方式,使用flacor oggenc,存在显着的滞后。
一个解决方案是添加-cache 256到mplayer命令中,所以它看起来如下:
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | mplayer -cache 256 -
Run Code Online (Sandbox Code Playgroud)
另一件事要提到的是,现在几乎每个现代发行版都使用 PulseAudio,它控制硬件设备,因此plughw:2如果 PulseAudio 正在运行,使用将失败。
通常,default应该可以正常工作并使用 PulseAudio,您可以使用 PulseAudiopavucontrol或类似方法来选择所需的输入源。
这将使命令如下:
ssh <user>@<remotehost> "arecord -f cd | oggenc -" | mplayer -cache 256 -
Run Code Online (Sandbox Code Playgroud)
但是:这会导致滞后。在我的情况下,大约是八秒。这太可怕了。
ssh <user>@<host> "arecord -f S16_LE -r 36000" | aplay
Run Code Online (Sandbox Code Playgroud)
就是这样。这几乎不使用任何 CPU(根据 0.1% htop)。它对我来说使用了 ~60KB/s 的带宽。
如果你想要立体声:ssh <user>@<host> "arecord -f cd" | aplay
只有在你有立体声麦克风时才有用,对我来说将带宽增加到 ~150KB/s。(因为它还将采样率提高到 44100Hz)。
可以在此处找到有关采样率 ( -r) 和比特率(受 影响-f)的更多信息。
基本上:你走得越低,质量越差,但所需的带宽越低。
此解决方案与 PulseAudio 完全兼容,您可以使用pactl或pavucontrolGUI 应用程序控制输出设备、音量等:
| 归档时间: |
|
| 查看次数: |
29358 次 |
| 最近记录: |