UPnP functionality plans

Bart Cerneels bart.cerneels at kde.org
Tue Sep 15 16:10:00 CEST 2009


Dear Amarok dev's

My personal hell month of October will start with a UPnP dev sprint
with the Cohernce developers in Barcelona. I wanted to take the
opportunity to list explain some of the features that are technically
possible with UPnP:

If you are not familiar with UPnP and it's
1) UPnP Collection - playing tracks of a remote UPnP server
I'll be working on a UPnP KIO slave and using that in Amarok. Normal
playback is relatively straightforward (just http:// urls). Making it
play nice with metadata, album art, etc is a bit more work. Then it's
also possible to add metadata and upload new tracks to a UPnP server,
but I don't know of any server that fully supports this yet.

2) UPnP export - exporting our local collection on the network
The easiest way to do is talk to Coherence via DBus. GUPnP also has an
export function listening to a specific DBus interface.
This can also be implemented using scripting.

3) UPnP remote control - Amarok controlled by a remote Digital Media Controller
Can be done directly using a script or indirectly using the dbus API.

4) Remote UPnP playback - Controlling Digital Media Renderer on the network
There are 2 possible implementations I can think of now: using an
alternative enginecontroller and using a PlaylistProvider

a) Aternative enginecontroller:
  Or a plugin for enginecontroller. This would play the tracks in The
Playlist on the remote device using UPnP commands.
2 problems here:
- the enginecontroller is not plugin based.
- There is only one playlist, so only one playback going on at one time.
I also am pretty sure this approach will fail for many DMR's because
they don't all send (reliable) playback notifications. So there will
be no way of knowing when to start the next track.

b) UPnP PlaylistProvider:
When a DMR is detected on the network one of these will be created and
registered with PlaylistManager. By saving the current playlist to
this provider it will start playing on the device. It's possible to
make it a bit more intuitive by creating a new Meta::Playlist category
that is handled differently than the saved playlists. Then we can add
an action in a menu or toolbar "Play on...".
I'm personally in favor of this method for several reasons:
- Using existing infrastructure (Meta::Playlist/Provider/Manager)
- Very well separated from the rest of amarok. Except for the "Play
on..." button everything will be implemented in
"UPnPPlaylistProvider".
- Can cooperate with playlist synchronization (to be implemented) and
dynamic playlists (if it's made compatible with Meta::Playlist). This
will make it possible to play a dynamic playlist on a UPnP renderer.
It's also possible to use The Playlist as the only one providing we
make the trackslist (with updates) available as a Meta::Playlist.

The PlaylistProvider can "filter" tracks that are not playable on the
DMR. This can be because of filetype support or because there is no
way to give access to the tracks. For local tracks the embedded
UPnPServer can be used and for  UPnPCollections it can just use the
uidUrl. It's also possible to add http://, rtsp://, etc.

We should discuss how far we want amarok to reach now we have the code
that makes some of these very advanced features possible, even easy.
In general, not specific to UPnP.

In any case. I've been planning an open source DMR control software
for a while now. And since I now have 2 Philips Steamium NP2500 I'm
expected to by Wendy :).
This doesn't have to be implemented in Amarok though, it would just be
a nice feature that many people will enjoy.
Our competition already does: Windows Media Player 10 and 11 have
integrated DMR control and it's one of the many features in windows 7.
We can do a lot better.

Bart


More information about the Amarok-devel mailing list