如何通过网络将音乐流传输到多台计算机?


78

结果

我希望能够从一个房间走到另一个房间并听到同一首歌的演奏。就像您在所有房间里收听广播一样。

我想要那种效果,但是我想听自己的音乐,这可以做到吗?

用料

  • Ubuntu笔记本电脑。
  • Mac电脑。

第一种选择

Answers:


48

是的,使用pulseaudio可以很容易地做到这一点。您将需要安装并运行paprefs 安装paprefs,以使声音设备可以通过网络使用。

在此处输入图片说明

在此处输入图片说明

这些设置允许将声音源和接收器都通过网络发布,最好是发布到另一个PulseAudio服务器。

如果您的服务器设置没有桌面管理器,则需要首先安装声音系统(请参阅此问题)。然后,您可以/etc/pulse/default.pa在“ 网络访问”部分中取消注释这些行:

load-module module-esound-protocol-tcp
load-module module-native-protocol-tcp
load-module module-zeroconf-publish

如果要使用RTP发送器,请取消注释以下行:RTP发送器模块部分:

load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 description="RTP Multicast Sink"
load-module module-rtp-send source=rtp.monitor

如果pulseaudio -D没有运行,pulseaudio服务器需要作为守护程序启动。为了优化声音质量,/etc/pulse/daemon.conf可以根据个人需要调整设置。

在网络中流式传输音频的另一种方法是设置Icecast服务器(请参阅此问题)。


14
对于没有头的客户端(例如,在我的厨房橱柜上有扬声器的Pi),了解如何通过配置文件和/或Shell命令完全设置此客户端非常有用。
拉斐尔2014年

本指南具有足够的通用性,可以在Ubuntu CLI上进行遵循。wiki.archlinux.org/index.php/PulseAudio/…–
goetzc

11

您最好的选择是音乐播放器守护程序(mpd)。

https://secure.wikimedia.org/wikipedia/zh/wiki/Music_Player_Daemon

它是一个客户端服务器应用程序。您将音乐存储在服务器上,然后与客户建立联系(很多人可以一次做)并控制服务器。

它已经在ubuntu中了,只需apt-get install mpd

还有一些好的文档:https : //wiki.archlinux.org/index.php/Mpd

MPD可以流式播放音乐,因此您可以有很多客户(如果希望与他们通话,也可以是扬声器)来播放音乐。

但是不要真的期望任何好的质量。流媒体损坏声音严重(无论使用mpd还是Pulseaudio)。将真正的扬声器连接到服务器并仅使用笔记本电脑来控制它是一个更好的主意。


2
好吧,我的房子太大了,无法使用电线,这就是为什么我要播放声音的原因。
阿尔瓦

您可以流媒体播放,不必担心质量,这无关紧要,因为您的无线连接足够坚固
Rahul Prasad

流媒体如何破坏音质?WiFi是一种数字传输介质。MPD是否执行无损压缩?我认为今天的WiFi网络不需要这样做。
nvd

哇,这么老的答案。我什至不记得了,因为从那时起我就再也没有使用过MPD。
loxs

11

我没有做任何不同寻常的事情。我有两本带有PulseAudio的上网本,也没有来自Intel的硬件。我如何设置它有点像这样。

在服务器和客户端上运行paprefs。在服务器上,确保已启用多播设置,并检查了服务器位。像这样 在此处输入图片说明

和多播位 在此处输入图片说明

在客户端上,启用有关查找启用 在此处输入图片说明 网络的设备的位,然后通过pavucontrol将输出设备设置为虚拟网络设备 在此处输入图片说明

中提琴你现在应该有一些魔法


1
除此之外,这与RTP无关。
kirelagin 2014年

感谢您的精彩教程。我选中了所有框,但不能“通过pavucontrol将输出设备设置为虚拟网络设备”。据我了解,这是通过在屏幕快照中写入“ charmes @ nano上的内部音频模拟立体声”的位完成的。但是在我的系统上,根本没有这样的按钮。我究竟做错了什么?
user69748

自2011年以来,我还没有检查过这些说明,因此很有可能脉冲音频守护程序设置已更改。
lazyPower

我现在拥有的(重启后)是一个单独的通道,称为“ pulseaudio”,似乎已路由到我的客户端。但是,没有音频流过它。而且我的Rhythmbox频道仍然没有提及“ user @ client”。
user69748

1

使用此解决方案,您可以在任何地方流式传输系统音频。.
关键是ALSA回送功能。因此,首先需要在ALSA中启用回送设备,该设备将在PulseAudio音量控件中显示为输入设备(以及输出设备)。

sudo modprobe snd_aloop

然后可以将此设备添加到mpd服务器:

mpc add alsa://hw:1,1

其中hw:1,1是回送输入设备,可以使用以下命令列出 aplay -l

那么您需要为mpd 配置一个http输出插件。以下示例看起来像在/etc/mpd.conf

 audio_output {
    type            "httpd"
    name            "My HTTP Stream"
    encoder         "vorbis"          # optional, vorbis or lame
    port            "8000"
    bind_to_address "192.168.1.38"               # optional, IPv4 or IPv6
    quality         "5.0"                   # do not define if bitrate is d$
#   bitrate         "128"                   # do not define if quality is d$
    format          "44100:16:1"
    max_clients     "0"                     # optional 0=no limit
 }  

这就对了。在“音量控制播放”选项卡中为您的音频源选择回播设备。
最后,您可以使用httpd URL地址在目标点使用VLC或任何其他流渲染器:http://192.168.1.38:8000
此答案也可在此处获得


0

我不确定用DLNA / UPnP是否可以实现这样的效果,因为我自己并不熟悉它,但是在此处抛出一些链接以防它有所帮助:

尽管快速搜索结果表明无法同步...


2
不建议使用DLNA,因为它无法同步播放。
Sparhawk


-2

如果要流式传输到Android手机,则可以在服务器上使用Foobar2000 ,在客户端上使用BubbleUPnP(付费软件)。

  1. 拿酒
  2. 得到 foobar_v1.2.5.exe
  3. $ wine foobar2000_v1.2.5.exe
  4. 下一个,下一个,下一个... :)
  5. 得到foo_upnp
  6. 解压foobar2000的components文件夹(可能位于中~/.wine/drive_c/Program Files/
  7. 启动foobar2000
  8. 转到库→配置→播放→输出→设备,然后选择“空输出”
  9. 确保ufw没有阻止相关流量
  10. 在BubbleUPnP中:
    1. 转到设备→库,然后选择foobar2000服务器
    2. 在“库”中,选择“播放流捕获”

该方法的优势在于,如果您在Android上暂停,则会累积一个缓冲区(因为服务器仍在发送)。

在Ubuntu(葡萄酒版1.5.28-0ubuntu1~ppa1)和Windows上进行了测试。

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.