• 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:
  • 5 Hlas(ů) - 3.4 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Připojení CZ/SK poskytovatelů OTT IPTV k TVHeadendu
#41
(14.8.2018, 21:00)rasti Napsal(a):
(14.8.2018, 20:25)JiRo Napsal(a): @rasti Tady je můj řádek playlistu, je to v podstatě stejné, jako u tebe. Rozdíly jsou v:

-loglevel fatal - omezí výpis, což může o pár stovek ms zkrátit přepínání kanálu
-probesize 32 - zkrátí dobu analýzy vstupního streamu o pár desítek/stovek ms
-c copy - zjednodušený zápis pro kopírování audio i video streamu
-mpegts_service_type digital_tv - definuje typ streamu,  digital_tv je snad default, takže to asi není nutné, ale já to používám spíše ze zvyku

Kód:
#EXTM3U
#EXTINF:-1,ČT 1
pipe://ffmpeg -re -fflags +genpts -loglevel fatal -headers "Cookie: device_id=deviceid; device_auth=deviceauth; streamQuality=40"$'\r\n' -i http://sledovanitv.cz/playback/channel/ct1?format=m3u8 -probesize 32 -c copy -f mpegts -mpegts_service_type digital_tv pipe:1

@JiRo chapem, urcite vitana uprava...

Mám od sledovánítv dalíček úplného základu plus si přikupuji sport. Podle zdejšího skvělého návodu sem krok po kroku nejdříve podle @JiRo (pročetl sem i poznámky od mobilmaniac, rasti, tímto jim samozřejmě také díky) vyzkoušel internetová rádia, potom streamy v m3u8 a nakonec sem si troufnul i na sledovánítv.
Programy mám v tvheadend funkční, některé programy jedou FHD, některé HD, zbytek SD, ale všechny s codekem H264.
Předtím sem používal upravený PRV od Palinka na sledovánítv a něm jde povolit codek H265. Sem směřuje můj dotaz.
Jdou tyto zde uvedené cody upravit, aby se používal H265?
Děkuji, za rady.
 
Citovat
#42
@Tklf O Kódování h265 by mělo jít nastavit. Podívej se sem https://www.xbmc-kodi.cz/prispevek-ott-i...7#pid56677.
 
Citovat
#43
Ano, o tomto vím, jen si nejsem jistý, že je to opravdu H256, protože mi to codek přestalo ukazovat, ale rozšíření se z HD zvedlo do FHD. Jsem naprostý amatér, takže je možné, že jsem to blbě zabalil do roury.
Ovšem v tomto řešení se pravděpodobně budou měnit tokeny? kkežto v prvním řešení se údaje vyplní jen jednou a dokud zařízení nesmažu z webu sledování, poběží beze změn.
 
Citovat
#44
@Tklf Je to h265, resp. HEVC, což je jiné označení téhož.
[attachment=5050]
To, že se ti zvedne HD na FHD je právě důsledek použití kódování h265. Protože je úspornější, můžou zvednout rozlišení při zachování stejného (+/-) bitrate.

Sledovani má více různých api. U toho, které ti umožní vše nacpat do jednoho volání ale nevím, jak tam dostat request na posílání stremu s kódování h265. Proto jsme tě odkázal na tu další metodu, která používá jiné api, respektive jiný způsob autorizace. A to, že se ti změní obsah adresy streamu, ti nevadí. Pokud používáš playlist s pipe voláním skriptu, tak to ničemu nevadí. V playlistu se ti nic měnit nebude. Jen si zkrátka musíš čas od času (méně než měsíce) obnovit nové sessionid.
 
Citovat
#45
Takže vlastně dobře. Musím tedy porovnat ještě jednou s pluginem od Palinka, myslel sem si, že tam mají programy 50 snímků za minutu, já teda na tom testovaném mám jen pouze 25.
Prosím Tě, mohl bys mi jen tak pro jistotu a porovnání poskytnout jak to máš zabalené do roury ty? Pochopitelně bez údajů, ty si doplním své. Jestli to tedy není problém. Jistota je jistota.

Díky moc
 
