Comment forcer la redécouverte des périphériques audio virtuels PulseAudio?

8

J'utilise la fonction PulseAudio des périphériques audio réseau (pas Multicast / RTP) pour lire le son de mon netbook sur l'équipement audio connecté au HTPC à la maison. Cela crée un périphérique audio virtuel que je peux ensuite utiliser à la place du périphérique physique intégré. La plupart du temps, cela fonctionne très bien. Parfois, cependant, le périphérique audio virtuel n'apparaît tout simplement pas. Se déconnecter et se reconnecter au réseau aide parfois mais pas toujours et c'est ennuyeux et potentiellement mauvais pour les connexions TCP existantes.

Donc, ma question est essentiellement la suivante: existe-t-il un moyen de dire à PulseAudio "Hé, regardez à nouveau si vous ne trouvez vraiment pas de périphérique audio réseau".


Edit: Décharger et recharger le module-zeroconf-discoveravec pacmdn'aide pas non plus et cela ne semble pas être un problème avahi en soi car il avahi-browse -t --all | grep PulseAudiomontre beaucoup de choses à la recherche de la bonne apparence, même lorsque les appareils ne sont pas répertoriés dans pavucontrol ou pacmd list-sinks.


Edit 2: J'utilise Ubuntu 12.04 sur les deux boîtes pour toute la différence que cela pourrait faire.

Christian
la source
Si vous manquez des informations pour fournir des commentaires utiles ou même une réponse, veuillez me le dire.
Christian

Réponses:

7
  1. Sur le PC "Sink" (sur le haut-parleur dont vous voulez jouer le son), ouvrez le shell de commande PulseAudio en allant dans Terminal et en exécutant la commande suivante.

    $ pacmd

    Vous verrez un shell de type Python avec le message de bienvenue suivant.

    Welcome to PulseAudio! Use "help" for usage information. >>>
  2. Répertoriez les appareils pouvant lire le son sur le PC par la commande dans le shell PulseAudio.
    >>> list-sinks
    Vous verrez maintenant une liste détaillée de tous les puits de son.
  3. Notez simplement le nom complet de l'évier de votre choix. Il apparaîtrait comme un attribut de la carte son. Par exemple dans mon cas c'est:

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

La chaîne qui m'intéresse est simplement "alsa_output.pci-0000_00_1b.0.analog-stereo"

  1. Maintenant, allez sur le PC source (c'est-à-dire l'origine des flux multimédias audio), ouvrez le terminal et émettez la commande suivante

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

    Ici 192.168.1.105 est l'adresse IP du PC récepteur, "alsa_output.pci-0000_00_1b.0.analog-stereo "est la chaîne que vous venez de copier à partir du terminal du récepteur et" home_theater "n'est qu'un nom de fantaisie pour appeler ce périphérique de sortie audio virtuel sur votre ordinateur.

  2. Enfin, sélectionnez ce périphérique audio virtuel par:
    $ pacmd set-default-sink home_theater

    Wallah !!
Rishav Ambasta
la source
Fonctionné pour moi - fonctionne également avec le nouveau module de puits de tunnel et avec l'adresse IP hôte du puits sans avoir besoin de spécifier le puits exact (j'utilise un seul sur ce Raspberry Pi connecté à ma chaîne stéréo, donc pas besoin de ça): 'pactl load-module module-tunnel-sink-new server = [2001: 470: ca90: 4: ba27: ebff: fee2: ada9] '- merci!
Jean-Marc Liotier
4

Un simple sudo service avahi-daemon restartfait l'affaire, même s'il avahi-browsevoit les appareils avant le redémarrage d'avahi. Merci à Takkat de m'avoir pointé dans la bonne direction.

Christian
la source
3

Cette réponse n'est pas testée, elle pourrait donc ne pas fonctionner, mais elle pourrait vous conduire dans la bonne direction.

Je peux confirmer les problèmes non résolus avec un service Avahi qui est parfois incapable de se connecter à un serveur PulseAudio. Nous pouvons réussir la reconnexion en redémarrant le réseau ou le serveur pulseaudio mais hélas cela ne fonctionne pas toujours.

Pour surmonter ce problème, nous pouvons essayer d'établir un flux audio réseau en utilisant le protocole TCP natif pour diffuser directement sur IP plutôt que d'utiliser une résolution de nom Avahi.

Pour ce faire, nous pouvons tunneler un récepteur distant en chargeant le module-tunnel-sink du côté récepteur. Sur l'expéditeur, nous devons activer le protocole TCP natif en chargeant module-native-protocol-tcp .

Voir aussi cette question pour la terminologie et comment définir la PULSE_SERVERvariable:

Comment définir automatiquement le récepteur par défaut PulseAudio sur le serveur distant au démarrage - Ubuntu 9.04

C'est une question assez ancienne pour Ubuntu 9.04 mais pour ma terminologie et les procédures de knwoledge, cela n'a pas beaucoup changé depuis lors.

Veuillez également suivre le wiki PulseAudio sur les connexions réseau .

Takkat
la source
Merci pour le seul lien. La solution fonctionne également dans mon cas: sudo service avahi-daemon restartje ne m'attendais pas à cela car avahi-browsevoit les appareils avant même le redémarrage, mais je suppose que le redémarrage déclenche le rappel pour être rappelé, ce qui est tout ce qui est nécessaire.
Christian
@Christian: bon ça a aidé. J'ai abandonné Avahi pour le moment.
Takkat
Je ne sais pas si j'ai bien compris votre proposition. Puis-je utiliser la résolution de nom DNS ou dois-je connaître l'IP? Je préfère ne pas utiliser d'adresses IP fixes bien que vous puissiez dire que dans le cas du HTPC, c'est une chose correcte à faire.
Christian
1
Ouais, je peux comprendre pourquoi. Je viens d'écrire ma propre réponse, car pour les personnes qui trébuchent sur cette question parce qu'elles ont le même problème, cela semble être la solution la plus simple.
Christian
1

Vous pouvez essayer pulseaudio -k, ce qui tue le service pulseaudio (il semble redémarrer automatiquement). Cela m'a ramené des choses auparavant.

L'autre chose qui aide parfois est de décocher puis de recoller les cases Pulseaudio Preferences(aka paprefs). Les cases à cocher sont Make discoverable PulseAudio network sound devices available locallyen Network Accesset Enable network access to local sound devicesen Network Server. Évidemment, cela ne fonctionne probablement que pour celui que vous utilisez.

gib
la source