问题:
使用 pulseaudio 在网络上进行流式传输时,音频非常不稳定。编辑/etc/pulse/daemon.conf
和更改default-fragments
anddefault-fragment-size-msec
值并不能改善这种情况。
任一系统上均未启用防火墙。我还有什么其他选择?
设置详情:
我使用 paprefs 来启用网络音频:
发件人设置:
接收机设置:
内容/etc/pulse/daemon.conf
:
; daemonize = no
; fail = yes
; allow-module-loading = yes
; allow-exit = yes
; use-pid-file = yes
; system-instance = no
; local-server-type = user
; enable-shm = yes
; enable-memfd = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; lock-memory = no
; cpu-limit = no
; high-priority = yes
; nice-level = -11
; realtime-scheduling = yes
; realtime-priority = 5
; exit-idle-time = 20
; scache-idle-time = 20
; dl-search-path = (depends on architecture)
; load-default-script-file = yes
; default-script-file = /etc/pulse/default.pa
; log-target = auto
; log-level = notice
; log-meta = no
; log-time = no
; log-backtrace = 0
; resample-method = speex-float-1
; avoid-resampling = false
; enable-remixing = yes
; remixing-use-all-sink-channels = yes
; remixing-produce-lfe = no
; remixing-consume-lfe = no
; lfe-crossover-freq = 0
; flat-volumes = no
; rescue-streams = yes
; rlimit-fsize = -1
; rlimit-data = -1
; rlimit-stack = -1
; rlimit-core = -1
; rlimit-as = -1
; rlimit-rss = -1
; rlimit-nproc = -1
; rlimit-nofile = 256
; rlimit-memlock = -1
; rlimit-locks = -1
; rlimit-sigpending = -1
; rlimit-msgqueue = -1
; rlimit-nice = 31
; rlimit-rtprio = 9
; rlimit-rttime = 200000
; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000
; default-sample-channels = 2
; default-channel-map = front-left,front-right
; default-fragments = 4
; default-fragment-size-msec = 25
; enable-deferred-volume = yes
deferred-volume-safety-margin-usec = 1
; deferred-volume-extra-delay-usec = 0
default-fragments = 5
default-fragment-size-msec = 25
接收器上的音频仍然相当不稳定。使用 RTP/Multicast 时,设置不太可靠,我什至无法让它工作到足以对其进行测试。
脉冲音频文档
以下是PulseAudio 的网络设置 ?的文档。
编辑:2022 年 2 月 13 日
底部增加了两个新部分;!AirPort和Rygel。
网络设置
有几种不同的方法可以连接到另一个 PulseAudio 服务器(直接连接、隧道、RTP)或其他一些网络音频设备(RTP、RAOP、Rygel)。
请注意此处描述的所有方法通过网络传输原始 PCM 音频。这可以使用相当多的网络带宽(大约 1.4 Mb/s 用于 CD 质量的声音)。如果您听到断断续续的声音,请尝试为网络流设置较低的采样率。此外,即使许多 WiFi 连接可以维持这样的比特率,但数据包延迟的抖动通常会导致在实践中通过无线链路传输低延迟音频是不可行的。
直接连接
只需将环境变量设置
$PULSE_SERVER
为 PulseAudio 服务器的主机名即可。或者,您可以修改~/.pulse/client.conf
or/etc/pulse/client.conf
并设置default-server
. 有关格式的说明,请参阅服务器字符串。在此常见问题解答条目中? 列出了您可以指定要使用的服务器的所有位置。所有使用本地协议通过网络连接到守护进程的方法都需要加载module-native-protocol-tcp ?。这包括隧道和 Zeroconf 设置。加载此模块后,服务器会在端口 4713 上侦听传入的客户端连接。授权
对于身份验证,您需要在所有方面都使用相同的身份验证 cookie。将该副本复制
~/.pulse-cookie
到应允许连接的所有客户端。或者,授权 cookie 可以存储在 X11 服务器中。服务器必须加载module-native-protocol-tcp ?。要启用来自整个网络的所有音频,请设置auth-anonymous=1
参数。更安全的选择是使用 IP ACL 管理对这些服务器的访问。这在PulseAudio/etc/pulse/default.pa
或~/.pulse/default.pa
启动脚本中可能如下所示:这两个模块未在默认配置中加载,因为它们可能会为远程攻击者打开 PulseAudio。
X 转发
如果
$PULSE_SERVER
变量不存在或为空,PulseAudio 将检查根窗口上的 X11 属性。这些属性很像环境变量,但如果您通过 X11 转发通过 SSH 连接到另一台机器,则可以远程使用这些属性。您可以通过执行以下操作查看 PulseAudio 相关属性的列表:使用的变量名称与环境中使用的相同,因此 PulseAudio 将查找名为 的属性
PULSE_SERVER
。请注意,只有 X11 属性通过 SSH 隧道转发,但 pulseaudio 客户端仍然使用自己的本机协议连接到服务器。如果不需要连接回运行在具有 X 显示器的计算机上的脉冲守护程序,您可以
PULSE_SERVER=localhost
从 SSH 连接进行设置(但请确保已加载 module-native-protocol-tcp)或在 SSH 连接pax11publish -r
到远程计算机之前运行删除根窗口上的属性。使用隧道
使用隧道,您可以创建一个新的接收器,通过网络将所有音频转发到另一台服务器。对于远程服务器上的接收器,隧道看起来只是通过网络连接的另一个流。来源也是如此。有关模块参数的详细信息,请参阅关于模块隧道?的文档。
设置隧道需要在远程服务器上运行 PulseAudio 守护程序并加载 module-native-protocol-tcp,就像直接连接一样。建立隧道后,客户端应用程序连接到本地 PulseAudio 守护程序上的隧道接收器。这样做的好处是您可以在本地硬件接收器和隧道接收器之间无缝切换流。对于直接连接,客户端通常必须重新启动才能切换服务器。直接连接的优点是客户端可以更好地控制缓冲参数。
移动DNS
为了避免在网络上的计算机之间手动设置隧道,可以使用 Zeroconf。
设置
module-zeroconf-publish
并module-zeroconf-discover
手动设置或使用 paprefs 中的复选框。您可以使用 Zeroconf/ Avahi ?技术连接到局域网上运行的其他声音服务器。因此,请确保编译支持 Avahi 的 PulseAudio,并在 LAN 上的所有机器上加载 Zeroconf 模块。此外,请确保加载
module-native-protocol-tcp
并允许来自其他主机的连接,请参阅上面的授权。这些模块不会在默认配置中加载,因为它们可能会为远程攻击者打开 PulseAudio。
实时传输协议
RTP 是实时传输协议。它是一种众所周知的通过 IP 传输音频和视频数据的协议。两个相关的协议是 SDP 和 SAP。SDP 是会话描述协议,可用于描述 RTP 会话。SAP 是会话通告协议,可用于通告使用 SDP 描述的 RTP 会话。(现代基于 SIP 的 VoIP 电话也使用 RTP/SDP 进行会话)所有三种协议都在 IETF RFC(RFC3550、RFC3551、RFC2327、RFC2327)中定义。它们可以以多播和单播方式使用。PulseAudio 专门使用包含音频数据的多播 RTP/SDP/SAP。
有关在 PulseAudio 中使用这些技术的更多信息,请查看模块文档?。
如何使用 PulseAudio 将音乐从我的主 PC 流式传输到我的 LAN 与多台带有扬声器的 PC?
在发送方创建一个 RTP 接收器:
这将使 rtp 成为默认接收器,即默认情况下所有应用程序都将写入此虚拟 RTP 设备。在客户端只需加载接收器模块:
现在您可以在发送方播放您喜欢的音乐,所有客户端将同时输出。顺便说一句:您可以像这样设置多个发件人机器。音频数据将在客户端混合。
如何使用 PulseAudio 在整个 LAN 上共享一个 LINE-IN/MIC 插孔?
在发送方只需加载 RTP 发送方模块:
在接收方,创建一个 RTP 源:
现在音频数据将从默认源中获得
rtp_monitor
。如何将 PulseAudio 用作 LAN 的基于 RTP 的 N:N 多播会议解决方案?
加载所有必要的音频驱动程序进行录制和播放后,只需使用默认参数加载 RTP 接收器和发送器模块:
只要 PulseAudio 守护程序运行,麦克风数据就会流式传输到网络,并且来自其他主机的数据会在本地播放。请注意,这可能会导致大量流量。因此考虑传递
rate=8000 format=ulaw channels=1
给发送器模块以节省带宽,同时仍保持良好的语音传输质量。我可以拥有多个多播 RTP 组吗?
是的!只需使用新的多播组地址。使用 RTP 模块的
destination
/sap_address
参数来选择它们。从 225.0.0.x 范围内选择您的组地址,以确保音频数据永远不会离开 LAN。!AirPort RAOP 流式传输
与
module-raop-sink
.里格尔
与
module-rygel-media-server
.你的问题的规格有点轻。我建议你发帖:
/etc/pulse/default.pa
。同时,我不会尝试编写关于如何将 Pulseaudio 用于 RTP/Multicast 的通用描述。我会等到您添加该信息以帮助确定您的问题。
可能有用的操作:
sudo ln -s /usr/lib/pulse-13.99.1 /usr/lib/pulse-13.99
来源:1、2)设置指向实际版本的软链接。流式音频选项
关于您的问题:我还有哪些其他选择?
音乐播放器守护程序 (MPD)
“ Music Player Daemon (MPD) 是一个灵活、强大的服务器端应用程序,用于播放音乐。通过插件和库,它可以播放各种声音文件,同时受其网络协议的控制。 ”
MPD 是一个成熟的服务器端应用程序,正在积极开发中。有很长的可用客户列表。
冰播
" Icecast 是一个流媒体(音频/视频)服务器,目前支持 Ogg(Vorbis 和 Theora)、Opus、WebM 和 MP3 流。它可以用于创建 Internet 广播电台或私人运行的点唱机以及介于两者之间的许多东西。它非常通用,可以相对容易地添加新格式,并支持通信和交互的开放标准。 ”
您可以在如何设置 Icecast 服务器以在我的网络中广播音频?. 无需在此处复制粘贴。
其他选项
...在这里列出。
相关:
我将两个系统都升级到了 Ubuntu 21.04(只是例行公事),在这样做之后,虽然 RTP/Multicast 并没有更好(事实上,它更糟),但使用 zeroconf 选项(见截图)工作得很好。它仍然不完美,但比以前好多了。
它足够流畅,可以清晰地从一个系统收听来自另一个系统的音乐,而不会出现持续的卡顿或失真。