MPTS · TSDuck · PSI/SI






Stream Manager mux yhdistää useita SPTS-virtoja yhdeksi CBR MPTS -tulokseksi (DVB/IPTV). Adaptiivinen hybridmukauttaja yhdistää CBR-ytimen täyttämisen VBR-tasapainotettujen enkooderin vakiomukauttajatulosteelle.
Kun päämukauttajalla on statmux käytössä, jokainen FFmpeg-enkooderi toimii kiinni VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>. VBV-puskuri = 2 × max antaa ~2 s huipun puskuri. Statmux-virrat saavat myös determinismin GOP-siirtymän (-force_key_frames) per stream_id niin I-frame-huiput eivät ole yhdenaikaisia kanavien välillä.
tsp -I null (∞ NULL-paketit @ line rate) → -P merge tsp -I ip <stream> (peittää todelliset paketit) → -P jatkuvuus (pudotushälytys) → -P pcradjust --bitrate X (uudelleenkirjoittaa PCR:t) → -P pcrverify --jitter-max 500µs → -P bitrate_monitor (nopeus hälytys ±5%) → -P regulate --bitrate X --packet-burst 32 → -O ip <out> --packet-burst 7 --enforce-burst.
regulate-laajennus lähettää täsmälleen mux.bitrate bps:n langalle. Jälkeen jäävät syötteet → NULL-paketit täyttävät tyhjän. Piikkiä ottavat syötteet → sisäinen FIFO-puskuri (4096 pakettia ≈ 0,3 s @ 19 Mbps) absorboi. --enforce-burst pakottaa 7 TS-pakettia per UDP-datagrammi (1316 B, IPTV-standardi).
Mux ylärivi näyttää 3 summaa värin tilalla. Säännöt:
Σ avg ≤ 85 % mux.bitrate - keskimääräinen tavoitesumma kaikissa kanavissa ja äänessä. Tämä on mukauttajan 'budjetti'. 15 % tilastollinen varanto suojaa huippujen samanaikaisuutta vastaan. Vihreä ≤ 85 %, amber ≤ 100 %, punainen > 100 %.
Σ max ≤ 160% mux.bitrate — huippurajasumma. Saa ylittää kapasiteetin (siinä on statmuxin pointti — huiput harvoin osuvat yhtaikaa). Vihreä ≤ 160%, keltainen ≤ 200%, punainen > 200% (putoamisia jatkuvalla huipulla).
Σ min ≤ 50% mux.bitrate — enkooderin lattiarajasumma. Turvallinen lattia varmistaa, että hiljaisissa kohtauksissa enkooderi ei laske tarpeettoman alhaiselle laadulle. Vihreä ≤ 50%, keltainen ≤ 90%, punainen > 90%.
Käytettävissä oleva budjetti PSI/SI/EIT:n jälkeen: ~18,5 Mbps. Σ ka = 4 × 4,0 = 16 Mbps (86% — keltainen raja, laske edelleen). Σ max = 4 × 6,0 = 24 Mbps (130% — vihreä, OK). Σ min = 4 × 3,0 = 12 Mbps (65% — keltainen, OK). Tavoite: ka ~85% budjetista, max ≤ 160%.
≥ 10 hälytystä 60 sekunnissa vilkkuva ilmoitus näkyy Mux-käyttöliittymässä, joka suosittelee bitnopeuden pienentämistä. Automaattinen takainen päällä EI ole aktiivinen - operaattori päättää.
-P bitrate_monitor --periodic 60 --min/max ±5% — hälytys, jos todellinen nopeus poikkeaa yli ±5% tavoitteesta. Tarkoittaa, että regulate on nälkiintynyt (syöttö kuollut).
-P jatkuvuus - jäljittää TS-jatkuvuus laskurit. Lokaa varoitus jokaisesta pudotuksesta (liian suuri tilaus, FFmpeg-kaatuminen, NIC-värinä).
-P pcrverify --jitter-max 500000 - DVB sallii PCR-värähtelyä ≤ 500 µs. Hälytys = pcradjust ei pidä perässä tai lähde on rikkoutuneet PCR:t.
GOP-yhteensattuma — kaikki enkooderiet lähettävät I-kehykset samanaikaisesti, huippuyhteensattuma. Korjaus: GOP-offset (jo käytössä statmuxille, hash(stream_id) mod gop_size).
Tulon signaalin menetys - yksittäinen kanava muuttuu mustaksi, mukauttaja jatkaa (kiitos -I null base). Kesto ~3-8 s FFmpeg-käynnistykselle.
Ylimerkintä (jatkuvat huiput > kapasiteetti) — lohkot/äänen katkeilu ~50–200 ms. Korjaus: laske streamin ka 5–10% tai poista kanava.
PCR-ajautuminen - STB-paikalleen joka muutaman sekunnin välein. Korjaus: pcradjust putkessa (jo siellä), katsele pcrverify-hälytyksiä.
STB VBV-alijuoksu — STB menettää synkronoinnin ja hankkii sen uudelleen (~2–3 s). Korjaus: enkooderin bufsize = 2 × maxrate (jo käytössä), laske maxrate.
--max-input-packets 4096 / --max-flushed-packets 4096 (sisäinen FIFO ≈ 0,3 s @ 19 Mbps). --receive-buffer-size 16777216 (16 MB UDP-vastaanotuspuskuri per syöttö). --packet-burst 32 (regulate) / 7 (lähtö, IPTV-standardi). --enforce-burst (jokainen UDP-datagrammi on täsmälleen 7 pakettia).
Ylärivi-merkki `📐 rec X.XM` näyttää suositellun mukauttajan kapasiteetin, joka on johdettu keskiraja-lauseesta. Riippumattomien VBR-virtojen summa lähestyy normaalijakaumaa, joten Mux = μ_total + z·σ_total + marginaali. σ_i arvioidaan jokaisen tulon VBR-alueesta (max−min)/4 (olettaen alueen peittävät ±2σ). Marginaali = 10% μ_total: stä kompensoi PSI/SI yleiskustannukset, enkooderin nopeus-hallinta-tärinä ja virran korrelaatio, jota puhdas CLT aliarvioi.
Merkin väri: 🟢 vihreä = cap ≥ 99,7% suositus (konservatiivinen) · 🟡 keltainen = välillä 99% ja 99,7% · 🔴 punainen = cap < 99% (alimitoitettu, putoamisen riski) · 🔵 sininen = cap asettamatta.
z-arvo kattavuustavoitteen mukaan: 90% z=1,28 · 95% z=1,65 · 99% z=2,33 · 99,7% z=3,00 (oletus) · 99,99% z=3,72 (lähetyslaatu). Merkin vihje listaa kaikki tasot; klikkaaminen soveltaa 99,7% suosituksen mux.bitrate:lle (mux-uudelleenkäynnistys vaaditaan).
σ_eff = σ_total × statmux_factor (statmux_factor = 0,7 kun Statmux on PÄÄLLÄ, muuten 1,0)
1080p25 HD-kanava: ka = 4000–5000 kbps, min = ka × 0,75 (~3000–3750), max = ka × 1,5 (~6000–7500). Käyttöliittymä täyttää min/max automaattisesti ka:n jälkeen. Statmux-käyttöliittymä täyttää ka:n automaattisesti streamin transkooderprofiilista. SD-kanava: ka = 2000–2500 kbps. UHD: ka = 12000–18000 kbps.
Adaptiivinen hybridi-Statmux on suoritusaikainen mekanismi, joka siirtää käyttämätöntä kapasiteettia ydinstreameistä (suojattu, täysi VBR) tasapainotettuihin streameihin (uhri). "Hybridi" tarkoittaa, että kaksi eri nopeudensäätöregiimiä toimivat rinnakkain (CBR-ytimen täyttö + VBR-tasapainotettu); "adaptiivinen" tarkoittaa, että reititin arvioi uudelleen kerran sekunnissa HLS-esikatselu-ennusteen perusteella. Operaattori merkitsee streamit tasapainotetuksi oikeanpuoleisen valintaruudun kautta; järjestelmä enkoodaa ne kolmeen tasoon (HIGH/MED/MIN) ja reititin vaihtaa atomisesti symlinkin jäljellä olevan tilauksen perusteella ydinhuippujen ennustamisen jälkeen.
Mux-kapasiteetti 38 Mbps ┌──────────────────────────────────────────────────────────────────┐ │█████████████████████████████████████████████████████░░░░░░░░░░░░│ └──────────────────────────────────────────────────────────────────┘ ◀────── core_max (ennustettu 6 HLS-segmentistä) ─▶◀── tasapainotettu ──▶
Ilman adaptiivista hybridimukauttajaa sinun on mitoitettava mukauttaja pahimmalle Σ max:lle. Adaptiivisella hybridimukauttajalla mitoitus tehdään Σ avg + tilastollisen puskurin ympärille (lähetysyhteys ρ=0,15). Todellinen voitto ~5 Mbps 38 Mbps mukauttajassa tai +1 virta samalla ylärajalla.
Puhdas CBR (enkooderi kiinteä)
VBR ilman Statmuxia
Adaptiivinen hybridi-Statmux PÄÄLLÄ
Mukautettu URL-syöttökorvaaja ja Statmux ovat toisiaan poissulkevia. Statmuxin ollessa päällä, tasapainotettu transkooderi luottaa paikallisen enkooderin HLS:ään bitnopeuden hallintaan. Ulkoinen URL ohittaisi tämän hallintasilmukan. Käyttöliittymä pakottaa tämän molempiin suuntiin — valintaruutu lukittuu, kun on ristiriitainen yhdistelmä, ja vihjeessä näkyy mikä stream estää.
┌─────────────────────────┐
│ Enkooderi (NVDEC→NVENC) │ ← UDP-satelliitti
STREAM │ /dev/shm/stream_X/h264/│
│ → muxed.m3u8 + segmentit│
└────────────┬────────────┘
│
┌────────┴────────┐
│ │
rooli="ydin" rooli="tasapainotettu"
(suojattu) (uhri)
│ │
│ ▼
│ ┌───────────────────────────┐
│ │ BalancedTranscoder │
│ │ ffmpeg p1 NVENC VBR │
│ │ -maxrate dynaaminen │ ← Adaptiivinen hybridi-reititin
│ └───────────────────────────┘Tilastollinen hyöty syntyy vain, kun enkoodereilla on laaja VBR-alue — kun max ≈ ka, enkooderi on käytännössä CBR eikä reitittimellä ole mitään jaettavaa. Konfiguroi `min/ka/max` per stream niin, että Σmax on mukavasti yli mux-cap:n (ylimerkintä = tilaa tilastolliseen hyötyyn), kun taas Σka on mukavasti sen alapuolella.
Laskettu esimerkki — 38 Mbps mux, 10 HD-ydin + 2 tasapainotettu:
Vanha (CBR-lukittu): min=2000 ka=3000 max=4000
Suositeltu (laaja VBR): min=1500 ka=3000 max=6000
Suositellut arvot per ydinstream: • min ≈ ka × 0,5 (enkooderi voi laskea hiljaisissa kohtauksissa) • ka = nimellinen tavoite resoluution mukaan • max ≈ ka × 2,0 (enkooderi voi piikittää toimintakohtauksissa)
Vähintään 1 tasapainotettu virta - ilman sitä adaptiivinen hybridi-reititin ei ole mitään murskattavaa huippujen aikana, joten voitto = 0
Musiikki- ja info-kanavat ovat parhaat kandidaatit - 90 %+ sietävyys hinnan pudotukselle
Seuraa `[balance-router]`-lokimerkinnöillä — näyttää `core_max`, `remaining`, tier-siirtymät jokaiselle 1 s tikille
Jos `core_max > capacity` (CORE OVERPEAK -varoitus lokissa), vähennä ydinstream-lukumäärää tai laske enkooderin maxrate
Lisää streamit muxiin (kanavamääritys pysyy manuaalisena)
Vaihda Statmux mukauttaja-otsikossa (keltainen siru). Kun käytössä, kaikki enkooderit vaihtavat VBR:iin ja käynnistyvät uudelleen
Merkitse uhristreatit oikeanpuoleisella oranssilla valintaruudulla — yleensä musiikki-/infokanavia, joissa nopeuden pudottaminen ei näy
Valmis. Adaptiivinen hybridi-reititin lukee 6-segmentin HLS-ennusteen ydinstreameistä joka 1 s ja vaihtaa atomisesti tasapainotetun symlinkin HIGH/MED/MIN-tasovälillä
The mux runs on a native C NIF (single-host, replaced the old gst_mux.py). Each channel has its own CBR encoder; the NIF demultiplexes them, statistically allocates bitrate by scene complexity, pads with NULL packets to a fixed wire cap, and emits one MPTS UDP multicast. This help describes the current UI: chart, headroom slider, diff gauge, channel cards.
Luokka: suljetun silmukan palautestatmux C1-ennakoinnilla (eteenpäinsyöttö) VBR-enkoodereiden yli — lähetystatmux-periaate, jota ohjataan lähteen monimutkaisuudesta.
UDP-multicast SSM, per kanava
Enkoodereet
lähteen monimutkaisuus
Takaisinkytkentä
oma linja / stream
allokointimotiori (Σ ≤ pool)
puskuri
tyhjätäyte → CBR
CBR-johto ylärajalla
ennakoi monimutkainen kohtaus ennen notkahdusta
mitattu johto — kalibrointi
kohde-bittinopeus
Jokainen kanava kulkee omalla linjallaan muxiin (erillinen enkooderi + loopback-yhteys), jossa kaikki yhdistyvät yhdeksi MPTS-multicast-linjaksi tarkasti kiinteällä bittinopeudella. Allokointimotiori on keskeinen aivot (1 GenServer per mux), tik ~0,85 s.
Allokointimotiori yhdistää kaksi signaalia — ennustuksen lähteen monimutkaisuudesta (eteenpäin) ja mitatun johdon (taaksepäin). Tämä lähestyy lähetystatmuxeja, jotka tietävät ruudun hinnan ennen enkoodausta.
C1 mittaa sisällön monimutkaisuuden dekooderissa — mikä johtaa enkooderin lähtöä pipelineviiveellä. Suhteellinen monimutkaisuuden muutos (korrelaatio r≈0,92 bittien kanssa) käytetään kohdebiittinopeuteen MOLEMPIIN suuntiin ENNEN kuin enkooderi tuottaa sen: nouseva kohtaus ennakoidaan (ei notkahdusta), laskeva vapauttaa bittejä aikaisin muille.
Muxin tarkkaan lähettämät per-stream-bitit (lähetyspuolen laskurit) kalibroivat monimutkaisuuden → bittinopeus-yhdistämisen ja pitävät summan tarkasti poolissa. Totuuden pohja-ankkuri — C1-ennustus ei ole täydellinen (r 0,92), loppupäässä oleva johto korjaa sen.
Streamin vaatimus perustuu siihen, mitä enkooderi todella tuottaa (× piikin otsaketila). Helppo kanava ei voi hamstrata kaistanleveyttä, jota se ei käytä — se vapauttaa sen nälkäisille.
Tavoitteena ei ole tasavertainen bittinopeus vaan tasavertainen laatu — jatkuva paine siirtää bittejä korkealaatuisilta kanavilta (matala QP) matalan laadun kanaville (korkea QP).
Kun C1 ilmoittaa kanavan laskusta, sen kaistanleveys siirretään muille samassa tikissä — ne nopeuttavat ennen kuin lasku todella saavuttaa johdon.
Per-kanava paino = complexity_q12 × max_bps (toimintakohtaus + suurempi max ⇒ enemmän bittejä).
Per-virran budjetti = globaali budjetti × paino / Σpainot, kiinnitetty [min_bps, max_bps], laskettu uudelleen joka 10 ms.
×headroom % (slider) on the encoder target → Σ real encoder < wire cap ⇒ rings drain empty ⇒ clean video.
Stale-exclusion: a dead input (no receive > 2 s) is dropped from the splitter — its share goes to live channels, not wasted; re-included automatically on recovery.
NULL pad fills the difference to the wire cap (strictly CBR). Encoder feedback: ZMQ complexity → BalanceRouter → set_bitrate.
Lähtö on tarkka CBR-stream konfiguroituun ylärajaan. Kolme kerrosta takaavat sen:
Lähetysjono pitää pysyvän tason ~1 s johtoa, joka absorboi sub-sekunnin GOP-notkahdukset (I-ruutujen välillä). Tallenteesta todennettu: 0,5–1 s absorboi 88–91% notkahduksista.
Kun sisältö on ylärajan alapuolella, ero täytetään MPEG-TS-tyhjäpaketeilla (PID 0x1FFF). Johto siis AINA saavuttaa ylärajan — DVB-yhteensopiva.
Egress tahdistetaan tarkasti ylärajaan (busy-spin ABSTIME); 12 ms:n velkarajoitin estää kiinnikuromisen purkaantumiset lyhyen pysähtymisen jälkeen → ei PCR-jitausta, ei yli-ylärajan piikkejä.
Stacked area — each channel has its colour (matching its card below). Σ of all + NULL pad = wire cap. Switch the time window 10m / 1h / 24h; pills next to it = event counts (CC / PCR / BR / OVF) for the selected window.
Jokaisella kanavalla on vakaa väri; paksuus = sen hetkinen bittinopeus. Yläkuorma (PSI/EIT) on harmaa alhaalla, tyhjätäyte on teksturoitu valkoinen päällä.
Katkoviiva ylhäällä = konfiguroitu yläraja (johdon katto). Sisältö + tyhjätäyte pysyvät aina sen alapuolella.
Pisteviiva valkoinen kaista päällä = tyhjätäyte (vapaa kapasiteetti). Mitä ohuempi se on, sitä täydempänä johto on; se katoaa vaativalla sisällöllä.
Punaiset merkit aikajanalla = lähetysjonon ylivuoto (pudotus). Nolla vakiotilassa; purkaantumiset vain käynnistyksen/tulvan aikana.
Painikkeet vaihtavat aikaikkuna välittömästi (asiakaspuoli), aktiivisella on harmaa tausta. Kaavio kerää 30 min selaimeen.
Vie hiiri päälle nähdäksesi per-kanavan bittinopeus, QP ja laatuindeksi kyseisellä hetkellä (historiallinen arvo, ei live).
Nykyinen poolin sääntelytaso (pool/(pool−trim)). >100% = ylipaine (täyttää puskurin), <100% = leikataan.
Toleranssikaista ylärajan yläpuolella — kuinka paljon pidetään tyhjäreservinä. 0 = täytä tasan N:ään; positiivinen = suurempi reservi (turvallisempi); negatiivinen = lievä ylitäyttö.
Otsikko näyttää lähetysjonon käyttöprosentin ja kumulatiiviset pudotukset. 'Tyhjennä pudotukset' -painike nollaa laskurin.
Yhteinen GOP-pituus kaikille mux-kanaville (lukittu video-profiileihin käynnistyksessä). Seinä-hajoitus levittää I-ruutuja ajallisesti niin, etteivät ne törmää.
Enkooderin VBV-puskurin koko (ms). Pienempi tasoittaa I-ruutuja (hyvä liikekanaville), suurempi antaa yksityiskohtaisemman I-ruudun. Oletus 850; per-stream-ohitus mahdollinen.
Osion otsikossa on 'Tiivistä / Laajenna kaikki' -kytkin. Laajenna kortti napsauttamalla sitä tai napsauttamalla sen värijuovaa kaaviossa. Vasemmalla värillä nauha valintaruudulla = kanavan jäsenyys mukauttajassa.
dark = running OK
orange = starting / restarting
harmaa + himmetty = alas/virhe ja valintaruutu POIS (tarkoituksella poistettu käytöstä - ei hälytystä)
red + BLINKING = FAULT — channel is in the mux (checkbox ON) but the stream is down/error
StatMux tuottaa koko pakolliset MPEG-TS / DVB-taulut suoraan NIF-muxissa — ei ulkoista SI-inserteriä. Taulut ajoitetaan tasaisesti streamiin, jotta STB hankkii PSI/SI:n nopeasti jälleenvirityksen jälkeen.
Taulu
PID
Väli
Tarkoitus / lähde
EIT (Event Information Table, PID 0x12) ei ole staattinen — se on täysin kytketty sovelluksen EPG-järjestelmään. Operaattori määrittää jokaiselle mux-kanavalle EPG-palvelun (eit_epg_service_id), ja mux tuottaa live EIT:n aikatauluetuihin tapahtumista.
mux.bitrate = wire CBR cap (typ. 37 Mbps for 12 SD/HD channels).
Σ avg ≲ cap (comfortable target) · Σ max oversubscribed 1.5–2× cap (that is the point of statmux — peaks rarely coincide) · Σ min = worst-case floor.
Set per-stream min/avg/max in Stream → Transcoder profile (auto-syncs to mux_input). Action/sport 8–10 M, news/talking head 1–2 M, min never < 800 k.
The headroom slider is a quick live lever of reserve vs. tightness — no restart.
Teemme todellista tilastollista multipleksointia — dynaaminen bittien uudelleenjako VBR-kanavien välillä, jotka jakavat kiinteän johdon, laaduntasauksella. Mekaanisesti olemme lähellä ammattimaisia headend-statmuxeja (ylärajan kohdistus, 1 s puskuri, tyhjätäyte, GOP/B-ruudut, lattia-ohitus).
CBR-johto ylärajalla · 1 s puskuri · per-stream proportionaalinen allokaatio · C1-ennakointi eteenpäinsyöttö · laaduntasaus · ennakoiva uudelleenjakelu · tyhjätäyte · tarkka tahdistus.
Lähetysstatmux käyttää enkooderin rate-distortion-arviota (tarkka ruutukustannus, enkooderi on allokaattorin orja). Me käytämme C1-lähdön monimutkaisuutta (r≈0,92) + VBR-enkooderia, joka valitsee oman QP:nsä — laitteiston rajoitus, ei suunnittelun. Luokka: palaute + ennakointi puhtaan eteenpäinsyötön sijaan.
Oire
Syy / korjaus
Channel red and blinking
In the mux (checkbox ON) but stream down/error → check the source/encoder of that stream. Self-recovers once restored.
Lots of NULL / large grey area
Calm content or low headroom — normal (statmux gain). For tighter utilization raise the headroom slider or per-stream max_bps.
Picture freezes / glitches
Headroom too high (rings not draining) → lower the slider to 80–82 %. Watch the diff gauge / NULL.
After restart streams=0 / all NULL
Mux started before the encoders — self-heal automatically reaches 12 within ~30 s (1 s tick retry). No manual action.
Diff gauge stuck at 0 / chart empty
Ei live-näytteitä (mukauttaja pysäytetty tai enkooderit eivät toimi) - tarkista sekä mukauttaja että virran tila.
SAT UDP SSM ─┐
├─ gst_encoder.py(K1) CBR ─ TCP127 ─┐ ZMQ monimutkaisuus
(per ├─ gst_encoder.py(K2) CBR ─ TCP127 ─┤ ▲ │
chan) └─ gst_encoder.py(Kn) CBR ─ TCP127 ─┤ │ ▼
▼ BalanceRouter
┌─────── NIF StatMux ───────┐ │ set_bitrate
│ per-input ring (drop-old) │◄─┘
│ 2-pass drain (A prio, V) │
│ allocator: w=cmplx×max │
│ ×headroom% (slider 78-90) │
│ stale-exclusion (>2s) │
│ NULL pad -> wire cap CBR │
│ PCR pass-through │
└────────────┬──────────────┘
▼
MPTS UDP multicast (CBR cap)gst_encoder.py per stream: SAT UDP SSM -syöttö → nvh264enc rc-mode=cbr. Bitnopeus ohjataan BalanceRouterin kautta set_bitrate:lla. Kohtauksen monimutkaisuus (SAD/px) raportoidaan ZMQ:n kautta allokattorille.
Per-tulo-rengas (TCP loopback enkooderista), 2-pass-tyhjennys (ääni prioriteetti, video täyttö), suhteellinen jakaja, NULL pad tarkalleen langan ylärajaan (CBR), PCR pass-through enkooderista.
Yksi MPTS (NIF:n luoma PAT/PMT/SDT) → UDP multicast lähtö-VLAN:lle. Lanka on tiukasti CBR mux.bitrate:lla (NULL-täyttö).
Rivi 1: ⚠ (validointiongelmat) · PNR · nimi kehyksessä (väri = tila).
Rivi 2+: min·ka·max kbps · ennustettu monimutkaisuus Δ matala/keski/korkea/huippu · SYÖTTÖ MENETETTY · ⚙URL · enkooderi Mbps · SID · service_type.
Nimen väri = streamin tila:
Mbps
37 ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ <= cap 37,0 Mbit (punainen)
· · · · · · · · · · · · · · · · · <= vapaa tila = NULL-täyttö
31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <= puskuri 85%
Punainen 'ylärajaa' rivi: langan CBR katto (mux.bitrate) - NULL täyttää tähän.
Oranssi 'puskuri N%' viiva: = cap × headroom-liukusäädin / 100. Enkooderi set_bitrate tavoittelee täältä. Liikkuu liukusäätimen kanssa.
Harmaa alue mustine pisteineen sisällön ja ylärajan välissä = NULL-täyte (käyttämätön varanto). Lisää pisteitä = enemmän varantoa.
Napsauta kanavan värijuovaa → automaattisesti laajennetaan kyseisen kanavan korttia alla.
MuxEitAdapter lukee tapahtumat EPG-järjestelmästä per palvelu, rakentaa DVB EIT -osiot (nimi, aika, kesto, kuvaus, genre) ja paketoi ne PID 0x12:lle. Osioversiot kasvavat EPG-muutoksella — STB hakee päivityksen.
EIT injektoidaan suoraan NIF-muxissa, tasaisesti tyhjätilaan (1 paketti / N lähtö + p/f säännöllisesti) — korvaten purkaantuvan ulkoisen tsp-kaskadin. Huippu/avg ≈ 1,1, ei sisällön häätöä, yläraja pysyy.
Taulu 0x4E — parhaillaan käynnissä oleva + seuraava tapahtuma. Injektoidaan ≤2 s välein välittömän 'nyt/seuraava' tiedon varmistamiseksi STB:lle.
Mux regeneroi säännöllisesti EIT .bin -tiedoston EPG:stä (~15 s) — EPG-aikataulumuutos saavuttaa johdon ilman uudelleenkäynnistystä. Mux-otsikko näyttää 'EIT ✓' kun aktiivinen.
Taulut 0x50/0x51 — täydellinen aikataulu tunteja/päiviä eteenpäin (segmentit). Levitetty tasaisesti streamiin.
Todellisen virtauksen vs. cap:n indikaattori. Keskikohta = cap (0). Merkki vasemmalla (vihreä) = varaus (Σ sisältö cap:n alapuolella); oikealla (punainen) = ylivuoto. Live, päivittyy joka tikki.
-5 Mbps CAP 37000 kbps +5 Mbps
[#### vihreä = varaus ####|::: punainen = yli cap :::]
^ -3200k
Alempi (→78): enemmän NULL-varausta, turvallisempi, vähemmän tiukka cap-käyttö.
Korkeampi (→90): tiukempi ylärajautilisaatio, vähemmän NULL.
⚠ ≥88%: liukusäädin muuttuu keltaiseksi — lähellä rengasylivuodon jäätymisrajaa. Kova rajaus 78–90 (ei voi saavuttaa 100 — suoja jäätynyttä videota vastaan).
Epäsymmetria: alentaminen lisää luotettavasti varantoa; nostaminen on rajoitettu per-virran max_bps kiinnityksellä (jakaja ei työnnä kanavaa yli max → turvallinen).
Ohjaa kuinka paljon ylärajan enkoodit tavoittelee: enkooderi tavoite = budjetti × headroom% / 100 (oranssi viiva kaaviossa). Muuttuu live (vaikutus seuraavasta 10 ms tikistä), pysyy SystemConfig:ssa.
Yksi kanava vioittuu (enkooderirjautuminen / signaalin menetys) ⇒ mux jatkaa toimintaa, muut kanavat eivät vaikutu, lanka pitää cap:n (NULL absorboi käyttökatkon), CC=0 selviytyneillä. Per-syöttö-rengassäikeet ovat itsenäisiä. Viallinen kanava näyttää punaisen vilkkuvan nimen + SYÖTTÖ MENETETTY -merkin; enkooderi käynnistetään uudelleen valvomalla ja kanava toipuu itsestään.
PCR ja PES PTS/DTS ovat pass-through enkooderista (yksittäinen kelloalue ⇒ johdonmukainen, ei ajautumista). Jäänös PCR-värähtelyä ~kymmeniä ms on sisäinen (10 ms tulosytösin + UDP) - STB/VLC PLL hyväksyy sen, CC=0. Kova DVB-S2-modulaattorin vaatimuksenmukaisuus on nykyisen IPTV-käyttötapauksen soveltamisalaa.
CAT — ehdollinen pääsy (vain sekoittamisen / ECM:n yhteydessä).
EIT — tapahtumatiedot (EPG) — EPG-järjestelmästä, ks. alla.
NIT — verkkoinfo (verkko-ID, nimi, transport stream).
PAT — ohjelmaluettelo (yhdistää PNR:n → PMT-PID).
PMT — per ohjelma: video/ääni/PCR-PID:t, koodekit, kuvaajat.
SDT — palvelunimet ja palveluntarjoajat (mitä STB näyttää luettelossa).
TDT/TOT — aika ja päiväys + paikallinen siirtymä (STB-kello).