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


Pengurus Strim mux memasang berbilang aliran SPTS ke dalam satu output CBR MPTS (DVB/IPTV).
Apabila mux induk mendayakan statmux, setiap pengekod FFmpeg menjalankan caped-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>.
tsp -I null (∞ NULL paket @ kadar talian) → -P merge tsp -I ip <stream> (tindih paket sebenar) → -P kesinambungan (drop penggera) → -P pcradjust --bitrate X (menulis semula PCR) → -P pcrverify --jitter-max 500µs → kawal bit penggera →P_monitor
kawal pemalam mengeluarkan betul-betul mux.bitrate bps pada wayar.
Bar atas Mux menunjukkan 3 jumlah dengan status warna.
Σ purata ≤ 85 % mux.bitrate — purata jumlah sasaran merentas semua saluran serta audio.
Σ maks ≤ 160 % mux.bitrate — jumlah siling puncak.
Σ min ≤ 50 % mux.bitrate — jumlah lantai pengekod.
Belanjawan tersedia selepas PSI/SI/EIT: ~18.5 Mbps.
Pada ≥ 10 penggera dalam 60-an pemberitahuan denyar muncul dalam UI Mux yang mengesyorkan pengurangan kadar bit.
-P bitrate_monitor --periodik 60 --min/maks ±5% — penggera jika kadar sebenar tersasar melebihi ±5 % daripada sasaran.
-P kesinambungan — menjejaki pembilang kesinambungan TS.
-P pcrverify --jitter-max 500000 — DVB membenarkan PCR jitter ≤ 500 µs.
Kebetulan GOP — semua pengekod mengeluarkan bingkai-I secara serentak, kebetulan puncak.
Kehilangan isyarat input — saluran tunggal menjadi hitam, mux diteruskan (terima kasih kepada -I null base).
Langganan berlebihan (puncak berkekalan > kapasiti) — blok/gagap audio ~50-200 ms.
PCR drift — STB gagap setiap beberapa saat.
STB VBV underrun — STB kehilangan penyegerakan dan memperoleh semula (~2-3 s).
--paket-masukan-maks 4096 / --paket-penyiram-maks 4096 (FIFO dalaman ≈ 0.3 s @ 19 Mbps).
Lencana bar atas `📐 rec X.XM` menunjukkan kapasiti mux yang disyorkan yang diperoleh daripada teorem had pusat.
Warna lencana: 🟢 hijau = penutup ≥ 99.7% rec (konservatif) · 🟡 ambar = antara 99% dan 99.7% · 🔴 merah = penutup < 99% (kurang diperuntukkan, risiko jatuh) · 🔵 biru = penutup tidak ditetapkan.
z-skor setiap sasaran liputan: 90% z=1.28 · 95% z=1.65 · 99% z=2.33 · 99.7% z=3.00 (lalai) · 99.99% z=3.72 (gred siaran).
σ_eff = σ_total × statmux_factor (statmux_factor = 0.7 apabila Statmux HIDUP, jika tidak 1.0)
Saluran HD 1080p25: purata = 4000-5000 kbps, min = purata × 0.75 (~3000-3750), maks = purata × 1.5 (~6000-7500).
Statmux Hibrid Adaptif ialah mekanisme masa jalan yang mengalihkan kapasiti yang tidak digunakan daripada aliran teras (dilindungi, VBR penuh) kepada aliran seimbang (pengorbanan).
Kapasiti mux 38 Mbps
Tanpa Statmux Hibrid Adaptif anda mesti saiz mux untuk kes terburuk Σ max.
CBR tulen (pengekod tetap)
VBR tanpa Statmux
Statmux Hibrid Adaptif HIDUP
Pembatalan input URL tersuai dan Statmux adalah saling eksklusif.
┌─────────────────────────┐
Keuntungan statistik hanya berlaku apabila pengekod mempunyai julat VBR yang luas — apabila max ≈ purata pengekod adalah CBR dengan berkesan dan penghala tidak mempunyai apa-apa untuk diagihkan semula.
Contoh berfungsi — 38 Mbps mux, 10 teras HD + 2 seimbang:
Julat yang disyorkan setiap aliran teras:
Sekurang-kurangnya 1 aliran seimbang — tanpa satu penghala Adaptive Hybrid tidak mempunyai apa-apa untuk dihancurkan semasa puncak, jadi keuntungan = 0
Saluran muzik dan maklumat ialah calon terbaik — 90 %+ toleransi terhadap penurunan kadar
Jejaki melalui entri log `[balance-router]` — menunjukkan `core_max`, `remaining`, peralihan peringkat untuk setiap 1 s tick
Jika `maks_teras > kapasiti` (amaran CORE OVERPEAK dalam log), kurangkan kiraan strim teras atau rendahkan kadar maks pengekod
Tambahkan strim pada mux (tugasan saluran kekal manual)
Togol Statmux pada pengepala mux (cip kuning).
Tandai aliran korban melalui kotak pilihan jingga sebelah kanan — biasanya saluran muzik/maklumat yang penurunan kadar tidak dapat dilihat
Selesai.
Berbilang saluran kadar bit berubah berkongsi satu aliran pengangkutan tetap (MPTS).
Kelas: statmux maklum balas gelung tertutup dengan pandangan ke hadapan C1 (maklum balas) ke atas pengekod VBR — prinsip statmux siaran, didorong daripada kerumitan sumber.
UDP multicast SSM, setiap saluran
Pengekod
kerumitan sumber
Loopback
talian / aliran sendiri
pengagih (Σ ≤ pool)
penampan
padding null → CBR
Kawat CBR pada penutup
jangkakan adegan yang kompleks sebelum berenang
dawai yang diukur - penentukuran
kadar bit sasaran
Setiap saluran berjalan pada barisnya sendiri sehingga ke mux (pengekod berasingan + sambungan gelung balik), di mana semuanya bergabung menjadi satu baris multicast MPTS pada kadar bit tetap yang tepat.
Pengalokasi menggabungkan dua isyarat — ramalan daripada kerumitan sumber (ke hadapan) dan wayar yang diukur (ke belakang).
C1 mengukur kerumitan kandungan pada penyahkod — yang mendahului output pengekod mengikut kependaman saluran paip.
Bit per-strim tepat yang dipancarkan oleh mux (kaunter sisi penghantar) menentukur kerumitan → pemetaan kadar bit dan tahan jumlahnya tepat di kolam.
Tuntutan strim disokong oleh perkara yang sebenarnya dihasilkan oleh pengekod (× ruang kepala puncak).
Matlamatnya bukan kadar bit yang sama tetapi kualiti yang sama — tekanan berterusan menggerakkan bit daripada saluran berkualiti tinggi (QP rendah) ke saluran berkualiti rendah (QP tinggi).
Apabila C1 memberi isyarat saluran jatuh, lebar jalurnya diserahkan kepada yang lain dalam tanda yang sama - mereka naik sebelum jatuh benar-benar sampai ke wayar.
Kolam = penutup N − atas kepala (PSI/EIT) − audio − simpanan (gelangsar).
Permintaan setiap aliran = wayar boleh hantar × C1 pandangan ke hadapan (perubahan kerumitan relatif) + tekanan penyamaan kualiti.
Peruntukan kumpulan berkadar mengikut permintaan, diapit kepada [min, maks] daripada profil video;
Sasaran pengekod = peruntukan / penentukuran (per-strim EMA diukur/sasaran);
Servo tahan penampan mengekalkan tahap baris gilir pada ~1 s (jalur), hentian belakang kecemasan pada beban lampau;
Outputnya ialah aliran CBR tepat pada penutup yang dikonfigurasikan.
Baris gilir hantar memegang paras berdiri ~1 s wayar yang menyerap penurunan GOP subsaat (antara bingkai-I).
Apabila kandungan berada di bawah had, perbezaan diisi dengan paket null MPEG-TS (PID 0x1FFF).
Egress diatur mengikut had yang tepat (busy-spin ABSTIME);
Graf bertindan langsung bagi wayar sebenar — setiap jalur adalah satu saluran, mengalir dengan lancar dari kanan.
Setiap saluran mempunyai warna yang stabil;
Garis putus-putus di bahagian atas = topi yang dikonfigurasikan (siling wayar).
Jalur putih bertitik di atas = padding null (kapasiti bebas).
Tanda merah pada garis masa = limpahan hantar-baris (turun).
Butang menukar tetingkap masa serta-merta (sebelah pelanggan), yang aktif mempunyai latar belakang kelabu.
Tuding menunjukkan kadar bit setiap saluran, QP dan indeks kualiti pada masa itu (nilai sejarah, bukan langsung).
Tahap peraturan kolam semasa (pool/(pool−trim)).
Jalur toleransi di atas had — berapa banyak yang perlu disimpan sebagai rizab batal.
Pengepala menunjukkan % kegunaan gilir hantar dan kejatuhan kumulatif.
Panjang GOP biasa untuk semua saluran dalam mux (dikunci ke dalam profil video pada permulaan).
Saiz penimbal VBV pengekod (ms).
Setiap saluran dalam mux mempunyai kad dengan nama, PNR, kadar bit semasa dan sasaran serta keadaan:
Berjalan — saluran sedang mengekod dan mengalir ke wayar.
Bermula — pengekod sedang berputar / mengendap.
Mati — saluran berada dalam mux tetapi tidak berjalan (0 kbps).
Ralat — input hilang / pengekod ranap.
StatMux menjana set lengkap jadual MPEG-TS / DVB mandatori terus dalam mux NIF — tiada sisipan SI luaran.
Jadual
PID
Selang waktu
Tujuan / sumber
EIT (Jadual Maklumat Acara, PID 0x12) tidak statik — ia disambungkan sepenuhnya ke sistem EPG aplikasi.
min = tingkat bawah (tempat kejadian statik).
purata = tahap sasaran.
maks = siling (ruang kepala VBR untuk puncak/potongan).
Contoh (purata): SD 1.5–2.5M · HD 2.5–4M · FHD 4–6M · UHD 12–18M.
Kami melakukan pemultipleksan statistik sebenar — pengagihan semula bit dinamik merentas saluran VBR yang berkongsi wayar tetap, dengan penyamaan kualiti.
Wayar CBR pada penutup · penimbal 1 s · peruntukan berkadar setiap aliran · C1 ke hadapan suapan · penyamaan kualiti · pengagihan semula ramalan · padding nol · rentak tepat.
statmux siaran menggunakan anggaran herotan kadar pengekod (kos bingkai tepat, pengekod adalah hamba kepada pengalokasi).
simptom
Punca / betulkan
Jurang / lonjakan nol (5–7M) dalam carta
Penurunan kandungan — sama ada GOP antara bingkai-I (diserap oleh penimbal 1 s) atau gerai kandungan kolektif (dikendalikan melalui pengagihan semula).
Turun > 0 pendakian
Hantar baris gilir melimpah — kandungan melebihi had.
Satu saluran kekal kadar bit rendah / QP tinggi
Sama ada kandungan statik (betul — ia mengeluarkan lebar jalur) atau maks terlalu rendah dalam profil.
Carta tergagap / padam tepi kiri
Bahagian pelanggan — muat semula keras (Ctrl+Shift+R) untuk berkas JS baharu.
cap % / buffer tidak berubah selepas diedit
Paparan semula LiveView — muat semula keras.
SAT UDP SSM ─┐
gst_encoder.py setiap strim: SAT UDP SSM input → nvh264enc rc-mode=cbr.
Gelang setiap input (gelung balik TCP daripada pengekod), longkang 2-laluan (keutamaan audio, video penuh), pengalokasi berkadar, pad NULL tepat kepada penutup wayar (CBR), pas-lalu PCR daripada pengekod.
Satu MPTS (PAT/PMT/SDT dijana oleh NIF) → UDP berbilang hantaran pada VLAN keluaran.
Baris 1: ⚠ (isu pengesahan) · PNR · nama dalam bingkai (warna = keadaan).
Baris 2+: min·avg·maks kbps · ramalan kerumitan Δ rendah/med/tinggi/puncak · INPUT HILANG · ⚙URL · pengekod Mbps · SID · service_type.
Warna nama = keadaan aliran:
Mbps
Garis 'cap' merah: siling CBR wayar (mux.bitrate) — NULL diisi sehingga di sini.
Baris 'headroom N%' jingga: = topi × peluncur ruang kepala / 100. Sasaran set_bitrate pengekod disasarkan ke sini.
Kawasan kelabu dengan titik hitam antara kandungan dan penutup = NULL padding (rizab tidak digunakan).
Klik jalur warna saluran → mengembangkan kad saluran itu secara automatik di bawah.
MuxEitAdapter membaca acara daripada sistem EPG bagi setiap perkhidmatan, membina bahagian DVB EIT (nama, masa, tempoh, penerangan, genre) dan membungkusnya ke PID 0x12.
EIT disuntik terus dalam mux NIF, sama rata KE dalam ruang kosong (1 paket / N output + p/f secara berkala) — menggantikan lata tsp luaran yang pecah.
Jadual 0x4E — acara yang sedang berjalan + seterusnya.
Mux menjana semula EIT .bin secara berkala daripada EPG (~15 s) — perubahan jadual EPG sampai ke wayar tanpa dimulakan semula.
Jadual 0x50/0x51 — jadual penuh jam/hari ke hadapan (segmen).
Penunjuk aliran sebenar lwn had.
-5 Mbps CAP 37000 kbps +5 Mbps
Rendah (→78): lebih banyak rizab NULL, lebih selamat, penggunaan penutup kurang ketat.
Lebih tinggi (→90): penggunaan penutup yang lebih ketat, kurang NULL.
⚠ ≥88 %: peluncur bertukar menjadi kuning — dekat dengan siling beku limpahan gelang.
Asimetri: menurunkan dengan pasti menambah rizab;
Mengawal berapa banyak had yang disasarkan oleh pengekod: sasaran pengekod = belanjawan × ruang kepala% / 100 (garis oren dalam carta).
Satu saluran gagal (pengekod ranap / kehilangan isyarat) ⇒ mux terus berjalan, saluran lain tidak terjejas, wayar memegang penutup (NULL menyerap gangguan), CC=0 pada mangsa yang terselamat.
PCR dan PES PTS/DTS adalah lulus daripada pengekod (domain jam tunggal ⇒ koheren, tiada drift).
CAT — akses bersyarat (hanya apabila berebut / ECM).
EIT — maklumat acara (EPG) — daripada sistem EPG, lihat di bawah.
NIT — maklumat rangkaian (ID rangkaian, nama, aliran pengangkutan).
PAT — senarai program (peta PNR → PMT PID).
PMT — setiap program: video/audio/PCR PID, codec, deskriptor.
SDT — nama perkhidmatan dan pembekal (apa yang ditunjukkan oleh STB dalam senarai).
TDT/TOT — masa dan tarikh + ofset setempat (jam STB).