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


Stream Manager mux sklaplja više SPTS stream-ova u jedan CBR MPTS izlaz (DVB/IPTV). Adaptive Hybrid Statmux kombinira CBR core punilo s VBR balanciranima enkoder-ima za konstantni mux izlaz.
Kada roditeljski mux ima statmux omogućen, svaki FFmpeg enkoder se pokreće s capped-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>. VBV pufer = 2× max daje ~2 s vrh headroom. Statmux stream-ovi također dobivaju determinističko GOP pomaknuto (-force_key_frames) po stream_id tako da I-frame vrhovi ne podudaraju se preko kanala.
tsp -I null (∞ NULL paketa @ line rate) → -P merge tsp -I ip <stream> (preklapanja pravi paketi) → -P continuity (drop alarm) → -P pcradjust --bitrate X (ponovno piše PCR-ove) → -P pcrverify --jitter-max 500µs → -P bitrate_monitor (rate alarm ±5%) → -P regulate --bitrate X --packet-burst 32 → -O ip <out> --packet-burst 7 --enforce-burst.
Vtičnica regulate emitira točno mux.bitrate bps na žici. Ulazi koji kasne → NULL paketi popunjavaju prazninu. Ulazi na vršnom opterećenju → interni FIFO pufer (4096 paketa ≈ 0,3 s @ 19 Mbps) apsorbira. --enforce-burst forsira 7 TS paketa po UDP datagramu (1316 B, IPTV standard).
Mux gornja traka pokazuje 3 zbroja sa statusom boje. Pravila:
Σ avg ≤ 85 % mux.bitrate — prosječni ciljni zbroj preko svih kanala plus audio. To je mux 'proračun'. 15 % statistička rezerva štiti od vrh podudaranja. Zelena ≤ 85 %, jantar ≤ 100 %, crvena > 100 %.
Σ max ≤ 160 % mux.bitrate — zbroj stropova vršnog opterećenja. Smije premašiti kapacitet (to je smisao statmuxa — vrhovi rijetko se podudaraju). Zeleno ≤ 160 %, žuto ≤ 200 %, crveno > 200 % (ispadanja pri trajnom vrhu).
Σ min ≤ 50 % mux.bitrate — zbroj minimalnih enkodiranja. Sigurni minimum osigurava da enkoder pri statičnim scenama ne pada na nepotrebno nisku kvalitetu. Zeleno ≤ 50 %, žuto ≤ 90 %, crveno > 90 %.
Dostupni proračun nakon PSI/SI/EIT: ~18,5 Mbps. Σ avg = 4 × 4,0 = 16 Mbps (86 % — žuto granično, smanjite dalje). Σ max = 4 × 6,0 = 24 Mbps (130 % — zeleno, OK). Σ min = 4 × 3,0 = 12 Mbps (65 % — žuto, OK). Cilj: avg ~85 % proračuna, max ≤ 160 %.
Na ≥ 10 alarma u 60s flash notifikacija se pojavljuje u Mux UI preporučujući smanjenje brzine. Auto-back-off NIJE aktivan — operator odlučuje.
-P bitrate_monitor --periodic 60 --min/max ±5% — alarm ako stvarna brzina odmakne izvan ±5 % cilja. Znači da regulate gladuje (ulaz umro).
-P continuity — prati TS continuity brojače. Zapisuje upozorenje na svaki drop (over-subscription, FFmpeg crash, NIC jitter).
-P pcrverify --jitter-max 500000 — DVB dozvoljava PCR jitter ≤ 500 µs. Alarm = pcradjust ne može pratiti ili izvor ima slomljene PCR-ove.
Podudaranje GOP — svi enkoderi istovremeno emitiraju I-okvire, vršno podudaranje. Popravak: pomak GOP (već uključeno za statmux, hash(stream_id) mod gop_size).
Gubitak ulaznog signala — jedan kanal postaje crn, mux nastavlja (zahvaljujući -I null bazi). Trajanje ~3-8 s za FFmpeg restart.
Pretplate (trajni vrhovi > kapacitet) — blokovi/audio zastajkivanje ~50-200 ms. Popravak: smanjite prosječni Stream za 5-10 % ili uklonite kanal.
PCR drift — STB stutter svaki par sekundi. Popravka: pcradjust u pipeline-u (već tu), promatraj pcrverify alarme.
STB VBV podtok — STB gubi sinkronizaciju i ponovo je stječe (~2-3 s). Popravak: enkoder bufsize = 2 × maxrate (već), smanjite maxrate.
--max-input-packets 4096 / --max-flushed-packets 4096 (interni FIFO ≈ 0,3 s @ 19 Mbps). --receive-buffer-size 16777216 (16 MB UDP rcv buffer po ulazu). --packet-burst 32 (regulate) / 7 (izlaz, IPTV standard). --enforce-burst (svaki UDP datagram je točno 7 paketa).
Gornja-traka značka `📐 rec X.XM` prikazuje preporučeni kapacitet mux-a izvedeni iz central limit teorema. Zbroj neovisnih VBR stream-ova približava se normalnoj distribuciji, tako da Mux = μ_total + z·σ_total + margin. σ_i procjenjuje se iz VBR raspona svakog ulaza kao (max−min)/4 (pretpostavljajući raspon pokriva ±2σ). Margin = 10% od μ_total kompenzira PSI/SI overhead, encoder rate-control jitter i stream korelaciju koju čista CLT podcijeni.
Boja oznake: 🟢 zeleno = cap ≥ 99,7% rec (konzervativno) · 🟡 žuto = između 99% i 99,7% · 🔴 crveno = cap < 99% (nedovoljno, rizik od ispadanja) · 🔵 plavo = cap nije postavljeno.
z-rezultat po cilju pokrivenosti: 90% z=1,28 · 95% z=1,65 · 99% z=2,33 · 99,7% z=3,00 (zadano) · 99,99% z=3,72 (razina emitiranja). Napomena na oznaci navodi sve razine; klikom se primjenjuje preporuka 99,7% na mux.bitrate (zahtijeva restart Muxa).
σ_eff = σ_total × statmux_factor (statmux_factor = 0.7 kada je Statmux UKLJUČEN, inače 1.0)
HD kanal 1080p25: avg = 4000-5000 kbps, min = avg × 0,75 (~3000-3750), max = avg × 1,5 (~6000-7500). Sučelje automatski popunjava min/max iz avg. Statmux sučelje automatski popunjava avg iz transkodirnog profila Streama. SD kanal: avg = 2000-2500 kbps. UHD: avg = 12000-18000 kbps.
Adaptivni hibridni Statmux je mehanizam rada koji premješta neiskorišteni kapacitet s temeljnih (zaštićenih, puni VBR) na uravnotežene (žrtvovane) Streamove. 'Hibrid' jer se dva različita načina kontrole brzine izvode usporedno (CBR temeljno punjenje + VBR uravnoteženi); 'adaptivni' jer router jednom u sekundi procjenjuje HLS-lookahead predikcijom. Operator označi Streamove kao uravnotežene putem desnog checkbox-a; sustav ih prethodno kodira u tri razine (HIGH/MED/MIN), a router atomski mijenja symlink na temelju preostalog prostora.
Mux kapacitet 38 Mbps
┌──────────────────────────────────────────────────────────────────┐
│█████████████████████████████████████████████████████░░░░░░░░░░░░│
└──────────────────────────────────────────────────────────────────┘
◀────── core_max (predviđeno iz 6 HLS segmenata) ─▶◀── uravnoteženo ──▶
per_balanced
= (cap − core_max
− SI overhead
− audio) / N
Primjer: 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 ← strop za uravnoteženi VBRBez Adaptive Hybrid Statmux-a moraš dimenzionirati mux za worst-case Σ max. S Adaptive Hybrid Statmux-om dimenzioniraš oko Σ avg + statistička pufer (broadcast korelacija ρ=0.15). Stvarni gain ~5 Mbps na 38 Mbps mux-u, ili +1 stream na istoj cap.
Čisti CBR (enkoder fiksiran)
VBR bez Statmuxa
Adaptivni hibridni Statmux UKLJUČEN
Prilagođeno URL ulazno nadjačavanje i Statmux su međusobno isključivi. S Statmuxom uključenim, uravnoteženi transkoder oslanja se na lokalni HLS enkoder za kontrolu brzine. Vanjski URL bi zaobišao tu kontrolnu petlju. Sučelje to nameće u oba smjera — checkbox se zaključava pri konfliktu, a napomena prikazuje koji Stream blokira.
┌─────────────────────────┐
│ Enkoder (NVDEC→NVENC) │ ← UDP satelit
STREAM │ /dev/shm/stream_X/h264/│
│ → muxed.m3u8 + segmenti│
└────────────┬────────────┘
│
┌────────┴────────┐
│ │
role="core" role="balanced"
(zaštićeni) (žrtvovani)
│ │
│ ▼
│ ┌───────────────────────────┐
│ │ BalancedTranscoder │
│ │ ffmpeg p1 NVENC VBR │
│ │ -maxrate dinamički │ ← Adaptivni hibridni router
│ │ /dev/shm/stream_X_ │ 1 s tick (predviđa iz
│ │ balanced/h264/...m3u8 │ 6 HLS segmenata, atomska
│ └───────────┬───────────────┘ zamjena symlink HIGH/MED/MIN)
│ │
▼ ▼
┌─────────────────────────┐
│ ffmpeg-as-mux │ ← /dev/shm/mux_X/pipe.sh
│ -f mpegts pipe:1 │
│ -muxrate <cap> │
└────────────┬────────────┘
│ shell pipe
▼
┌─────────────────────────┐
│ tsp -I file - │
│ continuity → regulate │
│ → pcradjust → bitrate_ │
│ monitor │
│ -P nit -P sdt -P inject│
│ (DVB SI tablice) │
└────────────┬────────────┘
│
▼ UDP multicast
239.x.x.x:1234Statistički dobitak događa se samo kada enkoderi imaju široki VBR raspon — kada je max ≈ avg enkoder je efektivno CBR i router nema što preraspodijeliti. Konfigurirajte `min/avg/max` po Streamu tako da je Σmax ugodno iznad Mux cap-a (pretplate = prostor za statistički dobitak) dok Σavg sjedi ugodno ispod njega.
Obrađeni primjer — 38 Mbps Mux, 10 HD core + 2 uravnotežena:
Staro (CBR-zaključano): min=2000 avg=3000 max=4000
Σmax = 10×4000 + 2×7600 = 55200 kbps (1,45× cap — mali dobitak)
σ_po_streamu = (4000−2000)/4 = 500 kbps (trivijalno — ravno)
Σ statistički prostor ≈ 1,5 Mbps
Preporučeno (široki VBR): min=1500 avg=3000 max=6000
Σmax = 10×6000 + 2×7600 = 75200 kbps (1,98× cap — zdravo)
Σavg = 10×3000 + 2×3000 = 36000 kbps (95% cap — ugodno)
Σmin = 10×1500 + 2×500 = 16000 kbps (42% cap — ugodni minimum)
σ_po_streamu = (6000−1500)/4 = 1125 kbps (značajno)
Σ statistički prostor ≈ 4 Mbps
Stvarna korist: na akcijskim scenama core doseže 5−6 Mbps (HD detalji),
router spušta uravnoteženi na MIN razinu, ukupna žica ostaje na 38 Mbps.Preporučeni raspon po temeljnom Streamu: • min ≈ avg × 0,5 (enkoder može pasti na statičnim scenama) • avg = nominalni cilj po rezoluciji (HD ≈ 3 Mbps, FullHD ≈ 5 Mbps, UHD ≈ 12 Mbps) • max ≈ avg × 2,0 (enkoder može doseći vrhove na akcijama — sport, akcijski film) Zaštite kapaciteta Muxa (moraju vrijed.): • Σ avg core + Σ avg balanced ≤ mux.bitrate × 0,85 (ugodni cilj) • Σ max core + Σ max balanced ≤ mux.bitrate × 2,0 (dobitak pretplate) • Σ min core + Σ min balanced ≤ mux.bitrate × 0,6 (najgori slučaj) σ_po_streamu = (max − min) / 4 (pretpostavlja ±2σ raspon) σ_ukupno = √((1−ρ) · Σσ²ᵢ + ρ · (Σσᵢ)²) ρ = 0,15 tipično emitiranje σ_efekt = σ_ukupno × 0,7 (statmux faktor kada UKLJUČEN) Mux_99,7% = μ_ukupno + 3 · σ_efekt (prikazano u gornjoj traci 📐 rec)
Barem 1 balancirani stream — bez jednog Adaptive Hybrid router nema ničega za stisnuti tijekom vrhova, tako da gain = 0
Glazbeni i informatvni kanali su najbolji kandidati — 90 %+ tolerancija na smanjenje brzine
Praćenje putem `[balance-router]` log unosa — prikazuje `core_max`, `remaining`, prijelaze razine za svaki 1 s tick
Ako `core_max > capacity` (upozorenje CORE OVERPEAK u logu), smanjite broj temeljnih Streamova ili smanjite enkoder maxrate
Dodajte Streamove u Mux (dodjela kanala ostaje ručna)
Uključi Statmux na zaglavlje mux-a (žuta čip). Kada je omogućen, svi enkoderi prebacuju na VBR i ponovno se pokreću
Označite žrtvovane Streamove putem desnog narančastog checkbox-a — tipično glazba/info kanali gdje smanjenje brzine nije vidljivo
Gotovo. Adaptivni hibridni router čita 6-segmentnu HLS predikciju iz temeljnih Streamova svake 1 s i atomski mijenja uravnoteženi symlink između razina HIGH/MED/MIN
Više kanala s promjenjivom brzinom dijeli jedan fiksni transportni Stream (MPTS). Bitovi se dinamički preraspoređuju prema složenosti sadržaja — zahtjevna scena dobiva više, statična manje — pa kvaliteta ostaje izjednačena i zbroj nikada ne prelazi kapacitet žice.
Klasa: statmux s zatvorenom petljom povratne veze s C1 lookaheadom (feedforward) nad VBR enkoderima — princip broadcast statmuxa, vođen iz složenosti izvora.
UDP multicast SSM, po kanalu
Enkoderi
složenost izvora
Povratna petlja
vlastita linija / Stream
alokator (Σ ≤ pul)
pufer
null punjenje → CBR
CBR žica na cap-u
anticipiraj složenu scenu prije pada
izmjerena žica — kalibracija
ciljna brzina
Svaki kanal radi na vlastitoj liniji do Muxa (odvojeni enkoder + loopback veza), gdje se svi spajaju u jedan MPTS multicast na točno fiksnoj brzini. Alokator je centralni mozak (1 GenServer po Muxu), tick ~0,85 s.
Alokator kombinira dva signala — predikciju iz složenosti izvora (naprijed) i izmjerenu žicu (unatrag). Ovo se približava broadcast statmuxima koji znaju cijenu okvira prije kodiranja.
C1 mjeri složenost sadržaja na dekoderu — što je ispred izlaza enkodera za kašnjenje cjevovoda. Relativna promjena složenosti (korelacija r≈0,92 s bitovima) primjenjuje se na cilinu brzinu u OBA smjera PRIJE nego enkoder to proizvede: rastuća scena se unaprijed dodjeljuje (bez pada), padajuća rano oslobađa bitove za ostale.
Točni bitovi po Streamu koje emitira Mux (brojači na strani pošiljatelja) kalibriraju mapiranje složenosti→brzina i drže zbroj točno na pulu. Sidro istine — predikcija C1 nije savršena (r 0,92), zaostala žica je ispravlja.
Zahtjev Streama potkrijepljen je onim što enkoder stvarno proizvodi (× prostor za vrhove). Lagani kanal ne može gomilati propusnost koju ne može potrošiti — oslobađa je za gladne.
Cilj nije jednaka brzina prijenosa već jednaka kvaliteta — kontinuirani pritisak premješta bitove s visokokvalitetnih kanala (niski QP) prema niskokvalitetnim (visoki QP).
Kada C1 signalizira pad kanala, njegova propusnost se predaje ostalima u istom ticku — oni se pojačavaju prije nego pad dosegne žicu.
Težina po kanalu = complexity_q12 × max_bps (akcijska scena + viši max ⇒ više bita).
Proračun po stream-u = globalni proračun × težina / Σtežine, fiksni [min_bps, max_bps], ponovno izračunato svkih 10 ms.
Proporcionalna dodjela pula prema potražnji, ograničena na [min, max] iz video profila; slobodna propusnost ide gladnima.
Ciljna brzina enkodera = dodjela / kalibracija (EMA mjereno/ciljano po Streamu); šalje se s pragom (Δ≥3%/1s) i limitom nagiba protiv oscilacija.
Servo zadržavanja pufera drži razinu reda na ~1 s (pojas), hitna zaštita pri preopterećenju; null popunjavanje dopunjuje ostatak do CBR.
Izlaz je točan CBR Stream na konfiguriranom cap-u. Tri sloja to jamče:
Red za slanje drži stalnu razinu od ~1 s žice koja apsorbira sub-sekundne GOP padove (između I-okvira). Verificirano iz snimke: 0,5–1 s apsorbira 88–91% padova.
Kada je sadržaj ispod cap-a, razlika se popunjava MPEG-TS null paketima (PID 0x1FFF). Žica tako UVIJEK dostiže cap — kompatibilno s DVB.
Izlaz je tempiran na točni cap (busy-spin ABSTIME); stezanje duga od 12 ms sprječava povratne skokove nakon kratkog zastoja → bez PCR jittera, bez skokova iznad cap-a.
Live složeni graf stvarne žice — svaki pojas je jedan kanal, teče glatko s desne strane. Podaci se mjere na žici (tsp sonda + NIF brojači), ne procjenjuju.
Svaki kanal ima stabilnu boju; debljina = njegova trenutna brzina. Overhead (PSI/EIT) je siv na dnu, null punjenje je teksturirano bijelo na vrhu.
Isprekidana crta na vrhu = konfigurirani cap (strop žice). Sadržaj + null punjenje uvijek ostaje ispod njega.
Točkasti bijeli pojas na vrhu = null punjenje (slobodni kapacitet). Što je tanji, žica je punija; nestaje na zahtjevnom sadržaju.
Crvene oznake na vremenskoj crti = prekoračenje reda za slanje (ispadanje). Nula u stabilnom stanju; skokovi samo pri pokretanju/poplavljivanju.
Gumbi trenutno mijenjaju vremenski prozor (na strani klijenta), aktivni ima sivi pozadinski okvir. Graf akumulira 30 min u pregledniku.
Zadržavanjem miša prikazuje se brzina po kanalu, QP i indeks kvalitete u tom trenutku (povijesna vrijednost, nije live).
Trenutna razina regulacije pula (pool/(pool−trim)). >100% = prekoračenje pritiska (punjenje pufera), <100% = smanjivanje.
Tolerancijalni pojas iznad cap-a — koliko zadržati kao null rezervu. 0 = točno N; pozitivno = veća rezerva (sigurnije); negativno = blago prekoračenje.
Zaglavlje prikazuje iskorištenost reda za slanje % i ukupna ispadanja. Gumb 'clear drops' resetira brojač.
Zajednička duljina GOP za sve kanale u Muxu (zaključano u video profile pri pokretanju). Raspoređivanje po zidu raspoređuje I-okvire u vremenu da se ne sudare.
Veličina VBV pufera enkodera (ms). Manje izravnava I-okvire (dobro za kanale s pokretom), veće daje detaljniji I-okvir. Zadano 850; moguće nadjačavanje po Streamu.
Zaglavlje sekcije ima 'Kolapse / Expand all' prekidač. Proširi karticu klikom ili klikom na njezinu boja traku u grafikonu. Lijeva obojana traka s checkboxom = članstvo kanala u mux-u.
Pokrenut — kanal kodira i teče prema žici.
Pokretanje — enkoder se pokreće / smiruje.
siva + blijeda = dolje/greška i checkbox ISKLJUČEN (namjerno onemogućeno — bez alarma)
Kvar — ulaz izgubljen / enkoder srušen.
StatMux generira potpuni skup obveznih MPEG-TS / DVB tablica direktno u NIF Muxu — bez vanjskog SI insertera. Tablice su ravnomjerno tempirana u Stream tako da STB uvijek brzo stječe PSI/SI nakon promjene kanala.
Tablica
PID
Interval
Svrha / izvor
EIT (Tablica informacija o događajima, PID 0x12) nije statična — u potpunosti je povezana s EPG sustavom aplikacije. Operator dodjeljuje svakom kanalu u Muxu EPG uslugu (eit_epg_service_id), a Mux generira live EIT iz njegovih raspoređenih događaja.
min = niži pod (statična scena). Preporučeno avg × 0,5–0,75. Postavite dovoljno nisko za uštedu na mirnom sadržaju za ostale.
avg = ciljna razina. Σ avg svih kanala ≈ video pul (cap − overhead − audio).
max = strop (VBR prostor za vrhove/rezove). Preporučeno avg × 1,5. Ne zaključavajte na avg — VBR treba prostor za vrhove.
Primjeri (avg): SD 1,5–2,5M · HD 2,5–4M · FHD 4–6M · UHD 12–18M. Za statmux zadržite razuman raspon kako bi se pul mogao prerasporediti.
Radimo pravi statistički multipleks — dinamička preraspodjela bitova po VBR kanalima koji dijele fiksnu žicu, s izjednačavanjem kvalitete. Mehanički smo bliski profesionalnim headend statmuxima (poravnanje cap-a, pufer 1 s, null punjenje, GOP/B-okviri, nadjačavanje poda).
CBR žica na cap-u · pufer 1 s · proporcionalna dodjela po Streamu · C1 lookahead feedforward · izjednačavanje kvalitete · prediktivna preraspodjela · null punjenje · točno tempiranje.
Broadcast statmux koristi procjenu distorzije brzine enkodera (točan trošak okvira, enkoder je rob alokatoru). Mi koristimo složenost izvora C1 (r≈0,92) + VBR enkoder koji sam odabire QP — hardversko ograničenje, ne dizajnersko. Klasa: povratna veza + lookahead umjesto čistog feedforwarda.
Simptom
Uzrok / popravak
Praznine / null skokovi (5–7M) u grafu
Pad sadržaja — ili GOP između I-okvira (apsorbiran 1 s puferom) ili kolektivni zastoj sadržaja (rješava preraspodjela). C1 lookahead značajno je smanjio ove slučajeve.
Ispadanja > 0 rastu
Prekoračenje reda za slanje — sadržaj iznad cap-a. Provjerite rezervu (klizač), iskorištenost i da alokator nije zaglavljen (tick se izvodi). Skokovi pri pokretanju su normalni.
Jedan kanal ostaje na niskoj brzini / visokom QP
Ili statični sadržaj (ispravno — oslobađa propusnost) ili preniska max vrijednost u profilu. Provjerite min/avg/max i stvarnu složenost izvora.
Graf zastajkuje / lijevi rub briše
Na strani klijenta — tvrdo osvježavanje (Ctrl+Shift+R) za novi JS paket. Podaci teku putem inkrementalnog pusha, os = odabrani raspon.
cap % / pufer se ne mijenja nakon uređivanja
Nema živih uzoraka (mux zaustavljen ili enkoderi nisu pokrenuti) — provjeri stanje mux-a i stream-a.
SAT UDP SSM ─┐
├─ gst_encoder.py(K1) CBR ─ TCP127 ─┐ ZMQ kompleksnost
(po ├─ gst_encoder.py(K2) CBR ─ TCP127 ─┤ ▲ │
kanalu) └─ gst_encoder.py(Kn) CBR ─ TCP127 ─┤ │ ▼
▼ BalanceRouter
┌─────── NIF StatMux ───────┐ │ set_bitrate
│ po-ulazni ring (drop-old) │◄─┘
│ 2-prolaz draining (A prio, V)│
│ alokator: w=cmplx×max │
│ ×headroom% (klizač 78-90) │
│ stale-exclusion (>2s) │
│ NULL pad -> wire cap CBR │
│ PCR prolazna │
└────────────┬──────────────┘
▼
MPTS UDP multicast (CBR cap)gst_encoder.py po Streamu: SAT UDP SSM ulaz → nvh264enc rc-mode=cbr. Brzina je pokretana od BalanceRouter-a putem set_bitrate. Složenost scene (SAD/px) prijavljuje se putem ZMQ alokatoru.
Po-ulazni ring (TCP loopback iz enkoder-a), 2-prolaz drain (audio prioritet, video puno), proporcionalni alokator, NULL pad točno na žičanu cap (CBR), PCR prolazna iz enkoder-a.
Jedan MPTS (PAT/PMT/SDT generiran od NIF) → UDP multicast na izlaznom VLAN-u. Žica je strogo CBR na mux.bitrate (NULL punjenje).
Red 1: ⚠ (problemi provjere valjanosti) · PNR · naziv u okviru (boja = stanje).
Red 2+: min·avg·max kbps · predviđena složenost Δ nisko/srednje/visoko/vršno · ULAZ IZGUBLJEN · ⚙URL · enkoder Mbps · SID · service_type.
Boja naziva = stanje Streama:
Mbps
37 ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ <= cap 37,0 Mbit (crveno, CBR strop žice)
· · · · · · · · · · · · · · · · · <= slobodan prostor = NULL punjenje
·· sivo · crne točke · rezerva ·· (neiskorišten kapacitet)
31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <= prostor 85% · 31,5 Mbit (narančasto,
▓▓▓▓ JOJ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ciljevi enkodera ovdje)
▒▒▒▒ Markíza ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
░░░░ TA3 ░░░░░░░░░░░░░░░░░░░░░░░░░░ <= klik pojas -> proširi karticu
0 └──────────────────────────────────
vrijeme -> 10m │ 1h │ 24h CC0 PCR0 BR0 OVF0Crvena 'cap' linija: žična CBR strop (mux.bitrate) — NULL popunjava do ovdje.
Narančasta linija 'headroom N%': = cap × headroom klizač / 100. Enkoder set_bitrate cilja ovdje. Kreće se s klizačem.
Siva zona sa crnim točkama između sadržaja i cap = NULL ispuna (neiskorištena rezerva). Više točaka = više rezerve.
Klikni na boja traku kanala → automatski proširi karticu tog kanala dolje.
MuxEitAdapter čita događaje iz EPG sustava po usluzi, gradi DVB EIT sekcije (naziv, vrijeme, trajanje, opis, žanr) i pakira ih na PID 0x12. Verzije sekcija se povećavaju pri promjeni EPG-a — STB preuzima ažuriranje.
EIT se ubrizgava direktno u NIF Mux, ravnomjerno U null prostor (1 paket / N izlaz + p/f periodično) — zamjenjuje bursni vanjski tsp kaskad. Vršna/prosječna ≈ 1,1, bez iseljenja sadržaja, cap drži.
Tablica 0x4E — trenutno prikazivani + sljedeći događaj. Ubrizgava se svake ≤2 s za trenutnu ažurnost 'sada/sljedeće' na STB-u.
Mux periodično regenerira EIT .bin iz EPG (~15 s) — promjena EPG rasporeda dostiže žicu bez restartas. Zaglavlje Muxa prikazuje 'EIT ✓' kada je aktivno.
Tablice 0x50/0x51 — potpuni raspored sati/dana unaprijed (segmenti). Ravnomjerno raspoređeni u Stream.
Pokazivač stvarnog toka vs cap-a. Centar = cap (0). Marker lijevo (zeleno) = rezerva (Σ sadržaj ispod cap-a); desno (crveno) = prekoračenje. Live, pomiče se svaki tick.
-5 Mbps CAP 37000 kbps +5 Mbps
[#### zeleno = rezerva ####│::: crveno = iznad cap :::]
^ -3200k
(Σ sadržaj ~3,2 Mbps ispod cap-a = zdrava rezerva)
Niže (→78): više NULL rezerve, sigurnije, manje tijesno korištenje cap-a.
Viša (→90): tisnija iskorištenja cap-a, manje NULL.
⚠ ≥88 %: klizač postaje žut — blizu granice zamrzavanja prstena. Tvrdo stezanje 78–90 (ne može doseći 100 — zaštita od smrznutog videa).
Asimetrija: snižavanje pouzdano dodaje rezervu; uzdizanje je ograničeno per-stream max_bps fiksnom (alokator neće gurnuti kanal preko max-a → sigurno).
Kontrolira koliko cap-a enkoderi ciljaju: enkoder cilj = proračun × headroom% / 100 (narančasta linija u grafikonu). Mijenja se na živo (učinak od sljedećeg 10 ms tick), perzistirano u SystemConfig.
Jedan kanal ne uspije (pad enkodera / gubitak signala) ⇒ Mux nastavlja raditi, ostali kanali nepotaknuti, žica drži cap (NULL apsorbira ispadi), CC=0 na preživjelima. Prsten-niti po ulazu su neovisne. Neuspjeli kanal prikazuje crveno trepćući naziv + oznaku ULAZ IZGUBLJEN; enkoder je nadziran-restartiran i kanal se sam oporavlja.
PCR i PES PTS/DTS su prolazna iz enkoder-a (jedna clock domena ⇒ koherentna, nema drifta). Ostatni PCR jitter ~tens od ms je svojstven (10 ms izlazni tick + UDP) — STB/VLC PLL tolerira, CC=0. Tvrdi DVB-S2 modulator compliance je izvan dosega za trenutnu IPTV upotrebu.
CAT — uvjetni pristup (samo pri miješanju / ECM).
EIT — informacije o događajima (EPG) — iz EPG sustava, vidi ispod.
NIT — mrežne informacije (ID mreže, naziv, transportni Stream).
PAT — popis programa (mapira PNR → PID PMT).
PMT — po programu: video/audio/PCR PID-ovi, kodeci, deskriptori.
SDT — nazivi usluga i pružatelji (što STB prikazuje na popisu).
TDT/TOT — datum i vrijeme + lokalni pomak (sat STB-a).