Come installare un lavandino PulseAudio?


16

Sto cercando di installare un sink PulseAudio sul mio Raspberry Pi, al fine di trasmettere tutti i suoni di sistema dal mio PC lì. Qual è il modo migliore per farlo?

Ad esempio, è possibile guardare film o la latenza è troppo alta? L'ho provato qualche tempo fa usando gstreamer, ma con una latenza di circa 2 secondi, il che è inutile per le mie esigenze.


1
Ricevo un secondo o due di latenza.
Riccioli d'oro

Risposte:


19

Le istruzioni ufficiali per creare una "connessione diretta" su una rete si spera funzionino solo per la maggior parte delle persone, ma sembra pulseaudio e non vado molto d'accordo: mi ci sono volute ore . [Oltre alla "connessione diretta", puoi anche usare un metodo "tunnel" descritto più avanti, ma ti consiglio di leggere prima questo.]

Ora ho un suono di streaming desktop (fedora 17) sul pi. Ho minimizzato i /etc/pulsefile di configurazione su entrambi i lati. Sul lato desktop:

/etc/pulse/client.conf

# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713

L'indirizzo LAN di mio pi con la porta pulseaudio predefinita. Ma ecco qualcosa che poi mi ha confuso per un po '- con un server specificato, pulseaudio non si avviava nemmeno:

> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.

Funzionerà in primo piano (probabilmente perché non legge pulse-client.conf?). Tuttavia , a quanto pare, non è necessario eseguirlo affatto sul lato desktop (invio) , qualcosa che non è spiegato nei documenti di pulseaudio. Usandolo lsof -i -Psembra che plugin di livello inferiore per vari lettori multimediali facciano il lavoro.

Quindi, quella riga "client.conf" è in realtà tutto ciò che serve sul lato desktop / client, se tutto ciò che farai è utilizzare la rete (ma vedi "Ancora più complicazioni", di seguito).

Sebbene il demone pulseaudio (sul lato ricevente / server) possa essere eseguito come un servizio di sistema, gli sviluppatori di pulse raccomandano contro di esso , e infatti sul pi lo script init provoca solo un avviso: devi ancora iniziare da soli. Fedora non include nemmeno una voce del servizio di avvio di systemd.

Quindi, sul lato pi, dovresti esplicitamente avviare e arrestare il processo del server pulseaudio, configurato in questo modo:

/etc/pulse/daemon.conf

# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours

Puoi usare -1 per exit-idle-timemantenere il demone in esecuzione indefinitamente. Attenzione, questo è secondi e il valore predefinito è 20 (il che significa che continuerà a morire "misteriosamente" se non lo imposti).

/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

Poiché si tratta di un'app di rete, non è una buona idea eseguirla come root. Tuttavia, come accennato in man pulseaudio, è anche una buona idea "renice" il processo per dargli una priorità più alta. Puoi farlo manualmente con nice, ma pulseaudio lo farà automaticamente per root, o membri del pulse-rtgruppo, se l'eseguibile è "setuid", il che significa che può fare uso di alcuni privilegi di root e poi passare al corretto uid non privilegiato ( pinge passwdanche bisogno di farlo). Quindi (come root o sudo):

chmod u+s /usr/bin/pulseaudio

Non è stato pulse-rtcreato alcun gruppo quando pulseaudio è installato su raspbian, quindi quindi:

groupadd pulse-rt

Questo ti darà un gid come 1003. Aggiungi (ad esempio) l'utente pi a quel gruppo:

usermod -aG pulse-rt pi

Ma su raspbian, non sarai ancora in grado di renice come pi. Per questo, aggiungi a /etc/security/limits.conf:

@pulse-rt       hard nice -20
@pulse-rt       soft nice -20

Devi effettivamente eseguire un login prima che avvengano queste modifiche; se usi ssh con il pi, usa solo login. Ora puoi avviare pulseaudio e si rinominerà -11, che è probabilmente una priorità più alta rispetto alla maggior parte degli altri processi (guarda il valore NICE in top).

Durante la riproduzione del suono in streaming dalla rete, pulseaudio sul pi utilizza circa il 10% della CPU e una quantità banale di memoria. :) It e il mio desktop sono su una LAN cablata; impulso trasmette dati pcm grezzi (credo), quindi l'utilizzo della larghezza di banda corrisponde alla frequenza di campionamento della sorgente, 1 kB / se superiore. Sfortunatamente, c'è un notevole ritardo nel suono se guardi un video.

Ancora più complicazioni ...

Sfortunatamente, nessuna delle varie applicazioni audio del mio PC ha funzionato subito; mpg123non funzionerebbe affatto. Per questo, su fedora, hai bisogno del mpg123-plugins-pulseaudiopacchetto. Per le cose flash nel browser (ad esempio, youtude) è necessario alsa-plugins-pulseaudio(questi sono ciò che effettivamente si connette al server remoto). Altre distribuzioni dovrebbero avere pacchetti simili. Se hai usato pulseaudio prima (non lo ero), potresti averli già installati.

Anche le campane e i fischi da scrivania di KDE non funzionavano. Questo è un problema più difficile da risolvere, perché cerca un server pulseaudio locale e, come descritto, l'uso di una connessione diretta significa che nessun server può essere eseguito localmente. Il modo per aggirare questo è usare il metodo "tunnel".

Modulo-tunnel-sink

Questo è l'altro modo menzionato nei documenti pulseaudio. In questo caso, hai un server in esecuzione su entrambi i lati e uno a due mani all'altro. Per fare questo, commenta il "server predefinito" /etc/client.confe aggiungi un locale /etc/default.pacontenente:

load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1

Se non si inserisce un sink_nameingresso, pulseaudio non si avvierà. Il si sinkriferisce al nome del lavandino sul lato pi, che quindi ha anche bisogno di un nome; aggiungi un corrispondente sink_namealla module-alsa-sinklinea default.palì dentro :

load-module module-alsa-sink device=hw:0,0 sink_name=bcm1 

Avviare il server su entrambi i lati e presto ... in un certo senso. Mentre ora venivano trasportati tutti i segnali acustici di KDE, la riproduzione flash del browser ballava male. Tuttavia, in un altro ambiente desktop (in realtà, solo un gestore di finestre, fvwm) andava bene.

Mi piace KDE ma posso vivere senza i bip, quindi per ora continuerò con una connessione diretta.

Risoluzione dei problemi

In caso di problemi, l'utilizzo di pulseaudio -vvvv --log-level=debugpi fornisce molti messaggi di debug. Inizialmente quando non riuscivo a ottenere l'audio sul pi questo segnalava un problema "correlato a un bug nel driver ALSA bcm2835" che mi sembrava strano dato che il suono andava bene solo con alsa, e sono sicuro che ci sia un software pi che dipende da su pulseaudio - apt-get remove pulseaudioe una reinstallazione apt-get install pulseaudiosembrava risolvere questo ... Non una soluzione che mi piace vedere, ma ehi, almeno ora posso ascoltare Tish senza dover collegare gli altoparlanti in ogni scatola. Soprattutto.


Grazie per la risposta estesa. Una domanda però: cosa succede con l'audio proveniente direttamente dal Pi?
Vincent,

Non so se ci avessi mai provato (non lo faccio più) ma pulseaudio dovrebbe essere un multiplexor, quindi dovrebbe funzionare.
Riccioli d'oro
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.