使用 pulseaudio 进行远程 ssh 连接

使用 pulseaudio 进行远程 ssh 连接

我正在尝试通过云实例传输 pulseaudio 声音输出。在我之前的问题中,我无法让 paprefs 在 Mac OS 上运行,但事实证明这并不重要,因为我可以通过编辑来设置所有内容default.pa。因此,我设置了服务器和客户端,并通过连接到另一台 Ubuntu 计算机在本地网络(相同的 wifi)上进行测试。我为此使用了pulseaudio zeroconf discoverpulseaudio zeroconf publish。一切正常。我可以从我的客户端计算机中发现并选择音频设备。
然后,我尝试对远程 Oracle 云实例执行相同的步骤。但是这次,没有检测到任何东西,所以我无法选择任何东西。我想我至少应该从客户端选择“虚拟扬声器”和“转储麦克风”,但没有检测到任何东西。我怀疑这是因为pulseaudio zeroconf模块仅适用于本地网络?我对此不太确定。我试图关注这篇文章远程 PulseAudio 设置通过选择服务器仍然不起作用。我不太清楚“启用对全局声音设备的网络访问”是什么意思,所以我没有这样做。我需要在两台机器之间建立隧道吗?
Edit我尝试通过添加load-module module-tunnel-sink-new server=192.168.0.1 sink_name=Remote channels=2 rate=44100到 default.pa 文件来使用隧道。但它不起作用。模块没有加载。仔细检查后,模块加载了一小会儿,然后就消失了。

答案1

Zeroconf 服务发现(通常称为 DNS-SD/Avahi/Bonjour)通常使用链路本地多播数据包(mDNS),仅限于当前子网。

(嗯,从技术上来说可以将 DNS-SD 服务发现信息添加到标准 DNS 域中,Linux 上的 Avahi 也支持这一点,但它是非常很少使用的功能,并且它不会自动运行 - 它需要一些手动设置,并且在您的情况下不值得付出努力。)

要跨不同网络使用 PulseAudio,您需要在客户端上手动指定 PA 服务器的地址。(与 X11 一样,“客户端”是您的 Oracle Cloud 实例,“服务器”是您的本地 macOS 系统。)

首先,Pulse 服务器必须能够从客户端访问 - 通常您会为此使用 SSH 的“远程”隧道:ssh -R 4318:localhost:4317 oraclevm

接下来,您可以module-tunnel-(source,sink)(-new)在客户端(Oracle)系统上加载以连接特定的输入或输出,类似于 Zeroconf 的情况,或者完全重定向 libpulse 以直接连接到本地 PulseAudio 服务器(通过PULSE_SERVER=在环境中设置)。

但请注意,PulseAudio 远程连接native-protocol将传输原始 PCM 音频,这将需要大量带宽。

您应该尝试 Xpra,它通过 WAN 提供改进的 X11 转发并且还自动配置音频(使用 PulseAudio)。

相关内容