Serie: Musik-Streamer - Mopidy

  Ralf Hersel   Lesezeit: 10 Minuten  🗪 5 Kommentare

Eine Dokumentation zur gescheiterten Installation und Inbetriebnahme eines Mopidy-Servers, um Musikstreams direkt von der Quelle an die Lautsprecher zu übertragen.

serie: musik-streamer - mopidy

Warnung: Dieser Artikel ist keine Anleitung, sondern ein dokumentiertes Scheitern.

Im Gegensatz zu meiner Behauptung aus der letzten Folge der Serie über Musik-Streamer, ist Mopidy kein Plug-in-Replacement für den Musik Player Daemon, sondern ein eigenständiger Musik-Server. Das Projekt beschreibt Mopidy so:

Mopidy ist ein erweiterbarer, in Python geschriebener Musikserver. Mopidy spielt Musik von der lokalen Festplatte, Spotify, SoundCloud, TuneIn und mehr ab. Ihr könnt die Wiedergabeliste von jedem Telefon, Tablet oder Computer mit einer Vielzahl von MPD- und Web-Clients bearbeiten.

Damit bietet sich die Anwendung als Ersatz für MPD, jedoch nicht als Plug-in-Replacement an. Die Vanilla-Installation spielt nur Musik von Dateien und Radiostreams. Mit Erweiterungen kann Mopidy Musik von fast allen Cloud-Diensten abspielen. Durch die Unterstützung von Erweiterungen kann Mopidy einfach Backends für neue Musikquellen hinzufügen.

Mopidy ist eine Python-Anwendung, die in einem Terminal oder im Hintergrund auf Linux-Computern oder Macs läuft, die über eine Netzwerkverbindung und einen Audioausgang verfügen. Von Haus aus ist Mopidy ein HTTP-Server. Wenn man die Mopidy-MPD-Erweiterung installieren, wird es auch zu einem MPD-Server. Viele zusätzliche Frontends zur Steuerung von Mopidy sind als Erweiterungen verfügbar.

Der Mopidy Webclient Iris

Alle im eigenen Haushalt können ihren bevorzugten MPD- oder Web-Client mit dem Mopidy-Server verbinden, um gemeinsam nach Musik zu suchen und die Wiedergabeliste zu verwalten. Mit einem Browser oder MPD-Client, der für alle gängigen Betriebssysteme verfügbar ist, kann man die Musik von jedem Telefon, Tablet oder Computer aus steuern.

Installation

Die Installation von Mopidy auf einem Raspberry Pi ist einfach und in der Dokumentation gut beschrieben. Wie immer, empfiehlt sich zuerst ein Update & Upgrade, um das Debian-basierte System auf den neuesten Stand zu bringen:

sudo apt update
sudo apt upgrade

Dann wird Mopidy auf dem üblichen Weg installiert:

sudo apt install mopidy

Danach könnt ihr Mopidy als Service einrichten, damit es nach einem Systemstart automatisch läuft:

sudo systemctl enable mopidy

Ob der Service tatsächlich läuft, überprüft ihr mit diesem Kommando:

sudo systemctl status mopidy

Die Befehle zum Starten, Stoppen und Neustarten lauten:

sudo systemctl start mopidy
sudo systemctl stop mopidy
sudo systemctl restart mopidy

Konfiguration

Ohne Erweiterungen kann Mopidy fast nichts. Laut Dokumentation kann es von Haus aus auf lokale Audio-Dateien und Playlisten zugreifen. Dafür ist jedoch eine korrekte Konfiguration erforderlich. Die vollständige Konfiguration kann mit diesem Befehl angesehen werden: sudo mopidyctl config. Wer diese Konfiguration ändern möchte (und das müsst ihr), editiert die Datei /etc/mopidy/mopidy.conf

sudo nano /etc/mopidy/mopidy.conf

[http]
hostname = ::

[file]
media_dirs = /mnt/nas/Musik

[m3u]
playlists_dir = /mnt/nas/Playlists

Dabei handelt es sich nicht um die vollständige Konfiguration, sondern nur um eure Ergänzungen, bzw. Ersetzungen. In meinem Beispiel habe ich den Hostname auf "alles im lokalen Netzwerk" gestellt und die Verzeichnisse mit den Musik-Dateien und den Playlisten (und Internetradio-Adressen) angegeben. Mit den oben gezeigten Einträgen sollte Mopidy von jedem Gerät in eurem LAN im Webbrowser aufgerufen werden können, und zwar unter dieser Adresse: http://[IP_des_Servers]:6680. Bei mir sieht das so aus:

Wie ihr seht, kann Mopidy nichts, ausser seine Existenz im lokalen Netzwerk zu bestätigen. Das liegt an der unvollständigen Konfiguration und an fehlenden Erweiterungen.

