×

⊳ Muxer

MPTS · TSDuck · PSI/SI

MPTS Multiplexer & Statmux Hibrid Adaptif

Stream Manager mux merakit beberapa aliran SPTS menjadi satu output CBR MPTS (DVB/IPTV).

1. Lapisan encoder (FFmpeg per aliran)

Ketika mux induk mengaktifkan statmux, setiap encoder FFmpeg menjalankan capped-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>.

2. Lapisan mux (pipa TSDuck sdt)

sdt -I null (∞ NULL paket @ laju garis) → -P gabung sdt -I ip <stream> (melapisi paket sebenarnya) → -P kontinuitas (alarm jatuh) → -P pcradjust --bitrate X (menulis ulang PCR) → -P pcrverify --jitter-max 500µs → -P bitrate_monitor (alarm laju ±5%) → -P mengatur --bitrate X --packet-burst

3. Lapisan keluaran (UDP)

plugin pengatur memancarkan mux.bitrate bps dengan tepat pada kabel.

Ukuran yang disarankan (Σ min / rata-rata / maks vs mux.bitrate)

Bilah atas mux menunjukkan 3 jumlah dengan status warna.

Σ rata-rata ≤ 85 % mux.bitrate — jumlah target rata-rata di semua saluran ditambah audio.

Σ max ≤ 160 % mux.bitrate — jumlah maksimum maksimum.

Σ min ≤ 50 % mux.bitrate — jumlah dasar pembuat enkode.

Contoh: 4 saluran HD dalam mux DVB-T 19 Mbps

Anggaran yang tersedia setelah PSI/SI/EIT: ~18,5 Mbps.

Diagnostik & alarm

Pada ≥ 10 alarm dalam 60 detik, pemberitahuan flash muncul di Mux UI yang merekomendasikan pengurangan bitrate.

-P bitrate_monitor --periodic 60 --min/max ±5% — alarm jika kecepatan sebenarnya menyimpang melampaui ±5 % dari target.

-P kontinuitas — melacak penghitung kontinuitas TS.

-P pcrverify --jitter-max 500000 — DVB memungkinkan jitter PCR ≤ 500 µs.

Gangguan & penyebabnya

Kebetulan GOP - semua encoder memancarkan I-frame secara bersamaan, puncak kebetulan.

Input kehilangan sinyal - saluran tunggal menjadi hitam, mux berlanjut (berkat -I basis nol).

Langganan berlebih (puncak berkelanjutan > kapasitas) — blok/gagap audio ~50-200 mdtk.

PCR drift - STB gagap setiap beberapa detik.

STB VBV underrun — STB kehilangan sinkronisasi dan memperoleh kembali (~2-3 detik).

sdt parameter pipa (mux_worker.ex)

--max-input-packets 4096 / --max-flushed-packets 4096 (FIFO internal ≈ 0,3 dtk @ 19 Mbps).

Perhitungan kapasitas empiris (CLT)

Lencana bilah atas `📐 rec X.XM` menunjukkan kapasitas mux yang direkomendasikan yang diperoleh dari teorema batas pusat.

Warna lencana: 🟢 hijau = batas ≥ 99,7% rec (konservatif) · 🟡 kuning = antara 99% dan 99,7% · 🔴 merah = batas < 99% (kurang tersedia, risiko terjatuh) · 🔵 biru = batas tidak disetel.

z-score per target cakupan: 90% z=1,28 · 95% z=1,65 · 99% z=2,33 · 99,7% z=3,00 (default) · 99,99% z=3,72 (tingkat siaran).

σ_eff = σ_total × statmux_factor (statmux_factor = 0,7 saat Statmux AKTIF, jika tidak 1,0)

Nilai yang disarankan per saluran (HD H.264)

Saluran HD 1080p25: rata-rata = 4000-5000 kbps, min = rata-rata × 0,75 (~3000-3750), maks = rata-rata × 1,5 (~6000-7500).

Statmux Hibrid Adaptif

Statmux Hibrid Adaptif adalah mekanisme runtime yang mengalihkan kapasitas yang tidak terpakai dari aliran inti (dilindungi, VBR penuh) ke aliran seimbang (pengorbanan).

Kapasitas — bagaimana bitrate dibagi

Kapasitas mux 38 Mbps

Keuntungan praktis (10 streaming × rata-rata 3 Mbps, maks 4 Mbps)