Citovat
#46
@Tklf Už mi to nějakou dobu jede, ani ti to přesně neřeknu (navíc nejsem doma), ale bude to asi podobné (případně jen s kosmetickými úpravami)  jako je to v tom odkazovaném postu od @JiRo. Tedy:
Kód:
#! /bin/sh
session=$(cat /storage/.kodi/media/playlist/sledovanitv.cz/session.id | head -n 1)
stream="http://sledovanitv.cz/vlc/api-channel/"$1".m3u8?quality=40&capabilities=h265,adaptive&PHPSESSID="${session}
ffmpeg -fflags +genpts -loglevel fatal -i ${stream} -c copy -f mpegts -mpegts_service_type digital_tv -metadata service_provider=sledovanitv.cz -metadata service_name=$1 pipe:1
Tu hodnotu session si generuji dalším scriptem, který pouštím 1x za 14 dní přes cron a ukládám do souboru, ze kterého si to ten výše uvedený skript čte.

Jinak ty snímkové frekvence i rozlišení se mohou lišit kanál od kanálu. Neznamená to tedy, že všechny kanály nutně mají 60 FPS a FHD jako NASA TV UHD.
 
Citovat
#47
Ok díky za info, se skriptem sem zatím nelaboroval, plnil sem to ručně. Proto pro mně byla priorita dostat to do stavu, aby se to měnit nemuselo.
Do skriptu se musím prokousat až nějak v dalším čase.
 
Citovat
#48
@Tklf No jo, to si musíš vybrat. 1 Taky se mi do skriptů zpočátku nechtělo, ale vyplatí se to. Pokud budeš vycházet z toho, co se tu prezentuje, tak to zase nic tak složitého není. Já jsem časem začal skripty i vytvářet a i když občas narazím (naposledy u LepšíTV, kde je ale spíše problém na straně služby), u většiny jsem nakonec byl úspěšný. Dnes mi jich v Tvheadend běží 5 a kromě toho posledního, na kterém právě pracuji (Digi TV), o nich v podstatě ani nevím. Ta námaha tomu přijít na kloub se rozhodně vyplatí.
[attachment=5052]
 
Citovat
#49
Fajn, tak ještě jeden dotaz, ale z jiného soudku. Když vidím Tvůj TVH, jak si dostal nahoru správné místo na disku? Já k tomu na rychlo připojil externí disk, ale místo mi to ukazuje stále jen z karty, na které mi system CoreElec běží. To samé se mi pak ukazuje v Kodi.
 
Citovat
#50
@Tklf Tam se ti ukazuje místo na tom disku, na který máš nasměrovaný nahrávání.
 
Citovat
#51
Ano, to předpokládám, ale já nahrávám na externí disk a zůstal mi tam údaj z karty.
Je pravdou, že jsem původní nahrávací profil ponechal a vytvořil klonem nový. V novém profilu mám odkaz na externí HDD. Nahrávky se na něj ukládají, takže tohle funguje, pouze údaj o mistě je stále z původního místa (SD karty) a ne z externího disku.
 
Citovat
#52
@Tklf No, tak to asi bude tak, že se tam zobrazuje pouze default profil. Ono taky, jak a podle čeho by se asi TVH rozhodoval, který profil tam zobrazit, když jich uživatel má nadefinováno víc. Zkus do toho default profilu zadat stejnou cestu jako do toho, který používáš. A asi budeš muset restartovat.
 
Citovat
#53
Tak máš pravdu. Děkuji za nápovědu. Tohle, i když se to přímo nabízí, mne nenapadlo.

Jsem uživatel používající Mi A2 Lite , který neumí číst pravidla o nepoužívání podpisu z Tapatalku.
 
Citovat
#54
Situace kolem připojení OTT služeb k Tvheadendu se příliš nelepší. Sice k těm již existujícím přibylo pár nových, ale jejich dokumentace, správa a údržba, stejně jako přístupnost pro uživatele, se příliš nezlepšila. Snažím se tomu nějak pomoci a tak jsem založil nové téma OTT služby v Tvheadend rozcestník, ve které bych chtěl shromáždit jak základní informace o dostupných OTT službách, tak o řešeních, které tyto služby umožní připojit do Tvheadend. To je jedna stránka věci. Tou druhou jsou mé vlastní aktivity, v rámci kterých se snažím vytvářet nebo se na vytváření připojení OTT služeb do Tvheadend podílet. Pár takových aktivit mám více či méně úspěšně za sebou (O2TV, Sledovanitv.cz, Sledovanietv.skKuki, Digi, LepšíTV)  a pár bych, myslím si, byl ještě schopen realizovat. Když se ohlédnu, musím konstatovat, že ani já jsem, co se týče dokumentace a přístupnosti pro uživatele, toho zatím moc neudělal. A tak jsme se rozhodl, že své typické řešení obecně popíši a pak k němu budu připojovat jednu službu po druhé, samozřejmě až poté, co ji aktuálně obecnému řešení přizpůsobím. Mým cílem je, aby všechna řešení měla pokud možno podobnou strukturu a byla jednoduše pochopitelná jak pro ty, kteří je budou používat, tak pro ty, kteří se rozhodnou podle nich třeba vytvořit připojení pro služby další nebo v případě potřeby provedení nějaké změny, ji provedou sami. S těmi změnami a úpravami (vyvolanými například změnou na straně služby), je totiž potíž. Já většinou postupuji tak, že si danou službu pořídím (často v nějaké odlehčené variantě), vytvořím řešení a poté, co mi vyprší zakoupené období ji už dále neprovozuji. Dojde-li k nějakým problémům, nejsem pak schopen reagovat patřičně operativně. Proto mám zájem, aby se o danou problematiku zajímalo více lidí, nejen z pozice prostého uživatele, ale také toho, kdo dokáže v případě potřeby zajistit další údržbu a třeba i rozvoj.

