RadioDNS – hybrid radio

Už nějakou dobu provozujeme DAB multiplex nejmenovaného rádia, a když jsem zaslechl o radiodns/hybrid radio, hned jsem měl o čem přemýšlet a studovat. Není to raketová věda, jde o opensource technologii a dokumentace existuje. Po chvíli studia dokumentace jsem se do toho pustil a nějaké informace rád předám dál.

Co to vlastně je

Hybrid radio/radiodns kombinuje poslech standardního rádia přes FM nebo DAB, ve chvíli kdy dojde k výpadku signálu a radiopřijímač to podporuje, pokusí se najít alternativní stream přes internet a pokračovat v poslechu. Jde o standard ( ETSI TS 103 270 ), který podporují modernější autorádia.

Jak to funguje

(Auto)rádio dle frekvence/DAB údajů zjistí URL, ze které může čerpat stream a další informace. A je to poměrně triviální:

Z frekvence na FM a dalších údajů (RDS PI) se provede překlad na DNS záznam, například takto:

09580.c479.ce1.fm.radiodns.org

Jak to provedl ? Tak si to rozeberme:

09580 je kmitočet – v tomto případě 95,8MHz
c479 je RDS PI rádia. Je unikátní v rámci regulátora (v případě naší země ČTÚ) pro každou radiostanici
ce1 je GCC – kombinace ECC ID (kód země, e1, viz. RDS standard třeba http://poupa.cz/rds/countrycodes.htm ) a prvního znaku RDS PI

U DAB je to analogické:

0.2fba.2007.2e2.dab.radiodns.org

0 je service. Pokud neprovozujeme víc services, zůstaneme u nuly a je to tak v pořádku.
2fba je ID DAB stanice. Opět přidělené regulátorem
2007 je ensemble ID. Přidělené regulátorem a jedinečné v rámci jednoho muxu
2e2 je opět GCC. Kombinace ECC ID (e2) s ID DAB. Tady 2e2

Pro lenochy jsem vytvořil jednoduchou kalkulačku, stačí vyplnit ECC/EID/SID a máte DNS záznam pro radiodns.org 🙂

FM
ECC:
Frekvence:
RDS PI:
DAB
ECC:
Ensemble ID:
Service ID:
Service component ID:

Tím známe DNS záznam u radiodns.org a provedeme jeho překlad:

;; QUESTION SECTION:
;0.2f76.2001.2e2.dab.radiodns.org. IN	A

;; ANSWER SECTION:
0.2f76.2001.2e2.dab.radiodns.org. 900 IN CNAME	zunradio.cz.
zunradio.cz.		3600	IN	A	217.198.114.120

Následně proběhne dotaz na DNS SRV záznamy _radioepg._tcp.domena_dle_cname a _radiovis_tcp.domena_dle_cname, takto (přiklad z radia ZUN):

tuxik~$ dig _radiovis._tcp.zunradio.cz srv

; <<>> DiG 9.16.37-Debian <<>> _radiovis._tcp.zunradio.cz srv
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42574
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;_radiovis._tcp.zunradio.cz. IN SRV

;; ANSWER SECTION:
_radiovis._tcp.zunradio.cz. 3600 IN SRV 0 100 61613 vis.zunradio.cz.

;; Query time: 35 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Aug 17 01:36:52 CEST 2023
;; MSG SIZE rcvd: 90

tuxik~$ dig _radioepg._tcp.zunradio.cz srv

; <<>> DiG 9.16.37-Debian <<>> _radioepg._tcp.zunradio.cz srv
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61135
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;_radioepg._tcp.zunradio.cz. IN SRV

;; ANSWER SECTION:
_radioepg._tcp.zunradio.cz. 3600 IN SRV 0 100 80 epg.zunradio.cz.

;; Query time: 31 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Aug 17 01:37:01 CEST 2023
;; MSG SIZE rcvd: 90

Vida, servery máme, tak zjistíme SI (service information). Dle normy je vzdy na stejne URL, a to:

http://URL_DLE_DNS/radiodns/spi/3.1/SI.xml

V případě rádia ZUN:
http://epg.zunradio.cz/radiodns/spi/3.1/SI.xml

Provedeme tedy dotaz na tento soubor a voila, máme co potřebujeme. URL streamu a DAB frekvenci:

<bearer id="dab:2e2.2001.2f76.0" cost="20" mimeValue="audio/aacp" offset="2500"/>
<bearer id="https://stream.zunradio.cz/zun2.aac" cost="70" mimeValue="audio/aacp" bitrate="48" offset="16000"/>
<bearer id="https://stream.zunradio.cz/zun1.aac" cost="72" mimeValue="audio/aacp" bitrate="128" offset="16000"/>
<radiodns fqdn="rdns.zunradio.cz" serviceIdentifier="zunradio"/>

(Auto)rádio už tedy ví, kam se spojit na stream, ví alternativní DAB a FM frekvence a mělo by to fungovat jak zamýšlí norma. Celý SI (service information) soubor je poměrně dlouhý a složitý, jsou v něm informace o logu stanice v různých rozlišeních, informace o stanici, alternativní frekvence v DAB a FM, ale rozebírat si ho nebudeme. Kdo chce, může si jak inspiraci načíst http://epg.zunradio.cz/radiodns/spi/3.1/SI.xml nebo http://epg.radiosazava.cz/radiodns/spi/3.1/SI.xml nebo složitější Český Rozhlas https://d2qydwcycui0ka.cloudfront.net/b0d51624f9a7e63df994c2df9128f614250c2861aeb9f55a19146e9877b2201b.xml
Možností je opravdu mnoho, více viz. standard na webu radiodns.org

Jak rádio zjistí název hrané písničky a obrázek coverart

Přes již zmiňovaný radiovis. Vysílá se URL obrázku a text. Pro radiovis existuje několik různých opensource programů, my se zaměříme na radiovis-stomp-server . Autorem je BBC, pro běh potřebuje nodejs a ovládá se přes curl.

Předpokládám, že člověk, který se do instalace pustí, má nějaké znalosti Linuxu, takže jen v bodech:

git clone https://github.com/bbc/node-radiovis-stomp-server.git
cd node-radiovis-stomp-server/


Poeditujeme services.json, abychom vysílali správné údaje:

{
"sazava": {
"name": "Radio Sazava",
"default_image": "http://radiosazava.cz/image/freestyle/sazava_logo_www.png",
"default_link": "http://www.radiosazava.cz",
"bearers": [ "dab:2e2.2007.2fba.0" ]
}
}

No a spustíme:
node ./bin/radiovis-stomp-server

Pro serioznější provoz doporučuji spouštění pod supervisor nebo jako systemd unitu (nebo ve screen a bash while smyčce, co je komu po libosti…).

Radiovis nám běží, tak do něj opatrně zkusíme poslat nějaká data.

curl http://localhost:3000/services/sazava -d 'image=http://nejaka_url_s_obrazkem_pisnicky/image.jpg' -d "text=nazev_pisnicky"

Radiovis nám vrátí „Content Published“ a odvysílá ve STOMP obsah.

Pro ladění existuje opět od BBC radiovisdemo , stačí upravit soubory v adresáří conf a můžete testovat i bez registrace na radiodns.org.

Chci to implementovat do vlastního rádia, co dál ?

Pokud existují korektní SRV záznamy v DNS, existuje SI (service information) XML soubor a běží VIS server, už zbývá jen poslední krok – poslat žádost o registraci radiodns.org domény. Může vypadat třeba takhle:

Hello,

we want to use radiodns for our radio, details are below:

_radiovis._tcp.rdns.radiosazava.cz. 820 IN	SRV	0 100 61613 vis.radiosazava.cz.
_radioepg._tcp.rdns.radiosazava.cz. 499 IN	SRV	0 100 80 epg.radiosazava.cz.

Name and phone number: XXX YYY, +420123456789

Radio name: OUR RADIO

Licence authority: Český telekomunikační úřad (www.ctu.cz)

Zone and SI file is attached.

Thanks,

Regards,

Jako přílohu nezapomeňte doplnit SI soubor a zónový soubor DNS. E-mail posilejte na registrations@radiodns.org, odpoví obvykle do 24 hodin.

Pokud někomu text pomohl, dejte vědět do komentářů, pokud si s něčím nevíte rady, ptejte se. Rád odpovím. A díky za přečtení !

Příspěvek byl publikován v rubrice Nezařazené, Rozhlasové vysílání. Můžete si uložit jeho odkaz mezi své oblíbené záložky.