Wie richte ich eine PulseAudio-Spüle ein?

16

Ich versuche, eine PulseAudio-Senke auf meinem Raspberry Pi einzurichten, um dort alle Systemsounds von meinem PC zu streamen. Wie geht das am besten?

Ist es zum Beispiel möglich, Filme anzusehen, oder ist die Latenz zu hoch? Ich habe es vor einiger Zeit mit gstreamer versucht, aber mit einer Latenz von ca. 2 Sekunden, was für meine Anforderungen unbrauchbar ist.

anon
quelle
1
Ich bekomme ein oder zwei Sekunden Latenz.
Goldlöckchen

Antworten:

19

Die offiziellen Anweisungen zum Herstellen einer "direkten Verbindung" in einem Netzwerk funktionieren hoffentlich nur für die meisten Leute, aber es scheint, als ob pulseaudio und ich komme nicht so gut zurecht: Es hat Stunden gedauert . [Neben "Direktverbindung" können Sie auch eine "Tunnel" -Methode verwenden, die weiter unten beschrieben wird. Ich empfehle jedoch, diese zuerst zu lesen.]

Ich habe jetzt einen (Fedora 17) Desktop-Streaming-Sound zum pi. Ich habe die /etc/pulseKonfigurationsdateien auf beiden Seiten minimiert . Auf der Desktop-Seite:

/etc/pulse/client.conf

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

Die LAN-Adresse meines PIS mit dem Standard-Pulseaudio-Port. Aber hier ist etwas, das mich dann für eine Weile verwirrt hat - mit einem angegebenen Server würde pulseaudio nicht einmal starten:

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

Es wird im Vordergrund laufen (wahrscheinlich, weil es dann keine pulse-client.conf liest?). Jedoch , wie sich herausstellt, müssen Sie es überhaupt nicht auf dem Desktop (Senden) Seite laufen , etwas , das in den Pulseaudio docs buchstabiert nicht. Wenn Sie lsof -i -Pes verwenden, erledigen Plugins niedrigerer Ebene für verschiedene Media-Player die Arbeit.

Diese eine Zeile "client.conf" ist also eigentlich alles, was Sie auf der Desktop- / Clientseite benötigen, wenn Sie nur das Netzwerk verwenden möchten (siehe jedoch "Noch mehr Komplikationen" weiter unten).

Obwohl der pulseaudio-Daemon (auf der Empfängerseite / Serverseite) als Systemdienst ausgeführt werden kann, empfehlen die Entwickler von pulse , dagegen vorzugehen , und tatsächlich verursacht das Init-Skript auf pi nur eine Warnung: Sie müssen noch starten es selbst. Fedora enthält nicht einmal einen System-Boot-Service-Eintrag dafür.

Daher sollten Sie auf der pi-Seite den so konfigurierten pulseaudio-Serverprozess explizit starten und stoppen:

/etc/pulse/daemon.conf

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

Sie können -1 verwenden exit-idle-time, um den Dämon auf unbestimmte Zeit laufen zu lassen. Beachten Sie, dass dies Sekunden sind und die Standardeinstellung 20 ist (was bedeutet, dass es auf "mysteriöse Weise" stirbt, wenn Sie dies nicht einstellen).

/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

Da dies eine Netzwerk-App ist, ist es keine gute Idee, sie als Root auszuführen. Wie in erwähnt man pulseaudio, ist es jedoch auch eine gute Idee, den Prozess zu "erneuern", um ihm eine höhere Priorität zu geben. Sie können diese manuell mit nice, aber Pulseaudio wird es für root automatisch tun, oder Mitglieder der pulse-rtGruppe, wenn die ausführbare Datei „setuid“ ist, dh es ist die Verwendung einiger Wurzel privilleges machen und dann auf die richtige unprivelleged uid herunterschalten ( pingund passwdmüssen dies auch tun). Also (als root oder sudo):

chmod u+s /usr/bin/pulseaudio

pulse-rtWenn pulseaudio auf raspbian installiert ist, wird keine Gruppe erstellt.

groupadd pulse-rt

Dies gibt Ihnen eine gid wie 1003. Fügen Sie (zB) Benutzer pi zu dieser Gruppe hinzu:

usermod -aG pulse-rt pi

Aber auf Raspbian werden Sie immer noch nicht in der Lage sein, als Pi aufzutreten. Fügen Sie dazu Folgendes hinzu /etc/security/limits.conf:

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