Přemýšlel jsem také, zda nemám založit nové téma, ale s ohledem na to, že nevím, jak bude pro ostatní zajímavé, schovám ho zatím v tomto tématu, který v podstatě za stejným účelem kdysi založil @mobilemanic.

Obecný popis řešení

Má řešení jsou postavena na maximálním využití standardních funkcí systému. Kromě celé řady obvyklých linux aplikací (grep, sed, tr, ...) používám prostý sh shell, aplikace jako je wgetffmpeg a také (sice zatím ne příliš rozšířenou) aplikaci jq (pro parsování json datových struktur). Snažím se vytvářet jednoduché a čitelné scripty, určené vždy pouze pro logicky propojenou množinu funkcí. Nepoužívám žádné knihovny ani žádné společné scripty, chci aby každé řešení bylo zcela autonomní a jediné, co by je spojovalo, je stejný princip funkce a svým způsobem i můj rukopis tvorby. To hlavně proto, abych mohl využívat nabyté zkušenosti z jednoho řešení i u těch ostatních.

Řešení je distribuováno ve formě zip souboru, který se zobrazí do zvoleného adresáře. Předpokládá se, že tento adresář bude používán výlučně por potřeby daného řešení. Víceméně (spíše více než méně) by tento adresář měl být lokální na stroji, na kterém běží i Tvheadend.

Jednotlivé scripty jsou díky své jednoduchosti víceméně samo popisné. Protože se uživatelské parametry a přizpůsobení por konkrétní použití zadává do každého scriptu, je vždy v úvodu každého scriptu část označená jako zadání uživatelských parametrů. Jenom v této části by se měli uživatelé bez ambicí podílet se na vývoji nebo si funkce nějak upravit, pohybovat.

Řešení je možné rozdělit do třech typů (odpovídajících popisu ve výše uvedeném rozcestníku):
  • download - stažení playlistu s adresami streamů přímo ze serveru služby. Toto řešení se v podstatě téměř nepoužívá a jen málo OTT služeb ho nabízí. 
  • playlist - periodická generace playlistu s adresami streamů, případně kombinace obecného (general) playlistu (s voláním streameru) a generického playlistu (co je to generický palylist popíšu dále)
  • onthefly - jednorázová generace nebo ruční vytvoření playlistu a „ontheflay request“ (například ve volaném streameru) o aktuální stream přímo serveru služby
V mých řešením najdete prakticky pouze poslední dva typy. Případně jejich kombinaci, protože u některých je (bude) možné použít oba způsoby řešení.

Skupiny funkcí

Ne všechna řešení nabízí všechny funkce. Někde proto, že ještě nejsou realizovaná, někde proto, že pro dané řešení nejsou potřeba.

Přihlášení a registrace zařízení

Většinou je vše (či většina) funkcí realizována scriptem login.sh. V jeho zadání uživatelských parametrů se zadávají takové údaje jako username, pasword, jméno zařízení, jeho další identifikace, registrační kód, atp. U některých řešení (kde to ještě není realizováno nebo jsou s realizací spojené nějaké potíže), může být přihlášení a registrace provedena v jiném prostředí (například v oficiální mobilní či webové aplikaci dané služby) a do scriptu je pak zadán pouze příslušný registrační kód. Výsledky autentizace, získané autentizační kódy jsou zpravidla uloženy do textového souboru (typické jméno access.id), kde jsou k dispozici pro ostatní funkce (scripty) daného řešení.

