An UPnP Audio Media Renderer based on MPD

upmpdcli is a UPnP Media Renderer front-end for MPD, the Music Player Daemon. It supports UPnP gapless track transitions and the OpenHome ohMedia services.


upmpdcli is open-source, free and licensed under the GPL. It is written in C++ and uses the libupnp (1.6) and libmpdclient libraries. As it has few and widely distributed dependancies, it is extremely simple to install.

The latest released version is 0.8.1. See the release notes.

The typical setup is a home network with:

In this usage, MPD does not manage the audio files directly and its configured music directory may be empty. It fetches them from the Media Server through HTTP, using the standard curl input plugin, and does not need a local tags database (it may have one though, and remains available for normal interaction with standard MPD clients).

What's the point ? If you are running a UPnP network with multiple devices, you may prefer using a single control application (UPnP-based) for everything. MPD is a very capable and robust music-playing application, which runs well on small computers (e.g. Raspberry PI or other "plug" type computers). However it needs a specific control application. upmpdcli lets you control your MPD-based players with your UPnP control point.

There are several projects providing UPnP Renderer function on a Linux machine. Because it is written in C++, built on libupnp, and uses the well-proven MPD for the actual hard work, upmpdcli is reliable, lightweight, and effortlessy supports gapless playing. It also supports the OpenHome ohMedia interface, which is currently, in my opinion, the nicest way to control network audio.

Known problems

  • Seeking to the last seconds of a track (esp. a FLAC one apparently) will sometimes crash MPD. This seems to be dependant on a diversity of factors, and you may not experience it at all. If it happens, restart MPD.
  • News

    Version 0.8.1. This has very minor bug fixes and improvements over 0.8.0. It will replace 0.7.1 as the default binary release.
    Version 0.8.0. This improves the handling of the playlist, adding persistence across restarts. See the release notes..
    Version 0.7.1 is released. It includes very small improvements for 0.7.0 and replaces 0.6 in the local packages repository (apt users will get an automatic update next time they apt-get update).
    Version 0.7.0 includes support for the OpenHome Media services.
    Version 0.6.4 allows you to set a few more parameters from the configuration file: interface/ip and port to use for UPnP and MPD password.

    Control points

    After testing a number of UPnP control points, mostly on Android, some work better than others with upmpdcli. Here follow my notes.

    Perfect. I spent quite some time wondering why I had no volume widget until I realized that I had to use the phone/tablet hardware volume controls (the buttons on the side) :). Both basic UPnP gapless transitions and OpenHome are supported. Supports moving the playlist from one renderer to another (nice when you move to another room!).
    Multi-platform OpenHome controller. I mostly tested it on Windows, where it is very nice. You should take care to select the "PlayList" service with upmpdcli, this is not always done automatically, and else Kinsky uses bare UPnP which does not work too well. The Linux version is not ready, and I did not try the Mac one.
    A basic Qt/X11 Control Point which supports both UPnP AVTransport and OpenHome gapless. I'm not sure that it would have won a place here if it was not mine. Anyway it's not like there is much choice of Unix/Linux Control Points...
    Works perfectly with upmpdcli too. Bare UPnP only
    Everything works correctly as far as I can see, but this is a slightly less capable player: no gapless transitions (does not use setNextTransportURI), no way to directly create the playlist from a music directory. The interface is a bit weird and less polished than the first two.
    UPnP Monkey
    Quite a lot of weirdness with this one. Had to suppress the DB volume interface because its presence utterly confused it. Seems to sometimes lose the contact with the renderer. No gapless playing.
    Droid UPnP
    Works ok but simplistic: no playlist, no skip track controls. As far as I can see, can only play one track at a time.


    comments powered by Disqus