Seite wählen

Musik via Netzwerk mit Pulseaudio und MPD

von | Apr 9, 2013 | Linux, Technology, Betriebssysteme

Meine Musik spiele ich zuhause schon längere Zeit über Music Player Daemon (MPD) ab, auch weil damit ein streamen auf andere Geräte per HTTP ohne größeren Konfigurationsaufwand möglich ist. Clients gibt es wie Sand am Meer, auch für Android und iOS (MPDroid, MPaD, MPoD). Eine Steuerung der Musikwiedergabe ist somit ohne großen Aufwand von all meinen Geräten möglich. HTTP-Streams haben natürlich ihre schwächen. Ein „next Track“ auf einem MPD-Client wird zwar auf dem MPD-Server sofort ausgeführt auf dem Client dauert es aber noch einige Sekunden bis der Cache abgespielt wurde und das neue Lied beginnt. Das nervt!
Besser wäre es natürlich wenn ich die Ausgaben aller Geräte im Netzwerk direkt ansteuern kann. Mit Pulseaudio funktioniert dies auch scheinbar schon länger, ich bin aber eher zufällig über die Möglichkeiten die Pulseaudio bietet gestolpert. Ubuntu setzt bereits länger auf Pulseaudio, somit ist auf meinen Geräten auch schon fast alles installiert was ich benötige.
Auf den Clients, z.B. ein Desktoprechner mit Soundanlage im Wohnzimmer, reicht es aus das Paket für PulseAudio Preferences (papref) zu installieren und ein paar Häckchen zu setzen, so dass die Ausgaben im Netzwerk angeboten werden.
kw15-paprefs
Mit Hilfe des .pulse-cookie kann dies auch mit Authentifizierung erfolgen. Auf dem MPD-Server ist dies unter /var/lib/mpd/.pulse-cookie zu finden. Dieses wird einfach in das Homeverzeichnis der Clients kopiert (pulseaudio läuft normalerweise mit dem aktuell eingeloggtem Benutzer).
Auf dem MPD-Server muss natürlich erstmals das Paket mpd installiert werden. Damit die Ausgabegeräte der Clients auch automatisch gefunden werden solltet ihr noch ein Zeroconf Paket installieren:

# apt-get install mpd pulseaudio-module-zeroconf

Die Ausgaben der Clients (auch Sinks genannt) müssen auf dem MPD-Server jetzt natürlich definiert werden (/etc/pulseaudio/client.conf). Das müsste auch in der GUI funktionieren, aber mein kleiner Musikserver hat kein X installiert.

$ vim /etc/pulse/default.pa:
 # Desktop mit supertollem Soundsystem dran
 load-module module-tunnel-sink server=1.2.3.4
 # Kleine Himbeere in der Küche
 load-module module-tunnel-sink server=1.2.3.5
# Findet die Ausgaben der Clients auch wenn diese nach Pulseaudio gestartet werden
 load-module module-zeroconf-discover

Will man die Ausgaben in Küche und Wohnzimmer synchronisieren, müssen diese noch zu einer gemeinsamen Sink zusammengeführt werden. Dazu ist in der default.pa folgender Eintrag nötig:

 # Gemeinsame Ausgabe
 load-module  module-combine-sink sink_name=Beide slaves=tunnel-sink.1.2.3.4,tunnel-sink.1.2.3.5

In der /etc/mpd.conf werden nun noch alle Ausgabegeräte definiert. Die ersten beiden Einträge benötigt man, dass man die Ausgaben in Wohnzimmer und Küche einzeln ansprechen kann und ein dritter Eintrag um die kombinierte Ausgabe anzusteuern. Hinweise zur allgemeinen Konfiguration von mpd liefert euch Google, aber eigentlich muss man nur den Pfad zur eigenen Musiksammlung angeben.

audio_output {
        type                    "pulse"
        name                    "Wohnzimmer Desktop"
        sink                    "tunnel-sink.1.2.3.4"
}
audio_output {
        type                    "pulse"
        name                    "Himbeere Küche"
        sink                    "tunnel-sink.1.2.3.5"
}
audio_output {
        type                    "pulse"
        name                    "Alle"
        sink                    "Beide"
}

