Pi Zero als DLNA-Server

DLNA steht für Digital Living Network Alliance (Wikipedia). Die in dieser Gruppe vereinten Hersteller von Unterhaltungselektronik haben sich auf diverse Standards geeinigt. So können DLNA-konforme Geräte beispielsweise unkompliziert im lokalen Netzwerk verfügbare Mediendateien (Bilder, Musik, Videos) anzeigen oder abspielen. Dieser Beitrag zeigt, wie Sie mit minimalem Aufwand aus einem Raspberry Pi einen DLNA-tauglichen Digital Media Server (DMS) machen.

Ausgangspunkt für die Anleitung ist ein Pi Zero mit installiertem Raspbian Jessie und einer WLAN-Verbindung in das lokale Netzwerk. Die Medien-Dateien — in meinem Fall ausschließlich Audio-Dateien — befinden sich direkt auf der SD-Karte.

ReadyMedia/MiniDLNA

Der vermutlich am einfachsten zu konfigurierende DLNA-Server für Linux heißt ReadyMedia (ehemals MiniDLNA). Unter Raspbian installieren Sie das Programm einfach mit

apt-get install minidlna

Die Konfiguration erfolgt durch die Datei /etc/minidlna.conf. Mit der Ausnahme weniger Einstellungen können Sie alle Voreinstellungen belassen. Das folgende Listing fasst nur die Zeilen zusammen, die Sie üblicherweise hinzufügen bzw. ändern müssen:

# Datei /etc/minidlna.conf
...
# Audio-, Video- und Picture-Verzeichnisse angeben
media_dir=A,/mymedia/musik
media_dir=A,/mymedia/hoerbuecher
media_dir=V,/mymedia/filme
media_dir=P,/mymedia/fotos1
media_dir=P,/mymedia/fotos2

# Name, der auf DLNA-Geräten angezeigt wird
friendly_name=MyMediaServer

# Änderungen in der Medienbibliothek selbstständig erkennen
# mit no muss nach dem Hinzufügen neuer Mediendateien
#   service minidlna restart
# ausgeführt werden
inotify=yes

Damit die Änderungen wirksam werden, starten Sie den DLNA-Server neu:

service minidlna restart

Cache-Verzeichnis

Falls der DLNA-Server auf einem Read-Only-System laufen soll (dann natürlich mit inotify=no), ist noch ein Problem zu lösen: ReadyMedia alias MiniDLNA legt standardmäßig im Verzeichnis /var/cache/minidlna eine Datenbank für alle Mediendateien sowie für die Cover-Bilder von MP3-Tracks an. Dazu muss das Programm in diesem Programm natürlich Schreibrechte haben.

Es gibt dafür zwei Lösungsansätze:

  • Sie sehen ein Temporäres Dateisystem für /var/cache/minidlna vor.
  • Sie platzieren das Cache-Verzeichnis im Dateisystem für die Mediendateien und lassen den DLNA-Server nach jedem Update der Mediendateien zumindest einige Minute im rw-Modus laufen, damit die Datenbank aktualisert wird.

Im Folgenden stelle ich beide Varianten etwas näher vor.

Cache im temporären Dateisystem

service minidlna stop
mount -o remount,rw /
rm -rf /var/cache/minidlna/*

Jetzt fügen Sie in /etc/fstab die folgende Zeile hinzu:

# Datei /etc/fstab
...
tmpfs   /var/cache/minidlna     tmpfs   nodev,nosuid    0       0

Zuletzt starten Sie Ihren Minirechner mit reboot neu. Nach dem Neustart dauert es nun je nach Größe der Mediathek etliche Minuten, bis minidlna über eine komplette Datenbank aller Titel verfügt. Der Platzbedarf für das temporäre Dateisystem im RAM ist überschaubar. Bei meinen rund 30 GByte Musikdateien beansprucht das Cache-Dateisystem ca. 25 MByte.

Cache-Verzeichnis im Medien-Dateisystem

Im Folgenden gehe ich davon aus, das im Verzeichnis /mymedia ein Dateisystem für die Mediendateien eingebunden ist. In diesem Dateisystem soll nun auch das Cache-Verzeichnis eingerichtet werden. (Alle weiteren Kommandos sind mit sudo auszuführen.)

service minidlna stop
mount -o remount,rw /
mount -o remount,rw /mymedia
rm -rf /var/cache/minidlna
mkdir /mymedia/cache
chown minidlna.minidlna /mymedia/cache
ln -s /mymedia/cache /var/cache/minidlna
service minidlna start

Jetzt beobachten Sie mit top den Prozess minidlna. Er wird für einige Minuten mit hoher CPU-Belastung das gesamte Medienarchiv durchforsten und die Datenbank einrichten. (Bei mir dauert das für 30 GByte Musikdateien rund vier Minuten — also etwas mehr als eine Minute pro 10 GByte Mediendateien.) Wenn minidlna von den vorderen Rängen der top-Liste verschwindet, ist die Medien-Datenbank aktuell. Jetzt können Sie das System neu im Read-Only-Modus starten.

Wenn Sie in Zukunft Mediendateien hinzufügen, führen Sie neuerlich mount -o remount,rw /mymedia aus und geben minidlna dann einige Minuten Zeit, um seine Datenbank zu aktualisieren. Anschließend können Sie das System wieder in den Read-Only-Modus rebooten.

Der Vorteil dieser Vorgehensweise besteht darin, dass minidlna nach einem Neustart sofort Zugriff auf die fertige Mediendatenbank hat.

Praxis

Bei mir zuhause läuft MiniDLNA auf einem Pi Zero mit einer 128-GByte-SD-Karte und in Read-Only-Konfiguration. Die Medien-Dateien befinden sich in einem eigenen Dateisystem (auch Read-Only, außer wenn ich per SSH neue Mediendateien hinzufüge).

Den Pi-Zero habe ich an die Rückseite des Netzwerk-Lautsprecher Sony SRS-X77 geklebt. Der Minicomputer bezieht seine Stromversorgung von der USB-Buchse des Geräts, die eigentlich zum Laden von Smartphones gedacht ist. Sehr praktisch :-)

Der Pi Zero ist auf die Rückwand eines Sony-Netzwerklautsprechers geklebt
Der Pi Zero ist auf die Rückwand eines Sony-Netzwerklautsprechers geklebt

Jedes Smartphone/Tablet im Haushalt, auf das/dem eine DLNA-Player-App installiert ist, kann nun Musik aus der DLNA-Bibliothek auswählen und wahlweise direkt auf dem Smartphone/Tablet oder aber via Bluetooth/AirPlay/Google Cast auf dem Funklautsprecher abspielen.

Jetzt stört nur noch die hohe Stand-by-Leistungsaufnahme des Geräts (ca. 5 Watt). Da es — wie bei modernen Geräten leider üblich — keinen richtigen Ein/Aus-Schalter gibt, werde ich das Netzkabel des Geräts mit einem Schalter versehen. Damit wird dann aber auch die Stromversorgung des Raspberry Pi im laufenden Betrieb gekappt. Dank der Read-Only-Konfiguration sind dabei glücklicherweise keine Datenverluste zu erwarten.

Quellen