Přihlášení a registrace se většinou provádí jen jednou, spouští se ručně (tedy pokud není součástí "onthefly" řešení - ale to je spíše výjimka a řeší se většinou jakou součást funkce Refresh nebo Streamer, viz dále).

Stažení EPG

Většinou je realizováno scriptem epg.sh. Většinou jde zatím o experimentální funkci. Cílem je dosáhnout toho, že se pro danou službu stáhnou EPG data pro kanály, které tato služba poskytuje, a to přímo ze serveru služby, a vygeneruje se xmltv soubor, který je pak použitelný přímo jako zdroj pro interní nebo externí graber Tvheadend. Xmltv soubor může být také zpracován Webgrab++ aplikací.

S ohledem na funkci by měl být tento script spouštěn periodicky (cron) podle potřeb uživatele a hloubky dat, které daný server poskytuje.

Vytvoření playlistu

Většinou realizované scriptem playlist.sh. Funkce scriptu je odlišná podle typu řešení. Jiná je v typu playlist, jiná onthefly. Zatímco v prvně jmenovaném se zpravidla vytváří dva playlisty, generický playlist (generic) obsahující přímo adresy streamů a pak obecný playlist (general) s voláním scriptu streamer.sh (viz dále), v tom druhém se vytváří pouze obecný playlist s voláním scriptu streamer.sh.

Spouští se jednorázově ručně, případně opakovaně pro potřeby aktualizace rozsahu nabízených kanálů. V některých případech může být spouštěno v rámci funkce obnovy tokenů (viz dále).

Obnova autentizace a/nebo tokenů

Většinou realizované scriptem refresh.sh. Jeho úkolem je periodická obnova autentizace a/nebo tokenů V případě tokenů může být následována automatickým spuštěním generace playlistu. Záleží na typu řešení a zvoleném způsobu autentizace a obnovy. Z logiky věci tato funkce nemusí být u některých (zejména onthefly) řešení vůbec realizována.

Spouští se periodicky (cron).

Streamer

Výkonný script streamer.sh, obsahuje zpravidla volání ffmpeg (nebo jiné podobné aplikace). Spuštění předchází sestavení adresy streamu podle klíče (identifikátor kanálu) předávaného jako parametr z Tvheadend. Spouští ho metodou pipe:// přímo Tvheadend při scanu muxů (kanálů) nebo při přepnutí (ladění) kanálu. U řešení typu playlist probíhá sestavení adresy streamu prakticky tak, že se pouze podle klíče vybere příslušná adresa z generického playlistu. U řešení typu onthefly se na základě hodnoty klíče sestaví request na server služby, který jako odpověď vrátí adresu streamu. Script může, kromě sestavení adresy streamu, dotazu a zpracování odpovědi serveru a spuštění ffmpeg provádět i další činnosti, podle typu a charakteru služby.

Při volbě způsobu řešení a tvorbě scriptu je třeba dbát na to, že vykonávané funkce a délka jeho běhu ovlivňuje významně rychlost scanování a přepínání kanálů.

Je spouštěn z Tvheadend.

Cache

Cache se může použít u těch řešení, kde je třeba (a je to možné) nějak urychlit časově kritické části (scripty), zpravidla ty řešené jako onthefly. Vyváží se tím nevýhoda tohoto řešení, jež plyne z toho, že se o finální adresu streamu (nebo manifestu) říká až streamer, což někdy může prodloužit dobu přepínání kanálu. Má-li dané řešení tuto možnost, zpravidla je možné ji použít jako alternativu. Použití cache je spojené s analýzou struktury adresy streamu (zjišťuje se platnost vygenerované adresy) a pokud provider tuto strukturu změní, přestane to fungovat. Proto je vhodné mít možnost používání cache obejít. Cache funguje tak, že streamer ověří, zda pro daný kanál existuje cache soubor, pokud ne, řekne si rovnou o adresu streamu, vytvoří cache soubor a adresu do něj uloží. Pokud zjistí, že cache existuje, načte si z ní adresu a zjistí, zda je platná a pokud ne, opět si řekne o novou. Z toho plyne, že cache má smysl pouze u těch služeb, které do adresy streamu ukládají časovou identifikaci její platnosti. Buď rovnou dobu platnosti nebo dobu, kdy byla adresa vytvořena. Doba platnosti je pak daná nějakou hodnotou platnou pro danou službu (například 24 hodin). Je zřejmé, že pokud dojde k přepnutí na daný kanál po době uplynutí platnosti cache, doba přepnutí kanálu se v tomto případě naopak o něco prodlouží.

Popis konkrétních řešení