Tanpa Adaptive Hybrid Statmux Anda harus mengukur mux untuk kasus terburuk Σ maks.

CBR murni (encoder diperbaiki)

VBR tanpa Statmux

Statmux Hibrida Adaptif AKTIF

URL ↔ Eksklusivitas Statmux

Penggantian masukan URL khusus dan Statmux saling eksklusif.

Pipeline (encoder → transcoder seimbang → mux ffmpeg → sdt)

┌───────────────────────────┐

Mengukur inti VBR min/rata-rata/maks untuk statmux

Penguatan statistik hanya terjadi ketika encoder memiliki rentang VBR yang luas — ketika max ≈ rata-rata encoder secara efektif adalah CBR dan router tidak memiliki apa pun untuk didistribusikan ulang.

Contoh yang berhasil — 38 Mbps mux, 10 HD core + 2 seimbang:

Rentang yang disarankan per aliran inti:

Kiat & pemecahan masalah

Setidaknya 1 aliran seimbang — tanpa satu aliran, router Adaptive Hybrid tidak akan mengalami gangguan apa pun selama puncak, jadi penguatan = 0

Saluran musik dan info adalah kandidat terbaik — 90%+ toleransi terhadap penurunan nilai

Lacak melalui entri log `[balance-router]` — menampilkan `core_max`, `remaining`, transisi tingkat untuk setiap tik 1 detik

Jika `core_max > capacity` (peringatan CORE OVERPEAK di log), kurangi jumlah aliran inti atau turunkan laju maks encoder

Alur kerja operator

Tambahkan aliran ke mux (penetapan saluran tetap manual)

Aktifkan Statmux pada header mux (chip kuning).

Tandai aliran pengorbanan melalui kotak centang oranye di sisi kanan — biasanya saluran musik/info di mana penurunan tarif tidak terlihat

Selesai.

StatMux — multipleks statistik asli

Beberapa saluran dengan kecepatan bit variabel berbagi satu aliran transport tetap (MPTS).

Kelas: statmux umpan balik loop tertutup dengan pandangan ke depan C1 (feedforward) melalui encoder VBR — prinsip statmux siaran, didorong dari kompleksitas sumber.

Arsitektur & aliran data

Architecture diagram

SSM multicast UDP, per saluran

Pembuat enkode

kompleksitas sumber

Putar balik

jalur/aliran sendiri

pengalokasi (Σ ≤ kumpulan)

penyangga

bantalan nol → CBR

Kawat CBR di tutup

antisipasi pemandangan kompleks sebelum menyelam

kawat terukur — kalibrasi

kecepatan bit target

Setiap saluran berjalan pada jalurnya sendiri hingga mux (encoder terpisah + koneksi loopback), di mana semua bergabung menjadi satu jalur multicast MPTS pada bitrate yang tetap.

Otak: umpan balik + C1 melihat ke depan

Pengalokasi menggabungkan dua sinyal — prediksi dari kompleksitas sumber (maju) dan kabel terukur (mundur).

C1 mengukur kompleksitas konten di decoder — yang mengarahkan output encoder berdasarkan latensi pipeline.

Kawat terukur (umpan balik)

Bit per-aliran yang tepat yang dipancarkan oleh mux (penghitung sisi pengirim) mengkalibrasi kompleksitas→pemetaan kecepatan bit dan menahan jumlahnya tepat di kumpulan.

Keterkiriman

Klaim aliran didukung oleh apa yang sebenarnya dihasilkan oleh pembuat enkode (× ruang kepala puncak).

Kualitas yang disamakan

Sasarannya bukanlah kecepatan bit yang sama, melainkan kualitas yang sama — tekanan terus-menerus memindahkan bit dari saluran berkualitas tinggi (QP rendah) ke saluran berkualitas rendah (QP tinggi).

Redistribusi prediktif

Saat C1 memberi sinyal pada saluran yang mengalami penurunan, bandwidthnya diserahkan ke saluran lain dalam waktu yang sama — bandwidth tersebut akan meningkat sebelum penurunan tersebut benar-benar mencapai kabel.

Pool = cap N − overhead (PSI/EIT) − audio − cadangan (slider).

Permintaan per aliran = kabel yang dapat dikirimkan × C1 pandangan ke depan (perubahan kompleksitas relatif) + tekanan penyetaraan kualitas.

