mediatomb.jpg Mediatomb ist ein unter GPL Lizenz stehender freier UPnP Medienserver für Musik, Bilder und Videos. Mit Mediatomb kann man Mediendateien an Fernseher, Spielekonsolen, Smartphones und weitere Universal Plug and Play fähigen Geräte ausgeben. Mediatomb kann von der Projektseite Mediatomb heruntergeladen werden, ist jedoch auch in vielen Linux Distributionen in den offiziellen Paketquellen enthalten.



Installation


Im Beispiel wird Mediatomb auf einem Debian System installiert.

root@host:~# apt-get install mediatomb




Syntax:

  • /etc/init.d/mediatomb start|stop|restart
  • service mediatomb start|stop|restart



Nach dem Start des Mediatomb Servers ist die Weboberfläche standardmässig unter Port 49152 „http://server-ip:49152“ erreichbar, wenn in der Konfiguration das User Interface aktiviert ist. Im folgenden Konfigurationsbeispiel wird für die Mediatomb Instanz ein Nutzer angelegt und über diesen dann Mediatomb gestartet.



Konfiguration


Die Hauptkonfigurationsdatei ist bei einer Debian Installation aus den Paketquellen die Datei „/etc/mediatomb/config.xml“. In dieser Datei werden User Interface und Accounts deakiviert.

...
<ui enabled="no" show-tooltips="no">
<accounts enabled="no" session-timeout="30">
...



Datei speichern und den Mediatomb Server neustarten. Danach in den für Mediatomb angelegten Nutzer wechseln und Mediatomb starten.

root@host:~# service mediatomb restart



root@host:~# su - mediatombuser



mediatombuser@host:~$ mediatomb &
[1] 6442
mediatombuser@host:~$ 
MediaTomb UPnP Server version 0.12.1 - http://mediatomb.cc/

===============================================================================
Copyright 2005-2010 Gena Batsyan, Sergey Bostandzhyan, Leonhard Wimmer.
MediaTomb is free software, covered by the GNU General Public License version 2

2015-02-17 23:13:48    INFO: Loading configuration from: /home/mediatombuser/.mediatomb/config.xml
2015-02-17 23:13:48    INFO: Checking configuration...
2015-02-17 23:13:48    INFO: Setting filesystem import charset to UTF-8
2015-02-17 23:13:48    INFO: Setting metadata import charset to UTF-8
2015-02-17 23:13:48    INFO: Setting playlist charset to UTF-8
2015-02-17 23:13:48 WARNING: You enabled the YouTube feature, which allows you
                             to watch YouTube videos on your UPnP device!
                             Please check http://www.youtube.com/t/terms
                             By using this feature you may be violating YouTube
                             service terms and conditions!

2015-02-17 23:13:48    INFO: Configuration check succeeded.
2015-02-17 23:13:48    INFO: Initialized port: 49153
2015-02-17 23:13:48    INFO: Server bound to: 192.168.XXX.XX
2015-02-17 23:13:49    INFO: MediaTomb Web UI can be reached by following this link:
2015-02-17 23:13:49    INFO: http://192.168.XXX.XX:49153/


Nachdem Mediatomb erfolgreich als mediatombuser gestartet wurde, sind im Verzeichnis „/home/mediatombuser/.mediatomb/“ die Konfigurationsdateien erstellt worden.


Hier sollte man schon wissen ob man Mediatomb mit einer Mariadb, MySQL oder sqlite Datenbank betreiben möchte. Entscheidet man sich hier für eine Mariadb oder MySQL Datenbank, muss zuvor ein Datenbanknutzer mit Datenbank erstellt werden.




Zum konfigurieren von Mediatomb die Datei „/home/mediatombuser/.mediatomb/config.xml“ mit einem Editor öffnen. Im Beispiel wurde eine „sqlite“ Datenbank verwendet.

