×

📺 IPTV

B2C · Xtream · Reseller

Configurare IPTV

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

Reproducere, nu mutare

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.

Capacitate

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.

Notă de citire

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

tmpfs introducere.

Calcularea dimensiunii

tmpfs dimensiune calcul.

Protecție OOM

tmpfs OOM protecție.

Repornire

tmpfs repornire.

Cazuri de utilizare

tmpfs cazuri de utilizare.

Vârsta de fuzionare

tmpfs fuzionare vârstă.

Provisioning

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.

Seed de pornire implicit

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.

Sănătate

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.

Modificare dimensiune

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

IPTV Gestioneaza Users

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 &amp; 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).

Titlu

Prezentare generală

Prezentare generală a B2C API.

Autentificare

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

Informații utilizator

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

Categorii

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

Detalii VOD

Descrierea detaliilor VOD

Descrierea ID-ului de detalii VOD

Titlu 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

Titlu flux VOD

VOD flux ID

Nume VOD

VOD adăugat

Legături VOD

Metadate VOD

Detalii serie

Descrierea detaliilor seriei

Descrierea ID-ului de detalii serie

Sezoane

Număr sezon

Nume sezon

Număr de episoade sezon

Data premierei sezonului

Prezentare sezon

Copertă sezon

Episoade

Descrierea episoadelor

Câmpuri episod

ID episod

TMDB ID episod

Număr episod

Titlu episod

Episod adăugat

Sezon episod

Informații episod

Legături episod

Metadate episod

Note

Note

Răspuns informații utilizator

Descrierea tokenului de informații utilizator