Muxer — Statistical Multiplex

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

MPTS multiplekser ja Adaptive Hybrid Statmux

Stream Manager mux koostab mitme SPTS voo üheks CBR MPTS väljundiks (DVB/IPTV). Adaptive Hybrid Statmux ühendab CBR südamiku täite VBR tasakaalustatud kooderijatega püsiva muxi väljundiga.

1. Enkooderi kiht (FFmpeg Streami kaupa)

Kui emamuxi statmux on lubatud, käitub iga FFmpeg kodeerija kaanud-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>. VBV puhver = 2× max annab ~2 s tippude puhvri. Statmux vooga saavad ka deterministliku GOP nihe (-force_key_frames) voo-ID kohta, nii et I-kaadri tipud ei lange üle kanalite.

2. Mux kiht (TSDuck tsp torujuhe)

tsp -I null (∞ NULL paketid @ liini määr) → -P merge tsp -I ip <voog> (ülekatab reaalsed paketid) → -P continuity (langeta alarm) → -P pcradjust --bitrate X (kirjutab PCR-id ümber) → -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. väljundkiht (UDP)

regulate pistikprogramm kiirgab täpselt mux.bitrate bps liinile. Mahajäänud sisendid → NULL-paketid täidavad lünga. --enforce-burst sunnib 7 TS-paketti UDP-datagrammi kohta (1316 B, IPTV standard).

Soovitatud suurused (Σ min / avg / max vs mux.bitrate)

Mux ülemine riba näitab 3 summat värvi olekuga. Reeglid:

Σ avg ≤ 85 % mux.bitrate — keskmise sihtmärgi summa kõikide kanalite ja helil. See on mux 'eelarve'. 15% statistiline reserv kaitseb tipu kokkulangemist. Roheline ≤ 85%, keldri toon ≤ 100%, punane > 100%.

Σ max ≤ 160% mux.bitrate — tipupiiri summa. Lubatud ületada mahtuvust (see ongi statmuxi mõte — tipud harva kattuvad). Roheline ≤ 160%, oranž ≤ 200%, punane > 200%.

Σ min ≤ 50% mux.bitrate — enkooderi alampiiri summa. Ohutu põrand tagab, et vaiksetes stseenides enkooderi ei lange tarbetuult madalale. Roheline ≤ 50%, oranž ≤ 90%, punane > 90%.

Näide: 4 HD kanalit 19 Mbps DVB-T muxis

Saadaolev eelarve pärast PSI/SI/EIT: ~18.5 Mbps. Σ avg = 4 × 4.0 = 16 Mbps (86% — oranž piiriala, alanda veelgi). Σ max = 4 × 6.0 = 24 Mbps (130% — roheline, OK).

Diagnostika ja häiresignaalid

Kui ≥ 10 alarmi 60 sekundis, ilmub Mux kasutajaliideses vilkuva teate, soovitades määra vähendamist. Automaatne tagasiminek ei ole aktiivne — operaator otsustab.

-P bitrate_monitor --periodic 60 --min/max ±5% — häire kui tegelik kiirus kaldub sihtmärgist rohkem kui ±5%. Tähendab, et regulate on näljas (sisend suri).

-P continuity — jälgib TS järjepidevust loendureid. Logib hoiatuse igal mahajäämisel (ülekoormus, FFmpeg jooksulüü, NIC vibratsioon).

-P pcrverify --jitter-max 500000 — DVB lubab PCR vibratsioon ≤ 500 µs. Alarm = pcradjust ei jõua või allikal on katki PCR.

Katkestused ja nende põhjused

GOP kokkulangevus — kõik enkoodereid kiirgavad I-kaadrid samaaegselt. Parandus: GOP nihe (statmuxi jaoks juba sees, hash(stream_id) mod gop_size).

Sisestuslahtiühendus — üks kanal muutub mustaks, mux jätkab (tänu -I null baasile). Kestus ~3-8 s FFmpeg taaskäivituse jaoks.

Üle-tellimine (püsivad tipud > mahtuvus) — blokkimine/heli köntsumine ~50-200 ms. Parandus: alandage Streami avg 5-10% võrra või eemaldage kanal.

