ITbert.de

Multi Room Entertainment mit Mopidy und Icecast (Teil 1)

Ein kleines Projekt um das Heim ein bisschen mehr Musikalisch zu machen. Das Ziel ist es in jedem Raum und auf der Dachterrasse ein paar Boxen zu haben die die gleiche Musik spielen. Eigentlich ganz einfach mit DLNA zu realisieren. Das Problem ist nur, dass ich auch unbedingt Soundcloud hören möchte.

Nach ein bisschen Recherche bin ich auf Mopidy gestoßen. Das ist ein Musikserver der auch von Soundcloud, Spotify und Streams Musik abspielen kann. Wenn man dazu noch Icecast benutzt kann man es sogar in das Netzwerk streamen. Hört sich super an – also installieren. Eine andere Anforderung ist noch das es auf einem RasperryPi laufen muss. Das Projekt sagt sogar das es auf dem laufen soll, also weiter installieren. SPOILER ALERT: Mopidy als Musikdaemon läuft auch einwandfrei und kann ich empfehlen. Wer jedoch auch noch Icecast benutzen will kann dieses leider vergessen, weil der kleine Pi einfach nicht mit dem decodieren der Lieder mitkommt und somit die CPU total überlastet und die Streams nur hackelig ankommen. Es ist also nicht zu empfehlen das folgende Howto auf einem RasperryPi zu installieren sondern auf einem Rechner mit mehr CPU Power zum dekodieren.

Die Installationanleitung von docs.mopidy.com kann man eigentlich getrosst folgen. Man sollte nur gleich seine Plugins mit installieren:

# apt-get install mopidy mopidy-alsamixer mopidy-soundcloud

Es werden alle möglichen python Abhängigkeiten installiert und kann schon ein paar Minütchen dauern auf dem Pi. Unter Debian liegt die Konfiguration unter /etc/mopidy/ und sollte auch dort angepasst werden, wenn man die init script benutzen will. Die Konfiguration kann man eigentlich minimal belassen und man muss nur noch folgendes hinzufügen um den HTTP Server, MPD Server und Soundcloud Anbindung zu aktivieren:


[http]
enabled = true
hostname = ::
port = 6680
static_dir = /var/www/Mopidy-MusicBox-Webclient/webclient
zeroconf = Mopidy HTTP server on $hostname

[mpd]
enabled = true
hostname = ::
port = 6600
password =
max_connections = 20
connection_timeout = 60
zeroconf = Mopidy MPD server on $hostname

[soundcloud]
enabled = true
explore_songs = 100
auth_token = <DEIN-KEY>

[alsamixer]
enabled = true
card = 1
control = PCM

Bevor wir den Dienst starten sollten, brauchen wir noch den API Key für Soundcloud und die Dateien für das Webfrontend.

# cd /var/www/
# git clone https://github.com/woutervanwijk/Mopidy-MusicBox-Webclient.git

Anschließend nur noch Mopidy starten:

# service mopidy start

Jetzt ist es möglich sich mit dem Webfrontend zu verbinden: http://<DEINSERVER>:6680

Die Konfiguration für Mopidy ist jetzt eigentlich abgeschlossen und man kann auf dem Computer auf dem Mopidy läuft (falls nicht: modprobe snd_bcm2835) Musik hören. Wir wollen jedoch Streamen! Also muss erst einmal Icecast2 installiert werden:


# apt-get install icecast2
# sed -i s/false/true/ /etc/default/icecast2

Damit Mopidy einen eigenen Mountpoint bekommt, müssen wie die Konfiguration von Icecast in /etc/icecast2/icecast.xml anpassen bzw. hinzufügen:


<mount>
<mount-name>/mopidy</mount-name>
<fallback-mount>/silence.mp3</fallback-mount>
<fallback-override>1</fallback-override>
</mount>

Woher kommt die silence.mp3 und was macht diese? Es gibt leider noch einen Bug mit Mopidy und Icecast, dass bei einem Songwechsel Icecast die Verbindung verliert. Deswegen muss man den Workaround einbauen und eine leere Datei abspielen. Diese muss im webroot von Icecast liegen und kann folgendermaßen erstellt werden:


# ffmpeg -f lavfi -i aevalsrc=0 -t 5 silence.mp3
# mv silence.mp3 /usr/share/icecast2/web/

Damit Icecast von Mopidy benutzt werden kann, müssen wir den output channel von Mopidy anpassen:


mixer = software
mixer_volume = 100
# output = autoaudiosink
output = lame ! shout2send mount=mopidy ip=<DEINSERVER> port=8000 password=askme
# output = audioresample ! audioconvert ! vorbisenc ! oggmux ! shout2send mount=mopidy ip=<DEINSERVER> port=8000 password=askme
visualizer =

Anschließend muss man Icecast starten und Mopidy neu starten. Bitte beachten, Icecast muss immer vor Mopidy gestartet werden. Wenn alles korrekt konfiguriert ist muss man in Mopidy ein Lied startet und man kann im Icecast Webinterface einen aktiven /mopidy Mountpunkt sehen. Und schon kann man überall Musik hören:


# mplayer http://DEINSERVER:8000/mopidy
Exit mobile version