Set Up A Linux PlayStation 3 Media Server (CentOS 5.2)

Version 1.0
Author: Andrew Colin Kissa <andrew [at] topdog [dot] za [dot] net>

Introduction

The Sony PlayStation 3 is a DLNA compatible device, DLNA is a framework where home electronics can share digital media and content seamlessly. This tutorial is a followup to the previous howto on Ubuntu. Given that I like most others use CentOS as their server distribution of choice, I find it fitting to run my DLNA server on it as well. Although several other open source media servers exist, I chose to use Fuppes due to its ease of use as well as built in support for transcoding.

By following this howto you will be able to create a server that will allow you to play digital media stored on the server via a DLNA capable device such as the Sony PS3, Nokia N95, etc.

 

Requirements

  • Sony PlayStation 3 or other DLNA capable device
  • A computer running CentOS 5.2 with a network connection
  • Wireless LAN (optional)
  • Working Internet connection (to download packages)
  • Media to be streamed

 

Installation

Download and install the Fuppes Centos rpm that I have packaged, the rpm is signed using my PGP key, and depends on packages that are provided by the rpmforge repository. You will need to install my PGP key as well as the rpmforge yum repository package.

wget http://www.topdog-software.com/oss/roundcube/andrew_topdog-software.com_key.txt
rpm --import andrew_topdog-software.com_key.txt
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
wget http://www.topdog-software.com/oss/fuppes/fuppes-0.7.2-627SVN.i386.rpm
yum localinstall fuppes-0.7.2-627SVN.i386.rpm

 

Configuration

  • Edit the fuppes configuration file /etc/fuppes/fuppes.cfg and the the interface option, in my case I will be using the IP address 192.168.1.2
    <interface>192.168.1.2</interface>
    
  • Start fuppes and then point your browser to http://192.168.1.2:56596
    /etc/init.d/fuppes start
  • Select configuration on the menu on the left
  • Under "ContentDirectory settings" -> Add objects, type the name of the directory you want to share media from (you can also share an itunes db) then click "submit query"
  • Add as many directories as you want I added the following:
    /srv/fuppes/Videos
    /srv/fuppes/Music
    /srv/fuppes/Pictures
  • Rebuild the media database
  • Select Options on the menu on the left
  • Click "rebuild database"
  • Monitor the status of the rebuild on the status page, you will see the counters increase as your media is indexed.
  • Configure multicast route on your machine for the media server to be found by clients, create a file /etc/sysconfig/network-scripts/route-ethX with the following content (substitute the X for the interface you are using on your machine)
    239.0.0.0/8 dev ethX
    
  • Restart networking
    service network restart

 

Testing

Sony PlayStation 3

Connect to your PS3 and go to Video and then select search for media servers, if all went well you should find your media server named fuppes, select that and go to a folder with videos select and play. Repeat this procedure for your music and pictures.

 

Nokia N95

Go to tools -> Connectivity -> Home media -> Browse media. You N95 will connect to the WLAN and begin searching and should find your fuppes media server, select it and you will see your folders, from there you can play your media and view your content or copy it to your device.

 

Xbox

Fuppes does support Xbox as well, using an M$ product? You are on your own.

 

