Plex und Sonos – Stream to Sonos

Ich habe lange nach einer Lösung gesucht, um über Plex die Sonos zu steuern, ohne den Sonos Controller nutzen zu müssen, da ich gerne alles aus der Plex App steuern wollte.
Mit der Lösung die ich nun gefunden habe, kann ich sehr gut leben.

Was wird benötigt?
Ein Raspberry Pi
Loopback um den Sound über ALSA abzugreifen
Plexampp Headless für den Raspberry Pi
Icecast2
ezstream
Avconv

Der Raspberry kann mit dem Raspbian lite installiert sein.

Loopback einrichten:

sudo modprobe snd-aloop

In die Datei /etc/modules muss folgende Zeile hinzugefügt werden:

snd-aloop

Danach den Raspberry ein Mal neustarten und die Konfiguration überprüfen:

aplay -l

Die Ausgabe sollte sowas in der Art zeigen:

Karte 0: Loopback [Loopback], Gerät 0: Loopback PCM [Loopback PCM]

Plexampp Headless nach folgender Anleitung installieren:
https://forums.plex.tv/discussion/comment/1661189/#Comment_1661189

Nach dem Plexampp installiert worden ist muss folgende Datei angepasst werden: /home/pi/plexamp/resources/helpers/linux-arm/mpd.conf
Der audio_output Parameter wird um folgendes ergänzt: device „hw:Loopback,0,0“
Sollte also danach in etwa so aussehen:

audio_output {
  type "alsa"
  name "my audio device"
  device "hw:Loopback,0,0"
  mixer_type "software"
}

Nun muss icecast2 installiert werden:

sudo apt-get install icecast2

Es wird nach dem Host gefragt, dort wird localhost eingetragen, danach wird 3 mal nach einem Passwort gefragt, hier einfach immer das selbe verwenden.

Als nächstes muss Ezstream installiert werden:

sudo apt-get install ezstream

Nach der Installation muss die Konfigurationsdatei angelegt werden:

nano /etc/ezstream.xml

Die Konfigurationsdatei wird mit folgendem Inhalt gefüllt:

<ezstream>
<url>http://127.0.0.1:8000/audio</url>
<sourcepassword>your password here</sourcepassword>
<format>MP3</format>
<filename>stdin</filename>
</ezstream>

Das Passwort unter sourcepassword mit dem zuvor angelegten Passwort füllen.

Nun muss die Datei noch die Rechte „700“ erhalten:

sudo chmod 700 /etc/ezstream.xml

Als letztes benötigen wir noch Avconv:

sudo apt-get install libav-tools

Nun muss der Raspberry ein Mal neugestartet werden.

Nun können wir den Stream über nachfolgenden Befehl starten:

avconv -f alsa -i loopout -f mp3 - 2>/dev/null | sudo /usr/bin/ezstream -qvc /etc/ezstream.xml

Alles was nun über Plexampp abgespielt wird, wird direkt zu Icecast2 gestreamt und kann über http://your-raspberry-ip:8000/audio/ aufgerufen werden.
Die URL wird bei der Sonos als Radio Stream hinterlegt und somit wird alles was auf dem Raspberry über Plex abgespielt wird, direkt auf der Sonos abgespielt.