×

⊳ Muxer

MPTS · TSDuck · PSI/SI

Справка по Mux

Мультиплексор (Mux) объединяет несколько транскодированных видеопотоков в один транспортный поток MPEG-TS для вещания.

Энкодер

Каждый поток транскодируется независимым GPU-энкодером (NVENC). Выходной битрейт управляется Statmux или настройками CBR.

Mux NIF

Низкоуровневый модуль на C (NIF) управляет мультиплексированием потоков, PCR-генерацией и нулевым заполнением до ёмкости.

UDP вывод

Мультиплексированный поток MPEG-TS отправляется на UDP multicast-адрес с постоянной скоростью (CBR на уровне Mux).

Бюджет пропускной способности

Суммарная пропускная способность всех потоков не должна превышать ёмкость Mux.

Средний битрейт: целевое значение для Statmux при распределении ресурсов.

Максимальный битрейт: верхний предел для CBR и Statmux.

Минимальный битрейт: гарантированная пропускная способность для каждого потока в Statmux.

Пример расчёта:

10 потоков × 3.5 Мбит/с средний = 35 Мбит/с. Ёмкость Mux = 38 Мбит/с. Запас: 3 Мбит/с для PSI/EIT.

Диагностика

Тревога: активируется при превышении ёмкости или других критических условиях.

Монитор битрейта: график текущего выходного битрейта vs. ёмкости.

Счётчик непрерывности: отслеживает разрывы MPEG-TS (должен быть 0 при нормальной работе).

Верификация PCR: проверяет точность PCR-меток (должна быть <500 мкс).

Возможные проблемы

Совпадение GOP: одновременные I-кадры от нескольких потоков → пиковый битрейт.

Потеря входа: поток пропадает → Mux заполняет слот нулями до восстановления.

Превышение подписки: сумма max-битрейтов > ёмкости → возможны разрывы.

Дрейф PCR: накапливающаяся ошибка временны́х меток → A/V рассинхронизация на приёмнике.

VBV underrun: энкодер не успевает заполнить буфер → задержка или артефакты.

Параметры

Конфигурация мультиплексора включает: ёмкость (кбит/с), выходной UDP multicast-адрес, режим Statmux, EIT/EPG-инжекцию и параметры SRT-вывода.

Рекомендация по битрейту

На основе истории битрейта потока система рекомендует оптимальные значения Min/Avg/Max для Statmux.

Цвет индикатора: зелёный = в пределах нормы, жёлтый = близко к пределу, красный = превышение.

Покрытие: процент времени, когда битрейт находился в пределах рекомендованного диапазона.

Формула: avg ± Z×σ, где Z зависит от требуемого уровня покрытия (90/95/99/99.7%).

Рекомендуемые значения

Рекомендованные значения BitRate рассчитываются на основе статистики (μ ± Z·σ) последних измерений для обеспечения заданного покрытия.

Statmux — статистическое мультиплексирование

Statmux динамически перераспределяет ёмкость Mux между потоками в зависимости от текущей сложности сцены, обеспечивая лучшее качество при том же общем битрейте.

Ёмкость

Ёмкость = Σ(min) + свободный пул для VBR

Выигрыш от Statmux

Statmux позволяет размещать больше каналов при той же полосе или улучшать качество при том же числе каналов.

CBR без Statmux: каждый поток занимает фиксированный битрейт независимо от содержимого.

CBR без Statmux: фиксированный BitRate × N потоков.

Statmux вкл.: динамическое перераспределение — тёмные сцены уступают ресурсы динамичным.

Взаимные ограничения

При включённом Statmux: B-кадры=0, GOP фиксирован, пользовательские URL входа заблокированы.

Конвейер

Источник → NVDEC → NVENC (VBR) → NIF Mux → UDP CBR

Расчёт размера

Ёмкость Mux должна быть не менее суммы минимальных битрейтов всех потоков плюс запас для накладных расходов.

Пример: 12 потоков × 1.5 Мбит/с min = 18 Мбит/с. Ёмкость = 20 Мбит/с.

Ёмкость ≥ Σ(min_bitrate) + headroom (5–10%)

Советы

Начните с avg = 2×min и max = 3×min как исходной точки.

Используйте рекомендации битрейта для оптимизации на основе реальных данных.

Мониторьте «свободную ёмкость» в KPI — она должна быть >5% для стабильной работы.

Высокая частота переключений уровней (>100/ч) говорит о нехватке ёмкости.

Процесс настройки

1. Задайте ёмкость Mux (целевой общий битрейт).

2. Добавьте потоки и задайте min/avg/max для каждого.

3. Включите Statmux и запустите Mux.

4. Отслеживайте KPI и корректируйте значения по рекомендациям.

Справка по Statmux

Statmux объединяет несколько VBR-потоков в один транспортный поток с фиксированной полосой, динамически распределяя ёмкость на основе сложности сцены.

Статистический мультиплексор

Поток данных

Architecture diagram

Вход

Энкодер

Контроллер

Цикл управления

На поток

Распределение

Буфер

NULL заполнение

CBR выход

Прямое управление

Обратная связь

Цель

Схема потока данных Statmux

Алгоритм управления

Контроллер Statmux работает как замкнутая система управления:

C1 измеряет сложность контента на декодере — с опережением на задержку конвейера. Относительное изменение сложности (корреляция r≈0.92 с битами) применяется к целевому битрейту в ОБОИХ направлениях ДО выхода энкодера: нарастающая сцена получает ресурс заранее (без провала), убывающая освобождает биты раньше для других.

