Der Raspberry Pi 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 Linux-Rechner einen DLNA-tauglichen Digital Media Server (DMS) machen.

Ausgangspunkt für die Anleitung ist ein Raspberry Pi mit installiertem Raspbian Jessie und einer Verbindung in das lokale Netzwerk. Ich habe meine Tests mit einem Pi Zero durchgeführt, der über einen USB-WLAN-Adapter mit meinem WLAN zuhause verbunden ist. 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). Das Cache-Verzeichnis habe ich ebendort eingerichtet (gemäß der zweiten Cache-Konfigurationsvariante von oben).

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

13 Gedanken zu „Der Raspberry Pi als DLNA-Server“

  1. Ich nehme mal an minidlna muss auch einen Cache der entdeckten Medien schreiben. liegt der in dem Fall auch extern oder lässt du minidlna bei jedem Start alles neu erkennen?

    1. Guter Einwand. Es funktioniert momentan, weil die Datenbank in /var/cache/minidlna/* beim Einrichten des Systems erstellt wurde, während das /-Dateisystem mit rw-Zugriff eingebunden war. /var/cache befindet sich jetzt aber auf dem Read-Only-Dateisystem.

      Ich muss mir das nochmals genauer ansehen. Eigentlich wäre es mir am liebsten, /var/cache ebenfalls in ein temporäres Dateisystem zu verlagern. Ich werde bei Gelegenheit testen, wie lange das Generieren der Datenbank dauert. (Momentan habe ich 27 GByte Audio-Dateien.) Ich werde den Artikel dann entsprechend aktualisieren.

      Update 21.1.2016: Der Blog-Beitrag ist jetzt aktualisiert und geht auch auf den korrekten Umgang mit dem Verzeichnis /var/cache/minidlna ein.

  2. Es gibt Möglichkeiten den Raspberry auch mit einem Taster hoch und runter zu fahren. Für den Raspberry Pi 2 hatte ich dazu auch mal ein Python Skript im großen weiten Internet gesehen, inklusive Schaltplan. Einfach mal googlen.

  3. Ich würde gerne wissen welche Software du auf den Smartphones/Tablets verwendest. Ich habe mir ein Sony SRS-X77 zugelegt, jedoch gibt es Probleme beim Abspielen per DLNA (Airplay funktioniert).

    1. Ich verwende AirPlay oder Bluetooth. Haupt-Musik-Player ist ein iPad. Insofern kann ich hier leider nicht weiterhelfen.

  4. Habe das genau so realisiert auf dem Pi2, funktioniert. Habe mich allerdings ziemlich an meiner Firewall festgebissen.
    Es wäre vielleicht zu erwähnen dass der Port 1900 noch freigegeben werden muss, falls eine Firewall installiert ist, sonst ist es reiner Zufall, dass der Client den DLNA-Server erkennt.
    Ich füge hier mal meine Anweisungen für Iptables ein:

    for inet in wlan0 eth0; do
      # MiniDLNA freigeben
      iptables -A INPUT -i $inet -s 192.168.178.0/24 -p tcp --dport 8200  -j ACCEPT
    
      # UDP freigeben fuer UPnP fuer MiniDLNA
      iptables -A INPUT -i $inet -s 192.168.178.0/24 -p udp -m udp --dport 1900  -j ACCEPT
    done
    ;;
    
  5. Hi.

    Vielen Dank für den Artikel.

    Ich habe allerdings meine Filmsammlung auf zwei Festplatten. Gibt es eine Möglichkeit, dass z.B. unter „Filme“ beide Verzeichnisse angezeigt werden ?

    Gruessle

    Oliver

  6. Ich bekomm es nicht hin das meine win10 clients den dlna server finden ….alle anderen Geräte wie zb mein Handy(win10 mobil) und meine xbox finden es aber meine zwei Windows 10 PCs finden ihn einfach nicht… Einmal hatte der eine client hin kurz funktionierte auch und dann war er wieder wech.. Hab keine firewall oder so ….bin echt am verzweifeln irgendwie.

  7. Hallo,

    danke für die Anleitung! Ich habe grade einen pi3 mit Plex aufgesetzt, um ihn als MediaServer zu verwenden. Leider scheint die DLNA Funktionalität von Plex unter Linux defekt zu sein, ich kann der pi Plexserver zwar sehen, wenn ich z.B. auf dem Android Tablet mit Kodi in die UPNP Liste gehe, dort findet man aber keine Dateien… seltsamerweise funktioniert die DLNA Funktionalität von plex unter Windows10 einwandfrei!

    Nun kam ich auf die Idee meine Mediendatene für DÖNA Clients ebene über einen separaten DLNA Serverprozess wie ReadyMedia/MiniDLNA bereit zu stellen … nur weiss ich nicht, ob sich das nicht mit dem DLNA welches über den laufenden Plex Prozess bereitgestellt wird, beisst…. Kann da jemand helfen?
    Danke!

Kommentare sind geschlossen.