Report issues, get support and leave feedback on XDA.
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.
BubbleUPnP Server can:
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 7 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.
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.
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.
IMPORTANT: if after install you cannot connect to the web interface, refer to the troubleshooting section.
At the end of the installation process, BubbleUPnP Server should be running as a Windows service. The installer will launch your Web Browser to configure it. You can also connect to it pointing your Web Browser to http://localhost:58050 or launch the Desktop shortcut. If the Web Browser cannot connect to BubbleUPnP Server, refer to the troubleshooting section.
You will find shortcuts in the Windows Start menu to stop/start the service and launch the configuration interface in your web browser.
If you do not want to run BubbleUPnP Server as a Windows service you can download the archive for other platforms.
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-installerAlthough the Oracle JRE is preferred, the OpenJDK 7 or higher should also work:
$sudo apt-get install openjdk-7-jre-headlessTo install the BubbleUPnP Server PPA package only for Ubuntu Vivid, Lucid, Utopic, Trusty and Precise, enter theses comands:
$sudo add-apt-repository ppa:bubbleguuum/bubbleupnpserver $sudo apt-get update $sudo apt-get install bubbleupnpserverFor other Ubuntu versions, or if you prefer to install the package without using the PPA, enter theses comands
$wget https://launchpad.net/~bubbleguuum/+archive/bubbleupnpserver/+files/bubbleupnpserver_0.9-1_all.deb $sudo dpkg -i bubbleupnpserver_0.9-1_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).
$cower -d bubbleupnpserverChange to the temporary directory:
$cd /tmp/bubbleupnpserverRun makepkg to download, build, and install the package:
$makepkg -siFollow the prompts and onscreen instructions to begin using BubbleUPnP Server.
NOTE: the source of the package is available on github
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'
If the server doesn't start, make sure 'User Home Services' is enabled (instructions).
Alternatively you can follow the "Other Java platforms" section below for manual install.
BubbleUPnP Server is distributed as an archive containing a jar file.
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:
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 192.168.1.10
IMPORTANT: if you use HTTPS access, the HTTP port must still be open as it is still used for media streaming requests only.
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.
This page displays the list of Media Servers detected on your local network. For each Media Server you can configure:
For each UPnP AV 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:
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.
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.
Linn Kinsky and Android BubbleUPnP both showing the same playlist and status, playing to foobar2000 as an OpenHome Renderer:
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.
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, the server version is displayed and all settings can be changed:
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.
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).
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:
The cause of stuttering is that the video bitrate is too high.
The cause of stuttering is that the video bitrate is too high.
The cause of stuttering is that the CPU is maxed out
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.
For example if the Status tab shows:
Public IP Address: 188.8.131.52 Public HTTP Port: 58050 Public HTTPS Port: 58051 Public host name: my.host.org
To connect through HTTP, you must set "Server Address" to either http://184.108.40.206:58050 or http://my.host.org:58050
To connect through HTTPS, you must set "Server Address" to either https://220.127.116.11:58051 or https://my.host.org:58051
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:
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.
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.
This section allows to configure caching settings:
Seekable transcoded music tracks
BubbleUPnP Server 0.7 introduces the ability to 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" in Android BubbleUPnP 1.7.7+, 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.
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.
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:
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.
NEW: 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:
foo_upnp 0.99.45 also now makes it possible to play videos from BubbleUPnP Server. To play a video:
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 (launsh.sh on unix):
launch.bat -connect https://myhostname.org:58051 -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:
BubbleUPnP Server connection URL (eg, http://hostname:port or https://hostname:port)
Suffix appended to tethered UPnP device network names (default: "tether"). Allows to differentiate tethered devices from regular devices
Show command line help
log level, one of: OFF, ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE
Enable logging to file
Login for BubbleUPnP Server
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
Set this option to transcode to mp3, audio files whose original bitrate is higher than the specified bitrate. Valid values: 128, 192, 256, 320
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+
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]
You can leave a message in the XDA forums thread.
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:
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.
If the HTTPS connection test fails while the HTTP test is successful on the Status page:
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.
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.
On Windows, ffmpeg is bundled in the Windows Installer so transcoding will work out of the box. Transcoding support is enabled if the ffmpeg executable can be found in the PATH. ffmpeg must be compiled with libmp3lame support.
To check that libmp3lame is supported the command below should return this output:
$ffmpeg -codecs | grep libmp3lame EA libmp3lame libmp3lame MP3 (MPEG audio layer 3)
If ffmpeg doesn't recognize the -codecs option then ffmpeg is too old and cannot be used. Make sure you are using ffmpeg 0.6 or later (0.7+ recommended).
On other platforms, ffmpeg must be installed:
On Windows, ffmpeg bundled in the Windows Installer supports video transcoding out of the box.
A prerequesite for video transcoding is that MP3 audio transcoding is working (see paragraph above).
Additionaly you will need ffmpeg with libx264 present as well and the scale filter.
To check if libx264 is supported the command below should return this output:
$ffmpeg -codecs | grep libx264 EV libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
To check if the scale filter is available the command below should return this output:
$ffmpeg -filters | grep scale scale Scale the input video to width:height size and/or convert the image format.
Tested on QNAP TS-419p+ with ARM CPU, but should work the same way for others.
Install “Optware (IPKG)” qpkg from http://www.qnap.com/qpkg.asp
In case the “ipkg update” fails, try to adjust the following two config files:
[/opt/etc/ipkg] # more tsx19-kmod.conf src/gz cs08q1armel http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable [/opt/etc/ipkg] # more tsx19.conf src/gz cs08q1armel http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable
ipkg update ipkg install optware-devel ipkg install git ipkg install yasm ipkg install lame mkdir /opt/compile cd /opt/compile git clone git://git.videolan.org/ffmpeg.git cd ffmpeg ./configure --enable-ssse3 --prefix=/opt --extra-cflags='-I/opt/include' --extra-ldflags='-L/opt/lib' --enable-static --disable-shared --disable-ffplay --disable-ffserver --enable-libmp3lame make make install
replace built-in ffmpeg with link to new version
rm /usr/bin/ffmpeg ln -s /opt/bin/ffmpeg /usr/bin
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:
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 (127.0.0.1) nor a link-local address (169.254.xxx.xxx).
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.
Some other program is bound to SSDP port 1900. You can check which ports are used with the netstat command.
Check that your firewall or other security software is not blocking Java
If you set a HTTP port < 1024, make sure you are running BubbleUPnP Server as root (on unix).
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.
It seems this error is related to the Comodo firewall. Try disabling Comodo or adding a rule to allow BubbleUPnPServer.exe.
On non-Windows machines, the netstat command must be available and in the PATH.
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
This error may happen in the log and will cause the HTTPS connectivity test to fail. See this faq entry
fixed failure to play video to Chromecast with Android BubbleUPnP in the following scenario:
How updates are performed can be configured in the Settings > Updates web page. By default, the server will check for updates everyday at 4am and automatically restarts with the new version if an update is found. If Auto-update is disabled, updates are still downloaded but not applied. This can be done manually in the Settings > Updates web page where manually checking for update can also be done. Moreover, if an update is found, it is notified on the Status page.