Fake EPG - Verze k tisku +- XBMC-Kodi.cz (https://www.xbmc-kodi.cz) +-- Fórum: KODI - Doplňky (https://www.xbmc-kodi.cz/forum-kodi-doplnky) +--- Fórum: Live TV & PVR (https://www.xbmc-kodi.cz/forum-live-tv-pvr) +---- Fórum: Tvheadend (https://www.xbmc-kodi.cz/forum-tvheadend) +---- Téma: Fake EPG (/prispevek-fake-epg) |
Fake EPG - JiRo - 30.7.2017 Byl jsme postaven před zajímavý úkol, vytvořit ručně EPG pro zbytek internetových radií, které si kamarád přidal dle mého návodu do Tvheadend serveru, a pro které jsme nikde nenašel odpovídající zdroj. Důvody byly víceméně malicherné, ale s ohledem na to, že jsem ho k tomu, aby si Kodi a Tvheadend serevr pořídil přesvědčil, příliš jsem s ním nediskutoval a slíbil, že se o to postarám. Řešení jsme měl už odzkoušené, nicméně do nějaké poloprovozní fáze jsem ho nikdy nedostal. Ještě k tomu, proč vlastně kamarád to EPG tak důsledně vyžaduje. Souvisí to především s funkcí timeshift. Nemáte-li u daného radiového kanálu EPG, tak z nějakého mně neznámého důvodu nefunguje timeshift. Je o zvláštní, u TV kanálů to neplatí, tam timeshift funguje, i když pro daný kanál nemáte EPG, a já jsme bohužel ještě nepřišel na to, co s tím udělat. A kdo si na timeshift zvykne, dá mi za pravdu, že je to funkce veskrze užitečná. Poněkud malicherným důvodem, i když pro někoho důležitým pak je, že máte-li desítky radiových kanálů, a u většiny z nich EPG, tak ta vás ta "díra" při procházení Guide prostě štve. Řešení problém se dá rozdělit do několika částí:
Model programového schématu Struktura modelu je odvozena od struktury samotného xmltv, obsahuje tedy dva typy objektů (řádků), popis kanálu a popis programu. Protože jsem celé řešení postavil na sh shellu, o kterém mám jen omezené znalosti, měl jsem tím pádem i značně omezené možnosti. Dvě z nich jsou zásadní (a jejich řešení nepříliš elegantní). Řetězce textu, který se předává jako parametr do vnořeného scriptu, musí být bez mezer. Proto se ve všech textech místo mezer používá znak "_". Po vygenerování xmltv souboru jsou všechny výskyty znaku "_" nahrazeny mezerami. Pokud mi někdo poradí, jak to obejít, budu vděčný. Podobně je to s koncem řádků, kde musí být vždy mezera, jinak se v posledním parametru objeví znak konce řádku, s kterým si nedokážu poradit. Model: Kód: C Bonton Význam je následující: C řádek popisuje kanál, má jeden parametr: Kanál - zde tedy Bonton nebo Radio Relax P řádek popisuje program, má následující parametry: Kanál, musí odpovídat jménu uvedenému v řádku C Kód dne, kde může být použito Číslo 1 až 7 - den v týdnu, pro který se daný program vygeneruje (1 = Pondělí, atd.) Znak W - program se vygeneruje pro všechny pracovní dny v týdnu (Po - Pá, 1 až 5). Svátky ani žádné jiné volné dny bohužel v modelu podchycené nemám. Znak E - program se vygeneruje pouze pro dny víkendu (So + Ne, 6 a 7) Znak A - program se vygeneruje pro všechny dny v týdnu (Po - Ne, 1 až 7) Čas začátku programu ve formátu HHMM Čas konce programu ve formátu HHMM. pokud čas konce přeteče do druhé dne (resp. čas začátku > čas konce), tak se ve výsledném xmltv změní i datum konce programu. *) Program - název programu, text bez mezer Popis - popis programu, text bez mezer *) Je jasné, že takto nelze definovat programy, které by byly delší než 24 hodin. Generace xmltv souboru Generátor řádky čte a analyzuje, nekontroluje však žádné konflikty ani vícenásobné definice nebo neexistující definice kanálů, které jsou použity v definici programů! Po vygenerování souboru xmltv se v první řadě nahradí všechny "_" mezerami a pak se soubor překonvertuje a přenese do Tvheadend serveru. Ten musí mít samozřejmě uvolněný příslušný externí graber. Generují se data vždy pro celý týden, počínaje aktuálním datem. Já mám testovací verzi generátoru EPG uloženu v adresáři .../.config, proto jsou veškeré odkazy orientovány na toto umístění. Vlastní úloha generátoru Fakepg.sh: Kód: #! /bin/sh Script pro parsování řádků definičního souboru xmltv.sh: Kód: #! /bin/sh Přenos dat do Tvheadend serveru Jak už bylo napsáno, používá se komunikace přes xmltv.sock. Tvheadend pro to poskytuje tzv. externí graber, který nedělá nic jiného, než že data takto zaslaná přijme a uloží je do databáze EPG Tvheadend. Pak už se s nimi pracuje stejně jako s daty z interního graberu. Pro přenos se používá volání aplikace curl. Po volání curl se objeví hláška: curl: (28) Operation timed out after 5001 milliseconds with 0 bytes received která není v daném případě významná a je možné ji ignorovat. Pokud data vložíte (a jsou v pořádku), objeví se okamžitě na stránce Programy EPG graberu. Zvolíte-li správně název, tak se automaticky přiřadí k příslušnému programu. Do Kodi se pak data EPG pro vložené kanály přenesou v další periodě aktualizace EPG. Závěr Jak už jsem napsal, program je velice jednoduchý, postrádá téměř jakékoliv kontroly. Šlo mi v dané chvíli o to, vyzkoušet si základní principy řešení, což se povedlo. Nabízím tedy toto řešení jako inspiraci pro někoho programátorsky zdatnějšího. |