<?xml version="1.0" encoding="UTF-8"?>
<config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatom
b.cc/config/2 http://mediatomb.cc/config/2.xsd">
  <!--
     Read /usr/share/doc/mediatomb-common/README.gz section 6 for more
     information on creating and using config.xml configration files.
    -->
  <server>
    <ui enabled="yes" show-tooltips="yes">
      <accounts enabled="yes" session-timeout="30">
        <account user="mediatomb-username" password="secret"/>
      </accounts>
    </ui>
    <name>MediaTomb</name>
    <udn>uuid:b4b420b3-78df-4772-acc4-8243d904bf4c</udn>
    <home>/home/mediatombuser/.mediatomb</home>
    <webroot>/usr/share/mediatomb/web</webroot>
    <port>49142</port>
    <storage caching="yes">
      <sqlite3 enabled="yes">
        <database-file>mediatomb.db</database-file>
      </sqlite3>
      <mysql enabled="no">
        <host>localhost</host>
        <username>mediatomb</username>
        <database>mediatomb</database>
      </mysql>
    </storage>
    <protocolInfo extend="no"/><!-- 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>
    -->
    <extended-runtime-options>
      <ffmpegthumbnailer enabled="yes">
        <thumbnail-size>128</thumbnail-size>
        <seek-percentage>5</seek-percentage>
        <filmstrip-overlay>yes</filmstrip-overlay>
        <workaround-bugs>no</workaround-bugs>
        <image-quality>8</image-quality>
      </ffmpegthumbnailer>
      <mark-played-items enabled="no" suppress-cds-updates="yes">
        <string mode="prepend">*</string>
        <mark>
          <content>video</content>
        </mark>
      </mark-played-items>
    </extended-runtime-options>
  </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>
    <mappings>
      <extension-mimetype ignore-unknown="no">
        <map from="mp3" to="audio/mpeg"/>
        <map from="ogx" to="application/ogg"/>
        <map from="ogv" to="video/ogg"/>
        <map from="oga" to="audio/ogg"/>
        <map from="ogg" to="audio/ogg"/>
        <map from="ogm" to="video/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"/>
        <map from="mkv" to="video/x-matroska"/>
        <map from="mka" to="audio/x-matroska"/>
        <!-- Uncomment the line below for PS3 divx support -->
        <!-- <map from="avi" 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"/>
        <map from="application/ogg" to="object.item.audioItem.musicTrack"/>
      </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/mp4" as="mp4"/>
        <treat mimetype="audio/mp4" as="mp4"/>
        <treat mimetype="application/x-iso9660" as="dvd"/>
        <treat mimetype="application/x-iso9660-image" as="dvd"/>
        <treat mimetype="video/x-matroska" as="mkv"/>
        <treat mimetype="audio/x-matroska" as="mka"/>
      </mimetype-contenttype>
    </mappings>
    <online-content>
      <YouTube enabled="no" refresh="0" update-at-start="no" purge-after="0" racy-content="exclude" format="" hd="no">
        <!--<favorites user="none"/>
        <standardfeed feed="watch_on_mobile" time-range=""/>
        <playlists user=""/>
        <uploads user=""/>
        <standardfeed feed="watch_on_mobile" time-range="none"/>-->
      </YouTube>
    </online-content>
  </import>
  <transcoding enabled="no">
    <mimetype-profile-mappings>
      <transcode mimetype="video/x-flv" using="vlcmpeg"/>
      <transcode mimetype="application/ogg" using="vlcmpeg"/>
      <transcode mimetype="application/ogg" using="oggflac2raw"/>
      <transcode mimetype="audio/x-flac" using="oggflac2raw"/>
    </mimetype-profile-mappings>
    <profiles>
      <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 -o byteorder:big -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=ps,dst=%out} vlc:quit"/>
        <buffer size="14400000" chunk-size="512000" fill-size="120000"/>
      </profile>
    </profiles>
  </transcoding>
</config>


In dieser Beispieldatei wurde das User Interface aktiviert, für das Webinterface der Port 49142 ausgewählt und sqlite3 aktiviert. Bein Neustart von Mediatomb wird dann die Datei „mediatomb.db“ im Verzeichnis „/home/mediatombuser/.mediatomb“ erzeugt. Thumbnails wurden aktiviert und YouTube deaktiviert. Nach der Konfiguration muss der Mediatomb Server neu gestartet werden.


mediatombuser@host:~$ killall mediatomb



root@host:~# mediatomb restart



mediatombuser@host:~$ mediatomb &
[1] 6442
mediatombuser@host:~$ 
MediaTomb UPnP Server version 0.12.1 - http://mediatomb.cc/

===============================================================================
Copyright 2005-2010 Gena Batsyan, Sergey Bostandzhyan, Leonhard Wimmer.
MediaTomb is free software, covered by the GNU General Public License version 2

