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

结果

我希望能够从一个房间走到另一个房间并听到同一首歌。 就像你在所有房间听收音机一样。

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

物料

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

第一种选择

  • 我根据这个答案找到并设置了软件
  • 计算机和服务器中的所有软件都已设置如何继续? http://www.pulseaudio.org/wiki/FirstSteps

是的,使用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服务器需要作为带有pulseaudio -D的守护进程启动,以防它尚未运行。 为了优化/etc/pulse/daemon.conf中的声音质量设置,可以根据个人需要进行调整。

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

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

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

它是客户端服务器应用程序。 您将音乐存储在服务器上,然后与您的客户端连接(许多人可以立即执行此操作)并控制服务器。

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

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

MPD可以流式传输音乐,因此您可以拥有大量的客户(或者如果你想打电话给他们的话,可以播放音乐)。

但是,不要期望任何好的质量。 流媒体糟糕的声音很糟糕(无论你使用mpd还是pulseaudio)。 将真实的扬声器连接到服务器并仅使用笔记本电脑来控制它是一个更好的主意。

我不需要做任何与众不同的事情。 我有双胞胎上网本都有PulseAudio和相当没有来自英特尔的名称硬件。 我如何设置它有点像这样。

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

和多播位 在此处输入图像描述

在客户端上,启用有关查找启用网络的设备的位 在此处输入图像描述 并通过pavucontrol将输出设备设置为虚拟网络设备 在此处输入图像描述

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

使用此解决方案,您可以根据需要流式传输系统音频。
这里的关键是ALSA环回function。 首先,您需要在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 } 

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

我不确定使用DLNA / UPnP是否可以实现这样的事情,因为我自己并不熟悉它,但是如果它有帮助则抛出一些链接:

  • UPnP AV媒体服务器(维基百科)
  • 数字生活网络联盟/规范(维基百科)
  • DLNA开源项目(elinux)
  • 开源DLNA / UPnP AV软件设备列表(jorgenmodin.net)
  • UPnP AV媒体服务器和客户端/ Linux客户端列表(维基百科)

虽然快速搜索结果表明无法同步…

还没有好的解决方案。 有AVB但它对802.11的支持仅限于时间同步。

如果您想要流式传输到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. 转到Devices→Libraries并选择foobar2000服务器
    2. 在“库”中,选择“播放流捕获”

该方法的优点是,如果您在Android上暂停,它将累积缓冲区(因为服务器仍在发送)。

在Ubuntu(Wine版本1.5.28-0ubuntu1~ppa1 )和Windows上测试过。