Como forçar a redescoberta dos dispositivos de som virtual PulseAudio?


8

Estou usando o recurso PulseAudio de dispositivos de som de rede (não Multicast / RTP) para reproduzir som do meu netbook no equipamento de áudio conectado ao HTPC quando estiver em casa. Isso cria um dispositivo de som virtual que eu posso usar em vez do dispositivo físico incorporado. Na maioria das vezes isso funciona muito bem. Às vezes, no entanto, o dispositivo de som virtual simplesmente não aparece. Desconectar e reconectar-se à rede às vezes ajuda, mas nem sempre, e é irritante e potencialmente ruim para as conexões TCP existentes.

Então, minha pergunta é basicamente: Existe alguma maneira de dizer ao PulseAudio "Ei, basta olhar novamente se você realmente não consegue encontrar um dispositivo de som de rede."?


Editar: descarregar e recarregar o module-zeroconf-discovercom pacmdtambém não ajuda e não parece ser um problema avahi por si só, pois avahi-browse -t --all | grep PulseAudiomostra muitas coisas com boa aparência, mesmo quando os dispositivos não estão listados no pavucontrol ou pacmd list-sinks.


Edit 2: Estou usando o Ubuntu 12.04 em ambas as caixas para toda a diferença que possa fazer.


Se estiver faltando alguma informação para fornecer comentários úteis ou mesmo uma resposta, informe-me.
Christian

Respostas:


7
  1. No PC "Sink" (em cujo alto-falante você deseja reproduzir o som), abra o shell de comando PulseAudio entrando no Terminal e emitindo o seguinte comando.

    $ pacmd

    Você verá um shell semelhante ao Python com a seguinte mensagem de boas-vindas.

    Welcome to PulseAudio! Use "help" for usage information. >>>
  2. Liste os dispositivos que podem reproduzir o som no PC pelo comando no shell PulseAudio.
    >>> list-sinks
    Agora você verá uma lista detalhada de todos os dissipadores de som.
  3. Apenas anote o nome completo da pia de sua escolha. Apareceria como um atributo da placa de som. Por exemplo, no meu caso, é:

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

A sequência do meu interesse é apenas "alsa_output.pci-0000_00_1b.0.analog-stereo"

  1. Agora vá para o PC de origem (ou seja, origem dos fluxos de áudio multimídia), abra o terminal e execute o seguinte 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"

    Aqui 192.168.1.105 é o endereço IP do PC coletor ", alsa_output.pci-0000_00_1b.0.analog-stereo "é a string que você acabou de copiar do terminal do coletor e" home_theater "é apenas um nome sofisticado para chamar esse dispositivo de saída de som virtual no seu computador.

  2. Por fim, selecione este dispositivo de som virtual por:
    $ pacmd set-default-sink home_theater

    Wallah !!

Trabalhou para mim - também trabalha com o novo módulo de coletor de túnel e apenas com o endereço IP do host do coletor sem precisar especificar o coletor exato (eu uso apenas um neste Raspberry Pi conectado ao meu aparelho de som, portanto, não é necessário): 'pactl servidor de módulo de carga módulo-túnel-coletor-novo = [2001: 470: ca90: 4: ba27: ebff: taxa2: ada9] '- obrigado!
Jean-Marc Liotier 12/11/2015

4

Um simples sudo service avahi-daemon restartfaz o truque, apesar de avahi-browsever os dispositivos antes que o avahi reinicie. Agradeço a Takkat por me indicar a direção certa.


3

Esta resposta não foi testada e, portanto, pode não funcionar, mas pode levá-lo à direção certa.

Posso confirmar problemas não resolvidos com um serviço Avahi que às vezes não consegue se conectar a um servidor PulseAudio. Podemos reconectar-se reiniciando a rede ou o servidor pulseaudio, mas isso nem sempre funciona.

Para superar esse problema, podemos tentar estabelecer um fluxo de áudio de rede usando o protocolo TCP nativo para transmitir diretamente para o IP, em vez de usar uma resolução de nome Avahi.

Para fazer isso, podemos encapsular um dissipador remoto carregando o módulo-encapsulamento no lado do receptor. No remetente, temos que habilitar o protocolo TCP nativo carregando o module-native-protocol-tcp .

Veja também esta pergunta para terminologia e como definir a PULSE_SERVERvariável:

Como definir automaticamente o coletor padrão PulseAudio como servidor remoto na inicialização - Ubuntu 9.04

É uma pergunta bastante antiga para o Ubuntu 9.04, mas, para minha terminologia e procedimentos conhecidos, não mudamos muito desde então.

Siga também o Wiki PulseAudio em conexões de rede .


Obrigado pelo único link. A solução lá também funciona no meu caso: sudo service avahi-daemon restarteu não esperava isso porque avahi-browsevisualizava os dispositivos antes mesmo da reinicialização, mas acho que a reinicialização aciona a chamada de retorno novamente, o que é tudo o que é necessário.
Christian

@ Christian: bom que ajudou. Eu desisti de Avahi por enquanto.
Takkat 26/06/12

Não tenho certeza se entendi sua proposta. Posso usar a resolução de nomes DNS ou preciso saber o IP? Prefiro não usar IPs fixos, embora você possa dizer que, no caso do HTPC, isso é uma coisa boa a se fazer.
Christian

1
Sim, eu posso entender o porquê. Acabei de escrever minha própria resposta, porque, para as pessoas que se deparam com essa questão porque têm o mesmo problema, parece a solução mais simples.
Christian

1

Você pode tentar pulseaudio -k, o que mata o serviço pulseaudio (parece reiniciar automaticamente). Isso trouxe as coisas de volta para mim antes.

A outra coisa que às vezes ajuda é desmarcar e depois clicar novamente nas caixas Pulseaudio Preferences(aka paprefs). As caixas de seleção estão Make discoverable PulseAudio network sound devices available locallydentro Network Accesse Enable network access to local sound devicesdentro Network Server. Obviamente, isso provavelmente só funciona para o que você está usando.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.