Vom MP3 zur Sonosbox

Wir haben jahrelang ein normales UKW-Radio in der Küche gehabt und es hat auch brav seinen Dienst verrichtet. Da wir, d.h. meine Frau und ich, aber auch gerne mal Musik hören wollen, die nicht von empfangbaren Radiostationen gespielt wird und wir uns so oder so für das Wohnzimmer eine Soundbar gekauft hatten, haben wir uns überlegt, zusätzliche Boxen für die Küche und das Esszimmer zu kaufen.

Die Wahl für die Soundbar und die Boxen fiel auf das Equipment von Sonos.

Nun standen also jeweils eine Box in der Küche und im Esszimmer und es dudelte Musik aus selbigen. Ich aber wollte, dass, wenn zum Beispiel eine kleine Fete bei uns stattfindet, auch mal meine, bzw. unsere Musik läuft. Ein erster Schritt dazu war, dass ich mir quasi meine eigene "Radiostation" aufgebaut habe.

Die "Zutaten":

  • Ein RaspberryPi
  • Eine auf dem RaspberryPi liegende MP3-Sammlung
  • ezstream
  • icecast2

Die ersten beiden Punkte sind trivial und benötigen keiner weiteren Erklärung.

Als erstes habe ich icecast2 installiert und konfiguriert. Die Konfigurationsdatei habe ich sehr minimalistisch gehalten. Natürlich habe ich die Passwörter für die Authentifizierung eingetragen. Als Login für die Quelle habe ich es beim Standardeintrag "source" belassen. Mountpoints habe ich - ausser dem "default" - nicht defniert, diese kommen von ezstream (bzw. später von mixxx). Dadurch habe ich eine große Flexibilität, was die Beschickung des Icecastservers betrifft.

<mount type="default">
   <public>0</public>
      <max-listeners>50</max-listeners>
</mount>


Damit jetzt auch die MP3s fliessen, benötigt es noch einen weiteren Server: ezstream. Damit streame ich die MP3s in Richtung Icecast.
Den Dienst habe ich unter meinem Benutzer laufen, da die MP3s auch von mir verwaltet werden.
Die Unit dazu:

[Unit]
Description=ezstream

[Service]
WorkingDirectory=/home/hauke/stream
ExecStart=/usr/bin/ezstream -c /home/hauke/stream/ezstream.xml
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

Und die Konfigurationsdatei:

<?xml version="1.0" encoding="UTF-8"?>                                                                         
<ezstream>
 <servers>
   <server>
           <hostname>127.0.0.1</hostname>
           <user>source</user>
           <password>hackme</password>
   </server>
 </servers>
 <streams>
   <stream>
     <mountpoint>/wiesengrund.mp3</mountpoint>
     <format>MP3</format>
     <stream_name>Radio Wiesengrund</stream_name>
     <stream_description>Lieder der 80er</stream_description>
     <stream_quality>0</stream_quality>
     <stream_bitrate>16</stream_bitrate>
     <stream_samplerate>44100</stream_samplerate>
   </stream>
 </streams>

 <intakes>
   <intake>
           <filename>/var/lib/mpd/music/all.m3u</filename>
           <!-- Setting to shuffle playlists -->
           <shuffle>Yes</shuffle>
           <!-- Setting whether to stream intake indefinitely or only once -->
           <stream_once>No</stream_once>
   </intake>
 </intakes>
</ezstream>

Die Playlist wird mit Hilfe eines Cronjobs erstellt und das ist auch der Grund, warum ezstream unter meinem Benutzer läuft: Der Cronjob läuft auch unter meinem Benutzer und aktualisiert einmal in der Nacht die MP3-Liste mit Hilfe des folgenden Skriptes und startet dann ezstream neu, damit auch die aktuelle Playlist abgespielt wird:

#!/bin/sh

export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"

cd /var/lib/minidlna/music
rm -f all.m3u
find . -name "*.mp3" -exec echo "$(pwd)/{}" \; | shuf >> all.m3u

systemctl --user restart ezstream

exit 0

 

Damit kann man also schon einmal per Browser unter der im ezstream konfigurierten URL MP3s hören. Falls nicht: Fehler suchen, Fehler beheben, noch mal probieren, ob etwas via Browser aus den Boxen des Rechners lärmt!

Der letzte Schrit ist, dass man dieses "Radio" jetzt in Richtung Sonos streamt. Dazu habe ich mir auf meinem Rechner das Programm "noson" installiert. Pakete findet man unter https://github.com/pascalopitz/unoffical-sonos-controller-for-linux/releases.

Unter "Meine Radiosender" fügt man dann die URL vom Icecast hinzu, wählt die gewünschten Boxen aus und dann heisst es: "Party!"

Na ja, so richtig Party ist das ja noch nicht, denn so dudelt einfach nur die Playlist runter. Wenn man jetzt noch mehr DJ spielen will, dann empfehle ich das Program mixxx. Mit Hilfe des WWW kann man dann Icecast so konfigurieren, dass im Normalfall die Playlist abgespielt wird, sobald man jedoch mit z.B. mixxx auf Sendung geht, der Stream vom DJ kommt.

Nebenbei:
Bei mir läuft auch minidlna, um die MP3s per DLNA ins lokale Netz zu streamen. Damit kann man dann auch per VLC zum Beispiel die MP3s hören. Da minidlna aber einen eigenen Benutzer mitbringt, habe ich entsprechende POSIX-ACLs auf die Verzeichnisse für minidlna gesetzt.

Trackbacks

Trackback-URL für diesen Eintrag

Dieser Link ist nicht aktiv. Er enthält die Trackback-URI zu diesem Eintrag. Sie können diese URI benutzen, um Ping- und Trackbacks von Ihrem eigenen Blog zu diesem Eintrag zu schicken. Um den Link zu kopieren, klicken Sie ihn mit der rechten Maustaste an und wählen "Verknüpfung kopieren" im Internet Explorer oder "Linkadresse kopieren" in Mozilla/Firefox.

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Die Kommentarfunktion wurde vom Besitzer dieses Blogs in diesem Eintrag deaktiviert.