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


Мультиплексор (Mux) объединяет несколько транскодированных видеопотоков в один транспортный поток MPEG-TS для вещания.
Каждый поток транскодируется независимым GPU-энкодером (NVENC). Выходной битрейт управляется Statmux или настройками CBR.
Низкоуровневый модуль на C (NIF) управляет мультиплексированием потоков, PCR-генерацией и нулевым заполнением до ёмкости.
Мультиплексированный поток 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 динамически перераспределяет ёмкость Mux между потоками в зависимости от текущей сложности сцены, обеспечивая лучшее качество при том же общем битрейте.
Ёмкость = Σ(min) + свободный пул для VBR
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 объединяет несколько VBR-потоков в один транспортный поток с фиксированной полосой, динамически распределяя ёмкость на основе сложности сцены.
Статистический мультиплексор
Вход
Энкодер
Контроллер
Цикл управления
На поток
Распределение
Буфер
NULL заполнение
CBR выход
Прямое управление
Обратная связь
Цель
Схема потока данных Statmux
Контроллер Statmux работает как замкнутая система управления:
C1 измеряет сложность контента на декодере — с опережением на задержку конвейера. Относительное изменение сложности (корреляция r≈0.92 с битами) применяется к целевому битрейту в ОБОИХ направлениях ДО выхода энкодера: нарастающая сцена получает ресурс заранее (без провала), убывающая освобождает биты раньше для других.
Обратная связь
3. Распределение
2. Выравнивание
1. Прогноз
1. Зарезервируйте min_bitrate для каждого потока.
2. Вычислите свободный пул: cap − Σ(min).
3. Распределите пул пропорционально avg−min для каждого потока.
4. Ограничьте выделение max_bitrate.
5. Пересчитывайте каждые GOP для адаптации к изменениям сцены.
Выход Mux — UDP CBR с постоянным битрейтом на multicast-адрес.
Буфер отправки
NULL заполнение
Темп
Временной график суммарного битрейта и распределения по потокам.
Полосы битрейта
Ёмкость
Нулевое заполнение
Пакеты сброшены
Масштаб
Совет
Ёмкость
Резерв
Буферный пояс
GOP
VBV буфер
Каждый поток в Statmux отображается карточкой с текущим состоянием и метриками.
OK — поток работает в норме
Запуск — поток инициализируется
Выкл — поток отключён
Ошибка — проблема с потоком
Mux генерирует и инжектирует стандартные MPEG-TS PSI-таблицы:
Таблица
PID
Интервал
Источник
Mux инжектирует EPG в транспортный поток как EIT-секции.
1. Определите требования к качеству для каждого потока (min/avg/max битрейт).
2. Суммируйте минимальные битрейты: Σ(min) — гарантированная базовая ёмкость.
3. Добавьте запас 5–10% для PSI/EIT и пиков.
4. Сравните с физической пропускной способностью транспондера/линии.
Эталонный поток (опция) задаёт общий клок для всего Mux.
Есть эталон
Нет эталона
Символ
Значение
Размер пакета 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 (серая) — нулевое заполнение
Генерация
Инжекция
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:
Mux генерирует поток, соответствующий ISO 13818-1 (MPEG-TS) и DVB-стандартам. PCR-метки, PAT/PMT, SDT, EIT инжектируются согласно спецификациям.
PCR инжектируется каждые ~27 мс (по умолчанию) в соответствии с DVB-спецификацией. PCR-точность критична для A/V-синхронизации на приёмнике.
CAT
EIT
NIT
PAT
PMT
SDT
TDT