Muxer — Statistical Multiplex

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

MPTS Multiplekser & Adaptive Hybrid Statmux

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.

1. Sloj enkodera (FFmpeg po Streamu)

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.

2. Sloj Muxa (TSDuck tsp cjevovod)

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.

3. Izlazni sloj (UDP)

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).

Preporučena dimenzioniranja (Σ min / avg / max vs mux.bitrate)

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 %.

Primjer: 4 HD kanala u 19 Mbps DVB-T Muxu

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 %.

Dijagnostika i alarmi

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.

Greške & njihove uzroke

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.

tsp parametri cjevovoda (mux_worker.ex)

--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).

Empirički izračun kapaciteta (CLT)

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)

Preporučene vrijednosti po kanalu (HD H.264)

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

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.

Kapacitet — kako se bitrate dijeli

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 VBR

Praktični gain (10 stream-ova × 3 Mbps avg, 4 Mbps max)

Bez 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

Isključivost URL ↔ Statmux

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.

Cjevovod (enkoder → uravnoteženi transkoder → mux ffmpeg → tsp)

┌─────────────────────────┐
          │  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:1234

Dimenzioniranje VBR min/avg/max za statmux

Statistič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)

Savjeti i otklanjanje poteškoća

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

Radni tok operatera

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

StatMux — nativni statistički multipleks

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.

Arhitektura i tok podataka

Architecture diagram

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.

Mozak: povratna veza + C1 lookahead

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.

Izmjerena žica (povratna veza)

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.

Isporučivost

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.

Izjednačena kvaliteta

Cilj nije jednaka brzina prijenosa već jednaka kvaliteta — kontinuirani pritisak premješta bitove s visokokvalitetnih kanala (niski QP) prema niskokvalitetnim (visoki QP).

Prediktivna preraspodjela

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.

CBR žica: pufer + null punjenje + tempiranje

Izlaz je točan CBR Stream na konfiguriranom cap-u. Tri sloja to jamče:

Stalni pufer ~1 s

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.

Null punjenje

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.

Točno tempiranje

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.

Graf izlaza (rijeka)

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.

Obojeni pojasevi

Svaki kanal ima stabilnu boju; debljina = njegova trenutna brzina. Overhead (PSI/EIT) je siv na dnu, null punjenje je teksturirano bijelo na vrhu.

Cap / Max crta

Isprekidana crta na vrhu = konfigurirani cap (strop žice). Sadržaj + null punjenje uvijek ostaje ispod njega.

Null pojas

Točkasti bijeli pojas na vrhu = null punjenje (slobodni kapacitet). Što je tanji, žica je punija; nestaje na zahtjevnom sadržaju.

Oznake ispadanja

Crvene oznake na vremenskoj crti = prekoračenje reda za slanje (ispadanje). Nula u stabilnom stanju; skokovi samo pri pokretanju/poplavljivanju.

Raspon (30s–30m)

Gumbi trenutno mijenjaju vremenski prozor (na strani klijenta), aktivni ima sivi pozadinski okvir. Graf akumulira 30 min u pregledniku.

Napomena alata

Zadržavanjem miša prikazuje se brzina po kanalu, QP i indeks kvalitete u tom trenutku (povijesna vrijednost, nije live).

ograničenje %

Trenutna razina regulacije pula (pool/(pool−trim)). >100% = prekoračenje pritiska (punjenje pufera), <100% = smanjivanje.

Rezerva (klizač)

Tolerancijalni pojas iznad cap-a — koliko zadržati kao null rezervu. 0 = točno N; pozitivno = veća rezerva (sigurnije); negativno = blago prekoračenje.

Pufer (ispadanja)

Zaglavlje prikazuje iskorištenost reda za slanje % i ukupna ispadanja. Gumb 'clear drops' resetira brojač.

GOP

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.

VBV

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.

Kartice Streamova i stanja

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.

PSI/SI tablice (potpuni DVB skup)

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 ↔ EPG: potpuna integracija

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.

Dimenzioniranje / preporuke

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.

Odnos prema broadcast statmuxima

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).

Što imamo

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.

Gdje se razlikujemo

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.

Otklanjanje poteškoća

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.

Arhitektura (od kraja do kraja)

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 OVF0

Crvena '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.

Raspored

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.

Diff mjerač (iznad grafa)

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)

Klizač prostora (78–90 %, zadano 85)

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.

Gubitak signala / neuspjeh kanala (izolacija)

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 / tempiranje

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).

TSDuck Plugins Used

merge
regulate
pat
pmt
sdt
nit
eitinject
timeref
bitrate_monitor
continuity
psimerge
count