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-Droid – Google Play Store – GitHub
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
Die Fehlermeldung in Mopidy könnte so lauten:
ERROR [MainThread] mopidy.audio.gst GStreamer error: Could not open file "/tmp/snapfifo" for writing.
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
Update 21.06.2024
Hinweis zu Mopidy-Rechten mit Fehlermeldung noch erweitert.
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?
Hi!
Danke für dein Feedback!
Die Fehlermeldung kannst du mir gerne per Mail zukommrn lassen (info ÄT hoerli.net).
Kopiere dazu am besten alles informative in eine Textdatei und füg diese zum Mailanhang hinzu.
Du kannst aber auch gerne über mein neuen Matrix-Server in Kontakt treten 🙂
https://hoerli.net/hoerli-matrix-raeume-sind-jetzt-verfuegbar/
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.
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.
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é.
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
Sehr geil!
Freut mich das es geklappt hat 🙂
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
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
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.
Pingback:Raspberry Pi + Hifiberry – SnapCast Client einrichten - Hoerli.NET
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.
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
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)
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 🙂
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!
Freut mich, dass es doch noch geklappt hat! 🙂
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 😉
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.
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.
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 🙂
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.
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
Freut mich, dass es dann doch geklappt hat 🙂
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.
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)
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!
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).
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.
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.
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.
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.
Pingback:Raspberry Pi - Eigener FM-Radiosender - Hoerli.NET
Pingback:welle.io - DAB+ Radio verteilen mit Snapcast - Hoerli.NET
Danke auch von mir für die tolle Anleitung. Hatte ich für mein Multiroom Audio System als Grundlage genutzt.
Ich hätte vielleicht noch eine Frage.
Wenn ich über mopidy Musik abspiele und die Lautstärke oder Prev/Next nutzen möchte, dann ist die Verzögerung immer so lang wie der Fifo Buffer. Gibts da eine Lösung, damit man den Ton von Mopidy aus etwas smoother steuern kann? Prev und Next Track oder Stop sind ja vermutlich nicht verkürzbar aufgrund des Fifos.
Danke schonmal
Leider bekommst du die Verzögerung nicht weg.
Hab selbst schon versucht, die Latenz so gering wie möglich zu halten.
Ein wenig Versatz ist immer drin.