Mopidy + Snapcast – Multi-Room Music-Setup

HINWEIS: Ich habe diese Anleitung nun einmal veröffentlicht. Sie ist noch nicht vollständig und es gibt die ein oder andere Verbesserung, die eventuell noch kommt.
Sie sollte aber soweit schon einmal funktionieren.
Falls du Verbesserungsvorschläge hast, lass es mich wissen 🙂

Wer seine Musik gerne in der gesamten Wohnung oder dem gesamten Haus verteilen möchte, steht vor der Qual der Wahl.
Welchen Hersteller sollte man seine Daten anvertrauen?
Welcher hat ein fertiges System am Start, was genau das erfüllt, was du willst?
Wie viel Geld möchtest du dafür ausgeben?
Werden alle Musikdatenbanken unterstützt, die du brauchst?
Erfüllt die Musikqualität der fertigen Produke deine Anforderungen?

Wie wäre es mit selbst bauen?
Dann könnten wir selbst bestimmen, welche Musikdienste wir nutzen wollen, können selbst die Klangqualität mit guten Lautsprechern anpassen und kommen am Ende mit weniger Ausgaben für Hardware an, als wenn wir was fertiges kaufen.
Die Software ist komplett kostenlos und OpenSource, nur für die Hardware zum abspielen der Musik müssen wir etwas zahlen.

Mit dieser Anleitung, bauen wir uns ein eigenes Multi-Raum-Setup für deine Musik.
Streame von einer Quelle deine Inhalte in alle Räume und das sogar noch fast Synchron.
Mit Mopidy haben wir ein schickes Interface und mit Snapcast eine einfache Übertragungsmöglichkeit.
Damit Snapcast aber alles verstehen kann und weiterleiten kann, müssen wir dem Tool mit einigen Bibliotheken auf die Sprünge helfen.
Am Ende können wir den Audiostream auf allen gängigen Plattformen empfangen. Egal ob ein Raspberry Pi, Linux (Debian, Ubuntu, Mint, Arch, Manjaro,…), Windows, Android, iOS, …
Alles funktioniert über das interne LAN bzw. WLAN. Wir brauchen keine Internetanbindung für den reinen Betrieb.
Wer Dienste wie Spotify, YouTube & Co. nutzen möchte, benötigt aber Internet.

Wir werden in dieser Anleitung alles so Installieren, damit wir auch Dienste die eine Internetverbindung benötigen nutzen können.
Lese dir also gewisse Hinweise sorgfältig durch, damit du selbst deine Anforderungen bestimmen kannst und nur das installierst, was du brauchst.
Ich lasse dir an einigen Stellen die Freiheit, Dinge zu nutzen oder nicht.

Los gehts!

Diese Anleitung wurde auf einem Raspberry Pi (Debian 10) und Linux Mint 4 (Debian Edition) getestet. Andere Systeme sollten auch funktionieren, ggf. müssen aber Befehle angepasst werden.


Was brauchen wir?

– Einen Linux-Server → Empfehlung: Ein Raspberry Pi (oder Ähnliches)
– Vollen Root-Zugang zum Server
– Eine Netzwerkanbindung für den Server (LAN Empfohlen)
– Abspielgeräte (Andere Raspberry Pi‘s, PCs, Smartphones, …)
– Eine Musiksammlung oder Accounts bei Musikstreaming-Diensten (Musiksammlung kann auf einem USB-Stick oder Netzwerklaufwerk sein)
– Etwas Zeit für den Aufbau

OPTIONAL: Wer ein Raspberry Pi zur Wiedergabe nutzen möchte, dem Empfehle ich die Verwendung von extra Soundkarten, für eine bessere Musikqualität.

1. Das System aktualisieren und mit notwendiger Software ausstatten

Wir updaten erst einmal alles, damit wir ohne Probleme alles installieren können.

# apt update && apt upgrade

Nun installieren wir noch ein paar Pakete, die uns nacher bei der Installation helfen.

# apt install nano htop python3-pip -y

Tipp: Richte eine automatische Aktualisierung für deine Systeme ein. So bleiben sie sicher. Ein Neustart mitten in der Nacht – wenn keiner Wach ist – ist auch zum Teil angebracht 🙂


2. Mopidy installieren

Mopidy wird unsere Steuerzentrale. Die Software spielt die Musik ab, die wir vorgeben. Alles per Webbrowser oder App steuerbar.
Damit können wir kontrollieren, was unser Server an Musik selbstständig abspielt.
Mopidy empfängt kein Stream von einem Smartphone oder Ähnlichem, es gibt nur Medien direkt auf dem Server wieder und lässt uns angebundene Dienste zum Teil steuern.

Wir binden zuerst Mopidy in unsere Paketquellen ein, damit die Installation und Aktualisierungen einfach ausfallen.

# wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
# sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/buster.list
# sudo apt update

Nun ist es an der Zeit alles zu installieren.

# sudo apt install mopidy -y

Wir starten nun das erste mal Mopidy, damit eine Konfigurationsdatei erstellt wird, die wir später bearbeiten können.

# mopidy

Hinweis: Mopidy startet nun im Terminal. Wir dürfen dies nicht schließen, ansonsten wird Mopidy geschlossen. Das es dauerhaft läuft, machen wir später.

Okay, nachdem alles geladen hat, schließen wir Mopidy wieder mit SRTG + C, damit wir es noch mit Erweiterungen ausstatten können.

Nun haben wir das System an sich installiert, nur lässt es sich noch nicht verwalten.
Dazu müssen wir noch Webinterfaces installieren.
Hier können wir entweder alles installieren, oder nur das, was wir brauchen.
Ich habe hier mal die Befehle für alle aktuellen Interfaces niedergeschrieben:

# sudo python3 -m pip install Mopidy-Iris
# sudo python3 -m pip install Mopidy-Mobile
# sudo python3 -m pip install Mopidy-Mowecl
# sudo python3 -m pip install Mopidy-Muse
# sudo python3 -m pip install Mopidy-MusicBox-Webclient
# sudo python3 -m pip install Mopidy-Party

Meine Empfehlung:
Iris, Mobile und MusicBox-Webclient.

Im nächsten Schritt installieren wir nun noch die Plugins, die uns die Anbindung von externen Inhalten wie z.B. Spotify oder diversen Radiosendern erlauben.
Du findest HIER die ganze Liste an Erweiterungen.
Du kannst diese ebenfalls sehr einfach installieren lassen.

# sudo python3 -m pip install Mopidy-Beets
# sudo python3 -m pip install Mopidy-dLeyna
# sudo python3 -m pip install Mopidy-InternetArchive
# sudo python3 -m pip install Mopidy-Jellyfin
# sudo python3 -m pip install Mopidy-Local
# sudo python3 -m pip install Mopidy-ORFRadio
# sudo python3 -m pip install Mopidy-Pandora
# sudo python3 -m pip install Mopidy-Podcast
# sudo python3 -m pip install Mopidy-Podcast-iTunes
# sudo python3 -m pip install Mopidy-RadioNet
# sudo python3 -m pip install Mopidy-SomaFM
# sudo python3 -m pip install Mopidy-SoundCloud
# sudo python3 -m pip install Mopidy-Spotify
# sudo python3 -m pip install Mopidy-Subidy
# sudo python3 -m pip install Mopidy-TuneIn
# sudo python3 -m pip install Mopidy-YouTube

Meine Empfehlungen:
File, InternetArchiv, Local, RadioNet, SomaFM, Stream und YouTube.

Damit wir nun Mopidy an eventuell schon verhandene Systeme anbinden können, installieren wir uns noch ein paar Backends für das System.

# sudo python3 -m pip install Mopidy-Headless
# sudo python3 -m pip install Mopidy-MPD
# sudo python3 -m pip install Mopidy-MPRIS
# sudo python3 -m pip install Mopidy-PiDi
# sudo python3 -m pip install Mopidy-Raspberry-GPIO
# sudo python3 -m pip install Mopidy-Scrobbler

Um Mopidy im Hintergrund laufen lassen zu können, empfehle ich aktuell Screen. Die Einrichtung dafür machen wir weiter unten.


3. Erweiterungen installieren

3.1 UPNP nutzen

Wir haben zwar für Mopidy schon Erweiterungen installiert, diese sind aber nur für die Software selbst. Je nach Protokoll, brauchen wir jetzt noch einen Dienst, der die Daten des Protokolls überhaupt annimmt.

Für UPNP nutzen wir rygel. Dafür haben wir auch die Erweiterung MPRIS für Mopidy installiert.

# sudo apt install rygel -y

Editiere nun die Konfiguration von rygel:

# sudo nano /etc/rygel.conf

Suche nach [MPRIS] und editiere den Eintrag enabled=false zu enabled=true.
Speichere die Datei danach ab.

Wir können nun einmal testen ob rygel starten.
Gebe dazu einfach

# rygel

in die Kommandozeile ein und drücke Enter. Mit STRG + C können wir rygel wieder beenden. Die Einrichtung für den Dauerbetrieb machen wir gleich.

3.2 Andere Dienste streamen lassen

Um von unserem Smartphone z.B. Musik direkt streamen lassen zu können, brauchen wir ebenfalls eine Gegenstelle. upmpdcli fungiert als Schnittstelle für z.B. Spotify, Tidal & Co.!
Damit lässt sich ein Stream direkt auf die pipe von SnapCast (installieren wir gleich) legen.
Also hauen wir das auch noch direkt drauf.
Alle Infos zum Tool gibt es HIER.

