B2C · Xtream · Reseller





Nivele stocare
Sistem de arhivare pe 3 niveluri pentru 500+ clienți. Configurați: Config > Storage > Storage Tiers. Fiecare nivel are un ciclu independent.
Encoder
Buffer scriere
2h fereastră caldă (NVMe sau tmpfs)
- mirror (continuu)
HDD RAID 5
50 TB, 14 zile
- prefetch la cerere
Cache redare
1 TB cache cald, 500+ clienți
Clienți
Segmentele mai vechi decât mirror_min_age_minutes sunt COPIATE pe RAID. write_buffer menține fereastră caldă de 2h. Doar după evict_age_minutes sunt șterse. RAID are întotdeauna copia long-tail.
Nivel
Scop
Setări
Scriere
Scopul scrierii.
Setări de scriere.
Arhivă
Scopul arhivei.
Setări arhivă.
Cache
Scopul cache-ului.
Setări cache.
live writes x 2h = fereastră write_buffer hot. Exemplu: 50 stream-uri x 8 Mbps x 2h ~ 36 GB. ~30%% ~ ~50 GB write_buffer suficient. RAID: 50 x 8 Mbps x 14 zile ~ 6 TB.
Stream.dvr_file_path/2 probează write_buffer -> playback_cache -> archive în ordine. Un segment în fereastra caldă de 2h este servit de write_buffer la viteze native. Nginx X-Accel-Redirect serveste fișierele direct.
tmpfs introducere.
tmpfs dimensiune calcul.
tmpfs OOM protecție.
tmpfs repornire.
tmpfs cazuri de utilizare.
tmpfs fuzionare vârstă.
Nivelurile sunt configurate o singură dată prin Config > Storage > Storage Tiers și provisioned automat - nu este nevoie de mkfs/mount/fstab manual. StorageTier.ensure_all_provisioned/0 rulează la fiecare pornire și este idempotent.
La prima pornire sistemul creează automat un write tier tmpfs cu 30%% MemAvailable, punct de montare /mnt/nvme_write. Acest lucru oferă un pipeline DVR funcțional. Operatorul poate comuta ulterior pe NVMe fizic.
Stream.archive_path/1 returnează primul nivel sănătos - write_buffer dacă este montat+scribibil+free_pct deasupra pragului, altfel archive. Prag 20%% pentru tmpfs, 2%% pentru dispozitivele bloc.
Modificarea tmpfs_size_pct în UI declanșează umount + remount cu noua dimensiune la Salvare. Scrierile DVR active sunt oprite pe scurt (< 1 s). Recomandare: modificați tmpfs doar când rata DVR este scăzută.
URL de bază — OSTV Player
Câmpuri pachet
API Pachete
Parola Policy
API Revânzător
Setari
Câmpuri utilizator
Gestionare utilizatori
URL de bază — Player OSTV
Aplicația OSTV Player permite utilizatorilor să schimbe URL-ul de bază al serverului (adresa API). Această funcție este disponibilă doar utilizatorilor cu provider setat pe root.
Motiv: Schimbarea URL-ului de bază este destinată doar administratorilor/utilizatorilor root, pentru a putea comuta între servere (ex. producție vs. testare). Utilizatorii obișnuiți au un URL de bază fix și nu îl pot modifica.
Câmpuri utilizator
API pachete
Returnează o listă a tuturor pachetelor active cu prețuri și perioade de facturare.
Lista utilizatorilor de management (revânzători / furnizori).
Returnează soldul de credit pentru un utilizator de management specific.
Câmpuri pachet
API revânzători
API pentru revânzători/furnizori. Autorizare: Authorization: Bearer mtk_... (token din Manage Users). Revânzătorul vede doar propriii clienți (owner_id).
Politica de parole
Parola este obligatorie la crearea unui abonat. Reguli:
Minimum 8 caractere
Cel puțin 1 literă majusculă (A-Z)
Cel puțin 1 caracter special (!@#$%^&* etc.)
Se aplică la UI și API. La actualizare, parola este opțională, dar dacă este furnizată trebuie să respecte regulile.
Setări
Auto-provizionare nivel & siguranță
Detectare automată capacitate + sistem de fișiere: când un NVMe liber este selectat din dropdown, capacitatea (GB) este citită din lsblk -bn -o SIZE, iar FS curent din blkid (cu fallback pe disc întreg). Formularul afișează valorile doar în citire — fără introducere manuală, fără greșeli.
Mecanism de flush nivel — oglindire continuă
StorageTierFlush GenServer rulează la fiecare 60s. În loc să aștepte ca un director de oră să "expire" și să îl mute ca un burst de 5GB, trimite segmentele la RAID continuu, menținând o fereastră hot de 2h pe NVMe pentru redare rapidă. Cele două faze sunt decuplate — copiere și ștergere sunt operații separate, verificate.
De ce oglindirea continuă depășește "așteaptă 60min, mută batch": (1) Sarcina RAID este uniformă — fără burst-uri de 5GB la granițele de oră, doar un flux de segmente de 7MB; (2) Cea mai mare parte a datelor hot este deja pe RAID — recuperarea în caz de dezastru pierde doar câteva minute; (3) Evacuarea este verificată per fișier — un eșec parțial de oglindire este detectat înainte de a pierde date NVMe.
Siguranța segmentelor în curs: oglindirea selectează doar fișierele mai vechi de MIRROR_MIN_AGE_MINUTES prin find -mmin +5. Un fișier de segment la care FFmpeg încă scrie nu va apărea în listă — fără riscul unui transfer cu scriere parțială.
Reglare per-deployment (.env)
500–1000
Regulă de dimensionare:
Calendar previzualizare DVR
Fila DVR Preview afișează un calendar redat pe server care evidențiază doar zilele pentru care există înregistrări pe disc. Scanarea rulează pe toate nivelurile (write_buffer + read_cache + archive + legacy), astfel că un segment mutat de pe NVMe pe RAID rămâne vizibil fără întârziere.
Zilele cu înregistrări sunt active (albastru) — click pre-completează câmpul datetime cu acea zi la 00:00; utilizatorul alege apoi ora. Zilele fără înregistrare sunt estompate și inactive.
Implementat în Stream.available_dvr_days/1 prin find -mindepth 4 -maxdepth 4 -type d pe fiecare mount de nivel; deduplicate între niveluri (o zi apare o singură dată chiar dacă are segmente în mai multe niveluri în fereastra de flush).
Prezentare generală
Prezentare generală a B2C API.
Descrierea autentificării
Metodă
Punct de acces
Corpul cererii
Parametru
Tip
Obligatoriu
Descriere
Da
Descrierea numelui de utilizator
Descrierea parolei
Exemplu de cerere
Câmpurile de răspuns
Răspuns de succes
Descrierea tokenului de autentificare
Descrierea期限ului
Exemplu de succes
Răspuns de eroare
Descrierea mesajului de eroare
Descrierea codului de eroare
Exemplu de eroare
Descrierea informațiilor utilizatorului
Câmpuri informații utilizator
Descrierea numelui de utilizator
Descrierea mesajului
Descrierea autentificării
Descrierea stării
Descrierea expirării
Descrierea conexiunilor active
Descrierea creării
Descrierea conexiunilor max.
Descrierea formatelor
Descrierea numelui furnizorului
Descrierea logo-ului furnizorului
Descrierea logo-ului de compresie furnizor
Descrierea timpului curent
Exemplu de informații utilizator
Descrierea categoriilor
Descrierea tipului de categorie
Descrierea ID-ului de categorie
Descrierea numelor de categorie
Descrierea categorie părinte
Descrierea cache-ului de categorii
Exemplu de categorii
Descrierea detaliilor VOD
Descrierea ID-ului de detalii VOD
Imagine VOD
VOD TMDB ID
Informații fundal
Gen VOD
Descriere VOD
Informații distribuție
Evaluare VOD
Informații regizor
Data publicării VOD
Durată VOD (secunde)
Durată VOD (minute)
Categorii VOD
Conținut pentru adulți
VOD flux ID
Nume VOD
VOD adăugat
Legături VOD
Metadate VOD
Descrierea detaliilor seriei
Descrierea ID-ului de detalii serie
Număr sezon
Nume sezon
Număr de episoade sezon
Data premierei sezonului
Prezentare sezon
Copertă sezon
Descrierea episoadelor
Câmpuri episod
ID episod
TMDB ID episod
Număr episod
Episod adăugat
Sezon episod
Informații episod
Legături episod
Metadate episod
Note
Răspuns informații utilizator
Descrierea tokenului de informații utilizator