Skip to content

MPEGTS Reader

Обзор

MPEGTS Reader — это важнейший модуль Mcaster, который позволяет принимать транспортный поток MPEG как в SPTS (Single Program Transport Stream), так и в MPTS (Multiple Program Transport Stream) режимах. Модуль обеспечивает полную обработку транспортных потоков с автоматическим извлечением метаданных и контента.

Принцип работы

Полная обработка потока

При приеме поток полностью разбирается до кадров, распаковывается весь транспортный контейнер. Это принципиальное отличие от ремультиплексоров, которые оставляют MPEGTS и PES упаковку со всеми проблемами.

Автоматическое извлечение метаданных

Модуль автоматически извлекает и обрабатывает:

  • SDT (Service Description Table) — информация о каналах и провайдерах
  • EPG (Electronic Program Guide) — программа передач
  • PAT/PMT — таблицы программ
  • PES пакеты — элементарные потоки

Демультиплексирование

Для MPTS потоков модуль выполняет:

  • Автоматическое определение программ в потоке
  • Извлечение выбранных программ по номеру
  • Фильтрацию PID'ов для оптимизации обработки
  • Сохранение синхронизации между потоками

Конфигурация

Базовый SPTS поток

Самый простой пример настройки для приема SPTS:

stream s {
  input udp://239.0.0.1:1234;
}

MPTS поток с демультиплексированием

Для приема MPTS нужно отдельно заказывать демультиплексирование:

stream s {
  input mpts-udp://239.0.0.1:1234?programs=1050;
}

Важно: При использовании протокола mpts-udp нужная мультикаст группа будет принята на сервер только один раз, независимо от количества стримов, использующих эту группу. Это обеспечивает эффективное использование сетевых ресурсов и предотвращает дублирование трафика.

Расширенная конфигурация

stream main_channel {
  input mpts-udp://239.0.0.1:1234?programs=1050,1051 pids=100,101,102;  
}

Параметры конфигурации

Параметр Описание Обязательный Пример
udp:// Протокол UDP Да udp://239.0.0.1:1234
mpts-udp:// MPTS протокол Да mpts-udp://239.0.0.1:1234
programs Номера программ Нет programs=1050,1051
pids Фильтр PID'ов Нет pids=100,101,102

Автоматическое извлечение метаданных

SDT (Service Description Table)

Если во входящем потоке будет SDT, то из него автоматически заберется:

  • Название канала — отображаемое имя программы
  • Название провайдера — информация о вещательной компании
  • Тип сервиса — тип контента (ТВ, радио, данные)
  • Страна и язык — региональная информация

EPG (Electronic Program Guide)

Если в потоке есть EPG, он автоматически:

  • Распарсится — извлечение структурированных данных
  • Будет доступен для дальнейшей упаковки на выходе
  • Предоставится для чтения через JSON API
  • Сохранется в кэше для быстрого доступа

Фильтрация и оптимизация

Фильтрация PID'ов

Опция pids позволяет отфильтровать входящие PID'ы:

# Исключение ненужных аудиодорожек
stream filtered {
  input mpts-udp://239.0.0.1:1234?programs=1050 pids=100,101,102;
}

# Исключение телетекста
stream no_teletext {
  input mpts-udp://239.0.0.1:1234?programs=1050 pids=100,101,102,103;
}

Преимущества фильтрации

  • Снижение нагрузки на процессор
  • Экономия памяти — обработка только нужных потоков
  • Улучшение качества — исключение проблемных PID'ов
  • Оптимизация сети — передача только необходимого контента

Автоматизация

Минимальная настройка

Количество различных настроек максимально снижено, чтобы снять проблемы с администратора. Вся функциональность включается автоматически:

  • Автоопределение типа потока (SPTS/MPTS)
  • Автоизвлечение метаданных
  • Автопарсинг EPG данных
  • Автооптимизация обработки

Умная обработка

Модуль автоматически:

  • Определяет структуру входящего потока
  • Выбирает оптимальные параметры обработки
  • Адаптируется к изменениям в потоке
  • Восстанавливается после ошибок

API и интерфейсы

Мониторинг и диагностика

Ключевые метрики

{
  "stats": {
    "input": {
      "pids": [
        {
          "pid": 1040,
          "pnr": 27,
          "packets": 125000,
          "frames": 5026,
          "empty_packets": 20,
          "errors_ts_scrambled": 70,
          "errors_ts_pmt": 10,
          "errors_ts_cc": 250,
          "dts_goes_backwards": 23
        }
      ]
    }
  }
}

Диагностические параметры

Основные параметры потока

  • packets_received — количество полученных пакетов
  • packets_lost — потерянные пакеты
  • programs_detected — обнаруженные программы
  • sdt_found — наличие SDT таблицы
  • epg_found — наличие EPG данных

Детальные параметры PID (stats.input.pids[0])

Базовые метрики:

  • pid — идентификатор потока
  • pnr — номер программы
  • packets — количество пакетов
  • frames — количество кадров
  • empty_packets — пакеты без полезной нагрузки и поля адаптации

