×

📺 IPTV

B2C · Xtream · Reseller

IPTV upravljanje korisnicima

Arhivske Razine Pohrane

Troslojni arhivski sustav za 500+ istovremenih klijenata. Konfigurirajte u Config > Storage > Storage Tiers. Svaki sloj ima neovisni životni ciklus, proračun kapaciteta i rezervno ponašanje.

Koder

Međuspremnik za pisanje

2h vrući prozor (NVMe ili tmpfs)

→ ogledalo (kontinuirano)

HDD RAID 5

50 TB, zadržavanje 14 dana

→ unaprijed dohvati na zahtjev

Predmemorija reprodukcije

1 TB tople predmemorije, 500+ klijenata

Klijenti

Ogledalo, ne miči se

Segmenti stariji od mirror_min_age_minutes su KOPIRANI na RAID kontinuirano. Write_buffer drži pomičnu 2h vrući prozor tako da rewind-to-recent reprodukcija ostaje na brzoj pohrani. Samo nakon evict_age_minutes (i samo kada je provjeren-zrcaljen) su segmenti izbrisani iz write_buffer-a. RAID uvijek ima dugoročnu kopiju — bez satnih burst prijenosa.

Razina

Svrha

postavke

Pisalni medpomnilnik

Prima segmente 24/7, drži 2h vrući prozor za brzu reprodukciju nedavnog premotavanja unatrag, štiti RAID od nasumičnog IO-a. Uređaj može biti fizička NVMe particija (produkcija) ili tmpfs (dev/test box bez fizičkog NVMe-a — pogledajte tmpfs odjeljak u nastavku).

device_path (blok uređaj ili 'tmpfs'), tmpfs_size_pct (10-50% MemAvailable kada tmpfs), mirror_min_age_minutes, evict_age_minutes, flush_threshold_percent (sila flush okidač)

HDD RAID arhiva

Dugoročno spremište za potpunu retenciju (zadano 14 dana). Primi kontinuirani zrcalni tok sa write_buffer — sekvencijalni zapis, bez satnih valova. Održava se nakon ponovnog pokretanja. RAID održava kvar jedne disk-a.

retention_days, raid_device, nginx_location, min_free_percent

Playback Cache (opciono)

Predmemorija na strani za čitanje za popularne datoteke starije od 2 sata (npr. EPG nadoknada). Popunjava se iz arhive na zahtjev nakon praga popularnosti (3 pogotka / 5 min). Uređaj može biti NVMe ili tmpfs.

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

Kapacitet kalk

uživo piše × 2h = veličina vrućeg prozora write_buffer. Primjer: 50 streamova × 8 Mbps × 2h ≈ 36 GB. Dodajte ~30% prostora za zrcalno curenje zaostatka → ~50 GB write_buffer dovoljno je za 50 streamova. RAID veličine za potpuno zadržavanje: 50 × 8 Mbps × 14 dana ≈ 6 TB.

Čita (traženje s obzirom na razinu)

Stream.dvr_file_path/2 sonda write_buffer → playback_cache → arhiv redom. Segment u 2h vrućem prozoru služi iz write_buffer-a pri nativnim brzinama čak iako postoji i na RAID-u. Nginx X-Accel-Redirect służi datotekama direktno bez prolaska kroz Phoenix.

tmpfs virtualni disk (dev/test)

Svaka razina može koristiti RAM-backed tmpfs virtualni disk umjesto fizičkog blok uređaja. Korisno za dev kutije bez rezervnog NVMe, ili za efemerne test okoline. Karta Storage Tier uređaja dropdown sadrži opciju 'tmpfs (virtualni disk iz RAM-a)' koja zamjenjuje selektora putanje uređaja s postotkom klizača.

Veličina u % slobodnog RAM-a

Alokacija je navedena kao postotak MemAvailable (iz /proc/meminfo) — korak 10, valjane vrijednosti 10/20/30/40/50. Tvrda podloga 10% (validacija odbija dolje). Tvrda gornja granica 50%. Zadano 30%. Na domaćinu od 100 GB MemAvailable: 10% = 10 GB, 30% = 30 GB, 50% = 50 GB. Veličina se ponovno izračunava i ponovno montira na živo kada se klizač pomakne i spremi.

