Config Media Renderers

This page displays the list of UPnP AV Media Renderers and Chromecast devices detected on your local network.

Chromecast device discovery can be disabled with the disableGoogleCastDiscovery property in configuration.xml.

Turning Chromecast devices into a audio DLNA or OpenHome renderer #

Selecting a Chromecast device, you can transform it into:

  • a DNLA renderer. This is useful for using UPnP/DLNA software to play to a Chromecast device. An example among other is using foobar2000 to play to Chromecast Audio, using either foo_out_upnp or foo_upnp plugins. Or using JRiver Media Center to do the same thing
  • an OpenHome renderer (see next paragraph). As any OpenHome renderers, this brings unattended playback of a playlist of music tracks to Chromecast devices, using an OpenHome controller (BubbleUPnP/BubbleDS, Linn Kazoo, LUMIN). In particular, using Android BubbleUPnP, you can now play a full playlist to Chromecast devices without needing to leave Android BubbleUPnP running (that is, if the music is not on your Android device).

IMPORTANT: you must make sure that TCP port 58050 (or the one you set if different from the default) is not blocked by a firewall or “security suite” for incoming connections from the local network. Otherwise, the Chromecast will not be able to connect to BubbleUPnP Server for streaming (on playback you’d hear a beep but the track would not play).

Audio and video is supported. Transcoding videos is not supported so only video natively suported by Chromecast will play.

Both renderer types support virtually all audio containers and codecs combinations. Combinations not natively supported and playable by Chromecast are transcoded to WAV, preserving samplerate (up to 96kHz for Chromecast Audio) and bitdepth.

The created renderers do not support gapless playback because the underlying Chromecast devices do not support it. If this change at some point, it will be looked into. You can still play gapless using a gapless desktop music player that sends its audio output as a single PCM stream (eg foobar2000 with foo_out_upnp).

It is not recommended to create both a DLNA and OpenHome renderer at the same time. If you do so, make sure to not mix UPnP/DLNA and OpenHome Control Points at the same time as they will fight to control the same Chromecast device and the result will be unpredictable.

Creating OpenHome renderers #

For each renderer you can create a playlist aware OpenHome renderer that you can control with either Android BubbleUPnP or other OpenHome Control Points.

An OpenHome Renderer has the following advantages over a regular UPnP AV renderer:

  • each OpenHome renderer has its own playlist
  • gapless playback is supported when the underlying UPNP AV renderer supports it
  • no need to leave the Control Point running for playlist track advance to happen
  • several OpenHome Control Points (Android BubbleUPnP, Linn Kazoo) can be connected to the same renderer simultaneously, showing the same playlist and playback state
  • create a playing playlist on a device and pick it up later on another device

For example, consider this scenario:

  • with BubbleUPnP Server you create an OpenHome renderer from WMP
  • in Android BubbleUPnP on your phone you select this renderer and make a playing playlist and start playback
  • you exit BubbleUPnP. Playlist track advance is still performed by BubbleUPnP Server
  • sometimes later you launch BubbleUPnP on your tablet (or phone) and select the WMP OpenHome renderer. The initial playlist is displayed

To create an OpenHome Renderer from the selected UPnP AV Renderer just check “Create an OpenHome renderer”. A new UPnP Device will appear on the network named after the UPnP AV Renderer’s name with “(OpenHome)” appended. For example if you select a Windows Media Player Renderer called “bob (MYPCNAME: Windows Media Player)”, then the newly created OpenHome Renderer will appear as “bob (MYPCNAME: Windows Media Player) (OpenHome)” in Android BubbleUPnP.

An OpenHome renderer has two optional parameters that you can modify:

Room: the physical room where your renderer is located. Limited to 20 characters

Name: the name of the renderer within the room. Limited to 20 characters

Gapless playback: enable music gapless playback (see below)

Room and Name are ignored by Android BubbleUPnP. However they are used by other OpenHome Control Points such as Linn Kazoo to get the full name of the renderer which will usually be “Room: Name”.

OpenHome Gapless playback #

Enabling gapless playback has several benefits:

  • the obvious one is to be able to play gaplessly gapless albums like “Dark side of the moon”
  • a less obvious one is to reduce gaps between non-gapless tracks streamed from the cloud (Dropbox, Google Music, etc). The next track to be played is buffered in advance making possibly long buffering unnoticeable on next track transition

Gapless playback can only be enabled on renderers on which it may work.

