Muxer — Statistical Multiplex

TSDuck-based MPEG Transport Stream multiplexer with full PSI/SI support

MPTS マルチプレクサおよびアダプティブ ハイブリッド Statmux

Stream Manager マルチプレクサは、複数の SPTS ストリームを 1 つの CBR MPTS 出力 (DVB/IPTV) に組み立てます。

1. エンコーダー層 (ストリームごとの FFmpeg)

親マルチプレクサで statmux が有効になっている場合、各 FFmpeg エンコーダは capped-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2> を実行します。

2.Mux 層 (TSDuck tsp パイプライン)

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

3. 出力層(UDP)

調整プラグインは、ワイヤー上で正確に mux.bitrate bps を出力します。

推奨されるサイジング (Σ min / avg / max vs mux.bitrate)

Mux の上部バーには、3 つの合計と色のステータスが表示されます。

Σ avg ≤ 85 % mux.bitrate — すべてのチャネルとオーディオにわたる平均目標合計。

Σ max ≤ 160 % mux.bitrate — ピーク上限合計。

Σ min ≤ 50 % mux.bitrate — エンコーダの下限合計。

例: 19 Mbps DVB-T マルチプレクサ内の 4 つの HD チャネル

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 秒)。

tsp パイプライン パラメータ (mux_worker.ex)

--max-input-packets 4096 / --max-flushed-packets 4096 (内部 FIFO ≈ 0.3 秒 @ 19 Mbps)。

経験的容量計算 (CLT)

上部のバーバッジ「📐 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)

チャネルごとの推奨値 (HD H.264)

1080p25 HD チャンネル: 平均 = 4000 ~ 5000 kbps、最小 = 平均 × 0.75 (~3000 ~ 3750)、最大 = 平均 × 1.5 (~6000 ~ 7500)。

アダプティブ ハイブリッド Statmux

Adaptive Hybrid Statmux は、未使用の容量をコア ストリーム (保護されたフル VBR) からバランスの取れたストリーム (犠牲) にシフトするランタイム メカニズムです。

容量 - ビットレートの分割方法

マルチプレクサ容量 38 Mbps

実用的なゲイン (10 ストリーム × 平均 3 Mbps、最大 4 Mbps)

Adaptive Hybrid Statmux を使用しない場合は、最悪の場合の Σ max に合わせてマルチプレクサのサイズを設定する必要があります。

ピュアCBR(エンコーダー固定)

Statmux なしの VBR

アダプティブ ハイブリッド スタットマックス オン

URL ↔ Statmux の独占性

カスタム URL 入力オーバーライドと Statmux は相互に排他的です。

パイプライン (エンコーダー → バランスド トランスコーダー → マルチプレクサ ffmpeg → tsp)

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

statmux のコア VBR の最小/平均/最大のサイジング

統計的ゲインは、エンコーダの VBR 範囲が広い場合にのみ発生します。つまり、max ≈ avg の場合、エンコーダは事実上 CBR であり、ルータには再分配するものが何もありません。

動作例 — 38 Mbps マルチプレクサ、10 HD コア + 2 バランス:

コア ストリームごとの推奨範囲:

ヒントとトラブルシューティング

少なくとも 1 つのバランスのとれたストリーム - ストリームがないと、アダプティブ ハイブリッド ルーターはピーク時に押しつぶすものが何もないため、ゲイン = 0

音楽と情報チャネルが最適な候補です — レート制限に対する 90 % 以上の許容度

`[balance-router]` ログ エントリ経由で追跡 — 1 秒ごとの `core_max`、`remaining`、階層遷移を表示します

「core_max > Capacity」の場合 (ログのコア オーバーピーク警告)、コア ストリーム数を減らすか、エンコーダの最大レートを下げます。

オペレーターのワークフロー

マルチプレクサにストリームを追加します (チャネル割り当ては手動のままです)

マルチプレクサ ヘッダー (黄色のチップ) で Statmux を切り替えます。