# sudo apt install dirmngr
# gpg --keyserver pool.sks-keyservers.net --recv-key F8E3347256922A8AE767605B7808CE96D38B9201
# gpg --export '7808CE96D38B9201' | sudo apt-key add -

Nun musst du noch die SourceList für dein System anpassen, damit die korrekten Paketquellen angesteuert werden.
Erstelle dazu eine neue SourceList:

# sudo nano /etc/apt/sources.list.d/upmpdcli.list

Füge hier dann für dein System den korrekten Pfad rein.
Alle Infos findest du HIER.

BEISPIEL FÜR DEBIAN:

deb http://www.lesbonscomptes.com/upmpdcli/downloads/debian/ buster main
deb-src http://www.lesbonscomptes.com/upmpdcli/downloads/debian/ buster main

BEISPIEL FÜR RASPBERRY PI (Debian 10):

deb http://www.lesbonscomptes.com/upmpdcli/downloads/raspbian/ buster main
deb-src http://www.lesbonscomptes.com/upmpdcli/downloads/raspbian/ buster main

Speichere die Datei anschließend ab und schließe sie wieder.
Nun können wir upmpdcli installieren.

# sudo apt update
# sudo apt install upmpdcli -y

Nun können noch optional diverse Plugins installiert werden, damit wir die passende Gegenstelle für die Plattformen haben.

# sudo apt-get install upmpdcli-gmusic -y
# sudo apt install upmpdcli-tidal -y
# sudo apt install upmpdcli-qobuz -y
# sudo apt install upmpdcli-spotify -y
# sudo apt install sc2mpd -y
# sudo apt install scweb -y

Du kannst selbst bestimmen was du alles installieren möchtest. Ich empfehle alles zu nehmen, damit man bei Partys gut gewappnet ist. So kann jeder mit seinem Favorisierten Streaming-Dienst etwas beisteuern.

Damit wir nun auf dem Smartphone den UPNP/DLNA-Player besser erkennen können, geben wir upmpdcli noch einen schönen Anzeigenamen.
Öffne dazu die Config:

# sudo nano /etc/upmpdcli.conf

Suche nach der folgenden Zeile und Editiere den Namen:

friendlyname = Hier Beliebigen Namen angeben

Setze als Name z.B. Mopidy oder Raspberry Pi, oder …

Hast du weitere Dienste installiert, füge mögliche Zugangsdaten weiter unten in der Konfiguration hinzu.
Entferne auch bei den genutzten Diensten die #, um die Zeile zu aktivieren.

Soweit du Anpassungen gemacht hast, starte den Dienst einmal neu, damit die Änderungen wirksamm werden.

# sudo systemctl restart upmpdcli

3.3 Unterstützung für Apple AirPlay

Wer Apple-Geräte besitzt, kann aktuell noch nicht viel im Heimnetz verteilen. Das ändern wir mit der Unterstützung von Apple AirPlay.
Hierfür verwenden wir das Tool ShairPort Sync. Damit gibt sich unser Server als ein Apple-fähiges Gerät aus.
In den Debian-Paketquellen ist SharePort-Sync bereits enthalten.
Falls es bei dir nicht der Fall sein sollte, schau mal auf GitHub vorbei, dort findest du weitere Infos für dein System.

Lass uns ShairPort installieren:

# sudo apt install shairport-sync

Wer es lieber manuell machen möchte, kann das wie folgt machen.
Wir brauchen zuerst ein paar zusätzliche Pakete.

# sudo apt-get install autoconf automake avahi-daemon build-essential git libasound2-dev libavahi-client-dev libconfig-dev libdaemon-dev libpopt-dev libssl-dev libtool xmltoman -y

Nun können wir uns die Daten herunterladen und in das Verzeichnis wechseln:

# git clone https://github.com/mikebrady/shairport-sync.git
# cd shairport-sync

Nun brauchen wir nur noch 4 weitere Befehle, um alles zu installieren:

# autoreconf -i -f
# ./configure --with-stdout --with-alsa --with-avahi --with-ssl=openssl --with-systemd --with-metadata
# make
# sudo make install

Nun setzen wir ShairPort noch als Service und starten dann das Ganze:

# sudo systemctl enable shairport-sync
# sudo service shairport-sync start

Super! Der Dienst läuft.
Doch Halt! Bisher wird absolut nichts im Heimnetz verteilt, da bisher alles ins Leere gesendet wird.
Wir installieren gleich noch SnapCast. Dort müssen wir die Konfiguration anpassen, damit alles wie gewünscht funktioniert.

3.4 Spotify

