Latest version: 0.9-update31 (December 22th 2018) (full Changelog history)


All installers always install the latest version unless stated otherwise.

Important: to access configuration after installation, do not use Internet Explorer or Microsoft Edge as they are not supported due to missing functionality. Instead, use any other web browser: Firefox, Chrome, Safari, ...

Report issues, get support and leave feedback on XDA.

What is BubbleUPnP Server ?

BubbleUPnP Server provides new services, many of them running on top of your existing UPnP/DLNA and Chromecast (Google Cast) devices: BUBBLEUPNP SERVER IS NOT AN UPNP AV MEDIA SERVER.

Unless BubbleUPnP Server is used only for use with Chromecast, it requires at least one working UPnP AV Media Server or Media Renderer to do something useful.


Chromecast can only play a few supported media formats and codecs.

BubbleUPnP Server can:

If you are using BubbleUPnP Server only with Chromecast, go here.

Internet streaming and downloading

BubbleUPnP Server makes your LAN Media Servers available to Android BubbleUPnP, for streaming over mobile (3G/4G) and WiFi connections, with the following advantages: This functionality can also be used on a regular LAN, for example to bypass regular UPnP SSDP device discovery in the rare cases it is not available for whatever reason (blocked by a firewall, UDP multicast disabled at the router level, ...).

Internet UPnP tethering

Using Android BubbleUPnP or BubbleUPnP Tether client, you can make your Media Servers from your home local network visible on another LAN to any UPnP AV devices of this LAN (TV, Control Points, ...).

To illustrate this functionality consider this scenario:

Suppose you have a Twonky server at home (replace Twonky with your favorite Media Server) and you go visit a friend who has a brand new UPnP/DLNA device connected to his stereo and a Windows 10 PC with Window Media Player. Using your Android device and BubbleUPnP you can push music from your Twonky Server to his stereo.

With UPnP tethering you can do the same using the "Play to" functionality of Windows Media Player. In short, your Android device makes your home Twonky server visible to Windows Media Player on your friend's network. This is UPnP tethering.

LAN Media Server proxying

Many Media Servers have bugs and sometimes return incorrect data which can prevent them from working fully with some UPnP Software. BubbleUPnP Server can create a "proxy" Media Server (associated to a real Media Server on your LAN), that will attempt to convert incorrect data into correct data. Data is always reformatted in a more compact format with the benefit of speeding up browsing on slower devices. Except for this difference, the proxy Media Server acts exactly as the real Media Server it is linked to.

Another possible use of proxying is to solve potential Media Servers discovery issues in your network with some UPnP software. As long as BubbleUPnP Server is able to discover your Media Server, it can create a proxy Media Server which in turn has more chance to be discovered by UPnP software.

Persistent and shared playlist for UPnP AV Renderers (OpenHome)

Video showing that feature (courtesy of Stephen Philips)

When operating an UPnP AV Renderer, the playlist of audio tracks resides on the Control Point which must remain running for playlist track advance to happen. It has 2 main drawbacks:

To tackle these issues, the OpenHome Playlist specification addresses the deficiencies of UPnP AV, adding the ability for an OpenHome Renderer to store and manage its playlist. It can advance playback by itself without requiring a Control Point to be running. Several OpenHome enabled Control Points can be connected to the renderer, sharing the same playlist. Any playlist change on one Control Point is immediately reflected on the others.

BubbleUPnP Server makes it easy to create an OpenHome renderer from any exisiting UPnP AV Renderer (WMP for example). Refer to this section for more information on how to create and control an OpenHome Renderer with Android BubbleUPnP or other OpenHome Control Points.

Download and installation


BubbleUPnP Server can run on any platform where Java 7 or higher is available (latest Java 8 recommended). This includes:

IMPORTANT: if after install you cannot connect to the web interface, refer to the troubleshooting section.


You have the choice between these two installers depending on if you want to run BubbleUPnP Server for a single-user or for all users as a Windows Service, and other considerations. Here are the differences:

run as single user

run as Windows Service

At the end of the installation process, BubbleUPnP Server should be running. The installer will launch your web browser to configure it. You can also connect to it pointing your web browser to http://localhost:58050, launch the Desktop shortcut or use the tray menu entry (single user version). If the Web Browser cannot connect to BubbleUPnP Server, refer to the troubleshooting section.

You can safely install the single user installer over a service install (and vice versa, a new install entirely replacing the other) but the configuration will be reset to default (including the login/password for remote access).


IMPORTANT if running under macOS Sierra

Look at /etc/hosts and make sure your computer local hostname is listed:       <hostname>.local
::1             <hostname>.local
Where <hostname> is you local hostname. If these 2 lines are missing, edit the file as root and add them. Without this, BubbleUPnP Server will run but will be much slower that normal.


First, verify that Java 7 or higher is installed on your Mac. If necessary install it from here.

To install BubbleUPnP Server, start a Terminal window, paste the command below, and follow instructions (it will first ask for your admin password):

curl -s | sudo sh - 
If you wish to later uninstall BubbleUPnP Server, enter this command:

curl -s | sudo sh - 
Once installation is complete, BubbleUPnP Server is running as a Launch Daemon process that is started on boot. You can configure it with the Launchpad icon or via any web browser pointing to the server.

Controlling the server

You can stop the server with:

sudo launchctl stop bubbleupnpserver 

And start it with:

sudo launchctl start bubbleupnpserver 
If you wish to disable the server (it will not start on boot):

sudo launchctl unload -w /Library/LaunchDaemons/bubbleupnpserver.plist 

And to reenable it with:

sudo launchctl load -w /Library/LaunchDaemons/bubbleupnpserver.plist 

You can also do all of the above graphically with LaunchControl. BubbleUPnP Server is found in the "Global Daemons" category.

