• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Vítejte návštevníku! Přihlášení Registrace


Hodnocení tématu:
  • 0 Hlas(ů) - 0 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Playlisty radio stanic
#1
Existuje plno addons a řešení pro poslech radiových stanic a je škoda, že se neujala nějaká společná správa zdrojových dat pro to, aby to nemuseli všichni řešit ve vlastní režii. Nepíšu to proto, že bych se něčeho takového chtěl ujmout, ale chci se podělit o jednu primitivní vychytávku, pomocí které jsem poslech rádií u pár známých vyřešil.

Požadavek byl poslech rádií v Kodi přes nativní funkci Radio, ať už prostřednictvím IPTV Simple Client nebo Tvheadend a na něj navazujícího Kodi addon PVR Tvheadend HTSP Client. Já osobně používám druhou metodu, kde kombinuji zdroje z DVB-T a OTT/IPTV. OTT/IPTV už používám léta a za tu dobu se mi nahromadila slušná skupina radiových stanic, které mě zajímají, ať už domácích nebo zahraničních. A tak, když někdo chtěl něco podobného, tak jsme mu nabídl své portfolio. V řadě addon, která jsou k dispozici, je ale stanic daleko více a tak jsem občas pro zdrojová data sáhl tam. Vždy to byla ruční práce, což tak strašné nebylo. Nejčastěji lovím v addon Poslouchej radio a když už jsem editace měl dost, rozhodl jsem se to nějak zjednodušit. Nešlo mi o vytvoření nějakého sofistikovaného nástroje, prostě jen chtěl známý všechny české stanice, které addon nabízí a než bych to editoval, tak jsem tomu věnoval asi 2 minuty práce, a data tohoto addon použil v jednoduchém scriptu.

Data stanic jsou v addon Poslouchej radio uložena, podle svého zařazení do položek hlavního menu, v jednotlivých python modulech, které najdeme v adresáři plugin.audio.poslouchej.radia/resources/lib. Pro české stanice je jméno souboru modulu celkem očekávané radioCzechRepublic.py. Otevřeme-li soubor, data stanic nalezneme celkem rychle:
Kód:
list = [
    ['Alternative Times Radio', 'http://ice3.abradio.cz/alternative128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioa10.jpg'],
    ['Be iN Radio Network', 'http://icecast1.play.cz/beinradionetwork1-128.mp3', 'https://i46.servimg.com/u/f46/19/40/01/67/be-in-10.png'],
.
.
.
    ['Známka Punku', 'http://ice.abradio.cz/znamkapunku128.mp3', 'https://i46.servimg.com/u/f46/19/40/01/67/znamen10.png'],
    ]
Vezmeme-li si tato data a vložíme je do jednoduchého scriptu
Kód:
# -*- coding: utf-8 -*-

list = [
    ['Alternative Times Radio', 'http://ice3.abradio.cz/alternative128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioa10.jpg'],
    ['Be iN Radio Network', 'http://icecast1.play.cz/beinradionetwork1-128.mp3', 'https://i46.servimg.com/u/f46/19/40/01/67/be-in-10.png'],
.
.
.
    ['Známka Punku', 'http://ice.abradio.cz/znamkapunku128.mp3', 'https://i46.servimg.com/u/f46/19/40/01/67/znamen10.png'],
    ]

LINE0 = '#EXTM3U\n'
LINE1 = '#EXTINF:-1 tvg-logo="%s", %s\n'
LINE2 = 'pipe://ffmpeg -loglevel fatal -i %s -acodec copy -metadata service_provider=ipradio -metadata service_name=radio -f mpegts -mpegts_service_type digital_radio pipe:1\n'

i = 0
file = open('playlist.m3u8', 'w')
file.write(LINE0)
for key in list:
    file.write(LINE1 % (key[2], key[0]))
    file.write(LINE2 % (key[1]))
    i += 1
file.close()

LINE0 = '#EXTM3U\n'
LINE1 = '#EXTINF:-1 tvg-logo="%s" radio="true", %s\n'
LINE2 = '%s\n'

i = 0
file = open('simple_playlist.m3u8', 'w')
file.write(LINE0)
for key in list:
    file.write(LINE1 % (key[2], key[0]))
    file.write(LINE2 % (key[1]))
    i += 1
file.close()
a script spustíme, dostaneme dva playlisty, playlist.m3u8 pro Tvheadend a simple_playlist.m3u8 pro IPTV simple Client.