Wir können unseren SnapCast Server auch sagen, er soll sich als Spotify-Box ausgeben. Somit können wir direkt von der Spotify-Anwendung aus, den Snapcast-Server ansteuern.
Leider ist für die Integration von Spotify etwas mehr Aufwand gefordert.
WICHTIG: Damit ihr das ganze sinnvoll Nutzen könnt, benötigt ihr (leider) einen Premium-Account! Ohne diesen lässt sich Snapcast nicht ansteuern.

Wir statten unseren Server nun mit Librespot aus.

Wer es einfach mag, schickt einfach folgenden Befehl ab und wartet etwas:

# sudo curl -sL https://dtcooper.github.io/raspotify/install.sh | sh

Wer es von Hand machen möchte, nutzt diese Befehle:

# sudo apt install curl apt-transport-https -<
# sudo curl -sSL https://dtcooper.github.io/raspotify/key.asc | sudo apt-key add -v -
# sudo echo 'deb https://dtcooper.github.io/raspotify raspotify main' | sudo tee /etc/apt/sources.list.d/raspotify.list
# sudo apt update
# sudo apt install raspotify -y

Prinzipell brauchen wir den Dienst nur, da er diverse Daten mitliefert, die SnapCast gebrauchen kann.
Wir können den Dienst aber dennoch fertig einrichten und auch nutzen.
Editiere dazu einfach die Config:

# sudonano /etc/default/raspotify

Wir können hier noch freiwillige Schönheitsanpassungen machen.

DEVICE_NAME="Gebe hier ein netten Anzeigenamen an"
BACKEND_ARGS="--backend pipe --device /tmp/snapfifo"

BACKEND_ARGS => Schickt den Audiostream zu Snapcast.

Den Dienst kannst du nach der Konfiguration einmal neu starten lassen:

# sudo service raspotify restart

Oder falls du ihn erst einmal nicht brauchst, halte ihn einfach an:

# sudo service raspotify stop

Super! Der Dienst ist instaliert und Startklar!
Doch Halt! Bisher wird absolut nichts im Heimnetz verteilt, da bisher alles ins Leere gesendet wird.
Wir installieren gleich noch SnapCast. Dort müssen wir die Konfiguration anpassen, damit alles wie gewünscht funktioniert.

3.5 UPnP / DLNA

Damit wir nun noch UPnP-Streams bzw DLNA-Streams abspielen können, müssen wir noch einen kleinen Client installieren.
Hierfür nutzen wir MPD.

Der Player sollte in den offiziellen Paketquellen eigentlich enthalten sein.

# apt install mpd -y

Nun passen wir die Config an.
Öffne diese dazu im Editor.

# nano /etc/mpd.conf

Suche hier nach audio_output und ersetze die Config mit dieser:

audio_output {
    type            "fifo"
    name            "UPnP-DLNA"
    path            "/tmp/snapfifo"
    format          "48000:16:2"
    mixer_type      "software"
}

Nun müssen wir die Config noch korrekt verlinken, denn MDP sucht im falschen Verzeichnis nach der Config.
Bei der Installation sollte auch schon ein Fehler aufgekommen sein, das der Service nicht gestartet werden konnte.

# sudo ln /etc/mpd.conf /usr/local/etc

Okay, nun noch starten.

# sudo service mpd start

4. Mopidy konfigurieren

Nun richten wir Mopidy noch fertig ein, damit der Dienst auch auf die anderen Musikquellen hören kann.
Teilweise müssen wir nun auch Zugangsdaten eingeben, damit Dienste wie SoundCloud genutzt werden können.

Wir geben nun als erstes einmal die aktuelle Standardkonfiguration von Mopidy aus:

# sudo mopidyctl config

Das ist jetzt eine sehr sehr sehr lange Konfiguration.
Kopiere nun die Stellen heraus, die du editieren möchtest. Wir brauchen nicht alles. Du kannst aber auch alles kopieren 😉
Hier ein Beispielauszug:

[core]
cache_dir = /var/cache/mopidy
config_dir = /etc/mopidy
data_dir = /var/lib/mopidy
max_tracklist_length = 10000
restore_state = false

[logging]
verbosity = 0
format = %(levelname)-8s [%(threadName)s] %(name)s %(message)s
color = false
config_file =


.
mixer = software
mixer_volume = 
output = autoaudiosink
buffer_time = 
....

Wie erkennst du eine Config-Stelle?

[Titel der Konfiguration 1]
Parameter 1
Parameter 2
Parameter 3

[Titel der Konfiguration 2]
Parameter 1
Parameter 2
….

Du musst nur die Überschrift und die Parameter zum jeweiligen Dienst kopieren.
Dann können wir eine schlanke Konfiguration anlegen, die nicht viel Editierungsaufwand benötigt.

Wir editieren nun die schon vorhandene Config-Datei, die aber noch ziemlich leer ist mit:

sudo nano /etc/mopidy/mopidy.conf

In diese können wir dann die verschiedenen Config-Parameter einfügen.
Du kannst hier auch nur die Inhalte einfügen, die du Konfigurieren möchtest.
Wichtig ist hierbei, damit wir bei audio den output abändern, damit die Musik an Snapcast weitergeleitet wird und nicht lokal abgespielt wird.
ACHTUNG: In meinem Beispiel habe ich audio und youtube groß geschrieben (AUDIO / YOUTUBE), damit meine Anzeige hier nicht kaputt ist. Schreib das auf jedenfall klein, wie die anderen Teile der Config auch!

Eine Basis-Config könnte daher so aussehen:

[AUDIO]
mixer = software
mixer_volume =
output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/tmp/snapfifo
buffer_time =

[YOUTUBE]
enabled = true
youtube_api_key = 
threads_max = 16
search_results = 15
playlist_max_videos = 1000
api_enabled = false
autoplay_enabled = true
strict_autoplay = false
max_autoplay_length = 600
max_degrees_of_separation = 3


enabled = false  ; Extension disabled by user config.

[somafm]
enabled = true
encoding = mp3
quality = fast
dj_as_artist = true

[radionet]
enabled = true
username = alice666.9
password = ********
language = de
min_bitrate = 128

[podcast]
enabled = true
browse_root = Podcasts.opml
browse_order = desc
lookup_order = asc
cache_size = 64
cache_ttl = 86400
timeout = 10

[podcast-itunes]
enabled = true
base_url = http://itunes.apple.com/
country = DE
explicit =
charts = audioPodcasts
charts_limit = 20
search_limit = 20
timeout = 10
retries = 3

[party]
enabled = true
votes_to_skip = 3

[pandora]
enabled = false  ; Extension disabled due to config errors.
api_host = tuner.pandora.com/services/json/
partner_encryption_key =   ; Must be set.
partner_decryption_key =   ; Must be set.
partner_username = android
partner_password =   ; Must be set.
partner_device = android-generic
username =   ; Must be set.
password =   ; Must be set.
preferred_audio_quality = highQuality
sort_order = a-z
auto_setup = true
cache_time_to_live = 86400
event_support_enabled = false
double_click_interval = 2.50
on_pause_resume_click = thumbs_up
on_pause_next_click = thumbs_down
on_pause_previous_click = sleep
on_pause_resume_pause_click = delete_station

[orfradio]
enabled = true
stations =
  oe1
  oe3
  fm4
  campus
  bgl
  ktn
  noe
  ooe
  sbg
  stm
  tir
  vbg
  wie
afterhours = false
archive_types =
  M
  B
  BJ
  N

[musicbox_webclient]
enabled = true
musicbox = false
websocket_host =
websocket_port =
on_track_click = PLAY_ALL

[muse]
enabled = true

[mpd]
enabled = true
hostname = 127.0.0.1
port = 6600
password =
max_connections = 20
connection_timeout = 60
zeroconf = Mopidy MPD server on $hostname
command_blacklist =
  listall
  listallinfo
default_playlist_scheme = m3u

[mowecl]
enabled = true
theme_type = light
background_color = #fdf6e3
text_color = #002b36
primary_color = #268bd2
seek_update_interval = 500
search_history_length = 10
key_play_pause = space+Control
key_next_track = ArrowRight
key_previous_track =
key_rewind_track = ArrowLeft
key_volume_up = ArrowUp
key_volume_down = ArrowDown

[mobile]
enabled = true
title = Mopidy Mobile on $hostname
ws_url =

[local]
enabled = false  ; Extension disabled due to config errors.
media_dir =  ; Must be set.
scan_timeout = 1000
scan_flush_threshold = 100
scan_follow_symlinks = false
included_file_extensions =
excluded_file_extensions =
  .cue
  .directory
  .html
  .jpeg
  .jpg
  .log
  .nfo
  .pdf
  .png
  .txt
  .zip
directories =
  Albums                  local:directory?type=album
  Artists                 local:directory?type=artist
  Composers               local:directory?type=artist&role=composer
  Genres                  local:directory?type=genre
  Performers              local:directory?type=artist&role=performer
  Release Years           local:directory?type=date&format=%25Y
  Tracks                  local:directory?type=track
  Last Week's Updates     local:directory?max-age=604800
  Last Month's Updates    local:directory?max-age=2592000
timeout = 10
use_artist_sortname = false
album_art_files =
  *.jpg
  *.jpeg
  *.png

[jellyfin]
enabled = false  ; Extension disabled due to config errors.
username =   ; Must be set.
user_id =
password =
hostname =   ; Must be set.
libraries =
albumartistsort =
port =
client_cert =
client_key =
album_format =
max_bitrate =
watched_status = false

[iris]
enabled = true
country = DE
locale = de_DE
spotify_authorization_url = https://jamesbarnsley.co.nz/iris/auth_spotify.php
lastfm_authorization_url = https://jamesbarnsley.co.nz/iris/auth_lastfm.php
genius_authorization_url = https://jamesbarnsley.co.nz/iris/auth_genius.php
data_dir = $XDG_DATA_DIR/iris

[internetarchive]
enabled = true
base_url = http://archive.org
collections =
  audio
  etree
  librivoxaudio
  audio_bookspoetry
  audio_tech
  audio_music
  audio_news
  audio_foreign
  audio_podcast
  audio_religion
audio_formats =
  VBR MP3
  64Kbps MP3
image_formats =
  JPEG
  JPEG Thumb
browse_limit = 100
browse_views =
  downloads desc|Views
  titleSorter asc|Title
  publicdate desc|Date Archived
  date desc|Date Published
  creatorSorter asc|Creator
search_limit = 20
search_order =
cache_size = 128
cache_ttl = 86400
retries = 3
timeout = 10

[dleyna]
enabled = true
upnp_browse_limit = 500
upnp_lookup_limit = 20
upnp_search_limit = 100
dbus_start_session = dbus-daemon --fork --session --print-address=1 --print-pid=1

[bookmarks]
enabled = true
sync_period = 500
max_bookmarks = 100
max_bookmark_length = 100000
max_store_items = 10
max_store_item_length = 1000
disable_limits = true

[beets]
enabled = true
hostname = 127.0.0.1
port = 8337

[file]
enabled = true
media_dirs =
  $XDG_MUSIC_DIR|Music
  ~/|Home
excluded_file_extensions =
  .directory
  .html
  .jpeg
  .jpg
  .log
  .nfo
  .pdf
  .png
  .txt
  .zip
show_dotfiles = false
follow_symlinks = false
metadata_timeout = 1000

[http]
enabled = true
hostname = 127.0.0.1
port = 6680
zeroconf = Mopidy HTTP server on $hostname
allowed_origins =
csrf_protection = true
default_app = mopidy

[m3u]
enabled = true
base_dir =
default_encoding = latin-1
default_extension = .m3u8
playlists_dir =

[softwaremixer]
enabled = true

[stream]
enabled = true
protocols =
  http
  https
  mms
  rtmp
  rtmps
  rtsp
metadata_blacklist =
timeout = 5000


enabled = false  ; Extension disabled due to config errors.
username =   ; Must be set.
password =   ; Must be set.
client_id =   ; Must be set.
client_secret =   ; Must be set.
bitrate = 160
volume_normalization = true
private_session = false
timeout = 10
allow_cache = true
allow_network = true
allow_playlists = true
search_album_count = 20
search_artist_count = 10
search_track_count = 50
toplist_countries =

Hinweis: Hier müssen nun ggf. für diverse Streaming-Plattformen Zugangsdaten hinterlegt werden.
Möchtest du also z.B. Spotify nutzen, musst du einen API-Key hinterlegen.

Brauchst du einen Dienst aktuell nicht, setze ihn einfach bei „enabled“ von „true“ auf „false“. Dann ist der Dienst komplett aus.

Speichere die Datei nun ab.


5. Snapcast installieren

Snapcast ist nun unsere Übertragungseinheit.
Snapcast empfängt den Stream von Mopidy oder eben einem anderen Abspielgerät und leitet diesen fast Verzögerungsfrei an die Snapcast-Clients weiter.

5.1 Snapcast Server

Der Snapcast-Server empfängt den Audiostream und leitet ihn an die Clients weiter.
Es kann im Netzwerk mehrere Server geben, sofern sie unterschiedliche IPs oder Ports nutzen.
In der Regel reicht ein Server.

Wir installieren den Snapcast-Server direkt mit einem deb-Paket.
Alle Installationsmöglichkeinten findest du HIER.
Hier sind zwei Beispiele von mir.
DEBIAN / UBUNTU:

# wget https://github.com/badaix/snapcast/releases/download/vVERSIONSNUMMER/snapserver_VERSIONSNUMMER_amd64.deb

RASPBERRY PI:

# wget https://github.com/badaix/snapcast/releases/download/v0.20.0/snapserver_VERSIONSNUMMER_armhf.deb

Anschließend können wir das Paket wieder installieren lassen.

# sudo apt install /pfad/zum/download/snapserver_VERSIONSNUMMER_armhf.deb -y

