Die Einrichtung eines Homenetzwerks erfordert auf der Linux-Serverseite einen DLNA-kompatiblen Serverdienst.

Ein grundsätzlich kritischer Artikel zum Thema DLNA findet sich hier.

Twonkyserver

Bei Twonkyserver handelt es sich um einen kommerziellen DLNA- und UPnP-Server (Kosten: € 14.95) für Windows, Linux und Mac OS X, der für eine Testphase von 30 Tagen frei ist. Twonkyserver bietet die Möglichkeit Audio- und Videodateien während der Laufzeit zu Transkodieren. So ist es z.B. möglich, Audiodateien im AAC (m4a)-Format von Apples iTunes auch auf Endgeräten wie den Sony Bravia-Fernsehern abzuspielen, die nur das mp3-Format beherrschen. Bisher ist es mir allerdings noch nicht gelungen, Videos auf dem Twonkyserver abspielen zu können.

Installation

Twonkyserverhier herunterladen.

Folgende Aktionen werden als root ausgeführt.

./twonkymedia-i386-glibc-2.2.5-6.0.23.sh

Mit dieser Zeile wird das Installationsskript von Twonkyserver gestartet. Die benötigten Dateien werden in die entsprechenden Verzeichnisse kopiert und zum Abschluß erhält man noch eine Anzeige des Installationsprotokolls.

Die Programmdateien von Twonkyserver finden sich anschließend im Verzeichnis /usr/local/twonkyserver.

Installationsprotokoll:

Installiere TwonkyMedia Server in Ordner /usr/local/twonkymedia
./
./twonkymedia
./cgi-bin/
./cgi-bin/ffmpeg-mov-flv.desc
./cgi-bin/convert-readme.txt
./cgi-bin/ffmpeg-flv-mpg.desc
./cgi-bin/convert
./cgi-bin/ffmpeg-mpg-wmv.desc
./cgi-bin/flac-wav.desc
./cgi-bin/ffmpeg-mp4-flv.desc
./cgi-bin/ffmpeg-avi-flv.desc
./cgi-bin/jpeg-scale.desc
./cgi-bin/ffmpeg-msdvr-mpeg.desc
./cgi-bin/convert-jpeg.desc
./cgi-bin/ffmpeg-msvideo-flv.desc
./cgi-bin/ffmpeg.location
./cgi-bin/any-mp3.desc
./cgi-bin/flac.location
./cgi-bin/mp4convert.desc
./cgi-bin/ffmpeg-mpg-flv.desc
./cgi-bin/convert.location
./cgi-bin/ffmpeg-wmv-flv.desc
./cgi-bin/ffmpeg-divx-mpeg.desc
./cgi-bin/cgi-jpegscale
./cgi-bin/ffmpeg-asf-flv.desc
./cgi-bin/ffmpeg-ts-mp4.desc
./initial_keystore.dat
./twonkymediaserver
./RevisionHistory
./twonkymedia.sh
./plugins/
./plugins/mediafusion-integration.plugin
./plugins/itunes-import.plugin
./plugins/mediafusion-integration-plugin
./plugins/itunes-import
./twonkymedia-server-default.ini
./radio.m3u
./resources/
./resources/webbrowse-pc.gif
./resources/devicedescription-dlna-1-0.xml
./resources/devicedescription-win7.xml
./resources/devicedescription-xbox.xml
./resources/webbrowse-psp-next.gif
./resources/webbrowse-settings.gif
./resources/arrow-left.gif
./resources/twonkyicon-48x48.png
./resources/strings-it.txt
./resources/strings-chs.txt
./resources/left.gif
./resources/cds.xml
./resources/webbrowse-e61-prev.gif
./resources/index.html
./resources/config-content.html
./resources/rss.gif
./resources/webbrowse-n95.css
./resources/nocover_container.jpg
./resources/cds-noupdate.xml
./resources/webbrowse-psp-prev.gif
./resources/webbrowse-back.gif
./resources/strings-fi.txt
./resources/not-ok.jpg
./resources/webbrowse-mobile.gif
./resources/protocolinfo.xml
./resources/webbrowse-psp-home.gif
./resources/strings-cht.txt
./resources/right.gif
./resources/strings-nl.txt
./resources/webbrowse-psp-logo.jpg
./resources/twonkyicon-120x120.png
./resources/norss.gif
./resources/views/
./resources/views/classified.view.xml
./resources/views/playlists.view.xml
./resources/views/simple.view.xml
./resources/views/folder.view.xml
./resources/views/ipodlike.view.xml
./resources/views/view-definitions.xml
./resources/views/mobile.view.xml
./resources/views/advanced.view.xml
./resources/devicedescription-dlna-1-5.xml
./resources/config-menu.html
./resources/webbrowse-n95-upload.gif
./resources/devicedescription-custom-settings.txt
./resources/devicedescription-yamaha.xml
./resources/webbrowse-e61-next.gif
./resources/favicon.ico
./resources/twonkyicon-48x48.jpg
./resources/strings-en.txt
./resources/strings-fr.txt
./resources/webbrowse.css
./resources/webbrowse-psp-settings.gif
./resources/arrow-right.gif
./resources/TwonkyMediaConfig_grouping.js
./resources/TwonkyMediaConfig.js
./resources/arrow_test_small.gif
./resources/nocover_photo.jpg
./resources/transcoding.db
./resources/twonkyicon-80x80.jpg
./resources/webbrowse-n95-prev.gif
./resources/tri-blau.gif
./resources/webbrowse-n95-home.gif
./resources/strings-de.txt
./resources/devicedescription-wd-live.xml
./resources/home.gif
./resources/config.html
./resources/strings-jp.txt
./resources/agg_not_ok.gif
./resources/webbrowse-logo.gif
./resources/views.db
./resources/strings-ko.txt
./resources/cds-hdrl.xml
./resources/agg_ok.gif
./resources/webbrowse-psp.css
./resources/config-head.html
./resources/webbrowse-e61-logo.gif
./resources/ok.jpg
./resources/msreg.xml
./resources/wait.gif
./resources/devicedescription-redsonic.xml
./resources/strings-ru.txt
./resources/webbrowse-e61.css
./resources/webbrowse-n95-next.gif
./resources/TwonkyMediaConfig.css
./resources/webbrowse-n95-settings.gif
./resources/webbrowse-play.gif
./resources/webbrowse-prev.gif
./resources/platform-specific-menu-grouping.js
./resources/wmdrm-trouble.htm
./resources/nocover_audio.jpg
./resources/webbrowse-psp-play.gif
./resources/empty.gif
./resources/remote/
./resources/remote/BrowserDetect.js
./resources/remote/playerProductInstall.swf
./resources/remote/AC_OETags.js
./resources/remote/remoteaccess.html
./resources/remote/themes/
./resources/remote/themes/default/
./resources/remote/themes/default/defaultStyles.swf
./resources/remote/remoteaccess.swf
./resources/remote/remoteaccess.js
./resources/webbrowse-n95-back.gif
./resources/webbrowse-e61-upload.gif
./resources/webbrowse-upload.gif
./resources/devicedescription-tmm.xml
./resources/twonkyicon-120x120.jpg
./resources/TwonkyMediaServer_logo.jpg
./resources/strings-es.txt
./resources/webbrowse-e61-play.gif
./resources/webbrowse-n95-play.gif
./resources/webbrowse-psp-back.gif
./resources/webbrowse-next.gif
./resources/cms.xml
./resources/webbrowse-home.gif
./resources/webbrowse-e61-home.gif
./resources/config.gif
./resources/nocover_video.jpg
./resources/webbrowse-psp-upload.gif
./resources/webbrowse-e61-back.gif
./resources/webbrowse-e61-settings.gif
./resources/clients.db
./resources/TM_16x16.png
./Linux-HowTo.txt
„/usr/local/twonkymedia/twonkymedia.sh“ -> „/etc/init.d/twonkyserver“
Starte Server ...
Starting /usr/local/twonkymedia/twonkymedia ... Daemonizing...
Daemonizing...
..done
Installation beendet

Jetzt kann man mit der Zeile 127.0.0.1/config die Konfiguration des Twonkyserver vornehmen. So kann man die Sprache auf Deutsch umstellen und einen eigenen Servernamen definieren. Die Defaulteinstellung für die einzulesenden Mediadaten ist das Rootverzeichnis. Daher sollte man unbedingt die Verzeichnisse für die unterschiedlichen Mediadaten ändern. Danach startet man den Server neu. All das funktioniert über die Web-Konfiguration.

Wichtig! In der Firewall muß der TCP-Port 9000 für Twonkyserver freigegeben werden.

Möchte man den Twonkyserver nach der Installation komplett deaktivieren, so muß man in der Runlevel-Konfiguration den Dienst deaktivieren.

Transkodieren von Audio-Daten ermöglichen

Um das Trankodieren von Audio-Daten zu ermöglichen müssen einige Einstellungen erfolgen. Zunächst ist sicherzustellen, daß das Programm ffmpeg auf der Rechner installiert ist.