右側のオレンジ色のチェックボックスを介して犠牲ストリームをマークします。通常、レート制限が目に見えない音楽/情報チャンネルです。

終わり。

StatMux — ネイティブ統計マルチプレックス

複数の可変ビットレート チャネルが 1 つの固定トランスポート ストリーム (MPTS) を共有します。

クラス: VBR エンコーダを介した C1 先読み (フィードフォワード) を備えた閉ループ フィードバック 統計多重化 - ソースの複雑さから駆動されるブロードキャスト統計多重化原理。

アーキテクチャとデータフロー

Architecture diagram

UDP マルチキャスト SSM、チャネルごと

エンコーダ

ソースの複雑さ

ループバック

独自の回線/ストリーム

アロケータ (Σ ≤ プール)

バッファ

ヌルパディング → CBR

キャップのCBRワイヤー

ディップの前に複雑なシーンを予測する

測定されたワイヤ - 校正

ターゲットビットレート

各チャネルはマルチプレクサ (個別のエンコーダ + ループバック接続) まで独自の回線で実行され、すべてが正確に固定されたビットレートで 1 つの MPTS マルチキャスト 回線にマージされます。

脳: フィードバック + C1 先読み

アロケータは、ソースの複雑さからの予測 (前方) と測定されたワイヤ (後方) の 2 つの信号を結合します。

C1 は、デコーダでのコンテンツの複雑さを測定します。これにより、パイプライン レイテンシによってエンコーダ出力がリードされます。

測定ワイヤ(フィードバック)

マルチプレクサ (送信側カウンター) によって発行される正確なストリームごとのビットにより、複雑さ→ビットレートのマッピングが調整され、合計がプールに正確に保持されます。

到達性

ストリームの主張は、エンコーダーが実際に生成するもの (× ピーク ヘッドルーム) によって裏付けられます。

均一化された品質

目標は、ビットレートを同等にすることではなく、品質を同等にすることです。継続的な圧力により、高品質チャネル (低 QP) から低品質チャネル (高 QP) にビットが移動します。

予測再配布

C1 がチャネルのドロップを通知すると、その帯域幅は同じティック内で他のチャネルに渡されます。ドロップが実際にワイヤに到達する前に帯域幅が増加します。

プール = キャップ N − オーバーヘッド (PSI/EIT) − オーディオ − リザーブ (スライダー)。

ストリームごとの需要 = 納品可能なワイヤ × C1 先読み (相対的な複雑さの変化) + 品質均一化のプレッシャー。

ビデオ プロファイルから [最小、最大] に固定された、要求に応じた比例的なプール割り当て。

エンコーダ ターゲット = 割り当て / キャリブレーション (ストリームごとの EMA 測定値/ターゲット);

バッファホールド サーボはキュー レベルを約 1 秒 (バンド) に保ち、過負荷時には緊急バックストップします。

CBR ワイヤ: バッファ + ヌル パディング + ペーシング

出力は、設定されたキャップでの正確な CBR ストリームです。

スタンディングバッファ ~1 秒

送信キューは、1 秒未満の GOP ディップ (I フレーム間) を吸収する、約 1 秒の待機レベルのワイヤを保持します。

ヌルパディング

コンテンツが上限を下回る場合、その差分は MPEG-TS ヌル パケット (PID 0x1FFF) で埋められます。

正確なペーシング

出力は正確な上限 (ビジースピン ABSTIME) に合わせて調整されます。

出力チャート(河川)

実際のワイヤーのライブ積み上げグラフ — 各バンドは 1 つのチャネルであり、右からスムーズに流れます。

カラーバンド

各チャンネルの色は安定しています。

キャップ/マックスライン

上部の破線 = 構成されたキャップ (ワイヤー天井)。

ヌルバンド

上部の白い点線の帯 = Null パディング (空き容量)。

ドロップマーク

タイムライン上の赤いマーク = 送信キューのオーバーフロー (ドロップ)。

範囲 (30秒~30メートル)

