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
– 3GB freien Speicherplatz auf dem System
– 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.
Wenn du möchtest, kannst du Mopidy nun auch mit einem neuen Nutzer starten, um die Software nicht andauernd mit Root-Rechten zu starten.

# 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-Tune
# 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 – Notwendige Pakete installieren

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.
Wir installieren uns hierfür rygel, um notwendige Pakete auf unser System zu bekommen. Laufen muss der Dienst hierfür erst einmal nicht, wir konfigurieren ihn aber mal durch.

# 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.
Du kannst auch hier eine Config-Datei anlegen, die im Home-Verzeichnis des Nutzers liegt, der Rygel startet.
Beim ersten Start zeigt Rygel auch an, wo die Config-Datei gesucht wird.
>> /home/NUTZERNAME/.config/rygel.conf

Du kannst die MPRIS-Stelle der Konfigurationsdatei, auch im Homeverzeichnis ablegen.
Dann ist das ganze am Ende etwas aufgeräumter.

Um Warnungen von MPRIS in Mopidy zu unterdrücken, lege folgende Datei an:

# nano /etc/dbus-1/system.d/org.mpris.MediaPlayer2.mopidy.conf

Befülle sie mit folgendem Inhalt:

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <!-- Allow mopidy user to publish the Mopidy-MPRIS service -->
  <policy user="mopidy">
    <allow own="org.mpris.MediaPlayer2.mopidy"/>
  </policy>

  <!-- Allow anyone to invoke methods on the Mopidy-MPRIS service -->
  <policy context="default">
    <allow send_destination="org.mpris.MediaPlayer2.mopidy"/>
    <allow receive_sender="org.mpris.MediaPlayer2.mopidy"/>
  </policy>
</busconfig>

Sollte Mopidy bei dir NICHT mit dem Benutzer “mopidy” ausgeführt werden, ändere den Benutzer in Zeile 5 ab!
(Den Fix gibts hier ausführlicher)

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.
Unser Server gibt sich bei den Musikdiensten als Client aus, so können wir das Smartphone bei Seite legen. Zusätzlich nutzen wir upmpdcli als Brücke für UPnP/DLNA in Schritt 3.5!
Also hauen wir das auch noch direkt drauf.
Alle Infos zum Tool gibt es HIER.

# sudo apt install dirmngr
# wget https://www.lesbonscomptes.com/pages/lesbonscomptes.gpg
# cp lesbonscomptes.gpg /usr/share/keyrings/
# wget https://www.lesbonscomptes.com/pages/jf-at-dockes.org.pub
# gpg --import jf-at-dockes.org.pub
# 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 install upmpdcli-tidal -y
# sudo apt install upmpdcli-qobuz -y
# sudo apt install upmpdcli-spotify -y
# sudo apt install upmpdcli-deezer -y
# sudo apt install upmpdcli-hra -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:
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.1 Spotify – Für allgemeine Server!

ACHTUNG: Aktuell kann Spotify NICHT genutzt werden, da notwendige Bibliotheken nicht mehr Funktionstüchtig sind! Alle Informationen dazu gibt es HIER.

Wenn wir das Ganze auf einem normalen Server installieren, greifen wir hier zum fertigen Tool SpoCon (Spotify Connect Client).
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 starten die Installation mit folgendem Script:

# curl -sL https://spocon.github.io/spocon/install.sh | sh

Sobald das durch ist, müssen wir die Konfiguration noch anpassen.
Rufe dazu die Konfiguration auf:

# nano /opt/spocon/config.toml

Wir müssen / können folgende Dinge anpassen:
deviceName = “Schönen Anzeigenamen hier eintragen”
deviceType = “COMPUTER” <- Auf COMPUTER belassen preferredLocale = “de”
strategy = “USER_PASS”
username = “DEIN NUTZERNAME”
password = “DEIN PASSWORT”
preferredAudioQuality = “VORBIS_320”
output = “PIPE”
pipe = “/tmp/snapspot”

Sobald die Konfiguration angepasst wurde, kann sie gespeichert und geschlossen werden.
SpoCon muss nun noch einmal neu gestartet werden, damit alles übernommen wird.

# sudo systemctl restart spocon

3.4.2 Spotify – Nur für Raspberry Pi!

Soweit wir einen Raspberry Pi haben, können wir auf das fertige Script RaSpotyfi zurückgreifen. Damit machen wir uns das Leben einfacher.
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 -y
# 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:

# sudo nano /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/snapdlna"
    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 den Dienst neu starten lassen, damit die Config übernommen wird.

# sudo service mpd restart

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

Du hast aber auch gleichzeitig wieder die Möglichkeit, die Konfiguration über das Home-Verzeichnis eines Nutzers zu machen.
Mopidy hat beim ersten Start, eine Konfiguration in folgendem Pfad abgelegt:

sudo nano /home/NUTZERNAME/.config/mopidy/mopidy.conf

Du kannst die im Home-Verzeichnis Editieren, oder gleich beide.
Sicher ist sicher.
Die im Home-Verzeichnis wird aber priorisiert genutzt! Sollten also Abweichungen vorkommen, wird z.B. ein Login der Config im Home-Verzeichnis genutzt, statt im etc-Ordner.

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

[SOUNDCLOUD]
enabled = false
auth_token =

[somafm]
enabled = true
encoding = mp3
quality = highest
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_clickterval = 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_updateterval = 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

[spotify]
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.
Gebe bei [http] die IP-Adresse des Servers an. Also z.B. 192.168.0.50!
Ansonsten funktioniert das Webinterface nur lokal auf dem Server und ist nicht von anderen Clients erreichbar!
Ersetze bei [AUDIO] auch auf jeden Fall den Parameter “output” mit dem Inhalt meiner Beispielkonfiguration. Du brauchst die weiteren Parameter, damit die Audiostreams zu Snapcast geleitet werden. Sonst hörst du nichts.

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.

Damit Mopidy gleich als Dienst läuft und bei einem Neustart des Servers ebenfalls automatisch gestartet wird, aktivieren wir noch den SystemD-Service.

# systemctl enable mopidy

Wichtig dabei ist nun zu wissen, das Mopidy nun als Service die Konfiguration von /etc/mopidy/ nutzt und nicht die im Home-Verzeichnis des Nutzers.

