27.5.2018, 21:50
(Tento příspěvek byl naposledy změněn: 07.11.2018, 23:42 uživatelem JiRo.
Důvod úpravy: Typos
)
Úpravou původního addon O2TV Go od Štěpána Orta jsem připravil addon Playlist O2TV, který teď upravuji tak, aby běžel jako trvalá služba Kodi. Byl jsem zároveň požádán, zda by nebylo možné tento addon upravit do podoby, aby běžel zcela nezávisle na Kodi. Ačkoli jsem vždycky tvrdil, že by to problém být neměl, teprve dnes jsem si řekl, že bych to mohl zkusit. Protože jediný Linux, který mám k dispozici je ten z LibreELEC, měl jsme možnosti dost omezené, takže řešení je dosti neumělé. Chybějící knihovny jsem si nemohl nainstalovat a tak jsem je umístil přímo do adresáře scriptu. Celé řešení tak poněkud nabobtnalo, ale co je důležité, funguje.
Popis řešení
Vyšel jsem z připravované verze addon Playlist O2TV, takže skript umožní generovat tři typy playlistu. Hlavní kód je v souboru playlist.py, procedury interface ke službě O2TV je v souboru o2tvgo.py . Do tohoto modulu jsem, kromě drobné úpravy umožňující volbu kvality streamů a dvou oprav chyb, vůbec nezasahoval. Jak už jsem řekl, obsahuje instalace celou řadu knihoven, které by bylo možné za normálních okolností nainstalovat do systému, ale já to udělat nemůžu, ta jsem zvolil tuto cestu. Tady je možná nějaký prostor na optimalizaci, to ale přenechávám zkušenějším.
Skript je možná příliš nafouklý, ale je to tím, že jsem chtěl zachovat funkce původního addon a jistou univerzálnost použití. Pokud někdo bude chtít, může si z něj zbytečnosti odpárat. Největší díl práce, protože vlastní změnu z addon na samostatně bežící script jsem vyrobil při polední kávě, je v popisu parametrů, kterými je možné běh skriptu ovlivnit.
Komu je skript určen
Skript je určen pro ty, kteří mají alespoň základní znalost o Linuxu. Po spuštění skript vygeneruje playlist (pokud mu nastavíte správně parametry) a skončí. Chcete-li ho používat tak, jak je to zamýšleno, musíte si například zajistit, aby se spouštěl periodicky. Kdo tedy neví, co je to cron jak se používá, tak si se skriptem moc radosti neužije. Musíte také samozřejmě vědět, co si s vygenerovanými playlisty počít. To tady řešit nebudu. Pokud tedy netušíte, jak byste skript mohli spouštět periodicky, raději si počkejte, brzy vyjde addon se stejnými funkcemi a s možností zadat jednoduše v nastavení periodické spouštění, jehož použití bude určeno právě vám. Ten ale bude fungovat pouze v Kodi.
Instalace
Po stažení zip souboru (je umístěn na konci tohoto příspěvku) jej rozbalíte do vybraného adresáře. Toť vše. Nepokoušejte se ho spustit, nejdřív je třeba zadat několik základních parametrů.
Parametry
Všechny potřebné a uživatelem zadávané parametry jsou dostupné v úvodu souboru playlist.py. Zkopíroval jsme je:
Většina z nich je v souboru instalace nastavená tak, že vygeneruje smysluplný obsah. Většina, až na několik, které je třeba zadat před 1. spuštěním:
Spuštění
Pokud zadáte (a správně) výše uvedené parametry, měl by skript vygenerovat soubory podle vaší volby. Díky tomu, že jsem z původního kódu pro addon vypáral všechny věci týkající se Kodi, nemá skript žádnou interakci, ani kontroly. Po spuštění playlist buď vygeneruje nebo ne. Zatím. Plánuji v další verzi doplnit do něj informační a chybové hlášky, které se budou zapisovat do vlastního souboru logu.
Co skript generuje
Podle nastavení se generuje jeden ze tří typů playlistu:
Je to sice důležité, ale nehodlám se tomu v tomto postu nějak zvlášť věnovat, jak playlisty použít. Na to najdete odpověď v příslušných fórech. Ať už IPTV Simple Client nebo Tvheadend. Kdo neví, jak playlist použít, by měl začít tam a teprve potom se zajímat, jak si je tímto scriptem vygenerovat.
Mé dosavadní zkušenosti a způsob provozu
Čekám na vaši zpětnou vazbu a názory.
Ke stažení
Aktuální verze verze Playlist O2TV, verze 0.0.4
Změny oproti předchozí verzi 0.0.3
Starší verze script Playlist O2TV 0.0.3
Změny oproti předchozí verzi 0.0.2
Upozornění!
Další práce na scriptu převzal @pavuucek, najete ho na Github https://github.com/Pavuucek/O2TVKodi. V tomto vlákně už podporu nehledejte, nebudou se zde už ani objevovat nové verze.
Popis řešení
Vyšel jsem z připravované verze addon Playlist O2TV, takže skript umožní generovat tři typy playlistu. Hlavní kód je v souboru playlist.py, procedury interface ke službě O2TV je v souboru o2tvgo.py . Do tohoto modulu jsem, kromě drobné úpravy umožňující volbu kvality streamů a dvou oprav chyb, vůbec nezasahoval. Jak už jsem řekl, obsahuje instalace celou řadu knihoven, které by bylo možné za normálních okolností nainstalovat do systému, ale já to udělat nemůžu, ta jsem zvolil tuto cestu. Tady je možná nějaký prostor na optimalizaci, to ale přenechávám zkušenějším.
Skript je možná příliš nafouklý, ale je to tím, že jsem chtěl zachovat funkce původního addon a jistou univerzálnost použití. Pokud někdo bude chtít, může si z něj zbytečnosti odpárat. Největší díl práce, protože vlastní změnu z addon na samostatně bežící script jsem vyrobil při polední kávě, je v popisu parametrů, kterými je možné běh skriptu ovlivnit.
Komu je skript určen
Skript je určen pro ty, kteří mají alespoň základní znalost o Linuxu. Po spuštění skript vygeneruje playlist (pokud mu nastavíte správně parametry) a skončí. Chcete-li ho používat tak, jak je to zamýšleno, musíte si například zajistit, aby se spouštěl periodicky. Kdo tedy neví, co je to cron jak se používá, tak si se skriptem moc radosti neužije. Musíte také samozřejmě vědět, co si s vygenerovanými playlisty počít. To tady řešit nebudu. Pokud tedy netušíte, jak byste skript mohli spouštět periodicky, raději si počkejte, brzy vyjde addon se stejnými funkcemi a s možností zadat jednoduše v nastavení periodické spouštění, jehož použití bude určeno právě vám. Ten ale bude fungovat pouze v Kodi.
Instalace
Po stažení zip souboru (je umístěn na konci tohoto příspěvku) jej rozbalíte do vybraného adresáře. Toť vše. Nepokoušejte se ho spustit, nejdřív je třeba zadat několik základních parametrů.
Parametry
Všechny potřebné a uživatelem zadávané parametry jsou dostupné v úvodu souboru playlist.py. Zkopíroval jsme je:
Kód:
###########################################################################################################
# Základní parametry
###########################################################################################################
# Přihlašovací jméno a heslo:
_username_ = ''
_password_ = ''
# ID zařízení:
_device_id_ = ''
# Adresář pro vytvářené soubory a případného vlastního skriptu:
# Pozor! Je třeba zadat absolutní cestu!
_playlist_path_ = ''
# Jméno souboru stahovaného playlistu
_playlist_src_ = 'o2tv.generic.m3u8'
# Jméno souboru vytvářeného playlistu
_playlist_dst_ = 'o2tv.playlist.m3u8'
# Jméno souboru skriptu streameru
_playlist_streamer_ = 'streamer.sh'
# Povel pro spuštění ffmpeg
_command_ffmpeg_ = 'ffmpeg'
# Použití streameru
# 0 - bude použit vygenerovaný skript se jménem uloženým v _playlist_streamer_
# 1 - bude použit vlastní script se zadaným jménem. Skript musí být umístěn v cestě uložené v _playlist_path_!
_myscript_ = 0
# Jméno souboru vlastního skriptu streameru - jméno nesmí být shodné se jménem uloženým v _playlist_streamer_!
_myscript_name_ = 'myscript.sh'
# Kvalita streamu
# 0 - pro nižsí kvalitu, zpravidla (maximálně) 1280x720
# 1 - pro vyšší kvalitu, zpravidla 1920x1080
_stream_quality_ = 1
###########################################################################################################
###########################################################################################################
# Parametry vytvářeného playlistu
###########################################################################################################
# Typ playlistu
# 1 - pro IPTV Simple Client
# 2 - pro Tvheadend
# 3 - pro Tvheadend@
_playlist_type_ = 3
# Parametry v řádku EXTINF
# Parametr tvg_name - používá se pro Typ playlistu = 1
# 0 - nepoužije se
# 1 - přebírá se ze jména kanálu
_channel_epgname_ = 0
# Parametr tvg_id - používá se pro Typ playlistu = 1, 2, 3
# 0 - nepoužije se
# 1 - přebírá se ze jména kanálu
_channel_epgid_ = 0
# Parametr group-titles - používá se pro Typ playlistu = 1, 2, 3
# 0 - nepoužije se
# 1 - Použije se text: O2TV
# 2 - použije se text z proměnné _channel_groupname_
_channel_group_ = 0
_channel_groupname_ = ''
# Parametr tvg_logo - používá se pro Typ playlistu = 1, 2, 3
# Typ loga, případně cesta pro umístění souborů slogem
# 0 - nepoužije se
# 1 - přebírá se ze zdroje
# 2 - místní umístění, pro cestu se použije obsah proměnné _channel_logopath_
# 3 - internetové umístění, pro url se použije obsah proměnné _channel_logourl_
# 4 - logo od @marhycz na Github
_channel_logo_ = 0
_channel_logopath_ = ''
_channel_logourl_ = ''
# Konvence jména souboru - používá se pro Typ loga = 2 a 3
# 0 - nazevsouboru.png
# 1 - nazevsouboru.jpg
# 2 - Název souboru.png
# 3 - Název souboru.jpg
_channel_logoname_ = 0
# Kvalita @marhycz loga - používá se pro Typ loga = 4
# 0 - 640x640
# 1 - 1024x1024
_channel_logogithub_ = 0
###########################################################################################################
###########################################################################################################
# Samples of messages in playlist.log
###########################################################################################################
# RRRR-MM-DD HH:MM:SS Download done with result EXIT:AuthenticationError , DOWNLOADED:-1, SKIPPED:-1
# - přihlášení k účtu neproběhlo korektně, zkontrolujte _username_ a _password_
# - hodnoty -1 u stažených/přeskočených kanálů znamenají, že se stahování vůbec nespustilo
# RRRR-MM-DD HH:MM:SS Download done with result EXIT:NoPurchasedServiceError , DOWNLOADED:-1, SKIPPED:-1
# - seznam služeb vašeho účtu je prázdný
# - pravděpodobně nemáte zaplacenou vámi objednanou sližbu
# RRRR-MM-DD HH:MM:SS Download done with result EXIT:TooManyDevicesError , DOWNLOADED:-1, SKIPPED:-1
# - překročili jste limit 4 identifikovaných a registrovaných zařízení
# - upravte počet registrovaných zařízení na https://www.o2tv.cz/sprava-zarizeni/
# RRRR-MM-DD HH:MM:SS Download done with result EXIT:OK , DOWNLOADED:11, SKIPPED:0
# - generace playlist proběhla v pořádku
# - SKIPPED je počet kanálů, pro které v době stažení playlist nebyl k dispozici žádný stream
###########################################################################################################
- _username_ - přihlašovací jméno do O2TV
- _password_ - přihlašovací heslo do O2TV
- _device_id_ - device id, které získáte z nastavení addon Playlist O2TV nebo z původního addon O2TV. Od verze 0.0.3 není bezpodmínečně nutné device id zadávat. Script si ho umí vygenerovat a uložit do souboru, odkud si ho při každém další spuštění přečte.
- _playlist_path_ - cesta k adresáři, do kterého budou ukládány generované playlitsy a v případě generace plylistu typu Tvheadend@, který získává streamy přes vložený script, také tento skript
Spuštění
Pokud zadáte (a správně) výše uvedené parametry, měl by skript vygenerovat soubory podle vaší volby. Díky tomu, že jsem z původního kódu pro addon vypáral všechny věci týkající se Kodi, nemá skript žádnou interakci, ani kontroly. Po spuštění playlist buď vygeneruje nebo ne. Zatím. Plánuji v další verzi doplnit do něj informační a chybové hlášky, které se budou zapisovat do vlastního souboru logu.
Co skript generuje
Podle nastavení se generuje jeden ze tří typů playlistu:
- Typ 1 - určený pro IPTV Simple Client
- Typ 2 - určený pro Tvheadend
- Typ 3 - určený také pro Tvheadned (já ho značuji jako Tvheadend@), ale s tím, že v playlistu je místo adres streamů volání dalšího scriptu (říkám mu streamer), který teprve spustí přehrávání příslušného streamu. Použití tohoto typu playlistu zajistí, že i při změnách adres streamů (resp. tokenů v nich), to nebude v Tvheadend identifikováno jako změna a nespustí se proces nové generace služeb a mapování k porgramům.
- o2tv.generic.m3u8 - to je jakýsi "čistý" playlist, obsahující pouze jména kanálů a adresy streamů
- o2tv.playlist.m3u8 - playlist obsahující další vložené informace podle typu playlistu a aktuálního nastavení, v případě Typu 3 pak obsahuje místo adres streamů volání streameru
- stream.sh - standardní streamer, který zajistí pro Typ 3 vazbu mezi o2tv.playlist.m3u8 a o2tv.generic.m3u8
- stream.sh.sample - kopie stream.sh jako vzor, ze kterého si můžete vytvořit vlastní verzi streameru a tu použít míst generovaného. Musíte ho ale přejmenovat a nastavit pro použití vlastního streameru parametry
- device_id - soubor s uloženým device_id
- playlist.log - soubor logu skriptu
Je to sice důležité, ale nehodlám se tomu v tomto postu nějak zvlášť věnovat, jak playlisty použít. Na to najdete odpověď v příslušných fórech. Ať už IPTV Simple Client nebo Tvheadend. Kdo neví, jak playlist použít, by měl začít tam a teprve potom se zajímat, jak si je tímto scriptem vygenerovat.
Mé dosavadní zkušenosti a způsob provozu
- provozuji ho na LibreLEEC 8.2.5, které běží na Intelu,
- playlist typu 3 používám v Tvheadend 4.2.3-20, který běží na stejném stroji jako Kodi,
- otestoval jsme i Playlist typu 2 na stejném Tvheadend,
- netestoval jsem Playlist na IPTV Simple Client, protože ho neprovozuji. Ale podle zběžné vizuální kontroly je vygenerovaný playlist bez viditelných chyb. Já ale předpokládám, že script bude využíván zejména v Tvheadend, jeho používání v IPTV Simple Client mi připadá poněkud krkolomné.
- momentálně nejsou známy
- momentálně nepředpokládám žádné další rozšiřování funkcí
Čekám na vaši zpětnou vazbu a názory.
Ke stažení
Aktuální verze verze Playlist O2TV, verze 0.0.4
Změny oproti předchozí verzi 0.0.3
- Změna způsobu autentizace vyvolaná změnami na straně O2TV - připravil @croma, kterému tímto děkuji za vynikající práci.
- S ohledem na nejasnou a měnící se situaci na straně O2TV ponechávám dispozici i předchozí verzi.
Starší verze script Playlist O2TV 0.0.3
Změny oproti předchozí verzi 0.0.2
- odstraněna chyba při spuštění scriptu v případě nezaplacené služby. Tato chyba je i v původním addon Štěpána Orta. Nyní je stav, kdy nemáte v seznamu žádné kanály (nemáte zaplacenou službu) ošetřen a tato událost je zaprotokolována.
- doplněno protokolování významných stavů běhu skriptu, spuštění, ukončení, chyby, informace o počtu stažených/přeskočených kanálů,
- doplněny kontroly a protokolování chyb autentizace, překročení limitu současně používaných zařízení, nezaplacené služby,
- doplněna generace ID,
- odstraněna volba volání wget a proměnné pro nastavení parametrů, které s tím souvisely,
- s ohledem na kompatibilitu s addon Kodi se stejnými funkcemi jsem změnil název dvou proměnných související s použitím vlastního skriptu streameru, jsou to proměnné _myscript_ a _myscript_name_.
Upozornění!
Další práce na scriptu převzal @pavuucek, najete ho na Github https://github.com/Pavuucek/O2TVKodi. V tomto vlákně už podporu nehledejte, nebudou se zde už ani objevovat nové verze.