• 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
Generic script
#1
Dost často do Tvheadend vkládám různě získané streamy. A abych měl jejich příjem konzistentní s ostatním příjmem z DVB-T, C, T2 nebo OTT služeb, vyrobil jsm si jednoduchý postup, jak takové steramy do Tvheadend dostávat a relativně jednouše a rychle to celé udržovat a doplňovat. Není to sice úplně out-of-box a vyžaduje to jisté znalosti o používání a nastavení Tvheadend, ale tak to u této aplikace prostě je. Možná to bude i ostatní zajímat.

Základem řešení jsou celkem 4 soubory, umístěné v jednom adresáři:
  • playlist.m3u8 - který slouží k základní definici kanálů a jejich paramaterů a popojení s odpovídající službou
  • streams.ini - soubor (název souboru se může měnit parametrem v config.ini), který pro každou službu obsahuje:
    • identifikaci služby
    • url steramu
    • sadu parametrů, které ovlivňují další zpracování
      • protocol - určuje typ protokolu, kterým je stream přenášený, možné jsou dva typy: HLS nebo DASH, default je HLS
      • referer - v případě, že daný server požaduje, aby v hlavičce requestu byl  refrer uvedený, je ho zde možné zadat, default je prázdný řetězec
      • broadcast - určuje, zda jde o stream s videm a audiem nebo jen audiem, možné jsou tedy dvě hodnoty: TV nebo RADIO, default je TV
      • provider - řetězec, který se přenese do položky provider (ffmpeg) a následně se např. zobrazí i v Kodi, v položce posytovatel. Jako default se použije název domény 2. řádu a tld z url streamu oddělené tečkou
      • service - řetězec, který se přenese do položky service  (ffmpeg) a následně se např. zobrazí i v Kodi, v položce služba. Jako default se použije parametr, který propojuje kanál z playlist.m3u8 a položku ze sterams.ini (viz dále)
  • config.ini - definice některých společných parametrů, ve verzi 1.1 doplněna i možnost zadání defalt parametrů:
    • protocol - default hodnota se použije, pokud u konkrétního streamu není zadán tento parametr s konkrétní hodnotou. Pozor, script akceptuje pouze zadání parametru "HLS" nebo "DASH". Pokud na tomto místě bude jakýkoliv jiný řetezec, použije se vždy "HLS"
    • referer - default hodnota se použije, pokud u konkrétního streamu není zadán tento parametr s konkrétní hodnotou. Script nijak obsah nekontroluje, proto zadávejte řetězec referer obezřetně.
    • broadcast - default hodnota se použije, pokud u konkrétního streamu není zadán tento parametr s konkrétní hodnotou. Pozor, script akceptuje pouze zadání parametru "TV" nebo "RADIO". Pokud na tomto místě bude jakýkoliv jiný řetezec, použije se vždy "TV"
    • provider - zpracování tohoto parametru je o něco složitější. Postupuje se hierarchicky:
      • default hodnota, pokud je jiná než prázdný řetezec, tedy provider="" nebo provider= se použije, pokud u konkrétního streamu není zadán tento parametr s konkrétní hodnotou.
      • pokud bude default hodnota prázdný řetezec nebo nebude vůbec v config.ini uvedená a 
        • pokud u konkrétního streamu bude parametr s konkrétní hodnotou, použije se tato konkrétní hodnota
        • pokud u konkrétního streamu nebude použit parametr s konkrétní hodnotou, použije se řetězec sestávající se z domény druhé úrovně a tld, oddělené tečkou streamu.
  • streamer.sh - script, který je v tvheadend volán metodou pipe://. Script musí být nastavený jako spustitelný! Obsahuje vlastní zpracování parametrů, na základě kterých je spuštěno přehrávání obsahu daného kanálu.
K obsahu vybraných souborů

Soubor playlist.m3u8

Fragment začátku souboru pro jeden kanál vypadá takto:
 
Kód:
#EXTM3U
#EXTINF:-1 tvh-epg="0" group-title="Generic|Slovensko",JOJ
pipe:///home/kodi/TVServer/playlist/generic/streamer.sh joj
 
S významem:
  • 1. řádek, #EXTINF:, obsahuje standardní parametry jednoho kanálu
  • 2. řádek, kromě pipe://, obsahuje defincii cesty /home/kodi/TVServer/playlist/generic/, název spustitelného scriptu streamer.sh a parametr identifikující stream tohoto kanálu, joj.
