B2C · Xtream · Reseller





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
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)
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.
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.
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.
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.
Č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.
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.
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.
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.
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.
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.
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.
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
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).
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.
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
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
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
Pridobi podrobne informacije za posebno VOD postavko, vključno s spletnimi povezavami metapodatkov in tokov.
ID toka VOD (UUID)
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
ID toka VOD
naslov VOD
Datum dodajanja (ISO 8601)
URL povezave do tokov
Metapodatki za video/avdio kodek
Pridobite informacije o serijah s celotno sezono in seznami epizod, razvrščenih po številki sezone.
ID serije (UUID)
Številka sezone
Prikazno ime sezone
Število epizod v sezoni
Datum predvajanja sezone
Pregled sezone / opis
URL naslovne slike sezone
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
Datum dodajanja (ISO 8601)
Številka sezone
Informacijski objekt epizode (enaka struktura kot VOD informacije)
URL povezave do tokov
Metapodatki za video/avdio kodek
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