Fix not showing metadata for webradio http stream (only vlc backend)
Reason for the change
- No metadata is shown for webradio streams (no song title, artist or radio station) although code for this exists
- The current mapping of the title and station data leads to the station data being shown in the mainLabel in the Headerbar of Elisa (where the track title is usually shown)
Findings / details
Metadata usage is not standardized in webradio streaming out there and feels a bit "messy" when different webradio stations are compared.
AAC and MP3 streams
The majority of streams out there falls in this category. These streams usually set the nowPlaying
and title
metadata.
The title
metadata is the radio station title / description, not the song title.
The single nowPlaying
metadata string contains both artist and song title. This is not a behaviour of libvlc, but instead of mp3/aac streams generally, because artist and song title are transmitted in 1 single string in the raw stream. See screenshot of wireshark analysis below. Separating artist and song title is not possible because there's no rule how they are concatenated: Some stations use " - ", other " by " or " / ".
This code change puts the artist-and-songtitle-string in Elisa's TitleRole
(so it is visible in its window title) and the radio station title in Elisa's ArtistRole
. I feel that is the best trade-off.
OGG streams
Not only the content, but the used metadata fields are varying. Artist
metadata field might be set or not. Title
metadata can be the song title, or a single string containing both artist and song title. Probably there exist other usages as well.
This code change tries to do its best to show as much information as possible at the right place.
Test plan
The following webradio stations have been tested manually by me (VLC backend):
Name | Stream URL | Type | Filled metadata | Result / visible labels in HeaderBar.qml-Element | Comment |
---|---|---|---|---|---|
Trancebase FM | http://listen.trancebase.fm/tunein-aac-hd | AAC |
nowPlaying : <artist> - <song title> title : <radiostation>
|
mainLabel=nowPlaying authorLabel= title
|
Standard AAC/MP3 usage |
WFMU | http://stream0.wfmu.org/freeform-high.aac | AAC |
nowPlaying : <song title> by <artist> on <radiostation> title : <radiostation>
|
mainLabel=nowPlaying authorLabel= title
|
|
SomaFM Underground 80s | http://ice1.somafm.com/u80s-256-mp3 | MP3 |
nowPlaying : <artist> - <song title> title : <radiostation>
|
mainLabel=nowPlaying authorLabel= title
|
Standard MP3 usage. Please note http instead of https. |
SWR3 | http://liveradio.swr.de/sw282p3/swr3/play.mp3 | MP3 |
nowPlaying : <text> OR <song title > / <artist> title : <radiostation>
|
mainLabel=nowPlaying authorLabel= title
|
station pushes text messages in between song infos (switches after a few seconds) |
omroep venray | http://icecast.omroepvenray.nl:80/lov.ogg | OGG |
title : <song title uppercase> - <artist uppercase>
|
mainLabel=nowPlaying
|
Station name missing in stream |
SoCoRock | http://listen.echonet.cc/socorock.ogg | OGG |
title : <song title> artist : <artist>
|
mainLabel=title authorLabel= artist
|
This station gets it right! Wait until they play a regular song; no interview or live recording. |
Other things
I noticed two other issues:
- String encoding is assumed Latin1 but seems to be UTF-8 in webradio streams.
- Metadata info can't be grabbed from https streams but only http streams.
Will look into those later, and separately.