Sample configuration files

  • /etc/fuppes/fuppes.cfg
    <?xml version="1.0" encoding="UTF-8"?>
    <fuppes_config version="0.7.2.3">
      <shared_objects>
      <dir>/srv/fuppes/Music</dir>
      <dir>/srv/fuppes/Videos</dir>
      <dir>/srv/fuppes/Pictures</dir>
      </shared_objects>
      <network>
        <!--empty = automatic detection-->
        <interface>192.168.1.2</interface>
        <!--empty or 0 = random port-->
        <http_port>56596</http_port>
        <!--list of ip addresses allowed to access fuppes. if empty all ips are allowed-->
        <allowed_ips>
          <!--<ip>192.168.0.1</ip>-->
        </allowed_ips>
      </network>
      <content_directory>
        <!--a list of possible charsets can be found under:
          http://www.gnu.org/software/libiconv/-->
        <local_charset>UTF-8</local_charset>
        <!--libs used for metadata extraction when building the database. [true|false]-->
        <use_imagemagick>true</use_imagemagick>
        <use_taglib>true</use_taglib>
        <use_libavformat>true</use_libavformat>
      </content_directory>
      <transcoding>
        <!--[lame|twolame]-->
        <audio_encoder>lame</audio_encoder>
        <!--[true|false]-->
        <transcode_vorbis>true</transcode_vorbis>
        <transcode_musepack>true</transcode_musepack>
        <transcode_flac>true</transcode_flac>
      </transcoding>
      <device_settings>
        <!--"default" settings are inhertied by specific devices and can be overwritten-->
        <device name="default">
          <!--specify the maximum length for file names (0 or empty = unlimited)-->
          <max_file_name_length>0</max_file_name_length>
          <!--[file|container]-->
          <playlist_style>file</playlist_style>
          <show_childcount_in_title>false</show_childcount_in_title>
          <enable_dlna>true</enable_dlna>
          <transcoding_release_delay>4</transcoding_release_delay>
          <file_settings>
            <!--audio files-->
            <file ext="mp3">
              <type>AUDIO_ITEM</type>
              <mime_type>audio/mpeg</mime_type>
              <dlna>MP3</dlna>
            </file>
            <file ext="ogg">
              <type>AUDIO_ITEM</type>
              <mime_type>application/octet-stream</mime_type>
              <transcode enabled="true">
                <ext>mp3</ext>
                <mime_type>audio/mpeg</mime_type>
                <dlna>MP3</dlna>
                <http_encoding>chunked</http_encoding>
                <decoder>vorbis</decoder>
                <encoder>lame</encoder>
                <bitrate>192</bitrate>
                <samplerate>44100</samplerate>
              </transcode>
            </file>
            <file ext="mpc">
              <type>AUDIO_ITEM</type>
              <mime_type>application/octet-stream</mime_type>
              <transcode enabled="true">
                <ext>mp3</ext>
                <mime_type>audio/mpeg</mime_type>
                <dlna>MP3</dlna>
                <http_encoding>chunked</http_encoding>
                <decoder>musepack</decoder>
                <encoder>lame</encoder>
                <bitrate>192</bitrate>
                <samplerate>44100</samplerate>
              </transcode>
            </file>
            <file ext="wav">
              <type>AUDIO_ITEM</type>
              <mime_type>audio/x-wav</mime_type>
            </file>
            <file ext="flac">
              <type>AUDIO_ITEM</type>
              <mime_type>audio/x-flac</mime_type>
              <transcode enabled="true">
                <ext>mp3</ext>
                <mime_type>audio/mpeg</mime_type>
                <dlna>MP3</dlna>
                <http_encoding>chunked</http_encoding>
                <decoder>flac</decoder>
                <encoder>lame</encoder>
                <bitrate>192</bitrate>
                <samplerate>44100</samplerate>
              </transcode>
            </file>
            <file ext="wma">
              <type>AUDIO_ITEM</type>
              <mime_type>audio/x-ms-wma</mime_type>
              <dlna>WMAFULL</dlna>
            </file>
            <!--image files-->
            <file ext="jpg">
              <ext>jpeg</ext>
              <type>IMAGE_ITEM</type>
              <mime_type>image/jpeg</mime_type>
              <convert enabled="false">
                <!--<dcraw enabled="true">-q 0</dcraw>-->
                <ext>png</ext>
                <mime_type>image/png</mime_type>
                <height>0</height>
                <width>0</width>
                <!--set "greater" to "true" if you only want to resize images greater than "height" or "width"-->
                <greater>false</greater>
                <!--set "less" to "true" if you only want to resize images less than "height" or "width"-->
                <less>false</less>
                <!--set "less" and "greater" to "false" if you always want to resize-->
              </convert>
            </file>
            <file ext="bmp">
              <type>IMAGE_ITEM</type>
              <mime_type>image/bmp</mime_type>
            </file>
            <file ext="png">
              <type>IMAGE_ITEM</type>
              <mime_type>image/png</mime_type>
            </file>
            <file ext="gif">
              <type>IMAGE_ITEM</type>
              <mime_type>image/gif</mime_type>
            </file>
            <!--video files-->
            <file ext="mpg">
              <ext>mpeg</ext>
              <type>VIDEO_ITEM</type>
              <mime_type>video/mpeg</mime_type>
            </file>
            <file ext="mp4">
              <type>VIDEO_ITEM</type>
              <mime_type>video/mp4</mime_type>
            </file>
            <file ext="avi">
              <type>VIDEO_ITEM</type>
              <mime_type>video/avi</mime_type>
            </file>
            <file ext="wmv">
              <type>VIDEO_ITEM</type>
              <mime_type>video/x-ms-wmv</mime_type>
            </file>
            <file ext="vob">
              <type>VIDEO_ITEM</type>
              <mime_type>video/x-ms-vob</mime_type>
            </file>
            <file ext="vdr">
              <type>VIDEO_ITEM</type>
              <mime_type>video/x-extension-vdr</mime_type>
              <transcode enabled="true">
                <ext>vob</ext>
                <mime_type>video/x-ms-vob</mime_type>
              </transcode>
            </file>
            <file ext="flv">
              <type>VIDEO_ITEM</type>
              <mime_type>application/x-flash-video</mime_type>
            </file>
            <file ext="asf">
              <type>VIDEO_ITEM</type>
              <mime_type>video/x-ms-asf</mime_type>
            </file>
            <!--playlists-->
            <file ext="pls">
              <type>PLAYLIST</type>
              <mime_type>audio/x-scpls</mime_type>
            </file>
            <file ext="m3u">
              <type>PLAYLIST</type>
              <mime_type>audio/x-mpegurl</mime_type>
            </file>
          </file_settings>
        </device>
        <!--If you have more than one device it is a good idea to set the ip address manually as some devices may have conflicting "user agents".-->
        <device name="PS3" enabled="true">
          <user_agent>UPnP/1.0 DLNADOC/1.00</user_agent>
          <user_agent>PLAYSTATION3</user_agent>
          <!--<ip></ip>-->
          <enable_dlna>true</enable_dlna>
          <transcoding_release_delay>50</transcoding_release_delay>
          <file_settings>
            <file ext="ogg">
              <type>AUDIO_ITEM_MUSIC_TRACK</type>
              <transcode enabled="true">
                <http_encoding>stream</http_encoding>
              </transcode>
            </file>
          </file_settings>
        </device>
        <device name="Xbox 360" virtual="Xbox 360" enabled="false"><description_values> 
          <friendly_name>%s %v : 1 : Windows Media Connect</friendly_name> 
          <model_name>Windows Media Connect compatible (%s)</model_name> 
          <model_number>2.0</model_number> 
    	  </description_values> 
          <user_agent>Xbox/2.0.\d+.\d+ UPnP/1.0 Xbox/2.0.\d+.\d+</user_agent>
          <user_agent>Xenon</user_agent>
          <xbox360>true</xbox360>
        </device>
        <device name="Noxon audio" virtual="default" enabled="false">
          <!--Please enter the address of your Noxon. Automatic detection is impossible because the Noxon does not send a "user-agent" in it's requests-->
          <!--<ip></ip>-->
          <playlist_style>container</playlist_style>
          <show_childcount_in_title>true</show_childcount_in_title>
        </device>
        <device name="Telegent TG 100" virtual="default" enabled="false">
          <user_agent>dma/1.0 \(http://www.cybertan.com.tw/\)</user_agent>
          <user_agent>UPnP/1.0 DLNADOC/1.00</user_agent>
          <playlist_style>file</playlist_style>
          <max_file_name_length>101</max_file_name_length>
        </device>
      </device_settings>
    </fuppes_config>
    
  • /etc/fuppes/vfolder.cfg
    <?xml version="1.0" encoding="UTF-8"?>
    <fuppes_vfolder_config version="0.2">
     <vfolder_layout device="default" enabled="false">
        <vfolder name="Genre">
          <vfolders property="genre">
            <items type="audioItem" />
          </vfolders>
        </vfolder>
        <vfolder name="Genre/Artists">
          <vfolders property="genre">
            <vfolders property="artist">
              <items type="audioItem" />
            </vfolders>
          </vfolders>
        </vfolder>
        <vfolder name="Artists/Albums">
          <vfolders property="artist">
            <vfolders property="album">
              <items type="audioItem" />
            </vfolders>
          </vfolders>
        </vfolder> 
        
        <vfolder name="ABC/Artists/Albums">
          <vfolders split="ABC">
            <vfolders property="artist">
              <vfolders property="album">
                <items type="audioItem" />
              </vfolders>
            </vfolders>
          </vfolders>
        </vfolder>
           
        <vfolder name="Photos">
          <vfolder name="All">
            <items type="imageItem" />
          </vfolder>
          <vfolder name="Folders">
            <folders filter="contains(imageItem)" />
          </vfolder>      
        </vfolder>
        <vfolder name="Videos">
          <vfolder name="All">
            <items type="videoItem" />
          </vfolder>
          <vfolder name="Folders">
            <folders filter="contains(videoItem)" />
          </vfolder>
        </vfolder>
        
        <vfolder name="shared dirs">
          <shared_dirs full_extend="true" />
        </vfolder>
        
      </vfolder_layout>
      <vfolder_layout device="Xbox 360" enabled="true">
        <vfolder name="Music" id="1">
          <vfolder name="Album" id="7">
            <vfolders property="album" type="container.album.musicAlbum">
              <items type="audioItem" />
            </vfolders>
          </vfolder>
                
          <vfolder name="All Music" id="4">
            <items type="audioItem" />
          </vfolder>
          
          <vfolder name="Artist" id="6">
            <vfolders property="artist" type="container.person.musicArtist">
              <items type="audioItem" />
            </vfolders>
          </vfolder>
          
          <vfolder name="Folders" id="20">
            <folders filter="contains(audioItem)" />
          </vfolder>
          
          <vfolder name="Genre" id="5">
            <vfolders property="genre" type="container.genre.musicGenre">
              <items type="audioItem" />
            </vfolders>
          </vfolder>
          
          <vfolder name="Playlist" id="15" />
        </vfolder>
       
        <vfolder name="Pictures" id="3">
          <vfolder name="Album" id="13" />
          
          <vfolder name="All Pictures" id="11">
            <items type="imageItem" />
          </vfolder>
          
          <vfolder name="Date Taken" id="12" />
          
          <vfolder name="Folders" id="22">
            <folders filter="contains(imageItem)" />
          </vfolder>
        </vfolder>
        <vfolder name="Playlists" id="18">
          <vfolder name="All Playlists" id="19" />
          <vfolder name="Folders" id="23" />
        </vfolder>
        <vfolder name="Video" id="2">
          <vfolder name="Actor" id="10" />
          <vfolder name="Album" id="14" />
          <vfolder name="All Video" id="8">
    				<items type="videoItem" />
    			</vfolder>
          <vfolder name="Folders" id="21" />
          <vfolder name="Genre" id="9" />
        </vfolder>
        <vfolder name="Browse Folders" id="21">  
    <shared_dirs full_extend="true" />  
    </vfolder>
      </vfolder_layout>
    </fuppes_vfolder_config>
    

 

References

Share this page:

10 Comment(s)