MPTS · TSDuck · PSI/SI






Stream Manager マルチプレクサは、複数の SPTS ストリームを 1 つの CBR MPTS 出力 (DVB/IPTV) に組み立てます。
親マルチプレクサで 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 continuity (ドロップ アラーム) → -P pcradjust --bitrate X (PCR を書き換える) → -P pcrverify --jitter-max 500µs → -P bitrate_monitor (レート アラーム ±5%) → -P Regulator --bitrate X --packet-burst
調整プラグインは、ワイヤー上で正確に 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 continuity — TS 連続性カウンターを追跡します。
-P pcrverify --jitter-max 500000 — DVB では PCR ジッター ≤ 500 µs を許可します。
GOP 一致 - すべてのエンコーダが I フレームを同時に出力し、一致がピークになります。
入力信号損失 — 単一チャネルが黒くなり、マルチプレクサは継続します (-I null ベースのおかげで)。
オーバーサブスクリプション (持続的なピーク > 容量) - ブロック/音声の途切れが ~50 ~ 200 ミリ秒。
PCR ドリフト - 数秒ごとの STB スタッター。
STB VBV アンダーラン — STB が同期を失い、再取得します (約 2 ~ 3 秒)。
--max-input-packets 4096 / --max-flushed-packets 4096 (内部 FIFO ≈ 0.3 秒 @ 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 が ON の場合は statmux_factor = 0.7、それ以外の場合は 1.0)
1080p25 HD チャンネル: 平均 = 4000 ~ 5000 kbps、最小 = 平均 × 0.75 (~3000 ~ 3750)、最大 = 平均 × 1.5 (~6000 ~ 7500)。
Adaptive Hybrid Statmux は、未使用の容量をコア ストリーム (保護されたフル VBR) からバランスの取れたストリーム (犠牲) にシフトするランタイム メカニズムです。
マルチプレクサ容量 38 Mbps
Adaptive Hybrid Statmux を使用しない場合は、最悪の場合の Σ max に合わせてマルチプレクサのサイズを設定する必要があります。
ピュアCBR(エンコーダー固定)
Statmux なしの VBR
アダプティブ ハイブリッド スタットマックス オン
カスタム URL 入力オーバーライドと Statmux は相互に排他的です。
┌───────────────┐
統計的ゲインは、エンコーダの VBR 範囲が広い場合にのみ発生します。つまり、max ≈ avg の場合、エンコーダは事実上 CBR であり、ルータには再分配するものが何もありません。
動作例 — 38 Mbps マルチプレクサ、10 HD コア + 2 バランス:
コア ストリームごとの推奨範囲:
少なくとも 1 つのバランスのとれたストリーム - ストリームがないと、アダプティブ ハイブリッド ルーターはピーク時に押しつぶすものが何もないため、ゲイン = 0
音楽と情報チャネルが最適な候補です — レート制限に対する 90 % 以上の許容度
`[balance-router]` ログ エントリ経由で追跡 — 1 秒ごとの `core_max`、`remaining`、階層遷移を表示します
「core_max > Capacity」の場合 (ログのコア オーバーピーク警告)、コア ストリーム数を減らすか、エンコーダの最大レートを下げます。
マルチプレクサにストリームを追加します (チャネル割り当ては手動のままです)
マルチプレクサ ヘッダー (黄色のチップ) で Statmux を切り替えます。
右側のオレンジ色のチェックボックスを介して犠牲ストリームをマークします。通常、レート制限が目に見えない音楽/情報チャンネルです。
終わり。
複数の可変ビットレート チャネルが 1 つの固定トランスポート ストリーム (MPTS) を共有します。
クラス: VBR エンコーダを介した C1 先読み (フィードフォワード) を備えた閉ループ フィードバック 統計多重化 - ソースの複雑さから駆動されるブロードキャスト統計多重化原理。
UDP マルチキャスト SSM、チャネルごと
エンコーダ
ソースの複雑さ
ループバック
独自の回線/ストリーム
アロケータ (Σ ≤ プール)
バッファ
ヌルパディング → CBR
キャップのCBRワイヤー
ディップの前に複雑なシーンを予測する
測定されたワイヤ - 校正
ターゲットビットレート
各チャネルはマルチプレクサ (個別のエンコーダ + ループバック接続) まで独自の回線で実行され、すべてが正確に固定されたビットレートで 1 つの MPTS マルチキャスト 回線にマージされます。
アロケータは、ソースの複雑さからの予測 (前方) と測定されたワイヤ (後方) の 2 つの信号を結合します。
C1 は、デコーダでのコンテンツの複雑さを測定します。これにより、パイプライン レイテンシによってエンコーダ出力がリードされます。
マルチプレクサ (送信側カウンター) によって発行される正確なストリームごとのビットにより、複雑さ→ビットレートのマッピングが調整され、合計がプールに正確に保持されます。
ストリームの主張は、エンコーダーが実際に生成するもの (× ピーク ヘッドルーム) によって裏付けられます。
目標は、ビットレートを同等にすることではなく、品質を同等にすることです。継続的な圧力により、高品質チャネル (低 QP) から低品質チャネル (高 QP) にビットが移動します。
C1 がチャネルのドロップを通知すると、その帯域幅は同じティック内で他のチャネルに渡されます。ドロップが実際にワイヤに到達する前に帯域幅が増加します。
プール = キャップ N − オーバーヘッド (PSI/EIT) − オーディオ − リザーブ (スライダー)。
ストリームごとの需要 = 納品可能なワイヤ × C1 先読み (相対的な複雑さの変化) + 品質均一化のプレッシャー。
ビデオ プロファイルから [最小、最大] に固定された、要求に応じた比例的なプール割り当て。
エンコーダ ターゲット = 割り当て / キャリブレーション (ストリームごとの EMA 測定値/ターゲット);
バッファホールド サーボはキュー レベルを約 1 秒 (バンド) に保ち、過負荷時には緊急バックストップします。
出力は、設定されたキャップでの正確な CBR ストリームです。
送信キューは、1 秒未満の GOP ディップ (I フレーム間) を吸収する、約 1 秒の待機レベルのワイヤを保持します。
コンテンツが上限を下回る場合、その差分は MPEG-TS ヌル パケット (PID 0x1FFF) で埋められます。
出力は正確な上限 (ビジースピン ABSTIME) に合わせて調整されます。
実際のワイヤーのライブ積み上げグラフ — 各バンドは 1 つのチャネルであり、右からスムーズに流れます。
各チャンネルの色は安定しています。
上部の破線 = 構成されたキャップ (ワイヤー天井)。
上部の白い点線の帯 = Null パディング (空き容量)。
タイムライン上の赤いマーク = 送信キューのオーバーフロー (ドロップ)。
ボタンはタイム ウィンドウを即座に切り替えます (クライアント側)。アクティブなボタンの背景は灰色になります。
ホバーすると、その時点のチャネルごとのビットレート、QP、および品質インデックス (ライブではなく過去の値) が表示されます。
現在のプール規制レベル (プール/(プール-トリム))。
上限を超える許容範囲 — ヌル リザーブとして保持する量。
ヘッダーには、send-queue util % と累積ドロップ数が表示されます。
マルチプレクサ内のすべてのチャネルに共通の GOP 長さ (開始時にビデオ プロファイルにロックされます)。
エンコーダの VBV バッファ サイズ (ミリ秒)。
マルチプレクサ内の各チャネルには、名前、PNR、現在のビットレートとターゲット ビットレート、および状態を含むカードがあります。
実行中 — チャネルはエンコード中であり、ワイヤーに流れています。
開始中 — エンコーダは回転中/安定中です。
オフ — チャネルはマルチプレクサ内にありますが、実行されていません (0 kbps)。
障害 — 入力が失われた/エンコーダがクラッシュしました。
StatMux は、必須の MPEG-TS / DVB テーブルの完全なセットを NIF マルチプレクサ内に直接生成します。外部 SI インサータは必要ありません。
テーブル
PID
間隔
目的・出典
EIT (イベント情報テーブル、PID 0x12) は静的ではなく、アプリケーションの EPG システムに完全に接続されています。
min = 下層階 (静的シーン)。
avg = 目標レベル。
max = 天井 (ピーク/カットの VBR ヘッドルーム)。
例 (平均): SD 1.5 ~ 2.5M、HD 2.5 ~ 4M、FHD 4 ~ 6M、UHD 12 ~ 18M。
私たちは実際の統計的多重化、つまり固定ワイヤを共有する VBR チャネル間での動的なビット再配分と、品質のイコライゼーションを行っています。
キャップ時の CBR ワイヤ、1 秒のバッファ、ストリームごとの比例割り当て、C1 先読みフィードフォワード、品質イコライゼーション、予測再分配、ヌル パディング、正確なペーシング。
ブロードキャスト statmux は、エンコーダのレート歪み推定値を使用します (正確なフレーム コスト、エンコーダはアロケータのスレーブです)。
症状
原因/修正
チャート内のギャップ/ヌルスパイク (5~7M)
コンテンツ ディップ — I フレーム間の GOP (1 秒バッファによって吸収される) または集合的なコンテンツ ストール (再配布によって処理される) のいずれか。
ドロップ > 0 上昇
送信キューがオーバーフローしています - コンテンツが上限を超えています。
1 つのチャンネルは低ビットレート/高 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
赤い「キャップ」線: ワイヤー CBR 天井 (mux.bitrate) — ここまで NULL が入ります。
オレンジ色の「ヘッドルーム N%」行: = キャップ × ヘッドルーム スライダー / 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 CAP 37000 kbps +5 Mbps
低い値 (→ 78): NULL リザーブが多くなり、より安全になり、キャップの使用率が厳しくなくなります。
高い (→90): キャップの使用率が厳しくなり、NULL が少なくなります。
⚠ ≥88 %: スライダーが黄色に変わります — リング オーバーフローの凍結上限に近づきます。
非対称: 下げると確実にリザーブが追加されます。
エンコーダがターゲットとするキャップの量を制御します: エンコーダのターゲット = 予算 × ヘッドルーム% / 100 (グラフのオレンジ色の線)。
1 つのチャネルに障害が発生 (エンコーダのクラッシュ / 信号損失) ⇒ マルチプレクサは動作し続け、他のチャネルは影響を受けず、ワイヤはキャップを保持し (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 クロック)。