Diesen Artikel habe ich über mehrere Tage hinweg geschrieben. Tag 1: Mopidy läuft, aber sonst nichts.

Erweiterungen

Zuerst habe ich versucht, den Iris-Webclient zu installieren: sudo python3 -m pip install mopidy-iris
Das ist gescheitert, weil Python das seit einiger Zeit nicht mehr erlaubt. Man wird dazu aufgefordert, ein natives Paket zu installieren oder das Python-Modul in einer virtuellen Umgebung (venv) einzurichten. Alternativ kann man auch PipX verwenden, womit sowohl das venv, als auch das Paket installiert wird.

Bei mir hat nichts davon funktioniert. Pip install führt zu dieser Meldung:

sudo python3 -m pip install mopidy-iris
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

Der Versuch mit PipX scheitert daran, dass zwei abhängige Pakete ins venv installiert werden sollen. Das ist mir zu riskant, zumal diese Pakete bereits installiert sind.

pipx install mopidy-iris
Note: Dependent package 'mopidy' contains 1 apps
  - mopidy
Note: Dependent package 'charset-normalizer' contains 1 apps
  - normalizer
No apps associated with package mopidy-iris.

Als Nächstes habe ich es mit dem Desktop-Client Argos versucht. Dieser ist als Flatpak verfügbar. Das hat funktioniert:

Sowohl die Musiksammlung als auch die Playlists werden erkannt. Der erste Erfolg endet jedoch beim Abspielen. Mopidy stürzt mit dieser Fehlermeldung beim Abspielen eines Titels ab:

× mopidy.service - Mopidy music server
     Loaded: loaded (/lib/systemd/system/mopidy.service; disabled; preset: enabled)
     Active: failed (Result: exit-code) since Thu 2024-03-07 20:05:51 CET; 30s ago
   Duration: 1h 4min 440ms
    Process: 19470 ExecStartPre=/bin/mkdir -p /var/cache/mopidy (code=exited, status=0/SUCCESS)
    Process: 19471 ExecStartPre=/bin/chown mopidy:audio /var/cache/mopidy (code=exited, status=0/SUCCESS)
    Process: 19472 ExecStart=/usr/bin/mopidy --config /usr/share/mopidy/conf.d:/etc/mopidy/mopidy.conf (code=exited, status=255/EXCEPTION)
   Main PID: 19472 (code=exited, status=255/EXCEPTION)
        CPU: 6.854s

Mär 07 19:01:53 raspi4 mopidy[19472]: INFO     [MainThread] mopidy.commands Starting GLib mainloop
Mär 07 19:59:54 raspi4 mopidy[19472]: WARNING  [FileBackend-3 (_actor_loop)] mopidy.file.library Failed looking up file:///mnt/nas/Musik/Paco%20De%20Luc%C3%83%C2%ADa/The%20Best%20Of%20Paco%20De%20Lucia/01_Almor>
Mär 07 19:59:55 raspi4 mopidy[19472]: WARNING  [FileBackend-3 (_actor_loop)] mopidy.file.library Failed looking up file:///mnt/nas/Musik/Audiophile/AUDIOphile%20Pearls%20Vol.%203/12%20-%20Walk%C3%83%C2%BCrenrit>
Mär 07 19:59:55 raspi4 mopidy[19472]: WARNING  [FileBackend-3 (_actor_loop)] mopidy.file.library Failed looking up file:///mnt/nas/Musik/Audiophile/AUDIOphile%20Pearls%20Vol.%203/14%20-%20Konzert%20f%C3%83%C2%B>
Mär 07 19:59:55 raspi4 mopidy[19472]: WARNING  [FileBackend-3 (_actor_loop)] mopidy.file.library Failed looking up file:///mnt/nas/Musik/Audiophile/AUDIOphile%20Pearls%20Vol.%203/15%20-%20Konzert%20f%C3%83%C2%B>
Mär 07 19:59:55 raspi4 mopidy[19472]: WARNING  [FileBackend-3 (_actor_loop)] mopidy.file.library Failed looking up file:///mnt/nas/Musik/Audiophile/AUDIOphile%20Pearls%20Vol.%203/13%20-%20Reiterm%C3%83%C2%A4rsc>
Mär 07 20:05:51 raspi4 mopidy[19472]: * failed to open vchiq instance
Mär 07 20:05:51 raspi4 systemd[1]: mopidy.service: Main process exited, code=exited, status=255/EXCEPTION
Mär 07 20:05:51 raspi4 systemd[1]: mopidy.service: Failed with result 'exit-code'.
Mär 07 20:05:51 raspi4 systemd[1]: mopidy.service: Consumed 6.854s CPU time.

Diesen Artikel habe ich über mehrere Tage hinweg geschrieben. Tag 2: Ein Client sieht die Musik; Abspielen geht nicht.

