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. With a complementary application, it also supports a Linn Songcast Receiver.

The Songcast function allows you to implement a well-synchronized multi-room system to which any audio (Spotify, etc.) playing on a Windows or Mac system can be forwarded.


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 reasonably simple to install.

The latest released version is 0.12.0. 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). If you want to use a native MPD client, upmpdcli is not what you want. See the alternative approaches for MPD/UPnP integration.

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 the nicest way to control network audio.

Known problems

  • The relatively wide usage of upmpdcli and other UPnP mpd front-ends have intensified the testing of the mpd HTTP input plugin quite a lot (because that's how the data is pulled when using UPnP). This has lead to the correction of a number of bugs and bad interactions between the curl input plugin and some decoder plugins. These fix problems (bad sound, clicks, pops, up to pseudo-white-noise) which may depend both on the track format and bitrate. As far as I know most or all these problems are fixed in the current MPD versions, but, unfortunately, many common Linux distributions lag quite a bit behind current MPD versions. I have set up backport repositories for recent MPD releases for Debian and Ubuntu in hope that they may help with these issues.
  • 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

    Release 0.12.0 uses a new feature in libupnpp 0.12.0 to suppress error messages which appeared with 0.11 when UPnP AV was turned off.
    Release 0.11.2 adds an upnpav configuration variable which allows turning off UPnP AV services to keep a pure OpenHome renderer. Doing this fixes Linn Kinsky issues.
    Release 0.11 includes support for setting up multi-room audio systems with Songcast
    A recent commit to sc2mpd seems to fix 24 bits Songcast sound for me. See the sc2mpd documentation for more information. Note: if you want to use this from a Mac, you will need mpd 0.19 configured with --disable-audiofile.
    libupnpp version 0.10.0 is released. Only the control side is enhanced to help supporting pure OpenHome renderers. This is used by upplay and has no consequence for upmpdcli. The packaged versions of upmpdcli keep using libupnpp 0.9.0 which can be installed along with 0.10.0 (packaged as libupnpp1).
    Version 0.9.0. Release notes. This version mainly brings support for the Songcast protocol, with help from the sc2mpd auxiliary process. See the sc2mpd documentation for more information.
    Version 0.8.6. Very small improvements. This will be used to update those Debian packages which are still at 0.8.1 (Raspberry Pi). Due to the package structure change, you will need to use "apt-get dist-upgrade" to perform the upgrade.
    Version 0.8.5. There are no real changes in this, we only split the libupnpp library from the main upmpdcli code. Release notes.
    Version 0.8.3. Minor bug fixes and improvements over 0.8.2. Mostly needed if you use upplay (again).
    Version 0.8.2. Minor bug fixes and improvements over 0.8.1. Mostly needed if you use upplay.
    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.

    Android Control Point. Perfect. 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!).
    Tested on Android. Recent versions (07-2015) work fine with upmpdcli (this was not the case a few months ago).
    Other Android players
    All the ones I tried (a dozen) are very bad in one way or another, and sometimes in many ways. Most sort of work. Seriously, if you are using Android, try Bubble, it has a free edition (limited to 16 tracks in the playlist), it's the only good one. I only wished they did not change the UI so often. I have no affiliation whatsoever with Bubble, and get nothing in exchange of this recommandation. UPDATE: PlugPlayer seems to now also be a good choice.
    Multi-platform OpenHome controller. I mostly tested it on Windows, and Android, where it is very nice. You should either use upmpdcli 0.11.2 (or newer) and the upnpav = 0 configuration option (recommended) or take care to select the "PlayList" service with upmpdcli. Kinsky thinks that it can use UPnP AV, but it's being a bit optimistic... The Kinsky Windows pointer seems to be gone from the main download page. Packages here.
    is a nice iOS OpenHome controller. It caches all the Content Directory Metadata locally and reorganizes it, which will not be to everyone's taste (no way to see the folder structure for example). Still it's free and very good if you can work with this approach.
    Multi-platform OpenHome controller, the much improved replacement for Kinsky. upmpdcli versions older than 0.9.0 have a bug which send Kazoo in a loop when the Playlist is empty, you need to add at least one track with another CP, or better, switch to 0.9.0 or newer. Kazoo is still a bit quirky (recently lost the ability to play all tracks from a directory...), and... Update 07-2015: later versions of Kazoo don't work with upmpdcli. I'm not sure that they work anymore with any non-Linn renderers actually.
    A simple UPnP audio Control Point Qt/X11 application which supports both UPnP AVTransport and OpenHome gapless. Upplay is not beautiful, but it has many useful functions, and there are very few other Control Points for the Unix/Linux desktop. It has been ported to Windows recently, more for the fun of it than to compete with the native solutions.
    This is a Windows application, which works perfectly with upmpdcli too, but it only supports bare UPnP (no OpenHome support).


    comments powered by Disqus