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 , navigating ReignUPNP |