Myšlenka univerzálního downloaderu video souborů mě napadla už před několika lety. Po několika pokusech jsem ji opustil, protože několik video doplňků, o stažení jejich zdrojů jsem stál, download mezi své funkce zařadilo nakonec také. Nyní ale, spíše pod tlakem okolností, jsem se k tomuto témat vrátil a vytvořil doplněk a zařadil ho kategorie Easy Tools. V současné době ho zatím zvěřejňovat nehodlám, protože jeho použitím se dá získat přístup ke zdrojovým adresám obsahu z některých zdrojů, což by mohlo být kontraproduktivní. Uvádím ho tedy jen jako přílkad toho, jakým způsobem je možné Kodi a jeho podporu pro tvorbu doplňků využívat.
Downloader nedělá nic jiného, než že využije informace příslušného doplňku o vybraném obsahu a příslušnou identifikaci, ve formě, které říkám job, předá cílové aplikaci, která provede vlastní stažení obsahu nezávisle na příslušném doplňku a případně i na Kodi. Počítám s tím, že cílová aplikace může (či spíše, že by měla) mít možnost běžet na jiném systému, než vlastní Kodi.
Jde tedy o kombinaci Kodi, jeho různých video doplňků, vlastního doplňku Downloader, a nakonec cílové aplikace, které můžeme říkat Download Manager, která na základě doplňkem vytořených job-ů, provádí vlastní stahování. Rozdělení funkce se zdá bát krkolomné a možná až zbytečné, ale já mám s tímto řešením celkem dobré zkušenosti.
Jak to funguje?
Download Manager
Mým prvotním záměrem bylo používat jako download manager nějakou standardní aplikaci. První testy jsem dělal na NAS s celkme rozšířenou aplikací JDownloader. Vyvářel jsme pro něj job-y v očekávaném formátu a první pokusy byly celkem zajímavé.
Postupně jsme ale přešel k vlastnímu řešení, které teď používám, což je úplně jednoduchý sh script, běžící na NAS, který nedělá nic jiného, než že si z jednoho adresáře čte postuipně jednotlivé job-y, což jsou soubory json, a z jejich obsahu vytváří parametry pro aplikace wget. Oproti řešení s JDownloader, sh script, kterému říkám Watcher, stahuje vždy pouze jeden soubor. Úplně to postačí. Ostatně, stejně mám pro stahování povoleno max. 50% šířky pásma mého internetového připojení. Protože ale stahování může běžet 24/7, na rychlosti stahování ani tolik nezáleží.
Teď už jen funkci scriptu watcher vylepšuji. Doplnil jsme navázání stahování při přerušení a pak podmíněné opakování stahování v případě, že předchozí skončilo neúspěšně. Celá logika scriptu Watcher je velmi jednoduchá, v podstatě se pouze přesouvají job soubory mezi adresáři:
Snažím se se řešení koncipovat jako modulární tak, aby bylo možné celkem jednoduše doplnit modul pro vytváření i zpracování job-ů pro jakýkoliv další download manager. Podobné je to i na straně Kodi. Dnes umí doplněk stahovat tituly z doplňku Stream Cinema Cz/Sk, Stream Cinema Community (kromě extrerních tiulků) i YouTube (kromě MPEG-DASH) a celé řadě další běžných video doplňků. Nyní pracuji na verzi, která by dokázala zpracovat a stáhnout streamy přenášené protokolem HLS i MPEG-DASH. Samozřejmě ale jen těch bez DRM. A blíží se doba, kdy snad budu umět ze Stream Cinema Community stáhnout i externí titulky.
Protože máme doma více Kodi, okamžitě vyvstala otázka, zda může existovat v každém z nich vlastní doplněk Downloader, přičemže všechny budou zasílat své job-y jedné společné cílové aplikaci na NAS. Po drobné úpravě, zejména v logice funkce scriptu Watcher, to možné je. Doplnil jsem jen kontrolu stavu, zda už nebyl job pro stažení nějakého titulu vygenerován dříve. Předejde se tak tím vícenásobné stahování jednoho titulu.
Nyní plánuji ještě vylepšení, kdy doplněk Downloader bude schopný číst obsah adresářů které používá script Watcher (viz výše) a zobrazovat je v Kodi a provádat v něm přesuny zadané uživatelem.
Downloader nedělá nic jiného, než že využije informace příslušného doplňku o vybraném obsahu a příslušnou identifikaci, ve formě, které říkám job, předá cílové aplikaci, která provede vlastní stažení obsahu nezávisle na příslušném doplňku a případně i na Kodi. Počítám s tím, že cílová aplikace může (či spíše, že by měla) mít možnost běžet na jiném systému, než vlastní Kodi.
Jde tedy o kombinaci Kodi, jeho různých video doplňků, vlastního doplňku Downloader, a nakonec cílové aplikace, které můžeme říkat Download Manager, která na základě doplňkem vytořených job-ů, provádí vlastní stahování. Rozdělení funkce se zdá bát krkolomné a možná až zbytečné, ale já mám s tímto řešením celkem dobré zkušenosti.
Jak to funguje?
- pomocí doplňku Downloader získám pro vybraný titul, který nabízí nějaký video doplněk, jeho zdrojovou adresu (adresu streamu) a případně i další doplňjící infromace, primárně titul, u seriálů ještě sezonu a epizodu, a rok produkce, případně další informace - popis, žánr, obsazení, obrázky (cover, fanart, ...)
- podle parametrů nastavení pak přidám adresu cílového umístění staženého souboru. Umožňuje mi to definovat např. více míst uložení. Odlišné pro filmy a seriály, nabo také pro různá doplňky, ze kterých příslušný titul pochází.
- získané údaje uložím do souboru, tedy job-u, a ten předám příslušné cílové aplikaci Download Manageru, kterou používám. Předáním je myšleno např. uložení do odpovídajícího adresáře na domácí síti, i když není vyloučeno, že cílové umístění, kam se job-y můžou ukládat může být i mimo domácí síť. Tady samozřejmě záleží na tom, jakou cílovou aplikci použijeme.
- o vše ostatní se pak postará už sama cílová aplikace Download Manager. Načte si obsah job-u a zahájí stahování. Toho se pak už samopzřejmě ani doplněk Dwnloader, ale ani Kodi, na kterém běží, neúčastní.
- Nemusím připomínat, že toto celé probíhá asynchronně. Tzn. na jedné straně Downloader zapisuje job-y, které na straně druhé Download Manager postupně používá ke stahování v nich popsaných titulů.
Download Manager
Mým prvotním záměrem bylo používat jako download manager nějakou standardní aplikaci. První testy jsem dělal na NAS s celkme rozšířenou aplikací JDownloader. Vyvářel jsme pro něj job-y v očekávaném formátu a první pokusy byly celkem zajímavé.
Postupně jsme ale přešel k vlastnímu řešení, které teď používám, což je úplně jednoduchý sh script, běžící na NAS, který nedělá nic jiného, než že si z jednoho adresáře čte postuipně jednotlivé job-y, což jsou soubory json, a z jejich obsahu vytváří parametry pro aplikace wget. Oproti řešení s JDownloader, sh script, kterému říkám Watcher, stahuje vždy pouze jeden soubor. Úplně to postačí. Ostatně, stejně mám pro stahování povoleno max. 50% šířky pásma mého internetového připojení. Protože ale stahování může běžet 24/7, na rychlosti stahování ani tolik nezáleží.
Teď už jen funkci scriptu watcher vylepšuji. Doplnil jsme navázání stahování při přerušení a pak podmíněné opakování stahování v případě, že předchozí skončilo neúspěšně. Celá logika scriptu Watcher je velmi jednoduchá, v podstatě se pouze přesouvají job soubory mezi adresáři:
- waiting - sem zapisuje Downloader nové job-y
- active - sem se kopíruje aktuálně stahovaný job
- unfinished - sem se kopírují job-y, které se nestáhly celé (v novém cyklu se přepíšou do waiting)
- error - sem se kopírují soubory, kterých stahování skončilo s chybou (v novém cyklu se přepíšou do waiting)
- finished - sem se kopírují soubory, kterých stahování skončilo úspěšně
Snažím se se řešení koncipovat jako modulární tak, aby bylo možné celkem jednoduše doplnit modul pro vytváření i zpracování job-ů pro jakýkoliv další download manager. Podobné je to i na straně Kodi. Dnes umí doplněk stahovat tituly z doplňku Stream Cinema Cz/Sk, Stream Cinema Community (kromě extrerních tiulků) i YouTube (kromě MPEG-DASH) a celé řadě další běžných video doplňků. Nyní pracuji na verzi, která by dokázala zpracovat a stáhnout streamy přenášené protokolem HLS i MPEG-DASH. Samozřejmě ale jen těch bez DRM. A blíží se doba, kdy snad budu umět ze Stream Cinema Community stáhnout i externí titulky.
Protože máme doma více Kodi, okamžitě vyvstala otázka, zda může existovat v každém z nich vlastní doplněk Downloader, přičemže všechny budou zasílat své job-y jedné společné cílové aplikaci na NAS. Po drobné úpravě, zejména v logice funkce scriptu Watcher, to možné je. Doplnil jsem jen kontrolu stavu, zda už nebyl job pro stažení nějakého titulu vygenerován dříve. Předejde se tak tím vícenásobné stahování jednoho titulu.
Nyní plánuji ještě vylepšení, kdy doplněk Downloader bude schopný číst obsah adresářů které používá script Watcher (viz výše) a zobrazovat je v Kodi a provádat v něm přesuny zadané uživatelem.