PCR triiv — STB stutter iga paar sekundit. Parandus: pcradjust torujuhtmes (juba seal), vaadake pcrverify alarme.

STB VBV alakoormus — STB kaotab sünkroonimise ja taastab selle (~2-3 s). Parandus: enkooderi bufsize = 2 × maxrate (juba seadistatud), alandage maxrate.

tsp torujuhe parameetrid (mux_worker.ex)

--max-input-packets 4096 / --max-flushed-packets 4096 (sisemine FIFO ≈ 0.3 s @ 19 Mbps). --receive-buffer-size 16777216 (16 MB UDP vastuvõtupuhver). --packet-burst 32 (regulate) / 7 (väljund, IPTV standard). --enforce-burst (iga UDP-datagramm on täpselt 7 paketti).

Empiiriline mahutavuse arvutus (CLT)

Ülemine riba märgis `📐 rec X.XM` näitab soovituslikku muxi võimsust, mis tuleneb keskkonnalimiidi teoreem. Sõltumatute VBR vooga summa läheneb normaalsele jaotusele, seega Mux = μ_total + z·σ_total + marginaal. σ_i hinnanguline alates iga sisendi VBR vahemikust (max−min)/4 (eeldades, et vahemik katab ±2σ). Marginaal = 10% μ_total kompenseerida PSI/SI üldkulusid, kodeerija määra-kontrolli vibratsioon ja voolu korrelatsioon, mida puhas CLT alahinnangud.

Märgi värv: 🟢 roheline = piirang ≥ 99.7% soovit · 🟡 oranž = vahemikus 99%–99.7% · 🔴 punane = piirang < 99% · 🔵 sinine = piirang seadistamata.

z-skoor katvuse sihtmärgi järgi: 90% z=1.28 · 95% z=1.65 · 99% z=2.33 · 99.7% z=3.00 (vaikimisi) · 99.99% z=3.72 (ringhäälinguks).

σ_eff = σ_total × statmux_faktor (statmux_factor = 0,7 kui Statmux on SEES, muidu 1,0)

Soovitatavad väärtused kanali kohta (HD H.264)

1080p25 HD kanal: avg = 4000-5000 kbps, min = avg × 0.75 (~3000-3750), max = avg × 1.5 (~6000-7500). UI täidab min/max avgist automaatselt. SD: avg = 2000-2500 kbps. UHD: avg = 12000-18000 kbps.

Adaptiivne hübriid Statmux

Adaptiivne hübriid Statmux on käitusaegne mehhanism, mis suunab kasutamata mahtuvuse tuumikvoost (kaitstud, täis-VBR) tasakaalustatud voodesse (ohverdatav). 'Hübriid' kuna kaks erinevat kiirusejuhtimise režiimi töötavad kõrvuti; 'adaptiivne' kuna marsruuter hindab olukorda kord sekundis HLS-i ennustuse põhjal.

Võimsus — kuidas määra jagatakse

Mux mahutavus 38 Mbps
  ┌──────────────────────────────────┐
  │█████████████████████░░░░░░░░░░░░│
  └──────────────────────────────────┘
   ◀── core_max (ennustatud 6 HLS segmendist) ──▶◀── balanced ──▶

Praktiline kasvu (10 vooga × 3 Mbps avg, 4 Mbps max)

Ilma Adaptive Hybrid Statmuxita peate suurust muutma halveimal juhul Σ max. Adaptive Hybrid Statmuxiga saate suurust ümber Σ avg + statistiline puhver (ülekanal korrelatsioon ρ=0,15). Tegelik kasvu ~5 Mbps 38 Mbps muxi peal, või +1 voog sama piiranguga.

Puhas CBR (enkooderi fikseeritud)

VBR ilma Statmuxita

Adaptiivne hübriid Statmux SEES

URL ↔ Statmux eksklusiivisus

Kohandatud URL-i sisendiks alistamine ja Statmux välistavad teineteist. Statmux sees olles toetub tasakaalustatud transkoodija kohalikule enkooderi HLS-ile bitikiiruse juhtimiseks. Väline URL möödaks sellest juhtimisahelast.

Torujuhe (enkooderi → tasakaalustatud transkoodija → mux ffmpeg → tsp)