Heute habe ich bemerkt, dass sich Mopidy mit MPD beisst. Nach meinen Versuchen mit Mopidy musste ich Dinge tun (ich weiss nicht einmal genau, was), um MPD wieder zur Musikwiedergabe zu bewegen. Den Mopidy-Service stoppen, den MPD-Service restarten, die Lautsprecher aus-/anschalten; keine Ahnung. Irgendwann lief MPD dann wieder.

Als ich damals MPD installiert und konfiguriert habe, war das auch keine Out-of-the-box-Erfahrung. Da war einiges an Gefrickel nötig, bis alles lief. Wer bei GNU/Linux.ch nach MPD sucht, findet Artikel dazu.

Fazit

In diesem Artikel hätte ich euch gerne gezeigt, wie man mit Mopidy einen Service auf dem Raspberry Pi einrichtet, der von fast allen Streaming-Diensten wiedergeben kann, ohne eine Bluetooth-Verbindung zu verwenden. Also direkt von der Quelle an die Lautsprecher. Leider ist mir das nicht gelungen. Ich hatte in der Community um Hilfe gefragt, doch niemand wollte sich damit beschäftigen. Deshalb endet der Versuch an dieser Stelle.

Vielleicht finden sich nachträglich noch Kenner, die diesen Bericht zu einem guten Ende bringen können. Wie so oft, bin ich mir sicher, dass es nur an ein paar Kleinigkeiten in der Konfiguration liegt, bis Mopidy abspielt. Wahrscheinlich wird es einen zweiten Teil zu Mopidy geben.

Quelle: https://mopidy.com/

Tags

Musik, Musik-Streamer, MPD, Mopidy, Raspberry Pi

Robert
Geschrieben von Robert am 11. März 2024 um 17:04

Ich kenne die Software nicht ... Unterstützt das Linuxsystem welches du verwendet hast Pipewire oder Pulseaudio oder beides? Hast du es nur unter einer bestimmten Distribution gestestet, welche? Und ein Flatpak-Client hat vielleicht nicht immer alle notwendigen Berechtigungen?

Typo
Geschrieben von Typo am 11. März 2024 um 20:20

Kann ich leider bestätigen. Seit dem Umstieg auf Debian 12 als Unterbau bin ich auch an der Installation gescheitert und habe keine funktionierende Anleitung gefunden. Vorher (Debian 11) lief es wunderbar.

Wolfgang
Geschrieben von Wolfgang am 20. März 2024 um 21:40

Die Python-Fehlermeldung tritt bei nahezu allen aktuellen Distributionen aus, die Python nebst Modulen aus ihrem Paketmanagement installieren. In diesem Fall ist der Weg über pip abgeschnitten. Wenn es bestimmte Pakete nicht aus dem Paketmanagement gibt: Pech gehabt. Der Python-Profi verwendet virtuelle Environments, das sind gesonderte Verzeichnisse, in die einzelne Pakete passend zu einzelnen Applikationen installiert werden. Jetzt gibt es drei Möglichkeiten: Aufgeben (hast Du bereits gemacht), ein paralleles Python installieren oder aber in /etc/pip.conf den folgenden Eintrag einfügen: [global] break-system-packages = true dann ist pip wieder parallel möglich, man kann sich aber bestimmte Bibliotheken des Linux-Anbieters zerschiessen, weil pip und die Paketverwalter sich nicht synchronisieren. Schön wäre es, wenn die Paketmaintainer für einzelne Python-Applikationen eigene venvs einführen würden, in die ich dann mit pip nachinstallieren kann. Dann würde ich maximal das Environment von mopidy ruinieren, andere Dinge blieben intakt. Für die mopidy-Pakete ist das Risiko allerdings sehr gering, wenn man mag, kann man den Eintrag nach deren Installation auch wieder rausnehmen, um nicht versehentlich später in kritisches Paket zu installieren. Das einzige Risiko, das ich bei diesem Vorgehen sehe, ist folgendes: Bei einem Update von mopidy durch den Paketmaintainer könnten die per pip installierten Module gelöscht/zerstört werden, was sich jedoch durch eine pip-Reparaturinstallation dieser Module wieder beheben lässt.

Wolfgang
Geschrieben von Wolfgang am 20. März 2024 um 21:43

Leider unterstützt die Kommentarfunktion keine manuellen Zeilenumbrüche. Daher hier der Eintrag für /etc/pip.conf muss lauten: [global] break-system-packages = true ist hierbei ein Zeilenumbruch

Wolfgang
Geschrieben von Wolfgang am 20. März 2024 um 21:48

Sch*** nun filtert das auch noch mein Ersatzzeichen. Also nochmal:ZEILENUMBRUCH[global]ZEILENUMBRUCH break-system-packages = trueZEILENUMBRUCH