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

Want to support HowtoForge? Become a subscriber!
 
Submitted by topdog (Contact Author) (Forums) on Tue, 2009-01-27 12:13. :: CentOS

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>
Last edited 25/01/2009

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


Please do not use the comment function to ask for help! If you need help, please use our forum.
Comments will be published after administrator approval.
Submitted by osmonitor (not registered) on Thu, 2010-07-15 04:13.
I know a lot of information from the article and thank you for your message~~
Submitted by Robert (not registered) on Mon, 2009-11-30 11:22.

After running, yum localinstall fuppes-0.7.2-627SVN.i386.rpm

I get this,

...
Error: Missing Dependency: libexiv2.so.4 is needed by package fuppes
Error: Missing Dependency: libx264.so.55 is needed by package fuppes
Error: Missing Dependency: libavformat.so.51 is needed by package fuppes
Error: Missing Dependency: libavcodec.so.51 is needed by package fuppes
Error: Missing Dependency: libfaad.so.0 is needed by package fuppes

How do I install these packages aswell ?
(thanks for any hints pointing in right direction :))

Submitted by ken (not registered) on Tue, 2009-12-29 07:02.
I am having the same issue - is there any resolution to this?
Submitted by Dash (not registered) on Wed, 2009-12-09 01:32.
Having the same problem... any insight?
Submitted by Anonymous (not registered) on Sat, 2010-01-16 01:48.
The dependency issue is that the package was built using specific versions of the dependencies.  If you are using the new kernels and updates, you are at a higher level of the dependencies, thus it will fail.  Options are:  1) Hope he is kind enough to update the rpm for us -- PRETTY PLEASE? 2) Hope he puts the svn up and you build your own rpm with the new builds of the dependencies 3) rollback your cent to lower versions -- NOT recommended
Submitted by teoman (not registered) on Wed, 2009-08-05 08:40.
Thank you for information :)
Submitted by C (not registered) on Fri, 2009-01-30 01:03.
Does this allow proper playback of .MKV files on PS3? I am currently using ubuntu 8.10 with MediaTomb media server. It plays, and most importantly transcodes all of my videos for playback on my PS3 - with the exception of .MKV files. I would LOVE to have something working that can play .MKV's, because that is the format that most 720p downloads are packaged in. Would love to be able to watch in high def.
Submitted by Anonymous (not registered) on Sat, 2009-03-28 01:41.
Try this, it works like a charm : http://code.google.com/p/ps3mediaserver/
Submitted by Anonymous (not registered) on Sun, 2009-06-14 04:23.

PITA for CentOS 5.3:

http://wiki.centos.org/TipsAndTricks/MultimediaOnCentOS

doesn't work correctly due to RPM dependency h3ll.  Especially with mplayer and mencoder.

Submitted by topdog (registered user) on Fri, 2009-01-30 11:17.
I have not used MKV's i will download one today and test will let you know.