┌──────────────────────────┐
          │  Enkooderi (NVDEC→NVENC) │ ← UDP satelliit
          │  /dev/shm/stream_X/h264/ │
          └────────────┬─────────────┘
                       ▼
          ┌──────────────────────────┐
          │  ffmpeg-as-mux          │
          └────────────┬─────────────┘
                       ▼ UDP multisaade

Tuumiku VBR min/avg/max suuruse seadistamine statmux jaoks

Statistiline kasu tekib ainult siis, kui enkooderitel on lai VBR vahemik — kui max ≈ avg on enkooderi üldjoon CBR ja marsruuteril pole midagi ümber jagada.

Töötav näide — 38 Mbps mux, 10 HD tuumikut + 2 tasakaalustatud:

Vana (CBR-lukustatud): min=2000 avg=3000 max=4000

Soovitatav (lai VBR): min=1500 avg=3000 max=6000

Soovitatav vahemik tuumiku Streami kohta:

• min ≈ avg × 0.5

• avg = nimiväärtus eraldusvõime järgi

• max ≈ avg × 2.0

Näpunäited ja tõrkeotsing

Vähemalt 1 tasakaalustatud voog — ilma üheta Adaptive Hybrid ruuterile pole midagi tippude ajal kokku suruda, nii et kasvu = 0

Muusikakanavad ja infokanavad on parimad kandidaadid — 90 %+ taluvus määra vähendamisele

Jälgige `[balance-router]` logi kirjetega — näitab core_max, remaining, kihi üleminekuid iga 1 s takti kohta

Kui `core_max > mahutavus` (CORE OVERPEAK hoiatus logis), vähendage tuumiku voogu või alandage enkooderi maxrate

Operaatori töövoog

Lisage Streamid muxile (kanali omistamine jääb käsitsi)

Lülita Statmux muxi päisel (kollane kiip). Kui lubatud, lülituvad kõik kooderijad VBR-iks ja taaskäivitavad

Märkige ohverdatavad Streamid parempoolse oranži märkeruuduga — tavaliselt muusika-/infokanavid, kus kiiruse vähendamine on märkamatu

Valmis. Adaptiivne hübriidmarsruuter loeb 6-segmendilist HLS ennustust tuumikuvoost iga 1 s tagant ja vahetab atomaarselt tasakaalustatud sümboollingi HIGH/MED/MIN kihtide vahel

Statmux — adaptiivne hübriid statistiline multipleksering

Statmux juhtimisinfoahi

Klassifikatsioon

Andmevoog

Architecture diagram

Sisend

Enkooderi

C1 keerukus

Juhtimisnõel

Streami kaupa

Eraldis

Puhver

NULL täidis

CBR väljund

Eelsöötmine

Tagasiside

Sihtmärk

Andmevoo diagramm

Aju: tagasiside + C1 eelvaade

Eraldaja ühendab kaks signaali — ennustuse allikakeerukusest (edasi) ja mõõdetud liini (tagasi). See läheneb ringhäälingu statmuxidele.

C1 mõõdab sisusisu keerukust dekoodersis — mis eelneb enkooderi väljundile torujuhtme latentsuse võrra. Suhteline keerukuse muutus rakendatakse sihtbitikiirusele MÕLEMAS suunas ENNE enkooderi tootmist.

Mõõdetud liin (tagasiside)

Täpsed Streami kaupa muxist kiirgatavad bitid (saatjapoolsed loendid) kalibreerivad keerukuse → bitikiiruse vastendust.

Tarnitavus

Streami nõue põhineb sellel, mida enkooderi tegelikult toodab (× tipu reserv). Lihtne kanal ei saa koguda ribalaius, mida ta ei saa kulutada — ta vabastab selle näljasele.

Ühtlustatud kvaliteet

Eesmärk pole võrdne bitikiirus vaid võrdne kvaliteet — pidev surve liigutab bitte kõrgekvaliteedilistelt kanalitelt (madal QP) madala kvaliteediga kanalite poole (kõrge QP).

Ennustav ümberjaotamine

Kui C1 signaliseerib kanali langust, antakse selle ribalaius teistele samas taktis — nad kiirendavad enne kui langus liinini jõuab.

