O problema:
Ao transmitir pela rede usando o pulseaudio, o áudio fica extremamente instável. Editar /etc/pulse/daemon.conf
e alterar os valores default-fragments
e não melhora a situação.default-fragment-size-msec
O firewall não está habilitado em nenhum dos sistemas. Que outras opções eu tenho?
Detalhes da configuração:
Eu uso paprefs para habilitar o áudio da rede:
Configuração do remetente:
Configuração do receptor:
Conteúdo de /etc/pulse/daemon.conf
:
; daemonize = no
; fail = yes
; allow-module-loading = yes
; allow-exit = yes
; use-pid-file = yes
; system-instance = no
; local-server-type = user
; enable-shm = yes
; enable-memfd = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; lock-memory = no
; cpu-limit = no
; high-priority = yes
; nice-level = -11
; realtime-scheduling = yes
; realtime-priority = 5
; exit-idle-time = 20
; scache-idle-time = 20
; dl-search-path = (depends on architecture)
; load-default-script-file = yes
; default-script-file = /etc/pulse/default.pa
; log-target = auto
; log-level = notice
; log-meta = no
; log-time = no
; log-backtrace = 0
; resample-method = speex-float-1
; avoid-resampling = false
; enable-remixing = yes
; remixing-use-all-sink-channels = yes
; remixing-produce-lfe = no
; remixing-consume-lfe = no
; lfe-crossover-freq = 0
; flat-volumes = no
; rescue-streams = yes
; rlimit-fsize = -1
; rlimit-data = -1
; rlimit-stack = -1
; rlimit-core = -1
; rlimit-as = -1
; rlimit-rss = -1
; rlimit-nproc = -1
; rlimit-nofile = 256
; rlimit-memlock = -1
; rlimit-locks = -1
; rlimit-sigpending = -1
; rlimit-msgqueue = -1
; rlimit-nice = 31
; rlimit-rtprio = 9
; rlimit-rttime = 200000
; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000
; default-sample-channels = 2
; default-channel-map = front-left,front-right
; default-fragments = 4
; default-fragment-size-msec = 25
; enable-deferred-volume = yes
deferred-volume-safety-margin-usec = 1
; deferred-volume-extra-delay-usec = 0
default-fragments = 5
default-fragment-size-msec = 25
O áudio ainda é bastante instável no receptor. Ao usar RTP/Multicast, a configuração era menos confiável e nem consegui fazê-la funcionar o suficiente para testá-la.
Documentação do PulseAudio
Abaixo está a documentação da configuração de rede do PulseAudio ? .
Edição: 13 de fevereiro de 2022
Duas novas seções foram adicionadas na parte inferior; !AirPort e Rygel .
Configuração de rede
Existem várias maneiras diferentes de se conectar a outro servidor PulseAudio (conexão direta, túnel, RTP) ou algum outro dispositivo de áudio de rede (RTP, RAOP, Rygel).
Observe que todos os métodos descritos aqui transmitem áudio PCM bruto pela rede. Isso pode usar praticamente a largura de banda da rede (cerca de 1,4 Mb/s para som com qualidade de CD). Se você tiver um som instável, tente definir uma taxa de amostragem mais baixa para o fluxo de rede. Além disso, mesmo que muitas conexões WiFi possam sustentar essas taxas de bits, muitas vezes o jitter na latência do pacote torna a transmissão de áudio de baixa latência em um link sem fio inviável na prática.
Conexão direta
Basta definir a variável de ambiente
$PULSE_SERVER
para o nome do host do servidor PulseAudio. Alternativamente, você pode modificar~/.pulse/client.conf
ou/etc/pulse/client.conf
e definirdefault-server
. Consulte Cadeias de Servidores para obter uma explicação do formato. Nesta entrada de FAQ ? estão listados todos os locais que você pode especificar o servidor a ser usado. Todos os métodos que se conectam ao daemon pela rede usando o protocolo nativo precisam de module-native-protocol-tcp ? carregado. Isso inclui túneis e configurações do Zeroconf. Com este módulo carregado, o servidor escuta na porta 4713 para conexões de clientes de entrada.Autorização
Para autenticação, você precisa dos mesmos cookies de autenticação em todos os lados. Para essa cópia
~/.pulse-cookie
para todos os clientes que devem ter permissão para se conectar. Alternativamente, os cookies de autorização podem ser armazenados no servidor X11. O servidor deve ter o module-native-protocol-tcp ? carregado. Para habilitar todo o áudio de toda a rede, defina oauth-anonymous=1
argumento. Uma opção mais segura é gerenciar o acesso a esses servidores com um IP ACL. Isso pode ficar assim no seu script de inicialização/etc/pulse/default.pa
ou do PulseAudio:~/.pulse/default.pa
Esses dois módulos não são carregados na configuração padrão porque podem abrir o PulseAudio para invasores remotos.
X Encaminhamento
Se a
$PULSE_SERVER
variável não existir ou estiver vazia, o PulseAudio verificará as propriedades do X11 na janela raiz. Essas propriedades são muito parecidas com variáveis de ambiente, mas estarão disponíveis remotamente se você SSH para outra máquina com encaminhamento X11. Você pode ver uma lista de propriedades relacionadas ao PulseAudio fazendo:Os nomes das variáveis usadas são os mesmos usados no ambiente, então o PulseAudio irá procurar por uma propriedade chamada
PULSE_SERVER
. Observe que apenas as propriedades X11 são encaminhadas pelo túnel SSH, mas o cliente pulseaudio ainda se conecta ao servidor usando seu próprio protocolo nativo.Se a conexão de volta ao daemon de pulso em execução no computador que possui a exibição X não for desejada, você pode definir
PULSE_SERVER=localhost
a partir da conexão SSH (certifique-se de que o module-native-protocol-tcp esteja carregado) ou executepax11publish -r
antes do SSHing no computador remoto para remover as propriedades na janela raiz.Usando um túnel
Com um túnel, você pode criar um novo coletor que encaminha todo o áudio da rede para outro servidor. Para o coletor no servidor remoto, o túnel parece apenas outro fluxo conectando-se pela rede. O mesmo vale para as fontes. Veja a documentação em módulo-túnel ? para detalhes sobre os argumentos do módulo.
A configuração de um túnel requer um daemon PulseAudio em execução no servidor remoto com o module-native-protocol-tcp carregado, assim como na conexão direta. Depois que o túnel é configurado, os aplicativos cliente se conectam ao coletor de túnel no daemon PulseAudio local. Isso tem a vantagem de que você pode alternar o fluxo perfeitamente entre um coletor de hardware local e o coletor de túnel. Com uma conexão direta, o cliente geralmente precisa ser reiniciado para trocar de servidor. Uma conexão direta tem a vantagem de que o cliente tem mais controle sobre os parâmetros de buffer.
mDNS
Para evitar ter que configurar o túnel manualmente entre computadores em uma rede, o Zeroconf pode ser usado.
Configure
module-zeroconf-publish
emodule-zeroconf-discover
manualmente ou use a caixa de seleção em paprefs.Você pode se conectar a outros servidores de som em execução na LAN usando a tecnologia Zeroconf/ Avahi ? . Portanto, certifique-se de compilar o PulseAudio com suporte Avahi e carregar os módulos Zeroconf em todas as máquinas da LAN. Além disso, certifique-se de carregar o
module-native-protocol-tcp
e que ele permite conexões de outros hosts, consulte Autorização acima.Esses módulos não são carregados na configuração padrão porque podem abrir o PulseAudio para invasores remotos.
RTP
RTP é o protocolo de transferência em tempo real. É um protocolo bem conhecido para transferência de dados de áudio e vídeo sobre IP. Dois protocolos relacionados são SDP e SAP. SDP é o Protocolo de Descrição de Sessão e pode ser usado para descrever sessões RTP. SAP é o Protocolo de Anúncio de Sessão e pode ser usado para anunciar sessões RTP descritas com SDP. (Os telefones VoIP modernos baseados em SIP também usam RTP/SDP para suas sessões) Todos os três protocolos são definidos em RFCs IETF (RFC3550, RFC3551, RFC2327, RFC2327). Eles podem ser usados em moda multicast e unicast. PulseAudio usa exclusivamente RTP/SDP/SAP multicast contendo dados de áudio.
Para mais informações sobre como usar essas tecnologias com o PulseAudio dê uma olhada na documentação dos módulos ? .
Como posso usar o PulseAudio para transmitir música do meu PC principal para minha LAN com vários PCs com alto-falantes?
No lado do remetente, crie um coletor RTP:
Isso fará com que o rtp seja o coletor padrão, ou seja, todos os aplicativos gravarão neste dispositivo RTP virtual por padrão. Do lado do cliente basta carregar o módulo receptor:
Agora você pode reproduzir sua música favorita no lado do remetente e todos os clientes a emitirão simultaneamente. BTW: Você pode ter mais de uma máquina de envio configurada assim. Os dados de áudio serão mixados no lado do cliente.
Como posso usar o PulseAudio para compartilhar um único conector LINE-IN/MIC em toda a LAN?
No lado do remetente, basta carregar o módulo remetente RTP:
Nos lados do receptor, crie uma fonte RTP:
Agora os dados de áudio estarão disponíveis na fonte padrão
rtp_monitor
.Como posso usar o PulseAudio como uma solução de conferência multicast N:N baseada em RTP para a LAN?
Após carregar todos os drivers de áudio necessários para gravação e reprodução, basta carregar os módulos receptor e remetente RTP com os parâmetros padrão:
Enquanto o daemon PulseAudio estiver em execução, os dados do microfone serão transmitidos para a rede e os dados de outros hosts serão reproduzidos localmente. Observe que isso pode causar muito tráfego. Portanto, considere passar
rate=8000 format=ulaw channels=1
para o módulo emissor para economizar largura de banda e ainda manter a boa qualidade para transmissão de voz.Posso ter mais de um grupo RTP multicast?
Sim! Basta usar um novo endereço de grupo multicast. Use os argumentos
destination
/sap_address
dos módulos RTP para selecioná-los. Escolha seus endereços de grupo no intervalo 225.0.0.x para garantir que os dados de áudio nunca saiam da LAN.!AirPort RAOP streaming
Com
module-raop-sink
.Rygel
Com
module-rygel-media-server
.A especificação do seu problema é um pouco leve. Sugiro que você poste:
/etc/pulse/default.pa
.Enquanto isso, não tentarei escrever uma descrição genérica sobre como usar o Pulseaudio para RTP/Multicast. Vou esperar até que você adicione essas informações para ajudar a identificar seu problema .
Possivelmente ações úteis:
sudo ln -s /usr/lib/pulse-13.99.1 /usr/lib/pulse-13.99
(fontes: 1 , 2 ).Opções para streaming de áudio
Referindo-se à sua pergunta: Que outras opções eu tenho?
Music Player Daemon (MPD)
" Music Player Daemon (MPD) é um aplicativo flexível e poderoso do lado do servidor para tocar música. Por meio de plugins e bibliotecas, ele pode reproduzir uma variedade de arquivos de som enquanto é controlado por seu protocolo de rede. "
O MPD é um aplicativo do lado do servidor maduro, em desenvolvimento ativo. Há uma longa lista de clientes disponíveis .
Gelo
" Icecast é um servidor de streaming de mídia (áudio/vídeo) que atualmente suporta fluxos Ogg (Vorbis e Theora), Opus, WebM e MP3. Ele pode ser usado para criar uma estação de rádio na Internet ou uma jukebox privada e muitas outras coisas. É muito versátil, pois novos formatos podem ser adicionados com relativa facilidade e suporta padrões abertos para comunicação e interação. "
Você pode encontrar instruções detalhadas e testadas em Como configuro um servidor Icecast para transmitir áudio em minha rede? . Não há necessidade de copiar e colar isso aqui.
Outras opções
... listados aqui .
Relacionado :
Atualizei os dois sistemas para o Ubuntu 21.04 (apenas rotineiramente) e, ao fazê-lo, enquanto o RTP/Multicast não é melhor (na verdade, é pior), usando a opção zeroconf (veja a captura de tela) está funcionando bem. Ainda não está perfeito, mas muito melhor do que antes.
É suave o suficiente para ouvir música de um sistema no outro, com clareza, sem interrupções ou distorções constantes.