Sobald man dann MPD startet (und man eine der Ausgaben aktiviert) wird von diesem ein Pulseaudio-Prozess gestartet (als Nutzer mpd). Bei den ersten Tests solltet ihr darauf achten, dass vorher noch kein pulseaudio-Prozess des Benutzers mpd läuft und dass der Benutzer mpd in den passenden Gruppen ist:

$ usermod -aG pulse,pulse-access mpd
$ id mpd
  uid=104(mpd) gid=29(audio) groups=29(audio),112(pulse),113(pulse-access)

Wenn man als Nutzer mpd pacmd list-sinks auführt werden alle definierten Sinks angezeigt. Achtung: Der mpd Nutzer hat normalerweise ein /bin/false als Shell in der passwd eingetragen.
Jetzt kann ich über die MPD-Clients die verschiedenen Ausgaben ein und ausschalten, am bequemsten ist das natürlich wenn man mit Smartphone oder Tablet auf der Couch sitzt. Pulseaudio bietet aber noch weitaus mehr, z.B. eine Unterstützung für AirPlay, aber in Zeiten von DLNA, AirPlay, Spotify, Google Music, Ubuntu One Music (…) ist das nur eine weitere Lösung um sein Eigenheim mit Musik zu versorgen!

Achim Ledermüller
Achim Ledermüller
Senior Manager Cloud

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist er für den Betrieb und die Weiterentwicklung unserer Cloud-Plattform verantwortlich.

5 Kommentare

  1. eliasp

    Ich verstehe Sinn und Zweck des kombinierten sink nicht, wenn man doch auch einfach MPD auf mehrere Ausgabegeräte gleichzeitig ausgeben lassen kann?

    Antworten
    • Achim Ledermueller

      Hallo eliasp,
      Der Sinn dahinter ist die beiden Sinks zu synchronisieren. Somit wird auf allen Ausgaben zu jedem Zeitpunkt die selbe Stelle im Lied abgespielt. Ohne combined Sink laufen die Ausgaben schneller auseinander. Bei schlechtem Empfang oder wenig Leistung kommt es aber auch mit combined Sink dazu. Allerdings bin ich hier nur Laie und was Pulseaudio hier im Hintergrund macht kann ich dir leider nicht erklären.
      Lg, Achim

      Antworten
  2. le_petit

    Das ist genau das was ich suche. Du verwendes eine „Himbeere in der Küche“. Wie ist die konfiguriert (headless?) damit die den pulseaudiostream empfängt?

    Antworten
  3. Achim Ledermueller

    Hi le_petit,
    Mit Raspian musste ich eine aktuelle pulseaudio Version selbst kompilieren. Zudem hatte ich öfters Probleme mit der Latenz wenn ich den Raspi im WLAN betreibe. Dazu gab es damals schon einen Feature Request, aber ich habe das Thema nicht weiter verfolgt. Vielleicht funktioniert das mittlerweile besser. Ich habe auch weitere Protokolle ausprobiert, aktuell verwende ich Shairport . Mit gerootetem Android kann auch jedes mobile Device dort hin streamen. Die Apfelgeräte funktionieren natürlich auch.
    Grüße, Achim

    Antworten
  4. whoiam

    Hi Achim,
    ich habe mpd mit pulse auf einem openwrt Router laufen seit gestern und festgestellt dass meine gleichzeitige Ausgabe schon nach 1 Minute auseinanderläuft. Werde heute Abend gleich mal die module-combine-sink methode ausprobieren 😀
    Gruß

    Antworten

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Linux | Technology | Betriebssysteme

Webserver? Caddy bitte! Danke!

Hin und wieder gibt es einfach Software, die Probleme erschreckend gut löst: Der Webserver Caddy – eine in Go geschriebene Plattform, die mit ihrem HTTP-Server alle Standardfälle im täglichen Betrieb abdeckt – ist ein gutes Beispiel dafür.   Install Caddy auf...

Kibana Sicherheits-Updates: CVSS:Critical

Und täglich grüßt das Murmeltier. Nein nicht ganz. Heute ist es  aus der Elastic Stack Werkzeugkiste Kibana, für das es ein wichtiges Sicherheits-Update gibt. Es besteht auf jeden Fall Handlungsbedarf! IMHO auch wenn ihr die "Reporting" Funktion deaktiviert habt. Der...