Измеренный битрейт по линии (обратная связь)

Обратная связь

Устанавливает ограничения энкодеров перед следующим GOP.

3. Распределение

Распределяет бюджет пропорционально средним битрейтам.

2. Выравнивание

Предсказывает потребности в битрейте на основе GOP и истории.

1. Прогноз

1. Зарезервируйте min_bitrate для каждого потока.

2. Вычислите свободный пул: cap − Σ(min).

3. Распределите пул пропорционально avg−min для каждого потока.

4. Ограничьте выделение max_bitrate.

5. Пересчитывайте каждые GOP для адаптации к изменениям сцены.

Характеристики линии

Выход Mux — UDP CBR с постоянным битрейтом на multicast-адрес.

Пакеты ставятся в SPSC-очередь и отправляются выделенным потоком с приоритетом реального времени

Буфер отправки

При нехватке контента вставляются NULL-пакеты (PID 0x1FFF) для поддержания CBR

NULL заполнение

Пакеты отправляются с постоянным интервалом: 188×8 / bitrate

Темп

График Statmux

Временной график суммарного битрейта и распределения по потокам.

Каждая полоса — один поток, цвет отражает его долю

Полосы битрейта

Жёсткий верхний предел выходного битрейта Mux

Ёмкость

Заполнители для поддержания постоянного CBR-потока

Нулевое заполнение

Пакеты, отброшенные из-за превышения ёмкости

Пакеты сброшены

Выбор временного диапазона: 5 / 15 / 30 / 60 минут

Масштаб

Нажмите на легенду для скрытия/отображения отдельных потоков

Совет

Максимальный выходной битрейт Mux в кбит/с

Ёмкость

Зарезервированная ёмкость для PSI/EIT и прочих накладных расходов

Резерв

Защитная полоса под cap для предотвращения превышения

Буферный пояс

Размер группы изображений. Должен быть одинаковым для всех потоков Statmux.

GOP

Размер буфера VBV энкодера. Влияет на пиковый битрейт.

VBV буфер

Карточки потоков

Каждый поток в Statmux отображается карточкой с текущим состоянием и метриками.

OK — поток работает в норме

Запуск — поток инициализируется

Выкл — поток отключён

Ошибка — проблема с потоком

PSI таблицы

Mux генерирует и инжектирует стандартные MPEG-TS PSI-таблицы:

Таблица

PID

Интервал

Источник

EIT / EPG инжекция

Mux инжектирует EPG в транспортный поток как EIT-секции.

Расчёт ёмкости

1. Определите требования к качеству для каждого потока (min/avg/max битрейт).

2. Суммируйте минимальные битрейты: Σ(min) — гарантированная базовая ёмкость.

3. Добавьте запас 5–10% для PSI/EIT и пиков.

4. Сравните с физической пропускной способностью транспондера/линии.

Эталонный поток

Эталонный поток (опция) задаёт общий клок для всего Mux.

PCR генерируется из эталонного потока → минимальный дрейф PCR

Есть эталон

Mux генерирует PCR по системным часам → возможен небольшой дрейф

Нет эталона

Структура транспортного потока

Символ

Значение

Размер пакета TS

188 байт фиксировано

Заголовок

4 байта (sync 0x47, PID, CC, flags)

Полезная нагрузка

184 байта максимум

NULL пакет

PID 0x1FFF — заполнение до CBR

PCR пакет

Адаптационное поле с PCR-значением

Архитектура

Энк-1 → NIF ─┐

Энк-2 → NIF ─┤→ Mux (CBR) → UDP

Энк-N → NIF ─┘

VBR, GOP фиксирован, B=0

Мультиплексирование MPEG-TS, PCR, нулевое заполнение

UDP CBR на multicast-адрес

Строка 1: текущий/средний/максимальный битрейт

Строка 2: QP, GOP, количество B-кадров

Состояния

▲ Мбит/с
│  ████ cap
│  ░░░░ content
│  ░░░░ null
└──────────► t

Линия cap (красная) — ёмкость Mux

Линия target (оранжевая) — рабочая цель (95% cap)

Полоса content (синяя) — суммарный битрейт контента

Полоса null (серая) — нулевое заполнение

EIT Schedule: сетка программ на несколько дней (table_id 0x50+). Обновляется каждые 30 секунд.

Генерация

Инжекция

Present/Following (P/F)

Частота обновления

Schedule

Индикатор

Индикатор Mux показывает текущий выходной битрейт относительно ёмкости.

0%░░░░░▓▓▓▓▓▓▓▓▓▓░░100%

↑target ↑cap

Требования к оборудованию

До 5 потоков: 1× GPU (Tesla P4 или RTX 4000)

5–12 потоков: 2× GPU (смешанная конфигурация P4+RTX)

12–24 потока: 4× GPU

24+ потоков: 6× GPU, 10GbE сеть

Рекомендуемые конфигурации для Statmux:

ISO/DVB соответствие

Mux генерирует поток, соответствующий ISO 13818-1 (MPEG-TS) и DVB-стандартам. PCR-метки, PAT/PMT, SDT, EIT инжектируются согласно спецификациям.

PCR (Program Clock Reference)

PCR инжектируется каждые ~27 мс (по умолчанию) в соответствии с DVB-спецификацией. PCR-точность критична для A/V-синхронизации на приёмнике.

CAT

EIT

NIT

PAT

PMT

SDT

TDT