Where is BubbleUPnP Server installed ?

Ubuntu and Debian Linux

For Debian, skip the PPA instructions and follow the manual package installation instructions.

Using the Ubuntu PPA

Ubuntu packages are provided in a PPA repository for easy updates. The server is managed as an upstart job on Ubuntu prior 15.04 (Vivid) or as systemd service since Vivid.

First you must ensure that Java 7 or higher is installed:

$java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
If Java is not installed, the easiest way is to install the Oracle Java 8 JRE via the webupd8team PPA:
$sudo add-apt-repository ppa:webupd8team/java
$sudo apt-get update
$sudo apt-get install oracle-java8-installer
Although the Oracle JRE is preferred, the OpenJDK 7 or higher should also work:
$sudo apt-get install openjdk-7-jre-headless

To install the BubbleUPnP Server PPA package

$sudo add-apt-repository ppa:bubbleguuum/bubbleupnpserver
$sudo apt-get update
$sudo apt-get install bubbleupnpserver
Note: The bubbleupnpserver package may not be available in the PPA if your distro is not an LTS version and too old. In that case, refer to manual package instructions after this section.

Installing the package manually

For Ubuntu versions using systemd (>= 15.04 "Vivid") or Debian versions using systemd (>= Debian 8 "Jessie"):

$sudo dpkg -i bubbleupnpserver_0.9-5_all.deb
For older versions of Ubuntu or Debian using upstart:
$sudo dpkg -i bubbleupnpserver_0.9-2_all.deb

After install the server should be running. Connect to it with your web browser: http://localhost:58050 (from your Ubuntu machine) or http://<server LAN ip>:58050 (from another machine on the LAN).


Arch Linux

Download the package from the AUR and extract it to a temporary directory. Alternatively, use a tool such as cower to download and extract the package automatically:
$cower -d bubbleupnpserver
Change to the temporary directory:
$cd /tmp/bubbleupnpserver
Run makepkg to download, build, and install the package:
$makepkg -si
Follow the prompts and onscreen instructions to begin using BubbleUPnP Server.

NOTE: the source of the package is available on github

Synology NAS

Download Synology package

