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 typical setup is a home network with:
- A UPnP media server (e.g. Minidlna, Mediatomb, or some commercial device),
- A UPnP control point (e.g. Audionet or Bubble UPnP running on a tablet or phone).
- MPD running on some Linux device (e.g. Raspberry PI hooked up to your bedroom stereo).
- upmpdcli running on the same host, or on any other Linux computer on the network. It will be automatically discovered by the UPnP control point.
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.
- 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.
- Version 0.6.3 fixes seeking. Seeking just did random things in 0.6.2, to the point where it could confuse some control points... Seeking to the last seconds of a track is still a bit risky, see the known problems.
- Version 0.6.2 will retry UPnP initialization until the network is up instead of giving up. This is most useful with wireless configurations where network initialization can take some time.
- Version 0.6.1 brings help for starting the process at boot time, with init.d and systemd control files. It also has a connection manager service to tell the control points about what we can play.
- Version 0.5 improves volume control issues and fearlessly clears the MPD queue by default (added option to not do it too).
- Version 0.4 fixes libupnp configuration compatibility issues and adds friendly name option.
- Version 0.3 got rid of VolumeDB which some control points do not like.
- Version 0.2 improves event management.
- upmpdcli goes 0.1 and gets a github repository
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!).
- Very good too, basic UPnP gapless transitions supported, but no OpenHome :( .
- Works perfectly with upmpdcli too. Bare UPnP only
- 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.
- 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.