Die folgenden Hinweise fanden sich hier. Jetzt legt man folgende die Datei /usr/bin/any2mp3 mit dem folgenden Inhalt an:

#!/bin/bash
#any2mp3 $infile $outfile -br 128000 -sps 44100
/usr/bin/ffmpeg -i "$1" -f mp3 -ab "$4" -acodec libmp3lame -ar "$6" "$2"
exit 0

Die Datei mit chmod +x /usr/bin/any2mp3 ausführbar machen.

Weiterhin die Datei /usr/local/twonkymedia/cgi-bin/any2mp3.location anlegen mit dem Inhalt:

/usr/bin

Nun muß man den Server neu starten, um im Konfigurationsabschnitt Transkodieren die Option MP3 unter Musik transcodieren in: anchecken zu können. Jetzt sollten alle Audiodaten über den Server zur Verfügung stehen.

Trankodieren von Videodaten ermöglichen

Hinweise habe ich hier gefunden.

In der Datei /usr/local/twonkymedia/cgi-bin/ffmpeg.location ist die Zeile c:/ffmpeg durch /usr/bin zu ersetzen. Nach einem Serverneustart sind nun auch die Optionen im Konfigurationsabschnitt Transkodieren unter Videos transcodieren zu: erreichbar. Dort sollte vermutlich im Hinblick auf Sony Bravia-Fernseher MPEG2 angecheckt sein.

In der Datei /usr/local/twonkymedia/resources/clients.db muss nun der Eintrag für den Sony Bravia noch um ergänzt werden, da de Default kein Abspielen von MPEG-Dateien auf dem Bravia zulässt. Hierzu in der Datei nach dem Eintrag für Sony Bravia suchen und an der markierten Stelle das MPEG ergänzen.

NA:Sony Bravia
HH:BRAVIA
XM:DLNA15
TR:JPEG160x160,JPEG1920x1080,MPEG
DB:FIX

Der TR-Eintrag bedeutet: support for this transcoded formats

Nach einem Neustart des Twonkyserver ist die Unterstützung für das MPEG-Format für den Sony Bravia aktiviert.

Nun muss man noch für alle VIdeoformate, die transcodiert werden sollen im Verzeichnis /usr/local/twonkymedia/cgi-bin entsprechende DESC-Dateien anlegen.

Mit der Datei /usr/local/twonkymedia/cgi-bin/ffmpeg-avi-mpeg.desc wird so z.B. das Transcodieren von AVI-Videos ermöglicht:

# transcode AVI to mpeg
#(c) 2008 by PacketVideo
exec: ffmpeg -i $infile -vcodec mpeg2video -b 1000K $outfile
# capabilities
from=video/x-msvideo
to=video/mpeg
asynchronous
priority=idle

Analog dazu die Datei /usr/local/twonkymedia/cgi-bin/ffmpeg-flv-mpeg.desc, mit welcher das Transkodieren von FLV zu MPEG ermöglicht wird:

# transcode Flash video to MPEG-2 video
#(c) 2008 by PacketVideo
exec: ffmpeg -i $infile -vcodec mpeg2video $outfile
# capabilities
from=video/flv
to=video/mpeg
asynchronous
priority=idle

miniDLNA

miniDLNA scheint die einfachste Methode zu sein, auf Linux einen DLNA-Server einzurichten.

Der Download erfolgt von http://sourceforge.net/projects/minidlna/.

Die Datei wird mit tar -xzf minidlna_1.0.18_static.tar.gz entpackt.

cp -a usr/sbin/minidlna /usr/sbin
cp -a etc/minidlna.conf /etc

Eine Init-Skript findet sich hier:

#!/bin/sh

# chkconfig: 345 99 10
# description: Startup/shutdown script for MiniDLNA daemon
#
# $Id: minidlna.init.d.script,v 1.2 2009/07/02 00:33:15 jmaggard Exp $
# MiniUPnP project
# author: Thomas Bernard
# website: miniupnp.free.fr or miniupnp.tuxfamily.org

MINIDLNA=/usr/sbin/minidlna
ARGS='-f /etc/minidlna.conf'

test -f $MINIDLNA || exit 0

. /lib/lsb/init-functions

case "$1" in
start)  log_daemon_msg "Starting minidlna" "minidlna"
        start-stop-daemon --start --quiet --pidfile /var/run/minidlna.pid --startas $MINIDLNA -- $ARGS $LSBNAMES
        log_end_msg $?
        ;;