Damit Mopidy auch automatisch bei Systemstart startet, müssen wir noch eine kleine Konfigurationsänderung vornehmen.
Öffne dazu die mopidy.service-Datei mit dem Editor nano.

# nano /usr/lib/systemd/system/mopidy.service

Füge dort im Abschnitt [Serivce] noch den Restart-Befehl “always” dazu.

Restart=always

Speichere die Datei ab (STRG + X und mit Y und dann Enter bestätigen).

Jetzt müssen wir noch die Konfigurationsänderung übernehmen:

# systemctl daemon-reload

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.

Hinweis: Falls dir der FLAC-Codec fehlen sollte, verwendest du bestimmt das 64bit OS von Raspberry. Solange Snapcast Server noch nicht für 64bit Systeme erstellt wurde, musst du von Hand den Codec herunterladen und installieren.

# wget http://ftp.debian.org/debian/pool/main/f/flac/libflac8_1.3.3-2+deb11u2_armhf.deb
# apt install /root/libflac8_1.3.3-2+deb11u2_armhf.deb
# 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 “source = pipe:///tmp/snapfifo?” als Inhalt.
Kommentiere diese Zeile aus. Setze also eine # an den Anfang der Zeile!
Darunter kannst du dann die Streams für die anderen Dienste einbinden.
Ich habe hier einmal Beispiele vorbereitet.
Für Mopidy brauchen wir folgendes:

stream = pipe:///tmp/snapfifo?name=Mopidy

Für UPnP/DLNA:

stream = pipe:///tmp/snapdlna?name=UPnP

Für Apple AirPlay:

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

Für Spotify auf allgemeinen Servern:

stream = pipe:///tmp/snapspot?name=Spotify

Für Spotify auf Raspberry Pi:

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

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

Wer noch etwas die Latenz anpassen möchte, kann den Puffer und Cache editieren.
SnapCast erstellt mehrere “Chunks”. Man kann definieren, wie groß diese sein sollen.
Mit chunk_ms kann der Wert angepasst werden.
Standardgemäß steht er auf 20ms.

chunk_ms = 20

Der allgemeine Puffer kann mit dem Parameter “buffer” bestimmt werden.
Er steht Standardgemäß auf 1000, was 1 Sekunde ist.

buffer = 1000

Bei LAN-Verbindungen zu Clients, kann der Puffer stark reduziert werden. Sobald WLAN ins Spiel kommt, muss man mit dem Clients etwas spielen, damit man es perfekt hin bekommt.
Um so geringer die Latenz, um so besser sollte die Verbindung sein, damit es keine Aussetzer gibt.
Unter 200ms Latenz würde ich nicht gehen, um genug Spielraum für die Feinjustierung der einzelnen Clients zu haben.
Der Puffer sollte etwas größer sein, wie die größte manuell angepasste Latenz an einem Client.
Ist der Puffer zu klein, gibt es Streamabrisse bei den Clients.

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 StoreGitHub

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:

# systemctl start mopidy

Für rygel:

# sudo nano rygel.sh

Der Inhalt:

screen -S rygel rygel

Noch die Script ausführbar machen:

# sudo chmod +x rygel.sh

Und dann starten wir rygel in einem Screen, wenn der Bedarf besteht.

# ./rygel.sh

Super! Nun ist es an der Zeit, mal den richtigen Sound aufzulegen 😉
Snapcast hat sich bereits als Service installiert.

# systemctl start snapserver

Du kannst nun prüfen, ob das Webinterface des Servers verfügbar ist.
Es sollte unter der IP des Servers mit dem Port 1780 erreichbar sein.
http://IP-DES-SERVERS:1780

Sollte Mopidy nichts abspielen können und du findest dort im Log hinweise darauf, dass Mopidy kein Recht hat, die Datei snapfifo zu beschreiben, gebe Mopidy die Rechte mit folgendem Befehl:

# chown -R mopidy /tmp/snapfifo

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, Tune, … 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.
Ich habe HIER eine Anleitung geschrieben, wie du aus einem Raspberry Pi ein SnapCast-Player bauen kannst.

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.
Mit viel Feingefühl, lässt sich aber durch die Latenzanpassung alles realtiv synchron bringen.

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.
Achte dabei WLAN-Verbindungen auf eine gute Verbindung.

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)
Nutze auch die Beispiele für das Hinzufügen der Streams von Mopidy, Spotify, AirPlay & Co., um weitere Streams zu Snapcast hinzuzufügen.

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, Tidal & 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.

Mopidy spielt keine MP3-Dateien oder Radiosender ab.
Es kann sein, dass dir ein paar GStreamer-Erweiterungen fehlen. Das meiste solltest du mit diesem Befehl erhalten können:

# apt install gstreamer1.0-plugins-bad

Starte dann Mopidy noch neu.


Preview



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.
Bluetooth-Output – Streame deine Musik via Bluetooth des Raspberry Pis auf andere Geräte
YTMusic – Angepasstes Plugin für YouTube Music


Update 11.08.2021
Die Anleitung wurde von den Befehlen zum Teil etwas angepasst und die Installation von Spotify für normale Systeme hinzugefügt.
Weitere Beispiele für Streams für Snapcast wurden hinzugefügt, um diese besser zu trennen.

Update 31.10.2021
Hinweis für die Installation als Service hinzugefügt.
Link für YouTube Music Plugin hinzugefügt.
MPRIS-Fehler behoben. Danke @Kalus in den Kommentaren.

Update 16.07.2022
Hinweis zu Puffer und Cache-Größe bei Snapcast hinzugefügt, um die Latenz zu verringern.
FAQ etwas angepasst und Hinweis zum Snapcast Webinterface hinzugefügt.

Update 17.07.2022
Update zu Spotify eingetragen, da der Dienst aktuell nicht mehr zur Verfügung steht.

Update 08.04.2023
Anleitung für Mopidy noch ergänzt, damit das Tool bei Systemstart automatisch gestartet wird.
Mir ist aktuell bewusst, das ein paar Repositorys offline gegangen sind und Streaminganbieter ihre APIs abgeändert haben (Spotify), wodurch nicht mehr alles 100% funktioniert.
Die Anleitung funktioniert aber soweit noch in großteilen, es sind nur kleinere Einschränkungen.
Sobald ich Zeit und Lust habe, versuche ich eine passende Lösung zu basteln. Falls ein Leser hier schon eine gute Lösung gefunden hat, schreib sie mir gerne!

