MPTS · TSDuck · PSI/SI






Stream Manager mux merakit beberapa aliran SPTS menjadi satu output CBR MPTS (DVB/IPTV).
Ketika mux induk mengaktifkan statmux, setiap encoder FFmpeg menjalankan capped-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>.
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
plugin pengatur memancarkan mux.bitrate bps dengan tepat pada kabel.
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.
Anggaran yang tersedia setelah PSI/SI/EIT: ~18,5 Mbps.
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.
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).
--max-input-packets 4096 / --max-flushed-packets 4096 (FIFO internal ≈ 0,3 dtk @ 19 Mbps).
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)
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 adalah mekanisme runtime yang mengalihkan kapasitas yang tidak terpakai dari aliran inti (dilindungi, VBR penuh) ke aliran seimbang (pengorbanan).
Kapasitas mux 38 Mbps
Tanpa Adaptive Hybrid Statmux Anda harus mengukur mux untuk kasus terburuk Σ maks.
CBR murni (encoder diperbaiki)
VBR tanpa Statmux
Statmux Hibrida Adaptif AKTIF
Penggantian masukan URL khusus dan Statmux saling eksklusif.
┌───────────────────────────┐
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:
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
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.
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.
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.
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.
Bit per-aliran yang tepat yang dipancarkan oleh mux (penghitung sisi pengirim) mengkalibrasi kompleksitas→pemetaan kecepatan bit dan menahan jumlahnya tepat di kumpulan.
Klaim aliran didukung oleh apa yang sebenarnya dihasilkan oleh pembuat enkode (× ruang kepala puncak).
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).
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;
Outputnya adalah aliran CBR yang tepat pada batas yang dikonfigurasi.
Antrean pengiriman memiliki level kabel ~1 detik yang menyerap penurunan GOP sub-detik (antara I-frame).
Ketika konten di bawah batas, selisihnya diisi dengan paket null MPEG-TS (PID 0x1FFF).
Egress diatur ke batas yang tepat (abstime putaran sibuk);
Grafik tumpukan langsung dari kabel asli - setiap pita merupakan satu saluran, mengalir dengan lancar dari kanan.
Setiap saluran memiliki warna yang stabil;
Garis putus-putus di atas = tutup yang dikonfigurasi (plafon kawat).
Pita putih putus-putus di atas = bantalan nol (kapasitas bebas).
Tanda merah di timeline = kirim-antrian meluap (drop).
Tombol mengalihkan jendela waktu secara instan (sisi klien), yang aktif memiliki latar belakang abu-abu.
Arahkan kursor menunjukkan bitrate per saluran, QP, dan indeks kualitas pada saat itu (nilai historis, bukan langsung).
Tingkat regulasi kumpulan saat ini (kumpulan/(kumpulan−trim)).
Batas toleransi di atas batas — berapa banyak yang harus disimpan sebagai cadangan nol.
Header menunjukkan % utilitas antrian kirim dan penurunan kumulatif.
Panjang GOP umum untuk semua saluran di mux (dikunci ke dalam profil video saat dimulai).
Ukuran buffer encoder VBV (ms).
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.
StatMux menghasilkan set lengkap tabel MPEG-TS / DVB wajib langsung di mux NIF — tanpa penyisip SI eksternal.
Meja
PID
Selang
Tujuan / sumber
EIT (Tabel Informasi Peristiwa, PID 0x12) tidak statis — EIT sepenuhnya tersambung ke sistem EPG aplikasi.
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.
Kami melakukan multiplexing statistik nyata — redistribusi bit dinamis di seluruh saluran VBR yang berbagi kabel tetap, dengan pemerataan kualitas.
Kabel CBR pada batas · buffer 1 dtk · alokasi proporsional per streaming · C1 look-ahead feedforward · pemerataan kualitas · redistribusi prediktif · bantalan nol · tempo yang tepat.
Statmux siaran menggunakan perkiraan tingkat distorsi encoder (biaya frame yang tepat, encoder adalah budak dari pengalokasi).
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.
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.
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).
Indikator aliran nyata vs batas.
-5 Mbps BATAS 37000 kbps +5 Mbps
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).
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 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).