Server & síť/Domácí kino
Odkaz vložím, film pustím.
Do obýváku přišla nová televize a já nechtěl filmy dál nosit na flashce. Teď vložím odkaz z Webshare do stránky na serveru, ten film stáhne rychlostí až 200 MB/s a do sekundy ho televize ukáže v knihovně. Počítač u toho vůbec nemusí běžet.
K čemu to je
Film v televizi bez flashky a bez počítače
Dřív to znamenalo stáhnout film do počítače, přetáhnout ho na flashku a zapojit do televize. Film ve 4K má klidně 40 GB, takže se čeká dvakrát a flashka musí mít dost místa i správný souborový systém.
Teď je knihovna na serveru a televize si ji přehrává po síti. Film přidám dvěma cestami: vložím odkaz z Webshare do stránky stahovače, nebo ho z počítače přetáhnu do sdílené složky. V obou případech se sám objeví v televizi, s českým názvem, plakátem a titulky.
Stahovač zároveň ukazuje, co v knihovně je, co už je zhlédnuté a kolik zbývá místa. Zhlédnutý film jedním klikem smažu a zmizí i z televize.
Proč
Proč Jellyfin a proč vlastní stahovač
Jellyfin je open source a nechce žádný účet. Umí titulky, HDR pustí televizi napřímo a když televize nějaký formát nezvládne, převede ho server grafikou procesoru. Sdílení přes DLNA titulky neumí a Plex čím dál víc tlačí do předplatného.
Stahovač vznikl, protože Webshare přes prohlížeč stahuje jedním spojením a to má strop kolem 50 až 70 MB/s. Linka to nebyla: když jsem vedle pustil druhé stahování, přidalo dalších 43 MB/s. Stahovač si proto řekne o přímý odkaz přes API Webshare a soubor táhne šestnácti spojeními najednou.
A celé to běží na serveru, ne na počítači. Film se stáhne, i když počítač spí, a odkaz můžu poslat i z telefonu.
Jak to funguje
Kudy film teče
- Vložím odkaz. Stránka stahovače chce jen odkaz na soubor a jestli jde o film, nebo seriál. Funguje z počítače i z telefonu, doma i přes VPN.
- Server si řekne o přímý odkaz. Přihlásí se do Webshare pod mým účtem, zjistí název a velikost souboru a dostane odkaz ke stažení. Ten předá programu aria2, který soubor rozdělí a stahuje šestnácti spojeními.
- Stahuje se stranou. Rozpracovaný soubor leží ve skryté složce, kterou Jellyfin nevidí. Televize tak nikdy nenabídne film, který ještě není celý.
- Seriály se roztřídí samy. Jellyfin chce u seriálů složky Název a Season 01. Stahovač je vyrobí z označení S03E01 v názvu souboru. Když ho nenajde, soubor nechá být, raději než aby hádal.
- Hotový film je hned v televizi. Po dokončení se soubor přesune na místo a stahovač řekne Jellyfinu, ať prohledá knihovnu. Film je tam do sekundy, i s českým názvem a plakátem.
- Zhlédnuté se maže jedním klikem. Stahovač se Jellyfinu ptá, co už je zhlédnuté. Smazání odstraní film, jeho titulky i prázdné složky a zmizí i z televize.
Co jsem zjistil
Co jsem zjistil po cestě
Brzda je jedno spojení, ne linka
Prohlížeč stahoval 50 až 70 MB/s. Druhé stahování vedle přidalo dalších 43 MB/s, takže linka měla rezervu a brzdou bylo samotné spojení. Proto stahovač otevírá šestnáct.
Z gigabitu na dva
V srpnu stahovač držel 100 až 109 MB/s, tehdy ještě přes gigabitovou síťovku serveru. Po výměně za 2,5 Gbit jede až 200 MB/s, skoro celá linka 2 Gbit. Server sám z testovacího serveru stáhne kolem 240 MB/s.
Vzdálený prohlížeč byla slepá ulička
Nejdřív jsem na serveru pustil prohlížeč, do kterého jsem se díval přes web. Stáhl jeden film, ale jen přenos obrazu bral přes celé jádro procesoru a pořád to bylo jedno spojení. Po jednom filmu šel pryč.
Jellyfin změny schválně sbírá
Obvyklé hlášení nového souboru Jellyfin minutu odkládá, aby nesbíral každý soubor zvlášť. Přímý pokyn k prohledání knihovny to zvládne do sekundy, hlášení zůstalo jen jako záloha.
Televize neumí všechno
Samsung nepřehraje zvuk DTS a neumí Dolby Vision. U zvuku stačí v přehrávači vybrat jinou stopu, jinak ho server převede, což je levné. Dolby Vision se přehraje jako HDR10, pokud ho soubor má jako zálohu.
Pomalé nahrávání dělá Wi-Fi
Z počítače šlo nahrávání do sdílené složky jen 50 MB/s. Samotná sdílená složka na serveru zvládne 720 MB/s, brzdou byla Wi-Fi v počítači, ne server.
Co jsem se naučil
Čtyři věci, na které jsem narazil
Aplikace, která v obchodě není
Jellyfin pro televize Samsung se v jejich obchodě nenajde. Dá se nahrát ve vývojářském režimu televize jedním kontejnerem ze serveru. Je to jednorázová práce a pak se aplikace chová jako každá jiná.
Seriál v kořeni knihovny neexistuje
První stažený díl se v televizi neukázal. Jellyfin soubory seriálů bez složky se sezónou prostě ignoruje. Proto stahovač třídí sám.
Jedno heslo na dvě služby
Televize si pamatuje heslo do Jellyfinu. Kdyby bylo stejné jako do sdílené složky, otevřelo by i složku s projekty. Heslo ke sdílené složce jsem proto změnil a televize o nic nepřišla.
Stránka, která umí mazat, chce heslo i doma
Stahovač běží jen v domácí síti, ale umí mazat soubory. Proto má vlastní přihlášení, brzdu na hádání hesla a mazat smí jen uvnitř knihovny. Všechno jsem zkusil i jako útočník.
Pro AI agenta
Postav si to u sebe
Chceš si to postavit u sebe? Zkopíruj návod a dej ho svému AI agentovi, třeba Claude Code nebo Codexu. Je v něm cíl, postup krok za krokem, pasti, na které jsem narazil, a jak ověřit, že to funguje. Adresy ani hesla v něm nejsou, ty agent doplní s tebou.
Pro zvědavé
Technické detaily
Stack a tok dat Jellyfin · FastAPI · aria2 · Samba
- Jellyfin
- Oficiální image v Dockeru pod běžným uživatelem. Knihovny Filmy a Seriály s metadaty v češtině, složka s médii připojená jen pro čtení. Převod videa přes Intel Quick Sync (grafika v procesoru, zařízení /dev/dri), dekóduje H.264, HEVC 10 bit, AV1 i VP9, kóduje H.264 a HEVC. Cache a dočasné soubory převodu leží na disku s filmy, ne ve složce serveru.
- Stahovač
- FastAPI a aria2 v jednom kontejneru. Webshare API: salt, heslo přes md5crypt a SHA-1, přihlášení, token na 50 minut, pak informace o souboru a přímý odkaz. Implementaci md5crypt jsem napsal sám a ověřil proti openssl. aria2 má RPC jen uvnitř kontejneru s heslem, které se generuje při každém startu. Nastavení: 16 spojení, 16 dílů po 4 MB, tři stahování naráz, pokračování po restartu.
- Hotové stahování
- aria2 po dokončení spustí skript, který soubor přesune ze skryté složky na místo, uklidí prázdné složky a zavolá v Jellyfinu obnovení celé knihovny. Když to selže, pošle ještě klasické hlášení o novém souboru.
- Sdílená složka
- Samba s vlastní konfigurací a dvěma sdílenými složkami. Jen SMB2 a novější, bez přístupu pro hosty, šifrování SMB3 zapnuté, pokud ho klient umí.
- Síť
- Všechny porty jen na domácí a VPN adrese serveru, nic přes Cloudflare Tunnel. Video přes tunel by bylo pomalé a bezplatný tunel na přenos videa není určený. Mimo domov se dívám přes Tailscale.
Zabezpečení stahovače stránka, která umí mazat
| Hrozba | Co s ní |
|---|---|
| Hádání hesla | 1,5 s brzda po chybě, po pěti chybách z jedné adresy blok na 15 minut |
| Ukradená relace | podepsaná cookie bez hesla, HttpOnly a SameSite, klíč přežije restart, volitelně 90 dní |
| Mazání mimo knihovnu | jen uvnitř složek Filmy a Seriály, kontrola cesty i skutečného cíle, takže neprojde ani .. ani symbolický odkaz ven |
| Stahovač jako proxy do sítě | přímé odkazy na domácí a vnitřní adresy odmítne |
| Jellyfin | bez přihlášení knihovnu neukáže, admin se po 10 chybných pokusech zamkne (ve výchozím stavu bez omezení) |
| Tajné údaje | přihlašovací údaje k Webshare a klíč k Jellyfinu jen v souboru prostředí s právy pro vlastníka |
Všechno z tabulky jsem po nasazení vyzkoušel útočnými požadavky: cesty s .., symbolický odkaz ven, odkazy na domácí adresy a série špatných hesel.
Televize a formáty co přehraje napřímo
| Formát | Samsung s Tizenem | Co s tím |
|---|---|---|
| H.264, HEVC 10 bit, AV1, VP9 | napřímo | nic |
| HDR10, HDR10+ | napřímo | nic |
| Dolby Vision profil 8 | jako HDR10 | nic, soubor má HDR10 jako zálohu |
| Dolby Vision profil 5 | fialový obraz | jen s převodem na serveru |
| Zvuk DTS | neumí | vybrat stopu AC3 nebo TrueHD, jinak server převede zvuk |
Filmy se pojmenovávají Název (rok)/Název (rok).mkv a titulky Název (rok).cs.srt. Podle toho Jellyfin najde správný film i český popis.
Dál