Kanali kohta kaal = complexity_q12 × max_bps (tegevusstseenid + kõrgem max ⇒ rohkem bitte).

Voo kohta eelarve = ülemaailmne eelarve × kaal / Σkaalud, piirang [min_bps, max_bps], arvutatud iga 10 ms.

Proportsionaalne kogumi eraldamine nõudluse järgi, piiratud [min, max]-ga videoprofiilis; vaba ribalaius läheb näljasele.

Enkooderi sihtmärk = eraldis / kalibreering (Streami EMA mõõdetud/sihtmärgi kohta); lähetamine lävedega (Δ≥3%/1s) ja kaldeniihe tera vastu.

Puhvri-hoidmise servo hoiab järjekorra taset ~1 s (ribas), hädaabistopp ülekoormuse korral; NULL-täidis viib muu CBR-ni.

Liini mõõdikud

Liini taseme mõõdikud näitavad tegelikku UDP käitumist pärast kiirgamist

Saatmisjärjekorra puhvri täituvus %

Puhvri täituvus

NULL-pakettide osakaal kogu liini bitikiirusest

NULL %

UDP datagrammide kiirgamise takt µs

Kiirgamistakt

Mux bitikiiruse graafik

Reaalajas mux bitikiiruse graafik

Ribade legendid

Ribad

Konfigureeritud mux piirang

Piirang

NULL-pakettide täidis (CBR hoidmiseks)

NULL täidis

Kukkunud paketid

Langused

Graafiku ajavahemik

Vahemik

Märkige hiire kursoriga graafiku punktid täpse teabe saamiseks

Nipp

Töötav piirang (% mux.bitrate-ist)

Piirang

NULL täidise reserv liinile

Reserv

Saatmisjärjekorra puhvri eesmärk

Puhver

GOP suurus (kaadrites) — ühtlustatud üle kõigi tuumiku Streamide

GOP

VBV puhvri suurus (enkooderi bufsize)

VBV

Programmikaardid

Jaotise päisel on 'kokkumahaamise / laienemise kõik' vahetusmine. Laienda kaarti klõpsates seda või klõpsates selle värviribasid diagrammil. Vasak värvi riba koos märkeruuduga = kanali liikmesus muxi.

OK — voog töötab, bitikiirus normaalne.

Käivitamine — enkooderi käivitumine.

hall + tuhmunud = alla/viga ja märkeruut VÄLJAS (tahtlikult keelatud — häiret pole)

Rike — sisend kadunud / enkooderi krahh.

PSI/SI tabelid

PSI/SI tabelid, mille NIF mux genereerib

Tabel

PID

Intervall

Allikas

EIT EPG ahel

EIT EPG ahel NIF statmux muxis

Suuruse / soovitused

Seadistage avg realistliku sihtmärgi järgi eraldusvõimele.

Seadistage min ≈ avg × 0.5 (vaiksetel stseenidel lubatav miinimum).

Seadistage max ≈ avg × 2.0 (aktsiooni/spordi tipud).

Kontrollige mux taseme tingimusi: Σavg ≤ 85%, Σmax ≤ 200% mux mahtuvusest.

Etalon-võrdlus

Etalon-võrdlus näitab erinevust sihttaseme ja mõõdetud liini vahel. Null-erinevus = perfektne kalibreerimine.

Mõõdetud tegelik liini bitikiirus

Olemas

Erinevus sihtmärgist

Erinevus

Tõrkeotsing

Sümptom

Parandus

NULL-paketid täidavad vahe ajutiselt

Enkooderi krahh taaskäivitub 3-8 sekundiga

GOP nihe hash(stream_id) mod gop_size abil

GOP kokkulangevus tekitab tipud

pcradjust torujuhtmes

PCR jitter > 500 µs

suurenda SO_RCVBUF; kontrolli NIC katkestusi

UDP puhvri ületäitumine

pcrverify häired — kontrolli torujuhet

Reaaliajal näidiseid pole (mux peatatud või kooderijad ei tööta) — kontrollige muxe ja voo olekut.

Arhitektuur (otsast otsani)