V dalších postech tohoto tématu budu postupně zveřejňovat jednotlivá řešení podle výše uvedeného popisu.

Aktuální stav zveřejněných řešení:
  • O2TV (Nangu-TV) - asi nejpropracovanější řešení. Je to hlavně proto, protože ho sám používám. I když jen v podobě tarifu Sport. Je to zároveň jakási výchozí aplikace pro řešení OTT od Nangu-TV, které používají i další provideři. 
  • T-Mobile TV (Nangu-TV)  - de facto kopie řešení O2TV, upravené v těch částech, ve kterých se implementace Nangu-TV pro tohoto operátora liší.
Mám v plánu dále postupně uvést řešení pro:
  • Sledovanitv.cz
  • Sledovanietv.sk
  • Kuki
  • Digi (4NET platforma)
  • Poda (4NET platforma)
  • LepšíTV
Všechna tato řešení již existují, i když ne v podobě, jak je uvedeno výše, a jsou k dispozici v různých částech tohoto fóra. Původně jsem je chtěl postupně sjednotit, protože většina z nich vznikla v dřívějších dobách, ještě před výše uvedeným obecným popisem řešení. Ale ukazuje se, že vzhledem k času a mé kapacitě to není reálné. Proto k výše uvedenému seznamu přidám postupně pouze odkazy na místa, kde je řešení popsáno.
 
Citovat
#55
@Client: mě to nějak nejde... První pokus o login.sh druhý o login2.sh
Kód:
CoreELEC:~ # /storage/.kodi/userdata/o2tv.sh/login.sh
wget: server returned error: HTTP/1.1 402 The parameter username isn't in email form, please try fallback
ERROR: Bad username and/or password
CoreELEC:~ # /storage/.kodi/userdata/o2tv.sh/login2.sh
access_token : NGVlZTFmNjUtNTgwMC00Y2E1LWI4ZDgtN2I0MjY0MDQwZGMy
refresh_token : MWMxNTEyOGMtYjBlNC00YzVkLTg4YmEtOGU1NmYwZGY0Y2Nl
expires_in : 3153600000
/storage/.kodi/userdata/o2tv.sh/login2.sh: line 39: syntax error: unexpected ";"
CoreELEC:~ #
Ano mám login ne-emailového tvaru 1
::: 3x Beelink Mini MXIII-II - CE 9.2 v NAND (1x private TVH server) ::: 1x Mi Box S - Android TV ::: Správce DB SCC :::
 
Citovat
#56
@otava5  He, he... Tak to jsem ještě neviděl! 1 Ale u login2 to zabralo, jak vidím. Tuhle variantu přihlášení (tedy ne přes e-mail) jsem ještě neviděl, a tak jsem s ní nepočítal. Zjevně je funkční pouze pro starý způsob autentizace. Tak to musím ještě doplnit do popisu. 

Ta druhá chyba, to je nějaká moje blbost. Na poslední chvíli jsem doplňoval nějaké kontroly, asi jsem zvoral nějaký "if" a už nezkontroloval všechny varianty možného zachycení chyb. Večer se na to podívám, dřív nemám čas ani možnost. Omlouvám se.

[EDIT] Tak jsem to naslepo opravil, chyby (bylo to tam 2x) byly skutečně tam kde jsme si myslel. Bylo to natolik zjevné, že by to snad už mohlo fungovat.  10
 
Citovat
#57
@Client: zdá se že funguje login2.sh pro mě. Ten access.id stačí jen jednou vytvořit nebo se musí aktualizovat např. 1x za 24h?
::: 3x Beelink Mini MXIII-II - CE 9.2 v NAND (1x private TVH server) ::: 1x Mi Box S - Android TV ::: Správce DB SCC :::
 
Citovat
#58
@otava5 Ne, mělo by stačit vytvořit to jednou. Mně to běží už pár týdnů. Pokud se ukáže, že ta platnost bude nějak omezena, doplním tam script refresh.
 
Citovat
#59
@Client:
Tak se mi vytvořil playlist.general.m3u8 a v něm: 
Kód:
#EXTM3U
#EXTINF:-1,ČT1 HD
pipe:///storage/.kodi/userdata/o2tv.sh/streamer.sh ČT1%20HD ct1hd
není mi jasné odkud se berou streamy 10
::: 3x Beelink Mini MXIII-II - CE 9.2 v NAND (1x private TVH server) ::: 1x Mi Box S - Android TV ::: Správce DB SCC :::
 
Citovat
#60
linky sa zistuju priamo v streamer.sh
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)