我如何强制重新发现 PulseAudio 虚拟声音设备?

我如何强制重新发现 PulseAudio 虚拟声音设备?

我使用网络音频设备(而非 Multicast/RTP)的 PulseAudio 功能,在家时在连接到 HTPC 的音频设备上播放上网本的声音。这会创建一个虚拟音频设备,然后我可以使用它来代替物理内置设备。大多数情况下,这都很好用。但有时,虚拟音频设备就是不出现。断开网络连接并重新连接有时会有所帮助,但并非总是如此,而且这很烦人,并且可能对现有的 TCP 连接不利。

所以我的问题基本上是:有没有办法告诉PulseAudio“嘿,如果你真的找不到网络声音设备。”?


编辑:卸载并重新加载module-zeroconf-discoverpacmd无济于事,而且出现本身就是 avahi 问题,因为avahi-browse -t --all | grep PulseAudio显示了很多看起来正确的东西,即使这些设备没有在 pavucontrol 或 中列出pacmd list-sinks


编辑2:我在两个盒子上都使用了 Ubuntu 12.04,以了解它可能带来的各种差异。

答案1

  1. 在“接收器”PC(您想要在其扬声器上播放声音)上,通过进入终端并发出以下命令来打开 PulseAudio 命令 shell。

    $ pacmd

    您将看到一个类似 Python 的 shell,其中包含以下欢迎消息。

    Welcome to PulseAudio! Use "help" for usage information. >>>
  2. 通过 PulseAudio shell 中的命令列出 PC 上可以播放声音的设备。
    >>> list-sinks
    现在您将看到所有声音接收器的详细列表。
  3. 只需记下完整的姓名您选择的接收器。它将作为声卡的属性出现。例如,在我的情况下它是:

    1 sink(s) available. index: 0 name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
    ...

我感兴趣的字符串只是“alsa_output.pci-0000_00_1b.0.analog-stereo”

  1. 现在进入源 PC(即音频多媒体流的来源),打开终端并发出以下命令。

    $ pactl load-module module-tunnel-sink "server=192.168.1.105 sink=alsa_output.pci-0000_00_1b.0.analog-stereo sink_name=home_theater"

    这里 192.168.1.105 是接收 PC 的 IP 地址,“alsa_output.pci-0000_00_1b.0.analog-stereo”是您刚从接收终端复制的字符串,“home_theater”只是在您的计算机上调用这个虚拟声音输出设备的花哨名称。

  2. 最后通过以下方式选择此虚拟声音设备:
    $ pacmd set-default-sink home_theater

    哇啦!!

答案2

简单sudo service avahi-daemon restart操作即可,尽管avahi-browse可以看到 avahi 重启之前的设备。感谢 Takkat 为我指明了正确的方向。

答案3

这个答案尚未经过测试,因此可能不起作用,但它可能会引导您走向正确的方向。

我可以确认尚未解决Avahi 服务存在问题有时无法连接到 PulseAudio 服务器。我们可以通过重新启动网络或 pulseaudio 服务器成功重新连接,但遗憾的是这并不总是有效。

为了解决这个问题,我们可以尝试使用本机 TCP 协议建立网络音频流以直接流式传输到 IP,而不是使用 Avahi 名称解析。

为此,我们可以通过加载模块隧道接收器在接收方。在发送方,我们必须通过加载模块本机协议 TCP

另请参阅此问题以了解术语以及如何定义PULSE_SERVER变量:

如何在启动时自动将 PulseAudio 默认接收器设置为远程服务器 - Ubuntu 9.04

对于 Ubuntu 9.04 来说这是一个相当老的问题,但据我所知,从那时起术语和程序并没有发生太大变化。

请同时关注PulseAudio Wiki 上的网络连接

答案4

您可以尝试pulseaudio -k,这会终止 pulseaudio 服务(它似乎会自动重新启动)。这之前曾让我恢复过问题。

另一个有时有帮助的方法就是取消勾选然后重新勾选Pulseaudio Preferences(又名paprefs) 中的复选框。复选框位于Make discoverable PulseAudio network sound devices available locallyNetwork AccessEnable network access to local sound devicesNetwork Server显然,这可能只适用于您正在使用的那个。

相关内容