Mediaserver für PS3: media tomb unter OpenSUSE 11.0

media tomb aufsetzen

Nachdem ich schon seit einiger Zeit eine PS3 besitze machte ich mich auf die Suche nach einem dazu passendem Media Server, der unter OpenSUSE 11.0 läuft. Zunächst fiel mir dazu TwonkyVision ein – der kostet allerdings knapp 30€. Beim Googlen sichtete ich media tomb, der Streaming Server ist kostenlos und über das packman-Repository stehen auch fertige Pakete für OpenSUSE 11.0 bereit.

Es wird natürlich eine Datebank für den Mediaserver benötigt. Ich bevorzuge hier MySQL aus Performancegründen. Falls noch nicht geschehen muß also zunächst die MySQL-Datenbank installiert werden und der Autostart per rc-Skripte eingerichtet werden. Das gleiche gilt für media tomb. Hier muß noch das zusätzliche Paket zur MySQL-Unterstützung bei der Installation mit ausgewählt werden.

Zunächst also den MySQL-Dienst starten:

/etc/init.d/mysql start

Danach muß man eine Datenbank samt zugehörigen User im MySQL anlegen.

mysql -p -u root
mysql> CREATE DATABASE mediatomb;
mysql> GRANT ALL ON mediatomb.* TO 'mediatomb'@'localhost';

Danach muß die Konfigurationsdatei /etc/mediatomb.conf für das Startskript bearbeitet werden.

## This is a sambel configuration file for the MediaTomb daemon script
## used on Fedora Core

## By default the configuration will be created in /etc/mediatomb

## Network interface on which the server will run, you need to edit this!
MT_INTERFACE="eth0"

## User defined command line options that may be passed to the server
MT_OPTIONS=""

## MediaTomb will be started on port 50500
MT_PORT="50500"

## MediaTomb will run as mediatomb
MT_USER="mediatomb"
MT_GROUP="mediatomb"

## Location of the PID file
MT_PIDFILE="/var/run/mediatomb.pid"

## Location of the log file
MT_LOGFILE="/var/log/mediatomb"

## Location of the config file/database
MT_HOME="/etc"
MT_CFGDIR="mediatomb"

Der Name für das Standard-Netzwerkinterface muß eingetragen werden, der Rest kann auf Default bleiben.

Im Anschluß muß die Konfigurationsdatei /etc/mediatomb/config.xml für media tomb angepaßt werden.

Datenbanktyp auf MyQSL einstellen:

   <storage>
      <sqlite3 enabled="no">
        <database-file>mediatomb.db</database-file>
      </sqlite3>
      <mysql enabled="yes">
        <host>localhost</host>
        <username>mediatomb</username>
        <database>mediatomb</database>
      </mysql>
    </storage>

PS3-Unterstützung aktivieren:

    <protocolInfo extend="yes"/><!-- For PS3 support change to "yes" -->

Unterstützung für Umlaute in Dateinamen aktivieren (Unicode-Zeichensatz UTF-8):

 <import hidden-files="no">
    <scripting script-charset="UTF-8">
      <common-script>/usr/share/mediatomb/js/common.js</common-script>
      <playlist-script>/usr/share/mediatomb/js/playlists.js</playlist-script>
      <virtual-layout type="builtin">
        <import-script>/usr/share/mediatomb/js/import.js</import-script>
      </virtual-layout>
    </scripting>
    <filesystem-charset>UTF-8</filesystem-charset>
    <metadata-charset>UTF-8</metadata-charset>
    <playlist-charset>UTF-8</playlist-charset>

AVI-Playback für PS3 ermöglichen:

        <!-- Uncomment the line below for PS3 divx support -->
        <map from="avi" to="video/x-divx"/>

Das Startskript /etc/init.d/mediatomb enthält 2 Fehler. Diese müssen korrigiert werden, damit der Dienst korrekt starten kann.

