Как я могу форсировать повторное обнаружение виртуальных звуковых устройств PulseAudio?

Я использую функцию PulseAudio сетевых звуковых устройств (не Multicast / RTP) для воспроизведения звука с моего нетбука на аудиооборудовании, подключенном к HTPC, когда дома. Это создает виртуальное звуковое устройство, которое я затем могу использовать вместо физического встроенного. Большую часть времени это работает просто отлично. Однако иногда виртуальное звуковое устройство просто не появляется. Отключение от сети и повторное подключение к ней иногда помогают, но не всегда, и это раздражает и потенциально вредно для существующих TCP-подключений.

Таким образом, мой вопрос в основном таков: есть ли способ сказать PulseAudio: «Эй, просто посмотрите еще раз, если вы действительно не можете найти сетевое звуковое устройство». ] Редактировать: Выгрузка и перезагрузка module-zeroconf-discover с помощью pacmd тоже не помогает, и не выглядит как проблема авахи как таковая, поскольку avahi-browse -t --all | grep PulseAudio показывает много правильные вещи, даже если устройства не перечислены в pavucontrol или pacmd list-sinks.


Редактировать 2: Я использую Ubuntu 12.04 на обоих полях для всех различий, которые он может иметь.

8
задан 25 June 2012 в 10:00

4 ответа

  1. На "Приемнике" ПК (На чьем динамике Вы хотите играть звук) открывают командный процессор PulseAudio путем входа в Терминал и выдачи следующей команды.

    $ pacmd

    Вы будете видеть подобную Python оболочку со следующим желанным сообщением.

    Welcome to PulseAudio! Use "help" for usage information. >>>
  2. Перечислите устройства, которые могут играть звук на ПК командой в оболочке PulseAudio.
    >>> 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. Теперь Пойдите на Источник ПК (т.е. источник аудио мультимедийных потоков), откройте терминал и дайте следующую команду

    $ 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 IP-адрес приемника, ПК, "alsa_output.pci-0000_00_1b.0.analog-stereo" является строкой, которую Вы просто скопировали с терминала приемника, и "home_theater" является просто необычным именем для вызова этого виртуального устройства звукового вывода на компьютере.

  2. Наконец выберите это виртуальное звуковое устройство:
    $ pacmd set-default-sink home_theater

    Wallah!!
7
ответ дан 25 June 2012 в 10:00

Простой sudo service avahi-daemon restart добивается цели, даже если avahi-browse видит устройства до перезапуска avahi. Спасибо Таккату за то, что он направил меня в правильном направлении.

0
ответ дан 25 June 2012 в 10:00

Этот ответ не проверен, поэтому он может не сработать, но может привести вас в правильном направлении.

Я могу подтвердить нерешенные проблемы со службой Avahi , которая иногда не может подключиться к серверу PulseAudio. Мы можем успешно восстановить соединение, либо перезапустив сеть, либо сервер pulseaudio, но, увы, это не всегда работает.

Чтобы преодолеть эту проблему, мы можем попытаться установить сетевой аудиопоток, используя собственный протокол TCP для потоковой передачи непосредственно на IP, а не с помощью разрешения имен Avahi.

Для этого мы можем туннелировать удаленный приемник, загрузив модуль модульный туннель-приемник на стороне приемника. На отправителе мы должны включить собственный протокол TCP, загрузив module-native-protocol-tcp .

См. Также этот вопрос для терминологии и определения переменной PULSE_SERVER:

Как автоматически установить приемник по умолчанию PulseAudio на удаленный сервер при загрузке - Ubuntu 9.04

[ 1112] Это довольно старый вопрос для Ubuntu 9.04, но с моей точки зрения терминология и процедуры не сильно изменились с тех пор.

Также следуйте PulseAudio Wiki по сетевым подключениям .

0
ответ дан 25 June 2012 в 10:00

Вы можете попробовать pulseaudio -k, который убивает службу pulseaudio (кажется, он запускается снова автоматически). Это вернуло мне вещи назад.

Другая вещь, которая иногда помогает, снимает флажки и затем повторно ставит галочки в Pulseaudio Preferences (a.k.a. paprefs). Флажки Make discoverable PulseAudio network sound devices available locally в Network Access и Enable network access to local sound devices в Network Server. Очевидно, это работает только для того, что вы используете.

0
ответ дан 25 June 2012 в 10:00

Другие вопросы по тегам:

Похожие вопросы: