Skip to content

Транскодирование и MBR

Транскодер решает две клиентские задачи. Первая — мультибитрейт: зрители со слабым стримом получают 360p, зрители с хорошим — 1080p, и плеер переключается между ними на лету. Вторая — совместимость: вход, который плееры не читают (сырые кадры, звук не в AAC), превращается в то, что читают все.

Всё это настраивается на вкладке Транскодер страницы стрима. Пока транскодер выключен, вход проходит насквозь без изменений — и для уже сжатого h264/aac-источника это может быть ровно то, что нужно: транскодирование стоит CPU, и жечь его без причины не стоит.

Начните с пресета

Пустая вкладка предлагает три пресета — каждый закрывает типовую задачу одним нажатием:

  • Починить звук (видео как есть + AAC) — видео не перекодируется, звук приводится к AAC. Самый дешёвый способ сделать поток совместимым, когда источник отдаёт нестандартное аудио.
  • Стандартная лестница 1080/720/360 + AAC — готовый ABR-набор для типового вещания.
  • RAW для SDI (v210) — несжатый выход для студийного SDI/2110-тракта.

Пустая вкладка Транскодер с пресетами

Пресет — это стартовая точка: он заполняет лестницу и правила, которые дальше можно править. Не забудьте Сохранить.

Лестница качеств

Блок Видео (лестница) — по ступени на каждое выходное качество:

  • Высота — 2160, 1080, 720, 576, 360 или своя. Ширина считается по пропорциям входа.
  • Кодек — H.264, HEVC, AV1; «Как есть» — passthrough без перекодирования; RAW-кодеки — для SDI-вывода.
  • Битрейт (kbps) и Rate control — CBR для предсказуемой полосы, VBR для лучшего качества на том же среднем битрейте.

Ступень Оригинал (без транскодирования) пропускает вход в лестницу как есть. Рядом с кодируемыми ступенями она деградирует лестницу — её GOP и IDR-кадры не выровнены с остальными, и бесшовное переключение качеств ломается; интерфейс предупреждает об этом плашкой.

Лестница 1080/720/360, правило аудио и предпросмотр

GOP — свойство всей лестницы, не отдельной ступени: чтобы плеер переключал качества без рывка, ключевые кадры всех ступеней обязаны совпадать. В заголовке лестницы задаются Длина GOP (в кадрах) и Структура GOP (от ip без B-кадров до ibbbbp). Короче GOP — быстрее старт стрима и меньше задержка переключения; длиннее — лучше сжатие. Если у ступеней GOP разъехался — например, после ручных правок — интерфейс покажет «GOP: разные на ступенях» и кнопку Унифицировать GOP.

Аудио

Блок Аудио — правила выбора и кодирования дорожек. В каждом правиле:

  • Какие дорожки — Все дорожки, Лучшее качество, Язык…, Язык + кодек…, Точный ID…
  • Кодек — Как есть, AAC или Opus, и битрейт.

Типовой случай многоязычного вещания: одно правило «Все дорожки → AAC» — все языки проходят в эфир перекодированными.

Продвинутые настройки ступени

Кнопка Ещё на ступени раскрывает:

  • Стратегия resize — что делать, когда пропорции входа не совпали с выходом: Fit сохраняет пропорции и добавляет поля (цвет поля настраивается), Scale растягивает, Crop обрезает.
  • Источник — переопределение того, какую входную дорожку берёт ступень.
  • Если дорожек не нашлось — поведение при пропаже дорожки: пропустить, тишина / чёрное поле, заставка SMPTE или остановить поток с ошибкой. Заставка удобна для стрима, который обязан отдавать картинку всегда; остановка — для тракта, где молча испорченный эфир хуже упавшего.

Если правила настроены так, что ни одно не даёт выходной дорожки, вкладка предупредит: «Манифест пуст» — такой стрим ничего не отдаст зрителю.

Кодирование: CPU или видеокарта

Секция Кодирование решает, чем считать. Поле Транскодировать на — два значения: CPU и NVIDIA GPU. Подсказка формулирует разницу прямо: CPU — по умолчанию; NVIDIA выполняет декод, скейл и энкод на видеокарте, то есть на GPU уезжает весь видеотракт, а не только кодирование.

При выборе NVIDIA появляется поле Видеокарта со списком карт, о которых отчиталась нода. Значение Авто (наименее загруженная) выбирает карту при старте стрима — уже запущенный стрим на другую карту не переезжает. В кластере стрим с кодированием на NVIDIA лейаутер размещает только на стримере с видеокартами — тегов для этого не нужно (Размещение стримов).

Здесь же Пресет кодера; по умолчанию — veryfast.

Деинтерлейс

Чересстрочный источник после кодирования в прогрессивный виден как гребёнка, поэтому в блоке Декодер есть поле Деинтерлейс. Оно одно на весь транскодер, потому что декод один на все ступени. Значений три:

  • Выключен — кадры не трогаются.
  • Автоматически (только чересстрочные кадры) — обрабатываются лишь те кадры, что помечены чересстрочными.
  • Принудительно (все кадры) — обрабатываются все, независимо от пометки. Нужен для источников, которые метку не проставляют.

Транскодер «вшивает» логотип канала или водяной знак в видео: картинка видна на всех устройствах, включая архив. Логотип ставится на всю лестницу карточкой Логотип лестницы; те же поля живут в «Расширенных» каждой ступени.

Карточка задает логотип один раз на всю лестницу:

  • Назначить — выбрать картинку из библиотеки логотипов: поиск по названию и загрузка файла PNG, JPEG или WebP до 1 МБ.
  • Положение на кадре — левый верхний угол, правый верхний, левый нижний, правый нижний или центр. Отступы считаются от выбранного угла внутрь кадра, у центра — сдвиг от центра.
  • Высота картинки (…p), px — высота логотипа на верхней ступени; ширина выводится из пропорций картинки. Пустое поле — нативный размер картинки, он же показан рядом с превью.
  • Отступ X, Отступ Y — отступы в пикселях.

Карточка Логотип лестницы с назначенной картинкой и пересчётом по ступеням

Значения задаются для верхней ступени и пересчитываются по ее высоте на остальные: под полями видно, что получит каждая ступень, еще до Сохранить. Ступень без resize берет высоту от входа. Настроенные вручную ступени карточка не трогает: при расхождении показывается плашка «Настройки логотипа ступеней различаются», а применение общего значения спрашивает подтверждение — оно перепишет индивидуальные настройки.

Логотип ставится только на кодируемую ступень: у «Как есть» и RAW-кодеков его нет, и при переходе ступени на passthrough интерфейс снимает секцию. Картинка — не больше 1 МБ и не больше 4096 пикселей по стороне. Если картинка недоступна, ступень не собирается: именованная ошибка видна в состоянии выхода, остальные ступени и стрим продолжают работать.

Библиотека логотипов живет в central, ключ записи — sha256 ее байтов: запись неизменяема, а повторная загрузка тех же байтов возвращает существующую запись. Картинка едет на ноду вместе с конфигурацией стрима, поэтому логотип работает и на ноде, где файла нет, и переживает недоступность central. Записи, на которые больше не ссылается ни один стрим, библиотека убирает сама.

Предпросмотр

Внизу вкладки — Предпросмотр: вход → выход. По каждому правилу видно, что окажется в выходном манифесте, ещё до Сохранить: какая ступень из чего собирается и не потерялось ли аудио. Когда статистика входа недоступна, левая часть так и говорит — вход неизвестен, — а выход всё равно считается из правил.

MBR: лестница без транскодирования

Если лестница качеств уже готова снаружи — энкодер на площадке сам отдаёт 1080/720/360 — перекодировать её заново незачем. Для этого есть источник MBR: на вкладке Источники выберите протокол MBR и добавьте в контейнер по входу на каждое готовое качество. Стрим соберёт их в единую лестницу и отдаст зрителю как обычный мультибитрейтный поток — не потратив на кодирование ни ядра.

Транскодер и MBR-вход — два пути к одному результату: первый жжёт CPU стримера, второй — полосу от энкодера. Выбор обычно диктуется тем, что дешевле в вашей раскладке.

Если транскодер не заработал

  • Лестница настроена, стрим зелёный, но выходных дорожек нет. Проверьте, что на стримере установлены плагины кодирования — dpkg -l | grep sapsan-transcoder. Без них сервер работает, но кодировать нечем; см. Быстрый старт.
  • Плеер дёргается при смене качества. Посмотрите на плашки лестницы: passthrough-ступень рядом с кодируемыми или разъехавшийся GOP — обе причины видны прямо в интерфейсе.
  • Над вкладками стрима плашка «Транскодер не работает». Ступень не запустилась или транскодер остановился; причина написана в плашке, кнопка в ней ведёт на вкладку Транскодер. Номер выхода в причине считается с нуля, как в ошибке при сохранении.