stop)   log_daemon_msg "Stopping minidlna" "minidlna"
        start-stop-daemon --stop --quiet --pidfile /var/run/minidlna.pid
        log_end_msg $?
        ;;
restart|reload|force-reload)
        log_daemon_msg "Restarting minidlna" "minidlna"
        start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/minidlna.pid
        start-stop-daemon --start --quiet --pidfile /var/run/minidlna.pid --startas $MINIDLNA -- $ARGS $LSBNAMES
        log_end_msg $?
        ;;
*)      log_action_msg "Usage: /etc/init.d/minidlna {start|stop|restart|reload|force-reload}"
        exit 2
        ;;
esac
exit 0

Mit obigem Skript hatte ich hier Probleme. Eine Variante des init.d-Skriptes ist in der ursprünglichen RPM-Fassung enthalten gewesen:

#!/bin/sh

### BEGIN INIT INFO
# Provides:          minidlna
# Required-Start:    $network
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: MiniDLNA Server
# Description:       Start the MiniDLNA server
### END INIT INFO

NAME=MiniDLNA
LOGFILE=/var/log/minidlna.log
CONFIGFILE=/etc/minidlna.conf
PIDFILE=/var/run/minidlna.pid
MINIDLNA_BIN=/usr/sbin/minidlna

test -x "$MINIDLNA_BIN" || { echo "$MINIDLNA_BIN not installed";
        if [ "$1" = "stop" ]; then exit 0;
        else exit 5; fi; }

test -f /etc/sysconfig/minidlna && . /etc/sysconfig/minidlna

# Get lsb functions
. /etc/rc.status

rc_reset

check_shares() {
  if [ -r "$CONFIGFILE" ]; then
    grep -q ^"media_dir" "$CONFIGFILE" && return 0
  fi
  return 1
}

case "$1" in
  start)
    echo -n "Starting $NAME "

    if ! $(check_shares); then
      echo "No shares avalaible ..."
      exit 1
    else
      /sbin/startproc "$MINIDLNA_BIN"
      rc_status -v
    fi
  ;;
  stop)
    echo -n "Shutting down $NAME"
    /sbin/killproc -TERM "$MINIDLNA_BIN"
    rc_status -v
  ;;
  reload|force-reload)
    echo -n "Reload service $NAME"
    /sbin/killproc -HUP "$MINIDLNA_BIN"
    rc_status -v
  ;;
  restart)
    "$0" stop
    "$0" start
  ;;
  rescan)
    "$0" stop
    echo
    echo -n "Reloading $NAME with a forced rescan"
    if ! $(check_shares); then
      echo "No shares avalaible ..."
      exit 1
    else
      /sbin/startproc "$MINIDLNA_BIN" -R
      rc_status -v
    fi
  ;;
  status)
    echo -n "Checking for service $NAME "
    /sbin/checkproc "$MINIDLNA_BIN"
    rc_status -v
  ;;
  *)
    N=/etc/init.d/"$NAME"
    echo "Usage: $N {start|stop|restart|reload|force-reload|rescan|status}"
    exit 1
  ;;
esac

exit 0

Dieses Skript als minidlna speichern und nach /etc/init.d verschieben. Jetzt muss in openSUSE noch ein Link auf diese Datei im Verzeichnis /user/sbin erstellt werden:

ln -s /etc/init.d/minidlna /user/sbin/rcminidlna

Danach kann der Dienst über den runlevel-Editor von openSUSE installiert werden. Man kann ihn natürlich auch manuell über rcminidlna start starten.

Jetzt in der Datei /etc/minidlna.conf die gewünschten Verzeichnisse für die Mediadaten angeben, z.B.:

media_dir=A,/netzwerk/ZSmedia/mp3
media_dir=P,/netzwerk/ZSbilder
media_dir=V,/netzwerk/ZSvideo

Abschließend muß noch der Port 8200 in der Firewall freigegeben werden.

Danach sollten diese Verzeichnisse z.B. von einem DLNA-fähigen Endgerät wie einem Fernseher (z.B. Sony KDL-40EX705) erkannt werden können.

Der UPNP/DLNA-Server von mythtv wird von o.g. Fernseher nicht korrekt erkannt, Fehlermeldung in etwa: "... schlägt fehl".

http://en.wikipedia.org/wiki/UPnP_AV_MediaServers

http://www.rbgrn.net/content/21-how-to-choose-dlna-media-server-windows-mac-os-x-or-linux

http://blog.al4.co.nz/2009/06/28/dlna-and-my-new-tv/