MPTS · TSDuck · PSI/SI






流管理器多路复用器将多个 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 merge tsp -I ip <stream>(覆盖真实数据包)→ -P 连续性(丢弃警报)→ -P pcradjust --bitrate X(重写 PCR)→ -P pcrverify --jitter-max 500µs → -P bitrate_monitor(速率警报 ±5%)→ -P 调节 --bitrate X --packet-burst 32 → -O ip
调节插件在线路上精确地发出 mux.bitrate bps。
Mux 顶部栏显示 3 个总和以及颜色状态。
Σ avg ≤ 85 % mux.bitrate — 所有通道加音频的平均目标总和。
Σ max ≤ 160 % mux.bitrate — 峰值上限总和。
Σ min ≤ 50 % mux.bitrate — 编码器底数总和。
PSI/SI/EIT 后的可用预算:~18.5 Mbps。
如果 60 秒内发生 ≥ 10 个警报,Mux UI 中会出现闪烁通知,建议降低比特率。
-P bitrate_monitor --periodic 60 --min/max ±5% — 如果实际速率偏离目标值超出 ±5%,则发出警报。
-P 连续性 — 跟踪 TS 连续性计数器。
-P pcrverify --jitter-max 500000 — DVB 允许 PCR 抖动 ≤ 500 µs。
GOP 重合 — 所有编码器同时发出 I 帧,峰值重合。
输入信号丢失 — 单通道变黑,多路复用器继续(由于 -I null base)。
超额订阅(持续峰值 > 容量)— 块/音频口吃 ~50-200 毫秒。
PCR 漂移 — STB 每隔几秒就会出现卡顿。
STB VBV 欠载 — STB 失去同步并重新获取(约 2-3 秒)。
--max-input-packets 4096 / --max-flushed-packets 4096(内部 FIFO ≈ 0.3 s @ 19 Mbps)。
顶部栏徽章“📐rec X.XM”显示了从中心极限定理得出的建议多路复用器容量。
徽章颜色: 🟢 绿色 = 上限 ≥ 99.7% 推荐(保守) · 🟡 琥珀色 = 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 打开时,statmux_factor = 0.7,否则为 1.0)
1080p25 高清频道:平均值 = 4000-5000 kbps,最小值 = 平均值 × 0.75 (~3000-3750),最大值 = 平均值 × 1.5 (~6000-7500)。
自适应混合 Statmux 是一种运行时机制,可将未使用的容量从核心流(受保护的完整 VBR)转移到平衡流(牺牲性)。
复用器容量 38 Mbps
如果没有自适应混合统计复用器,您必须根据最坏情况 Σ max 来确定复用器的大小。
纯CBR(编码器固定)
不带 Statmux 的 VBR
自适应混合统计复用器开启
自定义 URL 输入覆盖和 Statmux 是互斥的。
┌──────────────────────────┐
仅当编码器具有较宽的 VBR 范围时才会出现统计增益 - 当 max ≈ avg 时,编码器实际上是 CBR 并且路由器没有任何内容可以重新分配。
工作示例 — 38 Mbps 多路复用器,10 个 HD 核心 + 2 个平衡:
每个核心流的推荐范围:
至少 1 个平衡流 — 如果没有平衡流,自适应混合路由器在高峰期间没有任何东西可以挤压,因此增益 = 0
音乐和信息频道是最佳选择——对速率下降的容忍度超过 90%
通过“[balance-router]”日志条目进行跟踪 - 显示“core_max”、“remaining”、每 1 s 刻度的层转换
如果“core_max > 容量”(日志中出现 CORE OVERPEAK 警告),则减少核心流计数或降低编码器最大速率
将流添加到多路复用器(通道分配保持手动)
切换多路复用器接头(黄色芯片)上的 Statmux。
通过右侧橙色复选框标记牺牲流 - 通常是速率下降不可见的音乐/信息频道
完毕。
多个可变比特率通道共享一个固定传输流 (MPTS)。
类别:通过 VBR 编码器具有 C1 前瞻(前馈)的闭环反馈 statmux — 广播 statmux 原理,由源复杂性驱动。
UDP 多播 SSM,每个通道
编码器
源复杂性
环回
自己的线路/流
分配器(Σ ≤ 池)
缓冲
空填充 → CBR
帽上的 CBR 线
在下降前预测复杂的场景
被测线材 — 校准
目标比特率
每个通道都在自己的线路上运行,直至复用器(单独的编码器+环回连接),所有通道以完全固定的比特率合并到一条 MPTS 多播线路中。
分配器结合了两个信号——源复杂性的预测(前向)和测量的线路(后向)。
C1 测量解码器处的内容复杂性,这会导致编码器输出的管道延迟。
多路复用器(发送方计数器)发出的精确的每个流比特校准复杂性→比特率映射并将总和精确地保存在池中。
流的声明由编码器实际产生的内容(×峰值余量)支持。
目标不是相同的比特率,而是相同的质量——持续的压力将比特从高质量通道(低 QP)移动到低质量通道(高 QP)。
当 C1 发出通道下降信号时,其带宽会在同一滴答中传递给其他通道 - 在下降实际到达线路之前,它们会逐渐增加。
池 = cap N – 开销 (PSI/EIT) – 音频 – 储备(滑块)。
每个流的需求 = 可交付的线路 × C1 前瞻(相对复杂性变化)+ 质量均衡压力。
按需求按比例分配池,限制为视频配置文件中的 [min, max];
编码器目标 = 分配 / 校准(每流 EMA 测量值/目标);
缓冲保持伺服器将队列水平保持在约1秒(带),过载时紧急停止;
输出是配置上限的精确 CBR 流。
发送队列保持大约 1 s 的线路,可吸收亚秒级的 GOP 下降(I 帧之间)。
当内容低于上限时,差异将用 MPEG-TS 空数据包 (PID 0x1FFF) 填充。
出口被调整到精确的上限(繁忙旋转 ABSTIME);
真实线路的实时堆叠图 - 每个频段都是一个通道,从右侧平滑地流动。
每个通道都有稳定的颜色;
顶部的虚线 = 配置的上限(线上限)。
顶部的白色虚线带 = 空填充(可用容量)。
时间线上的红色标记 = 发送队列溢出(丢弃)。
按钮立即切换时间窗口(客户端),活动窗口具有灰色背景。
悬停显示当时每个通道的比特率、QP 和质量指数(历史值,而非实时值)。
当前池调节水平(池/(池-修剪))。
上限之上的公差范围 - 保留多少作为零储备。
标头显示发送队列 util % 和累积丢弃。
多路复用器中所有通道的通用 GOP 长度(在启动时锁定到视频配置文件中)。
编码器 VBV 缓冲区大小(毫秒)。
多路复用器中的每个通道都有一张卡,其中包含名称、PNR、当前和目标比特率以及状态:
正在运行 — 通道正在编码并流向线路。
启动 — 编码器正在旋转/稳定。
关闭 — 通道处于多路复用器中但未运行 (0 kbps)。
故障 — 输入丢失/编码器崩溃。
StatMux 直接在 NIF mux 中生成全套强制 MPEG-TS / DVB 表 — 无需外部 SI 插入器。
桌子
PID
间隔
目的/来源
EIT(事件信息表,PID 0x12)不是静态的 - 它完全连接到应用程序的 EPG 系统。
min = 下层(静态场景)。
平均值=目标水平。
max = 上限(峰值/削减的 VBR 余量)。
示例(平均):SD 1.5–2.5M · HD 2.5–4M · FHD 4–6M · UHD 12–18M。
我们进行真正的统计复用——共享固定线路的 VBR 通道之间的动态比特重新分配,并具有质量均衡。
CBR 线位于上限 · 1 s 缓冲区 · 每流比例分配 · C1 前瞻前馈 · 质量均衡 · 预测重新分配 · 空填充 · 精确节奏。
广播统计复用器使用编码器的率失真估计(精确的帧成本,编码器是分配器的从属)。
症状
原因/修复
图表中的间隙/零峰值 (5–7M)
内容下降 — I 帧之间的 GOP(由 1 秒缓冲区吸收)或集体内容停顿(通过重新分配处理)。
掉落 > 0 攀登
发送队列溢出 — 内容超出上限。
一个通道保持低比特率/高 QP
静态内容(正确 - 它释放带宽)或配置文件中的最大值太低。
图表卡顿/左边缘擦除
客户端 — 新 JS 包的硬刷新 (Ctrl+Shift+R)。
cap % / 缓冲区在编辑后不会改变
LiveView 重新渲染 — 硬刷新。
SAT UDP SSM ─┐
每个流的 gst_encoder.py:SAT UDP SSM 输入 → nvh264enc rc-mode=cbr。
每个输入环(来自编码器的 TCP 环回)、2 通道排出(音频优先、视频已满)、比例分配器、NULL 焊盘精确到线帽 (CBR)、来自编码器的 PCR 直通。
1 个 MPTS(NIF 生成的 PAT/PMT/SDT)→ 输出 VLAN 上的 UDP 组播。
第 1 行:⚠(验证问题)· PNR· 框架中的姓名(颜色 = 州)。
第 2+ 行:最小·平均·最大 kbps·预测复杂性 Δ 低/中/高/峰值·输入丢失·⚙URL·编码器 Mbps·SID·service_type。
名称颜色 = 流状态:
Mbps
红色“cap”线:连线 CBR 上限 (mux.bitrate) — NULL 填充到此处。
橙色“余量 N%”线:= cap × 余量滑块 / 100。编码器 set_bitrate 目标瞄准此处。
内容和上限之间有黑点的灰色区域 = NULL 填充(未使用的保留)。
单击通道的色带 → 自动展开下方该通道的卡片。
MuxEitAdapter 从每个服务的 EPG 系统中读取事件,构建 DVB EIT 部分(名称、时间、持续时间、描述、流派)并将其打包到 PID 0x12 上。
EIT 直接注入 NIF 多路复用器中,均匀地注入零空间(1 个数据包/N 输出 + 周期性的 p/f)——取代突发的外部 tsp 级联。
表 0x4E — 当前正在运行的 + 下一个事件。
多路复用器定期从 EPG 重新生成 EIT .bin(约 15 秒)——EPG 时间表更改无需重新启动即可到达线路。
表 0x50/0x51 — 提前的完整时间表小时/天(分段)。
实际流量与上限的指标。
-5 Mbps 上限 37000 kbps +5 Mbps
较低(→78):更多的空储备,更安全,上限利用率不那么严格。
更高 (→90):更严格的上限利用率,更少的 NULL。
⚠ ≥88 %:滑块变黄 — 接近环溢出冻结上限。
不对称:降低可靠地增加储备;
控制编码器目标上限的多少:编码器目标 = 预算 × 余量% / 100(图表中的橙色线)。
一个通道发生故障(编码器崩溃/信号丢失)⇒ 多路复用器继续运行,其他通道不受影响,电线保持上限(NULL 吸收中断),幸存者的 CC=0。
PCR 和 PES PTS/DTS 是来自编码器的直通(单时钟域⇒相干,无漂移)。
CAT — 条件接收(仅当加扰/ECM 时)。
EIT — 事件信息 (EPG) — 来自 EPG 系统,见下文。
NIT — 网络信息(网络 ID、名称、传输流)。
PAT — 节目列表(映射 PNR → PMT PID)。
PMT — 每个程序:视频/音频/PCR PID、编解码器、描述符。
SDT — 服务名称和提供商(STB 在列表中显示的内容)。
TDT/TOT — 时间和日期 + 本地偏移(STB 时钟)。