Mediatomb is an open source (GPL) UPnP MediaServer with a nice web user interface. It allows you to stream your digital media through your home network and listen to/watch it on a variety of UPnP compatible devices.
Sony's PlayStation 3 is one of those UPnP compatible devices - but it's got its quirks. It took me a while to get my setup working the way I like it, so I guessed I might just as well post my config up here.
First of all the config file, located in /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>
<interface>eth0</interface>
<port>50000</port>
<pc-directory upnp-hide="yes"/>
<ui enabled="yes">
<accounts enabled="no" session-timeout="30">
<account user="mediatomb" password="mediatomb"/>
</accounts>
</ui>
<name>MyMediatomb</name>
<udn>uuid:4105837b-0437-4848-9bea-xxxxxxxxxxxx</udn>
<home>/var/lib/mediatomb</home>
<webroot>/usr/share/mediatomb/web</webroot>
<storage>
<sqlite3 enabled="yes">
<database-file>sqlite3.db</database-file>
</sqlite3>
<mysql enabled="no">
<host>localhost</host>
<username>mediatomb</username>
<database>mediatomb</database>
</mysql>
</storage>
<protocolInfo extend="yes"/>
</server>
<import hidden-files="no">
<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>ISO-8859-15</metadata-charset>
<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="js">
<import-script>/etc/mediatomb/import-custom.js</import-script>
</virtual-layout>
</scripting>
<mappings>
<extension-mimetype ignore-unknown="no">
<map from="mp3" to="audio/mpeg"/>
<map from="ogm" to="video/oggmedia"/>
<map from="mkv" to="video/matroska"/>
<map from="iso" to="video/dvdiso"/>
<map from="wmv" to="video/x-ms-wmv"/>
<map from="flv" to="video/x-flv"/>
<map from="avi" to="video/avi"/>
<map from="rm" to="video/realmedia"/>
<map from="srt" to="video/subtitle"/>
<map from="sub" to="video/subtitle"/>
<map from="mpg" to="video/mpeg"/>
</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="image/jpeg" as="jpg"/>
<treat mimetype="video/avi" as="avi"/>
</mimetype-contenttype>
</mappings>
</import>
<transcoding enabled="yes">
<mimetype-profile-mappings>
<transcode mimetype="video/transcode" using="mencoder-int"/>
<transcode mimetype="video/realmedia" using="mencoder-int"/>
<transcode mimetype="video/oggmedia" using="mencoder-720"/>
<transcode mimetype="video/matroska" using="mencoder-720"/>
<transcode mimetype="video/dvdiso" using="mencoder-iso"/>
<transcode mimetype="video/subtitle" using="mencoder-sub"/>
</mimetype-profile-mappings>
<profiles>
<profile name="mencoder-sub" enabled="yes" 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="/usr/local/bin/mediatomb-mencoder-sub" arguments="%in %out"/>
<buffer size="1000000" chunk-size="512000" fill-size="20480"/>
</profile>
<profile name="mencoder-int" enabled="yes" 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="mencoder" arguments="%in -oac lavc -ovc lavc -of mpeg -lavcopts vcodec=mpeg2video:keyint=1:vbitrate=200000:vrc_maxrate=9000:vrc_buf_size=1835 -ofps 25 -mpegopts muxrate=12000 -af lavcresample=44100 -vf harddup -o %out"/>
<buffer size="1000000" chunk-size="512000" fill-size="20480"/>
</profile>
<profile name="mencoder-720" enabled="yes" 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="mencoder" arguments="%in -aid 0 -sid 0 -oac lavc -ovc lavc -of mpeg -lavcopts vcodec=mpeg2video:keyint=1:vbitrate=200000:vrc_maxrate=12000:vrc_buf_size=1835 -mpegopts muxrate=12000 -vf harddup,scale -zoom -xy 720 -font /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf -subfont-autoscale 0 -subfont-text-scale 20 -slang nl,en -noautosub -ofps 24000/1001 -o %out"/>
<buffer size="1000000" chunk-size="512000" fill-size="20480"/>
</profile>
<profile name="mencoder-iso" enabled="yes" 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="/usr/local/bin/mediatomb-mencoder-iso" arguments="%in %out"/>
<buffer size="1000000" chunk-size="512000" fill-size="20480"/>
</profile>
</profiles>
</transcoding>
</config>
As you can tell, there's a lot of transcoding profiles in there. The mencoder-int profile is used to transcode anything that should play, but doesn't - DIVX movies with QPeL, wonky audio codecs, realmedia files, ... All of those are tagged "video/transcode" - some automatically, like realmedia, others manually in the mediatomb web UI - and piped through mencoder: audio and video become MPEG2.
The mencoder-720 profile is used only for funky container formats here, such as OGM or MKV. The ones I have usually contain more than one audio track and a few subtitles, so I tell mencoder to select the first audio and subtitle track. Don't worry about the -ofps option; that one was needed to fit one particular set of files.