Internet radio with real buttons using Stream Deck

How I used a Stream Deck Mini from Elgato in order to give my mother-in-law a super easy Internet radio experience.

By Bjørn Erling Fløtten, Trondheim, Norway. April 2021.

See also comments on Hacker News


Background

My mother-in-law is from Poland. When she stays in Norway in order to help us with babysitting she misses Polish radio. In principle this is easily accessible through the Internet now from all kind of devices.

BUT, my mother-in-law is not PC-literate, nor does she use a so called 'smart'-phone. With my long experience in teaching people far younger than her simple mouse and keyboard techniques, I knew that operating Windows and finding Internet radio stations on her own would just be too cumbersome. I therefore had to create a super simple setup for her, and my hacker mind started to think.

(I did of course consider special purpose Internet radios. They should in theory be quite simple to operate, but they all have som kind of quirks that I did not like. And besides, constructing something of your own is of course always more satisfying.)

I want Real Buttons!

What I really wanted was big buttons with tactile feedback. I had earlier experienced with some Behringer products (sound mixing board) in order to demonstrate mathematical functions. The idea then was to use turning knobs and sliders in order to see how changing parameters changed the outcome of the function, especially graphs in 2D and 3D.

I thought this would be useful also for an Internet radio, but then I remembered having read about the Optimus Maximus keyboard (keyboard with programmable led icons on each key), and I thought such a product would be even better. This search led to Elgato and their Stream Deck Mini. This has 6 buttons, just enough for a radio. I might have preferred the bigger version with 15 buttons but their products are ridiculously expensive, so I had to be content with just 6 buttons.

In addition to the Stream Deck Mini my son donated his old school laptop with Windows 10 installed. It was a cheap ThinkPad L-series which, although 3 years old and somewhat battered from daily use to and from school, was quite capable of streaming some audio from the Internet. My son created a guest account in Windows 10 with auto login. He set 'Fn lock' as default, meaning that keys F1, F2 and F3 was volume off, down, up without having to press Fn. We also found a pair of speakers lying around in the house.

No programming necessary *

(* But understanding of HTML, URLs and Windows command line arguments is a requisite.)

Initially I thought I would make a Windows application for controlling which radio streams to play. But it turned out that Elgato's accompanying software was quite capable by itself.

I assigned five of the six available buttons to launch the standard web browser (Google Chrome in this case) with a corresponding streaming URL (radio channel).

The last button was assigned to close Chrome / stop playing (in reality it only 'presses' CTRL-W, that is, it closes the window that currently has keyboad focus. The other five buttons actually also 'presses' CTRL-W before launching Chrome in order to first stop any station currently playing).

In addition I had to create an actual icon for each station. The LED displays on the Stream Deck are 72 by 72 pixes. I used Windows Paint for this purpose. I used the Print Screen keyboard button in order to copy the logo into Paint, selected only the logo, and resized it down to 72 by 72 pixels. Each icon was then stored as a .PNG-file.

Hunting for stream URLs

The most time consuming task was in locating stream URLs that would actually autoplay without some additional clicking in the web-browser.

Example:
https://streema.com/radios/genre/Polish
offers
https://streema.com/radios/Slonsky_Radio
which has a Play button which launches
http://streema.com/radios/play/Slonsky_Radio
which again has a Play button to press.
I then look into the source-code of this last HTML page (pressing CTRL-U in Chrome) and find that the actual stream is
http://h2866159.stratoserver.net:8000/.
This will autoplay in Chrome if you launch Chrome with it (but not necessarily so if you write the URL in the address bar and press ENTER, in which case you may have to click another Play button first, but this was of no concern as Elgato's Stream Deck software would always launch a fresh instance of Chrome).

Some stations were more difficult than others to locate the 'final' streaming URL for. Also, streams in M3U format would not autoplay in Chrome, so I installed the Play HLS M3u8 Chrome extensions by andrexnet. Unfortunately these streams would not autoplay if I just gave Elgato Stream Deck the URL (Chrome would open, but download the file instead). So instead of using the "System Website" Action in Stream Deck and only specifying the URL, I had to use the "Open" action and specify the whole Windows command line argument for launching chrome.exe.

Example (Polskie Radio Dwojka):
The stream URL is
https://stream12.polskieradio.pl/pr2/pr2.sdp/playlist.m3u8
which will autoplay with the 'Play HLS M3u8' extension installed in Chrome, but not open from Elgato Stream Deck.
Instead I have to give the Stream Deck software the whole command line argument for launching Chrome, like

"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\chrome.exe" chrome-extension://folmbcaopkfclhmdbolnifkpmkfcmlfe/player.html#https://stream12.polskieradio.pl/pr2/pr2.sdp/playlist.m3u8

And the result?

Actually better than expectations. My mother-in-law now has 5 favourite radio station she can listen to, each with its own button and logo. It can not be made simpler than this.

What about support? Whenever you do something like this you dread the inevitable support that you must give, but very little has been needed. Sometimes some 'fatal' messages pop up in Windows which interfere with how Stream Deck launches Chrome (and especially closes it with CTRL-W), but apart from that it has worked quite well.


Updated 16 April 2021.

Contact:

See also comments on Hacker News