Ошибки транспортного потока:

  • errors_adaptation_broken — пакеты с полем адаптации больше размера пакета
  • errors_ts_scrambled — количество зашифрованных TS пакетов
  • errors_ts_pmt — сколько раз PMT не был получен после 0,5 секунд
  • errors_ts_cc — сколько MPEG-TS пакетов было получено с несмежными счетчиками непрерывности
  • errors_ts_tei — сколько MPEG-TS пакетов с индикатором транспортной ошибки было получено
  • errors_ts_psi_checksum — сколько раз был получен PSI элемент с поврежденной контрольной суммой
  • errors_pid_lost — сколько раз PID был потерян

Ошибки PES пакетов:

  • broken_pes_count — сколько PES пакетов начались не с стартового кода
  • broken_pes_sum — сколько байт было отброшено из-за отсутствия PES стартового кода

Временные корректировки:

  • time_corrections — скачки временных меток внутри MPEG-TS потока
  • repeated_frames — в случае ошибки CC последний кадр может быть повторен. Это счетчик повторенных кадров
  • corrected_backward_pts — сколько раз PTS был меньше PCR или предыдущего PTS
  • pcr_resync — если PTS дрейфует от PCR, он может быть ресинхронизирован с PCR. Это счетчик ресинхронизаций
  • dts_goes_backwards — время на этом PID прыгнуло назад от эталонного PTS и это не было переполнением нуля
  • dts_jump_forward — время на этом PID прыгнуло вперед слишком далеко от эталонного PTS
  • too_large_dts_jump — скачок PTS был настолько большим от предыдущего, что пришлось сбросить все кадры и перезапустить парсинг

Буферизация и отбрасывание:

  • discarded_buffer_count — сколько раз был отброшен слишком большой ES буфер без создания из него кадра
  • discarded_buffer_sum — сколько байт было потеряно из-за отбрасывания ES буфера

Служебные данные:

  • fillers_count — сколько H264(5) NAL заполнителей было обнаружено во входном потоке
  • fillers_sum — сколько байт было в NAL заполнителях
  • padding_pes_count — сколько PES пакетов было на Padding streamId
  • padding_pes_sum — сколько байт было в PES пакетах на Padding streamId

Критические ошибки:

  • crashed — необработанные сбои внутри процесса декодирования mpegts

Примеры использования

Простой SPTS прием

stream news_channel {
  input udp://239.0.0.1:1234;
}

MPTS с выбором программ

stream main_program {
  input mpts-udp://239.0.0.1:1234?programs=1050;
}

stream secondary_program {
  input mpts-udp://239.0.0.1:1234?programs=1051;
}

Фильтрация аудио

stream russian_audio {
  input mpts-udp://239.0.0.1:1234?programs=1050&pids=100,101;
}

Интеграция с транскодером

stream transcoded {
  input mpts-udp://239.0.0.1:1234?programs=1050;

  transcoder {
    video {
      codec h264;
      bitrate 5000k;
    }
    audio {
      codec aac;
      bitrate 128k;
    }
  }  
}

Устранение неполадок

Частые проблемы

Поток не принимается

  1. Проверьте сетевые настройки — доступность multicast адреса
  2. Убедитесь в правильности номера программы для MPTS
  3. Проверьте формат входящего потока
  4. Мониторьте логи модуля

Отсутствуют метаданные

  1. Проверьте наличие SDT в входящем потоке
  2. Убедитесь в корректности EPG данных
  3. Проверьте настройки фильтрации PID'ов
  4. Дождитесь обновления метаданных

Проблемы с демультиплексированием

  1. Проверьте номер программы в MPTS
  2. Убедитесь в стабильности входящего потока
  3. Проверьте синхронизацию между потоками
  4. Мониторьте статистику обработки

Диагностические команды

# Мониторинг сетевого трафика
tcpdump -i any -n host 239.0.0.1

# Проверка метрик потока
curl -sS "http://localhost:8080/streamer/api/v3/streams/stream_name"

Рекомендации по настройке

Оптимизация производительности

  • Используйте фильтрацию PID'ов для снижения нагрузки
  • Настройте размер буфера под ваши потоки
  • Мониторьте статистику обработки
  • Планируйте резервирование для критичных потоков

Качество приема

  • Проверьте стабильность сетевого соединения
  • Используйте качественные сетевые кабели
  • Мониторьте потери пакетов в реальном времени
  • Настройте таймауты под вашу сеть

Работа с метаданными

  • Регулярно проверяйте актуальность SDT
  • Мониторьте обновления EPG данных
  • Используйте кэширование для быстрого доступа
  • Планируйте обработку ошибок метаданных

Заключение

MPEGTS Reader представляет собой мощный и гибкий модуль для приема и обработки MPEG транспортных потоков. Автоматическое извлечение метаданных, умная фильтрация и минимальная настройка делают его идеальным решением для профессионального вещания. Поддержка как SPTS, так и MPTS режимов обеспечивает универсальность применения в различных сценариях вещания.