Soubor streams.ini

Jeden typický řádek vypadá takto:
 
Kód:
joj=https://xyz.abc.sk/xxxxxxxxxxxxxxxxxxxx,referer=https://xxx.yyy.sk
 
S významem:
  • joj - identifikace, pomocí které jsou parametry streamu propojeny s příslušným kanálem v playlist.m3u8
  • https://xyz.abc.sk/xxxxxxxxxxxxxxxxxxxx - adresa streamu
  • referer=https://xxx.yyy.sk - parametr referer
Výše uvedený parametr referer není jediný možný. Na každém řádku je možná parametrů zadat více (viz výše) nebo naopak žádné. Oddělovačem parametrů je znak ",". Parametry, kromě url, které musí být zadáno vždy jako první, nejsou pozičně závislé. Za parametry, které chybí, se dosadí odpovídající default hodnoty (viz výše). Řádek, ve kterém by byly uvedny všechny parametry, by např. vypadal takto:
 
Kód:
joj=https://xyz.abc.sk/xxxxxxxxxxxxxxxxxxxx,protocol=HLS,referer=https://xxx.yyy.sk,broadcast=TV,provider=ABC,service=Progam1

To Do
  1. Ještě přemýšlím o tom, doplnit do streams.ini parametry pro výběr audio stopy, případně stopy titulků.
Ke stažení

Zip soubor, který obsahuje soubory config.ini a streamer.sh je přiložen k tomuto příspěvku.


Přiložené soubory
.zip   generic-1.1.zip (Velikost: 1,42 KB / Stažení: 11)
 
Citovat
#2
Script jsem poněkud upravil. Nyní je ve verzi 1.1. Ke stáhnutí je v 1. příspěvku tématu.

Motivací bylo mít možnost definovat default hodnoty parametrů i na uživatelské úrovni, tedy bez nutnosti zasahovat do kódu stremer.sh. Default hdnoty se od teď mohou definovat v config.ini.

Default v config.ini teď mohou vypadat např. takto:
 
Kód:
# Defaults parameters
protocol="HLS"
referer=""
broadcast="TV"
provider="Generic"
 
Jak script s default hodnotami pracuje:
  • protocol - default hodnota se použije, pokud u konkrétního streamu není zadán tento parametr s konkrétní hodnotou. Pozor, script akceptuje pouze zadání parametru "HLS" nebo "DASH". Pokud na tomto místě bude jakýkoliv jiný řetezec, použije se vždy "HLS"
  • referer - default hodnota se použije, pokud u konkrétního streamu není zadán tento parametr s konkrétní hodnotou. Script nijak obsah nekontroluje, proto zadávejte řetězec referer obezřetně.
  • broadcast - default hodnota se použije, pokud u konkrétního streamu není zadán tento parametr s konkrétní hodnotou. Pozor, script akceptuje pouze zadání parametru "TV" nebo "RADIO". Pokud na tomto místě bude jakýkoliv jiný řetezec, použije se vždy "TV"
  • provider - zpracování tohoto parametru je o něco složitější. Postupuje se hierarchicky:
    • default hodnota, pokud je jiná než prázdný řetezec, tedy provider="" nebo provider= se použije, pokud u konkrétního streamu není zadán tento parametr s konkrétní hodnotou.
    • pokud bude default hodnota prázdný řetezec nebo nebude vůbec v config.ini uvedená a 
      • pokud u konkrétního streamu bude parametr s konkrétní hodnotou, použije se tato konkrétní hodnota
      • pokud u konkrétního streamu nebude použit parametr s konkrétní hodnotou, použije se řetězec sestávající se z domény druhé úrovně a tld, oddělené tečkou streamu.
Celé je to motivované jednak snahou o větší využitelnost scriptu a pak taky tím, že v Kodi si v případě přehrávání TV Live zobrazuji v upraveném skinu hodnotu provider. V Tvheadend mám definovanou hierarchii služeb od jendotlivých providerů a zajímá mě, od jakého providera se právě přehrávaný kanál bere. Takhle si mohu u každého zdroje a případně streamu nastavit hodnotu provider jednoduše a tak, jak mi to pro konkrétní zdroj vyhovuje. Viz ukázka Kodi, provider je uvedený v horním řádku napravo - Provider:Generic.
 
[Obrázek: HsUiEM7.jpeg]
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)