Live Radio: metadata

Absolutely - I still need to default to J-River to listen to the 4 Radio Paradise FLAC streams with metadata & cover art so I know what is being played (and therefore can also be scrobbled) - if Roon can fix this in their radio stream it would make my transition to the Rooniverse 100%.

Thank you @Sebastien
I’ve tried to proceed under DietPi but was unable to install nore-red

root@DietPi:~# > sudo npm install node-red
npm ERR! Cannot read property ‘resolve’ of undefined

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-04-30T19_26_07_960Z-debug.log

Debug file being

0 info it worked if it ends with ok
1 verbose cli [
1 verbose cli   '/usr/local/bin/node',
1 verbose cli   '/usr/local/bin/npm',
1 verbose cli   'install',
1 verbose cli   '-g',
1 verbose cli   '--unsafe-perm',
1 verbose cli   'node-red'
1 verbose cli ]
2 info using npm@6.14.4
3 info using node@v14.1.0
4 verbose npm-session 551a6de1f56dd1b5
5 silly install loadCurrentTree
6 silly install readGlobalPackageData
7 silly fetchPackageMetaData error for node-red@latest Cannot read property 're$
8 timing stage:rollbackFailedOptional Completed in 10ms
9 timing stage:runTopLevelLifecycles Completed in 199ms
10 verbose stack TypeError: Cannot read property 'resolve' of undefined
10 verbose stack     at regFetch (/usr/local/lib/node_modules/npm/node_modules/$
10 verbose stack     at fetchPackument (/usr/local/lib/node_modules/npm/node_mo$
10 verbose stack     at packument (/usr/local/lib/node_modules/npm/node_modules$
10 verbose stack     at getManifest (/usr/local/lib/node_modules/npm/node_modul$
10 verbose stack     at manifest (/usr/local/lib/node_modules/npm/node_modules/$
10 verbose stack     at Object.manifest (/usr/local/lib/node_modules/npm/node_m$
10 verbose stack     at Object.Fetcher#manifest [as manifest] (/usr/local/lib/n$
10 verbose stack     at manifest (/usr/local/lib/node_modules/npm/node_modules/$
10 verbose stack     at /usr/local/lib/node_modules/npm/node_modules/pacote/man$
10 verbose stack     at /usr/local/lib/node_modules/npm/node_modules/promise-in$
10 verbose stack     at Promise._execute (/usr/local/lib/node_modules/npm/node_$
10 verbose stack     at Promise._resolveFromExecutor (/usr/local/lib/node_modul$
10 verbose stack     at new Promise (/usr/local/lib/node_modules/npm/node_modul$
10 verbose stack     at _inflight (/usr/local/lib/node_modules/npm/node_modules$
10 verbose stack     at /usr/local/lib/node_modules/npm/node_modules/promise-in$
10 verbose stack     at tryCatcher (/usr/local/lib/node_modules/npm/node_module$
11 verbose cwd /root
12 verbose Linux 4.19.97-v7+
13 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "--un$
14 verbose node v14.1.0
15 verbose npm  v6.14.4
16 error Cannot read property 'resolve' of undefined
17 verbose exit [ 1, true ]

Any clue ?

Hi Alec,

Not familiar at all with DietPi :frowning:
Have you tried:

dietpi-software install 9

then

dietpi-software install 122

?

Seems I had some success after all :slight_smile:

Well, quite a complex setup but at least it seems to work. Will provide an how-to tomorrow if I can find some time :slight_smile:

2 Likes

Thank you but same issue with dietpi-software install x
Node-red simply doesn’t install. Maybe fixed with next DietPi update?
Will try tomorrow with Ubuntu.

Wow !

Well done Sebastien.

Can you crisply describe what Roon and/or RP would have to do so that a normal Roon setup can see the same ?

Ok, here is my understanding - but note that I’m not an expert, so could be wrong.
To me, it looks it’s all about the streaming server.

1/ It seems that “icecast” is not able to embed metadata in OGG/Flac
2/ It sees on the opposite that another server, Rocket Streaming Audio Server, is able to do so
(I noticed this with your mention of Radio Bluesflac)
So my impression is that RP is streaming through icecast, and is therefore unable to add metadata.

It sounds to me that it would be “simply” a matter for RadioParadise to stream using Rocket Streaming Audio Server (RSAS) - at least the FLAC stream. And no action needed on Roon side.

If we want to workaround this, it is actually quite heavy:

  • need to install our own instance of RSAS
  • then, need to mirror the original RP stream to the newly installed RSAS; this is actually not as simple as for FIP (was icecast -> icecast), so I had to install something called LiquidSoap to do this (well, to be precise, RSAS can mirror another stream but does not allow to modify the metadata).
  • and finally, grab and update the metadata, eg using node-red
    LiquidSoap, besides being a pain to install, is quite heavy and crashed my RPI, so I had to install it on an AWS EC2 instance

    I’m preparing an how-to, it should take more or less half an hour to install all this.
1 Like

@Sebastien i managed to make it work on an old PI3, under Ubuntu.

I had problems with PM2 it didn’t worked.

I think the overall npm / nodered / pm2 section can be replaced elegantly by the following as described here https://nodered.org/docs/getting-started/raspberrypi

sudo apt install build-essential git
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
sudo systemctl enable nodered.service 

Otherwise all was smooth :slight_smile:

For DietPi there is an issue with the installation of Nodered, I’ll report it to Dan. Once this is fixed, it should work.

1 Like

That was my understanding too, until I came across Mother Earth Radio - ogg/flac using Icecast 2.4.4 with metadata. Try it with VLC or foobar although Roon can’t extract it and stumbles at end of each track.
Status page here

That’s interesting. I spend some time in the source code of the latest version of icecast, and the method used to add the tag is not implemented for ogg format. So no clue how Mother Earth Radio could add metadata, unless if they’ve modified icecast source code maybe


The server is (or says it is) 2.4.4. I can’t tell what streamer they use to send to the server.

$ curl -H “Icy-MetaData: 1” -v “http://icecast3.streamserver24.com:18800/motherearth”

GET /motherearth HTTP/1.1
Host: icecast3.streamserver24.com:18800
User-Agent: curl/7.69.1
Accept: /
Icy-MetaData: 1

  • Mark bundle as not supporting multiuse
  • HTTP 1.0, assume close after body
    < HTTP/1.0 200 OK
    < Server: Icecast 2.4.4
    < Connection: Close
    < Date: Fri, 01 May 2020 12:04:11 GMT
    < Content-Type: application/ogg
    < Cache-Control: no-cache, no-store
    < Expires: Mon, 26 Jul 1997 05:00:00 GMT
    < Pragma: no-cache
    < icy-description:High Resolution Music tuned to 429hz
    < icy-name:Mother Earth Radio
    < icy-pub:1
    < icy-url:http://icecast3.streamserver24.com:18800/motherearth
    <

As promised, the tutorial for “Now Playing” on Radio Paradise is available.
Note that it is quite more complex than for FIP, so it would be great if anyone volunteers to give it a try.

1 Like

Perfect @Sebastien, thank’s a lot ! Node-Red is efficient.

Two questions:

  • Do you know FIP Electro (and others FIP Web Radios) ICECAST and metadata URL’s to add new “relays” and “flows” ?
  • RadioFrance’s metadata platform seems to provide cover art URLs, is there a way for ROON to display them ?

C’est tellement bien que l’on a envie de gĂ©nĂ©raliser et d’enrichir le “Now Playing” avec les pochettes mais il y a peut ĂȘtre des limites techniques et juridiques du cotĂ© ROON


Google translate:

It’s so good that we want to generalize and enrich the “Now Playing” with the covers but there may be technical and legal limits on the ROON side


Rather than guess, we can check with @danny

Hi,

I have updated my post to include now all FIP webradios I’m aware of. Please have a try :slight_smile:

1 Like

Thank you, @Sebastien. It’s great to have the APIs for all FIP’s webradio. I’m gonna try (first version with FIP only is rock solid !).

Merci Sebastien !
For NodeRed installation: the steps you described didn’t work for me on a Pi3B under Ubuntu 20, see workaround in my last post above

Good to have all FIPs with metadata now!

+1 , OK with your workaround: https://nodered.org/docs/getting-started/raspberrypi

Here’s a link to all logos, feel free to add in your tutorial.

Thanks RĂ©mi, I have updated my post :slight_smile:

1 Like