如何设置PulseAudio接收器?


16

我正在尝试在Raspberry Pi上设置PulseAudio接收器,以便将PC上的所有系统声音流式传输。最好的方法是什么?

例如,可以看电影还是等待时间太长?我前一段时间使用gstreamer进行了尝试,但是延迟大约为2秒,这对我的要求没有用。


1
我确实有一两秒钟的延迟。
goldilocks

Answers:


19

希望在网络上创建“直接连接” 的官方说明仅对大多数人有效,但似乎pulseaudio和我相处的并不好:这花了我几个小时。[除了“直接连接”之外,您还可以使用下文进一步介绍的“隧道”方法,但我建议您首先阅读此内容。

我现在有一个(fedora 17)桌面流向pi。我已将/etc/pulse两侧的配置文件最小化。在桌面端:

/etc/pulse/client.conf

# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713

我的pi的LAN地址带有默认的pulseaudio端口。但是,这让我有些困惑-在指定了服务器的情况下,pulseaudio甚至无法启动:

> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.

它会在前台运行(可能是因为它随后不读取pulse-client.conf?)。 但是,事实证明,您根本不必在桌面(发送)端运行它,而pulseaudio文档中并未对此进行说明。使用lsof -i -P它看来,各种媒体播放器的低级插件可以完成这项工作。

因此,如果您要做的就是使用网络,那么实际上只需一行“ client.conf”就可以在台式机/客户端上使用(但请参见下面的“还有更多并发症”)。

尽管pulseaudio守护程序(在接收/服务器端)可以作为系统服务运行,但是pulse的开发人员建议不要使用它,实际上,在pi上,init脚本只会发出警告:您仍然必须启动它自己。Fedora甚至不包含针对它的systemd引导服务条目。

因此,在pi端,您应显式启动和停止pulseaudio服务器进程,按以下方式配置:

/etc/pulse/daemon.conf

# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours

您可以使用-1 exit-idle-time来使守护程序无限期地运行。请注意,这是秒,默认值是20(这意味着如果您不设置此项,它将“神秘地”消失)。

/etc/pulse/default.pa

# See man default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.2.0/24
load-module module-alsa-sink device=hw:0,0

由于这是一个网络应用程序,因此以root用户身份运行它不是一个好主意。但是,如中所述man pulseaudio,“精简”该过程以使其具有更高的优先级也是一个好主意。您可以使用手动进行此操作nice,但如果可执行文件为“ setuid”,pulseaudio会自动为root或pulse-rt组成员执行此操作,这意味着它可以利用一些root特权,然后转换为正确的非特权uid(和也需要这样做)。因此(作为根或sudo):pingpasswd

chmod u+s /usr/bin/pulseaudio

pulse-rt在raspbian上安装pulseaudio时,没有创建任何组,因此:

groupadd pulse-rt

这将给您一个类似于1003的提示。将(例如)用户pi添加到该组:

usermod -aG pulse-rt pi

但是,在树莓派上,您仍然无法像pi那样吸引人。为此,添加到/etc/security/limits.conf

@pulse-rt       hard nice -20
@pulse-rt       soft nice -20

在进行这些更改之前,您实际上必须先登录。如果您在pi上使用ssh,请使用login。现在,您可以启动Pulseaudio,它将自动降低-11,这可能比大多数其他进程的优先级更高(请参阅中的NICE值top)。

在播放从网络流式传输的声音时,pi上的pulseaudio占用大约10%的CPU和少量的内存。:)它和我的桌面都在有线局域网上;脉冲流传输原始pcm数据(我相信),因此带宽使用量对应于源的采样率,即1 kB / s或更高。不幸的是,如果您正在观看视频,声音会明显滞后。

还有更多并发症...

不幸的是,我的PC上的各种声音应用程序都无法立即运行。 mpg123根本不会运行。为此,在fedora上,您需要mpg123-plugins-pulseaudio包装。对于浏览器中的Flash内容(例如youtude),您需要alsa-plugins-pulseaudio(这些实际上是连接到远程服务器的内容)。其他发行版应该有类似的软件包。如果您以前使用过pulseaudio(我不是),则可能已经安装了它们。

KDE的桌面铃声也无法正常运行。这是一个较难解决的问题,因为它正在寻找本地的pulseaudio服务器,并且如上所述,使用直接连接意味着无法在本地运行任何服务器。解决此问题的方法是使用“隧道”方法。

模块隧道槽

这是pulseaudio文档中提到的另一种方法。在这种情况下,您的服务器两边都在运行,而另一手则移交给另一台。为此,请在其中注释掉“默认服务器” /etc/client.conf并添加/etc/default.pa包含以下内容的本地:

load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1

如果您不插入sink_name,pulseaudio将不会启动。在sink指上的pI侧,然后还需要一个名称水槽名称; 在其中添加与sink_namemodule-alsa-sink行对应的内容default.pa

load-module module-alsa-sink device=hw:0,0 sink_name=bcm1 

从两侧启动服务器并进行预备... 现在,包括KDE哔哔声在内的所有内容都被携带了,但浏览器Flash的播放却严重停顿了。但是,在另一个桌面环境下(实际上只是一个窗口管理器fvwm)就可以了。

我喜欢KDE,但可以轻松自在地生活,所以现在我将坚持直接连接。

故障排除

如果遇到问题,pulseaudio -vvvv --log-level=debug在pi上使用会提供很多调试消息。最初,当我在pi上听不到声音时,报告了一个“与ALSA bcm2835驱动程序中的错误有关的问题”,这对我来说似乎很奇怪,因为仅凭alsa声音就可以了,而且我敢肯定周围有pi软件在pulseaudio上- apt-get remove pulseaudio重新安装apt-get install pulseaudio似乎可以解决此问题。。。不是我喜欢的解决方案,但是,嘿,至少现在我可以收听tish了,而不必将扬声器插入每个盒子。大多。


感谢您的广泛回答。但是,有一个问题:Pi发出的音频会怎样?
文森特

Dunno,如果我尝试过(我不再这样做了),但pulseaudio应该是一个多路复用器,因此它应该可以工作。
goldilocks
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.