Sunday, December 11, 2011

UPnP / DLNA AV Software

This is an update on one of the project areas that I spent a good deal of time working on during October and early November.

Background

As I mentioned in my last posting I had recently acquired a WD TV Live Plus.  This device allows you to play picture, video and music from your computer through your TV.  Along with supporting network shares the WD TV Live Plus support UPnP and DLNA Media Servers.

After running through some slide shows using a drive mapped from our home PC based picture repository I decided to see what UPnP and DLNA Media Server had to offer.

UPnP is Universal Plug and Play is a set of protocols for small networks networks that allows devices on the network to discover each other to communicate and share data.  UPnP is promoted by the UPnP forum.

UPnP AV is an audio and video extension of UPnP which includes Media Server, Media Renderers and Control Points.

DLNA stands for the Digital Living Network Alliance which is a non-profit trade organization started by Sony to define interoperability guidelines for sharing data between consumer devices.  These guidelines build upon UPnP.

More information on UPnP and DLNA can be found in Wikipedia.

Complete Media Servers

A quick search using Google turned up a number of UPnP and DLNA compliant media server running on Windows, Linux and Mac.  Along with these software solutions there were a number of devices that could share out picture, video and music to a home network.  Finally there were a number of Network Attached Storage (NAS) that include UPnP and DLNA media server functionality.

In the software category there were Opensource, Freeware and Commercial offerings.  I found a good list that contained a number of systems at http://www.rbgrn.net/content/21-how-to-choose-dlna-media-server-windows-mac-os-x-or-linux.  This list was compiled in 2007 but had been updated recently.  Wikipedia has a list at http://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients.

I installed and tested a number of systems including:

Windows Media Player – Windows Media Player (WMP) 12 comes with the capability to share your media on the network.  The sharing capability is UPnP / DLNA compatible.  WMP worked with the WD TV Live Plus device as well as several other clients.  However, it really didn’t give you any option to configure the look and feel.

XBox Media Center (XBMC) – The focus of this opensource software is running a home media center.  It can also serve media up to UPnP compliant devices.  The issue with XBMC is that it is first and foremost meant for driving your home media center PC and only will serve up media when it is running on the console.

MediaTomb – This looks to be an excellent program.  Unfortunately for me it only runs under linux so in order to use MediaTomb I would have to stand up a linux server which wasn’t something I wanted to do at this point.

Tiversity – Tiversity is a commercial product which has a basic version that is free.  The free version is very comprehensive and provides access to external media sources via the Internet.

All of these programs worked and I was able to access pictures, video and music from my PC using the WD TV Live Plus device and other clients including WMP.  However with the exception of MediaTomb the servers didn’t provide the level of customization I was looking for.

The next step was to look into libraries and frameworks that support developing UPnP / DLNA Media Servers.

Media Server Libraries / Frameworks

The UPnP Forum has a good listing of libraries both commercial and opensource for developing UPnP / DLNA compatible software at http://upnp.org/sdcps-and-certification/resources/sdks/.

I experimented with the following:

Intel – Intel has an excellent toolkit which is a must have for anyone trying to develop UPnP software.  It can be found at http://opentools.homeip.net/dev-tools-for-upnp.  It has several very useful utilities as well as a tool for generating basic UPnP devices in c, c++ and C#.

I used the Device Sniffer, Device Spy as well as the AV Media Server extensively in testing a debugging other frameworks.  I was also able to compile the device templates using MS Visual Studio 2010 Express.

Herqq UPnP – Herqq UPnP (HUPnP) is a Qt based UPnP library.  I got it installed and was able to get the Media Server to compile and run.  While it worked well with several UPnP clients I was using for testing it didn’t work with the WD TV Live Plus device due to a but with the WD TV Live Plus and escaping XML. 

As the program was cleanly written and well documented I was able to develop a patch that made the software usable with the WD TV Live Plus.  In working with this library I exchanged several emails with its creator who was ready and willing to help me making my modifications.

QT-BRisa – This is a project that was started in 2007 to develop an API for Qt to ease development of UPnP devices and control points.  I have some experience with Qt and got QT-BRisa installed and was able to compile the media server example but was unable to get it to run.

Coherence – Is a Python toolkit.  I have very minimal experience with Python.  I tried without success to get this up and running on Windows.

Two Wild Cards and the Way Forward For Now

Well into my work in this area I came across a perl based DLNA Media Server pDLNA.  The code is well organized and actively being developed by Stefan Heumader.  It is being developed on Linux and unfortunately it didn’t run right “out of the box” on Windows due to problems with the Windows Thread Model.  However, with some changes some help from Perl Monks and Stefan I was able to get a very basic version up and running on Windows.

Over time I hope to be able to take what I have and get to a state where there is a fully operational Windows version either as a patch that might get integrated back into original version or as a fork.

My next discovery was Serviio which is a free media server that runs on Windows, Linux and MAC and is written in Java.  I was able to get this software running and customize it to the point where I have something that is useable with the WD TV Live Plus and my media collection.  I plan on using this until I am able to get to a point with the perl based media server that it is full featured enough for general usage.

No comments: