×

📺 IPTV

B2C · Xtream · Reseller

IPTV Upravljanje uporabnikov

Arhivne shranilniške ravni

Trinivojski arhivski sistem za 500+ sočasnih strank. Konfigurirajte v Config > Storage > Storage Tiers. Vsaka raven ima neodvisen življenjski cikel, izračun zmogljivosti in nadomestno vedenje.

Kodirnik

Medpomnilnik za pisanje

2-urno topel okno (NVMe ali tmpfs)

→ ogledalo (neprekinjeno)

HDD RAID 5

50 TB, 14 dni hrambe

→ vnaprejšnji prenos na zahtevo

Predpomnilnik predvajanja

1 TB toplega predpomnilnika, 500+ odjemalcev

Stranke

Ogledalo, ne premikaj se

Segmenti starejši od mirror_min_age_minutes so KOPIRANI na RAID neprekinjeno. write_buffer drži drseči 2-urni topel okno, zato je predvajanje z navijanjem na nedavno ostane na hitri shranilnici. Le po preteku evict_age_minutes (in samo kadar preverjeno-ogledan) so segmenti izbrisani iz write_buffer. RAID ima vedno kopijo za dolgo repo — brez urnih razbojev prenosa.

Raven

Namen

nastavitve

Pisalni medpomnilnik

Prejema segmente 24 ur na dan, vse dni v tednu, ima 2-urno vroče okno za hitro predvajanje pred kratkim in nazaj, ščiti RAID pred naključnimi IO. Naprava je lahko fizična particija NVMe (produkcijska) ali tmpfs (razvijalsko/testno polje brez fizičnega NVMe – glejte razdelek tmpfs spodaj).

device_path (blokiraj naprava ali 'tmpfs'), tmpfs_size_pct (10-50% MemAvailable ko je tmpfs), mirror_min_age_minutes, evict_age_minutes, flush_threshold_percent (prisili preplavljenje sprožilca)

Arhiv HDD RAID

Dolgoročna shranjevanja za polno zadrževanje (privzeto 14 dni). Prejema stalen tok ogledkov iz write_buffer — sekvencialno pisanje, brez urnih razbojev. Preživi ponovno zagon. RAID preživi okvaro enega diska.

retention_days, raid_device, nginx_location, min_free_percent

Predpomnilnik predvajanja (izbirno)

Predpomnilnik na strani za branje za priljubljene datoteke, starejše od 2 ur (npr. nadomestni EPG). Izpolnjeno iz arhiva na zahtevo po pragu priljubljenosti (3 zadetki / 5 min). Naprava je lahko NVMe ali tmpfs.

prefetch_hours, max_sessions, eviction_policy (session/lru/fifo)

Zmogljivost izč

pisanje v živo × 2h = velikost vročega okna write_buffer. Primer: 50 tokov × 8 Mbps × 2h ≈ 36 GB. Dodajte ~30 % prostora za zrcalno curljanje zaostanka → ~50 GB write_buffer je dovolj za 50 tokov. Velikost RAID za popolno hrambo: 50 × 8 Mb/s × 14 dni ≈ 6 TB.

Branje (iskanje glede na raven)

Stream.dvr_file_path/2 sondi write_buffer → playback_cache → arhiv po vrsti. Segment v 2-urnem toplotnem oknu je služen iz write_buffer pri nemotenih hitrostih, čeprav obstaja tudi na RAID. Nginx X-Accel-Redirect služi datoteke neposredno brez skozi Phoenix.

Virtualni disk tmpfs (dev/test)

Vsaka raven je lahko uporabila RAM-nagrnjeno tmpfs navidezno disk namesto fizične blok naprave. Koristno za dev boksov brez rezervnega NVMe ali za efemerne preskusne okolje. Shranilnik Tier kartica naprava padajoči seznam vsebuje 'tmpfs (navidezni disk iz RAM)' izbira, ki nadomešča izbor poti naprave z drsnik.

Velikost v % prostega RAM-a

Dodelitev je navedena kot odstotek MemAvailable (iz /proc/meminfo) — korak 10, veljavne vrednosti 10/20/30/40/50. Trda etaža 10% (validacija zavrne spodaj). Trda strop 50%. Privzeto 30%. Na gostitelju z 100 GB MemAvailable: 10% = 10 GB, 30% = 30 GB, 50% = 50 GB. Velikost se ponovno izračuna in ponovno montira v živo, ko se drsnik premakne in shrani.

