DLNA-Server

Die Digital Living Network Alliance (DLNA) hat sich zum Ziel gesetzt, die Interoperabilität zwischen verschiedenen Multimediageräten zu fördern [1] und dazu verschiedene Standards und Zertifizierungen ausgearbeitet.

Geräte, welchen diesen Standards entsprechen, werden umgangssprachlich meist kurz als “dlna-fähig” bezeichnet. Befinden sich beispielsweise ein dlna-fähiger Fernseher und ein dlna-fähiger Medien-Server im gleichen (Heim-) Netzwerk, so “findet” der Fernseher die vom Medien-Server angebotenen Medien (Filme, Lieder, Fotos) automatisch. Erreicht wird dies dadurch, dass der Medien-Server periodisch Multicast-Pakete ins Netz schickt, welche vom Fernseher gelesen werden. Der Fernseher “weiß” damit, dass es einen oder mehrere Medien-Server im Netzwerk gibt und wie er diese ansprechen kann. Umgekehrt schickt auch der Fernseher Multicast-Pakete ins Netz und kündigt sich daduch als Medien-Client an, so dass er von verschiedenen Medien-Servern erkannt werden kann. Benutzt man den Windows Media Player unter Windows Vista, so bekommt man beispielsweise eine Mitteilung in der Task-Leiste darüber, dass ein Medien-Client im Netzwerk erkannt wurde, und man wird gefragt, ob man seine Filme, Lieder und Fotos freigeben möchte.

ssdp Multicast-Paket eines Medien-Clients
ssdp Multicast-Paket eines Medien-Clients
ssdp Multicast-Paket eines Medien-Servers
ssdp Multicast-Paket eines Medien-Servers

Um den Caipirinha-Server dnla-fähig zu machen, habe ich verschiedene Programme ausprobiert und bin schließlich auf das Paket minidlna gestoßen, welches sich sehr leicht einrichten läßt. Das Paket enthält eigentlich nur eine Konfigurationsdatei und eine ausführbare Datei, welche lediglich 2MB groß ist. Die Konfigurationsdatei ist übersichtlich gehalten und hat nur wenige Einstellungen:

/etc/minidlna.conf:

# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8202

# network interface to bind to (this is the only interface that will serve files)
#network_interface=eth0

# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
#   can prepend the type, followed by a comma, to the directory:
#   + "A" for audio  (eg. media_dir=A,/home/jmaggard/Music)
#   + "V" for video  (eg. media_dir=V,/home/jmaggard/Videos)
#   + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
media_dir=A,/home/public/Audio
media_dir=P,/home/public/Bilder
media_dir=V,/home/public/Video

# set this if you want to customize the name that shows up on your clients
#friendly_name=My DLNA Server

# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache
db_dir=/var/cache/minidlna

# this should be a list of file names to check for when searching for album art
# note: names should be delimited with a forward slash ("/")
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg

# set this to no to disable inotify monitoring to automatically discover new files
# note: the default is yes
inotify=yes

# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
enable_tivo=no

# set this to strictly adhere to DLNA standards.
# * This will allow server-side downscaling of very large JPEG images,
#   which may hurt JPEG serving performance on (at least) Sony DLNA products.
strict_dlna=no

# default presentation url is http address on port 80
#presentation_url=http://www.mylan/index.php

# notify interval in seconds. default is 895 seconds.
notify_interval=600

# serial and model number the daemon will report to clients
# in its XML description
serial=12345678
model_number=1

Unter port legt man fest, auf welchem Port der Medien-Server auf Anfragen lauschen soll. Mit dem Eintrag media_dir legt man die Verzeichnisse fest, die von minidlna angeboten werden sollen. Der Eintrag db_dir verweist auf ein Verzeichnis, in welchem minidlna eine kleine Datenbank verwaltet. Dieses Verzeichnis legt man an mit:

mkdir /var/cache/minidlna
chown wwwrun:www /var/cache/minidlna

wenn man, wie hier, minidlna später unter der Benutzerkennung wwwrun laufen lassen will. Mit notify_interval legt man die Zeitintervalle in Sekunden fest, in denen der DLNA-Server seine Multicast-Pakete ins Netzwerk verschickt.

Schließlich verschiebt man die ausführbare Datei minidlna aus dem Installationspaket nach /usr/sbin und startet den DLNA-Server in einer root-Shell mit su -l wwwrun -c '/usr/sbin/minidlna'. Der DNLA-Server läuft dann unter der Benutzerkennung wwwrun. In der Log-Datei /var/cache/minidlna/minidlna.log werden eventuell auftretende Fehler protokolliert; es empfiehlt sich daher eine regelmäßige Kontrolle.

Dieses Setup habe ich unter openSuSE 11.1/11.2 in der 64-Bit-Version und unter openSuSE 11.0 in der 32-Bit-Version erfolgreich getestet. Beim Austesten mit einem Fernseher des Typs Sony Bravia 46W5800 hat sich gezeigt, dass man hochauflösende Filme in XviD oder DivX mit Hilfe von ffmpeg und diesen Optionen für den Sony Bravia 46W5800 transkodieren kann:

ffmpeg -i film.avi -target film-dvd -s 1920x1080 film.mpg

Posted on: 2010-08-10Gabriel Rüeck