Radio Browser
radio-browser.info
- https://www.radio-browser.info is a community driven radio station database.
- It provides an API to access the data and allows users to submit new stations or update existing ones.
- RadioBrowser provides a native SoundTouch-compatible API at
https://all.api.radio-browser.info/soundtouch.
Architecture
This service registers RadioBrowser in its BMX service registry (provider ID 39) pointing to RadioBrowser’s SoundTouch API. The device discovers it from there and communicates directly with RadioBrowser for browsing and playback — the local service does not proxy streams.
The source is registered with type RADIO_BROWSER in the Marge sources list. The RadioBrowser provider ID (39) in the source entry identifies it as RadioBrowser within the BMX layer.
The device’s own Sources.xml (/mnt/nv/BoseApp-Persistence/1/Sources.xml) must contain a RADIO_BROWSER entry for playback to work:
<source secret="" secretType="">
<sourceKey type="RADIO_BROWSER" account="" />
</source>A device reboot is required after adding this entry. The firmware only registers RADIO_BROWSER as a selectable source type during the boot-time Sources.xml load. The Marge runtime sync stores the source in the registry but does not complete the activation — without a reboot, selecting a RADIO_BROWSER station results in INVALID_SOURCE.
A reboot achieves two things in sequence:
- The speaker fetches all sources from the soundtouch-service via a
/fullrequest, which updates the device-localSources.xml. - The firmware initialises and registers the
RADIO_BROWSERsource type from that updated file.
The INVALID_SOURCE_TYPE message from the Bluetooth daemon visible in device logs (e.g. during GET /serviceAvailability) is informational noise and does not affect playback.
Triggering a sources refresh without rebooting
Step 1 above (the /full fetch that updates Sources.xml) can be triggered independently by posting a sourcesUpdated notification directly to the speaker. This is useful for verifying that the soundtouch-service serves the correct sources list before committing to a full reboot:
curl -v -X POST http://<speaker-ip>:8090/notification \
-H "Content-Type: application/xml" \
-d '<updates deviceID="<deviceID>"><sourcesUpdated/></updates>'Replace <speaker-ip> with your speaker’s IP address and <deviceID> with its device ID (visible in /info). After this call the speaker re-fetches its sources from the service. Step 2 (source-type registration) still requires a reboot.
Search for stations
- Go to https://www.radio-browser.info and find a station you like.
- Click on the station and copy the UUID from the URL.
- e.g.
https://www.radio-browser.info/history/d28420a4-eccf-47a2-ace1-088c7e7cb7e0
Playing the station
<ContentItem
source="RADIO_BROWSER"
type="stationurl"
isPresetable="true"
location="/stations/byuuid/9610c454-0601-11e8-ae97-52543be04c81">
<itemName>Radio Station Name</itemName>
<containerArt></containerArt>
</ContentItem>To start the radio stream replace <uuid> and <soundtouch> and run curl like this:
curl -d '<ContentItem source="RADIO_BROWSER" type="stationurl" location="/stations/byuuid/<uuid>"/>' <soundtouch>:8090/selectBMX service registry entry
The entry in pkg/service/handlers/static/bmx_services.json that enables RadioBrowser:
{
"baseUrl": "https://all.api.radio-browser.info/soundtouch",
"id": {
"name": "RADIO_BROWSER",
"value": 39
},
"streamTypes": ["liveRadio", "onDemand"],
"authenticationModel": {
"anonymousAccount": {
"autoCreate": true,
"enabled": true
}
}
}