Skip to content

Приём мультикаста и MPTS

Транспортный поток по UDP — основной вход головной станции. Сигнал приходит либо отдельным сервисом на группу (SPTS), либо мультиплексом, в котором нужная программа — одна из десятка (MPTS). Mcaster принимает оба случая, и во втором принимает ствол один раз на все программы, сколько бы стримов вы из него ни собрали.

Подключите группу

Создайте стрим и на вкладке Источники нажмите + Добавить источник. Протокол — UDP MPEGTS:

  • Хост — адрес мультикаст-группы, например 239.255.1.77, либо 0.0.0.0 для юникаста на порт;
  • Порт — порт группы;
  • Таймаут пира (мс) — сколько молчания терпеть до перезапуска приёма; пустое поле означает умолчание.

Нажмите Сохранить. Если в поле Хост стоит мультикаст-группа, станция сама подписывается на неё (IGMP для IPv4, MLD для IPv6). Юникаст отличается только адресом: 0.0.0.0 означает «слушать порт на всех интерфейсах».

Программа из MPTS-ствола

Мультиплекс со спутника или от партнёра несёт несколько сервисов в одной группе. Нужный выбирается полем Программа (PNR) в том же источнике: заведите по стриму на сервис, у всех одинаковые группа и порт и разные номера программ.

Пустое поле означает «первая с контентом» — так и подписано в форме.

Что здесь важно на практике:

  • Ствол принимается один раз. Два стрима на одной группе и порту делят сокет и демультиплексор: сеть видит одну подписку, машина — один разбор транспорта. Десять программ из одного ствола не стоят десяти приёмов.
  • Номер не указан — берётся первая программа, по которой реально идёт медиа. Не первая по PSI: таблицы в стволах бывают устаревшими и объявляют сервисы, чьи PID давно вырезаны.
  • Неразбираемый номер отвергается формой, а не понимается как «весь ствол»: иначе в стриме оказалась бы каша из всех программ мультиплекса.
  • Счётчики считаются на каждого подписчика отдельно, а общие ошибки ствола дублируются всем: по стриму видно и его собственные PID, и беду, случившуюся с транспортом целиком.

Приём от конкретного отправителя (SSM)

Когда в группу вещают несколько источников, а принимать нужно одного, задайте его адрес в поле Источник (SSM).

Ядро подписывается на группу с указанием отправителя (IP_ADD_SOURCE_MEMBERSHIP, IGMPv3) и чужой трафик отбрасывает до того, как он дойдёт до станции. Поддерживается для IPv4.

Приём по HTTP

Тот же транспортный поток, отданный по HTTP, — типичный способ забрать сигнал у партнёра, когда мультикаст между вами не ходит. Протокол источника — HTTP MPEGTS, заполняется URL и, при необходимости, Таймаут пира (мс).

Поддерживается chunked-передача. Обрыв соединения и молчание живого соединения различаются и видны в статусе входа по-разному — это два разных диагноза: «нас отключили» и «нам перестали слать».

У HTTP-входа по умолчанию включён входной буфер выравнивания (30 секунд): такой источник почти всегда приходит рывками, и без буфера рывки уезжали бы на выход.

Что разбирается из потока

Видео H264, HEVC, MPEG-2; аудио AAC, AC3, EAC3, MPEG-2 audio; DVB-телетекст и DVB-субтитры с их дескрипторами, кэпшны CEA-608/708, KLV-метаданные, маркеры SCTE-35, языковые дескрипторы дорожек из PMT.

Маркеры SCTE-35 принимаются и переживают транзит до выхода. Обработки — замены, компенсации, вставки — в Mcaster пока нет.

Что должно быть верно в сети

  • Мультикаст не ходит через интернет. Станция должна стоять в том же сегменте, что источник группы, либо сеть между ними обязана маршрутизировать мультикаст.
  • Подписку делает станция. IGMP-запрос уходит с неё, и коммутаторы с IGMP snooping доставляют поток только подписчикам. Настраивать для этого на станции нечего — важно, чтобы сеть подписку пропускала.
  • Проверять надо с машины станции. tcpdump -i <iface> host 239.255.1.77 на ней отвечает на вопрос «пакеты долетают», и никакая проверка с соседней машины его не заменяет.

Применение изменений

Смена группы, порта, номера программы или URL перезапускает источник. Смена одного лишь таймаута применяется на лету, без разрыва приёма.

Что дальше