Now-Playing-Display on Debian on MacBook

Ausgangslage
Im Rahmen eines Heimautomatisierungs-Projekts wurde ein bestehender Debian-Rechner zu einem zentralen Medien- und Automatisierungs-Hub ausgebaut. Ein Teil davon: ein AirPlay-Empfänger, über den sich Musik von jedem Apple-Gerät im Netzwerk direkt an die Stereoanlage im Wohnzimmer streamen lässt. Technisch übernimmt dabei shairport-sync den eigentlichen AirPlay-Empfang und gibt das Audiosignal über die Soundkarte des Rechners aus.
Ein reiner Audio-Stream verrät aber nichts darüber, was gerade läuft. Ziel war deshalb ein Display, das in Echtzeit zeigt, welcher Titel gerade abgespielt wird – inklusive Cover, Interpret und Hintergrundinformationen zur Band – und das sich direkt am Gerät per Bildschirm bedienen lässt.
Technische Umsetzung
Metadaten aus dem AirPlay-Stream
shairport-sync kann Metadaten (Titel, Interpret, Album, Cover-Art, Wiedergabestatus) über eine benannte Pipe im Dateisystem ausgeben. Ein eigens dafür geschriebener Python-Dienst öffnet diese Pipe dauerhaft, parst den binären Metadaten-Strom und hält daraus den aktuellen Wiedergabezustand in einer JSON-Datei fest. Da eine benannte Pipe nur so lange Daten liefert, wie ein Leseprozess sie offen hält, öffnet der Dienst sie in einer Schleife automatisch neu, falls die Verbindung unterbrochen wird.
Empfangene Cover-Art wird als Bilddatei auf die Festplatte geschrieben und über einen Versions-Zähler referenziert, damit das Frontend neue Cover zuverlässig nachladen kann, ohne unnötig oft Netzwerkanfragen zu stellen.
Anreicherung mit Hintergrundinformationen
Sobald sich der Interpret ändert, lädt der Dienst im Hintergrund zusätzliche Informationen nach:
- Biografie und Bildmaterial über die TheAudioDB-API.
- Diskografie über die MusicBrainz-API, gefiltert auf
primary-type = Albumohne Nebentypen wie Live-Alben, Compilations oder Soundtracks – damit ausschließlich echte Studioalben angezeigt werden.
Da MusicBrainz strikte Rate-Limits durchsetzt, laufen alle Anfragen serialisiert über eine gemeinsame Sperre mit automatischem Backoff bei temporären Serverfehlern. Bereits abgefragte Interpreten werden zwischengespeichert, damit bei wiederholter Wiedergabe keine unnötigen externen Anfragen entstehen.
Fernsteuerung der Wiedergabe
shairport-sync stellt eine MPRIS-Schnittstelle über D-Bus bereit. Ein kleiner HTTP-Server nimmt Steuerbefehle (Play, Pause, Titel vor/zurück) vom Frontend entgegen und leitet sie über busctl an diese Schnittstelle weiter. Dadurch lässt sich die Wiedergabe direkt am Display steuern, ohne das ursprüngliche Wiedergabegerät in die Hand nehmen zu müssen.
Darstellung
Das Frontend ist eine schlanke HTML/JavaScript-Oberfläche, die die Wiedergabe- und Interpreten-Daten per Polling abruft und ohne Neuladen der Seite aktualisiert. Sie läuft im Kiosk-Modus von Firefox und wird beim Systemstart automatisch angezeigt – der Bildschirm zeigt damit permanent den aktuellen Wiedergabestatus, ohne dass eine Interaktion nötig ist.
Ergebnis
Das fertige Display zeigt Cover, Titel und Interpret der aktuellen Wiedergabe, Wiedergabesteuerung sowie einen Informationsbereich mit Kurzbiografie, Bildmaterial und vollständiger Studio-Diskografie des Interpreten – mit farblicher Hervorhebung des aktuell gespielten Albums.

Eingesetzte Technologien
- shairport-sync (AirPlay-Empfang, MPRIS-Steuerung)
- Python (Metadaten-Verarbeitung, HTTP-Backend)
- TheAudioDB- und MusicBrainz-API (Interpreten- und Diskografie-Daten)
- HTML, CSS, JavaScript (Frontend)
- Firefox im Kiosk-Modus (Anzeige)
- systemd (Dienstverwaltung, automatischer Neustart)