MPTS · TSDuck · PSI/SI






Stream Manager mux จะรวบรวมสตรีม SPTS หลายรายการไว้ในเอาต์พุต CBR MPTS เดียว (DVB/IPTV)
เมื่อ mux พาเรนต์เปิดใช้งาน statmux ตัวเข้ารหัส FFmpeg แต่ละตัวจะทำงาน capped-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>
tsp -I null (∞ แพ็กเก็ต NULL @ อัตราบรรทัด) → -P รวม tsp -I ip <stream> (ซ้อนทับแพ็กเก็ตจริง) → -P ความต่อเนื่อง (สัญญาณเตือนแบบหล่น) → -P pcradjust --bitrate X (เขียน PCR ใหม่) → -P pcrverify --jitter-max 500µs → -P bitrate_monitor (สัญญาณเตือนอัตรา ±5%) → -P ควบคุม --บิตเรต X --packet-burst
ควบคุมปลั๊กอินส่งเสียง mux.bitrate bps บนสายอย่างแน่นอน
แถบด้านบนของ Mux แสดงผลรวม 3 รายการพร้อมสถานะสี
Σ เฉลี่ย ≤ 85 % mux.bitrate — ผลรวมเป้าหมายโดยเฉลี่ยในทุกช่องสัญญาณบวกกับเสียง
Σ สูงสุด ≤ 160 % mux.bitrate — ผลรวมเพดานสูงสุด
Σ ขั้นต่ำ ≤ 50 % mux.bitrate — ผลรวมพื้นตัวเข้ารหัส
งบประมาณที่ใช้ได้หลังจาก PSI/SI/EIT: ~18.5 Mbps
ในการปลุก ≥ 10 ครั้งใน 60 วินาที การแจ้งเตือนแบบแฟลชจะปรากฏขึ้นใน Mux UI เพื่อแนะนำให้ลดบิตเรต
-P bitrate_monitor --เป็นระยะ 60 --นาที/สูงสุด ±5% — แจ้งเตือนหากอัตราจริงเบี่ยงเบนไปเกิน ±5 % ของเป้าหมาย
-P ความต่อเนื่อง - ติดตามตัวนับความต่อเนื่องของ TS
-P pcrverify --jitter-max 500000 — DVB อนุญาตให้ PCR jitter ≤ 500 µs
ความบังเอิญของ GOP — ตัวเข้ารหัสทั้งหมดปล่อย I-frames พร้อมกัน ซึ่งเป็นความบังเอิญสูงสุด
การสูญเสียสัญญาณอินพุต - ช่องสัญญาณเดียวจะเป็นสีดำ mux ดำเนินต่อไป (ขอบคุณ -I ฐานว่าง)
สมัครสมาชิกเกิน (ยอดคงที่ > ความจุ) — บล็อก/เสียงกระตุก ~50-200 ms
PCR drift — STB พูดติดอ่างทุกๆ สองสามวินาที
STB VBV ใช้งานไม่ได้ — STB สูญเสียการซิงค์และรับข้อมูลใหม่ (~2-3 วินาที)
--max-input-packets 4096 / --max-flushed-packets 4096 (FIFO ภายใน 0.3 วินาที @ 19 Mbps)
ป้ายแถบด้านบน `📐 rec X.XM` แสดงความจุ mux ที่แนะนำซึ่งได้มาจากทฤษฎีบทขีดจำกัดศูนย์กลาง
สีป้าย: 🟢 สีเขียว = หมวก ≥ 99.7% rec (อนุรักษ์นิยม) · 🟡 อำพัน = ระหว่าง 99% ถึง 99.7% · 🔴 สีแดง = หมวก < 99% (จัดเตรียมไว้น้อยเกินไป เสี่ยงต่อการตก) · 🔵 สีน้ำเงิน = ไม่ได้ตั้งค่าหมวก
คะแนน z ต่อเป้าหมายความครอบคลุม: 90% z=1.28 · 95% z=1.65 · 99% z=2.33 · 99.7% z=3.00 (ค่าเริ่มต้น) · 99.99% z=3.72 (ระดับการออกอากาศ)
σ_eff = σ_total × statmux_factor (statmux_factor = 0.7 เมื่อ Statmux เปิดอยู่ อย่างอื่น 1.0)
ช่อง 1080p25 HD: avg = 4000-5000 kbps, ต่ำสุด = avg × 0.75 (~3000-3750), สูงสุด = avg × 1.5 (~6000-7500)
Adaptive Hybrid Statmux เป็นกลไกรันไทม์ที่จะเปลี่ยนความจุที่ไม่ได้ใช้จากสตรีมหลัก (มีการป้องกัน VBR เต็มรูปแบบ) ไปเป็นสตรีมที่สมดุล (เสียสละ)
ความจุ Mux 38 Mbps
หากไม่มี Adaptive Hybrid Statmux คุณต้องปรับขนาด mux สำหรับค่าสูงสุด Σ ที่แย่ที่สุด
Pure CBR (ตัวเข้ารหัสคงที่)
VBR ที่ไม่มี Statmux
เปิด Statmux แบบไฮบริดแบบปรับเปลี่ยนได้
การแทนที่อินพุต URL ที่กำหนดเองและ Statmux เป็นแบบแยกจากกัน
┌─────────────────────────┐
อัตราขยายทางสถิติจะเกิดขึ้นก็ต่อเมื่อตัวเข้ารหัสมีช่วง VBR ที่กว้างเท่านั้น เมื่อค่าสูงสุด µ เฉลี่ยตัวเข้ารหัสจะเป็น CBR อย่างมีประสิทธิภาพ และเราเตอร์ก็ไม่มีอะไรจะแจกจ่ายต่อ
ตัวอย่างการทำงาน — mux 38 Mbps, 10 HD core + 2 แบบสมดุล:
ช่วงที่แนะนำต่อคอร์สตรีม:
สตรีมที่สมดุลอย่างน้อย 1 รายการ — หากไม่มีสตรีมใดเลย เราเตอร์ Adaptive Hybrid จะไม่มีอะไรต้องสควอชในช่วงพีค ดังนั้น ได้รับ = 0
ช่องเพลงและข้อมูลเป็นตัวเลือกที่ดีที่สุด — ทนทานต่อการลดอัตราได้ถึง 90%+
ติดตามผ่านรายการบันทึก `[balance-router]` — แสดง `core_max`, `คงเหลือ`, การเปลี่ยนระดับสำหรับแต่ละขีด 1 วินาที
หาก `core_max > ความจุ` (คำเตือน CORE OVERPEAK ในบันทึก) ให้ลดจำนวนสตรีมคอร์หรือลดอัตราสูงสุดของตัวเข้ารหัสลง
เพิ่มสตรีมลงใน mux (การกำหนดช่องยังคงเป็นแบบแมนนวล)
สลับ Statmux บนส่วนหัว mux (ชิปสีเหลือง)
ทำเครื่องหมายกระแสการสังเวยผ่านช่องทำเครื่องหมายสีส้มทางด้านขวา ซึ่งโดยทั่วไปคือช่องเพลง/ข้อมูลที่มองไม่เห็นอัตราการไหล
เสร็จแล้ว.
ช่องสัญญาณบิตเรตตัวแปรหลายช่องแชร์สตรีมการขนส่งแบบคงที่ (MPTS) เดียว
คลาส: statmux ป้อนกลับแบบวงปิดพร้อม C1 มองไปข้างหน้า (ป้อนไปข้างหน้า) บนตัวเข้ารหัส VBR - หลักการออกอากาศ statmux ซึ่งขับเคลื่อนจากความซับซ้อนของแหล่งที่มา
UDP มัลติคาสต์ SSM ต่อช่องสัญญาณ
ตัวเข้ารหัส
ความซับซ้อนของแหล่งที่มา
ย้อนกลับ
ไลน์/สตรีมของตัวเอง
ตัวจัดสรร (Σ ≤พูล)
บัฟเฟอร์
ช่องว่างภายใน → CBR
สาย CBR ที่แคป
คาดฉากที่ซับซ้อนก่อนลงน้ำ
ลวดที่วัดได้ — การสอบเทียบ
บิตเรตเป้าหมาย
แต่ละช่องสัญญาณจะทำงานบนบรรทัดของตัวเองจนถึง mux (แยกตัวเข้ารหัส + การเชื่อมต่อแบบวนกลับ) โดยที่ทั้งหมดจะรวมกันเป็นบรรทัดมัลติคาสต์ MPTS เดียวที่บิตเรตคงที่อย่างแน่นอน
ตัวจัดสรรจะรวมสองสัญญาณเข้าด้วยกัน — การทำนายจากความซับซ้อนของแหล่งที่มา (ไปข้างหน้า) และเส้นลวดที่วัดได้ (ย้อนกลับ)
C1 วัดความซับซ้อนของเนื้อหาที่ตัวถอดรหัส ซึ่งนำไปสู่เอาต์พุตตัวเข้ารหัสโดยเวลาแฝงของไปป์ไลน์
บิตต่อสตรีมที่แน่นอนที่ปล่อยออกมาจาก mux (ตัวนับฝั่งผู้ส่ง) ปรับเทียบความซับซ้อน→การแมปบิตเรต และเก็บผลรวมไว้ที่พูลทุกประการ
การอ้างสิทธิ์ของสตรีมได้รับการสนับสนุนโดยสิ่งที่ตัวเข้ารหัสสร้างขึ้นจริง (× เฮดรูมสูงสุด)
เป้าหมายไม่ใช่บิตเรตที่เท่ากันแต่มีคุณภาพเท่ากัน ความกดดันอย่างต่อเนื่องจะย้ายบิตจากแชนเนลคุณภาพสูง (QP ต่ำ) ไปยังแชนเนลคุณภาพต่ำ (QP สูง)
เมื่อ C1 ส่งสัญญาณว่าช่องสัญญาณลดลง แบนด์วิดท์ของมันจะถูกส่งไปยังช่องอื่นในจังหวะเดียวกัน โดยสัญญาณจะเพิ่มขึ้นก่อนที่การดรอปจะไปถึงเส้นลวดจริงๆ
พูล = cap N - โอเวอร์เฮด (PSI/EIT) - เสียง - สำรอง (สไลเดอร์)
ความต้องการต่อสตรีม = ลวดที่ส่งมอบ × C1 มองไปข้างหน้า (การเปลี่ยนแปลงความซับซ้อนสัมพัทธ์) + แรงกดดันที่ทำให้คุณภาพเท่ากัน
การจัดสรรพูลตามสัดส่วนตามความต้องการ โดยยึดไว้ที่ [นาที สูงสุด] จากโปรไฟล์วิดีโอ
เป้าหมายตัวเข้ารหัส = การจัดสรร / การสอบเทียบ (วัด EMA ต่อสตรีม/เป้าหมาย);
เซอร์โวบัฟเฟอร์ค้างจะรักษาระดับคิวไว้ที่ ~1 วินาที (แบนด์) หยุดฉุกเฉินเมื่อโอเวอร์โหลด
เอาต์พุตเป็นสตรีม CBR ที่แน่นอนที่ค่าสูงสุดที่กำหนดค่าไว้
คิวการส่งจะรักษาระดับการยืนไว้ที่ ~1 วินาทีของเส้นลวดที่ดูดซับการลดลง GOP ย่อยวินาที (ระหว่าง I-frame)
เมื่อเนื้อหาอยู่ต่ำกว่าขีดจำกัด ความแตกต่างจะถูกเติมด้วยแพ็กเก็ตว่าง MPEG-TS (PID 0x1FFF)
ทางออกจะก้าวไปสู่ขีดจำกัดที่แน่นอน (ABSTIME ที่หมุนไม่ว่าง);
กราฟแบบเรียงซ้อนสดของเส้นลวดจริง — แต่ละแบนด์เป็นหนึ่งช่องสัญญาณ ไหลอย่างราบรื่นจากด้านขวา
แต่ละช่องมีสีคงที่
เส้นประที่ด้านบน = ฝาครอบที่กำหนดค่าไว้ (เพดานลวด)
แถบสีขาวประที่ด้านบน = ช่องว่างภายใน (ความจุฟรี)
เครื่องหมายสีแดงบนไทม์ไลน์ = send-queue overflow (ดรอป)
ปุ่มต่างๆ สลับหน้าต่างเวลาทันที (ฝั่งไคลเอ็นต์) ปุ่มที่ใช้งานอยู่จะมีพื้นหลังสีเทา
โฮเวอร์แสดงบิตเรตต่อช่อง QP และดัชนีคุณภาพในขณะนั้น (มูลค่าในอดีต ไม่ใช่ข้อมูลสด)
ระดับการควบคุมสระปัจจุบัน (สระ/(สระ−ตัดแต่ง))
Tolerance band เหนือ cap — ต้องคงไว้เป็นค่าว่างสำรองมากน้อยเพียงใด
ส่วนหัวแสดง send-queue util % และการลดลงสะสม
ความยาว GOP ทั่วไปสำหรับทุกช่องใน mux (ล็อคอยู่ในโปรไฟล์วิดีโอเมื่อเริ่มต้น)
ขนาดบัฟเฟอร์ตัวเข้ารหัส VBV (มิลลิวินาที)
แต่ละช่องใน mux มีการ์ดที่มีชื่อ, PNR, บิตเรตปัจจุบันและเป้าหมาย และสถานะ:
วิ่ง — ช่องกำลังเข้ารหัสและไหลไปที่เส้นลวด
กำลังเริ่มต้น — ตัวเข้ารหัสกำลังหมุน/ตกตะกอน
ปิด — ช่องอยู่ใน mux แต่ไม่ทำงาน (0 kbps)
ข้อผิดพลาด — อินพุตสูญหาย / ตัวเข้ารหัสขัดข้อง
StatMux สร้างชุดตาราง MPEG-TS / DVB บังคับครบชุดโดยตรงใน NIF mux โดยไม่ต้องใช้ตัวแทรก SI ภายนอก
โต๊ะ
พีไอดี
ช่วงเวลา
วัตถุประสงค์/แหล่งที่มา
EIT (ตารางข้อมูลเหตุการณ์, PID 0x12) ไม่คงที่ — มีการต่อสายเข้ากับระบบ EPG ของแอปพลิเคชันโดยสมบูรณ์
min = ชั้นล่าง (ฉากคงที่)
เฉลี่ย = ระดับเป้าหมาย
สูงสุด = เพดาน (VBR headroom สำหรับจุดสูงสุด/จุดตัด)
ตัวอย่าง (เฉลี่ย): SD 1.5–2.5M · HD 2.5–4M · FHD 4–6M · UHD 12–18M
เราทำมัลติเพล็กซ์ทางสถิติจริง — การกระจายบิตแบบไดนามิกข้ามช่อง VBR ที่ใช้สายคงที่ร่วมกับการปรับคุณภาพให้เท่ากัน
สาย CBR ที่แคป · บัฟเฟอร์ 1 วินาที · การจัดสรรตามสัดส่วนต่อสตรีม · การป้อนล่วงหน้าแบบมองไปข้างหน้า C1 · การปรับคุณภาพให้เท่ากัน · การกระจายซ้ำแบบคาดการณ์ · การแพดดิ้งแบบ null · การเว้นจังหวะที่แน่นอน
สถิติการออกอากาศใช้การประมาณการอัตราการบิดเบือนของตัวเข้ารหัส (ต้นทุนเฟรมที่แน่นอน ตัวเข้ารหัสจะเป็นทาสของการจัดสรร)
อาการ
สาเหตุ/แก้ไข
ช่องว่าง / การเพิ่มขึ้นเป็นค่าว่าง (5–7M) ในแผนภูมิ
เนื้อหาลดลง — GOP ระหว่าง I-frames (ดูดซับโดยบัฟเฟอร์ 1 วินาที) หรือแผงเนื้อหาแบบรวม (จัดการโดยการแจกจ่ายซ้ำ)
ดรอป > 0 ปีนเขา
ส่งคิวล้น — เนื้อหาอยู่เหนือขีดจำกัด
ช่องหนึ่งมีบิตเรตต่ำ / QP สูง
เนื้อหาคงที่ (ถูกต้อง — ปล่อยแบนด์วิธ) หรือค่าสูงสุดในโปรไฟล์ต่ำเกินไป
แผนภูมิติดขัด / ลบขอบด้านซ้าย
ฝั่งไคลเอ็นต์ — ฮาร์ดรีเฟรช (Ctrl+Shift+R) สำหรับบันเดิล JS ใหม่
cap % / บัฟเฟอร์ไม่เปลี่ยนแปลงหลังจากแก้ไข
LiveView แสดงผลซ้ำ — รีเฟรชอย่างหนัก
SAT UDP SSM ─┐
gst_encoder.py ต่อสตรีม: อินพุต SAT UDP SSM → nvh264enc rc-mode=cbr
วงแหวนต่ออินพุต (TCP ลูปแบ็คจากตัวเข้ารหัส), ท่อระบาย 2 รอบ (ลำดับความสำคัญของเสียง, วิดีโอเต็ม), ตัวจัดสรรตามสัดส่วน, แผ่น NULL ตรงกับฝาครอบสายไฟ (CBR), การส่งผ่าน PCR จากตัวเข้ารหัส
หนึ่ง MPTS (PAT/PMT/SDT สร้างโดย NIF) → UDP มัลติคาสต์บนเอาต์พุต VLAN
แถว 1: ⚠ (ปัญหาการตรวจสอบ) · PNR · ชื่อในเฟรม (สี = สถานะ)
แถว 2+: ต่ำสุด·เฉลี่ย·สูงสุด kbps · ความซับซ้อนที่คาดการณ์ไว้ Δ ต่ำ/ปานกลาง/สูง/พีค · อินพุตที่หายไป · ⚙URL · ตัวเข้ารหัส Mbps · SID · service_type
สีของชื่อ = สถานะสตรีม:
เมกะบิตต่อวินาที
บรรทัด 'cap' สีแดง: ลวดเพดาน CBR (mux.bitrate) — NULL เติมถึงตรงนี้
บรรทัดสีส้ม 'headroom N%': = cap × ตัวเลื่อน headroom / 100 เป้าหมาย set_bitrate ของตัวเข้ารหัสมุ่งเป้าที่นี่
พื้นที่สีเทาที่มีจุดสีดำระหว่างเนื้อหาและหมวก = ช่องว่างภายใน (สำรองที่ไม่ได้ใช้)
คลิกแถบสีของช่อง → จะขยายการ์ดของช่องด้านล่างโดยอัตโนมัติ
MuxEitAdapter อ่านเหตุการณ์จากระบบ EPG ต่อบริการ สร้างส่วน DVB EIT (ชื่อ เวลา ระยะเวลา คำอธิบาย ประเภท) และแพ็กเก็ตไปยัง PID 0x12
EIT ถูกฉีดโดยตรงใน NIF mux เท่ากันในช่องว่าง (1 แพ็กเก็ต / เอาต์พุต N + p/f เป็นระยะ) - แทนที่การเรียงซ้อน tsp ภายนอกแบบต่อเนื่อง
ตาราง 0x4E — เหตุการณ์ที่กำลังดำเนินอยู่ + เหตุการณ์ถัดไป
mux จะสร้าง EIT .bin ใหม่เป็นระยะจาก EPG (~15 วินาที) - การเปลี่ยนแปลงกำหนดการ EPG ไปถึงเส้นลวดโดยไม่ต้องรีสตาร์ท
ตาราง 0x50/0x51 — ตารางเต็มชั่วโมง/วันข้างหน้า (เซ็กเมนต์)
ตัวบ่งชี้การไหลจริงเทียบกับขีดจำกัด
-5 Mbps CAP 37000 kbps +5 Mbps
ต่ำกว่า (→78): การสำรอง NULL มากขึ้น ปลอดภัยยิ่งขึ้น การใช้ cap ที่แน่นน้อยลง
สูงกว่า (→90): การใช้ cap ที่เข้มงวดมากขึ้น NULL น้อยลง
⚠ ≥88 %: แถบเลื่อนเปลี่ยนเป็นสีเหลือง — ใกล้กับเพดานแช่แข็งแบบวงแหวนล้น
ความไม่สมมาตร: การลดลงช่วยเพิ่มการสำรองได้อย่างน่าเชื่อถือ
ควบคุมขีดจำกัดสูงสุดของเป้าหมายตัวเข้ารหัส: เป้าหมายตัวเข้ารหัส = งบประมาณ × เฮดรูม% / 100 (เส้นสีส้มในแผนภูมิ)
ช่องทางหนึ่งล้มเหลว (ตัวเข้ารหัสขัดข้อง / การสูญเสียสัญญาณ) ⇒ mux ยังคงทำงานต่อไป ช่องทางอื่น ๆ ไม่ได้รับผลกระทบ wire ยึดขีดจำกัด (NULL ดูดซับการหยุดทำงาน) CC=0 สำหรับผู้รอดชีวิต
PCR และ PES PTS/DTS ถูกส่งผ่านจากตัวเข้ารหัส (โดเมนนาฬิกาเดียว ⇒ สอดคล้องกัน ไม่มีการเคลื่อนตัว)
CAT — การเข้าถึงแบบมีเงื่อนไข (เฉพาะเมื่อมีการแย่งชิง / ECM)
EIT — ข้อมูลเหตุการณ์ (EPG) — จากระบบ EPG ดูด้านล่าง
NIT — ข้อมูลเครือข่าย (รหัสเครือข่าย ชื่อ สตรีมการขนส่ง)
PAT — รายการโปรแกรม (แผนที่ PNR → PMT PID)
PMT — ต่อโปรแกรม: วิดีโอ/เสียง/PCR PID, โคเดก, ตัวอธิบาย
SDT — ชื่อบริการและผู้ให้บริการ (สิ่งที่ STB แสดงในรายการ)
TDT/TOT — เวลาและวันที่ + ออฟเซ็ตท้องถิ่น (นาฬิกา STB)