Alokasi kumpulan proporsional berdasarkan permintaan, dibatasi hingga [min, maks] dari profil video;

Target encoder = alokasi / kalibrasi (EMA per aliran diukur/target);

Servo penahan penyangga menjaga tingkat antrian pada ~1 detik (pita), penghentian darurat saat kelebihan beban;

Kabel CBR: buffer + bantalan nol + tempo

Outputnya adalah aliran CBR yang tepat pada batas yang dikonfigurasi.

Buffer berdiri ~1 detik

Antrean pengiriman memiliki level kabel ~1 detik yang menyerap penurunan GOP sub-detik (antara I-frame).

Bantalan nol

Ketika konten di bawah batas, selisihnya diisi dengan paket null MPEG-TS (PID 0x1FFF).

Kecepatan yang tepat

Egress diatur ke batas yang tepat (abstime putaran sibuk);

Bagan keluaran (sungai)

Grafik tumpukan langsung dari kabel asli - setiap pita merupakan satu saluran, mengalir dengan lancar dari kanan.

Pita berwarna

Setiap saluran memiliki warna yang stabil;

Garis batas / maks

Garis putus-putus di atas = tutup yang dikonfigurasi (plafon kawat).

pita nol

Pita putih putus-putus di atas = bantalan nol (kapasitas bebas).

Tanda jatuh

Tanda merah di timeline = kirim-antrian meluap (drop).

Rentang (30 detik – 30 m)

Tombol mengalihkan jendela waktu secara instan (sisi klien), yang aktif memiliki latar belakang abu-abu.

Keterangan alat

Arahkan kursor menunjukkan bitrate per saluran, QP, dan indeks kualitas pada saat itu (nilai historis, bukan langsung).

batas %

Tingkat regulasi kumpulan saat ini (kumpulan/(kumpulan−trim)).

Cadangan (penggeser)

Batas toleransi di atas batas — berapa banyak yang harus disimpan sebagai cadangan nol.

Penyangga (tetes)

Header menunjukkan % utilitas antrian kirim dan penurunan kumulatif.

Partai Republik

Panjang GOP umum untuk semua saluran di mux (dikunci ke dalam profil video saat dimulai).

VBV

Ukuran buffer encoder VBV (ms).

Kartu streaming & status

Setiap saluran di mux memiliki kartu dengan nama, PNR, bitrate saat ini dan target, serta status:

Berjalan — saluran dikodekan dan mengalir ke kabel.

Mulai — pembuat enkode berputar/menetap.

Mati — saluran dalam mux tetapi tidak berjalan (0 kbps).

Kesalahan — masukan hilang / pembuat enkode rusak.

Tabel PSI/SI (set DVB lengkap)

StatMux menghasilkan set lengkap tabel MPEG-TS / DVB wajib langsung di mux NIF — tanpa penyisip SI eksternal.

Meja

PID

Selang

Tujuan / sumber

EIT ↔ EPG: integrasi penuh

EIT (Tabel Informasi Peristiwa, PID 0x12) tidak statis — EIT sepenuhnya tersambung ke sistem EPG aplikasi.

Ukuran saluran (min / rata-rata / maks)

min = lantai bawah (pemandangan statis).

rata-rata = tingkat target.

max = plafon (ruang kepala VBR untuk puncak/pemotongan).

Contoh (rata-rata): SD 1,5–2,5M · HD 2,5–4M · FHD 4–6M · UHD 12–18M.

Kaitannya dengan siaran statmux

Kami melakukan multiplexing statistik nyata — redistribusi bit dinamis di seluruh saluran VBR yang berbagi kabel tetap, dengan pemerataan kualitas.

Apa yang kita punya

Kabel CBR pada batas · buffer 1 dtk · alokasi proporsional per streaming · C1 look-ahead feedforward · pemerataan kualitas · redistribusi prediktif · bantalan nol · tempo yang tepat.

Dimana kita berbeda

Statmux siaran menggunakan perkiraan tingkat distorsi encoder (biaya frame yang tepat, encoder adalah budak dari pengalokasi).

Pemecahan masalah

Gejala

Penyebab / perbaikan

Kesenjangan / lonjakan nol (5–7 juta) pada grafik

Penurunan konten — baik GOP antara I-frame (diserap oleh buffer 1 detik) atau penghentian konten kolektif (ditangani dengan redistribusi).

