Skip to content

Приём SDI

Обзор

Вход SDI захватывает видео и звук с SDI-портов карт DekTec. Сигнал заходит в систему только проводом в порт карты, и что стоит на другом конце провода — аппаратная, видеокоммутатор, спутниковый приёмник — входу безразлично. Карты, кроме DekTec, не поддерживаются.

Поддерживаемые карты и стандарты

Поддерживаются карты DekTec. Проверка идёт на DTA-2178 (HD и 12G вплоть до 3840×2160p50) и DTA-2174B (HD). Другие карты DekTec на том же драйвере не проверялись.

Стандарт сигнала определяет сама карта, и вход не различает SD, HD, 3G и 12G-SDI: наверх приезжают кадры со своим самоописанием — размер, развёртка, частота рациональным числом. Смена стандарта на линии — штатный рестарт захвата, а не ошибка: так выглядит переключение на видеокоммутаторе.

Раскладку портов карты задаёт вариант её прошивки, а не номер порта. Что за карты стоят в машине, какие у них порты и что на них за сигнал, показывает раздел Карты захвата.

Карты Blackmagic (DeckLink), Magewell и прочие V4L-совместимые этим входом не поддерживаются.

Настройка входа

На стримере с картой должен стоять пакет dektec-bridge: он приносит процесс захвата и опросчик карт. Без него вход отказывает с причиной «процесс захвата недоступен», см. ниже.

Создайте стрим и на вкладке Источники нажмите + Добавить источник. Протокол — SDI (DekTec).

Секция SDI-входа в карточке стрима

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

Выбор карты из списка

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

  • генлок — опорный вход;
  • виртуальный порт — разъёма нет вовсе;
  • внутренний выход — прошивка развела порт на соседний порт той же карты.

Строка из группы другой карты меняет и карту, и порт разом: перевесить вход на соседнюю карту можно одним выбором.

Порт вывода в списке остаётся с подписью «не вход»: карта не всегда верно сообщает направление, и разъём, который есть на планке, лучше показать с подписью, чем спрятать. Выбор такого порта даст отказ «порт занят», см. ниже.

Занятый порт подписан стримом, который его занял, а если процесс захвата этого стрима завис, то и состоянием: «Стрим: tv1 · держит зависший процесс». Так заклинивший порт отличается от нормально занятого.

Выбор порта

Список — подсказка, а не ограничение: серийный номер и порт можно ввести вручную, и форма примет и неизвестный номер, и порт вывода. Это нужно, когда карта ещё не установлена или стоит на другом стримере: список карт обновляется раз в минуту и может отставать. Если списка нет вовсе (стример молчит или опросчик не установлен), поля работают как обычные текстовые.

Остальные поля секции:

Поле Значение
Пиксель-формат uyvy422 (8 бит, умолчание) или v210 (10 бит). Десять бит стоят вдвое большей полосы во внутреннем тракте и примерно на треть большей — по шине PCIe
Таймаут открытия, мс сколько ждать кадров, прежде чем признать источник мёртвым; он же окно тишины сокета. Пусто — 30 с
Дорожка меток SCTE-104 включена по умолчанию, см. ниже
Звуковые дорожки карта эмбеддированного звука, см. ниже

Не забудьте Сохранить: правка входа уезжает на сервер только по кнопке.

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

Сырое видео с карты играть нечем: пока в стриме нет кодированных дорожек, HLS, DASH и архив останутся пустыми. Чтобы они заполнились, включите транскодер.

Состав дорожек показан на вкладке Основные настройки, в блоке Что в потоке:

Дорожки стрима с SDI-входа

Кодек называет проводную раскладку, а не то, во что поток превратится: v210 — сырое видео с выбранным пиксель-форматом, s32p — несжатый 32-битный звук, scte104 — дорожка меток. Ссылка Перекодировать, чтобы играло в вебе ведёт в настройки транскодера.

Многоканальный звук

Звук приезжает уже разложенным по дорожкам: карту дорожек объявляет секция входа, а деэмбеддированием занимается процесс захвата. Позиция дорожки в списке — её номер в стриме (a1, a2, …).

У дорожки три поля:

  • каналы SDI — номера от 1 до 16: в SDI не больше восьми пар, то есть шестнадцати каналов. Порядок номеров задаёт раскладку каналов в дорожке;
  • транспорт — несжатый звук или обёртка SMPTE 337: сжатый звук, например AC-3 или Dolby E, упакованный в пару PCM-каналов;
  • язык — по ISO 639-2.

Язык объявляется, а не выводится из сигнала: языковых дескрипторов SDI не несёт, и знает язык только тот, кто раскладывал программы по парам.

Пустой список дорожек означает не «звука нет», а умолчание: одну стереодорожку PCM из первой пары.

