Monthly Archives: July 2011

uPnP Client build instructions

Since I gotten a few requests about binaries and while I tried to find a host I realized that its probably better to just let those interested doing the build themselves. This to ensure we don’t get ghosts and false bug reports (due to missing dependencies and such).

So please, only try this guide if you already have tried and successfully compiled banshee git version. I’d prefer to only have to answer questions regarding my code mistakes 🙂 For those who aren’t on Linux or aren’t interested in building, the code will hopefully circle back into mainline and part of official releases soon enough.

I’ll keep the build instructions for Linux as this is my weapon of choice, it should work on Windows too (obviously built in another way) but I haven’t confirmed it yet.

First we begin by building Mono.UPnP as its a dependency of the addin, and to do that we need the code.
git clone git://github.com/topfs2/Mono.Upnp.git
Since the build patches required for package config sits in an experimental branch we will have to switch:
cd Mono.Upnp
git checkout -b extreme_clean origin/extreme_clean

Now to begin building
./autogen.sh --prefix=$HOME/mono.upnp-out
make
make install
cd ..

The prefix part is optional but lets keep it in home for now since its such experimental code, no need to pollute the system without good cause 🙂

When Mono.UPnP has been built we move onto banshee, we begin by cloning banshee and then add mono-soc-2011 fork:
If you already have banshee cloned you can skip this step, else you need to do it:
git clone git://git.gnome.org/banshee
cd banshee

Next we add the mono-soc-2011 remote and checkout the branch
git remote add mono-soc-2011 git://github.com/mono-soc-2011/banshee.git
git fetch mono-soc-2011
git checkout -b upnp_client mono-soc-2011/upnp_client

To compile we need to setup the environment needed by adding mono-upnp to pkg-config and the mono gac
export MONO_PATH=$MONO_PATH:$HOME/mono.upnp-out/lib/mono-upnp/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$HOME/mono.upnp-out/lib/pkgconfig/

Now we can finally begin compiling:
./autogen
make

To run you simply do
make run
And enable the addin in preferences. You need to have the environment setup to be able to run the addin. When packagers get the code they will do the setup of the environment for you, reason we need to play this game is because Mono.UPnP is not yet packaged. For information about building banshee read http://banshee.fm/contribute/write-code/

Please let me know your results.

Till next time, yours truly, Tobias.

Advertisements

Anyone ever wanted to watch movies from their uPnP MediaServer in Banshee? Well, I can!

After doing quite a bit of cleaning of the code I have been able to do two things, first bring performance up significantly and secondly find more than one media type on a server. I have used this to add video support to the client and it works quite well!


With this code clean it should be very simple to add other media types uPnP supports such as AudioBooks, AudioBroadcasts, VideoBroadcasts and even Playlist.

Next on the list is to add some quirk managing to further speed up parsing on servers not implementing search properly (way to many sadly). After that I’ll start tackling the server part.

Till next time, yours truly, Tobias.

Why can’t servers follow standards? a.k.a Client progress

Hi!
I think its time for a long overdo progress report, and I’ll get right into it with a picture!

As you can see the client is shaping up quite nicely, at least on MediaServers which are implemented properly. Sadly I must say that it’s a jungle out there, very few actually implement it properly. Seems like most just implement enough to appease the Microsoft client, shame on you! I have during this first part of the project reading the documents regarding the MediaServer:1, which is what I am aiming for, and I must say its one of the best pieces of documents I’ve seen in a long time, and yet very few implement it properly. This makes me very sad and make implementation of clients a lot harder than it needs to be.

As you may notice I have made the design choice to make the actual container structure invisible and focus on whats important in the client, the media. This is what have caused troubles in the implementation, first and foremost it can take quite some time to parse a server (which is possible to deal with by caching) but the most problematic part have been to identify duplicates. In the MediaServer standard any item which is a duplicate is meant to have a tag called refId, very few MediaServers seems to implement this feature, why I can’t understand as it ought to be a simple addition.

Next is to add support for videoitems. Later I hope to implement support for the more obscure items also like radio broadcasts, playlists and audiobooks (If anyone know a MediaServer implementing them please let me know).

Till next time, yours truly, Tobias.