OOM varovalo

Če bi bila izračunana ciljna vrednost presegla 60% trenutnega MemAvailable, je montaža zavrnjena in raven ostane brez povezave (Stream.archive_path pade do naslednje zdravega ravni). Preprečuje agresivno nastavitev pred ubijanjem BEAM prek OOM. Varnostna funkcija teče tako ob zagonu kot pri vsakem Shranjevanju v UI.

Obstoj ob ponovnem zagonu

tmpfs živi v RAM-u — vsaka vsebina medpomnilnika je IZGUBLJENA, ko se gostitelj znova zažene. Vnos fstab, zapisan ob času zagotavljanja, ob naslednjem zagonu samodejno ponovno namesti prazne tmpfs, vendar se stari segmenti ne vrnejo. Zrcaljenje v arhiv se nadaljuje normalno za vse, kar je bilo že zrcaljeno pred ponovnim zagonom – izgubljeno je le zadnje nezrcaljeno okno (običajno < vrednosti mirror_min_age_minutes). Za proizvodnjo uporabite fizično napravo NVMe; tmpfs je mišljen kot dev/test nadomestek.

Kdaj uporabiti tmpfs

Uporabite tmpfs za write_buffer, ko: (a) dev/test box nima rezervnega NVMe, vendar še vedno želite, da celoten cevovod DVR teče za integracijsko testiranje, (b) želi operater preveriti delovanje zrcaljenja + arhiva, ne da bi vnaprej kupil NVMe, (c) kratkotrajno testiranje, kjer je izguba ob vnovičnem zagonu sprejemljiva. NE uporabljajte tmpfs v produkciji — RAM je nestanoviten in za več velikosti dražji od NVMe na GB hrambe.

Hitrejše izpiranje za tmpfs

Ko je pisalna raven tmpfs, StorageTierFlush uporabi tesnejše privzete — mirror_min_age 2 min, evict_age 15 min (vs 5 min / 120 min za fizični NVMe). RAM je dražji kot disk, zato je drseči topel okno manjše. Po potrebi preglasuj z MIRROR_MIN_AGE_MINUTES / EVICT_AGE_MINUTES spremenljivkami okolja.

Tier Auto-Provisioning & Safety

Stopnje se konfigurirajo enkrat v Config > Storage > Storage Tiers in samodejno omogočijo — brez ročnega urejanja mkfs/mount/fstab na gostitelju. StorageTier.ensure_all_provisioned/0 se zažene ob vsakem zagonu iz SystemInitializerja in je idempotenten: že nameščene ravni so preskočene, manjkajoče naprave so brez operacij, ravni tmpfs se po vnovičnem zagonu znova čisto namestijo.

Privzeto zagonsko seme

Ob prvem zagonu (brez pisalne ravni v DB) sistem samodejno ustvari s tmpfs podprto pisalno raven s 30 % dodelitvijo MemAvailable, točka namestitve /mnt/nvme_write. To omogoča delujoč cevovod DVR takoj po namestitvi na katerem koli gostitelju z dovolj RAM-a. Operater lahko pozneje preklopi napravo na fizični NVMe prek uporabniškega vmesnika, ne da bi pri tem izgubil druge nastavitve ravni.

Zdravje in preklop

Stream.archive_path/1 vrne prvo 'zdravo' raven — write_buffer, če je mounted+writable+free_pct nad varnostnim pragom, drugače pade nazaj v arhiv (degradirani način). Varnostni prag 20 % za tmpfs (strogo RAM), 2 % za blokovne naprave. končna točka tier_health izpostavlja nadziranjem mounted/writable/free_pct na ravni.

Sprememba velikosti v živo

Spreminjanje tmpfs_size_pct v UI sprožи umount + remount z novo velikostjo na shranjevanju. Aktivne DVR pisalne so na kratko zaustavjene (prehod montaže < 1 s). Priporočilo: spremenite tmpfs velikost le, ko je pisalna hitrost DVR nizka, in razmislite o ponovnem zagonu tokov za zagotovitev, da čisto prevzamejo novo montažo.

