我正在尝试通过云实例流式传输 pulseaudio 声音输出。在我之前的问题中,我无法让 paprefs 在 Mac OS 上工作,但事实证明这并不重要,因为我可以通过编辑来设置所有内容default.pa
。所以我设置了服务器和客户端,并通过连接到另一台 Ubuntu 机器在本地网络(相同的 wifi)上进行了测试。我用pulseaudio zeroconf discover
和pulseaudio zeroconf publish
为此。一切正常。我可以从我的客户端机器上发现并选择音频设备。
然后我为远程 Oracle 云实例尝试了相同的步骤。然而这一次,没有检测到任何东西,所以我不能选择任何东西。我认为我至少应该从客户端选择“虚拟扬声器”和“转储麦克风”,但没有检测到任何东西。我怀疑这是由于pulseaudio zeroconf
模块仅适用于本地网络?我不太确定这一点。我尝试通过选择服务器仍然无法工作来遵循这篇远程脉冲音频设置。我不太清楚“启用对全球声音设备的网络访问”是什么意思,所以我没有这样做。我需要在两台机器之间建立隧道吗?
Edit
我尝试通过添加load-module module-tunnel-sink-new server=192.168.0.1 sink_name=Remote channels=2 rate=44100
到 default.pa 文件来使用隧道。但它没有用。模块不加载。仔细检查后,模块加载了短暂的瞬间然后消失了。
Zeroconf 服务发现(通常称为 DNS-SD/Avahi/Bonjour)通常使用链路本地多播数据包 (mDNS),它仅限于当前子网。
(嗯,从技术上讲,可以将 DNS-SD 服务发现信息添加到您的标准 DNS 域,Linux 上的 Avahi 确实支持这一点,但这是一个很少使用的功能,它不会是自动的 - 它需要一些手动操作设置,在你的情况下不值得努力。)
要跨不同网络使用 PulseAudio,您需要在客户端手动指定 PA 服务器的地址。(与 X11 一样,“客户端”是您的 Oracle 云实例,“服务器”是您的本地 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)。