TSDuck-based MPEG Transport Stream multiplexer with full PSI/SI support


Srauto valdytojas mux assembles multiple SPTS srautai into one CBR MPTS išvestis (DVB/IPTV). Adaptive Hybrid Statmux combines a CBR core fill with VBR balanced encoders for konstanta mux išvestis.
When the parent mux has statmux enabled, each FFmpeg encoder runs capped-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>. VBV buffer = 2× max gives ~2 s peak headroom. Statmux srautai also get a deterministic GOP offset (-force_key_frames) per stream_id so I-kadras peaks don't coincide across channels.
tsp -I null (∞ NULL packets @ line rate) → -P merge tsp -I ip <srautas> (overlays real packets) → -P continuity (drop alarm) → -P pcradjust --bitų greitis X (rewrites PCRs) → -P pcrverify --jitter-max 500µs → -P bitrate_monitor (rate alarm ±5%) → -P regulate --bitų greitis X --packet-burst 32 → -O ip <out> --packet-burst 7 --enforce-burst.
regulate plugin emits exactly mux.bitų greitis bps on the wire. Inputs lagging → NULL packets fill the gap. Inputs peaking → internal FIFO buferis (4096 packets ≈ 0.3 s @ 19 Mbps) absorbs. --enforce-burst forces 7 TS packets per UDP datagram (1316 B, IPTV standard).
Mux top bar shows 3 sums with color būsena. Taisyklės:
Σ avg ≤ 85 % mux.bitų greitis — average target sum across visi channels plus garsas. That is the mux 'budget'. The 15 % statistical reserve protects against peak coincidence. Green ≤ 85 %, amber ≤ 100 %, red > 100 %.
Σ max ≤ 160 % mux.bitų greitis — peak ceiling sum. Allowed to exceed talpa (that's the point of statmux — peaks rarely coincide). Green ≤ 160 %, amber ≤ 200 %, red > 200 % (drops on sustained peak).
Σ min ≤ 50 % mux.bitų greitis — encoder floor sum. A safe floor ensures that on still scenes the encoder doesn't drop to needlessly low kokybė. Green ≤ 50 %, amber ≤ 90 %, red > 90 %.
Prieinamas biudžetas po PSI/SI/EIT: ~18,5 Mbps. Σ vid = 4 × 4,0 = 16 Mbps (86 % — ambros riba, mažinkite toliau). Σ maks = 4 × 6,0 = 24 Mbps (130 % — žalia, gerai). Σ min = 4 × 3,0 = 12 Mbps (65 % — ambros, gerai). Tikslas: vid ~85 % biudžeto, maks ≤ 160 %.
On ≥ 10 alarms in 60s a flash pranešimas appears in the Mux UI recommending a bitų greitis reduction. Auto-back-off is NOT aktyvu — the operator decides.
-P bitrate_monitor --periodic 60 --min/max ±5% — alarm if actual rate strays beyond ±5 % of target. Means regulate is starved (įvestis died).
-P continuity — tracks TS continuity counters. Logs a įspėjimas on every drop (over-subscription, FFmpeg crash, NIC jitter).
-P pcrverify --jitter-max 500000 — DVB allows PCR jitter ≤ 500 µs. Alarm = pcradjust can't keep up or šaltinis has broken PCRs.
GOP coincidence — visi encoders emit I-frames simultaneously, peak coincidence. Fix: GOP offset (already on for statmux, heš(stream_id) mod gop_size).
Įvesties praradimas-of-signal — single kanalas goes black, mux continues (thanks to -I null base). Duration ~3-8 s for FFmpeg restart.
Over-subscription (sustained peaks > talpa) — blocks/garsas stutter ~50-200 ms. Fix: lower srautas avg by 5-10 % or pašalinti a kanalas.
PCR drift — STB stutter every few sekundės. Fix: pcradjust in the pipeline (already there), watch pcrverify alarms.
STB VBV nepakankamumas — STB praranda sinchronizaciją ir ją atkuria (~2-3 s). Pataisa: koduoklio buf. dydis = 2 × maks greitis (jau padaryta), mažinkite maks greitį.
--max-įvestis-packets 4096 / --max-flushed-packets 4096 (internal FIFO ≈ 0.3 s @ 19 Mbps). --receive-buffer-dydis 16777216 (16 MB UDP rcv buffer per įvestis). --packet-burst 32 (regulate) / 7 (išvestis, IPTV standard). --enforce-burst (every UDP datagram is exactly 7 packets).
Top-bar badge `📐 rec X.XM` shows the recommended mux talpa derived from the central limitas theorem. The sum of independent VBR srautai approaches a normal distribution, so Mux = μ_total + z·σ_total + margin. σ_i is estimated from each įvestis's VBR range as (max−min)/4 (assuming the range covers ±2σ). The margin = 10% of μ_total compensates for PSI/SI overhead, encoder rate-control jitter, and srautas correlation that pure CLT under-estimates.
Ženklo spalva: 🟢 žalia = limitas ≥ 99,7 % rekomendacijos (konservatyvu) · 🟡 ambros = tarp 99 % ir 99,7 % · 🔴 raudona = limitas < 99 % (nepriteklius, praradimo rizika) · 🔵 mėlyna = limitas nenustatytas.
z-score per coverage target: 90% z=1.28 · 95% z=1.65 · 99% z=2.33 · 99.7% z=3.00 (numatytasis) · 99.99% z=3.72 (broadcast-grade). The badge tooltip lists visi levels; clicking applies the 99.7% recommendation to mux.bitų greitis (mux restart required).
σ_eff = σ_total × statmux_factor (statmux_factor = 0,7 kai Statmux ĮJUNGTAS, kitaip 1,0)
1080p25 HD kanalas: avg = 4000-5000 kbps, min = avg × 0.75 (~3000-3750), max = avg × 1.5 (~6000-7500). UI auto-fills min/max from avg. Statmux UI auto-fills avg from the srautas's transcoder profile. SD kanalas: avg = 2000-2500 kbps. UHD: avg = 12000-18000 kbps.
Adaptive Hybrid Statmux is a runtime mechanism that shifts unused talpa from core srautai (protected, full VBR) to balanced srautai (sacrificial). "Hybrid" because two distinct rate-control regimes run side by side (CBR core fill + VBR balanced); "adaptive" because the router re-evaluates once per second from an HLS-lookahead prediction. The operator marks srautai as balanced via the right-side checkbox; the system pre-encodes them into three tiers (HIGH/MED/MIN) and the router atomically swaps the symlink based on remaining headroom after predicting core peaks.
Mux talpa 38 Mbps
┌──────────────────────────────────────────────────────────────────┐
│█████████████████████████████████████████████████████░░░░░░░░░░░░│
└──────────────────────────────────────────────────────────────────┘
◀────── core_max (predicted from 6 HLS segments) ─▶◀── balanced ──▶
per_balanced
= (cap − core_max
− SI overhead
− garsas) / N
Example: cap=38000 core_max=29000 SI=200 audio_total=1280 N_balanced=2
remaining = 38000 − 29000 − 200 − 1280 = 7520 kbps
per_balanced_max = 7520 / 2 = 3760 kbps
clamp(3760, 500, 3000) = 3000 kbps ← ceiling for balanced VBRWithout Adaptive Hybrid Statmux you must dydis the mux for the worst-case Σ max. With Adaptive Hybrid Statmux you dydis around Σ avg + a statistical buffer (broadcast correlation ρ=0.15). Real gain ~5 Mbps on a 38 Mbps mux, or +1 srautas at the same cap.
Grynas CBR (fiksuotas koduoklis)
VBR be Statmux
Adaptyvus Hibridinis Statmux ĮJUNGTAS
Pasirinktinis URL įvestis override and Statmux are mutually exclusive. With Statmux on, the balanced transcoder relies on the local encoder HLS to control bitų greitis. An external URL would bypass that control loop. The UI enforces this both ways — the checkbox locks when there is a conflicting combination, and the tooltip shows which srautas is blocking.
┌─────────────────────────┐
│ Encoder (NVDEC→NVENC) │ ← UDP satellite
STREAM │ /dev/shm/stream_X/h264/│
│ → muxed.m3u8 + segments│
└────────────┬────────────┘
│
┌────────┴────────┐
│ │
vaidmuo="core" vaidmuo="balanced"
(protected) (sacrificial)
│ │
│ ▼
│ ┌───────────────────────────┐
│ │ BalancedTranscoder │
│ │ ffmpeg p1 NVENC VBR │
│ │ -maxrate dynamic │ ← Adaptive Hybrid router
│ │ /dev/shm/stream_X_ │ 1 s tick (predicts from
│ │ balanced/h264/...m3u8 │ 6 HLS segments, atomic
│ └───────────┬───────────────┘ symlink swap HIGH/MED/MIN)
│ │
▼ ▼
┌─────────────────────────┐
│ ffmpeg-as-mux │ ← /dev/shm/mux_X/pipe.sh
│ -f mpegts pipe:1 │
│ -muxrate <cap> │
└────────────┬────────────┘
│ shell pipe
▼
┌─────────────────────────┐
│ tsp -I failas - │
│ continuity → regulate │
│ → pcradjust → bitrate_ │
│ monitor │
│ -P nit -P sdt -P inject│
│ (DVB SI tables) │
└────────────┬────────────┘
│
▼ UDP daugiaadresinis siuntimas
239.x.x.x:1234Statistical gain only happens when encoders have a wide VBR range — when max ≈ avg the encoder is effectively CBR and the router has nothing to redistribute. Konfigūruoti `min/avg/max` per srautas so Σmax is comfortably above the mux cap (over-subscription = headroom for statistical gain) while Σavg sits comfortably below it.
Pavyzdys — 38 Mbps mux, 10 HD pagrindiniai + 2 subalansuoti:
Senas (CBR užrakintas): min=2000 vid=3000 maks=4000
Σmaks = 10×4000 + 2×7600 = 55200 kbps (1,45× limitas — mažas padidėjimas)
σ_per_stream = (4000−2000)/4 = 500 kbps (niekinis — plokščias)
Σ statistinė atsarga ≈ 1,5 Mbps
Rekomenduojamas (platus VBR): min=1500 vid=3000 maks=6000
Σmaks = 10×6000 + 2×7600 = 75200 kbps (1,98× limitas — sveikas padidėjimas)
Σvid = 10×3000 + 2×3000 = 36000 kbps (95 % limitas — patogu)
Σmin = 10×1500 + 2×500 = 16000 kbps (42 % limitas — patogi bazė)
σ_per_stream = (6000−1500)/4 = 1125 kbps (reikšmingas)
Σ statistinė atsarga ≈ 4 Mbps
Tikras pranašumas: veiksmo scenose pagrindiniai kanalai pasiekia 5–6 Mbps (HD detalės),
maršruto valdiklis sumažina subalansuotus iki MIN lygio, bendras srautas išlieka 38 Mbps.Recommended range per core srautas: • min ≈ avg × 0.5 (encoder may drop on still scenes) • avg = nominal target by skiriamoji geba (HD ≈ 3 Mbps, FullHD ≈ 5 Mbps, UHD ≈ 12 Mbps) • max ≈ avg × 2.0 (encoder may peak on action — sport, action film) Mux talpa guards (must hold): • Σ avg core + Σ avg balanced ≤ mux.bitų greitis × 0.85 (comfortable target) • Σ max core + Σ max balanced ≤ mux.bitų greitis × 2.0 (over-subscription gain) • Σ min core + Σ min balanced ≤ mux.bitų greitis × 0.6 (worst-case floor) σ_per_stream = (max − min) / 4 (assumes ±2σ range) σ_total = √((1−ρ) · Σσ²ᵢ + ρ · (Σσᵢ)²) ρ = 0.15 broadcast typical σ_eff = σ_total × 0.7 (statmux factor when ON) Mux_99.7% = μ_total + 3 · σ_eff (shown in top-bar 📐 rec)
At least 1 balanced srautas — without one the Adaptive Hybrid router has nothing to squash during peaks, so gain = 0
Music and informacija channels are the best candidates — 90 %+ tolerance to rate shedding
Track via `[balanso-router]` žurnalas entries — shows `core_max`, `remaining`, tier transitions for each 1 s tick
If `core_max > talpa` (CORE OVERPEAK įspėjimas in žurnalas), reduce core srautas count or lower encoder maxrate
Pridėti srautai to the mux (kanalas assignment stays manual)
Toggle Statmux on the mux antraštė (yellow chip). When enabled, visi encoders switch to VBR and restart
Mark sacrificial srautai via the right-side orange checkbox — typically music/informacija channels where rate-shedding is invisible
Atlikta. The Adaptive Hybrid router reads a 6-segment HLS prediction from core srautai every 1 s and atomically swaps the balanced symlink between HIGH/MED/MIN tiers
The mux runs on a native C NIF (single-host, replaced the old gst_mux.py). Each kanalas has its own CBR encoder; the NIF demultiplexes them, statistically allocates bitų greitis by scene complexity, pads with NULL packets to a fixed wire cap, and emits one MPTS UDP daugiaadresinis siuntimas. This pagalba describes the dabartinis UI: chart, headroom slider, diff gauge, kanalas cards.
Klase: uzdaro ciklo grizztamojo rysio statmux su C1 isankstine perziura (tiesioginis perdavimas) per VBR koderius — transliavimo statmux principas, valdomas is saltinio sudEtingumo.
UDP daugiaadresinis SSM, kiekvienam kanalui
Koderiai
saltinio sudEtingumas
Grizztamoji jungtis
sava linija / srautas
paskirstytojas (Sigma <= telkinys)
buferis
nulinis uzpildymas -> CBR
CBR laidas prie apribojimo
numatyti sudEtinga scena pries nuosmuki
ismatuotas laidas — kalibravimas
tikslinis bitu greitis
Kiekvienas kanalas eina savo linija iki mux (atskiras koderis + grizztamoji jungtis), kur visi susijungia i viena MPTS daugiaadresio siuntimo linija tiksliai fiksuotu bitu greicio. Paskirstytojas yra centrinis smegenys (1 GenServer vienam mux), ciklas ~0,85 s.
Paskirstytojas derina du signalus — prognoze is saltinio sudEtingumo (tiesioginis) ir ismatuota laida (atgalinis). Tai arteja prie transliavimo statmux, kurie zino kadro kaina pries kodavima.
C1 matuoja turinio sudEtinguma dekoderyje — kuris lenkia kodavimo irenginio isvesties vamzdyno latencija. Santykinis sudEtingumo pokytis (koreliacija r apie 0,92 su bitais) taikomas tiksliniam bitu greiciui ABIEM kryptimis PRIES tai, kai kodavimo irenginys ji pagamina.
Tikslus per srauta mux issiusti bitai (siuntejo puses skaitikliai) kalibruoja sudEtingumo -> bitu greicio atvaizdavima ir tiksliai islaiko suma prie telkinio. Tiikrosios vertes inkaras — C1 prognoze nera tobula (r 0,92), einamojo laido taisymas ja koreguoja.
Srauto pretenzija pagrista tuo, ka kodavimo irenginys is tiesu gamina (x smailes rezervas). Lengvas kanalas negali kaupti pralaidumo, kurio negali isleisti — jis atlaisvina ji alkaniems.
Tikslas nera vienodas bitu greitis, o vienoda kokybe — nuolatinis spaudimas perkelia bitus nuo auktos kokybees kanaluu (zemas QP) link zemos kokybees (auktas QP).
Kai C1 signalizuoja kanalo kritima, jo pralaidumas perduodamas kitiems per ta pati cikla — jie pakyla pries kritimui pasiekiant laida.
Per-kanalas svoris = complexity_q12 × max_bps (action scene + higher max ⇒ more bits).
Per-srautas budget = global budget × svoris / Σweights, clamp [min_bps, max_bps], recomputed every 10 ms.
×headroom % (slider) on the encoder target → Σ real encoder < wire cap ⇒ rings drain empty ⇒ clean vaizdo įrašas.
Stale-exclusion: a dead įvestis (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.
Isvestis yra tikslus CBR srautas sukonfiguuruotu apribojimu. Trys sluoksniai tai garantuoja:
Siuntimo eile islaiko ~1 s laido pastovu lygi, kuris absorbuoja sub-sekundines GOP nyktukas (tarp I-kadru). Patikrinta is iraso: 0,5-1 s absorbuoja 88-91% nuosmukiu.
Kai turinys yra zemiau apribojimo, skirtumas uzpildomas MPEG-TS nuliniais paketais (PID 0x1FFF). Laidas taip VISADA pasiekia apribojima — suderinamas su DVB.
Isvestis tempiama tiksliu apribojimu (uzimtas ciklas ABSTIME); 12 ms skolos apkarpymas neleidzia sugauti papliupu po trumpo sustabdymo -> jokio PCR triuksmo.
Stacked area — each kanalas has its colour (matching its card below). Σ of visi + NULL pad = wire cap. Switch the laikas window 10m / 1h / 24h; pills kitas to it = event counts (CC / PCR / BR / OVF) for the selected window.
Kiekvienas kanalas turi stabilia spalva; storis = jo momentinis bitu greitis. PridEtines sanaudos (PSI/EIT) yra pilkos apaccioje, nulinis uzpildas yra tekstuuruotas baltas virsuje.
Punktyrine linija virsuje = sukonfiguuruotas apribojimas (laido virsutine riba). Turinys + nulinis uzpildas kartu visada yra zemiau jos.
Tascuota balta juosta virsuje = nulinis uzpildas (laisva talpa). Kuo ji plonesnE, tuo pilnesnis laidas; ji dingsta ant reiklesscio turinio.
Raudonos zymos laiko juostoje = siuntimo eiles perpildymas (praradimas). Nulis stabilioje busenoje; papliupai tik paleidimo metu.
Mygtukai akimirksmiu pakeicia laiko langa (kliento puse), aktyvus turi pilka fona. Grafikas kaupia 30 min narsykleje.
Uzvedus pele rodomas kanaluu bitu greitis, QP ir kokybees indeksas tuo momentu (istorine verte, ne tiesiogine).
Dabartinis telkinio reguliavimo lygis (telkinys/(telkinys-apkarpymas)). >100% = per didelis spaudimas (pildomas buferis), <100% = apkarpymas.
Tolerancijos juosta virs apribojimo — kiek palikti kaip nulini rezerva. 0 = pildoma tiksliai N; teigiamas = didesnis rezervas (saugesnE); neigiamas = siek tiek per daug.
Antraste rodomas siuntimo eiles naudojimas % ir sukaupti praradimai. Mygtukas 'isvalyti praradimus' atstatytoja skaitikli.
Bendras GOP ilgis visiems kanalams mux (uzrakintas i vaizdo profilius paleidziant). Sienu pasislinkimas isskleidzia I-kadrus laike, kad jie nesusikrystuju.
Kodavimo VBV buferio dydis (ms). Mazesnis sulygina I-kadrus (gerai judesio kanalams), didesnis suteikia detalesni I-kadra. Numatytasis 850; galimas perrasymas kiekvienam srautui.
The section antraštė has a 'Collapse / Expand visi' toggle. Expand a card by clicking it or clicking its colour band in the chart. The left coloured strip with checkbox = kanalas membership in the mux.
dark = veikia OK
orange = pradedama / restarting
grey + dimmed = down/klaida and checkbox OFF (intentionally disabled — no alarm)
red + BLINKING = FAULT — kanalas is in the mux (checkbox ON) but the srautas is down/klaida
StatMux generuoja pilna privalomujj MPEG-TS / DVB lenteliu rinkini tiesiogiai NIF mux — jokio isiorinio SI iterpiklio. Lentelee tolygiai laikomos sraute, todEl STB visada greitai gauna PSI/SI po persijungimo.
Lentele
PID
Intervalas
Paskirtis / saltinis
EIT (ivykiu informacijos lentele, PID 0x12) nera statine — ji visiskai sujungta su programos EPG sistema. Operatorius kiekvienam kanalui mux priskiria EPG paslauga (eit_epg_service_id), o mux generuoja gyva EIT is suplanuotu ivykiu.
mux.bitų greitis = 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-srautas min/avg/max in Srautas → 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.
Mes atliekame tikra statistini multipleksavima — dinaminji bitu perskirstyma per VBR kanalus, dalijancies fiksuota laida, su kokybees sulyginimu. Mechaniniu poziuriu esame artimi profesionaliems priekines galvutes statmux.
CBR laidas prie apribojimo · 1 s buferis · proporcinis paskirstymas per srauta · C1 isankstine tiesiogine perziura · kokybes sulyginimas · prognozinis perskirstymas · nulinis uzpildymas · tikslus tempas.
Transliavimo statmux naudoja kodavimo irenginio greicio-iskraipymo ivertinima. Mes naudojame C1 saltinio sudEtinguma (r apie 0,92) + VBR koderis, kuris pasirenka savo QP — aparatines irangos apribojimas, ne dizaino.
Simptomai
Priežastis / sprendimas
Kanalas red and blinking
In the mux (checkbox ON) but srautas down/klaida → patikrinti the šaltinis/encoder of that srautas. Self-recovers once restored.
Lots of NULL / large grey area
Calm content or low headroom — normal (statmux gain). For tighter naudojimas raise the headroom slider or per-srautas max_bps.
Picture freezes / glitches
Headroom too high (rings not draining) → lower the slider to 80–82 %. Watch the diff gauge / NULL.
After restart srautai=0 / visi NULL
Mux started before the encoders — self-heal automatically reaches 12 within ~30 s (1 s tick bandyk dar kartą). No manual action.
Diff gauge stuck at 0 / chart empty
No live samples (mux sustabdyta or encoders not veikia) — patikrinti both the mux and srautas būsena.
SAT UDP SSM ─┐
├─ gst_encoder.py(K1) CBR ─ TCP127 ─┐ ZMQ complexity
(per ├─ gst_encoder.py(K2) CBR ─ TCP127 ─┤ ▲ │
chan) └─ gst_encoder.py(Kn) CBR ─ TCP127 ─┤ │ ▼
▼ BalanceRouter
┌─────── NIF StatMux ───────┐ │ set_bitrate
│ per-įvestis 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 daugiaadresinis siuntimas (CBR cap)gst_encoder.py per srautas: SAT UDP SSM įvestis → nvh264enc rc-mode=cbr. Bitų greitis is driven by BalanceRouter via set_bitrate. Scene complexity (SAD/px) reported over ZMQ to the allocator.
Per-įvestis ring (TCP loopback from encoder), 2-pass drain (garsas prioritetas, vaizdo įrašas full), proportional allocator, NULL pad exactly to wire cap (CBR), PCR pass-through from encoder.
One MPTS (PAT/PMT/SDT generated by NIF) → UDP daugiaadresinis siuntimas on the išvestis VLAN. Wire is strictly CBR at mux.bitų greitis (NULL stuffing).
Eilutė 1: ⚠ (validation issues) · PNR · pavadinimas in a frame (colour = state).
Eilutė 2+: min·avg·max kbps · predicted complexity Δ low/med/high/peak · INPUT LOST · ⚙URL · encoder Mbps · SID · service_type.
Pavadinimas colour = srautas state:
Mbps
37 ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ <= cap 37.0 Mbit (red, wire CBR ceiling)
· · · · · · · · · · · · · · · · · <= free space = NULL padding
·· grey · black dots · reserve ·· (unused talpa)
31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <= headroom 85% · 31.5 Mbit (orange,
▓▓▓▓ JOJ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ encoder targets aim here)
▒▒▒▒ Markíza ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
░░░░ TA3 ░░░░░░░░░░░░░░░░░░░░░░░░░░ <= click band -> expand card
0 └──────────────────────────────────
laikas -> 10m │ 1h │ 24h CC0 PCR0 BR0 OVF0Red 'cap' line: wire CBR ceiling (mux.bitų greitis) — NULL fills up to here.
Oranžinė linija 'headroom N%': = cap × headroom slankiklis / 100. Koduoklio nustatytas set_bitrate tikslas nukreiptas čia. Keičiasi kartu su slankikliu.
Pilka sritis su juodais taškais tarp turinio ir cap = NULL papildymas (nenaudojama atsarga). Daugiau taškų = daugiau atsargos.
Click a kanalas's colour band → automatically expands that kanalas's card below.
MuxEitAdapter skaito ivykius is EPG sistemos kiekvienai paslaugai, kuria DVB EIT skyrius (pavadinimas, laikas, trukme, aprasimas, zanras) ir paketuoja juos PID 0x12. Skyriuu versijos dideja keiciantis EPG — STB paima naujinima.
EIT iterpiamas tiesiogiai NIF mux, tolygiai i nulinie erdve (1 paketas / N isvestis + p/f periodiskai) — pakeiciant trkciojanta isoritini tsp kaskadini. Smaile/vidurkis apie 1,1, jokio turinio isstuomo.
Lentele 0x4E — dabartinis vykdomas + kitas ivykis. Iterpiama kas <=2 s, kad STB butu rodoma aktuali informacija 'dabar/kitas'.
Mux periodiskai regeneruoja EIT .bin is EPG (~15 s) — EPG tvarkarascio pasikeitimas pasiekia laida be paleidimo is naujo. Mux antraste rodoma 'EIT v' kai aktyvus.
Lentelee 0x50/0x51 — pilnas valandu/dienu i prieki tvarkarascis (segmentai). Tolygiai isskleidzztas sraute.
Faktinio srauto ir cap rodiklis. Centras = cap (0). Žymeklis kairėje (žalia) = atsarga (Σ turinys mažiau nei cap); dešinėje (raudona) = perteklius. Gyvas, keičiasi kiekviename žingsnyje.
-5 Mbps CAP 37000 kbps +5 Mbps
[#### žalia = atsarga ####│::: raudona = virš cap :::]
^ -3200k
(Σ turinys ~3.2 Mbps mažiau nei cap = sveika atsarga)
Lower (→78): more NULL reserve, safer, less tight cap naudojimas.
Higher (→90): tighter cap naudojimas, less NULL.
⚠ ≥88 %: slider turns yellow — uždaryti to the ring-overflow freeze ceiling. Hard-clamp 78–90 (cannot reach 100 — guard against frozen vaizdo įrašas).
Asymmetry: lowering reliably adds reserve; raising is limited by per-srautas max_bps clamp (allocator won't push a kanalas past its max → safe).
Controls how much of the cap the encoders target: encoder target = budget × headroom% / 100 (orange line in the chart). Changes live (effect from the kitas 10 ms tick), persisted in SystemConfig.
One kanalas fails (encoder crash / signal loss) ⇒ the mux keeps veikia, other channels unaffected, wire holds the cap (NULL absorbs the outage), CC=0 on survivors. Per-įvestis ring threads are independent. The nepavyko kanalas shows a red blinking pavadinimas + INPUT LOST badge; the encoder is supervised-restarted and the kanalas self-recovers.
PCR and PES PTS/DTS are pass-through from the encoder (single clock sritis ⇒ coherent, no drift). Residual PCR jitter ~tens of ms is inherent (10 ms išvestis tick + UDP) — STB/VLC PLL tolerates it, CC=0. Hard DVB-S2 modulator compliance is out of scope for the dabartinis IPTV use case.
CAT — salygine prieiga (tik kai sifruojama / ECM).
EIT — ivykiu informacija (EPG) — is EPG sistemos, zr. toliau.
NIT — tinklo informacija (tinklo ID, pavadinimas, transporto srautas).
PAT — programu sarasas (susieja PNR -> PMT PID).
PMT — kiekvienai programai: vaizdo/garso/PCR PID, kodekai, deskriptoriai.
SDT — paslauguu pavadinimai ir teikeejai (ka STB rodo sarase).
TDT/TOT — laikas ir data + vietinis poslinkis (STB laikrodis).