Osnovni URL — predvajalnik OSTV

Polja paketa

API paketov

Politika gesel

API prodajalca

nastavitve

Uporabniška polja

Upravljanje uporabnikov

Upravljanje IPTV uporabnikov

Osnovni URL — OSTV Player

Aplikacija OSTV Player omogoča uporabnikom spremembo osnovnega URL strežnika (naslov API). Ta funkcija je na voljo samo za uporabnike s ponudnikom, nastavljenim na root.

Razlog: sprememba osnovnega URL je namenjena samo skrbnikom/root uporabnikom, da lahko preklopijo med strežniki (npr. produkcija proti testiranju). Navadni uporabniki imajo fiksni osnovni URL in ga ne morejo spremeniti.

Polja uporabnika

API za pakete

Vrne seznam vseh aktivnih paketov s cenami in obdobji zaračunavanja.

Seznam upravljavskih uporabnikov (preprodajalci / ponudniki).

Vrne stanje kredita za določenega upravljavskega uporabnika.

Polja paketa

API preprodajalca

API za preprodajalce/ponudnike. Avtorizacija: Authorization: Bearer mtk_... (žeton iz Manage Users). Preprodajalec vidi samo lastne stranke (owner_id).

Politika gesel

Geslo je obvezno pri ustvarjanju naročnika. Pravila:

Najmanj 8 znakov

Vsaj 1 velika črka (A-Z)