OOM zaštitar

Ako bi izračunani cilj premašio 60% trenutnog MemAvailable, montiranje se odbija i razina ostaje offline (Stream.archive_path pada kroz sljedeću zdrave razine). Sprječava agresivnu postavku od ubijanja BEAM-a via OOM. Stražar pokreće i pri pokretanju i na svakom Save u UI-ju.

Perzistencija nakon ponovnog pokretanja

tmpfs živi u RAM-u — svaki sadržaj međuspremnika u tijeku se GUBIO kada se host ponovno pokrene. Unos fstab napisan u vrijeme pružanja ponovno montira prazne tmpfove automatski pri sljedećem pokretanju, ali stari segmenti se ne vraćaju. Zrcaljenje u arhivu nastavlja se normalno za sve što je već bilo zrcaljeno prije ponovnog pokretanja — gubi se samo zadnji nezrcaljeni prozor (obično < mirror_min_age_minute value). Za proizvodnju koristite fizički NVMe uređaj; tmpfs je zamišljen kao dev/test zamjena.

Kada koristiti tmpfs

Upotrijebite tmpfs za write_buffer kada: (a) dev/test box nema rezervni NVMe, ali i dalje želite da cijeli DVR cjevovod radi za testiranje integracije, (b) operater želi potvrditi ponašanje zrcala + arhive bez kupnje NVMe unaprijed, (c) efemerno testiranje gdje je gubitak pri ponovnom pokretanju prihvatljiv. NEMOJTE koristiti tmpfs u proizvodnji — RAM je hlapljiv i nekoliko je skuplji od NVMe-a po GB zadržavanja.

Brže ispiranje za tmpfs

Kada je write razina tmpfs, StorageTierFlush koristi tisnija zadana — mirror_min_age 2 min, evict_age 15 min (vs 5 min / 120 min za fizički NVMe). RAM je skuplji od diska tako da pomična vrući prozor drži manji. Nadjačaj putem MIRROR_MIN_AGE_MINUTES / EVICT_AGE_MINUTES env var ako trebam.

Automatsko pružanje razine i sigurnost

Razine se konfiguriraju jednom putem Konfiguracija > Pohrana > Razine pohrane i automatski se dodjeljuju — nema ručnog uređivanja mkfs/mount/fstab na glavnom računalu. StorageTier.ensure_all_provisioned/0 pokreće se pri svakom pokretanju sustava iz SystemInitializera i idempotentan je: već montirani slojevi se preskaču, uređaji koji nedostaju su bez operacija, tmpfs nivoi se ponovno postavljaju čisto nakon ponovnog pokretanja.

Zadano početno mjesto za pokretanje

Pri prvom pokretanju (bez razine pisanja u DB), sustav automatski stvara tmpfs-podržan sloj pisanja s 30% MemAvailable dodjele, točka montiranja /mnt/nvme_write. To daje radni DVR cjevovod izvan kutije na bilo kojem hostu s dovoljno RAM-a. Operater može kasnije prebaciti uređaj na fizički NVMe putem korisničkog sučelja bez gubitka ostalih postavki razine.

Zdravlje i preusmjeravanje

Stream.archive_path/1 vraća prvu 'zdravu' razinu — write_buffer ako je mounted+writable+free_pct iznad sigurnosnog poda, inače se vraća u arhivu (degradirani način). Sigurnosni prag 20% ​​za tmpfs (strogo RAM), 2% za blok uređaje. tier_health krajnja točka izlaže po sloju mounted/writable/free_pct za praćenje.

Promjena veličine uživo

Promjena tmpfs_size_pct u UI pokreće umount + remount s novom veličinom na Save. Aktivna DVR pisanja su kratko pauzirana (montiranje prijelaza < 1 s). Preporuka: promijeni tmpfs veličinu samo kada je DVR write brzina niska, i razmotriti ponovno pokretanje stream-ova nakon što osiguraš da bi novo montiranje pobrali čisto.

Osnovni URL — OSTV Player

Polja paketa

API paketov

Pravila zaporke

API prodajalca

postavke

Korisnička polja

Upravljanje korisnicima