Turun > 0 pendakian

Antrean kirim meluap — konten di atas batas.

Satu saluran tetap memiliki bitrate rendah/QP tinggi

Entah konten statis (benar — melepaskan bandwidth) atau batas maksimal yang terlalu rendah di profil.

Grafik tersendat/tepi kiri terhapus

Sisi klien — penyegaran paksa (Ctrl+Shift+R) untuk paket JS baru.

cap % / buffer tidak berubah setelah diedit

Perenderan ulang LiveView — penyegaran paksa.

Arsitektur (end-to-end)

SAT UDP SSM ─┐

gst_encoder.py per aliran: masukan SSM UDP SAT → nvh264enc rc-mode=cbr.

Cincin per input (loopback TCP dari encoder), pengurasan 2-pass (prioritas audio, video penuh), pengalokasi proporsional, pad NULL tepat ke tutup kabel (CBR), pass-through PCR dari encoder.

Satu MPTS (PAT/PMT/SDT dihasilkan oleh NIF) → UDP multicast pada VLAN keluaran.

Baris 1: ⚠ (masalah validasi) · PNR · nama dalam bingkai (warna = status).

Baris 2+: min·rata-rata·maks kbps · prediksi kompleksitas Δ rendah/sedang/tinggi/puncak · INPUT HILANG · ⚙URL · encoder Mbps · SID · service_type.

Warna nama = status aliran:

Mbps

Garis 'tutup' merah: kawat langit-langit CBR (mux.bitrate) — NULL terisi sampai di sini.

Garis oranye 'ruang kepala N%': = batas × penggeser ruang kepala / 100. Target set_bitrate encoder ditujukan ke sini.

Area abu-abu dengan titik hitam di antara konten dan tutup = bantalan NULL (cadangan tidak terpakai).

Klik pita warna saluran → secara otomatis memperluas kartu saluran tersebut di bawah.

Jadwal

MuxEitAdapter membaca peristiwa dari sistem EPG per layanan, membuat bagian DVB EIT (nama, waktu, durasi, deskripsi, genre) dan mengemasnya ke dalam PID 0x12.

EIT disuntikkan langsung ke dalam mux NIF, secara merata KE ruang kosong (1 paket / N keluaran + p/f secara berkala) — menggantikan kaskade sdt eksternal yang meledak.

Tabel 0x4E — acara yang sedang berjalan + acara berikutnya.

Mux secara berkala membuat ulang EIT .bin dari EPG (~15 dtk) — perubahan jadwal EPG mencapai kabel tanpa memulai ulang.

Tabel 0x50/0x51 — jadwal penuh jam/hari ke depan (segmen).

Pengukur perbedaan (di atas grafik)

Indikator aliran nyata vs batas.

-5 Mbps BATAS 37000 kbps +5 Mbps

Penggeser ruang kepala (78–90%, default 85)

Lebih rendah (→78): lebih banyak cadangan NULL, lebih aman, penggunaan batas lebih sedikit.

Lebih tinggi (→90): penggunaan batas lebih ketat, lebih sedikit NULL.

⚠ ≥88 %: penggeser berubah menjadi kuning — dekat dengan langit-langit beku luapan cincin.

Asimetri: penurunan yang andal menambah cadangan;

Mengontrol seberapa besar batas target encoder: target encoder = anggaran × ruang kepala% / 100 (garis oranye pada diagram).

Kehilangan sinyal / kegagalan saluran (isolasi)

Satu saluran gagal (encoder crash / kehilangan sinyal) ⇒ mux tetap berjalan, saluran lain tidak terpengaruh, kabel menahan tutupnya (NULL menyerap pemadaman), CC=0 pada yang selamat.

PCR / waktu

PCR dan PES PTS/DTS merupakan pass-through dari encoder (domain jam tunggal ⇒ koheren, tidak ada penyimpangan).

CAT — akses bersyarat (hanya saat pengacakan / ECM).

EIT — informasi peristiwa (EPG) — dari sistem EPG, lihat di bawah.

NIT — info jaringan (ID jaringan, nama, aliran transportasi).

PAT — daftar program (peta PNR → PMT PID).

PMT — per program: PID video/audio/PCR, codec, deskriptor.

SDT — nama dan penyedia layanan (yang ditampilkan STB dalam daftar).

TDT/TOT — waktu dan tanggal + offset lokal (jam STB).