Vsaj 1 posebni znak (!@#$%^&* itd.)

Velja za UI in API. Pri posodobitvi je geslo neobvezno, a če je navedeno, mora izpolnjevati pravila.

Nastavitve

Samodejno zagotavljanje nivojev in varnost

Zaznavanje zmogljivosti + datotečnega sistema: ko je iz spustnega menija izbran prosti NVMe, se zmogljivost (GB) prebere iz lsblk -bn -o SIZE in trenutni FS iz blkid (s fallbackom na celoten disk). Obrazec prikazuje vrednosti samo za branje — brez ročnega vnosa, brez napak.

Mehanizem izpraznitve nivoja — neprekinjeno zrcaljenje

StorageTierFlush GenServer se izvaja vsakih 60s. Namesto čakanja, da mapa ure postara in premika kot 5GB paket, neprekinjeno pretvarja segmente na RAID, medtem ko vzdržuje 2h vroče okno na NVMe za hitro predvajanje nedavnega previjanja. Dve fazi sta ločeni — kopiranje in brisanje sta ločeni, preverjeni operaciji.

Zakaj neprekinjeno zrcaljenje prekaša cakaj 60min, premakni paket: (1) Obremenitev RAID je enakomerna — brez 5GB paketov na mejah ur, le kapljanje 7MB segmentov; (2) Večina vročih podatkov je že na RAID — obnovitev po katastrofi izgubi le zadnje minute; (3) Izmetavanje je preverjeno na datoteko — delna napaka zrcaljenja je zaznana preden se izgubijo podatki na NVMe.

Varnost segmentov v teku: zrcaljenje pobere le datoteke starejše od MIRROR_MIN_AGE_MINUTES prek find -mmin +5. Datoteka segmenta, ki jo FFmpeg še dopolnjuje, ne bo v seznamu — brez možnosti prenosa delnega zapisa.

Uglaševanje na razmestitev (.env)

500–1000

Pravilo za velikost:

Koledar za predogled DVR

Zavihek predogleda DVR prikazuje na strežniku upodobljeni koledar, ki označi samo dni, za katere obstajajo posnetki na disku. Pregled se izvede prek vsakega nivoja (write_buffer + read_cache + archive + legacy), tako segment, ki je bil pravkar izpraznjen z NVMe na RAID, ostane viden brez zamude.

Dnevi s posnetki so klikabilni (modri) — klik vnaprej izpolni vnos datuma/časa s tem dnem ob 00:00; uporabnik nato izbere uro. Dnevi brez posnetka so zatemnjenji in neaktivni.

Implementirano v Stream.available_dvr_days/1 prek find -mindepth 4 -maxdepth 4 -type d na vsakem namestišču nivoja; deduplicirano prek nivojev (dan je prikazan enkrat, tudi če ima segmente v več nivojih med oknom izpraznitve).

API za predvajalnik B2C

Pregled

API B2C (Business-to-Consumer) omogoča preverjanje pristnosti in dostop do toka za aplikacije predvajalnikov končnih uporabnikov. Uporabniki se avtentificirajo z uporabniškim imenom/geslom in prejmejo časovno omejen avtentični žeton za nadaljnje zahteve.

Preverjanje pristnosti

Preverite pristnost uporabnika in pridobite auth_token za nadaljnje klice API-ja.

Metoda

Končna točka

Telo zahteve

Parameter

Vrsta

Obvezno

Opis

ja

Uporabniško ime za prijavo

Uporabniško geslo

Primer zahteve

Polja odgovora

Uspešen odziv (200)

Šifriran žeton avtentifikacije za naslednje klice API

Datum/čas poteka žetona v ISO 8601 obliki

Primer uspešnega odziva

Odgovor napake (403)

Sporočilo z opisom napake

HTTP koda stanja

Primer odziva na napako

Informacije o uporabniku

Pridobite informacije o overjenem uporabniku z uporabo žetona za preverjanje pristnosti.

Odzivna polja

Uporabniško ime overjenega uporabnika

Sporočilo strežnika (prazno, če nobeno)

Stanje avtentifikacije (1 = avtenticiran)

Stanje računa: Delujoče, zabranjeno, onemogočeno, preskus

Datum poteka računa (nič, če je neomejen)

Število trenutnih aktivnih povezav

Datum ustvarjanja računa v formatu ISO 8601

Največje dovoljene sočasne povezave

Seznam dovoljenih formatov izhodnega toka

Ime ponudnikaLastnikaNabave/prodajalca uporabnika (null, če nobeno)

URL slike logotipa ponudnika (null, če nobeno)

URL ponudnikove strnjene slike logotipa 208 x 208 (nična, če ni)

Trenutni čas strežnika v formatu ISO 8601

Primer zahteve

kategorije

Pridobite kategorije, filtrirane po vrsti. Razpoložljive vrste: v živo (tokovi), vod (filmi), serije.

Vrsta kategorije: v živo, vod ali serija

ID kategorije kot niz

Prikazno ime kategorije

ID starševske kategorije (0 če koren)

Zgoščevanje vsebine MD5 za razveljavitev predpomnilnika

Primer zahteve

Podrobnosti VOD

Pridobi podrobne informacije za posebno VOD postavko, vključno s spletnimi povezavami metapodatkov in tokov.

ID toka VOD (UUID)

Polja informacijskih objektov

URL naslovne slike

identifikator TMDB

URL slike kulise

Žanrski niz

Parcela / opis

Člani igralske ekipe

Vrednost ocene (0-10)

Ime režiserja

Datum izdaje

Trajanje v sekundah

Trajanje kot oblikovani niz

Niz ID-jev kategorij

1 če odrasla vsebina, 0 drugače

Polja predmeta VOD

ID toka VOD

naslov VOD

Datum dodajanja (ISO 8601)

URL povezave do tokov

Metapodatki za video/avdio kodek

Podrobnosti serije

Pridobite informacije o serijah s celotno sezono in seznami epizod, razvrščenih po številki sezone.

ID serije (UUID)

Polja niza letni časi

Številka sezone

Prikazno ime sezone

Število epizod v sezoni

Datum predvajanja sezone

Pregled sezone / opis

URL naslovne slike sezone

Objekt epizod

Zemljevid je označen z nizom številk sezone. Vsaka vrednost je niz predmetov epizode.

Polja predmetov epizode

ID epizode

ID epizode TMDB

Številka epizode v sezoni

Naslov epizode

Datum dodajanja (ISO 8601)

Številka sezone

Informacijski objekt epizode (enaka struktura kot VOD informacije)

URL povezave do tokov

Metapodatki za video/avdio kodek

Opombe

Potek žetona je odvisen od vloge uporabnika: admin = 365 dni, other = 30 dni|Onemogočeni računi ne morejo preveriti pristnosti (vrne 403)|Vsaka uspešna prijava posodobi časovni žig last_login uporabnika|Žetoni so šifrirani in vsebujejo user_id, uporabniško ime, vlogo in potek

Uspešen odziv (200)

Auth token pridobljen iz končne točke /auth