Приём мультикаста и 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 перезапускает источник. Смена одного лишь таймаута применяется на лету, без разрыва приёма.
Что дальше¶
- Зарезервировать вход — второй источник и правила переключения.
- Ошибки входа — что означают счётчики, когда сигнал сыплет.
- Отдать сигнал обратно в сеть.