Je to postup velmi primitivní a dal by se jistě vytvořit nástroj daleko mocnější. Ale to už nechám pro někoho dalšího. Nabízí se totiž řešení, použít data stanic ze všech modulů tohoto addon, sjednotit je do nějaké datové struktury, například uložené někde ve sdíleném prostředí a ostatní (addons, scripty pro Tvheadend a IPTV Simple Client) upravit tak, aby si ta zdrojová data mohly brát podle potřeby. Určitě by šlo zdrojová data stanic rozšířit o definici skupin a mít tak možnost zajistit členění stanic do skupin podobně, jako to má výchozí addon Poslouchej radio.

To sdílení je možné vytvořit jen na úrovni Kodi, místo modulů v rámci adodn Poslouchej radio vytvořil například addon jako modul, a ten pak v ostatních addon nebo scriptech používat jako zdrojová data stanic. Těch možností je samozřejmě více a rozhodně by byly lepší a efektivnější než to řešit v každém addon či scriptu znova a znova...

Pokud má někdo zájem, zde je zip obsahující script s daty pro české stanice vyjmuté z uvedeného modulu addon Poslouchej radio, a také tímto scriptem vygenerované playlisty. Playlisty se dají použít okamžitě, je možné, že ne všechny stanice budou dostupné, ale to už je věci jiná.

.zip   playlist.zip (Velikost: 12,54 KB / Stažení: 20)
 
Citovat
#2
Tak ještě přidám jednu inspiraci. Doplnil jsem si data stanic o další položku a tou jsou skupiny. Použít ta data i pro IPTV Simpe Client je možné, pak se ale oddělovač skupin, kterým je pro Tvheadend "|", musí nahradit znakem ";". Alespoň tak to píše @Client ve jeho tutorialu Playlist - struktura, obsah a parametry (já to nezkoušel, ale nemám důvod mu  nevěřit). Ostatně každému, kdo se zabývá playlisty pro IPTV Simple Client prábě  tohle doporučuji k přečtení. Škoda, že nepokračoval a nedoplnil stejně obsažný popis pro playlist Tvheadend. Pro tento případ tak alespoň vezměte za vděk jako slabou náhražku popisem uvedený zde. Není ani zdaleka tak dokonalý jako ten od @Client, ale základní informace v něm najdete.

