如何通过局域网将一台计算机的声音转发到另一台计算机?

我有两台电脑。电脑A运行Ubuntu 11.10和Gnome Classic桌面环境,电脑B运行Mythbuntu 11.10。电脑B上配备了一套优质的数字音频系统。
我想通过Banshee在电脑A上播放音乐,但是希望将声音输出通过局域网发送,并从电脑B的扬声器播放出来。
我找到了this question,其中提到我应该使用一个叫做"paprefs"的东西来实现这个目标。所以,我安装了paprefs,并在"Network Server"对话框中选择了以下设置:

paprefs

然后...我完全不知道应该发生什么。我查看了paprefs的主页,他们在文档下只是说“没有太多可说的。只需运行paprefs并自己看看。”
我没有看到任何事情发生,也不知道我应该如何从计算机A连接到计算机B。
这个应该怎么工作?有人能提供清晰的说明,告诉我如何实际进行连接吗?
理想情况下,希望我可以设置一个允许我始终通过计算机B的声音系统播放特定应用程序(如Banshee)的环境。换句话说,一旦设置完成,它将成为默认设置,不需要每次手动重新连接。

可能是重复的问题:如何通过网络将音乐流式传输到多台计算机? - Jorge Castro
2个回答

将音频从一个Pulse Audio服务器发送到另一个服务器的最简单方法是使用RTP/Multicast功能,您可以使用paprefs Install paprefs进行设置。

在发送端:

paprefs screenshot showing "enable multicast/rtp sender" checked and "send audio from local speakers" selected

选择您的本地声卡或选择一个单独的设备,您可以从音频首选项中选择作为音频输出。

在接收端:

paprefs screenshot showing "enable multicast/rtp receiver" checked

通过这样做,音频将通过您的局域网从发送者传输到接收者。

谢谢你的帮助。我按照你描述的设置进行了操作,但是如果我在发送端播放Banshee,接收端却听不到声音。在pavucontrol或gnome声音设置中也没有看到任何网络声音设备。还需要采取其他步骤吗? - Questioner
搞定了。我必须做以下几步:1. 重新启动两台设备。2. 在发送方的机器上,进入声音设置,在“输出”选项卡下选择网络音频设备。 - Questioner
刚刚做了这个。遇到了巨大的延迟,导致服务器电脑非常卡顿...可能是我做错了什么,但只涉及勾选两个复选框,我真的不知道会出什么问题。 - Greg
@Greg:根据你的网络和音频内容(比特率!),这种流媒体方法可能会要求很高。如果你遇到问题,请尝试使用pulseaudio -k重置pulseaudio,有时候这样可以帮助解决问题。 - Takkat
Pulseaudio拥有“非常高”的优先级。也许这就是服务器运行缓慢的原因... - Rodrigo

以下示例显示如何创建一个pulseaudio TCP隧道,将声音从计算机alpha转发到计算机beta。在我的情况下,两台计算机都运行着Ubuntu 14.04。
在alpha(源计算机)上,在/etc/pulse/default.pa文件中添加以下行:
.fail
load-module  module-tunnel-sink  sink_name=beta  server=tcp:IP_ADDRESS_OF_BETA:4713
.nofail

选择任何唯一的值作为 sink_name。我随意选择使用值 beta。
在 beta(目标计算机)中,将以下行添加到 /etc/pulse/default.pa:
load-module  module-native-protocol-tcp  auth-ip-acl=127.0.0.1;LAN_NAME

在上述中,LAN_NAMEIP_ADDRESS_OF_BETA将根据您的计算机和局域网而有所不同。例如,它们可能是:
LAN_NAME            =  192.168.1.0/24
IP_ADDRESS_OF_BETA  =  192.168.1.10

在进行以上更改后,先在beta,然后在alpha上重新启动pulseaudio。顺序很重要。我使用pulseaudio --kill重新启动pulseaudio。我将pulseaudio --kill作为我的个人UID(而不是作为root)运行,因为pulseaudio已经以我的个人UID运行。
如果一切都成功了,在alphapavucontrolOutput Devices选项卡上,现在应该能看到隧道。当音频源正在播放时,您应该可以将源路由到alphapavucontrolPlayback选项卡上的隧道。
只要隧道完好无损,您还应该能够在betapavucontrolPlayback选项卡上看到隧道。如果隧道消失,请先在beta,然后在alpha上重新启动pulseaudio。隧道仅在alpha上启动pulseaudio时创建。
注意1:此示例假设pulseaudio在alpha和beta上都正在运行。截至2016年,pulseaudio在Ubuntu上默认运行,并已经运行了多年。
注意2:此示例不使用Avahi零配置网络。Avahi可能在Ubuntu上默认启用,但我已在我的系统上禁用了Avahi。在我的局域网中,目标计算机beta的IP地址始终相同,我知道该地址。
注意3:上述auth-ip-acl授予局域网上任何设备访问权限。Pulseaudio还支持其他(更安全)的身份验证方法。我使用auth-ip-acl来简化配置。
更多信息可以在以下页面找到:

https://raspberrypi.stackexchange.com/questions/8621/how-to-set-up-a-pulseaudio-sink https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Network/#index2h2 https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index14h3


我成功地将描述实施了。然而,在描述中涉及到重新启动puleaudio的部分,我遇到了困难。pulseaudo的man页指出:“-k | --kill 杀死调用用户的正在运行的PulseAudio守护进程”。这个命令会停止pulseaudio,我必须使用pulseaudio --start来重新启动pulseaudio - klpu39
2016年的时候,在Ubuntu上,我相信pulseaudio会自动重新启动。我不确定为什么或者是如何发生这个重启的。从2016年以后的某个时间点开始,这个情况可能已经改变了,现在(截至2022年12月),你可能需要手动(重新)启动pulseaudio,就像@klpu39所描述的那样。我不太确定具体情况。目前,我没有在机器之间进行音频流传输。 - mpb