...
case "$1" in
        start)
                # Start daemon.
                echo -n "Applying multicast settings to $MT_INTERFACE... "
                # those settings are necessary for us to react to M-SEARCH requests
                route add -net 239.0.0.0 netmask 255.0.0.0 $MT_INTERFACE >/dev/null 2>&1
                ifconfig $MT_INTERFACE allmulti
                touch $MT_PIDFILE
                chown $MT_USER $MT_PIDFILE

                mkdir -p "/$MT_HOME/$MT_CFGDIR"
                chown $MT_USER "/$MT_HOME/$MT_CFGDIR"
...

Danach kann der media tomb – Dienst gestartet werden:

/etc/init.d/mediatomb start

Jetzt ist es wichtig das Startprotokoll /var/log/mediatomb auf Fehlermeldungen oder Warnungen zu prüfen:

2008-10-18 20:11:13    INFO: Loading configuration from: /etc/mediatomb/config.xml
2008-10-18 20:11:13    INFO: Checking configuration...
2008-10-18 20:11:13    INFO: Setting filesystem import charset to UTF-8
2008-10-18 20:11:13    INFO: Setting metadata import charset to UTF-8
2008-10-18 20:11:13    INFO: Setting playlist charset to UTF-8
2008-10-18 20:11:13    INFO: Configuration check succeeded.
2008-10-18 20:11:13    INFO: database doesn't seem to exist. automatically creating database...
2008-10-18 20:11:13    INFO: database created successfully.
2008-10-18 20:11:13    INFO: Initialized port: 50500
2008-10-18 20:11:13    INFO: Server bound to: 192.168.178.2
2008-10-18 20:11:14    INFO: MediaTomb Web UI can be reached by following this link:
2008-10-18 20:11:14    INFO: http://192.168.178.2:50500/

Jetzt kann die Bedienoberfläche von media tomb im Browser unter der zuvor im Log genannten URL geöffnet werden. Hier im Beispiel ist das http://192.168.178.2:50500 (die IP-Adresse variiert natürlich, der Port 50500 ist Standard bei OpenSUSE).

Zunächst muß ein Ordner mit Mediendateien angegeben werden, der darauf indiziert wird. Mann kann dabei einstellen ob das regelmäßig oder event-basierend wiederholt werden soll.

Danach läuft die Indizierung und man kann bald darauf in der Datenbank stöbern.

Nun kann man mit der Playstation 3 als Streaming Client Musik und Videos vom heimischen PC geniessen!

media tomb tunen

Leider unterstützt die PS3 nicht alle gebräuchlichen Audio/Video-Formate. Man kann allerdings den PC nutzen der PS3 unbekannte Formate vor dem Streamen umzuwandeln. Genutzt wird dazu z.B. das Tool ffmeg. Danach können ts-Dateien vom SAT-Receiver, Matroska-Videos und viele weitere Formate auf der PS3 abgespielt werden. Der einzige Nachteil bei transkodierten Streams ist, daß Standardfunktionen wie Pause, sowie Vor- und Rücklauf nicht funktionieren. Es gibt hier nur Start und Stop…

Zunächst 2 Skripte anlegen:

Datei /usr/bin/mediatomb-transcode-audio:

#!/bin/bash
FFMPEG_PATH="/usr/bin/ffmpeg"
INPUT="$1"
OUTPUT="$2"
VIDEO_CODEC="mpeg2video"
VIDEO_BITRATE="4096k"
VIDEO_FRAMERATE="25"
AUDIO_CODEC="mp2"
AUDIO_BITRATE="192k"
AUDIO_SAMPLERATE="44100"
AUDIO_CHANNELS="2"
FORMAT="dvd"
exec "${FFMPEG_PATH}" -i "${INPUT}" -vcodec ${VIDEO_CODEC} -b ${VIDEO_BITRATE} \
-r ${VIDEO_FRAMERATE} -acodec ${AUDIO_CODEC} -ab ${AUDIO_BITRATE} -ar ${AUDIO_SAMPLERATE} \
-ac ${AUDIO_CHANNELS} -f ${FORMAT} - > "${OUTPUT}" 2>/dev/null

