Jak mogę wymusić ponowne odkrycie wirtualnych urządzeń dźwiękowych PulseAudio?

8

Korzystam z funkcji PulseAudio sieciowych urządzeń dźwiękowych (nie Multicast / RTP), aby odtwarzać dźwięk z mojego netbooka na sprzęcie audio podłączonym do HTPC w domu. To tworzy wirtualne urządzenie dźwiękowe, którego mogę użyć zamiast fizycznego wbudowanego. W większości przypadków działa to dobrze. Czasami jednak wirtualne urządzenie dźwiękowe po prostu się nie pojawia. Odłączanie i ponowne podłączanie do sieci pomaga czasem, ale nie zawsze, irytujące i potencjalnie złe dla istniejących połączeń TCP.

Więc moje pytanie w zasadzie brzmi: czy jest jakiś sposób, aby powiedzieć PulseAudio „Hej, spójrz jeszcze raz, jeśli naprawdę nie możesz znaleźć sieciowego urządzenia dźwiękowego”.


Edycja: Rozładowywanie i przeładowywanie za module-zeroconf-discoverpomocą pacmdnie pomaga również i nie wydaje się, że jest to problem avahi per se, ponieważ avahi-browse -t --all | grep PulseAudiopokazuje wiele dobrze wyglądających rzeczy, nawet jeśli urządzenia nie są wymienione w pavucontrol lub pacmd list-sinks.


Edycja 2: Używam Ubuntu 12.04 na obu polach, niezależnie od tego, jaką różnicę może to zrobić.

chrześcijanin
źródło
Jeśli brakuje Ci informacji, aby podać pomocne komentarze, a nawet odpowiedź, powiedz mi to.
Christian

Odpowiedzi:

7
  1. Na komputerze „Sink” (na którego głośniku chcesz odtworzyć dźwięk) otwórz powłokę poleceń PulseAudio, wchodząc do terminalu i wydając następujące polecenie.

    $ pacmd

    Zobaczysz powłokę podobną do języka Python z następującym komunikatem powitalnym.

    Welcome to PulseAudio! Use "help" for usage information. >>>
  2. Lista urządzeń, które mogą odtwarzać dźwięk na komputerze PC za pomocą polecenia w powłoce PulseAudio.
    >>> list-sinks
    Teraz zobaczysz szczegółową listę wszystkich dźwięków.
  3. Po prostu zanotuj pełną nazwę wybranego zlewu. Pojawiłby się jako atrybut karty dźwiękowej. Na przykład w moim przypadku jest to:

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

Ciąg moich zainteresowań to po prostu „alsa_output.pci-0000_00_1b.0.analog-stereo”

  1. Teraz przejdź do komputera źródłowego (tj. Źródła strumieni multimediów audio), otwórz terminal i wydaj następującą komendę.

    $ 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 to adres IP komputera stacjonarnego, „alsa_output.pci-0000_00_1b.0.analog-stereo ”to ciąg, który właśnie skopiowałeś z terminala zlewu, a„ home_theater ”to tylko fantazyjna nazwa do wywołania tego wirtualnego urządzenia wyjściowego dźwięku na twoim komputerze.

  2. Na koniec wybierz to wirtualne urządzenie dźwiękowe:
    $ pacmd set-default-sink home_theater

    Wallah !!
Rishav Ambasta
źródło
Pracowałem dla mnie - działa również z nowym modułem tunelu zlewu i tylko z adresem IP hosta zlewu bez konieczności określania dokładnego zlewu (używam tylko jednego na tym Raspberry Pi podłączonym do mojego stereo, więc nie ma takiej potrzeby): 'pactl load-module module-tunnel-sink-new server = [2001: 470: ca90: 4: ba27: ebff: fee2: ada9] '- dzięki!
Jean-Marc Liotier,
4

Proste sudo service avahi-daemon restartrobi trick, nawet jeśli avahi-browsewidzi urządzenia przed ponownym uruchomieniem avahi. Dzięki Takkatowi za wskazanie mi właściwego kierunku.

chrześcijanin
źródło
3

Ta odpowiedź jest nieprzetestowana, więc może nie działać, ale może prowadzić do właściwego kierunku.

Mogę potwierdzić nierozwiązane problemy z usługą Avahi, która czasami nie może połączyć się z serwerem PulseAudio. Ponowne połączenie może się powieść, uruchamiając ponownie sieć lub serwer pulseaudio, ale niestety nie zawsze to działa.

Aby rozwiązać ten problem, możemy spróbować ustanowić sieciowy strumień audio przy użyciu natywnego protokołu TCP, aby przesyłać strumieniowo bezpośrednio do adresu IP zamiast przy użyciu rozpoznawania nazw Avahi.

W tym celu możemy tunelować zdalny zlew, ładując moduł-zlew-tunel po stronie odbiornika. Na nadawcy musimy włączyć natywny protokół TCP, ładując moduł-natywny-protokół-tcp .

Zobacz także to pytanie dotyczące terminologii i sposobu definiowania PULSE_SERVERzmiennej:

Jak automatycznie ustawić domyślny zlew PulseAudio na zdalny serwer podczas rozruchu - Ubuntu 9.04

To dość stare pytanie dla Ubuntu 9.04, ale według mojej terminologii i procedur knwoledge od tego czasu niewiele się zmieniło.

Postępuj również zgodnie z PulseAudio Wiki na temat połączeń sieciowych .

Takkat
źródło
Dzięki za jeden link. Tamte rozwiązanie faktycznie działa również w moim przypadku: sudo service avahi-daemon restartnie spodziewałem się tego, ponieważ avahi-browsewidzi urządzenia nawet przed restartem, ale wydaje mi się, że restart powoduje ponowne wywołanie zwrotne, co jest wszystkim, czego potrzeba.
Christian
@Christian: dobrze, że pomogło. Na razie zrezygnowałem z Avahi.
Takkat
Nie jestem jednak pewien, czy zrozumiałem twoją propozycję. Czy mogę korzystać z rozpoznawania nazw DNS lub czy muszę znać adres IP? Wolałbym nie używać stałych adresów IP, chociaż można powiedzieć, że w przypadku HTPC jest to w porządku.
Christian
1
Tak, rozumiem dlaczego. Właśnie napisałem własną odpowiedź, ponieważ dla osób, które natkną się na to pytanie, ponieważ mają ten sam problem, wydaje się to najprostszym rozwiązaniem.
Christian
1

Możesz spróbować pulseaudio -k, który zabija usługę pulseaudio (wydaje się, że uruchamia się ponownie automatycznie). To przywróciło mi wcześniej sprawy.

Inną rzeczą, która czasami pomaga, jest odznaczenie, a następnie ponowne zaznaczenie pól w Pulseaudio Preferences(aka paprefs). Pola wyboru są Make discoverable PulseAudio network sound devices available locallyw Network Access, i Enable network access to local sound devicesw Network Server. Oczywiście to prawdopodobnie działa tylko dla tego, którego używasz.

klin
źródło