IPTV Upravljanje Korisnicima

Osnovni URL — OSTV Player

Aplikacija OSTV Player korisnicima omogućuje promjenu osnovnog URL-a poslužitelja (API adrese). Ova funkcija dostupna je samo korisnicima s postavkom provider = root.

Razlog: Promjena osnovnog URL-a namijenjena je samo administratorima/root korisnicima kako bi mogli prebacivati između poslužitelja (npr. produkcija vs. testiranje). Redovni korisnici imaju fiksni osnovni URL i ne mogu ga promijeniti.

Polja korisnika

API za pakete

Vraća popis svih aktivnih paketa s cijenama i razdobljima naplate.

Popis korisnika upravljanja (preprodavači / pružatelji usluga).

Vraća saldo kredita za određenog korisnika upravljanja.

Polja paketa

API prodavača

API za preprodavače/pružatelje usluga. Autorizacija: Authorization: Bearer mtk_... (token iz Korisnici upravljanja). Preprodavač vidi samo vlastite klijente (owner_id).

Politika lozinki

Lozinka je obavezna pri stvaranju pretplatnika. Pravila:

Najmanje 8 znakova

Najmanje 1 veliko slovo (A-Z)

Najmanje 1 poseban znak (!@#$%^&* itd.)

Primjenjuje se na sučelje i API. Pri ažuriranju, lozinka je opcionalna, ali ako je navedena mora zadovoljiti pravila.

Postavke

Automatska dodjela razine i sigurnost

Automatsko otkrivanje kapaciteta + datotečnog sustava: kada se slobodni NVMe odabere iz padajućeg izbornika, kapacitet (GB) se čita iz lsblk -bn -o SIZE, a trenutni FS iz blkid (s povratom na cijeli disk). Obrazac prikazuje vrijednosti samo za čitanje — bez ručnog unosa, bez grešaka.

Mehanizam ispražnjavanja razine — kontinuirano zrcaljenje

StorageTierFlush GenServer pokreće se svake 60 sekundi. Umjesto čekanja da sat-direktorij 'zastari' i premještanja kao grupni 5GB, segmente kontinuirano prenosi na RAID dok zadržava prozor od 2h na NVMe za brzu 'nedavnu premotavanja' reprodukciju. Dvije faze su odvojene — kopiranje i brisanje su odvojene, verificirane operacije.

Zašto kontinuirano zrcaljenje pobjeđuje 'čekaj 60 min, grupno-premjesti': (1) Opterećenje RAID-a je ravnomjerno — bez grupnih 5GB na satnim granicama, samo kapanje segmenata od 7MB; (2) Većina vrućih podataka već je na RAID-u — oporavak od katastrofe gubi samo zadnje nekoliko minuta; (3) Iseljavanje je verificirano po datoteci — djelomični neuspjeh zrcaljenja otkrije se prije gubitka NVMe podataka.

Sigurnost segmenata u tijeku: zrcalo bira samo datoteke starije od MIRROR_MIN_AGE_MINUTES putem find -mmin +5. Datoteka segmenta koja se još uvijek upisuje od strane FFmpeg neće se pojaviti na popisu — nema šanse za prijenos s djelomičnim upisom.

Podešavanje po deployu (.env)

500–1000

Pravilo veličine:

DVR pregled kalendara

Kartica DVR pregleda prikazuje serverski renderiran kalendar koji ističe samo dane za koje postoje snimke na disku. Pretraživanje se izvodi po svakoj razini (write_buffer + read_cache + archive + legacy) tako da segment koji je upravo ispražnjen s NVMe na RAID ostaje vidljiv bez kašnjenja.

Dani sa snimkama su klikabilni (plavi) — klikom se unaprijed ispunjava unos datuma i vremena s tim danom u 00:00; korisnik zatim bira sat. Dani bez snimke su prigušeni i neaktivni.

Implementirano u Stream.available_dvr_days/1 putem find -mindepth 4 -maxdepth 4 -type d na svakom montiranom punktu razine; deduplicirano po razinama (dan se prikazuje jednom čak i ako ima segmenata na više razina tijekom prozora ispražnjavanja).

B2C Player API

Pregled

B2C (Business-to-Consumer) API pruža autentifikaciju i pristup streamu za aplikacije igrača krajnjeg korisnika. Korisnici se autentificiraju korisničkim imenom/lozinkom i primaju vremenski ograničeni token autentifikacije za sljedeće zahtjeve.

Autentifikacija

Autentificirajte korisnika i nabavite auth_token za sljedeće API pozive.

metoda

Krajnja točka

Tijelo zahtjeva

Parametar

Vrsta

Potreban

Opis

Da

Korisničko ime za prijavu

Korisnička lozinka

Primjer Zahtjeva

Polja Odgovora

Uspješan odgovor (200)

Enkriptirani token autentifikacije za sljedeće API pozive

Datum/vrijeme isteka tokena u ISO 8601 formatu

Primjer uspješnog odgovora

Odgovor napake (403)

Poruka s opisom greške

HTTP status kod

Primjer odgovora na pogrešku

Informacije o korisniku

Dohvaćanje informacija o autentificiranom korisniku pomoću autentificiranog tokena.

Polja odgovora

Korisničko ime autentificiranog korisnika

Server poruka (prazna ako nema)

Status autentifikacije (1 = autentificiran)

Status računa: Aktivna, Zabranjena, Onemogućena, Trial

Datum isteka računa (nulto ako je neograničeno)

Broj trenutnih aktivnih veza

Datum kreiranja računa u formatu ISO 8601

Maksimalno dopušteno istodobno povezivanje

Popis dopuštenih formata izlaznog toka

Naziv dobavljača korisnikovog vlasnika/reseller (null ako nema)

URL dobavljačeve slike logotipa (null ako nema)

URL sažete slike logotipa pružatelja usluga 208x208 (nula ako nema)

Trenutno vrijeme poslužitelja u formatu ISO 8601

Primjer Zahtjeva

kategorije

Dohvaćanje kategorija filtriranih prema vrsti. Dostupne vrste: uživo (streamovi), vod (filmovi), serije.

Vrsta kategorije: uživo, vod ili serija

ID kategorije kao string

Naziv kategorije za prikaz

ID roditeljske kategorije (0 ako je root)

MD5 hash sadržaja za poništenje predmemorije

Primjer Zahtjeva

VOD detalji

Dohvati detaljne informacije za specifičnu VOD stavku, uključujući metapodatke i linkove stream-a.

ID VOD streama (UUID)

Polja info objekta

URL naslovne slike

TMDB identifikator

URL slike pozadine

Žanrovski niz

Parcela / opis

Članovi glavne uloge

Vrijednost ocjene (0-10)

Ime redatelja

Datum izlaska

Trajanje u sekundama

Trajanje kao formatirani niz

Niz ID-ova kategorija

1 ako je odraslih sadržaj, 0 inače

Polja VOD objekta

ID VOD streama

VOD naslov

Datum dodavanja (ISO 8601)

Linkovi URL-a Stream-a

Metapodaci video/audio kodeka

Detalj serije

Dohvatite informacije o seriji s popisima cijele sezone i epizoda, grupirane prema broju sezone.

ID serije (UUID)

Polja niza godišnjih doba

Broj sezone

Naziv sezone za prikaz

Broj epizoda u sezoni

Datum emitiranja sezone

Pregled sezone / opis

URL naslovne slike sezone

Objekta Epizode

Karta označena nizom brojeva sezone. Svaka vrijednost je niz objekata epizode.

Polja objekata epizode

ID epizode

TMDB ID epizode

Broj epizode unutar sezone

Naslov epizode

Datum dodavanja (ISO 8601)

Broj sezone

Objekt informacije epizode (ista struktura kao VOD info)

Linkovi URL-a Stream-a

Metapodaci video/audio kodeka

Bilješke

Istek tokena ovisi o ulozi korisnika: admin = 365 dana, ostalo = 30 dana|Onemogućeni računi ne mogu se autentificirati (vraća 403)|Svaka uspješna prijava ažurira korisničku vremensku oznaku last_login|Tokeni su šifrirani i sadrže user_id, korisničko ime, ulogu i istek

Uspješan odgovor (200)

Auth token dobiven iz krajnje točke /auth