Datei /usr/bin/mediatomb-transcode-video:

#!/bin/bash
FFMPEG_PATH="/usr/bin/ffmpeg"
INPUT="$1"
OUTPUT="$2"
VIDEO_CODEC="mpeg2video"
VIDEO_BITRATE="4096k"
VIDEO_FRAMERATE="25"
AUDIO_CODEC="mp2"
AUDIO_BITRATE="192k"
AUDIO_SAMPLERATE="44100"
AUDIO_CHANNELS="2"
FORMAT="dvd"
exec "${FFMPEG_PATH}" -i "${INPUT}" -vcodec ${VIDEO_CODEC} -b ${VIDEO_BITRATE} \
-r ${VIDEO_FRAMERATE} -acodec ${AUDIO_CODEC} -ab ${AUDIO_BITRATE} -ar ${AUDIO_SAMPLERATE} \
-ac ${AUDIO_CHANNELS} -f ${FORMAT} - > "${OUTPUT}" 2>/dev/null

Danach könnte eine Beispielkonfiguration so aussehen:

Datei /etc/mediatomb/config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config version="1" xmlns="http://mediatomb.cc/config/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mediatomb.cc/config/1 http://mediatomb.cc/config/1.xsd">
<server>
<ui enabled="yes">
<accounts enabled="no" session-timeout="30">
<account user="mediatomb" password="mediatomb"/>
</accounts>
</ui>
<name>MediaTomb</name>
<udn>uuid:52462652-2310-4790-bf19-fd00fefcec24</udn>
<home>/etc/mediatomb</home>
<webroot>/usr/share/mediatomb/web</webroot>
<storage>
<sqlite3 enabled="no">
<database-file>mediatomb.db</database-file>
</sqlite3>
<mysql enabled="yes">
<host>localhost</host>
<username>mediatomb</username>
<database>mediatomb</database>
</mysql>
</storage>
<protocolInfo extend="yes"/><!-- For PS3 support change to "yes" -->
<!--
Uncomment the lines below to get rid of jerky avi playback on the
DSM320 or to enable subtitles support on the DSM units
-->
<!--
<custom-http-headers>
<add header="X-User-Agent: redsonic"/>
</custom-http-headers>
<manufacturerURL>redsonic.com</manufacturerURL>
<modelNumber>105</modelNumber>
-->
<!-- Uncomment the line below if you have a Telegent TG100 -->
<!--
<upnp-string-limit>101</upnp-string-limit>
-->
</server>
<import hidden-files="no">
<scripting script-charset="UTF-8">
<common-script>/usr/share/mediatomb/js/common.js</common-script>
<playlist-script>/usr/share/mediatomb/js/playlists.js</playlist-script>
<virtual-layout type="builtin">
<import-script>/usr/share/mediatomb/js/import.js</import-script>
</virtual-layout>
</scripting>
<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>UTF-8</metadata-charset>
<playlist-charset>UTF-8</playlist-charset>
<mappings>
<extension-mimetype ignore-unknown="no">
<map from="mp3" to="audio/mpeg"/>
<map from="ogg" to="application/ogg"/>
<map from="asf" to="video/x-ms-asf"/>
<map from="asx" to="video/x-ms-asf"/>
<map from="wma" to="audio/x-ms-wma"/>
<map from="wax" to="audio/x-ms-wax"/>
<map from="wmv" to="video/x-ms-wmv"/>
<map from="wvx" to="video/x-ms-wvx"/>
<map from="wm" to="video/x-ms-wm"/>
<map from="wmx" to="video/x-ms-wmx"/>
<map from="m3u" to="audio/x-mpegurl"/>
<map from="pls" to="audio/x-scpls"/>
<map from="flv" to="video/x-flv"/>
<!-- Uncomment the line below for PS3 divx support -->
<map from="avi" to="video/divx"/>
<map from="divx" to="video/divx"/>
<map from="vob" to="video/divx"/>
<map from="mkv" to="video/x-matroska"/>
<map from="mov" to="video/divx"/>
<map from="qt" to="video/divx"/>
<map from="ts" to="video/divx"/>
<map from="mpeg" to="video/divx"/>
<map from="mpg" to="video/divx"/>
<!-- Uncomment the line below for D-Link DSM / ZyXEL DMA-1000 -->
<!-- <map from="avi" to="video/avi"/> -->
</extension-mimetype>
<mimetype-upnpclass>
<map from="audio/*" to="object.item.audioItem.musicTrack"/>
<map from="video/*" to="object.item.videoItem"/>
<map from="image/*" to="object.item.imageItem"/>
</mimetype-upnpclass>
<mimetype-contenttype>
<treat mimetype="audio/mpeg" as="mp3"/>
<treat mimetype="application/ogg" as="ogg"/>
<treat mimetype="audio/x-flac" as="flac"/>
<treat mimetype="image/jpeg" as="jpg"/>
<treat mimetype="audio/x-mpegurl" as="playlist"/>
<treat mimetype="audio/x-scpls" as="playlist"/>
<treat mimetype="audio/x-wav" as="pcm"/>
<treat mimetype="audio/L16" as="pcm"/>
<treat mimetype="video/x-msvideo" as="avi"/>
<treat mimetype="video/divx" as="avi"/>
<treat mimetype="video/vob" as="avi"/>
</mimetype-contenttype>
</mappings>
</import>
<transcoding enabled="yes">
<mimetype-profile-mappings>
<transcode mimetype="application/ogg" using="audio-common"/>
<transcode mimetype="application/ogg" using="video-common"/>
<transcode mimetype="audio/x-flac" using="audio-common"/>
<transcode mimetype="video/x-flv" using="video-common"/>
<transcode mimetype="video/divx" using="video-common"/>
<transcode mimetype="video/vob" using="video-common"/>
<transcode mimetype="video/x-matroska" using="video-common"/>
</mimetype-profile-mappings>
<profiles>
<profile name="audio-common" enabled="yes" type="external">
<mimetype>audio/L16</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<hide-original-resource>yes</hide-original-resource>
<accept-ogg-theora>no</accept-ogg-theora>
<agent command="mediatomb-transcode-audio" arguments="%in %out"/>
<buffer size="1048576" chunk-size="131072" fill-size="262144"/>
</profile>
<profile name="video-common" enabled="yes" type="external">
<mimetype>video/mpeg</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<hide-original-resource>yes</hide-original-resource>
<accept-ogg-theora>yes</accept-ogg-theora>
<agent command="mediatomb-transcode-video" arguments="%in %out"/>
<buffer size="10485760" chunk-size="262144" fill-size="524288"/>
</profile>
<profile name="oggflac2raw" enabled="no" type="external">
<mimetype>audio/L16</mimetype>
<accept-url>no</accept-url>
<first-resource>yes</first-resource>
<accept-ogg-theora>no</accept-ogg-theora>
<agent command="ogg123" arguments="-d raw -f %out %in"/>
<buffer size="1048576" chunk-size="131072" fill-size="262144"/>
</profile>
<profile name="vlcmpeg" enabled="no" type="external">
<mimetype>video/mpeg</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<accept-ogg-theora>yes</accept-ogg-theora>
<agent command="vlc" arguments="-I dummy %in --sout #transcode{venc=ffmpeg,vcodec=mp2v,vb=4096,fps=25,aenc=ffmpeg,acodec=mpga,
ab=192,samplerate=44100,channels=2}:standard{access=file,mux=ts,dst=%out} vlc:quit"/>
<buffer size="1048576" chunk-size="131072" fill-size="262144"/>
</profile>
</profiles>
</transcoding>
</config>

