Summary: Despite it’s age, UPnP-AV is still the de facto standard for multimedia sharing in the home. Hundreds of products throughout millions of homes support UPnP to varying degrees. This propagation of devices represent a largely untapped potential to increase the relevancy of XBMC. Currently, XBMC operates both as a UPnP ‘media server’ and a ‘media renderer/control point’ (client), however it does not fully utilize the protocol to provide as rich as user experience as possible, and some third-party devices are incapable of streaming the content from XBMC altogether. The aim of this project is to extend the existing UPnP handling within the application, enhancing both the underlying code for the ease of future development, increasing the support for existing devices, while making great improvements to the end user’s perceptions as a whole.
How will I achieve this: As it stands, there is already an existing approach to accessing one or more libraries across multiple XBMC clients - sharing the actual SQL database - however this approach has its flaws and is not likely to become a supported feature. In terms of UPnP, there are a number of areas where the existing handling can be improved:
- not all the available information for files is offered to clients
- discovery of media servers is not immediately clear to new users
- UPnP sources are not integrated into the local library views
- there is no support for tracking access to the files in the server component (such as watched-status, last played position)
- crucially there is the limiting factor of no support for transcoding video & audio files to formats accepted by the player. Many existing devices support a very limited number of video and audio formats. If XBMC is to operate not only as a media player, but a viable server it must also cater for as many appliances as possible.
- access restriction is non-existent
My approach will be to initially tackle the easiest changes - metadata, automatic discovery, library integration, before moving onto the major part of developing client <-> server communication via UPnP protocol extensions. Real-time transcoding of media files can be achieved through proper management of DLNA profiles, and the actual work would be performed by third party applications such as FFmpeg or lame.
Supporting access restrictions over UPnP require further changes to the profile handling of the application which may not be feasible in the timeframe. While I will not be working on developing a separate server application, it’s worth pointing out that the changes to the server side will be easily transferable in the future.
Benefits: Increasing numbers of XBMC users rightly expect the application to take full advantage of today’s multi-device environments. With the advent of low cost NAS devices, frontends such as the RaspberryPi, and more generally the gradual diversification of technology in the home, XBMC has the opportunity to reassert itself as the principle sustainable & open media-center of the future. Users benefit from a richer experience overall, as well as the increasing utilization of existing UPnP devices in their homes, while developers benefit from the adoption of a stable framework for server/client communications.
Goals: The main goal is to bring UPnP fully into the forefront of XBMC, making use of those features to reduce setup times, allow greater control over multiple players, provide a richer user experience and increase the flexibility of the platform overall.
What does it touch in XBMC: The majority of the client-side changes will take place in the file system and library layers. There will also be some modifications to the user interface in order to enumerate connected devices more easily. For the server-side changes, my attention will be focussed on maximising portability and interoperability with other servers. Even though it’s likely that eventually an distinct XBMC server application will exist, it’s important that backwards compatibility with standard UPnP devices is maintained.
Requirements: The changes will take place exclusively in the application itself, so all that is required is knowledge of C++ and the source tree. Having access to other UPnP supporting devices, I will be well positioned to test their functionality during the development process, something that is crucial to the success of this project.
How long have you been writing software for work/fun? I’ve been writing software for over 10 years. Initially I worked on web development, before shifting to C++ during my first year at University. Since then I’ve worked with other languages, notably Java & Perl.
What is your primary development language/environment? C/C++ via GNU/Linux.
Is this your first GSOC? No, I participated in the Summer of Code of ‘08.
Have you contributed to XBMC or other FLOSS projects? For my first GSoC, I worked on the beginnings of the PVR branch. During that summer I became accustomed with the XBMC source tree and was also allowed the opportunity to meet many new colleagues at the inaugural developers convention in Amsterdam. I was asked to join as a permanent team member in the autumn of 2008. I was also instrumental in refactoring the Add-ons system in 2009.