Der Snapcast-Server an sich muss nich angepasst werden, es sei denn, wir haben die Unterstützung für direktes Abspielen von anderen Diensten installiert.
Das könntest du in Schritt 3.3 und 3.4 gemacht haben.
Falls das der Fall sein sollt, müssen wir die Config noch kurz anpassen.

Was werden wir tun?
Wir werden uns pro Dienst einen Kanal erstellen.
So können wir pro Client entscheiden, welche Quelle er wiedergeben soll.

Wir Editieren hierfür folgende Datei:

# sudo nano /etc/snapserver.conf

Suche in der Datei nach „[stream]„.
Such dort nach der Zeile mit „stream = pipe:///tmp/snapfifo?“ als Inhalt.
Darunter kannst du dann die Streams für die anderen Dienste einbinden.
Ich habe hier einmal Beispiele vorbereitet.

Für Apple AirPlay:

stream = airplay:///shairport-sync?name=Airplay&devicename=Snapcast&port=5000

Für Spotify:

stream = spotify:///librespot?name=Spotify&devicename=Snapcast&killall=true

Einfach pro Zeile einen Stream einfügen und die Datei anschließend speichern.
Fertig!

Den Snapcast-Server starten wir gleich.

5.2 Snapcast Client

Der Snapcast-Client ist nun auf allen Plattformen notwendig, auf der die Musik wiedergegeben werden soll.
Wir können das ganze nun auf anderen Raspberry Pi‘s, unserem PC oder auch Smartphone installieren.

Download für den PC: Linux-Systeme (ARM + AMD64)Windows (inkl. GUI!)
Android: F-DroidGoogle Play Store

Installiere die Anwendungen auf deinen Clients und lass sie starten.
Öffne die Einstellungen und gebe als Quelle die IP-Adresse deines Snapcast-Servers an.
Als Beispiel: 192.168.0.20

In der Regel sollte die Anwendung deinen Snapcast-Server auch alleine finden. Es sei denn, du hast mehrere Server im Einsatz und / oder dein DNS-Server steht außerhalb deines Netzwerkes.


6. Die Systeme starten

Um am Anfang Fehler finden zu können, empfehele ich die Verwendung von Screen. So sehen wir Fehler direkt und können die Anwendung auch ggf. leicht wieder beenden.
Lass uns also noch schnell Startdateien für alle Dienste anlegen.
Du kannst gerne später die Dienste auch als Service laufen lassen, damit diese z.B. auch automatisch mit dem System starten.
Für Mopidy:

# sudo nano mopidy.sh

Der Inhalt:

screen -S Mopidy mopidy

Für rygel:

# sudo nano rygel.sh

Der Inhalt:

screen -S rygel rygel

Snapcast hat sich bereits als Service installiert.

Noch die Scripte ausführbar machen:

# sudo chmod +x mopidy.sh
# sudo chmod +x rygel.sh

Super! Nun ist es an der Zeit, mal den richtigen Sound aufzulegen 😉

# systemctl start snapserver
# ./mopidy.sh
# ./rygel.sh

Wer z.B. sein Raspberry Pi als Server als auch für die Musikwiedergabe nutzen möchte, hat mit sicherheit den Client ebenfalls installiert. Falls nicht, hole das noch nach.
Wir müssen den Client aber ebenfalls noch starten.

# systemctl start snapclient

Wir können nun das Mopidy Webinterface aufrufen, indem wir einen Browser öffnen und die IP des Servers ansteuern.
http://IP-DES-SERVERS:6680

Uns sollte dann Mopidy begrüßen.
Wir können dann das gewünschte Webinterface auswählen. Je nach dem wie viele wir installiert haben, stehen mal mehr mal weniger zur Auswahl.

Über die Anwendungen – egal ob PC oder Smartphone – können wir nun den Snapcast Client nutzen, um zum einen die Musik zu hören, als auch die Lautstärke der verschiedenen Clients zu steuern.

Wenn du das ganze bequem vom Handy aus machen willst, gibt es auch pasende Apps dafür.
Mopidy Mobile: Google Play Store


Noch ein kurzes F A Q

Alles synchron bekommen
Um alles schön synchron zu bekommen, kann pro Gerät in Snapcast eine Latenz eingestellt werden.
Nimm dein schlechtester Wiedergabeplayer als Referenz und stimm alle Geräte nun ab.
Kleiner Erfahrungsbericht: Ich habe z.B. auf einem Amazon FireTV (Box Gen2) 160ms Latenz hinzugefügt und auf einem Smartphone (Samsung Galaxy Note8) -50ms an Latenz angegeben. So ist alles mehr oder weniger synchron. Beide Geräte sind per WLAN verbunden.

