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;
}
}
}
Устранение неполадок¶
Частые проблемы¶
Поток не принимается¶
- Проверьте сетевые настройки — доступность multicast адреса
- Убедитесь в правильности номера программы для MPTS
- Проверьте формат входящего потока
- Мониторьте логи модуля
Отсутствуют метаданные¶
- Проверьте наличие SDT в входящем потоке
- Убедитесь в корректности EPG данных
- Проверьте настройки фильтрации PID'ов
- Дождитесь обновления метаданных
Проблемы с демультиплексированием¶
- Проверьте номер программы в MPTS
- Убедитесь в стабильности входящего потока
- Проверьте синхронизацию между потоками
- Мониторьте статистику обработки
Диагностические команды¶
# Мониторинг сетевого трафика
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 режимов обеспечивает универсальность применения в различных сценариях вещания.