Update 13.01.2024
Fix für Snapcast Server für den Raspberry Pi 4 / 5 mit 64bit OS eingefügt.
Hinweis zum Fix für die snapfifo-Datei für Mopidy eingebaut.
Hinweis für GStreamer bei MP3 / Radio-Streams (MP3 / AAC) eingebaut

49 Kommentare

  1. Hallo Hoerli
    vielen herzlichen Dank für deine Bemühungen und die Erstellung dieses genialen Tutorials und des Videos. Ich habe mich ein paar Stunden hingesetzt und mit meinem Raspberry alles brav kopiert und nachgemacht. Die Anleitung ist wirklich idiotensicher, wenn ich das mal so sagen darf.

    Leider habe ich trotzdem eine Fehlermeldung, wenn ich Mopidy starte und ich kann mir diese nicht erklären. Hast du eine Idee? Dürfte ich dir den Fehler mal schicken? Wenn ja, auf welchem Kanal am besten?

  2. Hallo, erstmal vielen Dank für dein Tutorial.

    Ich hab das ganze auf nem Pi4 mit Raspberry OS Desktop mit nem Hifiberry DAC+ laufen. Den habe ich so eingerichtet wie Hifiberry das auf seiner Seite beschreibt und gemäß https://docs.mopidy.com/en/latest/installation/raspberrypi/#how-to-for-raspbian habe ich diese zwei Zeilen bei der Mopidyinstallation genutzt.

    sudo ln -s ~/.asoundrc /etc/asound.conf
    adduser mopidy video

    Leider läuft es noch nicht ganz rund, ich muss nach jedem reboot noch einmal chown mopidy:root /etc/mopidy/mopidy.conf angeben und starte mopidy dann per systemctl restart mopidy

    Sonst kann ich das Webinterface nicht aufrufen. Das wird sich noch lösen lassen, ich werde mal weiter suchen. Vielleicht hast du noch nen Tipp?

    Vielen Dank nochmal für das Tutorial, ich hab als tootaler Noob in Sachen Raspberry Pi und Linux (hab das Dinge jetzt drei Tage) ein paar Anläufe gebraucht, bis ich das Tutorial durchlaufen habe, aber es läuft (fast). Du hast es also offenbar sehr gut beschrieben. 🙂

    • Hi Klaus,
      danke für dein Feedback.
      Mopidy hat bisher kein Autostart im Script mit drin, was schade ist.
      Es sollte aber reichen, in die Service-Datei (/usr/lib/systemd/system/mopidy.service), folgende zwei Zeilen bei [Service] hinzuzufügen:
      Restart=on-failure
      RestartSec=10

      Mit den DAC’s habe ich bisher keine Erfahrungen sammeln können, da kann ich dir aktuell nicht weiter helfen. Dazu sollte es aber bestimmt passende Anleitungen im Netz geben.
      Die Berechtigungen deiner Mopidy-Config, sollten aber im Normalfall beibehalten werden. Du musst darauf achten, damit Mopidy auch mit dem Nutzer Mopidy gestartet wird und nicht mit root. Ansonsten könnte durch Veränderung der Datei über den Nutzer Root, die Berechtigungen editiert werden.
      Meine Berechtigung sieht so aus:
      -rw-r----- 1 mopidy root 2336 Feb 26 2021 mopidy.conf

      Die Anleitung wurde bisher von mit auf Raspberry Pi 3 und 4, als auch Debian 10 (was am Ende auf den Pi’s auch läuft) erfolgreich getestet.

  3. Hallo,

    danke dir für deine so schnelle Antwort!

    Ich hab mich glaub nicht gut ausgedrückt, aber ich hab auch noch nicht den Durchblick. Bei mir lief das ganze System prinzipiell schon und ich hab schon über Webclient, UPNP, TuneIn usw. Musik gehört. Der DAC läuft auch problemslos, die Infos zum DAC und Mopidy mit Raspberry OS Desktop wollte ich einfach nur so da lassen.

    Mein Problem war, dass ich nach einem Reboot das Webinterface nicht aufrufen konnte. Ich musste Mopidy immer restarten. Das mit dem chown stand im keinem Zusammenhang, habe ich gemerkt. Ich hab direkt nach dem Reboot das chown weg gelassen und nur mopidy neu gestartet und dann lief es auch. Aber da zeigt sich, dass ich noch wenig weiß. Ich dachte der Reboot sorgt irgendwie dafür, dass die chown Einstellungen vergessen werden, das ist aber gar nicht der Fall.

    https://docs.mopidy.com/en/latest/running/service/ und Google haben mir dann auf die Sprünge geholfen.

    Mit sudo systemctl enable mopidy lässt sich mopidy autostarten.

    Mit sudo systemctl status mopidy habe ich dann gesehen, dass es auch läuft nach jedem Reboot, aber zwei Fehler auftreten. Ich hab die Meldungen nicht mehr genau, da nun gelöst. Es betraf einmal http, deswegen konnte ich im Browser vermutlich auch nichts aufrufen. Zum anderen hatte mpd ein Problem mit dem Port 6600.

    Google brachte dann folgende Lösungen:
    Durch Setzen von wait for network in den boot options von raspi-config hat ich das http-Problem gelöst bekommen und kann nach Reboot das Webinterface aufrufen ohne restart von mopidy. Für mpd habe ich einfach port 6601 eingetragen in der mopidy.config.

    Die Rechte für die Config sehen bei mir btw so aus:
    -rw-r—– 2 mopidy root 3137 Okt 2 22:58 /etc/mopidy/mopidy.conf

    Jetzt funktioniert nach nem Reboot alles, die Anweisung sudo systemctl status mopidy spuckt jetzt noch diese Warnung aus:

    WARNING [MprisFrontend-10] mopidy_mpris.frontend MPRIS frontend setup failed (g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0))

    Da bin ich noch auf der Suche, aber ich glaube nicht mehr heute Abend. Fall ich was finde, kann ich ja nochmal nen Kommentar verfassen.

    Grüße und danke dir.

  4. Nachtrag zu MPRIS https://github.com/mopidy/mopidy-mpris

    Einfach wie unter “MPRIS on the system bus” im Link beschrieben vorgehen, dann ist auch die MPRIS-Warnung passé.

  5. Hi,

    danke für die ausführliche Anleitung. Ich hab in etwas zwei Stunden drei Raspis ans rennen gebrachte: Der erste mit einem hifiberry amp 2 macht Musik in meinem Arbeitszimmer und dient als Audio Server. Dann habe ich noch einen Snapclient per HDMI an der Anlage im Wohnzimmer und einen mit einen hifiberry in der Küche. Rennen absolut synchron, obwohl der Audio-Server im Wohnzimmer und der der Client in der Küche per WLan angebunden sind.

    Einen kleinen “Holperer” hatte ich: in der Küche lief es zuerst nicht. Das war aber schnell gelöst: Ich hate dort zuvor zum testen auch mopidy installiert und das hatte das audio-device belegt… Also mopidy gestoppt, snapclient gestartet und alles war gut…

    You made my day! 🙂

    tschau

    Sascha

  6. Hallo nochmal,

    ich war zu schnell… Einer meiner Clients verliert dauernd die Verbindung. Nachdem ich ca. 15 Minuten alles gut läuft hört die Musik auf einmal auf und die Stille wird nur noch durch kurze Musikfetzen unterbrochen. Im syslog sehe ich dort folgendes:

    Oct 25 14:39:16 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:17 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:17 audio-terasse snapclient[2408]: Time sync request failed: Connection timed out
    Oct 25 14:39:17 audio-terasse snapclient[2408]: Error reading message body of length 2342: Operation canceled
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Resolving host IP for: 192.168.135.42
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Connecting
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Connected to 192.168.135.42
    Oct 25 14:39:18 audio-terasse snapclient[2408]: My MAC: “b8:27:eb:21:f4:49”, socket: 9
    Oct 25 14:39:18 audio-terasse snapclient[2408]: ServerSettings – buffer: 1000, latency: 0, volume: 100, muted: 0
    Oct 25 14:39:18 audio-terasse snapclient[2408]: metadata:{“STREAM”:”default”}
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Codec: flac, sampleformat: 48000:16:2
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Player name: alsa, device: default:CARD=sndrpihifiberry, description: snd_rpi_hifiberry_dac, HifiBerry DAC HiFi pcm5102a-hifi-0
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Default Audio Device, idx: 1, sharing mode: unspecified, parameters:
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Mixer mode: software, parameters:
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Sampleformat: 48000:16:2, stream: 48000:16:2
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Using default buffer_time: 80 ms, default fragments: 4
    Oct 25 14:39:18 audio-terasse snapclient[2408]: PCM name: default:CARD=sndrpihifiberry, sample rate: 48000 Hz, channels: 2, buffer time: 80000 us, periods: 4, period time: 20000 us, period frames: 960
    Oct 25 14:39:18 audio-terasse snapclient[2408]: No chunks available
    Oct 25 14:39:18 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Exception: Not enough frames available, requested frames: 1912, available: 1576
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Exception: Not enough frames available, requested frames: 1193, available: 1152
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: snd_pcm_avail_delay failed: Broken pipe (-32), avail: 2768, delay: 1064, using snd_pcm_avail amd snd_pcm_delay.
    Oct 25 14:39:20 audio-terasse snapclient[2408]: snd_pcm_delay failed: Broken pipe (-32), avail: -32, delay: 1064
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Exception: Not enough frames available, requested frames: 2130, available: 1152
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Exception: Not enough frames available, requested frames: 2557, available: 1152
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Exception: Not enough frames available, requested frames: 2675, available: 1152
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Exception: Not enough frames available, requested frames: 3801, available: 1152
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Exception: Not enough frames available, requested frames: 3840, available: 403
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk
    Oct 25 14:39:20 audio-terasse snapclient[2408]: Failed to get chunk

    Der Client rennt auf einem Raspberry Zero W und ist per WLan verbunden. Auf einem anderen Client (Raspberry 3, auch WLan) funktioniert alles gut, allerdings sehe ich syslog ähnliche Meldungen, wenn auch weit weniger häufig.

    Der snapserver rennt auf einem Raspberry 4, der am LAN hängt (aber im gleichen Netzwerk). Dort sehe ich, dass der fehlerhafte Client sich dauernd neu verbindet:

    Oct 25 14:47:34 media-wohnzimmer snapserver[27155]: Error reading message header of length 0: End of file
    Oct 25 14:47:34 media-wohnzimmer snapserver[27155]: onDisconnect: b8:27:eb:21:f4:49
    Oct 25 14:47:34 media-wohnzimmer snapserver[27155]: StreamSession write error (msg length: 36): Broken pipe
    Oct 25 14:47:34 media-wohnzimmer snapserver[27155]: Error in socket shutdown: Transport endpoint is not connected
    Oct 25 14:47:35 media-wohnzimmer snapserver[27155]: StreamServer::NewConnection: 192.168.135.40
    Oct 25 14:47:35 media-wohnzimmer snapserver[27155]: Hello from b8:27:eb:21:f4:49, host: audio-terasse, v0.25.0, ClientName: Snapclient, OS: Raspbian GNU/Linux 10 (buster), Arch: armv6l, Protocol version: 2

    192.168.135.40 ist die IP des Clients, der nicht funktioniert. Die WLan-Abdeckung in dem Raum ist eigentlich sehr gut, daher kann ich mir nicht so richtig vorstellen, dass die Daten nicht durchkommen. Hast Du evtl. noch eine andere Idee, woran es liegen könnte?

    trachau

    Sascha

  7. Hi,

    es kommt noch schlimmer… Ich hab auf dem Raspi 4 jetzt neben dem snapserver auch den snapclient am rennen. Das führt leider dazu, dass jetzt auch der Client auf dem Raspi 3 aussetzer hat…. Kann es sein, dass der Raspi 4 damit ausgelastet ist, das Signal zu duplizieren? Der Snapserver rennt mit 4 Threads, da rennt kaum was anderes und laut top sind weder Prozessor noch Speicher auch nur ansatzweise ausgelastet….

    Das Problem scheint ins Besondere aufzutreten, wenn ich von spotify nutze…

    tschau

    Sascha

  8. Hi,

    ich hab den ganzen Kram jetzt nochmal in einer VM auf meinem Server aufgesetzt. Die habe ich auch erst mal recht groß dimensioniert (4 GB RAM, 2 Cores der 5 Jahre alten i7 CPU). Damit rannte jetzt alles ein Album lang ohne irgendwelche Probleme. Es scheint also, als würde ein Raspberry 4 mit 8 GB RAM nicht ausreichen, um drei Clients zu befeuern (selbst bei 2 Clients ist es nicht stabil). Da laut top weder CPU noch RAM das Problem sind, vermute ich, dass die IO Leistung nicht ausreicht…. Laut ethtool habe ich eine Gigabit Verbindung in Duplex, die dürfte eher nicht das Problem sein. Vielleicht die interne IO Leistung des Raspi? Aber bei den paar Daten, die da durch die Gegend gehen? Sehr merkwürdig….

    tschau

    Sascha

    • Hi Sascha,
      dein Problem klingt echt etwas merkwürdig.
      Bei mir läuft auch alles auf ein Raspberry Pi 4 B mit 8GB RAM, habe aber keine SD-Karte sondern eine SSD per USB angeschlossen.
      (Hält einfach länger als SD-Karten)
      Ich kann problemlos 5 Clients zeitgleich damit versorgen, unabhängig davon, ob diese per LAN oder WLAN verbunden sind. Der Pi selbst hat auch wie bei dir eine LAN-Verbindung.
      Ein Lastproblem schließe ich hier definitiv aus.
      Habe sogar mal einen FLAC-Radiostream eingeschaltet, welcher schon mit 1400kbps streamt. Da geht dann etwas mehr Bandbreite über die Leitung.
      Auch ein RPi 3B+ läuft mit RPi-Display wunderbar mit dem Snapcast-Client.

      Ich kenn es nur von einem Sonos-Lautsprecher (nein, ich hab keinen), welche gerne mal zwischen diversen WLAN-Repeatern springen, soweit zu viele sich auf engem Raum befinden.
      (Die Person hatte in einem Stockwerk auf 20 Meter 4 APs verteilt, was viel zu viel war 😉 )

      Teste doch mal was passiert, wenn du z.B. mit einem PC und Smartphones wirklich viel Last erzeugst.
      Klone einfach ein paar mal eine VM und starte darauf Snapcast. Da kann man ja recht flott herausfinden, ob dein RPi4 eventuell einen Schuss hat.
      Lass vielleicht von allen Clients aus auch einen Dauerping laufen, um ein eventuelles Netzwerkproblem auch aufdecken zu können.

  9. Pingback:Raspberry Pi + Hifiberry – SnapCast Client einrichten - Hoerli.NET

  10. Guten morgen,

    erst einmal Danke für das gute Tutorial!
    Bin gestern durchs Zappn auf Youtube darauf gestossen.
    Leider habe ich ein Problem, und die Suche brachte bis her kein Erfolg.
    Das ganze läuft auf meinem Ubuntu-Server. Ich möchte es Hauptsächlich für Spotify nutzen. Die Einrichtung hat bis hier hin Problemlos funktioniert.

    Nur läuft nun (egal ob Spotify oder eine MP3) jedes Lied 4 Sekunden und startet dann neu, also im Loop. Zu hören ist aber nichts.
    Hab jetzt einige Stunden mit Google verbracht, den Fehler haben ein Paar User, aber leider hab ich noch keine Lösung gefunden.
    Wäre über Hilfe oder einen Tipp sehr Dankbar !!!

    • Ich kenne den Fehler wenn ich ein Onlineradio abspielen lass und die Internetverbindung dann unterbricht (es läuft z.B. Nachts durch und alle 24h verbindet sich ja der Router neu).
      Dann fängt er auch dauerhaft an etwas 4-8 Sekunden lang zu spielen und startet dann neu, ohne das man was hört.
      Starte ich den Radiosender einfach neu, geht wieder alles ohne Probleme.

      Falls es möglich ist, installiere viellecht mal Mopidy neu. Snapcast sollte nicht das Problem sein.

  11. Hier mal eine Rückmeldung…
    Hatte ein paar Probleme die ich mir leider bis jetzt nicht erklären kann, da sie einfach so verschwunden sind.
    Ich habe das ganze zum Testen mal auf meinem Laptop unter Linux-Mint installiert, leider hier auch das gleiche Problem. Mopidy spielt 4 Sekunden, egal welche Quelle.
    Dann hatte ich es leid und habe meinen Server komplett neu aufgesetzt. Somit kann ich hier auch die Fehlerquellen abhacken. Egal was ich mache Mopidy möchte einfach nicht.
    Da aber auch lokale MP3 nicht spielen, kann es auch nicht an einem Reconect liegen.
    Wie du schon festgestellt hast liegt es nicht an Snapcast. Aber Spocon machte Probleme. Erst lief es Problemlos, nach einem Server reboot ging es los und zwar genau dieser Fehler:
    https://github.com/spocon/spocon/issues/42
    Der aber aus unerklärlichen Gründen seit heute morgen wieder verschwunden ist und ich nichts geändert habe.
    Bin ja erstmal zufrieden, das es bis hier hin wieder läuft.
    Hab Mopidy nun ich weiß nicht wie oft installiert und wieder runter. Hab auch bis jetzt nur Spotify als Backend installiert um Fehler zu vermeiden.
    Solangsam gehen mir die Ideen aus.

    Ein kleiner Vorschlag zum Abschluss:
    Wer noch nicht mit Screen gearbeitet hat kennt es nicht. Ein kleiner Hinweis dazu wäre für unerfahrene Hilfreich! Zumindest
    Strg+A D für Detach und dann Screen -r Rygel zum erneuten verbinden.
    Nutze Screen sehr gerne zum kopieren großer Datenmengen, dann kann das laufen und ich muss mir keine Gedanken machen.

    Jetzt reicht es erst mal wieder. Tipps nehme ich trotzdem gerne an
    Werde den Fehler finden und dann muss ich nur noch das mit dem UPnP hinbekommen.
    Gruß
    Shadowevil

  12. Hallo,

    Ich habe mich komplett an die Anleitung gehalten was auch super lief. Leider hab ich 2 Probleme:

    Problem 1: jedes mal wenn ich das Webinterface iRIS aufrufe muss ich alle einstellungen neu eingeben. Sie werden nicht gespeichert.

    Problem 2: Ich bekomme keinen Ton an keinen der Clients raus. In der WEBUI spielt alles sauber vor sich her aber nirgends ein Ton.

    Kann mir einer helfen?

    Danke

    • Hi!
      Problem 1: Schau das Cookies erlaubt sind und nichts z.B. durch ein AdBlocker geblockt wird. Das Problem hatte ich auch mal auf einem System, wo leider zu viel geblockt wurde.
      Problem 2: Schau mal beim SnapCast Player. Dort kann man die Wiedergabequelle einstellen (In Windows rechtsklick auf das Icon in der Taskleiste und dann auf Player. Haken beim Wunschgerät setzen und auf Play klicken)

  13. Ich bekomme auch keinen Ton weder an dem am Raspi angeschlossenen TV, noch im Webclient (Alben kann ich dort starten), noch am Android (sehe den Raspi dort und Lautsärkeänderungen sehe ich im Logfile des snapservers).

    Nun habe ich ein Permission Problem mit /tmp (im mopidy logfile gesehen) noch behoben laut https://github.com/badaix/snapcast/issues/737#issuecomment-747103472 – aber es kommt noch immer kein Ton.

    Wie kann ich testen ob mopidy tatsächlich auf /tmp/snapfifo streamt? Mit VLC geht es mal nicht.

    • Hallo Roland,

      wenn kein Ton kommt, ist meist das Wiedergabegerät falsch eingestellt.
      Vergewissere dich, dass folgende Punkte korrekt eingestellt sind:
      – Die Mopidy-Config die passende Ausgabe im Abschnitt AUDIO besitzt
      – Die Verbindung zu Snapcast via Mopidy Webinterface (z.B. Iris) funktioniert
      – Das Wiedergabegerät den korrekten Server erreicht
      – Als Wiedergabegerät der passende Audioausgang gesetzt ist (Desktop-PCs können ja mehrere haben)

      Schau auch mal in die Logs, ob dort nennenswerte Fehler auftreten.
      Ansonsten kann ich hier auch nur irgendwelche Tipps abgeben, die nicht unbedingt zum Ziel führen 🙂

  14. Danke für die ausführlichen Tipps (und die tolle Anleitung sowieso).

    Habe im syslog gesehen dass mopidy ein Problem mit der ytmusicapi hatte, habe das Paket nochmal installiert :

    sudo python3 -m pip install Mopidy-YTMusic

    Und nun höre ich African Odyssey Reggae aus allen Devices und kann sie von jedem steuern, echt geil. Open Source Audiolösungen sind einfach super – Multiroom ist die Krönung!

  15. Hallo Hoerli,

    ich habe mit deiner sehr guten Anleitung vor über einem Jahr einen Raspberry-Streaming-Server mit alten Smartphones und Boxen als Multiroom-Clients eingerichtet und hatte und habe damit sehr viel Freude – danke dafür! 🙂

    Da ich viel über Spotify streame und vor einiger Zeit mein Mopidy dahingehend den Dienst verweigert hat musste ich nach kurzer Recherche erfahren, dass Spotify die librespotify – Schnittstelle abgedreht hat und damit auch das Streaming über Mopidy nach aktuellem Stand NICHT mehr möglich ist.

    https://community.spotify.com/t5/Spotify-for-Developers/Sunset-of-libspotify-Please-reconsider/td-p/5383105

    • Hi Chris,
      danke für den Hinweis.
      Ich werde es in der Anleitung vermerken.
      Ist natürlich immer schade, wenn Dienste den Hahn zudrehen.
      Es geht nichts über lokal gespeicherte Medien 😉

  16. Hi Hoerli, heute hats geregnet also hab ich mich mal rangesetzt und einen Rpi raausgeholt um dann auch alles über Homeassistant zu steuern.

    Top tutorial muss ich sagen, bin auch als linux-noob gut durchgekommen.
    Ich stecke allerdings beim starte von mopidy fest. Also der snapcast server läuft, nut zum mopidy server bekomme ich keine verbindung.
    Ich hab versucht mopidy sowohl mit dem “root” als auch mit dem “pi” user versucht zu starten und habe mit beide config datein angeschaut.

    Ich bekomm auch keine fehlermeldungen nach dem “systemctl start mopidy” befehl.
    Irgenteine idee was da schiefgeganen sein könnte?

    • Hi fmasur,
      freut mich das die Anleitung soweit gefallen hat.
      Was bei dir schief gelaufen ist, kann ich nur beurteilen, wenn du auch die Fehlermeldung dazu schreibst.
      Sonst kann ich nichts dazu sagen und nur mutmaßen.

  17. Ja, also “systemctl start mopidy” gibt keine rückmeldung.

    aber wenn ich nur “# mopidy” über den root user starte bekomme ich u.a. folgende meldung:

    ERROR 2022-10-04 12:10:50,980 [2300:MainThread] mopidy.commands
    Frontend (HttpFrontend) initialization error: HTTP server startup failed: [Errno 98] Address already in use
    ERROR 2022-10-04 12:10:50,989 [2300:MainThread] mopidy.commands
    Frontend (MpdFrontend) initialization error: MPD server startup failed: [Errno 98] Address already in use

    ich hab dann in der mopidy config den http block nochmal überprüft aber die ip ist die IP des RPi.
    ich hab auch den port einmal geändert, aber die meldung bleibt..
    oder kommen sich da mpd und mopidy irgentwie in die quere?

    anyway, jedes feedback oder gedanken die du dazuhast sind sehr willkommen 🙂

    • Das sieht mir doch nach einer vernünftigen Fehlermeldung aus 🙂

      Der Port welcher Mopidy nutzen soll, ist bereits belegt.
      In der Fehlermeldung ist leider nicht zu erkennen, welcher Port Mopidy nutzen soll, aber der ist definitiv durch ein anderen Prozess bereits belegt.
      Schau mal nach, ob der Mopidy-Dienst bereits läuft (sytemctl status mopidy), vielleicht rufst du die Webseite nur falsch auf.

      Um etwas besser testen zu können, kannst du den Dienst mit systemctl stop mopidy anhalten und Mopidy von Hand mit dem passenden Benutzer starten.
      Dann siehst du Fehlermeldungen schneller.

  18. root@raspberrypi:/home/pi# systemctl status mopidy
    ● mopidy.service – Mopidy music server
    Loaded: loaded (/lib/systemd/system/mopidy.service; enabled; vendor preset: enabled)
    Active: active (running) since Tue 2022-10-04 14:49:58 CEST; 1min 49s ago
    Process: 9386 ExecStartPre=/bin/mkdir -p /var/cache/mopidy (code=exited, status=0/SUCCESS)
    Process: 9387 ExecStartPre=/bin/chown mopidy:audio /var/cache/mopidy (code=exited, status=0/SUCCESS)
    Main PID: 9388 (mopidy)
    Tasks: 15 (limit: 779)
    CPU: 3.754s
    CGroup: /system.slice/mopidy.service
    └─9388 /usr/bin/python3 /usr/bin/mopidy –config /usr/share/mopidy/conf.d:/etc/mopidy/mopidy.conf

    Oct 04 14:50:01 raspberrypi mopidy[9388]: INFO [YouTubeBackend-6] mopidy_youtube using jAPI
    Oct 04 14:50:02 raspberrypi mopidy[9388]: INFO [MainThread] mopidy.internal.path Creating dir file:///etc/mopidy/podcast
    Oct 04 14:50:02 raspberrypi mopidy[9388]: WARNING [MainThread] mopidy_podcast.library Cannot access Mopidy-Podcast config directory: Permission denied
    Oct 04 14:50:02 raspberrypi mopidy[9388]: INFO [MainThread] mopidy.commands Starting Mopidy core
    Oct 04 14:50:02 raspberrypi mopidy[9388]: ERROR [PodcastBackend-7] mopidy_podcast.library Cannot retrieve Podcast root directory
    Oct 04 14:50:02 raspberrypi mopidy[9388]: INFO [MainThread] mopidy.commands Starting Mopidy frontends: HttpFrontend, YouTubeAutoplayer, YouTubeCoreListe>
    Oct 04 14:50:02 raspberrypi mopidy[9388]: INFO [HttpFrontend-10] mopidy.http.actor HTTP server running at [::ffff:127.0.0.1]:6680
    Oct 04 14:50:02 raspberrypi mopidy[9388]: INFO [IrisFrontend-14] mopidy_iris.core Starting Iris 3.64.1
    Oct 04 14:50:02 raspberrypi mopidy[9388]: INFO [MainThread] mopidy.commands Starting GLib mainloop
    Oct 04 14:50:02 raspberrypi mopidy[9388]: WARNING [MprisFrontend-13] mopidy_mpris.frontend MPRIS frontend setup failed (g-io-error-quark: Cannot autolaunch>

    Seh ich das richtig dass das http frontend auf 127.0.0.1 versucht zu laufen? also er nimmt die server ip aus der config nicht an.

    dazu hab ich noch die port ausgelesen:
    root@raspberrypi:/home/pi# netstat -tulpn | grep LISTEN
    tcp 0 0 0.0.0.0:49149 0.0.0.0:* LISTEN 746/upmpdcli
    tcp 0 0 0.0.0.0:1705 0.0.0.0:* LISTEN 734/snapserver
    tcp 0 0 0.0.0.0:1704 0.0.0.0:* LISTEN 734/snapserver
    tcp 0 0 127.0.0.1:6680 0.0.0.0:* LISTEN 9388/python3
    tcp 0 0 0.0.0.0:1780 0.0.0.0:* LISTEN 734/snapserver
    tcp 0 0 0.0.0.0:49152 0.0.0.0:* LISTEN 746/upmpdcli

    • Jap das ist richtig.
      Er nutzt heibei die Config aus dem Ordner /etc/mopidy/mopidy.conf
      Du hast da scheinbar ein Konfigurationsfehler drin und nicht wie im Tutorial beschreiben, die lokale IP-Adresse (192.168.XXX.XXX) für den HTTP-Zugriff eingetragen 🙂

  19. hm ich hab noch mal geschaut, dass die configs in beiden ordnern gleich sind und ich hab die in deiner beispiel config nur ein paar module ausgeschaltet und den host im [http] auf die IP des RPis gestellt. also 192.168.178.xx.

    ich hab auch noch eine andere nicht ganz so ausführliche anleitung gefunden wo der host auf 0.0.0.0:6680 gesetzt wird. das hab ich auch versucht, aber ohne ergebnis.

    kann das was mit diesem “chown” command zu tun haben? oder das die config irgentwie geblockt ist?

    • Dann habe ich leider gerade keine Ahnung was bei dir genau schief läuft.
      Mit den Rechten (chown) hat das eigentlich nichts zu tun.

      Du kannst auch die IP 0.0.0.0 angeben, das bedeutet einfach “alles”. Ist auch okay.

  20. Habs irgentwie hingekriegt. Irgentwie hatte das config file keine read permisson und deswegen hat er sich die config aus usr/share/mopidy/conf und das file hat nicht die ganzen [] blöcke entalten.

    Anyway, danke für die schnellen antworten

  21. Hallo zusammen, super anleitung! wesentlich ausführlicher als die anderen die ich so gesehen hab.

    mopidy hab ich gut hinbekommen und wenn ich den output = alasink schicke kann ich auch musik auf dem RPi über einen usb lautsprecher abspielen. plugins funktioneren auch.

    aber sobald ich den output zum snapserver schicken will, kann ich keine musik mehr abspielen. wenn ich auf einen song klicke passiert einfach nichts.

    ich hab mal die systemctl status meldung angeschaut und wenn ich das richtig lese gibts bei mopidy und snapclient keine probleme, nur beim snapserver steht sowas: “Error in socket shutdown: Transport endpoint is not connected”
    da hört aber mein linux wissen auf.

    wenn du irgenteine idee hast woran das liegen könnte wäre ich dankbar.

    LG M.

    • Hi Michi,
      das Problem kann tatsächlich mehrere Fehlerquellen haben.
      Wenn Snapcast selbst kein “Signal” bekommt, ist vermutlich deine Mopdy-Config fehlerhaft.
      Achte darauf, dass der Output bei Audio wie folgt eingestellt ist:
      output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/tmp/snapfifo

      Es ist auch darauf zu achten, das alle Abspielgeräte die aktuellste Version von Snapcast installiert haben, ansonten könnten dort auch Verbindungsprobleme auftreten.

  22. Hi,
    output: ja da hab ich drauf geachtet und die zeile 1:1 kopiert. ich hab auch ein paar andere ähnliche configuration aus anderen tutorials versucht aber auch ohne erfolg. die /tmp/fifo datei existiert auch.

    kann ich beim snapcast server irgendwie schauen das der stream reinkommt?
    ich finds auch komisch das mopidy einfach gar nicht macht. also man klickt einfach ins leere. ich hätte da eher erwartet das mopidy spielt aber dann kein sound rauskommt oder ne fehlermeldung a la “stream kann kein ziel finden” oder so.

    snapserver und client sind frisch installiert.

    p.s. ich hab bischer nur mit den systemctl status meldungen als logs gearbeitet. ich bekomm als linux noob die mopidy log datei nicht eingerichtet. wie stell ich das ein das ich eine datei mit den log events bekomme.

    cheers

    • Dann scheint bei dir wohl etwas bei Mopidy nicht korrekt zu funktionieren.
      Snapcast sollte hier vermutlich nicht das Problem sein.
      Im Zweifelsfall empfehle ich alles von vorne zu machen.
      Meist sind dann solche Probleme auf einmal gelöst.
      Über systemctl status mopidy bekommst du tatsächlich genügend Infos raus.
      Ansonsten Mopidy “von Hand” starten, indem du als der auserwählte Nutzer einfach “mopidy” in die Komandozeile eingibst.
      Dann erhälst du auch ein Live-Output vom System.
      (Davor halt systemctl stop mopidy eingeben, sonst hast du 2 Instanzen gestartet)

  23. ich habs hingekriegt. das war eine rechte sache.

    irgentwo tief in den mopidy docs hab ich einen andere status befehl gefunden: ” sudo service mopidy status” und der hat irgendwie andere sachen angezeigt ua ein problem das gestreamer nicht auf tmp/snapfifo zugreifen konnte.

    dann hab ich mich dran erinnert das irgentwo die rede von einem mopidy user war, ich hab bis dato alles per root user bzw sudo pi (der raspberrypi standard user) gemacht.
    hatte zwischenzeitlich auch mal versucht sachen mit dem mopidy user auszuführen, aber hatte kein pw dafür und da die installation bis dahin gut geklappt hatte hab ich nicht weiter drübernach gedacht.
    ist nur komisch das “service mopidy status” was anderes ausspuckt als “systemctl status mopidy” aber das ist wohl deep linux knowledge 😀

    jedenfalls dann musste ich nur noch mit chown die write permission fürs snapfifo verzeichnis geben und dann hats geklappt.

    der stream ist zwar noch nicht ganz sychron aber das sollte das leichtere problem sein 🙂

    anyway, danke nochmal fürs feedback

    • Aaaaaahh okay typischer Fehler.
      Installation mit 3 Nutzern durchgeführt 😉
      Das ist natürlich doof und ja, dann passen Rechte nicht mehr.
      Wenns nun läuft, viel spaß damit!

  24. hi. About the audio section in the mopidy config, this:
    output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/tmp/snapfifo

    i want to stream at best audio quality (i just have Qobuz subscription), and dont want to make any change in the audio, in that case, i have to delete “audioresample” and “audioconvert” or that is not related to this? i also have to change the rate, and format? or just delete all and leave just:

    output = filesink location=/tmp/snapfile

    • Hi!
      I hope you can understand the german instructions at all.
      Changing the quality can lead to the fact that not all Snapcast clients can play the stream.
      Especially with Smartphones or SmartTVs this can lead to problems.
      If your playback player supports higher quality, do not remove the data, but increase it to your used quality (e.g. 96000 or so).

  25. Hey, wäre toll wenn du die Anleitung mal wieder aktualisierst.
    Sie kommt nämlich als Top-Anleitung bei einer Suche, ist jedoch nicht mehr ganz aktuell. Wäre auch toll wenn du YTMusic darin ebenfalls als Beispiel mit einpflegst.

  26. Vielen dank für eine so ausführliche Anleitung!
    Seit der erstellung wurde allerdings leider dieser Download-Link zum Streamen von anderen Diensten auf mopidy offline genommen: https://www.lesbonscomptes.com/pages/jf-at-dockes.org.pub
    Gibt es eine Alternative?

    • Hi!
      So wie es aussieht, sind nur die öffentlichen Schlüssel aktuell nicht erreichbar.
      Die Repos sind noch online.
      Mal abwarten, vielleicht bauen die etwas um.

      Alternativen habe ich aktuell nicht gesucht.

  27. Herzlichen Dank für die tolle Anleitung und das Video. Ich habe einen Linux-PC, ein Smartphone und einen Raspberry synchronisieren können.

    Ich habe bei Mopidy und Snapcast auch mit den Rechten Probleme gehabt. Wenn snapserver die Datei /tmp/snapfifo zuerst anlegt und für Mopidy blockiert, kann über /etc/systemd/system/multi-user.target.wants/snapserver.service konfiguriert werden, dass snapserver unter mopidy:audio läuft. Mit “sudo ls /tmp/snapfifo” kann geprüft werden, welche Rechte der Snapserver verwendet.

  28. Leider scheint Spotify mit Mopidy nicht mehr zu funktionieren. Ich habe sehr viel Zeit darauf verbracht, und konnte es nur mit eine einzelne beta-Version des Spotify-clients fast funktionsfähig machen – https://github.com/mopidy/mopidy-spotify/issues/110

    Tidal ist eine Alternativ dazu, und ich konnte es in 10 Minuten installieren und testen, ohne Probleme. Ich habe nur das Problem, dass ich die Musikkünstler Radiostationen nicht in Iris finden kann, aber außerdem funktioniert es (mit local/files) sehr gut. https://github.com/tehkillerbee/mopidy-tidal

    Vielen Dank für die ausführliche Informationen was mir sehr hilfreich gewesen sind!

    • Danke für dein Feedback!
      Die Spotify-API wird in letzter Zeit immer öfter “kaputt” gemacht, weil Spotify Anwendungen wie Mopidy nicht mag.
      Da kann ich leider nicht viel dagegen tun. Ich selbst nutze auch kein Spotify.
      Für Tidal habe ich ebenfalls kein Account und konnte die Funktionalität bisher nie testen.

  29. Pingback:Raspberry Pi - Eigener FM-Radiosender - Hoerli.NET

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.