Ale zpět k tématu. Zatím jsem na zkoušku doplnil jen stanice Českého rozhlasu. Přidal jsem na začátek záznamu pro každou stanici položku do které zapisuji všechny skupiny, do kterých chci danou stanici zařadit. Samozřejmě, že se poté musí upravit vlastní část generování položek playlistu. Ale to už je celkem triviální. Současně s tím bude také třeba doplnit i změnu oddělovače skupin v části generování plalyistu pro IPTV Smple Client, tzn. nahradit znak "|" znakem ";".
Kód:
    ['Česko|Český rozhlas|Zpravodajství', 'CRo Radiožurnál', 'http://icecast8.play.cz/cro1-128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radior12.jpg'],
    ['Česko|Český rozhlas|Zpravodajství', 'CRo Praha', 'http://icecast6.play.cz/cro2-128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc22.jpg'],
    ['Česko|Český rozhlas', 'CRo Vltava', 'http://icecast5.play.cz:8000/cro3-128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc25.jpg'],
    ['Česko|Český rozhlas|Zpravodajství', 'CRo Brno', 'http://icecast2.play.cz:8000/crobrno128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc28.jpg'],
    ['Česko|Český rozhlas', 'CRo Regina DAB Praha', 'http://icecast2.play.cz:8000/croregina128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc32.jpg'],
    ['Česko|Český rozhlas', 'CRo D-dur', 'http://icecast5.play.cz:8000/croddur-128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radiod18.jpg'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Hradec Králové', 'http://icecast2.play.cz:8000/crohk128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc30.jpg'],
    ['Česko|Český rozhlas|Jazz', 'CRo Jazz', 'http://icecast2.play.cz:8000/crojazz128aac', 'https://i62.servimg.com/u/f62/19/40/01/67/radioj14.jpg'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Liberec', 'http://icecast2.play.cz:8000/croliberec128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radiol10.jpg'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Olomouc', 'http://icecast2.play.cz:8000/crool128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc26.jpg'],
    ['Česko|Český rozhlasRegionální||Zpravodajství', 'CRo Ostrava', 'http://icecast2.play.cz:8000/croov128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc27.jpg'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Pardubice', 'http://icecast2.play.cz:8000/cropardubice128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radiop19.jpg'],
    ['Česko|Český rozhlas', 'CRo Plus', 'http://icecast1.play.cz/croplus128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radiop18.jpg'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Plzeň studio Karlovy Vary', 'http://icecast2.play.cz:8000/crokv128.mp3', 'https://i46.servimg.com/u/f46/19/40/01/67/croplz13.png'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Plzeň', 'http://icecast2.play.cz:8000/croplzen128.mp3', 'https://i46.servimg.com/u/f46/19/40/01/67/croplz12.png'],
    ['Česko|Český rozhlas', 'CRo Regina DAB Praha', 'http://icecast2.play.cz:8000/croregina128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc32.jpg'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Region - Vysočina', 'http://icecast2.play.cz:8000/crovysocina128.mp3', 'https://i46.servimg.com/u/f46/19/40/01/67/croreg10.png'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Region Stredočeský kraj', 'http://icecast2.play.cz:8000/croregion128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radiov12.jpg'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo Sever', 'http://icecast2.play.cz:8000/crosever128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radios18.jpg'],
    ['Česko|Český rozhlas', 'CRo Wave', 'http://icecast5.play.cz:8000/crowave-128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radiow10.jpg'],
    ['Česko|Český rozhlas|Regionální|Zpravodajství', 'CRo České Budejovice', 'http://icecast2.play.cz:8000/crocb128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc31.jpg'],
    ['Česko|Český rozhlas', 'CRo Rádio Junior Písničky', 'http://icecast7.play.cz/crojuniormini128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioc29.jpg'],
    ['Česko|Český rozhlas', 'CRo Rádio Junior', 'http://icecast5.play.cz:8000/crojuniormaxi128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radioj15.jpg'],
    ['Česko|Český rozhlas', 'CRo Rádio Retro', 'http://icecast7.play.cz/croretro128.mp3', 'https://i62.servimg.com/u/f62/19/40/01/67/radior13.jpg'],
V Kodi to pak může vypadat nějak takto:
       
Pozn. Použil jsem screenshoty z Kodi 19, na kterém práve ladím a testuji skiny.

Plánuji rozšířit skupiny stát, případně provozovatel rádií (tady vidím jako smysluplnou pouze skupinu Český a Slovenský rozhlas) a žánr/styl i na další stanice. Když k tomuhle připočtu skvělý addon ČRo od @waladir a případně standardní Podchater z Kodi repozitáře, dostává funkce Radio v Kodi pro mne (snad) konečně finální podobu.

A já se teď snad už budu moci vrhnout na můj zatím tajný projekt KKR (Kodi Kitchen Radio) - šuplíkové RPI + mini LCD dotykový + kvalitní audio + aktivní repro + upravený Estouche pro obsluhu pouze dvou funkcí - Weather a Radio.
 
Citovat
#3
Po doplnění skupin do popisu stanic (viz předchozí příspěvek) může pak výkonná část scriptu vypdat nějak takto:
Kód:
LINE0 = '#EXTM3U\n'
LINE1 = '#EXTINF:-1 group-title="%s" tvg-logo="%s", %s\n'
LINE2 = 'pipe://ffmpeg -loglevel fatal -i %s -acodec copy -metadata service_provider=ipradio -metadata service_name=%s -f mpegts -mpegts_service_type digital_radio pipe:1\n'

i = 0
file = open('playlist.m3u8', 'w')
file.write(LINE0)
for key in list:
    file.write(LINE1 % (key[0], key[3], key[1]))
    file.write(LINE2 % (key[2], key[2]))
    i += 1
file.close()

LINE0 = '#EXTM3U\n'
LINE1 = '#EXTINF:-1 group-title="%s" tvg-logo="%s" radio="true", %s\n'
LINE2 = '%s\n'

i = 0
file = open('simple_playlist.m3u8', 'w')
file.write(LINE0)
for key in list:
    file.write(LINE1 % (key[0].replace('|',';'), key[3], key[1]))
    file.write(LINE2 % (key[2]))
    i += 1
file.close()
Je  to funkční jak pro Tvheadend tak i IPTV Simple Client (pro key[0], kde je očekávám seznam skupin, je použité replace oddělovače "|" za ";").
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)