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 merge tsp -I ip <stream>(실제 패킷 오버레이) → -P 연속성(경보 삭제) → -P pcradjust --bitrate X(PCR 다시 쓰기) → -P pcrverify --jitter-max 500μs → -P bitrate_monitor(속도 경보 ±5%) → -P Regulator --bitrate X --packet-burst 32 →
규제 플러그인은 회선에서 mux.bitrate bps를 정확하게 방출합니다.
Mux 상단 표시줄에는 색상 상태와 함께 3개의 합계가 표시됩니다.
Σ avg ≤ 85% mux.bitrate — 모든 채널과 오디오의 평균 목표 합계입니다.
Σ max ≤ 160% mux.bitrate — 최고 한도 합계.
Σ min ≤ 50% mux.bitrate — 인코더 최저 합계.
PSI/SI/EIT 이후 사용 가능한 예산: ~18.5Mbps.
60초 내에 10개 이상의 알람이 발생하면 Mux UI에 비트 전송률 감소를 권장하는 플래시 알림이 나타납니다.
-P bitrate_monitor --주기적 60 --최소/최대 ±5% — 실제 속도가 목표의 ±5%를 벗어나면 경고합니다.
-P 연속성 — TS 연속성 카운터를 추적합니다.
-P pcrverify --jitter-max 500000 — DVB는 PCR 지터 ≤ 500μs를 허용합니다.
GOP 일치 - 모든 인코더는 I-프레임을 동시에 방출하며 최대 일치입니다.
입력 신호 손실 - 단일 채널이 검게 변하고 mux가 계속됩니다(-I null base 덕분에).
초과 구독(지속된 피크 > 용량) — 블록/오디오 끊김 ~50-200ms.
PCR 드리프트 - STB가 몇 초마다 끊김 현상이 발생합니다.
STB VBV 언더런 - STB가 동기화를 잃고 다시 획득합니다(~2-3초).
--max-input-packets 4096 / --max-flush-packets 4096(내부 FIFO 0.3초 @ 19Mbps).
상단 표시줄 배지 '📐 rec X.XM'은 중심 극한 정리에서 파생된 권장 먹스 용량을 보여줍니다.
배지 색상: 🟢 녹색 = 한도 ≥ 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 = Statmux가 ON인 경우 0.7, 그렇지 않은 경우 1.0)
1080p25 HD 채널: 평균 = 4000-5000kbps, 최소 = 평균 × 0.75(~3000-3750), 최대 = 평균 × 1.5(~6000-7500).
Adaptive Hybrid Statmux는 사용되지 않는 용량을 코어 스트림(보호, 전체 VBR)에서 균형 잡힌 스트림(희생)으로 전환하는 런타임 메커니즘입니다.
다중화기 용량 38Mbps
적응형 하이브리드 Statmux가 없으면 최악의 경우 Σmax에 맞게 mux의 크기를 조정해야 합니다.
순수 CBR(인코더 고정)
Statmux가 없는 VBR
적응형 하이브리드 Statmux ON
사용자 정의 URL 입력 재정의와 Statmux는 상호 배타적입니다.
┌─────────────────────────┐
통계적 이득은 인코더의 VBR 범위가 넓은 경우에만 발생합니다. 최대 ≒ 평균인 경우 인코더는 사실상 CBR이고 라우터는 재분배할 항목이 없습니다.
실제 예 — 38Mbps 멀티플렉서, 10개 HD 코어 + 2개 밸런스드:
코어 스트림당 권장 범위:
최소 1개의 균형 잡힌 스트림 - 하나가 없으면 Adaptive Hybrid 라우터는 피크 동안 스쿼시할 것이 없으므로 이득 = 0
음악 및 정보 채널이 최고의 후보입니다. 요금 하락에 대한 90% 이상의 허용 오차
`[balance-router]` 로그 항목을 통해 추적 — `core_max`, `remaining`, 각 1초 틱에 대한 계층 전환 표시
`core_max > 용량`(로그의 CORE OVERPEAK 경고)인 경우 코어 스트림 수를 줄이거나 인코더 최대 속도를 낮추세요.
멀티플렉서에 스트림 추가(채널 할당은 수동으로 유지됨)
Mux 헤더(노란색 칩)에서 Statmux를 전환합니다.
오른쪽 주황색 확인란을 통해 희생적 스트림을 표시합니다. 일반적으로 요금 할인이 보이지 않는 음악/정보 채널입니다.
완료.
여러 가변 비트 전송률 채널이 하나의 MPTS(고정 전송 스트림)를 공유합니다.
클래스: VBR 인코더에 대한 C1 미리보기(피드포워드) 기능을 갖춘 폐쇄 루프 피드백 statmux - 소스 복잡성에 따라 구동되는 브로드캐스트 statmux 원리.
UDP 멀티캐스트 SSM, 채널당
인코더
소스 복잡성
루프백
자체 라인/스트림
할당자(Σ ≤ 풀)
완충기
널 패딩 → CBR
캡의 CBR 와이어
딥 전에 복잡한 장면을 예상하십시오
측정된 와이어 - 교정
목표 비트레이트
각 채널은 mux(별도의 인코더 + 루프백 연결)까지 자체 라인에서 실행되며, 여기서 모두 정확히 고정된 비트 전송률로 하나의 MPTS 멀티캐스트 라인으로 병합됩니다.
할당자는 소스 복잡성(순방향)과 측정된 와이어(역방향)의 예측이라는 두 가지 신호를 결합합니다.
C1은 디코더의 콘텐츠 복잡성을 측정하여 파이프라인 지연 시간에 따라 인코더 출력을 유도합니다.
멀티플렉서(송신자 측 카운터)에서 방출된 정확한 스트림별 비트는 복잡성→비트 전송률 매핑을 보정하고 합계를 풀에 정확하게 유지합니다.
스트림의 주장은 인코더가 실제로 생성하는 것(× 피크 헤드룸)에 의해 뒷받침됩니다.
목표는 동일한 비트 전송률이 아니라 동일한 품질입니다. 지속적인 압력을 가하면 비트가 고품질 채널(낮은 QP)에서 낮은 품질(높은 QP) 채널로 이동합니다.
C1이 채널 감소 신호를 보내면 해당 대역폭은 동일한 틱의 다른 채널에 전달됩니다. 즉, 드롭이 실제로 와이어에 도달하기 전에 증가합니다.
풀 = 캡 N - 오버헤드(PSI/EIT) - 오디오 - 예약(슬라이더).
스트림당 수요 = 전달 가능한 와이어 × C1 미리보기(상대적 복잡성 변화) + 품질 균등화 압력.
비디오 프로필에서 [최소, 최대]로 고정된 수요별 비례 풀 할당.
인코더 목표 = 할당/보정(스트림별 EMA 측정/목표);
버퍼 홀드 서보는 대기열 레벨을 ~1초(대역)로 유지하고 과부하 시 비상 백스톱을 수행합니다.
출력은 구성된 한도의 정확한 CBR 스트림입니다.
전송 큐는 1초 미만의 GOP 딥(I-프레임 간)을 흡수하는 ~1초의 와이어 레벨을 보유합니다.
콘텐츠가 한도 미만인 경우 그 차이는 MPEG-TS 널 패킷(PID 0x1FFF)으로 채워집니다.
송신은 정확한 한도까지 진행됩니다(busy-spin ABSTIME).
실제 와이어의 라이브 스택 그래프 - 각 밴드는 오른쪽에서 부드럽게 흐르는 하나의 채널입니다.
각 채널은 안정적인 색상을 갖습니다.
상단의 점선 = 구성된 캡(와이어 천장).
상단의 흰색 점선 밴드 = null 패딩(여유 용량).
타임라인의 빨간색 표시 = 보내기 대기열 오버플로(삭제).
버튼은 시간 창을 즉시 전환하며(클라이언트 측) 활성 창은 회색 배경을 갖습니다.
Hover는 해당 순간의 채널별 비트레이트, QP 및 품질 지수를 표시합니다(라이브가 아닌 과거 값).
현재 풀 규제 수준(풀/(풀-트림)).
한도 위의 공차 범위 — 널 예비금으로 유지할 양입니다.
헤더에는 send-queue util % 및 누적 삭제가 표시됩니다.
다중화기의 모든 채널에 대한 공통 GOP 길이(시작 시 비디오 프로필에 고정됨)
인코더 VBV 버퍼 크기(ms)입니다.
Mux의 각 채널에는 이름, PNR, 현재 및 목표 비트 전송률, 상태가 포함된 카드가 있습니다.
실행 중 — 채널이 인코딩되어 와이어로 흐르고 있습니다.
시작 중 - 인코더가 회전 중/안정 중입니다.
꺼짐 — 채널이 멀티플렉서에 있지만 실행 중이 아닙니다(0kbps).
오류 - 입력 손실/인코더 충돌.
StatMux는 외부 SI 삽입기 없이 NIF mux에서 직접 필수 MPEG-TS/DVB 테이블의 전체 세트를 생성합니다.
테이블
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초 버퍼 · 스트림당 비례 할당 · C1 미리보기 피드포워드 · 품질 균등화 · 예측 재배포 · 널 패딩 · 정확한 페이싱.
브로드캐스트 statmux는 인코더의 속도 왜곡 추정(정확한 프레임 비용, 인코더는 할당자의 슬레이브임)을 사용합니다.
징후
원인/수정
차트의 간격/널 스파이크(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패스 드레인(오디오 우선 순위, 비디오 전체), 비례 할당자, 와이어 캡(CBR)에 대한 NULL 패드, 인코더의 PCR 패스스루.
1개의 MPTS(NIF에서 생성된 PAT/PMT/SDT) → 출력 VLAN의 UDP 멀티캐스트.
행 1: ⚠(검증 문제) · PNR · 프레임의 이름(색상 = 주).
행 2+: 최소·평균·최대 kbps · 예상 복잡성 Δ 낮음/중간/높음/피크 · INPUT LOST · ⚙URL · 인코더 Mbps · SID · service_type.
이름 색상 = 스트림 상태:
Mbps
빨간색 '캡' 라인: 와이어 CBR 천장(mux.bitrate) - 여기까지 NULL이 채워집니다.
주황색 '헤드룸 N%' 라인: = cap × 헤드룸 슬라이더 / 100. 인코더 set_bitrate 목표는 여기를 목표로 합니다.
콘텐츠와 캡 사이에 검은 점이 있는 회색 영역 = NULL 패딩(사용되지 않은 예약)
채널의 색상 밴드를 클릭하면 → 아래에서 해당 채널의 카드가 자동으로 확장됩니다.
MuxEitAdapter는 서비스별로 EPG 시스템에서 이벤트를 읽고 DVB EIT 섹션(이름, 시간, 기간, 설명, 장르)을 구축하고 이를 PID 0x12로 패킷화합니다.
EIT는 NIF mux에 직접적으로 널 공간(1 패킷/N 출력 + p/f 주기적)으로 균일하게 주입되어 버스티 외부 tsp 캐스케이드를 대체합니다.
테이블 0x4E — 현재 실행 중인 + 다음 이벤트.
Mux는 EPG에서 EIT .bin을 주기적으로 재생성합니다(~15초). EPG 일정 변경 사항은 다시 시작하지 않고도 회선에 도달합니다.
테이블 0x50/0x51 — 앞으로의 전체 일정 시간/일(세그먼트).
실제 유량과 캡의 지표입니다.
-5Mbps CAP 37000kbps +5Mbps
낮음(→78): 더 많은 NULL 예비, 더 안전하고 덜 엄격한 한도 활용.
높음(→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 클럭).