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


8

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

所以我的问题基本上是:是否可以通过某种方式告诉PulseAudio“嘿,如果您真的找不到网络声音设备,请再看一遍。”


编辑:卸载和重装module-zeroconf-discoverpacmd不帮助任何,它不会出现是本身的的avahi问题,因为avahi-browse -t --all | grep PulseAudio节目大量的右看的东西,即使在设备未在pavucontrol或上市pacmd list-sinks


编辑2:我在两个盒子上都使用Ubuntu 12.04,因为它可能会产生所有不同。


如果您缺少任何信息以提供有用的评论甚至答案,请告诉我。
基督教徒

Answers:


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

    $ pacmd

    您将看到带有以下欢迎消息的类Python外壳。

    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

    Wallah!

为我工作-也可以与新的隧道接收器模块一起使用,也可以与接收器的主机IP地址一起使用,而无需指定确切的接收器(我在连接到我的立体声的Raspberry Pi上仅使用一个,因此不需要):'pactl load-module module-tunnel-sink-new server = [2001:470:ca90:4:ba27:ebff:fee2:ada9]'-谢谢!
Jean-Marc Liotier

4

sudo service avahi-daemon restart即使avahi-browse在avahi重新启动之前就看到了设备,也可以轻松完成。感谢Takkat为我指出正确的方向。


3

该答案未经测试,因此可能无法正常工作,但可能会带您正确的方向。

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

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

为此,我们可以通过在接收器端加载module-tunnel-sink来建立远程接收器的隧道。在发送方,我们必须通过加载module-native-protocol-tcp启用本机TCP协议。

另请参见此问题的术语以及如何定义PULSE_SERVER变量:

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

对于Ubuntu 9.04,这是一个相当老的问题,但从那时起,我的专业术语和程序并没有太大变化。

也请在网络连接上关注PulseAudio Wiki


感谢您的一个链接。那里的解决方案实际上也适用于我的情况:sudo service avahi-daemon restart我没想到,因为avahi-browse即使在重启之前也能看到设备,但是我猜想重启会再次触发回调,这就是全部所需。
基督教徒

@克里斯蒂安:很好,它有所帮助。我暂时放弃了Avahi。
塔卡特2012年

我不确定我是否理解您的主张。我可以使用DNS名称解析还是必须知道IP?我宁愿不使用固定IP,尽管您可能会说在HTPC的情况下这样做是可以的。
基督教徒

1
是的,我明白为什么。我只是写了我自己的答复,因为对于那些因为同样的问题而迷迷糊糊的人来说,这似乎是最简单的解决方案。
基督教徒

1

您可以尝试使用pulseaudio -k,它会杀死Pulseaudio服务(它似乎会自动再次启动)。这为我带来了很多东西。

有时有帮助的另一件事是取消选中然后再取消Pulseaudio Preferences(aka paprefs)中的框。复选框Make discoverable PulseAudio network sound devices available locally位于Network AccessEnable network access to local sound devicesNetwork Server。显然,这可能仅适用于您所使用的那个。

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.