B2C · Xtream · Reseller





Arkiston tallennus kerroksissa
Kolmitasoinen arkistointijärjestelmä yli 500 samanaikaiselle asiakkaalle. Konfiguroi kohdassa Asetukset > Tallennus > Tallennustasot. Jokaisella tasolla on itsenäinen elinkaari, kapasiteettilaskenta ja varajärjestelmä.
Enkooderi
Kirjoituspuskuri
2h kuuma ikkuna (NVMe tai tmpfs)
→ peilataan (jatkuva)
HDD RAID 5
50 TB, 14 päivän säilytys
→ esihaku pyydettäessä
Toistopuskuri
1 TB lämmin välimuisti, 500+ asiakasta
Asiakkaat
Segmentit, jotka ovat vanhempia kuin mirror_min_age_minutes, KOPIOITAAN RAID-levyille jatkuvasti. Kirjoituspuskuri sisältää 2h kuumaksi ikkunaksi, joten loppuun kela äskettäisille pysyy nopealla tallenuksella. Vain evict_age_minutes jälkeen (ja vain kun todennettu peilattu) poistetaan segmentit kirjoituspuskurista. RAID:lla on aina pitkähäntäisen kopio - ei tuntitason purskausta.
Taso
Tarkoitus
Asetukset
Kirjoitus puskuri
Vastaanottaa segmentit 24/7, pitää 2h kuuman ikkunan nopeaa viimeaikaista kelauksestapalautusta varten, suojaa RAIDia satunnaiselta IO:lta. Laite voi olla fyysinen NVMe-osio (tuotanto) tai tmpfs (kehitys-/testilaatikko ilman fyysistä NVMe:tä — ks. tmpfs-osio alla).
device_path (lohkolaite tai 'tmpfs'), tmpfs_size_pct (10-50% MemAvailable kun tmpfs), mirror_min_age_minutes, evict_age_minutes, flush_threshold_percent (pakota flush-laukaisin)
HDD RAID -arkisto
Pitkäaikainen tallennus täydelle säilytykselle (oletus 14 päivää). Vastaanottaa jatkuvan peilin tipautusvirran kirjoituspuskurista - peräkkäinen kirjoitus, ei tuntitason purskausta. Selviää uudelleenkäynnistyksestä. RAID selviää yksittäisen levyn vioituksesta.
retention_days, raid_device, nginx_location, min_free_percent
Toiston välimuisti (valinnainen)
Lukupuolen välimuisti suosituille tiedostoille, jotka ovat yli 2h vanhoja (esim. EPG catch-up). Täytetään arkistosta pyydettäessä suosiopraja-arvon jälkeen (3 osumaa / 5 min). Laite voi olla NVMe tai tmpfs.
prefetch_hours, max_sessions, eviction_policy (session/lru/fifo)
live-kirjoitukset × 2h = write_buffer-kuuman ikkunan koko. Esimerkki: 50 streamia × 8 Mbps × 2h ≈ 36 GB. Lisää ~30% puskuritilaa peilaustakailogille → ~50 GB write_buffer riittää 50 streamille. RAID mitoitettu täydelle säilytykselle: 50 × 8 Mbps × 14 pv ≈ 6 TB.
Stream.dvr_file_path/2 tutkii write_buffer → playback_cache → arkisto järjestyksessä. Segmentti 2h kuumassa ikkunassa palvellaan write_puskurista alkuperäisillä nopeuksilla, vaikka se onkin myös RAID:lla. Nginx X-Accel-Redirect palvelee tiedostot suoraan ilman Phoenix-läpikulkua.
Jokainen taso voi käyttää RAM-pohjaista tmpfs-näennäislevyä fyysisen lohkoyksikön sijasta. Hyödyllinen dev-laatikoille ilman varaosaa NVMe tai lyhytikäisille testausympäristöille. Tallennus kerroksessa laiteasetukset avattava sisältää 'tmpfs (virtuaalilevy RAM:sta)' -vaihtoehdon, joka korvaa laitteen polun valitsimen prosenttiluistimella.
Jako määritetään prosentteina MemAvailablesta (from /proc/meminfo) - askel 10, kelvolliset arvot 10/20/30/40/50. Kova lattia 10% (validointi hylkää alle). Kova katto 50%. Oletus 30%. 100 GB MemAvailable-isäntää: 10% = 10 GB, 30% = 30 GB, 50% = 50 GB. Koko lasketaan uudelleen ja uudelleenasennetaan, kun liukusäädintä siirretään ja tallennetaan.
Jos laskettu tavoite ylittäisi 60% nykyisestä MemAvailable-arvosta, liitos hylätään ja taso pysyy offline-tilassa (Stream.archive_path putoaa seuraavaan terveelle tasolle). Estää aggressiivisen asetuksen tappamasta BEAM OOM:n kautta. Vartija ajetaan sekä käynnistyksen että jokaisen Save UI:ssa.
tmpfs elää RAM:issa — kaikki keskeneräinen puskurin sisältö MENETETÄÄN, kun isäntä käynnistyy uudelleen. Provisioinnin yhteydessä kirjoitettu fstab-merkintä liittää tyhjän tmpfs:n automaattisesti uudelleen seuraavassa käynnistyksessä, mutta vanhat segmentit eivät palaudu. Arkistoon peilaus jatkuu normaalisti kaiken sille, mikä oli jo peilattu ennen uudelleenkäynnistystä — vain viimeinen peilaamaton ikkuna (yleensä < mirror_min_age_minutes) menetetään. Tuotantoon käytä fyysistä NVMe-laitetta; tmpfs on tarkoitettu kehitys-/testikorvaajaksi.
Käytä tmpfs:ää write_bufferille, kun: (a) kehitys-/testilaatikolla ei ole vapaata NVMe:tä, mutta haluat silti täydellisen DVR-putken integraatiotestaukseen, (b) operaattori haluaa validoida peili + arkistokäyttäytymistä ilman NVMe:n ostamista etukäteen, (c) lyhytaikainen testaus, jossa häviö uudelleenkäynnistyksen yhteydessä on hyväksyttävää. ÄLÄ käytä tmpfs:ää tuotannossa — RAM on haihtuva ja kertaluokkia kalliimpaa kuin NVMe per GB säilytystä.
Kun kirjoitustaso on tmpfs, StorageTierFlush käyttää tiukempia oletuksia - mirror_min_age 2 min, evict_age 15 min (vs 5 min / 120 min fyysiselle NVMe). RAM on kalliimpaa kuin levy, joten rullava kuuma ikkuna pidetään pienempänä. Ohita MIRROR_MIN_AGE_MINUTES / EVICT_AGE_MINUTES env vars joiden kautta tarvittaessa.
Tasot konfiguroidaan kerran kohdassa Asetukset > Tallennus > Tallennustasot ja provisoidaan automaattisesti — ei manuaalista mkfs/mount/fstab-muokkausta isännällä. StorageTier.ensure_all_provisioned/0 ajetaan jokaisessa käynnistyksessä SystemInitializerista ja on idempotentti: jo liitetyt tasot ohitetaan, puuttuvat laitteet ovat no-op, tmpfs-tasot liitetään uudelleen puhtaasti uudelleenkäynnistyksen jälkeen.
Ensimmäisessä käynnistyksessä (ei write-tasoa tietokannassa) järjestelmä luo automaattisesti tmpfs-pohjaisen write-tason, jolla on 30% MemAvailable-allokaatio, liitospiste /mnt/nvme_write. Tämä tarjoaa toimivan DVR-putken heti minkä tahansa isännän kanssa, jolla on tarpeeksi RAM:ia. Operaattori voi myöhemmin vaihtaa laitteen fyysiseen NVMe:hen käyttöliittymän kautta menettämättä muita tasokonfiguraatioita.
Stream.archive_path/1 palauttaa ensimmäisen "terveen" tason — write_buffer, jos liitetty+kirjoitettavissa+free_pct yli turvarajan, muuten palautuu arkistoon (alennettu tila). Turvaraja 20% tmpfs:lle (RAM-tiukka), 2% lohkolaitteille. tier_health-päätepiste paljastaa per-tason liitetty/kirjoitettavissa/free_pct seurantaa varten.
Muuttaminen tmpfs_size_pct:ää käyttöliittymässä käynnistää umount + remount uudella koolla Tallenna. Aktiiviset DVR-kirjoitukset on lyhyesti pysäytetty (liitossiirtymä < 1 s). Suositus: muuta tmpfs-koko vain kun DVR-kirjoitusnopeus on alhainen ja harkitse virtausten uudelleenkäynnistystä, jotta ne valitsevat uuden liitoksen puhtaasti.
Perus URL — OSTV-soitin
Paketin kentät
Paketit API
Salasanakäytäntö
Jälleenmyyjän API
Asetukset
Käyttäjän kentät
Käyttäjähallinta
Perus-URL — OSTV Player
OSTV Player -sovelluksessa käyttäjät voivat vaihtaa palvelimen perus-URL:n (API-osoite). Tämä ominaisuus on käytettävissä vain käyttäjille, joiden palveluntarjoajaksi on asetettu root.
Syy: Perus-URL:n vaihtaminen on tarkoitettu vain järjestelmänvalvojille/root-käyttäjille, jotta he voivat vaihtaa palvelinten välillä (esim. tuotanto vs. testaus). Tavallisilla käyttäjillä on kiinteä perus-URL, jota ei voi muuttaa.
Käyttäjäkentät
Pakettien API
Palauttaa luettelon kaikista aktiivisista paketeista hintojen ja laskutusjaksojen kanssa.
Luettelo hallintakäyttäjistä (jälleenmyyjät / palveluntarjoajat).
Palauttaa krediittisaldon tietylle hallintakäyttäjälle.
Paketin kentät
Jälleenmyyjä-API
API jälleenmyyjille/palveluntarjoajille. Valtuutus: Authorization: Bearer mtk_... (token Hallintakäyttäjistä). Jälleenmyyjä näkee vain omat asiakkaansa (owner_id).
Salasanakäytäntö
Salasana vaaditaan tilaajaa luotaessa. Säännöt:
Vähintään 8 merkkiä
Vähintään 1 iso kirjain (A-Z)
Vähintään 1 erikoismerkki (!@#$%^&* jne.)
Koskee käyttöliittymää ja API:ta. Päivityksen yhteydessä salasana on valinnainen, mutta jos se annetaan, sen on täytettävä säännöt.
Asetukset
Tasonautomaattivaraus & Turvallisuus
Kapasiteetti + tiedostojärjestelmän automaattinen tunnistus: kun vapaata NVMe-asemaa valitaan pudotusvalikosta, kapasiteetti (Gt) luetaan komennolla lsblk -bn -o SIZE ja nykyinen tiedostojärjestelmä komennolla blkid (koko levyn varmuuskopio). Lomake näyttää arvot vain luku -tilassa — ei manuaalista syöttöä, ei virheitä.
Tason tyhjennysmekanismi — jatkuva peilailu
StorageTierFlush GenServer toimii 60 s välein. Sen sijaan että odotettaisiin tuntikohtaisen hakemiston 'vanhenemista' ja siirrettäisiin se 5 Gt:n eränä, segmentit siirtyvät RAID-järjestelmään jatkuvasti, pitäen 2 tunnin kuuman ikkunan NVMe-asemalla nopeaa 'viimeaikaista kelausta' varten. Nämä kaksi vaihetta ovat erillisiä — kopiointi ja poistaminen ovat erillisiä, varmistettuja toimintoja.
Miksi jatkuva peilailu voittaa 'odota 60 min, siirrä eränä': (1) RAID-kuorma on tasainen — ei 5 Gt:n purkaantumisia tuntirajalla, vain 7 Mt:n segmenttien virtaus; (2) Suurin osa kuumasta datasta on jo RAID:lla — katastrofin sattuessa menetetään vain viimeiset minuutit; (3) Poistaminen on varmistettu tiedostokohtaisesti — osittainen peilausvirhe havaitaan ennen kuin NVMe-tietoja menetetään.
Kesken olevan segmentin turvallisuus: peilailu poimii vain tiedostoja, jotka ovat vanhempia kuin MIRROR_MIN_AGE_MINUTES komennolla find -mmin +5. FFmpeg:n kirjoittama segmenttitiedosto ei näy listassa — osittaisia kirjoituksia ei siirretä.
Asennuskohtainen säätö (.env)
500–1000
Mitoitussääntö:
DVR-esikatselu-kalenteri
DVR-esikatselu-välilehti näyttää palvelinpuolella renderöidyn kalenterin, joka korostaa vain ne päivät, joilta levyllä on tallennuksia. Skannaus kattaa kaikki tasot (write_buffer + read_cache + archive + legacy), joten NVMe:ltä RAID:lle juuri siirretty segmentti pysyy näkyvissä ilman viivettä.
Tallennuksia sisältävät päivät ovat klikattavia (sininen) — napsauttaminen täyttää päivämäärä-/aikasyötteen kyseiselle päivälle klo 00:00; käyttäjä valitsee sitten tunnin. Päivät ilman tallennuksia ovat himmentyneitä ja toimimattomia.
Toteutettu Stream.available_dvr_days/1:ssä komennolla find -mindepth 4 -maxdepth 4 -type d jokaisessa tier-liitäntäpisteessä; deduplikoitu eri tasojen välillä (päivä näytetään kerran, vaikka sillä olisi segmenttejä useilla tasoilla siirtoikkunan aikana).
Yleiskatsaus
B2C (Business-to-Consumer) API tarjoaa tunnistautumisen ja streamin käyttöoikeuden loppukäyttäjän soitinsovelluksille. Käyttäjät tunnistautuvat käyttäjänimellä/salasanalla ja saavat aikarajoitetun auth-tunnisteen myöhempiä pyyntöjä varten.
Tunnistaudu käyttäjänä ja hanki auth_token myöhempiä API-kutsuja varten.
Metodi
Päätepiste
Pyyntörunko
Parametri
Tyyppi
Pakollinen
Kuvaus
Kyllä
Käyttäjän kirjautumisnimi
Käyttäjän salasana
Esimerkki pyynnöstä
Vastauksen kentät
Onnistuminen (200)
Salattu todennusmerkkijono myöhemmille API-kutsuille
Merkkijono vanhentumisen päivämäärä/aika ISO 8601-muodossa
Esimerkki onnistumisvastauksesta
Virhe vastaus (403)
Virheen kuvausteksti
HTTP-tilakoodi
Esimerkki virhevastauksesta
Hae tiedot tunnistautuneesta käyttäjästä auth-tunnisteen avulla.
Vastauksen kentät
Tunnistautuneen käyttäjän käyttäjänimi
Palvelimen sanoma (tyhjä jos ei mitään)
Todentamisen tila (1 = todennettava)
Tilin tila: aktiivinen, kielletty, poissa käytöstä, kokeiluversio
Tilin vanhentumispäivä (null = rajoittamaton)
Nykyisten aktiivisten yhteyksien määrä
Tilin luontipäivä ISO 8601 -muodossa
Sallittu enimmäismäärä samanaikaisia yhteyksiä
Lista sallituista lähtöstreamin muodoista
Käyttäjän omistajan/jälleenmyyjän palvelun nimi (null jos ei mitään)
Palvelun logo kuvan URL (null jos ei mitään)
Palveluntarjoajan tiivistetyn logon URL 208x208 (null jos ei ole)
Palvelimen nykyinen aika ISO 8601 -muodossa
Esimerkki pyynnöstä
Hae kategoriat tyypin mukaan suodatettuna. Saatavilla olevat tyypit: live (streamit), vod (elokuvat), series (sarjat).
Kategorialityyppi: live, vod tai series
Luokan tunniste merkkijonona
Luokan näyttönimi
Yläluokan tunniste (0 jos juuri)
Sisällön MD5-tiiviste välimuistin mitätöintiä varten
Esimerkki pyynnöstä
Hae yksityiskohtaiset tiedot tietystä VOD-nimikkeestä, mukaan lukien metatiedot ja virtalinkit.
VOD-streamin ID (UUID)
Kansikuva URL
TMDB-tunniste
Taustakuva URL
Genre-merkkijono
Juoni / kuvaus
Näyttelijät
Arvosana (0–10)
Ohjaajan nimi
Julkaisupäivä
Kesto sekunteissa
Kesto muotoiltuna merkkijonona
Taulukko kategoria-ID:istä
1 jos aikuisten sisältö, 0 muuten
VOD-streamin ID
VOD-otsikko
Lisätty (ISO 8601)
Virtalinkkien URL:t
Video/audio-koodekin metatiedot
Hae sarjatiedot kaikilla tuotantokausilla ja jaksoilla, ryhmiteltynä kauden numeron mukaan.
Sarjan ID (UUID)
Kauden numero
Kauden näyttönimi
Jaksojen määrä kaudella
Kauden ensi-ilta
Kauden yleiskatsaus / kuvaus
Kauden kansikuva URL
Kartta, jossa avaimena on kauden numeromerkkijono. Kukin arvo on taulukko jaksoobjekteja.
Jaksoobjektin kentät
Jakson ID
TMDB-jakson ID
Jaksonumero kauden sisällä
Lisätty (ISO 8601)
Kauden numero
Jakson tietoobjekti (sama rakenne kuin VOD-tiedot)
Virtalinkkien URL:t
Video/audio-koodekin metatiedot
Tunnisteen voimassaolo riippuu käyttäjäroolista: admin = 365 pv, muut = 30 pv|Poistetut käyttötilit eivät voi tunnistautua (palauttaa 403)|Jokainen onnistunut kirjautuminen päivittää käyttäjän last_login-aikaleiman|Tunnisteet ovat salattuja ja sisältävät user_id:n, käyttäjänimen, roolin ja vanhentumisen
Onnistuminen (200)
/auth-päätepisteestä saatu auth-tunniste