Come posso forzare la riscoperta dei dispositivi audio virtuali PulseAudio?


8

Sto usando la funzione PulseAudio dei dispositivi audio di rete (non Multicast / RTP) per riprodurre l'audio dal mio netbook sull'apparecchiatura audio collegata all'HTPC quando è a casa. Questo crea un dispositivo audio virtuale che posso quindi utilizzare al posto di quello fisico incorporato. Il più delle volte funziona bene. A volte, tuttavia, il dispositivo audio virtuale non viene visualizzato. Disconnettersi e riconnettersi alla rete aiuta a volte ma non sempre ed è fastidioso e potenzialmente dannoso per le connessioni TCP esistenti.

Quindi la mia domanda in sostanza è: c'è un modo per dire a PulseAudio "Ehi, guarda di nuovo se non riesci davvero a trovare un dispositivo audio di rete."?


Modifica: scaricare e ricaricare il module-zeroconf-discovercon pacmdnon aiuta neanche e non sembra essere un problema avahi di per sé poiché avahi-browse -t --all | grep PulseAudiomostra un sacco di cose di bell'aspetto, anche quando i dispositivi non sono elencati in Pavucontrol o pacmd list-sinks.


Modifica 2: sto usando Ubuntu 12.04 su entrambe le scatole per tutte le differenze che potrebbe fare.


Se ti mancano informazioni per fornire commenti utili o anche una risposta, per favore dimmelo.
Christian,

Risposte:


7
  1. Sul PC "Sink" (sul cui altoparlante si desidera riprodurre l'audio) aprire la shell dei comandi PulseAudio accedendo a Terminal ed eseguendo il comando seguente.

    $ pacmd

    Vedrai una shell simile a Python con il seguente messaggio di benvenuto.

    Welcome to PulseAudio! Use "help" for usage information. >>>
  2. Elencare i dispositivi che possono riprodurre l'audio sul PC tramite il comando nella shell PulseAudio.
    >>> list-sinks
    Ora vedrai un elenco dettagliato di tutti i dissipatori di suoni.
  3. Basta annotare il nome completo del lavandino di tua scelta. Sembrerebbe come un attributo della scheda audio. Ad esempio nel mio caso è:

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

La stringa di mio interesse è solo "alsa_output.pci-0000_00_1b.0.analog-stereo"

  1. Ora vai sul PC di origine (ovvero l'origine dei flussi audio multimediali), apri il terminale ed emetti il ​​seguente comando

    $ 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"

    Qui 192.168.1.105 è l'indirizzo IP del PC sink, "alsa_output.pci-0000_00_1b.0.analog-stereo "è la stringa che hai appena copiato dal terminale di sink e" home_theater "è solo un nome di fantasia per chiamare questo dispositivo di output audio virtuale sul tuo computer.

  2. Finalmente seleziona questo dispositivo audio virtuale da:
    $ pacmd set-default-sink home_theater

    Wallah !!

Ha funzionato per me - funziona anche con il nuovo modulo del sink di tunnel e con solo l'indirizzo IP dell'host del sink senza dover specificare il sink esatto (ne uso solo uno su questo Raspberry Pi collegato al mio stereo, quindi non è necessario): 'pactl load-module module-tunnel-sink-new server = [2001: 470: ca90: 4: ba27: ebff: fee2: ada9] '- grazie!
Jean-Marc Liotier,

4

Un semplice sudo service avahi-daemon restartfa il trucco, anche se avahi-browsevede i dispositivi prima che avahi si riavvii. Grazie a Takkat per avermi indicato nella giusta direzione.


3

Questa risposta non è stata testata, quindi potrebbe non funzionare, ma potrebbe portarti nella giusta direzione.

Posso confermare problemi irrisolti con un servizio Avahi che a volte non è in grado di connettersi a un server PulseAudio. Potremmo riuscire a riconnetterci riavviando la rete o il server pulseaudio, ma purtroppo non sempre funziona.

Per ovviare a questo problema, possiamo provare a stabilire un flusso audio di rete utilizzando il protocollo TCP nativo per eseguire lo streaming direttamente sull'IP anziché utilizzare una risoluzione dei nomi Avahi.

Per fare ciò possiamo tunnelare un lavandino remoto caricando il modulo-tunnel-sink sul lato ricevitore. Sul mittente dobbiamo abilitare il protocollo TCP nativo caricando module-native-protocol-tcp .

Vedi anche questa domanda per la terminologia e come definire la PULSE_SERVERvariabile:

Come impostare automaticamente il sink predefinito PulseAudio sul server remoto all'avvio - Ubuntu 9.04

È una domanda piuttosto vecchia per Ubuntu 9.04 ma per quanto riguarda la mia terminologia e le procedure non sono cambiate molto da allora.

Seguire anche il Wiki PulseAudio sulle connessioni di rete .


Grazie per l'unico link. La soluzione in questo caso funziona anche nel mio caso: sudo service avahi-daemon restartnon me l'aspettavo perché avahi-browsevede i dispositivi anche prima del riavvio, ma immagino che il riavvio inneschi la richiamata, che è tutto ciò che è necessario.
Christian,

@Christian: bene mi ha aiutato. Per il momento ho rinunciato ad Avahi.
Takkat,

Non sono sicuro di aver compreso la tua proposta. Posso usare la risoluzione dei nomi DNS o devo conoscere l'IP? Preferirei non usare IP fissi anche se potresti dire in caso di HTPC che questa è una cosa giusta da fare.
Christian,

1
Sì, posso capire il perché. Ho appena scritto la mia risposta, però, perché per le persone che si imbattono in questa domanda perché hanno lo stesso problema, sembra la soluzione più semplice.
Christian,

1

Potresti provare pulseaudio -k, il che uccide il servizio pulseaudio (sembra riavviarsi automaticamente). Questo mi ha riportato le cose prima.

L'altra cosa che a volte aiuta è deselezionare e quindi riprovare le caselle in Pulseaudio Preferences(aka paprefs). Le caselle di controllo sono Make discoverable PulseAudio network sound devices available locallydentro Network Accesse Enable network access to local sound devicesdentro Network Server. Ovviamente questo probabilmente funziona solo per quello che stai usando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.