Many UPnP aware devices (TVs, game consoles, AV receivers in particular) do not currently work well with XBMC, due to requiring additional proprietary DLNA metadata & by only supporting a limited (though well defined) set of codec & container formats. The goal is to add support for these devices by a combination of a 'profile' based system and real-time transcoding. This missing ability is crucial in order to maintain XBMC's position in the burgeoning media-centre market.
* How to achieve this:
As the XBMC foundation is not DLNA registered there is no access to the official specifications. However there are many open source applications which have already tackled this - Rygel, uShare, PS3 Media Server, Mediatomb to name a few. There is much to be learned from their codebases, and we can also learn from published profiles for closed source applications. Profiles would be made available as XML data, delivered through an official addon which would allow updates between major releases. Users could create their own profiles, share and test in the community before adoption in the official addon.
In order to achieve this I would:
- design a well structured format for the profile descriptors
- add better awareness of each client's capabilities through UPnP descriptors
- enhance the DLNA metadata provided
- integrate support for transcoding
- re-engineer CUPnPServer to use this information to return targeted listings for each request
- create and maintain an official addon which provided the profile descriptors
- reach out to the community in order to collect & test profiles for as many manufacturers and devices as possible.
XBMC's UPnP server is languishing due to a lack of proper DLNA and transcoding support. This project would add far greater interoperability with non-XBMC devices, creating the ability for community-driven updates to our device support over time.
* What does it touch in XBMC:
This would be largely self contained and will not touch core XBMC functionality. We already support 'quirks' handling for some devices, however this is limited and contained within the C++ source code. These would be shifted to a profile where useful.