Home > Linux > Media Streaming Using Fuppes….

Media Streaming Using Fuppes….

In a previous post I wrote about remuxing videos so you can share them to the Xbox 360 using a UPnP program like fuppes. I mentioned that I would explain how to install fuppes, well here ya go! Look no further! Detailed instructions on compiling, installing, and configuring Fuppes. For those who don’t want to compile, I have .deb files created using checkinstall, use at your own risk.

Compiling and Installing

So, first thing is first you need the dependencies. On Ubuntu (or any Debian based system really…) the following will get you everything you need to compile AND enable all of fuppes’ features.

sudo apt-get install libtool libpcre3-dev pkg-config libxml2-dev libsqlite3-dev libtag1-dev uuid-dev libmagick++9-dev libvorbis-dev libavformat-dev libtwolame-dev libswscale-dev libmpcdec-dev libfaad-dev libsimage-dev g++ libsndfile1-dev libungif4-dev autoconf gettext libmad0-dev libmpeg4ip-dev libnotify-dev libpanelappletmm-2.6-dev libpanel-applet2-dev libmp4v2-dev libmp4v2-0 libmp3lame-dev libflac-dev libexiv2-dev

WHEW! Thats a lot. Well it lets you handle just about any type of media that you can think of to send through fuppes. That way you can send to any program that can stream from UPnP, the Xbox 360 is limited in what it can read and use. For example it can’t play mkv’s hence my previous post.

Fuppes also requires ffmpeg if you want to do video transcoding on the fly. Video transcoding takes a lot of cpu power to do on the fly, so only do so if you don’t feel like taking the time to  convert videos and save them separately to send through fuppes. Ffmpeg can either be built separately if you like, or simply installed via apt-get

sudo apt-get install ffmpeg

So now that we’re all ready, lets get our source code. You need subversion for this, so you can skip the first command if you already have subversion installed. We’re gonna check out the latest version of the source code (of this writing it was version 607) and configure it, then compile it.

svn co https://fuppes.svn.sourceforge.net/svnroot/fuppes/trunk fuppes
cd fuppes/
autoreconf -vfi
./configure --enable-gnome-panel-applet --prefix=/usr --enable-video-transcoding
make

After the configure runs, you’ll be greeted with a list of all the enabled or disable features of fuppes that the configuration was set up for. Admire the lovely amount of stuff it can do if you like. Then compile it. Now, if you’d like a shiny .deb package for yourself — so you don’t have to do this yourself, and so you can easily remove it — then install checkinstall.

sudo apt-get install checkinstall
sudo checkinstall make install

This will install checkinstall, then create your package for you. Set the values of the package information to whatever you’d like and let it run. It will create the package and install it for you. You can remove it at any time with:

dpkg -r fuppes

If you don’t care about all this package stuff, and just wanna do it the old fashioned way, then simply skip the above and just run

make install

after you run ‘make’.

Here are the two packages I made with checkinstall. You will definitely need ffmpeg for them, and I haven’t fully tested them yet. So download and use at your own risk. I’d like feedback on them. If they don’t work, let me know. If you get them to work, let me know what you went through and had to do to do it. I’ll credit anyone who finds they don’t work and tells me how to make it work. =)

fuppes for 32bit
fuppes for 64bit

Configuring Fuppes

Upon first time running it, fuppes will create a folder named .fuppes in your home directory. Inside you will find a file “fuppes.cfg” which quite obviously is the configuration file for fuppes. By no means do I claim that the following changes are the only way, but I know that what I have works. The cfg file is well commented and is xml. So editing it should be a breeze. The following changes are things I’ve made that are not documented in the default cfg that gets created. Just ensure that the interface you specify in the configuration file is connected to the same network that the Xbox is on.Also, there is a web based admin panel for many options, the port on which this runs can be defined in the cfg file.

If you wish for on the fly transcoding, then you need the following:

<transcoding>
<!--[lame|twolame]-->
<audio_encoder>lame</audio_encoder>
<!--[true|false]-->
<transcode_vorbis>true</transcode_vorbis>
<transcode_flac>true</transcode_flac>
</transcoding>