Несжатый звук приходит 32-битным и декодируется по объявленному числу каналов. Дорожка шире стерео принимается честно, но кодер сводит её в стерео — это граница транскодера, а не входа.

Bypass AC-3 по SMPTE 337

Дорожка с транспортом smpte337 приезжает готовыми кадрами AC-3 или E-AC-3: обёртку снимает процесс захвата, медиасервер битовый поток звука не разбирает и не декодирует. Поддерживается единственный вариант — SMPTE 337, закодированный в двух каналах: такая дорожка обязана объявлять ровно два канала, иначе конфигурация отклоняется.

Так 5.1 доезжает до выдачи целым. Паузы сжатой дорожки — тишина между пакетами — законны и ошибкой не считаются.

Вид звука объявляется, а не распознаётся по данным: пара, в которой сегодня AC-3, а завтра тишина, не должна менять состав дорожек стрима.

Телетекст и субтитры

Вспомогательные данные приезжают в VANC каждого кадра, служебной области над изображением, и вход разводит их по назначению.

Телетекст OP-47 попадает в общий тракт closed captions — тем же путём, что OP-47 из ST 2110, и с тем же результатом: телетекст и субтитры доезжают до выдачи.

VBI-телетекст важен для унаследованных SD-систем вещания. В SD телетекст едет не пакетом ANC, а строкой гашения — областью, в которой изображение не передаётся. Вход отправляет такие строки в тот же тракт, что и OP-47, и на выходе они становятся тем же телетекстом. Настраивать здесь нечего.

Closed captions CEA-608/708 (CDP) вход разбирает и считает счётчиком, но отдельной дорожкой пока не публикует: носитель closed captions в тракте — SEI кодированного выхода, и вставка туда общая для всех входов и ещё не сделана. Счётчик существует затем, чтобы «closed captions в сигнале нет» и «closed captions некуда отдать» не выглядели снаружи одинаково.

Метки SCTE-104

Пакеты SCTE-104 из VANC уезжают отдельной прикладной дорожкой — сырыми, со штампом несущего кадра. Вход их содержимое не разбирает и в SCTE-35 не преобразует: обработки меток — замены, компенсации, вставки — в Mcaster пока нет.

Дорожка включена по умолчанию и существует с первого кадра, даже пока меток нет. Если бы она появлялась с первой меткой, состав дорожек менялся бы в начале рекламного блока и упаковка перезапускалась бы. Так же устроен MPEG-TS: PID меток объявлен в таблице задолго до первого сообщения. Цена умолчания — одна пустая дорожка в стримах без меток.

Что видно, когда что-то не так

Состояние входа видно на вкладке Источники, в блоке Здоровье источников.

Состояние SDI-источника

В блоке — статус, адрес входа вида sdi://<серийный номер>/<порт> и состав дорожек. При отказе вместо «Работает» стоит причина из таблицы ниже, и у каждой причины своё действие:

Причина Что случилось Что делать
нет сигнала на порту нет детектируемого сигнала проверить кабель и источник
порт занят драйвер отказал в порте 1) посмотреть направление порта в разделе Карты захвата: порт вывода отвечает тем же кодом; 2) проверить, не завис ли свой процесс захвата; 3) только потом искать посторонний процесс
процесс захвата недоступен исполняемый файл не найден или не запускается поставить пакет dektec-bridge
отказ устройства процесс захвата вышел ненулевым кодом без отдельного значения: неизвестный серийный номер, порт без нужной способности, отказ настройки стадию называет стартовое событие в логе
процесс не убивается не завершается ни по закрытию стандартного ввода, ни по SIGKILL признак заклинившей карты; разбираться на хосте
процесс убит извне захват убил OOM-killer, systemd или человек выяснить, кто завершил процесс, а не чинить стрим
рассинхрон версий процесс захвата шлёт данные, но медиасервер их не разбирает версии dektec-bridge и медиасервера разъехались; выкатывать их надо вместе

Неустранимых отказов здесь нет: после любой из них вход пробует подняться снова, с растущим интервалом между попытками, и поднимается сам, как только причина исчезает.

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

Панель показывает текущую причину, а не историю. Историю дают счётчики в Prometheus с префиксом stream_input_sdi_. Всегда есть:

  • состояние линии;
  • рестарты процесса захвата;
  • потери на границе процессов, с обеих сторон границы.

С лицензионной опцией «расширенные счётчики» добавляются обрезанные и неразобранные пакеты от процесса захвата и разбивка VANC.

Что модуль не делает

  • Не отдаёт сигнал в карту: это вход, а выдачи в SDI в Mcaster пока нет.
  • Не декодирует AC-3 и Dolby E в PCM.
  • Не преобразует SCTE-104 в SCTE-35.
  • Не публикует дорожку closed captions CEA-608/708.
  • Не наблюдает здоровье карты: температуру, обороты и раскладку портов показывает раздел Карты захвата.

Что дальше