As instruções oficiais para a criação de uma "conexão direta" em uma rede espero apenas trabalho para a maioria das pessoas, mas parece pulseaudio e eu não se dão muito bem: ele me levou horas . [Além de "conexão direta", você também pode usar um método de "túnel" descrito mais abaixo, mas eu recomendo a leitura primeiro.]
Agora tenho um som de streaming de desktop (fedora 17) para o pi. Minimizei os /etc/pulse
arquivos de configuração dos dois lados. No lado da área de trabalho:
/etc/pulse/client.conf
# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713
O endereço LAN do meu pi com a porta pulseaudio padrão. Mas aqui está algo que me deixou confuso por um tempo - com um servidor especificado, o pulseaudio nem sequer começava:
> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.
Ele será executado em primeiro plano (provavelmente porque não lê pulse-client.conf?). No entanto , como se vê, não é necessário executá-lo no lado da área de trabalho (envio) , algo que não está explicitado nos documentos do pulseaudio. Usando lsof -i -P
isso, parece que plugins de nível inferior para vários players de mídia fazem o trabalho.
Portanto, essa linha "client.conf" é realmente tudo o que você precisa no lado do desktop / cliente, se tudo o que você fará é usar a rede (mas consulte "Mais complicações", abaixo).
Embora o daemon pulseaudio (no lado receptor / servidor) possa ser executado como um serviço do sistema, os desenvolvedores do pulse o recomendam e, de fato, no pi o script init apenas causa um aviso: você ainda precisa iniciar por você mesmo. O Fedora nem sequer inclui uma entrada do serviço de inicialização systemd para ele.
Portanto, no lado pi, você deve iniciar e parar explicitamente o processo do servidor pulseaudio, configurado da seguinte maneira:
/etc/pulse/daemon.conf
# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours
Você pode usar -1 para exit-idle-time
manter o daemon em execução indefinidamente. Cuidado: isso é segundos e o padrão é 20 (o que significa que continuará "misteriosamente" morrendo se você não definir isso).
/etc/pulse/default.pa
# See man default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.2.0/24
load-module module-alsa-sink device=hw:0,0
Como esse é um aplicativo de rede, não é uma boa ideia executá-lo como root. No entanto, como mencionado em man pulseaudio
, também é uma boa idéia "renice" o processo para dar uma prioridade mais alta. Você pode fazer isso manualmente com nice
, mas o pulseaudio fará isso automaticamente para o root ou para os membros do pulse-rt
grupo, se o executável for "setuid", o que significa que ele pode fazer uso de alguns privilégios de root e depois mudar para o uid correto não registrado ( ping
e passwd
também precisa fazer isso). Então (como root ou sudo):
chmod u+s /usr/bin/pulseaudio
Não há um pulse-rt
grupo criado quando o pulseaudio está instalado no raspbian, portanto:
groupadd pulse-rt
Isso lhe dará um gid como 1003. Adicione (por exemplo) o usuário pi a esse grupo:
usermod -aG pulse-rt pi
Mas no raspbian, você ainda não poderá mudar como pi. Para isso, adicione a /etc/security/limits.conf
:
@pulse-rt hard nice -20
@pulse-rt soft nice -20
Você precisa realmente executar um logon antes que essas alterações ocorram; Se você usar ssh com o pi, use login
. Agora você pode iniciar o pulseaudio e ele se renegará -11, o que provavelmente é uma prioridade mais alta que a maioria dos outros processos (veja o valor de NICE em top
).
Ao reproduzir som transmitido da rede, o pulseaudio no pi usa cerca de 10% da CPU e uma quantidade trivial de memória. :) Ele e minha área de trabalho estão em uma LAN com fio; o fluxo de pulsos bruta de dados pcm (acredito), portanto, o uso da largura de banda corresponde à taxa de amostragem da fonte, 1 kB / s ou mais. Infelizmente, há um atraso perceptível no som se você estiver assistindo a um vídeo.
Ainda mais complicações ...
Infelizmente, nenhum dos vários aplicativos de som do meu PC funcionou imediatamente; mpg123
não seria executado. Para isso, no fedora, você precisa do mpg123-plugins-pulseaudio
pacote. Para coisas em flash no navegador (por exemplo, youtude), você precisa alsa-plugins-pulseaudio
(é isso que realmente se conecta ao servidor remoto). Outras distros devem ter pacotes similares. Se você já usava o pulseaudio antes (eu não estava), você já pode instalá-los.
Os sinos e assobios da área de trabalho do KDE também não funcionaram. Esse é um problema mais difícil de resolver, porque procura um servidor pulseaudio local e, conforme descrito, usar uma conexão direta significa que nenhum servidor pode ser executado localmente. A maneira de contornar isso é usar o método "tunnel".
módulo-túnel-pia
Essa é a outra maneira mencionada nos documentos do pulseaudio. Nesse caso, você tem um servidor executando nos dois lados e uma mão na outra. Para fazer isso, comente o "servidor padrão" /etc/client.conf
e adicione um local que /etc/default.pa
contenha:
load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1
Se você não sink_name
inserir, o pulseaudio não será iniciado. O sink
refere-se ao nome do coletor no lado pi, que também precisa de um nome; adicione um correspondente sink_name
à module-alsa-sink
linha default.pa
lá:
load-module module-alsa-sink device=hw:0,0 sink_name=bcm1
Inicie o servidor nos dois lados e pronto ... mais ou menos. Enquanto tudo, incluindo os bipes do KDE, agora eram executados, a reprodução em flash do navegador gaguejou muito. No entanto, em outro ambiente de área de trabalho (na verdade, apenas um gerenciador de janelas, fvwm), tudo estava bem.
Eu gosto do KDE, mas posso viver sem os bipes, então por enquanto vou manter uma conexão direta.
Solução de problemas
Se você tiver problemas, o uso pulseaudio -vvvv --log-level=debug
do pi fornece muitas mensagens de depuração. Inicialmente, quando não consegui ouvir som no pi, isso relatou um problema "relacionado a um bug no driver ALSA bcm2835" que me pareceu estranho, pois o som era bom apenas com o alsa, e tenho certeza de que existe um software pi que depende disso. no pulseaudio - apt-get remove pulseaudio
e uma reinstalação apt-get install pulseaudio
parecia consertar isso ... Não é uma solução que eu gostaria de ver, mas, ei, pelo menos agora eu posso ouvir tish sem precisar conectar alto-falantes em todas as caixas. Na maioria das vezes.