Sie müssen sich erst anmelden, bevor diese Änderungen vorgenommen werden. wenn du ssh mit dem pi verwendest, benutze einfach login. Jetzt können Sie pulseaudio starten und es wird sich -11 erneuern, was wahrscheinlich eine höhere Priorität hat als die meisten anderen Prozesse (siehe den NICE-Wert in top).

Während der Wiedergabe von über das Netzwerk gestreamtem Sound verbraucht pulseaudio auf dem pi etwa 10% der CPU und nur wenig Speicher. :) Es und mein Desktop befinden sich in einem kabelgebundenen LAN. Der Puls überträgt rohe PCM-Daten (glaube ich), sodass die Bandbreitennutzung der Abtastrate der Quelle von 1 kB / s und mehr entspricht. Es gibt leider eine merkliche Verzögerung im Ton, wenn Sie Video ansehen.

Noch mehr Komplikationen ...

Leider funktionierte keine der verschiedenen Soundanwendungen von meinem PC sofort; mpg123würde überhaupt nicht laufen. Dafür benötigen Sie auf Fedora das mpg123-plugins-pulseaudioPaket. Für Flash-Inhalte im Browser (z. B. youtude) benötigen Sie alsa-plugins-pulseaudio(diese stellen tatsächlich eine Verbindung zum Remote-Server her). Andere Distributionen sollten ähnliche Pakete haben. Wenn Sie bereits pulseaudio verwendet haben (ich war es nicht), haben Sie sie möglicherweise bereits installiert.

KDEs Desktop-Schnickschnack funktionierte ebenfalls nicht. Dies ist ein schwieriger zu lösendes Problem, da nach einem lokalen pulseaudio-Server gesucht wird. Wie beschrieben bedeutet die Verwendung einer direkten Verbindung, dass kein Server lokal ausgeführt werden kann. Der Weg dahin ist die Verwendung der "Tunnel" -Methode.

Modul-Tunnel-Senke

Dies ist der andere in den pulseaudio-Dokumenten erwähnte Weg. In diesem Fall wird auf beiden Seiten ein Server ausgeführt, von dem eine Hand zur anderen reicht. Kommentieren Sie dazu den "Standard-Server" aus /etc/client.confund fügen Sie einen lokalen hinzu, der Folgendes /etc/default.paenthält:

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

Wenn Sie keinen sink_nameeingeben, startet pulseaudio nicht. Das sinkbezieht sich auf den Namen der Senke auf der Pi-Seite, die dann auch einen Namen benötigt; eine entsprechende hinzufügen sink_namezu der module-alsa-sinkZeile in default.padort:

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

Starten Sie den Server auf beiden Seiten und vorab. Während jetzt alles, einschließlich KDE-Pieptöne, übertragen wurde, stotterte die Browser-Flash-Wiedergabe schlecht. Unter einer anderen Desktop-Umgebung (eigentlich nur ein Fenstermanager, fvwm) war dies jedoch in Ordnung.

Ich mag KDE, kann aber ohne Pieptöne leben, daher bleibe ich vorerst bei einer direkten Verbindung.

Fehlerbehebung

Wenn Sie Probleme haben, bietet die Verwendung pulseaudio -vvvv --log-level=debugvon pi viele Debugging-Meldungen. Als ich anfangs keinen Sound auf dem Pi bekommen konnte, berichtete dies über ein Problem, "das mit einem Fehler im ALSA bcm2835-Treiber zusammenhängt", das mir merkwürdig erschien, da der Sound mit nur alsa in Ordnung war, und ich bin sicher, dass es eine Pi-Software gibt, die davon abhängt auf pulseaudio - apt-get remove pulseaudiound eine Neuinstallation apt-get install pulseaudioschien dies zu beheben ... Keine Lösung, die ich gerne sehe, aber hey, zumindest kann ich jetzt Tish hören, ohne Lautsprecher in jede Box stecken zu müssen. Meistens.

Goldlöckchen
quelle
Danke für die ausführliche Antwort. Eine Frage: Was passiert mit Audio, das direkt vom Pi kommt?
Vincent
Keine Ahnung, ob ich das jemals versucht habe (ich mache das nicht mehr), aber pulseaudio soll ein Multiplexer sein, also sollte es funktionieren.
Goldlöckchen