Tag Archives: upnp

Casting to your ChromeCast in Chromium

I have a Google ChromeCast, it is an extremely convenient gadget to stream all sorts of audio and video to your television, regardless of its make or brand.
Today I learnt something new, so let me tell you about that. But an introduction first.

I have a media collection at home, stored on a big disk in my server, and I have a Universal Media Server (UMS) running on my Slackware LAN server to get access to my audio and video files.

Usually from my Android Smartphone (I have always only bought HTC phones and currently it’s a HTC 10) I connect to my movies using BubbleUPnP, a cool application for which I actually bought a license. BubbleUPnP is a UPnP controller, meaning it does not necessarily play video by itself, but it is able to connect a media source (the UMS server) and a media renderer (like a television) and control the playback as a ‘man in the middle’.
For this to work, your television must understand UPnP and be able to announce itself as such on your network, and act as a media renderer. Many of the ‘smart’ televisions sold today have this capability, but many older televisions need a bit of help.
Enter the ChromeCast, a smart Linux-powered device with a wireless network card which connects to your television’s HDMI port. Once connected to your Wi-Fi network, it acts as a UPnP media renderer which means you can stream audio and video to it. However dumb, your television receives the HDMI input from the ChromeCast and will ‘just’ play back what it receives.
The BubbleUPnP app on my phone manages this with great success, and other apps will suddenly also have an extra button on-screen. Such as your phone’s Netflix and Youtube apps, which allows you to watch Netflix or Youtube on a big tv-screen instead of your puny little phone screen.

Now on a laptop or desktop computer, it is a bit of a different story. Your application must be able to act as a UPnP client to allow it to find a ChromeCast and stream media to it. On Linux, I could not find many applications that will cast media to a UPnP renderer. VLC is one good example. Chromium is another good example.

Or so I thought, but I was unable to get Chromium to find my ChromeCast… I tried from time to time, and when it would not work, I would simply take my phone and stream from there. But today, I thought ‘I need to fix this’. So, some searching around on the Internet and I found the fix.

All that’s needed is to enable “chrome://flags/#load-media-router-component-extension“… just copy and paste that bold text into your Chromium URL entry field and you get this:

The default setting called “Default” obviously is not sufficient, so I set the value to “Enabled” and voila! My Chromium browser finds the ChromeCast and I can watch fullscreen movies from a browser tab.

I hope someone sometime searches for and finds this piece of information and benefits from it.


Finally: VLC 3

largeVLCIt took the VideoLAN developers several years of development to leave the ageing v2 releases of their VLC player behind and release a shiny new version ‘3’. This is also the first version which unifies the releases for all platforms the player can run on.
Lots of changes went under the hood and I encourage you to read the release notes. The new release contains working ChromeCast support using a software stack the developers wrote from scratch, where the video’s you cast are transcoded on the fly if necessary. The UPnP support which was broken for many years, has been re-written and finally works again, so that you can watch the movies you make available on your LAN using for instance Plex or Universal Media Server.

When I compile the VLC package I try to follow the VideoLAN guidelines for its supporting libraries, so that the user experience and functionality matches that of the official binaries as closely as possible. That resulted in several changes to the libraries used by VLC:

  • Updated internal libraries: libass, libdvdcss, libdvdnav, libdvdread, libbluray, ffmpeg, live555, libssh2, x262, x264.
  • New internal libraries: microdns, sdm, srt.
  • Removed libraries (no longer used internally): aacenc, daap, faad, faac, vcdimager.

A note about dependencies for the new package:
My Slackware packages for VLC are mostly self-contained with all of the supporting libraries compiled into the package. This makes for a minimal dependency on external libraries/packages. But there are some caveats with the new release: most importantly, its interface has switched from Qt4 to Qt5. While Slackware contains a ‘qt4’ package, it does not contain ‘qt5’ and therefore, the vlc-3.0.0 package introduces three new dependencies, all related to the Qt5 GUI: libxkbcommon, qt5 and qt5-webkit. On Slackware 14.2, two more packages are needed which are already incorporated into slackware-current: libinput and libwacom (the latter one only for 64bit).

A warning to users who built a ‘qt5’ package themselves, using the SlackBuild script at slackbuilds.org:
Un-install that ‘qt5’ package please and install mine. The ‘qt5’ package built with the SBo script will make VLC crash with a segmentation fault.

A note on compiling:
When you want to compile VLC 3 yourself, be sure to install java8 and apache-ant or your build will fail.

Where to find the new VLC packages:

Rsync access is offered by the mirror server: rsync://slackware.nl/mirrors/people/alien/restricted_slackbuilds/vlc/ .

For BluRay support, read a previous article for hints about the aacs keys that you’ll need.

Note that I only built packages for Slackware 14.2 & -current. I stopped creating packages for Slackware 14.1 and earlier because of the effort it takes to build 4 packages for every Slackware release.

My usual warning about patents: versions that can not only DEcode but also ENcode AAC audio can be found in my alternative repository where I keep the packages containing code that might violate stupid US software patents.