Answers:
希望在网络上创建“直接连接” 的官方说明仅对大多数人有效,但似乎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):ping
passwd
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_name
该module-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了,而不必将扬声器插入每个盒子。大多。