尝试将音频从 mpd 发送到 pulseaudio 时出现“无法打开音频输出”错误

Fre*_*ton 7 sound pulseaudio mpd

当我尝试通过pulseaudio播放mpd时,mpd.log报告:

脉冲输出:无法启用“粉红摇滚”[脉冲]:pa_context_connect() 失败:连接被拒绝

  • Pulse 似乎工作正常,因为 pacmd list-sinks 显示了我所有的脉冲接收器,meb 浏览器音频通过默认接收器播放良好,而 VLC 可以通过其中任何一个播放声音。
  • 如果我通过 alsa 而不是脉冲发送输出,mpd 工作正常
  • mpd 和pulseaudio 都在我的帐户(fred) 下运行。
  • fred、mpd 和pulseaudio 都是pulse、pulse-access 和audio 组的成员。
  • 我什至尝试过不同版本的pulseaudio:Ubuntu 14.04附带的4.0,用pulse 4.0构建的实验性RAOP2,以及用pulse 5.0构建的实验性RAOP2。mpd 不适用于其中任何一个。

我的 mpd.conf 文件是普通的;脉冲部分是通用的:

    audio_output { 
    type "pulse" 
    name "General Pulse" 
    }
Run Code Online (Sandbox Code Playgroud)

虽然正如 laugeo 在下面建议的那样,我也尝试过指定一个单独的接收器,两个都按名称:

audio_output {
    type        "pulse"
    name        "ROCKI"
    sink        "raop_output.ASAP1826T.local"
}
Run Code Online (Sandbox Code Playgroud)

并通过索引#:

audio_output {
    type        "pulse"
    name        "ROCKI"
    sink        "4"
}
Run Code Online (Sandbox Code Playgroud)

我接下来应该尝试什么?将pulseaudio配置为作为系统服务运行是否有帮助?

这是在 Ubuntu 14.04、pulseaudio 4.0(和 5.0)、音乐播放器守护进程 0.18.7 上

更新: 我找到了这个博客,其中博主 Louiz 似乎解决了相同(或非常相似)的问题:

MPD 显然试图生成一个新的pulseaudio 进程,作为我自己的用户,它失败了,因为它已经在运行。我不明白为什么它不能只使用现有的pulseaudio 实例,而不尝试生成一个新实例。

感谢这篇文章,我明白了。

MPD 无法找到已经运行的pulseaudio 实例,因为环境变量 XDG_RUNTIME_DIR 没有设置,这是pulseaudio 存储其文件(套接字、进程pid 等)的地方。

我尝试了他的解决方案:

创建一个新文件 /etc/systemd/system/mpd.service.d/fixenv.conf 包含:

[服务]环境=XDG_RUNTIME_DIR=/run/user/1000

(将 1000 替换为您用户的 UNIX id。)

我重新启动并正确设置了 XDG_RUNTIME_DIR,并将其 pid 文件放在 /run/user/1000/pulse/ 目录中(我的用户 ID 是 1000),但我仍然从 mpd 得到相同的错误:

脉冲输出:无法启用“ROCKI”[脉冲]:pa_context_connect()失败:连接被拒绝

我每天都在学习更多关于 linux 的知识,但是套接字、进程 pid、systemd(Ubuntu 不是应该使用 upstart 吗?systemd 似乎正在运行和启动一些东西)等等现在都高于我的工资等级 - 我'我在树林里迷路了。

lau*_*geo 3

最后,比pulseaudio守护进程模式更好的是,最好的解决方案是它是作为你自己(而不是mpd用户)运行mpd,所以你可以毫无问题地使用你自己的会话pulseaudio。

一个不同的答案,但经过测试并且也有效:
配置pulseaudio以“守护程序模式”而不是标准“用户模式”运行

  • 在终端中,运行
    sudo gedit /etc/init/pulseaudio.conf
    然后取消注释第 20 行删除#以获取:
    start on runlevel [2345]
    保存并退出 gedit。
  • 在终端中运行这 2 个命令:
    sudo usermod -aG pulse,pulse-access mpd
    sudo usermod -aG pulse,pulse-access your-login
    在第二个命令中,替换“your-login”

现在重新启动:希望它能起作用。

注意:作为信息,本页列出了必须避免使用pulseaudio守护进程模式的原因,但我发现它在单用户电脑上没问题(特别是我没有看到比用户模式更多的CPU/内存使用量)。