You can probably look up other options if other trancoding is needed. On the bottom you will find the device specification for the 360. While it will work, you may prefer to use the virtual folder setup that fuppes allows. Therefore making sure to show you all the videos you have and all the music. The default configuration has problems getting videos from the subdirectories. This is the configuration that I use:

<device name="Xbox 360" virtual="Xbox 360" enabled="true">
<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>
<show_empty_resolution>true</show_empty_resolution>
<file_settings>
<file ext="mp3"><type>AUDIO_ITEM_MUSIC_TRACK</type></file>
<file ext="jpg"><type>IMAGE_ITEM_PHOTO</type></file>
<file ext="avi">
<type>VIDEO_ITEM</type>
<mime_type>video/x-msvideo</mime_type>
<transcode enabled="true">
<ext>wmv</ext>
<mime_type>video/x-ms-wmv</mime_type>
<video_codec>smv2</video_codec>
<audio_codec>wmav1</audio_codec>
<video_bitrate>1800000</video_bitrate>
<audio_bitrate>1280000</audio_bitrate>
</transcode>
</file>
</file_settings>
<description_values>
<friendly_name>Zeros : Treasure Trove</friendly_name>
<model_name>Windows Media Connect compatible (%s)</model_name>
<model_number>2.0</model_number>
</description_values>
</device>

Ok. And then you need to make a file vfolder.cfg. This defines the layout for the virtual folder layout on how the 360 will show you the files. Its quite long, so click here to download it. Place it in the .fuppes folder. Feel free to edit it as you see fit. As is it will work just fine.

Using Fuppes

When you start up fuppes in a terminal, it will show you load up a bunch of things and then you can type one of a few choices. Typing ‘q’ will quit. Typing ‘r’ will scrap your current database of stuff and rebuild it. Typing ‘u’ will update the database and ‘v’ will rebuild the virtual folder layout.

Just go to “My Videos” on your Xbox 360 and the name you chose for your “friendly_name” in the fuppes.cfg file should show up. The same will be true if you go to “My Music”.