If you are running DSM 6.0, you must install Oracle Java 8 (OpenJDK is installed by default but doesn't work fully with BubbleUPnP Server). To do this, follow these instructions from the MinimServer documenation.

Make sure 'User Home Services' is enabled (in DSM: Control Panel > User > Advance, 'Enable user home services'). Without this, BubbleUPnP Server will not start.

If you get error "This package does not contain a digital signature" after selecting the .spk package, open Package Manager, click Settings. In 'General', set the Trust Level to 'Any Publisher'

It is recommended to install Optware-ng's ffmpeg binaries to replace Synology default ones which are missing some features (notably no support for: video transcoding, https, Sox resampling, ffprobe).


First, make sure you have Java 7 or higher installed and working.

It is recommended to install Optware-ng's ffmpeg binaries to replace QNAP default ones.

If you are running QTS 4.1 or higher, download the QTS 4.1+ package

Otherwise, install one of these packages and read detailed instructions here

Alternatively you can follow the "Other Java platforms" section below for manual install.


Optware-ng is a package repository for many architectures runnning a Linux kernel: hard-float ARMv7, I686, PowerPC 603e and soft-float ARMv5, ARMv7 EABI, MIPSEL and PowerPC e500v2 targets

It can be used to install BubbleUPnP Server on any of these platforms, such as: Raspberry Pi, NASes, routers, custom devices, ...

Optware-ng provides full featured ffmpeg binaries for use with BubbleUPnP Server, installed alongside the BubbleUPnP Server package.

To install the BubbleUPnP Server package:

  1. launch a command shell
  2. install Optware-ng corresponding to your hardware, following these instructions
  3. install the BubbleUPnP Server package:
    ipkg install bubbleupnpserver-installer
  4. At this point, BubbleUPnP Server should be running. Depending on the CPU speed, it could take up to 2 minutes to fully start. Once fully started, connect to http://ip_address:58050 to configure BubbleUPnP Server (NOTE: connecting to BubbleUPnP Server via https is very slow an unusuable due to an OpenJDK issue. Always connect using http)
BubbleUPnP Server is installed in /opt/share/bubbleupnpserver and this is where the log file is located.

To stop BubbleUPnP Server:

/opt/bin/bubbleupnpserver stop
To start BubbleUPnP Server:
/opt/bin/bubbleupnpserver start

Install ffmpeg binaries with Optware-ng

This step is not necessary if BubbleUPnP Server was installed via Optware-ng.

Many ARM NASes and devices either do not have ffmpeg available or have a version that is outdated and/or missing some features. For example, stock ffmpeg on Synology DSM 6 is missing video transcoding support, and ffprobe (used by BubbleUPnP Server to analyse audio/video) is not bundled.

The solution is to install ffmpeg binaries using Optware-ng. These binaries fully support all BubbleUPnP Server features:

  1. launch a command shell
  2. install Optware-ng corresponding to your hardware, following these instructions
  3. install the ffmpeg package:
    ipkg install ffmpeg
  4. Restart BubbleUPnP Server to make it automatically pickup Optware-ng's ffmpeg (requires at least 0.9-update19)

Android 4.1+

Changelog v1.11 (Aug 11th 2018)

Changelog v1.1 (Aug 9th 2018)

Download APK (v1.11)

As BubbleUPnP Server is meant to run continuously, an Android device always plugged to power is necessary in most uses cases. Always prefer running BubbleUPnP Server on a PC if you can.

BubbleUPnP Server on Android has all the features of the PC/NAS version. The only limitation is that CPUs are less powerful on Android than on PC, which may be too slow for heavy video transcoding.

BubbleUPnP Server can run on any Android device running Android 4.1 or higher. The APK is a small launcher for the BubbleUPnP Server core whose latest version will be downloaded on first run.

As BubbleUPnP Server on Android is not distributed through Google Play, it will send a notification whenever a new updated APK is available. However, the BubbleUPnP Server core updates itself automatically by default, like the PC/NAS version.

IMPORTANT: if running BubbleUPnP Server for Android, make sure to stop any other BubbleUPnP Server instance on your network.

Other Java platforms (Linux, Raspberry Pi, NAS, ...)

Download BubbleUPnP Server

BubbleUPnP Server is distributed as an archive containing a jar file.

  1. unpack the archive in a directory
  2. on unix platforms make executable: chmod +x
  3. on unix platforms run, on Windows run launch.bat. Java 7 or higher must be installed and the "java" executable must be in your PATH
  4. point your Web Browser to http://localhost:58050 to show the configuration interface
  5. for Internet access with Android BubbleUPnP, configure your firewall / Router NAT to allow access to TCP port 58050 (see server configuration below)
If you want transcoding support you will need to install ffmpeg on your system.

Alternatively you can run the server with:

java -jar BubbleUPnPServerLauncher.jar


If you are using BubbleUPnP Server only for Chromecast transcoding, go here.

The core of BubbleUPnP Server is a Web Server running on port 58050 by default for HTTP and on port 58051 for HTTPS.

The server must be accessible from the Internet on this port (LAN proxying functionality does not require this). The Windows Installer will try to auto-detect network settings so the server is usable straight away adding the required firewall and NAT rules, but this might not work in all network setups.

The configuration front-end is divided into 6 tabs:


This page displays a summary of the server operational status and has all information required to configure Android BubbleUPnP:

If "Server is reachable from Internet" is displayed, everything is fine and BubbleUPnP Server is ready to use for remote access.

Otherwise something is preventing the Internet to connect on the HTTP or HTTPS port. This will likely be a NAT or firewall issue. For example, if the public HTTP port is 58050 and the LAN IP Address displayed is

IMPORTANT: if you use HTTPS access, the HTTP port must still be open as it is still used for media streaming requests only.

Configuring a custom TLS certificate

By default, BubbleUPnP Server uses its own self-signed TLS certificate for https access.

You can replace it by your own certificate by modifying configuration.xml. Certificate must be signed by an official certificate authority (CA), commercial or not. Self-signed certificates are not supported. The hostname (or domain wildcard) of the certificate must correspond to the hostname of the machine on which BubbleUPnP Server runs.

Use the TLSCertficateChainFiles statement to specify a comma-separated list of certificates, starting mandatorily with the server's certificate and optionally followed by any number of intermediate certificates in correct order up to the (non-listed) root CA certificate. here's an example pointing to apache certificates:

Similar to Apache and other popular web servers, all certificates are text files in PEM format. Each certificate file must contain one and only one PEM certificate starting with -----BEGIN CERTIFICATE----- and ending with -----END CERTIFICATE-----. If you have a certificate file containing several of these sections concatenated, you will have to split it in as many separate files and specify them all in order in TLSCertificateChainFiles.

If you forget to list intermediate certificates, it is likely that you can load the web ui via https in a web browser (if the browser includes the missing certificate), but connecting via https in Android BubbleUPnP will likely fail.

Once the certificate chain is set, you must specify a certicate for the server's private key using the TLSCertificateKeyFile statement. Again, here's an example pointing to an Apache private key:

The private key certificate is in PEM format as well and starts with -----BEGIN PRIVATE KEY-----.

Make sure all certificate files have the proper filesystem permission so BubbleUPnP Server can read them. Special care must be taken for the private key certificate as it should not be world readable: on Unix it should only be readable by root (if BubbleUPnP Server is running as root), on Windows it should only be readable by the Administrator account.

Once these modifications are done, restart BubbleUPnP Server and open its web configuration via https. If it works, your certificate likely loaded properly. To verify it, check the certificate chain in the web browser using the padlock icon next to the URL. If you cannot connect via https, connect via http and look for an error in the Status tab.

Network and Security

In this page you can set the login and password that you will use to connect to the server:

If you are using a dynamic DNS service because your ISP changes your IP address at regular interval, you can change the public hostname to your stable dynamic DNS hostname.

If option "Allow to access server from the Internet" is disabled, the server will deny all Internet connections. If you plan to use BubbleUPnP Server with Android BubbleUPnP, you must enable this setting.

If option "Allow to configure the server from the Internet" is enabled, these credentials are also used to connect to the configuration web interface from the Internet. By default this option is disabled and the configuration web interface is only accessible on the LAN.

If option "Enable media access log file" is enabled, all media streaming connections will be logged to the access_log.txt file found in the installation directory.

Media Servers

This page displays the list of Media Servers detected on your local network. For each Media Server you can configure:

When a proxy Media Server is created, a new Media Server with the same name will appear on your LAN with "[proxy]" appended to the name. For example if you have a Media Server named "Awesome" then a new one called "Awesome [proxy]" will appear. You can connect to it with any UPnP software like you would connect to "Awesome".

Media Renderers

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

Turning Google Cast devices into a audio DLNA or OpenHome renderer

Selecting a Google Cast device, you can transform it into:

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

Both renderer types support virtually all audio containers and codecs combinations. Combinations not natively supported and playable by Google Cast 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 Google Cast 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 OpemHome Control Points at the same time as they will fight to control the same Google Cast device and the result will be unpredictable.

Google Cast device discovery can be disabled with the 'disableGoogleCastDiscovery' property in configuration.xml.

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:

For example, consider this scenario:

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 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:

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:

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:

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.

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:

Untested Control Points: ChorusDS (iOS, MAC), Konductor (iOS), PlugPlayer (iOS), SongBook DS (iOS), SongBook Mac.

Android BubbleUPnP and Linn Kazoo on Windows both showing the same playlist and playback state, playing to foobar2000 as an OpenHome Renderer:


This page contains additional settings.


foobar2000 remote access

These settings are used when connecting with foobar2000.

Chromecast transcoding

Installation and setup

First, you must determine on which machine of your network to install BubbleUPnP Server. In most cases it will be a desktop computer or a NAS.
If you plan to transcode videos, you will need a powerful CPU or a supported GPU for harwdware accelerated transcoding. A fast PC is recommended for pure software transcoding, especially for 1080p video. Many NAS will not be powerful enough (save for the most powerful ones).
If you need to transcode only audio (including just audio in videos), any machine should be able to handle it.

The easiest way is to install BubbleUPnP Server on a Windows PC or on Ubuntu Linux (PPA package). It includes everything you need for Chromecast transcoding straight away, without requiring to configure anything. Just install it and it will be ready for use.

On other platforms, you must check these additional requirements:


A working ffmpeg binary is required. The ffmpeg version must not be too old (at least v1.0) and the more up to date it is, the better.

A working ffprobe binary is optional. If a local ffprobe binary is not found, ffprobe will be called from the cloud, requiring that BubbleUPnP Server is passing the connectivity test succesfully.

The downloaded ffmpeg/ffprobe binaries must be executable:

chmod +x ffmpeg
chmod +x ffprobe

Whenever you update the ffmpeg/ffprobe binaries, you must restart BubbleUPnP Server for the change to take effect.

You can check what version of ffmpeg is used by looking at the BubbleUPnPServer.log.0 log file.

For full functionality, ffmpeg must include mp3 encoding support (libmp3lame), H264 support (libx264), Matroska support (libmatroska).

For transcoding media from Google Drive and more generally https streams, ffmpeg must be compiled with the https protocol (ffmpeg -protocols). That is often not the case with static builds of ffmpeg found online.

Playing media with Android BubbleUPnP

Android BubbleUPnP automatically detects BubbleUPnP Server on your network for Chromecast transcoding duties.
There is no need to manually enter connection settings (unless you want to transcode to Chromecast outside your local network).

When BubbleUPnP Server is detected, 'Settings > Chromecast > Current transcoding method' will state so and display BubbleUPnP Server's ip address.

Simply play any media to Chromecast normally. BubbleUPnP Server will perform transcoding in the background if and only if necessary. If the media cannot be transcoded or if there is any error, the original media will be forwarded as is to the Chromecast and might not play at all or partially (ex: video but no audio).

For best quality, BubbleUPnP Server only transcodes what is required: audio or video or both. For example, a MKV containing H264 video and DTS audio will be transcoded to a MKV containing the unmodified H264 video and the DTS audio track transcoded to MP3. In some cases, audio and video are both untouched and just remuxed in a different container.

Standalone audio (eg FLAC, WMA, ...) is always transcoded to WAV, with no loss of quality.

Transcoding media outside the local network

It is possible to use transcoding features for use on the go, when you are not connected to your home local network. For example, if you visit a friend with your Chromecast and want to play on his TV a video that requires transcoding.

In that case, you must manually enter BubbleUPnP Server connection settings as explained here. When a remote BubbleUPnP Server is used, Settings > Chromecast > Version will show its ip address or hostname.

For technical reasons, only media reachable from the cloud can be transcoded by the remote BubbleUPnP Server. It includes:

Any media that resides on your Android device or your friend's local network cannot be transcoded by BubbleUPnP Server, because it cannot be reached.

Depending on the download bandwidth available on the target network and the upload bandwidth of your home network, you may have to decrease "Max video bitrate" substantially for the video to play smoothly (not stutter due to insufficient bandwidth).

GPU hardware accelerated video transcoding

BubbleUPnP Server can use your GPU to accelerate video transcoding with the following benefits:

OS and GPU requirements

ffmpeg requirement

A recent version of ffmpeg (v3.3+ recommended) compiled with proper GPU and hardware acceleration support is required. The ffmpeg version installed with Windows, macOS and Linux (Ubuntu package) installers fit this requirement.

Linux specific setup

You must use these ffmpeg binaries compiled (by me) with NVIDIA (tested) and Intel QSV support (untested). Most other precompiled (or stock distro) ffmpeg Linux binaries either do not have this support or are buggy (crash). Download and unzip into the BubbleUPnP Server installation directory (where BubbleUPnPServer.jar is found), and restart BubbleUPnP Server. Note that the Ubuntu BubbleUPnP Server package automatically installs these binaries (since 6/10/2017).

These ffmpeg binaries require a 64-bit Linux install and at least glibc version 2.15. This should be the case, as glibc 2.15 was released in early 2012 and most Linux distributions released after that date have newer versions of the glibc.


You need at least version 378.13 of the NVIDIA binary drivers.

You can check your current driver version with

$cat /proc/driver/nvidia/version
If you have installed the NVIDIA binary drivers from your distro repository (Ubuntu notably) they may be older and will not work with ffmpeg. In that case you will have to manually download and install NVIDIA drivers v378.13 or higher from their site, following carefully installation instructions.

Intel QSV:

You need to have the proper Intel drivers installed as well as the Kernel supporting QSV. The ffmpeg build has Intel QSV support (for CPUs limited to: Haswell, Broadwell, Skylake) but it is currently untested.


BubbleUPnP Server will automatically attempts GPU transcoding if the requirements are met. Otherwise, or if GPU transcoding fails for whatever reason and nothing was transcoded yet, BubbleUPnP Server will fallback to software transcoding.

To check if your setup is suitable for GPU transcoding, you can perform a transcoding test in 'Settings > Chromecast Transcoding'.

You can disable GPU transcoding entirely by unchecking 'Settings > Chromecast Transcoding > Use GPU hardware accelerated transcoding'. It is recommended to leave it enabled unless you really prefer software transcoding, or to perform comparisons between software and GPU transcoding.

BubbleUPnP Server can perform either a full (decode+encode) or partial (encode only) GPU transcoding, depending on the input video and GPU features. GPU decoding support is as follow:

All GPU encoding is done using h264 which is universally supported.

Only one GPU transcoding task is possible at the time. If BubbleUPnP Server must handle a new transcode while a GPU transcode is already active, it will fallback to software transcoding for that new transcode.

How can I determine GPU support for my setup ?

Start the BubbleUPnP Server web config, go into 'Settings > Chromecast Transcoding' and tap the 'Peform GPU transcoding test' button. After a few seconds (up to a minute), it will display if GPU transcoding is supported and if the case which GPU is used and its support for decoding various codecs.

How can I tell if GPU transcoding is used ?

  1. Play with Android BubbleUPnP a video to your Chromecast that you know requires transcoding.
  2. While the video is playing, In the BubbleUPnP Server web config, perform the GPU transcode test in 'Settings > Chromecast Transcoding'.
  3. => It should fail doing the test and report "GPU is currently in use".

How can I measure the gain of GPU transcoding (vs software transcoding) on CPU usage ?

Follow these instructions to first check CPU usage with pure software transcoding, then with GPU transcoding:

  1. start the BubbleUPnP Server web config and disable GPU transcoding by unchecking 'Settings > Chromecast Transcoding > Use GPU hardware accelerated transcoding'
  2. start Android BubbleUPnP
  3. in Android BubbleUPnP settings, verify that BubbleUPnP Server is recognized for transcoding in 'Settings > Chromecast'
  4. play a video that you know requires (video) transcoding to your Chromecast, or temporary force transcoding in 'Settings > Chromecast > Force transcode' (do not forget to disable it later!)
  5. On the machine that runs BubbleUPnP Server, monitor the ffmpeg process CPU usage (as ffmpeg performs pure software transcoding)
  6. Now, in BubbleUPnP Server web config enable 'Settings > Chromecast Transcoding > Use GPU hardware accelerated transcoding'. If using Android BubbleUPnP 2.8.10+, verify that 'Settings > Chromecast > Use GPU transcoding' is enabled
  7. play the same video and monitor the ffmpeg process CPU usage (as ffmpeg may now use GPU transcoding if possible)
  8. => if GPU transcoding is effective, CPU usage should be much lower in the second play. Note that if partial (encode only) GPU transcoding is performed, ffmpeg CPU usage can still be high. When full (decode+encode) GPU transcoding is in effect, CPU usage should be very low

Troubleshooting video stuttering issues

First, it is important to understand that some videos have very high bitrates requiring too much network bandwidth that the Chromecast WiFi cannot handle, causing stutter.

And unlike wired networks such as Ethernet, WiFi is bad at sustaining stable bandwidth over time: it is usually very spiky and irregular.

For best performance and for media not stored on your Android device, make sure that the machine running your UPnP/DLNA Media Server managing your media use a wired (Ethernet) connection to your WiFi router. If that is a PC or a NAS, make sure that it is not connected through WiFi as this will degrade network performance for streaming significantly.

Videos causing stutter will be in most cases high definition videos such as 1080p. Most cameras on current phones take 1080p videos at very high bitrates and enter in the problematic category.
Stuttering can start to apppear with video bitrates higher than 8000 Kbps (1000 KB/s) and maybe even lower depending on the WiFi quality.

To reduce network bandwidth and eliminate stutter, BubbleUPnP can force transcode videos whose bitrate is higher than a user configured bitrate (the "Max video bitrate" setting).
For example, suppose you play a 1080p h264 video whose bitrate is 16000 Kbps. If "Max video bitrate" is set to 8000 and "Enforce max bitrate" is enabled, this will force a reencode to 8000 Kbps, because 16000 > 8000.

But transcoding a video to reduce network bandwidth can potentially cause stutter if the CPU is not fast enough to perform the transcoding. Transcoding a 1080p video requires a lot of CPU power and most current PCs are able to handle it. But if the CPU is not fast enough, video will stutter because it cannot be transcoded fast enough.

To troubleshoot stutter issues, follow these steps for a possible solution:

On the machine running BubbleUPnP Server, monitor the ffmpeg process CPU usage (using the task manager on Windows), while the stuttering video is playing:

  1. the ffmpeg process is not running (no transcoding is performed)

    The cause of stuttering is that the video bitrate is too high.

    • Make sure "Enforce max bitrate" is enabled
    • lower "Max video bitrate" to 5000 Kbps and play the video again
    • if the video still stutters
      • lower "Max video bitrate" to 2000 Kbps and play the video again
      • if the video still stutters, go to 3. to check if the CPU is maxed out

  2. the ffmpeg process is running and its CPU usage is not close to 100% (transcoding is performed, CPU not maxed out)

    The cause of stuttering is that the video bitrate is too high.

    • lower "Max video bitrate" to 5000 Kbps and play the video again
    • if the video still stutters:
      • lower "Max video Bitrate" to 2000 Kbps and play the video again
      • if the video still stutters the cause of the stutter is unknown and neither due to bandwith nor to the CPU usage

  3. the ffmpeg process is running and its CPU usage is close to 100% (transcoding is performed, CPU maxed out)

    The cause of stuttering is that the CPU is maxed out

    • to lower CPU usage, set "Video encoding speed" to "Ultra fast" and play the video again
    • if CPU usage:
      • is still at 100%: disable transcoding by setting a high value (such as 30000) for "Max video bitrate" and play the video again. if it still stutters there is no solution as the video requires too much bandwidth and your CPU is not powerful enough to lower it
      • is below 100% but video still stutters: go to 2.


Android BubbleUPnP doesn't detect BubbleUPnP Server

If you installed BubbleUPnP Server and Android BubbleUPnP doesn't detect it (Chromecast settings remain grayed out):

Some or all of my videos managed by Windows Media Player do not play

There is a known issue with WMP. The symptom is that the Chromecast will show the video loading screen for a few seconds before reverting to the BubbleUPnP logo.

The cause is unclear and until there is a solution, it is suggested to use another Media Server such as Serviio.

Connecting with Android BubbleUPnP

Once BubbleUPnP Server is up and running you can configure BubbleUPnP to connect to it and start streaming your media.

Remote UPnP Network configuration

In BubbleUPnP:


This is the name used to identify the remote BubbleUPnP Server network. You can choose any name you want. It is used to identify Media Servers from different networks. For example if your home Media Server is named "My Media Server" and you set Name to "Home", this Media Server will be listed as "My Media Server [Home]" in the Library tab (as shown in the right screenshot).

Server address

This is the public connection URL to BubbleUPnP Server. The information used to set this field is displayed in the Status tab of BubbleUPnP Server.

For example if the Status tab shows:

Public IP Address:
Public HTTP Port: 58050
Public HTTPS Port: 58051
Public host name:

To connect through HTTP, you must set "Server Address" to either or
To connect through HTTPS, you must set "Server Address" to either or


Use the login that you defined in the Security tab.


Use the password that you defined in the Security tab.

Active on connection

This setting allow you to set when BubbleUPnP should automatically connect to this remote network to make the associated Media Servers available in the Devices tab of the app.

For example you may want to connect to this network only when your Android device uses a Mobile data connection. In that case you would set this setting to "Mobile". Now every time your Android device switches to a mobile connection, BubbleUPnP will connect to BubbleUPnP server to make your Media Server available in the Devices tab. And if you switch from a mobile connection to WiFi, it will disconnect and remove them from the Devices tab.

The possible choices are:

Advertise on LAN

This setting if enabled will make all Media Servers of this remote network (those listed in the right screenshot) visible on the target LAN on which your Android device is currently connected. This only work if your Android device uses a WiFi or Ethernet connection. It means that your UPnP devices on the target LAN (a PS3, a DNLA TV, etc) should be able to see and browse your remote Media Servers. This is UPnP tethering.

For example a PS3 accessing to your home Media Server follows this path when issuing commands (browsing, searching, etc):

PS3 -> Android device (BubbleUPnP) -> Internet -> BubbleUPnP Server -> Your Media Server.

For streaming audio or retrieving album art the PS3 talks directly to BubbleUPnP Server without Android BubbleUPnP in the middle:

PS3 -> Internet -> BubbleUPnP Server -> Your Media Server.

Audio, video and image transcoding settings

BubbleUPnP Server can optionnaly transcode audio (to MP3) and video (to H264/MP3) for playback on the Android device itself (using the local renderer).
No transcoding is ever performed if streaming to an external renderer, as it may have a faster connection to BubbleUPnP Server than your Android device.

Separate transcode settings are also available for downloaded files.

For transcoding to work, BubbleUPnP Server must report that audio and/or video transcoding are supported in its Status tab.

In Android BubbleUPnP, you can configure how BubbleUPnP Server should perform the transcoding in Settings > Networks and settings.
There are separate settings for Audio, Video, Images, and for each connection type.

SD Card mobile music caching

Android BubbleUPnP can optionally cache to SD Card music accessed through BubbleUPnP Server, when using a mobile data network connection. This reduces mobile data usage when playing tracks that have been previously played.

This section allows to configure caching settings:

Music playback transcoding

Seekable transcoded music tracks

BubbleUPnP Server can generate seekable transcoded music tracks (disabled by default) for tracks for which duration can be determined and whose duration is lower than 10 minutes.

It can be enabled with "Settings > Network and Settings > Seekable tracks", or forced on the server side with the -transcodeAudioSeekable command line argument or related parameter in the configuration.xml file.

When enabled, BubbleUPnP Server will transcode a track fully before serving it for playback to the client. This introduces a variable delay depending on CPU speed and track duration before the track can be played. On a standard PC, it should not exceed a few seconds. That's why it is not recommended to enable it if BubbleUPnP Server is running on a slow CPU (such as some NASes). This delay only happens the first time a seekable track is generated as it is cached to disk for subsequent plays.

When enabling this feature, it is recommended to also enable Settings > Local renderer > Gapless playback, in Android BubbleUPnP. Gapless playback will trigger transcoding of the next track before current track finishes and make the delay discussed above unoticeable in most cases. Only playback of the first track may be delayed.

Video transcoding

Here you can specify which profile should be used for video transcoding: All profiles will transcode to H264 for video and MP3 for audio, into an MPEG-TS container (for technical reasons it cannot be MP4). Aspect ratio is preserved. The transcoded video may not be playable by the standard Android video player and requires a third party video player app such as MX Player or BS Player and probably many others. The recommended player is MX Player.

Image transcoding to local renderer

File downloads transcoding

Here you will find specific transcode settings applied to downloaded files:

Music and video Internet streaming with foobar2000 on Windows (or Wine)

This feature allows you for example to stream to your work PC your music and videos from your home Media Server. Playing videos requires foo_upnp 0.99.45+.

NOTE: foobar2000 is a Windows program but it can run on other plaftorms through Wine. On Mac OS X, the easiest way to install foobar2000 is through Wineskin.

Connecting with foobar2000

First you must make sure the status page of BubbleUPnP Server shows that it is accessible from the Internet.

You can access your Media Server from the Internet for streaming music and videos on Windows, using the foobar2000 music player as the client.

After installation, in the View menu of foobar2000 select "UPnP Browser". The UPnP Browser window displays all your discovered LAN Media Server allowing browsing an playing music as shown in the left screenshot. In the view Menu, select "Add remote Internet UPnP Server..." and enter BubbleUPnP Server connection settings (left screenshot):

TIP: If you are on a corporate network only allowing outgoing HTTP traffic on port 80, you can setup BubbleUPnP Server to run on port 80 (provided you have no other web server using this port). For HTTPS, use port 443.

After clicking OK and if the connection to BubbleUPnP Server is successful, the UPnP Browser tree will show a new Media Server named "BubbleUPnP Server (<Remote PC Network name>) [Internet]", as shown in the right screenshot.

This "Super" Media Server lists all your Media Servers on your remote LAN for which the setting "Make this Media Server available in Android BubbleUPnP and foobar2000 for Internet access" is enabled in BubbleUPnP Server (in the Media Servers tab).

To disconnect or remove the BubbleUPnP Server "Super" Media Server from the UPnP Browser, right click its root node and select "Remove server" in the context menu.

Note that you can integrate the "UPnP Browser" as a panel in the main foobar2000 window to avoid having a separate floating window. Here are basic instructions to do so:

Transcoding audio to mp3

As with Android BubbleUPnP as a client, it is possible to transcode audio on the fly when accessing your Media Servers with foobar2000. Unlike Android BubbleUPnP, the transcoding settings are configured in BubbleUPnP Server, in the "Settings / foobar2000 remote access" tab.

Transcoded files will not be seekable in foobar2000.

Changing these settings will only take effect in foobar2000 when browsing folders that were not previously browsed. To apply changes on browsed folders, you must disconnect/reconnect the BubbleUPnP Server "Super" Media Server.

Since foo_upnp 0.99.45 it is possible to override server transcode settings (only lossless audio) in foobar2000, in Files -> Preferences > Tools > UPnP > Browser > Remote Internet Servers:

Playing videos

foo_upnp 0.99.45 also now makes it possible to play videos from BubbleUPnP Server. To play a video:

Accessing Media Servers from a different network with BubbleUPnP Tether Client

Download BubbleUPnP Tether Client v0.9.1

BubbleUPnP Tether client is a simple Java command-line program that will make available on the LAN it is running Media Servers managed by BubbleUPnP Server on another LAN, with optional audio and video transcoding (UPnP Tethering). It is only meaningful to run this client on a different LAN than BubbleUPnP Server.

Start it from the command-line with a BubbleUPnP Server connection URL specified with -connect and the login specified with -login. For example, on Windows ( on unix):

launch.bat -connect -login mylogin
[it will ask for BubbleUPnP Server password here]
Once started, you should be able to access tethered media servers from any UPnP program or device on the LAN the client is running.
By default, a tethered media server network name is appended "[tether]" to be differentiated from regular UPnP devices.

Several options can be specified on the command line and in particular transcoding options:

-connect VAL

BubbleUPnP Server connection URL (eg, http://hostname:port or https://hostname:port)

-deviceNameSuffix VAL

Suffix appended to tethered UPnP device network names (default: "tether"). Allows to differentiate tethered devices from regular devices


Show command line help

-logLevel VAL



Enable logging to file

-login VAL

Login for BubbleUPnP Server

-password VAL

Password for BubbleUPnP Server. If unspecified it will be prompted interactively


Set this option to transcode only lossless audio to the bitrate specified by -transcodeAudioMaxBitrate

-transcodeAudioMaxBitrate N

Set this option to transcode to mp3, audio files whose original bitrate is higher than the specified bitrate. Valid values: 128, 192, 256, 320

-transcodeVideoContainer VAL

Video container format used for transcoded videos (default: "mpegts"). Valid values: "mpegts" for MPEG-TS and "matroska" for MKV. Use MKV to preserve embedded subtitles in transcoded video. MKV requires BubbleUPnP Server 0.6.5+

-transcodeVideoHeightPixels N

Transcode videos as a MPEG-TS stream of to the specified height in pixels. Audio is transcoded to MP3 128 Kbps. For example, to transcode videos to 480p, set this value to 480. Valid values: [120...1200]


Where do I report issues, get support or leave feedback ?

You can leave a message in the XDA forums thread.

How do I change the default HTTP or HTTPS port ?

To change the HTTP or HTTPS port used by the server you must edit the configuration file and restart the server.

The configuration file is named configuration.xml. It is located in the installation directory. Open it with your favorite editor and modify the field httpPort (or httpsPort). If you set a port < 1024 on unix you will need to start the server as root otherwise you will get a permission error on startup.

To restart the server:

How is security handled ?

You can connect to BubbleUPnP Server using either HTTP or HTTPS.
HTTP/HTTPS requests from outside the LAN (Internet) are authenticated using Digest Authentication.

Note that for technical reasons, media stream requests are neither authenticated nor use HTTPS.
That's why even if you connect through HTTPS, the HTTP port must still be available.

However, the HTTP stream URLs are constructed in a way that they cannot be "guessed" or "forged". They can only be obtained by browsing the server, whose access is always authenticated.

The HTTPS connection test fails while the HTTP test succeeds

If the HTTPS connection test fails while the HTTP test is successful on the Status page:

How can I connect through a VPN ?

Connecting through a VPN is not really necessary in most cases, as connecting through HTTPS over the Internet is more flexible.

If you want to connect through a VPN you can still do it, with the following limitations due to UPnP device discovery not being available on VPNs:

To connect to a VPN in either Android BubbleUPnP or foobar2000, simply connect to BubbleUPnP Server using its LAN ip address instead of its public IP address, the same as if you were connecting to it on a LAN only.

I'm hearing gaps when streaming audio on my Android device

This is the symptom of the network bandwidth being insufficient, especially over a mobile connection. Try lowering the max bitrate setting in the Remote Network settings.

How can I replace bundled ffmpeg binaries on Windows ?

BubbleUPnP Server on Windows uses ffmpeg/ffprobe binaries located in its installation directory. If you wish to use different binaries (more up to date, or 64-bit), do not replace these binaries but instead:

Troubleshooting server startup

A number of issues may prevent BubbleUPnP Server to start. Most of them are network related.

First, make sure the version of Java is 7 or higher. BubbleUPnP Server will not work with older versions.

You can find the execution log file named BubbleUPnPServer.log.0 in the installation directory (by default on Windows: C:\Program Files (x86)\BubbleUPnP Server). You can check this file for startup error messages:

org.teleal.cling.transport.spi.InitializationException: Could not discover any bindable network interfaces and/or addresses

On startup, usable network interfaces are enumerated. This error happens if none is found. A network interface is usable if: Furthermore, at least one network interface must have an IPv4 address that is neither a loopback address ( nor a link-local address (

MultiException[ Address already in use, Address already in use]

The port (58050 by default) used by BubbleUPnP Server is currently used by another application (or BubbleUPnP Server is already running). You can check which ports are used with the netstat command. Configure a different port or kill the application using the current port.

org.teleal.cling.transport.spi.InitializationException: Could not initialize MulticastReceiverImpl: Address already in use

Some other program is bound to SSDP port 1900. You can check which ports are used with the netstat command.

org.teleal.cling.transport.spi.InitializationException: Could not initialize StreamServerImpl: Permission denied: listen

Check that your firewall or other security software is not blocking Java

MultiException[ Permission denied, Permission denied]

If you set a HTTP port < 1024, make sure you are running BubbleUPnP Server as root (on unix).

java.lang.RuntimeException: No route to host at org.fourthline.cling.transport.impl.DatagramIOImpl.send(SourceFile:159)

If you get this error on MacOS X and you are using a software called "Peer Guardian", go into Peer Guardian's settings and select the "Disable Filters" option.

Could not initialize StreamServerImpl: Unable to establish loopback connection

It seems this error is related to the Comodo firewall. Try disabling Comodo or adding a rule to allow BubbleUPnPServer.exe. Cannot run program "netstat": error=2, No such file or directory

On non-Windows machines, the netstat command must be available and in the PATH.

[info] vmarg.3=-Djava.class.path=C:\Program Files (x86)\BubbleUPnP Server\BubbleUPnPServerLauncher.jar [info] Main Class: com/bubblesoft/bubbleupnpserver/server/Main Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object

This error may happen only on Windows when running BubbleUPnP Server as a service, if the Java JRE is not correclty installed or incomplete. Generally, reinstalling the latest version or the JRE (x86 or x64 depending on the Windows installer used) fixes it:

Oracle JRE Download page

I/O exception ( caught when processing request: Error constructing implementation (algorithm: Default, provider: SunJSSE, class:

This error may happen in the log and will cause the HTTPS connectivity test to fail. See this faq entry


0.9-update31 (December 22th 2018)

0.9-update30 (March 15th 2018)

0.9-update29 (February 23th 2018)

0.9-update28 (February 18th 2018)

0.9-update27 (November 22th 2017)

Windows installers

Chromecast transcoding


0.9-update26 (October 5th 2017)

0.9-update25 (June 12th 2017)

0.9-update24 (May 30th 2017)

Chromecast transcoding



0.9-update23 (January 10th 2017)

0.9-update22 (December 15th 2016)

0.9-update21 (November 30th 2016)

0.9-update20 (August 27th 2016)

0.9-update19 (April 23th 2016)

Optware-ng support

Optware-ng provides an easy to install BubbleUPnP Server package for Linux machines running on: hard-float ARMv7, i686, PowerPC 603e and soft-float ARMv5, ARMv7 EABI, MIPSEL targets. It also provides a full featured ffmpeg package that can be used on these architectures.

0.9-update18 (March 31th 2016)

0.9-update17 (Feb 15th 2016)

0.9-update16 (Feb 3rd 2016)

0.9-update15 (Feb 2nd 2016)

0.9-update14 (Feb 1st 2016)

Google Cast DLNA and OpenHome renderers improvements:

0.9-update13 (Jan 28th 2016)

0.9-update12 (Jan 26th 2016)

0.9-update11 (Dec 16th 2015)

0.9-update10 (Sept 12th 2015)

0.9-update9 (Apr 11th 2015)

0.9-update8 (Mar 18th 2015)

0.9-update7 (Mar 12th 2015)

OpenHome renderers

To summarize, it is now possible to have an OpenHome renderer play Google Music and TIDAL tracks with just BubbleUPnP Server running. Google Music tracks can only be added to OpenHome renderers with Android BubbleUPnP. TIDAL tracks can be added with both Android BubbleUPnP and Linn Kazoo.

LAN Proxy media servers


0.9-update6 (Feb 24th 2015)

0.9-update5 [Android only] (Feb 18th 2015)

0.9-update4 (Jan 28th 2015)

0.9-update3 (Jan 21th 2015)

fixed failure to play video to Chromecast with Android BubbleUPnP in the following scenario:

0.9-update2 (Jan 20th 2015)

0.9-update1 (Nov 29th 2014)

0.9 (Nov 14th 2014)