MPEG Transport Stream — стандарт, которому уже почти 30 лет, но он до сих пор остаётся основой DVB-вещания и IPTV, да и в OTT встречается нередко. Давайте разберёмся, зачем он вообще нужен, какие параметры важно контролировать, и как выглядят типичные сценарии работы с TS на практике.
Что такое MPEG-TS и зачем нужно мультиплексирование
Когда вы смотрите телепередачу, вам кажется, что по сети идёт просто видео. На самом деле это целый набор данных:
- видео
- аудио (одна или несколько дорожек)
- субтитры
- телетекст
- служебные данные для синхронизации
- метки для рекламных вставок (SCTE-35), которые используются сплайсерами для подмены контента
Всё это нужно упаковать так, чтобы звук не отставал от картинки, субтитры появлялись вовремя, а приёмник понимал, что с чем связано. Именно эту задачу и решает стандарт MPEG Transport Stream — он описывает формат медиаконтейнера, в который укладываются все эти элементарные потоки.
Процесс мультиплексирования непрост: он требует высокой точности и учёта множества параметров. Особенно это актуально для вещания в реальном времени, когда поток поступает на вход, обрабатывается и тут же уходит дальше.
Как оценить качество: стандарт ETSI TR 101 290
Чтобы понять, насколько корректно работает мультиплексор, существует специальный стандарт ETSI TR 101 290. Он описывает параметры, которые необходимо контролировать, и классифицирует ошибки по приоритетам.
Самые критичные — ошибки первого приоритета. Вот два показательных примера:
- Continuity_count error — нарушен счётчик непрерывности TS-пакетов. Это означает, что в процессе передачи был потерян один или несколько пакетов. На экране это может выглядеть как «рассыпавшееся» изображение или артефакты.
- PID error — элементарный поток, заявленный в таблице PMT, пропал. Например, субтитры были обозначены в PMT, но данные по ним не передаются. Приёмник ожидает поток, а его нет.
Важно понимать: степень влияния этих ошибок на конечный результат сильно зависит от того, что происходит с потоком дальше. DVB-вещание через модулятор — самый требовательный сценарий. Нарезка на чанки для HLS — намного мягче.
DVB: самый требовательный случай
Если выходной поток отправляется на DVB-модулятор, требования к качеству мультиплексирования максимальные.
Модуляторы чувствительны к:
- точности PCR (Program Clock Reference),
- интервалу повторения PCR,
- стабильности CBR,
- IAT (Inter-Arrival Time) — интервалы между пакетами,
- наличию и корректности всех служебных таблиц.
Неправильная расстановка PCR может привести к проблемам синхронизации уже на уровне приема.
Для сравнения: если поток дальше нарезается на HLS-сегменты для OTT, точность PCR практически не играет роли. Поэтому требования к мультиплексированию сильно зависят от конечного сценария использования.
Типичные сценарии работы с мультиплексором
Рассмотрим несколько наиболее распространенных задач, с которыми сталкиваются операторы и интеграторы.
1. Транскодирование SPTS
Пожалуй, самый распространённый случай. Что происходит:
- На вход поступает SPTS (например, UDP multicast).
- Поток разбирается на элементарные составляющие: видео, аудио, телетекст, SCTE‑35.
- Видео и аудио транскодируются (например, MPEG‑2 → AVC, MPEG → AAC). Телетекст и SCTE-35 метки отправляются на выход как есть, без преобразований, также можно просто их исключить и не передавать на выход.
- Потоки снова собираются мультиплексором.
- Результат отправляется в сеть. Для отправки можно использовать и другой протокол, например, RTP, SRT или RIST.
2. Рестриминг SRT→UDP с ремультиплексированием
Нередко нужно принять поток по SRT и раздать его дальше через UDP multicast. Теоретически можно просто «пробросить» поток без изменений. Но на практике часто возникают проблемы:
- ошибки PCR,
- нестабильные интервалы,
- предупреждения анализаторов.
В таких случаях помогает ремультиплексирование:
- корректировка PCR,
- добавление паддинга,
- выравнивание битрейта.
Это позволяет привести поток к более «аккуратному» состоянию перед дальнейшей передачей.
3. Разбор MPTS на SPTS (демукс)
Обратная задача: на входе один многопрограммный поток (MPTS) с несколькими каналами, на выходе — отдельные однопрограммные потоки (SPTS), каждый со своим каналом. Например, принять один UDP multicast с 10 программами и раздать их как 10 отдельных потоков.
4. Статистическое мультиплексирование
Это относительно новая функция, на которую в последнее время приходит всё больше запросов.
Представьте: у вас есть полоса 50 Мбит/с и 10 каналов. Если просто поделить полосу поровну, каждый получит по 5 Мбит/с (CBR). Но это неэффективно: канал с новостями, где картинка почти не меняется, «съест» столько же, сколько канал с динамичным экшеном.
Statmux решает эту проблему: битрейт перераспределяется между каналами динамически, в зависимости от сложности сцены. Каждый энкодер оценивает сложность текущего контента и передаёт эти данные центральному анализатору. Тот собирает информацию от всех энкодеров и отправляет каждому рекомендацию по битрейту — исходя из общей полосы и текущей нагрузки.
Результат: те же 10 каналов в той же полосе, но заметно лучшего качества.
Мультиплексирование — это фундамент, на котором строится всё остальное в телевизионном вещании. Разобравшись с ним, гораздо проще говорить о следующих шагах: скремблировании, статистическом мультиплексировании и выборе правильного железа. Об этом — в следующих материалах.