2015-02-17 23:13:48    INFO: Loading configuration from: /home/mediatombuser/.mediatomb/config.xml
2015-02-17 23:13:48    INFO: Checking configuration...
2015-02-17 23:13:48    INFO: Setting filesystem import charset to UTF-8
2015-02-17 23:13:48    INFO: Setting metadata import charset to UTF-8
2015-02-17 23:13:48    INFO: Setting playlist charset to UTF-8
2015-02-17 23:13:48 WARNING: You enabled the YouTube feature, which allows you
                             to watch YouTube videos on your UPnP device!
                             Please check http://www.youtube.com/t/terms
                             By using this feature you may be violating YouTube
                             service terms and conditions!

2015-02-17 23:13:48    INFO: Configuration check succeeded.
2015-02-17 23:13:48    INFO: Initialized port: 49142
2015-02-17 23:13:48    INFO: Server bound to: 192.168.XXX.XX
2015-02-17 23:13:49    INFO: MediaTomb Web UI can be reached by following this link:
2015-02-17 23:13:49    INFO: http://192.168.XXX.XX:49142/


Mediatomb hat jetzt im Verzeichnis „/home/mediatombuser/.mediatomb“ die Datei „mediatomb.db“ erzeugt und kann jetzt im Browser unter „http://server-ip:49142“ aufgerufen werden.


mediatomb-start.jpg



Mediastreaming bearbeiten


Um Mediendateien in die Mediatomb Datenbank hinzuzufügen, zunächst über Filesystem das Verzeichnis der gewünschten Mediendateien auswählen.

Optionen:

mediatomb-add.jpg ⇒ Datei oder Verzeichnis zur Datenbank hinzufügen.
mediatomb-autoscan.jpg ⇒ Datei oder Verzeichnis zur Datenbank hinzufügen und automatische Aktualisierung aktivieren.


Hier wurde die automatische Aktualisierung gewählt.

autoscan-mode.jpg


Wurde die Datenbank aktualisiert, sind die freigegebenen Dateien bzw. Verzeichnisse unter dem Reiter Database sichtbar und können editiert werden.

Optionen:

file-edit.jpg ⇒ Mediendatei Eintrag bearbeiten.
db-remove.jpg ⇒ Mediendatei oder Verzeichnis aus der Datenbank entfernen.



Mediendateien abspielen


Die in der Mediatomb Datenbank erfassten Dateien können jetzt in einem UPnP fähigen Multimedia Gerät im Lokalen Netzwerk abgespielt werden.

upnp-play.jpg



Fehlermeldungen


Database error:

Gibt das System eine Datenbank Fehlermeldung aus, ist die Datenbankdatei fehlerhaft. Hierzu Mediatomb stoppen und die Datenbankdatei „/home/mediatombuser/.mediatomb/mediatomb.db“ löschen und den Server neustarten.





Firewall


Firewall Regeln für die Freigabe des UPnP Dienstes im Netzwerk.

iptables -A INPUT -i eth0 -s 0.0.0.0/32 -d 224.0.0.1/32 -p igmp -j ACCEPT
iptables -A INPUT -i eth0 -d 239.0.0.0/8 -p igmp -j ACCEPT


Die oben gezeigten IPTables Regeln sollen laut Mediatomb FAQ vor allen anderen Regeln plaziert werden. Im Testsystem wurden nur ausgewählte Verbindungen zugelassen, der Rest geblockt und hat auch ohne die oben genannten Regeln funktioniert.



Die folgenden gezeigten Regeln sind möglicherweise bei aktiver Firewall notwendig. Hier werden nur Verbindungen aus dem Lokalen Netzwerk zugelassen.

iptables -A INPUT -p tcp -m tcp -s 192.168.XXX.X/24 --dport 1900 -j ACCEPT
iptables -A INPUT -p udp -m udp -s 192.168.XXX.X/24 --dport 1900 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -s 192.168.XXX.X/24 --dport 1900 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -s 192.168.XXX.X/24 --dport 1900 -j ACCEPT

iptables -A INPUT -p tcp -m tcp -s 192.168.XXX.X/24 --dport 49142 -j ACCEPT
iptables -A INPUT -p udp -m udp -s 192.168.XXX.X/24 --dport 49142 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -s 192.168.XXX.X/24 --dport 49142 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -s 192.168.XXX.X/24 --dport 49142 -j ACCEPT


Port 49142 mit dem Port ersetzen, der in der „config.xml“ definiert wurde.