SoC 2008/UPnP

From VideoLAN Wiki
Jump to navigation Jump to search
This project is part of Google Summer of Code 2008.
Student: Mirsal Ennaime
Mentor: Rafaël Carré
soc_header.png




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

My progress

Progress overview

What WHAT!? When Status
Spec reading Read the relevent 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 not started
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



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.

Wtf am I doing *right now* ?

I'm groking UPnP A/V specs. And they suck hard ;x