Skip to content

SRT-публикация

Приём по SRT устроен так: вы заранее говорите станции, куда звонить за сигналом, и она дозванивается до отправителя сама. Публикация переворачивает эту схему — корреспондент с OBS или мобильным энкодером сам дозванивается до кластера по одному адресу и одному порту, не зная и не выбирая, из каких машин кластер состоит. Дверь открыта на всех нодах сразу, а поток принимает та из них, которой кластер отдал захват стрима.

Так подключают внешних авторов: репортёра с телефоном, студию партнёра, камеру на событии. Им отдают одну строку подключения — всё остальное кластер решает сам.

Как кластер принимает звонок

  • Выделенный UDP-порт стрима слушают все ноды кластера — на какую ни позвони, дверь одна и та же.
  • Дозвонившийся проходит проверку passphrase прямо на рукопожатии.
  • Поток принимает только та нода, которой кластер отдал захват стрима. Ноду выбирает раскладка кластера — по загрузке, тегам и живости, а не по тому, куда позвонили. Попал энкодер на неё — эфир пошёл, и стрим по требованию поднимается тут же.
  • Звонок на любую другую ноду закрывается сразу после рукопожатия: этого стрима в её конфигурации нет, а молча держать соединение — значит показывать энкодеру принятый эфир, которого нет. Энкодер видит мгновенный обрыв и перезванивает; дозвонившись до ноды захвата, начинает вещать.
  • Пока публикация идёт, дверь занята: второй энкодер, дозвонившийся до той же ноды, получает отказ «занято» и не роняет действующую трансляцию.
  • Оборвавшаяся публикация ждёт возвращения: через несколько секунд тишины соединение закрывается, стрим переходит в ожидание. Захват при этом никуда не переезжает — вернувшийся энкодер продолжает эфир на той же ноде, пока кластер не переложит захват сам (например, когда нода вышла из строя).

Источники стриму не обязательны: стрим может жить только от публикации и подниматься с первым звонком. Источник, настроенный рядом с публикацией, работает резервом — живой эфир его перебивает.

Один адрес для всех энкодеров

Энкодеру нужен один адрес, а нод в кластере несколько. Настройка Адрес публикации (меню Настройки central) — это имя или IP, который консоль подставляет в строку подключения. Что стоит за этим адресом — DNS-имя с несколькими A-записями, VIP или UDP-балансировщик — выбор инсталляции; здесь разобран DNS-вариант как не требующий дополнительного софта. Пустая настройка означает хост консоли и годится только для одиночной машины.

Адрес публикации и кандидаты в DNS

Сценарий: DNS-имя с несколькими A-записями

В SRT нет перенаправлений: клиент звонит по UDP на конкретный адрес, и «спросите на соседней ноде» протокол сказать не умеет. Зато SRT-клиенты — OBS, Larix, VLC — при недоступности адреса сами перебирают A-записи имени, тратя порядка трёх секунд на мёртвую. Имя с A-записями на каждую ноду даёт отказоустойчивость силами самого клиента: нода умерла — энкодер дозвонился до следующей. Тот же перебор приводит энкодера и к ноде захвата: чужая нода рвёт соединение сразу после рукопожатия, а не по таймауту, поэтому попытки идут быстро.

Порядок настройки:

  1. Заявите публичные адреса нод. В карточке каждой ноды заполните Публичный адрес медиа — поле предлагает выбор из адресов, которые нода видит на своих интерфейсах; за NAT правильный адрес знаете только вы, впишите его руками.
  2. Сверьтесь с подсказкой. Под настройкой Адрес публикации консоль показывает кандидатов в DNS-записи — по одному адресу на живую ноду, с именем ноды. Это и есть список того, что нести в зону.
  3. Заведите A-записи. В своей DNS-зоне создайте имя — например, publish.example.com — с A-записью на адрес каждой ноды из списка.
  4. Впишите имя в «Адрес публикации» и сохраните. Кластер периодически резолвит имя и сверяет результат с реестром нод: у настройки видно, что имя ведёт на живые ноды. Имя, которое не резолвится или ведёт только на выключенные ноды, зажигает предупреждение — типовая ошибка сопровождения «ноду вывели, запись забыли» видна сразу, а не при первом сорванном эфире. Строки для энкодера у всех стримов с этого момента собираются с именем.

Две честные оговорки:

  • Несколько A-записей — это отказоустойчивость, а не балансировка: резолверы кешируют и перетасовывают записи по-своему, и энкодеры одной сети могут дружно звонить в одну и ту же дверь. На раскладку это не влияет — какой ноде достанется захват, решает кластер; от DNS зависит лишь то, за сколько попыток энкодер попадёт в нужную дверь.
  • Не всякий мобильный клиент перебирает записи. Часть приложений берёт первый адрес и долбится в него. Для таких надёжнее завести в профиле энкодера два адреса — основной и резервный.

Настройка стрима

Откройте стрим на вкладке Стримы и найдите секцию SRT-публикация:

Поле Что задаёт
UDP-порт порт публикации; один порт — один стрим, на всех нодах сразу
Passphrase ключ шифрования AES, 10–79 байт; при несовпадении звонок отклоняется на рукопожатии

Passphrase необязателен, но порт без него — открытая дверь: публиковать сможет любой дозвонившийся. Оставляйте его пустым только в доверенной сети, о чём форма предупреждает.

Добавление порта публикации: порт без passphrase — предупреждение об открытой двери

Под полями собирается готовая Строка для энкодера — srt://адрес:порт?passphrase=… — с кнопкой копирования и QR-кодом: адрес с ключом вбиваются в мобильный энкодер с камеры, а не с клавиатуры. Адрес в строке — тот самый Адрес публикации из раздела выше: задайте его до того, как раздавать строку, иначе энкодер унесёт адрес одной конкретной ноды.

Рядом с QR — вкладки Larix и Moblin: та же дверь готовой ссылкой импорта для этих приложений — сканируется их камерой, соединение появляется в настройках само.

Секция SRT-публикации в карточке стрима

Подключение энкодера

В OBS: Настройки → Трансляция → Служба: Настраиваемый, в поле Сервер — строка из карточки стрима целиком:

srt://publish.example.com:9000?passphrase=ваш-ключ

Мобильному энкодеру покажите QR из той же секции. После старта вещания стрим поднимется за несколько секунд: энкодеру может понадобиться пара попыток, чтобы попасть на ноду захвата. Результат виден в списке стримов и на странице портов.

Сводка SRT-портов

Страница SRT-порты (в меню под Стримами) — карта всех SRT-дверей кластера: порты публикации и раздачи, чей каждый порт, задан ли passphrase, слушается ли фактически. Здесь же:

  • выбор порта под новый стрим — занятые номера перед глазами, дубль порта помечен;
  • живая публикация — адрес энкодера и нода, принимающая поток;
  • тишина между звонками — сессии нет, порт просто слушается; кто примет следующий звонок, определяет раскладка кластера, и обещаний на этот счёт сводка не даёт;
  • сверка адреса публикации — та же строка состояния, что у настройки.

Когда звонок отклоняют

Что случилось Что видит энкодер
Passphrase не совпал отказ на рукопожатии, соединение не устанавливается
Звонок пришёл на ноду без захвата стрима соединение закрывается сразу после рукопожатия; энкодер перезванивает, пока не попадёт на ноду захвата
Нода приёма уже занята действующей публикацией отказ «занято»; идущая трансляция не прерывается
Публикация замолчала через несколько секунд тишины соединение закрывается, стрим ждёт следующего звонка

Что дальше