Kann ich Dienst XYZ auch zum Abspielen nutzen?
Nicht alle Dienste werden direkt unterstützt. Schau mal bei Snapcast oder Mopidy vorbei, um eine Liste an aktuell unterstützten Diensten zu erhalten.
Sollte ein Dienst nicht direkt gehen, dafür die Wiedergabe an einem PC funktionieren, kann man dort die Soundquelle auf Snapcast mit Zusatzsoftware umbiegen.
Diverse Beispiele (vor allem mit Linux-Systemen) gibts bei Snapcast auf Github.

Ich habe ein „smartes“ WLAN-Radio, was auch per Spotify, TuneIn, … angesteuert werden kann. Kann ich diese Inputs mit Snapcast nutzen?
Nein. Aktuell kenne ich keinen Weg, um den Geräten ein z.B. Spotify-Player vorzugaukeln. Solltest du eine Möglichkeit kennen, lass es mich wissen
=> Ich habe auch zwei Geräte, die diverse Plattformen „empfangen“ können, aber kein direktes abpsielen des Snapcast-Streams unterstützen.

Die Wiedergabe an den Clients ist leicht versetzt, kann man das besser machen?
Das liegt an der Leistung des Clients selbst und an der Übertragungsleistung des Netzwerkes.
Man kann einen „Puffer“ in den Einstellungen von Snapcast anpassen, das verzögert aber die Wiedergabe aller Clients noch mehr.
Ein kleiner Versatz wirds aber immer geben.
Die Verwendung von LAN ist zu bevorzugen. Ein Client nutzt ca. 1Mbit/s durchgehend an Datenrate.

Wie stark ist die Verzögerung und wie weit hängen die Clients außereinander?
Die Verzögerung kann selbst bestimmt werden und hängt meist von der Verbindung ab.
In der Regel ist die Verzögerung aber weit unter einer Sekunde.
Die Clients sollten weitestgehend synchron sein, es können aber einige Millisekunden an Latenz dazwischen sein.

Wenn eine zweite Quelle einen Input zu Snapcast liefert, spackt der Ton komplett.
Ja, denn dann treffen zwei Audiostreams aufeinander.
Richte dazu einen zweiten Snapcast-Stream ein.
Die Doku auf Github liefert dazu die Antworten. (Auf englisch)

Kann ich damit dem Ton des Fernsehrs im Haus übertragen?
Ja, wiso nicht. Nutze den Kopfhöreranschluss oder (sofern noch vorhanden) einen Output des TVs für Ton und leite diesen an dein Snapcast-Server.
Je nach Aufbau ist hier leider ein weiteres Stück Hardware notwendig.
Von Haus aus kann kein TV zu deinem Snapcast-Server oder Mopidy streamen.
Wäre schön wenn so etwas gehen würde.
Einige TV-Modelle können den Ton auch per Bluetooth ausgeben. Bisher ist mir aber keine Möglichkeit bekannt, den Ton an z.B. einen Raspberry Pi zu leiten. Wäre auch eine bequeme Möglichkeit.

Wie kann ich am einfachsten Musik vom Handy streamen?
Für Spotify, Tidla & Co. nutze einfach die eingebaute Streaming-Funktion.
Wenn du direkt die Musikdaten von deinem Gerät streame wíllst, kannst du folgende Apps nutzen:
BubbleUPnP – Kostenlos aber Werbeversäucht. Nutzt das DLNA-Protokoll.
doubleTwist Pro – Kostenpflichtig, streamt dafür Apple AirPlay und DLNA.
Hi-Fi Cast – Kostenlos aber mit Werbung. Kann Musik via UPnP/DLNA Streamen.

Wie kann ich Musik von meinem Windows-PC aus streamen?
Per Rechtsklick auf die Mediendatei und dann über „Wiedergabe auf Gerät“

ACG Player – Kostenlos und werbeversäucht. Die Anzeige kann angepasst werden und eine Playlist erstellt werden.
playto TV – Kostenlos, enthält Werbung, dafür eine schlanke und übersichtliche App. Besitzt auch einen eingebauten Browser, um von Webseiten direkt Audio zu streamen.
Stream What You Hear – Kostenlos und ohne Werbung! Starte einfach auf deinem PC einen Server und füge den MP3-Stream als Radio-Stream in Mopidy ein.


Weitere coole Links

Hier sind noch weitere Links, zu coolen Projekten. Damit kannst du dein Setup noch erweitern!

HydraPlay – Schlichtes Webinterface, welches für Tablets und Smartphones gedacht ist. Steuert direkt SnapCast an.
Snapcastr – Webinterface, um SnapCast zu steuern.

Schreibe einen Kommentar

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

* Durch das Absenden dieses Kommentars werden deine angegebenen Daten auf dem Server gespeichert. Du stimmst dadurch den Datenschutzbedingungen zu.