Monday, July 2, 2012

ReignUPNP - An Android UPnP Digital Media Controller



As previously mentioned, we are working on a student research project to write a UPnP digital media controller. The application is focused on Android tablets. For those of you who have never heard of UPnP, Universal Plug and Play is a set of data protocols that allow interchanging data, especially with the focus on media.  It is similar to the concept of Apples AirPlay. An example of a system setup would be:

  • NAS - Network Attached Storage, makes stored media available via the network, grants access to meta data and media library via UPnP
  • XBMC - MediaCenter that supports UPnP, XBMC acts as a "media renderer" it displays the streamed media
  • ReignUPnP - Retrieve and navigate media library from NAS via UPnP. Control playback of media. Device discovery, which devices provide data and which are able to receive and render a stream? 

Unlike other Android applications we are using our own UPnP framework. Why that? 
Well we thought, you don't really get to know a technology like UPnP by using a framework which abstracts everything.  It turned out you get confronted with way more than you had expected. SSDP(Device Management), GENA (Eventing),  DIDL(Metadata) and SOAP are just a small subset. 

Although the application has all the features required by a UPnP controller the total size of the installed application is only 1.05 Megabyte.

So what would I do different if I would start all over again:
  • Use Scala instead of Java, although this would probably more than triple the size of the APK, the better maintainability would make up for it.
  • Use KXML from the beginning. Read my previous article why.

screenshot
Screenshot , navigating ReignUPNP