ボタンはタイム ウィンドウを即座に切り替えます (クライアント側)。アクティブなボタンの背景は灰色になります。

ツールチップ

ホバーすると、その時点のチャネルごとのビットレート、QP、および品質インデックス (ライブではなく過去の値) が表示されます。

上限%

現在のプール規制レベル (プール/(プール-トリム))。

リザーブ(スライダー)

上限を超える許容範囲 — ヌル リザーブとして保持する量。

バッファー(ドロップ)

ヘッダーには、send-queue util % と累積ドロップ数が表示されます。

共和党

マルチプレクサ内のすべてのチャネルに共通の GOP 長さ (開始時にビデオ プロファイルにロックされます)。

VBV

エンコーダの VBV バッファ サイズ (ミリ秒)。

ストリームカードと状態

マルチプレクサ内の各チャネルには、名前、PNR、現在のビットレートとターゲット ビットレート、および状態を含むカードがあります。

実行中 — チャネルはエンコード中であり、ワイヤーに流れています。

開始中 — エンコーダは回転中/安定中です。

オフ — チャネルはマルチプレクサ内にありますが、実行されていません (0 kbps)。

障害 — 入力が失われた/エンコーダがクラッシュしました。

PSI/SI テーブル (完全な DVB セット)

StatMux は、必須の MPEG-TS / DVB テーブルの完全なセットを NIF マルチプレクサ内に直接生成します。外部 SI インサータは必要ありません。

テーブル

PID

間隔

目的・出典

EIT ↔ EPG: 完全統合

EIT (イベント情報テーブル、PID 0x12) は静的ではなく、アプリケーションの EPG システムに完全に接続されています。

チャネルサイジング (最小/平均/最大)

min = 下層階 (静的シーン)。

avg = 目標レベル。

max = 天井 (ピーク/カットの VBR ヘッドルーム)。

例 (平均): SD 1.5 ~ 2.5M、HD 2.5 ~ 4M、FHD 4 ~ 6M、UHD 12 ~ 18M。

ブロードキャスト statmux との関係

私たちは実際の統計的多重化、つまり固定ワイヤを共有する 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 ~ 90 %、デフォルト 85)

低い値 (→ 78): NULL リザーブが多くなり、より安全になり、キャップの使用率が厳しくなくなります。

高い (→90): キャップの使用率が厳しくなり、NULL が少なくなります。

⚠ ≥88 %: スライダーが黄色に変わります — リング オーバーフローの凍結上限に近づきます。

非対称: 下げると確実にリザーブが追加されます。

エンコーダがターゲットとするキャップの量を制御します: エンコーダのターゲット = 予算 × ヘッドルーム% / 100 (グラフのオレンジ色の線)。

信号損失/チャネル障害 (絶縁)

1 つのチャネルに障害が発生 (エンコーダのクラッシュ / 信号損失) ⇒ マルチプレクサは動作し続け、他のチャネルは影響を受けず、ワイヤはキャップを保持し (NULL が停止を吸収します)、生存者では CC=0 になります。

PCR/タイミング

PCR および PES PTS/DTS はエンコーダからパススルーされます (単一クロック ドメイン ⇒ コヒーレント、ドリフトなし)。

CAT — 条件付きアクセス (スクランブル/ECM の場合のみ)。

EIT — イベント情報 (EPG) — EPG システムからの、以下を参照してください。

NIT — ネットワーク情報 (ネットワーク ID、名前、トランスポート ストリーム)。

PAT — プログラム リスト (PNR → PMT PID をマッピング)。

PMT — プログラムごと: ビデオ/オーディオ/PCR PID、コーデック、記述子。

SDT — サービス名とプロバイダー (STB がリストに表示するもの)。

TDT/TOT — 時刻と日付 + ローカル オフセット (STB クロック)。

TSDuck Plugins Used

merge
regulate
pat
pmt
sdt
nit
eitinject
timeref
bitrate_monitor
continuity
psimerge
count