Enjoy!

  1. ralf
    April 1, 2009 at 2:28 pm | #1

    First thanks a lot for this howto.
    It was the first time i was able to compile and start fuppes without error.
    Nearly without error of course πŸ˜‰

    The bad news is, even it starts up fine and shows up on the xbox, no audio or video file is shown.
    Any hint on this ?
    The second problem is, that fuppes on some audiofiles says “TagLib: — Invalid sample rate”. Searched google but found nothing that helps, except reencode the mp3. But that is really a small prob, keeping in mind i’m unable to stream to the xbox anyway.

    One last thing, regarding the Transcoding part in fuppes.cfg you described:

    shouldn’t it be?

    ralf

  2. ralf
    April 1, 2009 at 2:33 pm | #2

    Hey, i think i missed out some information ;-). Here is what shows up on the console after fire up fuppes

    FUPPES – 0.634
    the Free UPnP Entertainment Service
    http://fuppes.ulrich-voelkel.de

    load: /usr/lib/fuppes/libdecoder_vorbis.so
    == lib/Plugins/Plugin.cpp (145) :: Wed Apr 1 21:14:08 2009 ==
    registered audio decoder plugin “vorbis”

    load: /usr/lib/fuppes/libtranscoder_magickwand.so
    == lib/Plugins/Plugin.cpp (160) :: Wed Apr 1 21:14:08 2009 ==
    registered transcoder plugin “magickWand”

    load: /usr/lib/fuppes/libdatabase_sqlite3.so
    == lib/Plugins/Plugin.cpp (167) :: Wed Apr 1 21:14:08 2009 ==
    registered database plugin “sqlite3”

    load: /usr/lib/fuppes/libmetadata_dlna_profiles.so
    == lib/Plugins/Plugin.cpp (124) :: Wed Apr 1 21:14:08 2009 ==
    registered dlna profile plugin

    load: /usr/lib/fuppes/libdecoder_flac.so
    == lib/Plugins/Plugin.cpp (145) :: Wed Apr 1 21:14:08 2009 ==
    registered audio decoder plugin “FLAC”

    load: /usr/lib/fuppes/libcore_presentation.so
    == lib/Plugins/Plugin.cpp (131) :: Wed Apr 1 21:14:08 2009 ==
    registered presentation plugin

    load: /usr/lib/fuppes/libtranscoder_ffmpeg.so
    == lib/Plugins/Plugin.cpp (160) :: Wed Apr 1 21:14:08 2009 ==
    registered transcoder plugin “ffmpeg”

    load: /usr/lib/fuppes/libmetadata_libavformat.so
    == lib/Plugins/Plugin.cpp (138) :: Wed Apr 1 21:14:08 2009 ==
    registered metadata plugin “libavformat”

    load: /usr/lib/fuppes/libmetadata_magickwand.so
    == lib/Plugins/Plugin.cpp (138) :: Wed Apr 1 21:14:08 2009 ==
    registered metadata plugin “magickWand”

    load: /usr/lib/fuppes/libmetadata_libmp4v2.so
    == lib/Plugins/Plugin.cpp (138) :: Wed Apr 1 21:14:08 2009 ==
    registered metadata plugin “mp4v2”

    load: /usr/lib/fuppes/libmetadata_taglib.so
    == lib/Plugins/Plugin.cpp (138) :: Wed Apr 1 21:14:08 2009 ==
    registered metadata plugin “taglib”

    load: /usr/lib/fuppes/libmetadata_exiv2.so
    == lib/Plugins/Plugin.cpp (138) :: Wed Apr 1 21:14:08 2009 ==
    registered metadata plugin “exiv2”

    [ContentDatabase] create database at Wed Apr 1 21:14:09 2009
    read shared directories
    create watch: /media/video/downloads/
    create watch: /media/video/downloads/incomplete/
    webinterface: http://192.168.1.110:9001

    r = rebuild database
    u = update database
    i = print system info
    h = print help

    press “ctrl-c” or “q” to quit

    == lib/Fuppes.cpp (346) :: Wed Apr 1 21:14:09 2009 ==
    new device: Xbox 360 :: MediaRenderer

    new UPnP device:
    Xbox 360 (MediaRenderer)
    create watch: /media/video/downloads/complete/
    create watch: /media/audio/mp3/
    [DONE] read shared directories
    parse playlists
    [DONE] parse playlists
    parse iTunes databases
    [DONE] parse iTunes databases
    [ContentDatabase] database created at Wed Apr 1 21:14:20 2009

  3. April 1, 2009 at 2:40 pm | #3

    Did you copy and use my vfolder.cfg file exactly as it was?

    I know I only vaguely mentioned it, maybe I should make that part stand out a little more. It looks like there are no errors and I remember having a problem making things show up until I got the vfolder.cfg file just right.

    As for the transcoding, what I have is an example, change it to whatever you want. I prefer to not use the transcoding because unless you have a powerful computer, it’ll slow down the streaming.

    If you did grab the vfolder.cfg, then try to tweak some of the settings in there. I’ll see what I can come up with…..

  4. ralf
    April 1, 2009 at 2:57 pm | #4

    FANTASTIC!!! It works! I’ve tried fuppes on diffetrent platforms (NSLU2, now i386) for weeks and never get it work. Thanks to you now the main problem is solved!
    I’ve to to hit r and wait for finishing and then hit v to create virtual container layout.

    As for transcoding, i only think there is a ‘-‘ missing at the beginning and the end, fuppes complains about that.

    So, now i can concetrate on the Taglib thing and try to feed fuppes with my whole video collection πŸ™‚

  5. April 12, 2009 at 12:19 pm | #5

    Brilliant post, had to run a Virtual Container as Ralf said, after that it worked.

    Well, when i say worked, i could see all the songs, i can’t sort by Artist/Album etc yet, but my Fuppes seems convinced (./configure says taglib is enabled!) that i don’t have Taglib!

    I’ll Google around for that, unless anyone has any ideas?

    Thanks Again,
    D

  6. Jason Hutton
    June 2, 2009 at 5:01 pm | #6

    I have been able to enable sorting for virtual folders, but when i do, it breaks the video. it only shows half or none of the videos as before. also you dont need to transcode avi’s anymore if you got the recent updates from microsoft.

  1. No trackbacks yet.

Leave a Reply

Your email address will not be published. Required fields are marked *