SoC 2008/UPnP
This project is part of Google Summer of Code 2008.
|
Contents
GSoC - DLNA UPnP A/V integration
I will use this page as a placeholder for details and progress information about my SoC 2008 project.
The project
Abstract
Even if it is controverted, UPnP A/V Is a widely used standard set of protocols for networked digital audio and video equipment interoperability, thus making it almost a requirement digital media software that aim to become real part of the average multimedia home network. This project aims to implement at least the Media Server part in VLC media player, which will enable it to advertise and stream media to DNLA UPnP A/V enabled devices, such as the PlayStation 3.
Goals
At the end of the project, VLC media player will be able to advertise its currently playing stream or playlist / media library / discovered services to UPnP clients, that will be able to play them over the network, using DNLA UPnP A/V protocols. VLC media player will also expose its web based interface to permit FreeBox's FreePlayer[2]-like features for UPnP devices. As a secondary goal, VLC media player's current UPnP capabilities will be improved with room made for future further UPnP support (Media renderer, Control point...). The reference for success will be the ability to be discovered by, and stream to a PlayStation 3 device.
Details
There are two possible ways to achieve that goals: Implementing the needed services inside VLC media player as modules, written in C (This is the preferred one, and I'm assuming that it will be used), or integrating the Coherence[3] python UPnP framework. Basic UPnP support will be provided through libupnp[4], which is already used in VLC media player for UPnP devices discovery. The UPnP A/V MediaServer specification[5] will be implemented as a module which will provide the ConnectionManager[6], ContentDirectory[7] and AVTransport[8] services as described in their respective specifications. Media will be streamed using the VLC media player's streaming capabilities. The ConnectionManager service will implement the optional PrepareForConnection() action in order to select a streaming protocol matching with the remote device's capabilities, and to be able to stream to multiple UPnP devices simultaneously. The ContentDirectory service will expose the playlist, the media library and the discovered services for remote playback. The AVTransport service will enable playback control from a remote UPnP device. Libdlna[9] will be given a close look, may it be for linking to it, or to use it as reference code.
Schedule
This is not precise, as many parameters will make the timeline vary, this schedule is not meant to be strict.
- April / May: Read UPnP A/V specifications, fully understand them and become familiar with the UPnP A/V concepts and architecture. Learn how to use libupnp. Hack the current VLC UPnP modules and fix the services discovery part in order to get used to writing UPnP features in VLC media player.
- June: Evaluate different approaches, discuss with the team about technology choices and start to design the modules architecture. Implement the ContentDirectory service.
- July: Implement the ConnectionManager and AVTransport services.
- August: Finish what's needed, fix bugs, start to implement the ControlPoint part.
Footnotes
- [1] http://en.wikipedia.org/wiki/Digital_Living_Network_Alliance
- [2] http://en.wikipedia.org/wiki/Freebox
- [3] https://coherence.beebits.net/
- [4] http://pupnp.sourceforge.net/
- [5] http://www.upnp.org/specs/av/UPnP-av-MediaServer-v2-Device-20060531.pdf
- [6] http://www.upnp.org/specs/av/UPnP-av-ConnectionManager-v2-Service-20060531.pdf
- [7] http://www.upnp.org/specs/av/UPnP-av-ContentDirectory-v2-Service-20060531.pdf
- [8] http://www.upnp.org/specs/av/UPnP-av-AVTransport-v2-Service-20060531.pdf
- [9] http://libdlna.geexbox.org/
My progress
Git access
You can checkout my git repository this way:
$ git clone git://git.videolan.org/vlc-mirsal.git
Progress overview
What | WHAT!? | When | Status |
---|---|---|---|
Spec reading | Read the relevant UPnP A/V specifications, understand them fully and eventually become a UPnP A/V semi-god | May | In progress |
libupnp / VLC's upnp sd hacking | Learn how to use libupnp. Hack the current VLC UPnP modules and fix the services discovery part in order to get used to writing UPnP features in VLC media player. | May | In progress |
Modules architecture / design | Find the best way to integrate UPnP features in the current VLC architecture | June | not started |
ContentDirectory service | Implement the MediaServer ContentDirectory service | June | not started |
ConnectionManager service | Implement the MediaServer ConnectionManager service | July | not started |
AVTransport service | Implement the MediaServer AVTransport service | July | not started |
Be late | Finish what needs to (I know I won't manage to stick to the schedule) | August | not started |
Polish | Fix bugs, do performance testing and stuff like that | August | not started |
Bonus: start the ControlPoint device implementation | If time permits ^^ | August | not started |
Wtf am I doing *right now* ?
I'm groking UPnP A/V specs. And they suck hard ;x
I also started hacking the current upnp stuff in VLC