SAT UDP SSM ─┐
             ├─ gst_encoder.py(K1)  CBR ─ TCP127 ─┐        ZMQ keerukus
   (kanali kohta)     ├─ gst_encoder.py(K2)  CBR ─ TCP127 ─┤            ▲   │
     └─ gst_encoder.py(Kn)  CBR ─ TCP127 ─┤            │   ▼
                                                  ▼     BalanceRouter
                                   ┌─────── NIF StatMux ───────┐  │ set_bitrate
                                   │ voo kohta ring (kustuta-vana) │◄─┘
                                   │ 2-passne mahalaadimine (A prioor, V)  │
                                   │ proportsinaalne eraldaja: w=keerukus×max    │
                                   │ ×headroom% (liugur 78-90) │
                                   │ vananenud väljajätmine (>2s)     │
                                   │ NULL pad -> traat piirang CBR  │
                                   │ PCR läbivool          │
                                   └────────────┬──────────────┘
                                                ▼
                                   MPTS  UDP multicast (CBR piirang)

gst_encoder.py Streami kaupa: SAT UDP SSM sisend → nvh264enc rc-mode=cbr. Bitikiirust juhib BalanceRouter set_bitrate kaudu. Stseeni keerukus (SAD/px) esitatakse ZMQ kaudu eraldajale.

Voo kohta ring (TCP loopback kodeerija), 2-passne mahalaadimine (heli prioriteet, video täis), proportsionaalne eraldaja, NULL pad täpselt traadi piirangule (CBR), PCR läbivool kodeerija.

Üks MPTS (PAT/PMT/SDT genereeritakse NIF poolt) → UDP multisaade väljund-VLANis. Liin on rangelt CBR mux.bitrate väärtusega (NULL täidis).

Rida 1: ⚠ (valideerimisprobleemid) · PNR · nimi raamis (värv = olek).

Rida 2+: min·avg·max kbps · ennustatud keerukus Δ madal/kesk/kõrge/tipp · SISEND KADUNUD · ⚙URL · enkooderi Mbps · SID · service_type.

Olekud

Graafiku ASCII diagramm

Punane 'piirang' joon: juhe CBR lagi (mux.bitrate) — NULL täidet siin.

Oranž 'juurdeandmine N%' rida: = piirang × juurdeandmise liugur / 100. Kodeerija set_bitrate sihtmärgid annavad sellele. Liigub liuguriga.

Hall ala mustade täppidega sisu ja piirangu vahel = NULL täitmine (kasutamata reserv). Rohkem täppe = rohkem reservi.

Klõpsake kanali värviribal → automaatselt laiendab selle kanali kaart allpool.

EIT ajakava (8 päeva ette)

Genereerimine

Süstimine

P/F

Värskendamine

Ajakava

Mõõtur

Mux kasutuse mõõtur näitab kiirgatud sisu, NULL täidist ja sihttaset

Mõõturdiagramm

Kõrge eraldusvõime statistika

Bitikiirus 1

Kõrgem (→90): tihedam piirangu kasutamine, vähem NULL.

Bitikiirus 3

Asümmeetria: madaldamine lisab usaldusväärselt reservi; tõstmine piirdub voo kohta max_bps inega (eraldaja ei suruta kanalit üle selle max → turvaline).

Juhtab, kui palju kappist kooderijad sihtmärgiga: kodeerija sihtmärk = eelarve × headroom% / 100 (oranž rida diagrammil). Muudatused reaalajas (efekt järgmisest 10 ms tikust), talletatud SystemConfig.

Eraldatus

Eraldatus tagab, et ühe Streami rike ei mõjuta teisi. Iga sisend on omas ringpuhvris; ebaõnnestunud paketid kustutatakse vaikselt.

PCR timing

PCR ja PES PTS/DTS on läbivool kodeerija (ühe kella domeeni ⇒ koherentne, ilma triiveta). Jääkide PCR vibratsioon ~paarikümned ms on sisemised (10 ms väljundi tik + UDP) — STB/VLC PLL talub, CC=0. Kõvaketta DVB-S2 modulaatori vastavus on väljaarvutatud praeguse IPTV kasutuse juhtumi jaoks.

CAT

EIT

NIT

PAT

PMT

SDT

TDT/TOT

TSDuck Plugins Used

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