Nach dem Anpassen der Konfiguration muß media tomb neu gestartet werden. Ebenso müssen die zugewiesenen Verzeichnisse in der datenbank gelöscht und neu eingelesen werden.

Anregungen zur Konfiguration gibt es hier:

http://mediatomb.cc/pages/documentation_overview

http://mediatomb.cc/dokuwiki/faq:faq

http://blog.raczylo.com/archives/467/playstation-3-i-filmy-z-komputera

http://volatileint.blogspot.com/2008/08/using-playstation3-as-media-center-with_30.html

http://www.webmasterpro.de/server/article/services-mediatomb-plattformunabhaengiger-medienserver.html#goto-sony-playstation-3-support

This entry was posted in Linux and tagged , , , , , , , . Bookmark the permalink.

10 Responses to Mediaserver für PS3: media tomb unter OpenSUSE 11.0

  1. ast says:

    Ich habe das ganze noch unter opensuse10.3 probiert und festgestellt, dass das Startscript unter /etc/init.d/mediatomb ggf. angepasst werden muss. Das PID-File sollte mit dem User “mediatomb” angelegt werden ebenso das ConfDir. Per default ist der User nobody eingetragen, was dazu führt, dass der deamon nicht startet weil er keine Berechtigung auf o.g. Files hat.
    Änderung im Startscript:

    chown nobody $MT_PIDFILE” > chown $MT_USER $MT_PIDFILE

    chown nobody “/$MT_HOME/$MT_CFGDIR” > chown $MT_USER “/$MT_HOME/$MT_CFGDIR”

    Jetzt sollte sich das ganze auch starten und via yast per Runleveledit eintragen lassen.

    Gruß,
    ast.

  2. ast says:

    Nachtrag: “>” bedeutet in diesem Fall natürlich ändern in :-)

  3. otmanix says:

    Da kann ich nur zustimmen, es ist unter OpenSUSE 11.0 nicht anders. Das war mir beim Schreiben des Artikels aber schon wieder entfallen…

    Ansonsten noch eine kleine Anmerkung:
    Die Zuordnung der mime-types, etc. ist wirklich “quick & dirty” im obigen Beispiel. Es funktioniert zwar, aber schön und durchdacht sieht anders aus ;)

    Vor allem sollte sich das prinzipiell auch so konfigurieren lassen, daß nicht alle mime-types transcodiert werden, sondern nur die, die die PS3 nicht verarbeiten kann. Dazu hatte ich aber bisher weder Zeit noch Lust.

    Falls jemand eine durchdachtere Konfiguration finden sollte bitte Bescheid geben :)

  4. Stoffel says:

    Problem bei mediatomb bei /var/log/mediatomb
    Hab ich ein Problem:
    2008-11-30 18:50:16 INFO: Loading configuration from: /etc/mediatomb/config.xml
    2008-11-30 18:50:16 INFO: UUID generated: f55d351a-ffff-400e-b23f-a4ac4e5bf832
    2008-11-30 18:50:16 INFO: Checking configuration…
    2008-11-30 18:50:16 INFO: Setting filesystem import charset to ANSI_X3.4-1968
    2008-11-30 18:50:16 INFO: Setting metadata import charset to ANSI_X3.4-1968
    2008-11-30 18:50:16 INFO: Setting playlist charset to ANSI_X3.4-1968
    2008-11-30 18:50:16 INFO: Configuration check succeeded.
    2008-11-30 18:50:16 ERROR: Could not write pid file /var/run/mediatomb.pid : Permission denied
    2008-11-30 18:52:28 INFO: Loading configuration from: /etc/mediatomb/config.xml
    2008-11-30 18:52:28 INFO: Checking configuration…
    2008-11-30 18:52:28 INFO: Setting filesystem import charset to ANSI_X3.4-1968
    2008-11-30 18:52:28 INFO: Setting metadata import charset to ANSI_X3.4-1968
    2008-11-30 18:52:28 INFO: Setting playlist charset to ANSI_X3.4-1968
    2008-11-30 18:52:28 INFO: Configuration check succeeded.
    2008-11-30 18:52:28 ERROR: Could not write pid file /var/run/mediatomb.pid : Permission denied

    Kann mir jemand weiterhelfen was ich falsch gemacht habe?

  5. Otmanix says:

    Hallo, wie der “ast bereits zuvor erwähnt hat muss noch das Startskript angepasst werden, das nen Bug enthält.
    Mit Editor deiner Wahl /etc/init.d/mediatomb bearbeiten:

    case “$1″ in
    start)
    # Start daemon.
    echo -n “Applying multicast settings to $MT_INTERFACE… ”
    # those settings are necessary for us to react to M-SEARCH requests
    route add -net 239.0.0.0 netmask 255.0.0.0 $MT_INTERFACE >/dev/null 2>&1
    ifconfig $MT_INTERFACE allmulti
    touch $MT_PIDFILE
    chown $MT_USER $MT_PIDFILE

    mkdir -p “/$MT_HOME/$MT_CFGDIR”
    chown $MT_USER “/$MT_HOME/$MT_CFGDIR”

  6. kpax says:

    Hallo.

    Ich habe ein Problem mit Umlauten. Der Name wird dann nicht korrekt angezeigt, endet eben beum ersten Umlaut mit “?”. (Bsp: Herr der Ringe – Die R?”)
    Gut, folgende Ergänzung habe ich hier, wie auch in einem anderen Beispielscript gefunden:

    UTF-8
    UTF-8
    UTF-8

    Prima, die Namen werden dann auch korrekt angezeigt, aber die Videos lassen sich dann nciht mehr abspielen. ^^
    Ebenso alle Zusantzinformationen (Dauer, Codecs, etc.) werden unter Informationen nicht mehr angezeigt.

    Hat hierfür jemand eine Lösung?

  7. kpax says:

    Korrektur (hier wird ja geparst ^^)

    filesystem-charset UTF-8 /filesystem-charset
    metadata-charset UTF-8 /metadata-charset
    playlist-charset UTF-8 /playlist-charset

    (Eckige Klammenr dazudenken) :)

  8. otmanix says:

    Hast du nach der Änderung deine Datenbank neu erzeugt? Nach jeder relevanten Änderung in der config.xml mußt du die Datenbankinhalte neu erzeugen. D.h. entweder mit Mysql-Mitteln die Tabellen löschen oder in Mediatomb die indizierten Verzeichnisse löschen und neu hinzufügen.

  9. Linux-Abfänger says:

    Guten Tag die Damen und Herren

    So – nach der Anleitung im System die … also ich bin ein blutiger Linux-Anfänger. Hat eigentlich alles hingehauen, bis auf das Log:

    2008-12-12 19:23:09 INFO: Loading configuration from: /etc/mediatomb/config.xml
    2008-12-12 19:23:09 INFO: Checking configuration…
    2008-12-12 19:23:09 INFO: Setting filesystem import charset to ANSI_X3.4-1968
    2008-12-12 19:23:09 INFO: Setting metadata import charset to ANSI_X3.4-1968
    2008-12-12 19:23:09 INFO: Setting playlist charset to ANSI_X3.4-1968
    2008-12-12 19:23:09 INFO: Configuration check succeeded.
    2008-12-12 19:23:09 ERROR: The connection to the MySQL database has failed: mysql_error (1044): “Access denied for user ”@’localhost’ to database ‘mediatomb’”

    Da stimmt wohl was nicht so ganz!? Könnte mir da jehmand einen Tip für die Lösung geben?

  10. Otmanix says:

    Mediatomb benutzt in diesem Konfigurationsbeispiel eine Mysql-Datenbank zur Ablage aller Informationen über die Mediendateien. Am Anfang wird deshalb eine neue Mysql-Datenbank namens mediatomb erzeugt, ebenfalls ein User mediatomb (ohne Passwort), der darauf volle Zugriffsrechte bekommt. Wie oben beschrieben solltest du noch in der Datei /etc/mediatomb/config.xml prüfen ob der Zugriff auf die Mysqldatenbank umgestellt ist und auch Name der DB und des Users mediatomb lauten.

    Hier findest du Hilfestellungen um das Zugriffsproblem auf die Datenbank zu lösen:
    http://dev.mysql.com/doc/refman/5.1/en/access-denied.html

    Viel Erfolg!

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>