Enabling it is not a guarantee that it will work. If gapless playback works in Android BubbleUPnP with the regular UPnP AV renderer, it should work with the OpenHome renderer managed by BubbleUPnP Server.

Non-exhaustive list of renderers tested working:

  • Denon DNP-F109 (and possible variants)
  • Cambridge Audio Stream Magic 6 (with latest firmware)
  • Simaudio Moon Mind 180D
  • Electrocompaniet ECI-6DS
  • foobar2000 (with foo_upnp)
  • JRiver Media Center (playlist track reordering is buggy)
  • gmrender-resurrect

If gapless playback does not work or if track advance fails, disable this setting.

NOTE: Changing this setting takes effect when next track is played.

Audio decoding to PCM (FFmpeg) #

BubbleUPnP Server can optionally provide audio decoding to PCM for OpenHome renderers for the following use cases:

  • ability to play audio formats/codecs not supported natively by the underlying UPnP AV renderer
  • doing ReplayGain processing to audio
  • enforce restrictions of the underlying UPnP AV renderer such as maximum supported samplerate, conversion to stereo for multichannel audio, conversion from 24-bit audio to 16-bit

Since audio is just decoded to PCM and there is no recompression to a lossy format, there is no loss of audio quality (if you exclude possible resampling and bitdepth reduction). Here’s a description of each setting of this section:

Decode audio to PCM for

Select when PCM audio decoding must be performed. The default is to only perform it for audio that cannot be played natively by the renderer. Other choices are to disable it entirely or to enable it for all audio. Note that when PCM audio decoding is enabled, it will also be performed for enforcing max supported samplerate and other renderer constraints. That is, for example, it will be performed if you play an audio track whose samplerate is greater than max supported samplerate.

Audio format

This is the format container that will be used to stream PCM audio to the renderer. Choices are ‘Auto’ (default), ‘WAV’ and ‘LPCM’. ‘Auto’ chooses automatically between WAV of LPCM, depending on input audio and renderer support for either of these containers. WAV is preferred unless the renderer claims to not support it or if the stream has no finite duration (eg Internet radio). It is recommended to leave this setting set on ‘Auto’, unless it does not work in which case WAV or LPCM can be forced to see if one or the other works.


Change this to enable ReplayGain processing either in Album or Track mode. When ReplayGain processing is enabled, audio will be decoded to PCM only if ReplayGain info is found in tags.

Audio Filters #

Allow to specify FFmpeg audio filters to apply, for example for equalizing or room correction.

Syntax: [filtergraph] [convOut=filter-file-path afir_spec]

If there is a syntax error in the audio filter statement, no audio will play. You can debug/troubleshoot it looking at FFmpeg error output in log file BubbleUPnPServer.log.

filtergraph is an optional simple or complex audio filter graph for applying audio filters. It must not modify the stream size in bytes (that is: not altering duration / samplerate / bitdepth / channel count) can be specified. The filtergraph is just passed to the -filter_complex option of FFmpeg, so refer to its documentation

Example of simple filter: equalizer=f=1000:t=h:width=200:g=-10

The optional convOut statement can be used to specify a convolution filter to apply for example for room correction.

filter-file-path is a fully qualified path to the convolution filter audio file (usually a WAV file), or several files using file expansion (*)

For example:

single file: C:\Users\bob\Convolution\convolution.wav

multiple files: C:\Users\bob\Convolution\conv*.wav

If filter-file-path expands to multiple files, the file whose samplerate matches exactly the input audio samplerate will be used.

In both cases, if a convolution file does not match exactly the input sample rate, the closest samplerate is used.

afir_spec is an afir filter statement

Example of convOut statement: convOut=C:\Users\bob\Convolution\conv*.wav afir=gtype=gn (gtype option requires FFmpeg >= 4.1)

Max supported samplerate

This is the max supported samplerate supported by the underlying UPnP/AV renderer. This setting will force PCM decoding whenever the samplerate of the playing track is higher than the specified max supported samplerate.

Downmix multi-channel to stereo

Converts multi-channel audio to stereo. If enabled, this will force PCM audio decoding for any multi-channel track.

Convert 24 bit to 16 bit

Converts 24 bit audio to 16 bit. If enabled, this will force PCM audio decoding for any track whose audio is 24 bit. 24-bit LPCM is only supported if the underlying renderer explicitly claim to support it (presence of audio/L24 in the mime-types it claims to support).

Controlling OpenHome renderers #

To control an OpenHome renderer you cannot use a regular UPnP AV Control Point. You need an OpenHome Control Point: