×

📺 IPTV

B2C · Xtream · Reseller

IPTV Správa uživatelů

Archivní úložné vrstvy

Trojvrstvý archivní systém pro 500+ současných klientů. Nakonfigurujte v Konfigurace > Úložiště > Vrstvy úložiště. Každá vrstva má nezávislý životní cyklus, výpočet kapacity a chování při selhání.

Kodér

Write Buffer — dočasné úložisko pred flush.

2h horké okno (NVMe nebo tmpfs)

→ mirror (nepřetržitě)

Archive Flow — zapisuje do disk storage tier.

50 TB, retence 14 dní

→ prefetch na vyžádání

Mezipaměť přehrávání

1 TB warm cache, 500+ klientů

Klienti

Zrcadlení, ne přesun

Segmenty starší než mirror_min_age_minutes se KOPÍRUJÍ do RAID nepřetržitě. write_buffer drží 2h horké okno, takže přetočení na nedávné zůstane na rychlém úložišti. Teprve po evict_age_minutes (a pouze když ověřeno-zrcadleno) se segmenty smažou z write_buffer. RAID vždy má dlouhodobou kopii — žádné hodinové burst transfery.

Vrstva

Účel

Nastavení

Write buffer

Přijímá segmenty 24/7, udržuje 2hodinové okno pro rychlé přehrávání nedávného přetočení zpět, chrání RAID před náhodným IO. Zařízení může být fyzický oddíl NVMe (produkce) nebo tmpfs (vývoj/testovací box bez fyzického NVMe — viz sekce tmpfs níže).

device_path (blokové zařízení nebo 'tmpfs'), tmpfs_size_pct (10-50% MemAvailable když tmpfs), mirror_min_age_minutes, evict_age_minutes, flush_threshold_percent (vynucuje flush trigger)

HDD RAID Archiv

Dlouhodobé úložiště pro plnou archivaci (výchozí 14 dní). Přijímá kontinuální trickle zrcadlení z write_buffer — sekvenční zápis bez hodinových výbuchů. Přežije restart. RAID přežije selhání jednoho disku.

Archive Tier Nastavenia

Playback cache (volitelně)

Mezipaměť pro čtení populárních souborů starších než 2 hodiny (např. náhled EPG). Naplňuje se z archivu na vyžádání po překročení prahu popularity (3 zásahy / 5 minut). Zařízení může být NVMe nebo tmpfs.

Cache Tier Nastavenia

Výpočet kapacity

live writes × 2h = velikost okna write_buffer hot. Příklad: 50 streamů × 8 Mbps × 2h ≈ 36 GB. Přidejte ~30% rezervy pro zpoždění mirror trickle → ~50 GB write_buffer stačí pro 50 streamů. RAID velikost pro plnou retenci: 50 × 8 Mbps × 14 dní ≈ 6 TB.

Čtení (hledání s vědomím o stupních)

Stream.dvr_file_path/2 testuje write_buffer → playback_cache → archiv v pořadí. Segment v 2h horké okně je podáván z write_buffer nativní rychlostí, přestože existuje také na RAID. Nginx X-Accel-Redirect podává soubory přímo bez procházení Phoenixem.

tmpfs Virtuální disk (vývoj/test)

Každá vrstva může místo fyzického blokového zařízení používat RAM-backed tmpfs virtuální disk. Užitečné pro dev boxy bez náhradního NVMe, nebo pro efemérní testovací prostředí. Rozbalovací seznam zařízení Storage Tier obsahuje možnost 'tmpfs (virtuální disk z RAM)', která nahradí výběr cesty zařízení posuvníkem procenta.

Velikost v % volné RAM

Alokace se zadává jako procento MemAvailable (z /proc/meminfo) — krok 10, platné hodnoty 10/20/30/40/50. Tvrdá dolní hranice 10% (validace zamítne nižší). Tvrdá horní hranice 50%. Výchozí 30%. Na hostiteli s 100 GB MemAvailable: 10% = 10 GB, 30% = 30 GB, 50% = 50 GB. Velikost se přepočítává a remountuje živě, když je posuvník přesunut a uložen.

Ochrana proti OOM

Pokud by vypočítaný cíl překročil 60% aktuálního MemAvailable, mount je odmítnut a vrstva zůstane offline (Stream.archive_path padá na další zdravou vrstvu). Zabraňuje agresivnímu nastavení v zabití BEAM přes OOM. Guard běží jak při startu, tak při každém Save v UI.

Perzistence restartování

tmpfs existuje v RAM — veškerý obsah bufferu, který je právě zpracováván, bude při restartu hostitele ztracen. Záznam fstab zapsaný při zprovoznění automaticky znovu připojí prázdnou tmpfs při dalším startu, ale staré segmenty se nevrátí. Zrcadlení do archivu pokračuje normálně pro vše, co bylo před restartem již zrcadleno — ztracena je pouze poslední nezrcadlená část (obvykle < mirror_min_age_minutes). Pro produkci použijte fyzické NVMe zařízení; tmpfs je určeno jako náhrada pro vývoj/testování.

Kdy používat tmpfs

Použijte tmpfs pro write_buffer, když: (a) vývojový/testovací box nemá volný NVMe, ale stále chcete plný DVR pipeline pro integrační testování, (b) operátor chce ověřit chování zrcadlení + archivu bez předchozího nákupu NVMe, (c) ephemeral testování, kde je ztráta při restartu přijatelná. Nepoužívejte tmpfs v produkci — RAM je volatilní a řádově dražší než NVMe na GB retention.

Rychlejší vyprazdňování pro tmpfs

Pokud je write tier tmpfs, StorageTierFlush používá těsnější výchozí hodnoty — mirror_min_age 2 min, evict_age 15 min (vs 5 min / 120 min pro fyzický NVMe). RAM je dražší než disk, takže horké okno zůstane menší. Override přes MIRROR_MIN_AGE_MINUTES / EVICT_AGE_MINUTES env vars pokud je potřeba.

Automatické zprovoznění stupňů a bezpečnost

Stupně jsou nakonfigurovány jednou přes Konfigurace > Úložiště > Stupně úložiště a automaticky zprovozněny — na hostiteli není třeba ručně upravovat mkfs/mount/fstab. StorageTier.ensure_all_provisioned/0 se spouští při každém startu z SystemInitializer a je idempotentní: již připojené stupně jsou přeskočeny, chybějící zařízení jsou ignorována, stupně tmpfs se po restartu čistě znovu připojí.

Výchozí startovací semínko

Při prvním spuštění (bez write tieru v DB) systém automaticky vytvoří write tier založený na tmpfs s alokací 30 % MemAvailable, připojený na /mnt/nvme_write. To poskytuje funkční DVR pipeline ihned po instalaci na jakémkoli hostiteli s dostatečnou RAM. Operátor může později přepnout zařízení na fyzický NVMe přes UI bez ztráty nastavení ostatních vrstev.

Zdraví a přepínání

Stream.archive_path/1 vrací první 'zdravý' stupeň — write_buffer, pokud je připojen, zapisovatelný a volné místo přesahuje bezpečnostní minimum, jinak přechází do režimu archive (degradovaný režim). Bezpečnostní minimum je 20 % pro tmpfs (přísně RAM) a 2 % pro bloková zařízení. Koncový bod tier_health poskytuje informace o připojení/zapisovatelnosti/volném prostoru pro každý stupeň pro monitorování.

Živá změna velikosti

Změna tmpfs_size_pct v UI spustí umount + remount s novou velikostí na Save. Aktivní DVR zápisy jsou krátce pozastaveny (přechod mount < 1 s). Doporučení: měňte velikost tmpfs pouze, když je DVR write rate nízká, a zvažte restart streamů později, aby si vyzvedli nový mount správně.

Základní URL — OSTV Player

Pole balíčku

API balíčků

Politika hesel

API prodejců

Nastavení

Pole uživatele

Správa uživatelů

Správa uživatelů IPTV

Přehled správy IPTV obsahu

Přidávání a správa živých streamů

Živé kanály — přidávání a úpravy

Importování obsahu

Hromadný import

Import M3U playlistu

VOD — správa videí na vyžádání

Přidávání filmů

Seriály — správa seriálů a epizod

Přidávání seriálů

Přidávání epizod

Rádio — správa rozhlasových stanic

Přidávání stanic

Organizace obsahu do kategorií

Správa kategorií

Přiřazování obsahu do kategorií

Správa bouquetů

Vytváření bouquetů

Přiřazování streamů do bouquetů

Správa uživatelů a předplatitelů

Přidávání uživatelů

