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

8

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

Поэтому мой вопрос в основном таков: есть ли способ сказать PulseAudio: «Эй, просто посмотри еще раз, если ты действительно не можешь найти сетевое звуковое устройство».?


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


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

Кристиан
источник
Если вам не хватает информации, чтобы предоставить полезные комментарии или даже ответ, пожалуйста, сообщите мне об этом.
Кристиан

Ответы:

7
  1. На компьютере «Sink» (на котором вы хотите воспроизвести звук) откройте командную оболочку 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-стерео"

  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 !!
Ришав Амбаста
источник
Работал для меня - работает и с новым модулем туннельного приемника и только с IP-адресом хоста приемника, без необходимости указывать точный приемник (я использую только один на этом Raspberry Pi, подключенном к моей стереосистеме, так что в этом нет необходимости): 'pactl модуль модуля загрузки туннеля - новый сервер = [2001: 470: ca90: 4: ba27: ebff: fee2: ada9] '- спасибо!
Жан-Марк Лиотье
4

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

Кристиан
источник
3

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

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

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

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

Смотрите также этот вопрос для терминологии и как определить PULSE_SERVERпеременную:

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

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

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

Takkat
источник
Спасибо за одну ссылку. Решение в моем случае действительно работает и в моем случае: sudo service avahi-daemon restartя не ожидал этого, потому что avahi-browseвидит устройства еще до перезапуска, но я полагаю, что перезапуск инициирует повторный вызов, что является всем необходимым.
Кристиан
@ Кристиан: хорошо, это помогло. Я отказался от Avahi в настоящее время.
Таккат
Я не уверен, что понял ваше предложение. Могу ли я использовать разрешение имен DNS или мне нужно знать IP? Я бы предпочел не использовать фиксированные IP-адреса, хотя вы могли бы сказать, что в случае HTPC это нормально.
Кристиан
1
Да, я могу понять почему. Я просто написал свой собственный ответ, потому что для людей, которые сталкиваются с этим вопросом из-за одной и той же проблемы, это кажется самым простым решением.
Кристиан
1

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

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

контрклин
источник