Přiřazování balíčků uživatelům

Správa balíčků

Vytváření balíčků

Přiřazování bouquetů do balíčků

Synchronizace s Flussonickem

Automatická synchronizace

Manuální synchronizace

Správa miniatur a ikon

Nahrávání ikon

Automatické stahování miniatur

Fakturácia a Úvery

Přehled

API B2C (Business-to-Consumer) poskytuje autentizaci a přístup ke streamům pro koncové přehrávače. Uživatelé se autentizují pomocí uživatelského jména a hesla a obdrží časově omezený autentizační token pro další požadavky.

Ověřování

Ověřte uživatele a získejte auth_token pro další volání API.

Metoda

Koncový bod

Tělo požadavku

Parametr

Typ

Povinné

Popis

Ano

Přihlašovací jméno uživatele

Heslo uživatele

Příklad požadavku

Pole odpovědi

Úspěšná odpověď (200)

Šifrovaný ověřovací token pro následující volání API

Datum/čas vypršení tokenu v ISO 8601 formátu

Příklad úspěšné odpovědi

Chybová odpověď (403)

Popis chybové zprávy

HTTP stavový kód

Příklad chybové odpovědi

Informace o uživateli

Získat informace o ověřeném uživateli pomocí auth tokenu.

Pole odpovědi

Uživatelské jméno ověřeného uživatele

Zpráva serveru (prázdné pokud žádná)

Stav ověření (1 = ověřen)

Stav účtu: Aktivní, Zablokovaný, Zakázaný, Zkušební

Datum vypršení platnosti účtu (null, pokud je neomezené)

Počet aktuálních aktivních připojení

Datum vytvoření účtu ve formátu ISO 8601

Maximální povolený počet současných připojení

Seznam povolených formátů výstupního streamu

Název poskytovatele majitele/prodejce uživatele (null pokud žádný)

URL image loga poskytovatele (null pokud žádný)

URL obrázku loga poskytovatele pro zobrazení v kolapsu 208x208 (null, pokud není)

Aktuální čas serveru ve formátu ISO 8601

Příklad požadavku

Kategorie

Načtěte kategorie filtrované podle typu. Dostupné typy: live (streamy), vod (filmy), series (seriály).

Typ kategorie: live, vod nebo series

ID kategorie jako řetězec

Název kategorie k zobrazení

ID nadřazené kategorie (0 pokud kořen)

MD5 hash obsahu pro neplatnost mezipaměti

Příklad požadavku

Detail VOD

Načíst podrobné informace o konkrétní položce VOD, včetně metadat a odkazů na stream.

ID streamu VOD (UUID)

Pole objektu Info

URL obalu filmu

Identifikátor TMDB

URL obrázku pozadí

Žánr

Děj / popis

Členové obsazení

Hodnocení (0-10)

Jméno režiséra

Datum vydání

Trvání v sekundách

Délka jako formátovaný řetězec

Pole ID kategorií

1 pokud obsah pro dospělé, 0 jinak

Pole objektu VOD

ID streamu VOD

Název VOD

Datum přidání (ISO 8601)

URL odkazů streamu

Metadata kodeku videa/audia

Detail série

Získat informace o sérii s úplným seznamem sezón a dílů seskupeným podle čísla sezóny.

ID série (UUID)

Pole pole sezón

Číslo sezóny

Název sezóny k zobrazení

Počet dílů v sezóně

Datum premiéry sezóny

Přehled sezóny / popis

URL adresa obrázku obalu sezóny

Objekt epizod

Mapa klíčovaná podle řetězce čísla sezóny. Každá hodnota je pole objektů dílů.

Pole objektu dílu

ID dílu

ID dílu TMDB

Číslo dílu v rámci sezóny

Název dílu

Datum přidání (ISO 8601)

Číslo sezóny

Objekt informací o epizodě (stejná struktura jako VOD info)

URL odkazů streamu

Metadata kodeků videa/audia

Poznámky

Platnost tokenu závisí na roli uživatele: admin = 365 dní, ostatní = 30 dní|Zakázané účty se nemohou přihlásit (vrací 403)|Každé úspěšné přihlášení aktualizuje časové razítko last_login uživatele|Tokeny jsou šifrované a obsahují user_id, username, roli a datum vypršení platnosti

Úspěšná odpověď (200)

Auth token získaný z koncového bodu /auth