Skip to content

Мониторинг транскодера

Дашборд Transcoder monitoring показывает, как работает перекодирование видео на сервере: стабилен ли транскодер, успевает ли он в реальном времени, сколько выходных дорожек формируется.

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

Рабочий порядок: начните с таблицы Transcoded streams — в ней видно все потоки сервера с транскодером и то, чего каждый из них стоит. Кликните по имени потока, чтобы подставить его в Stream name: ниже раскроется группа Stream transcoder details, а под ней — свёрнутые группы с подробностями по стоимости, качеству картинки, целостности выхода и аудио. Тепловая карта перезапусков отвечает на другой вопрос: не «какой поток болеет», а «когда именно болело».

Инвентарь транскодеров

Таблица Transcoded streams on server — точка входа на дашборд. Все остальные панели требуют выбранного потока, то есть предполагают, что вы уже знаете, какой поток хотите смотреть. Эта таблица отвечает на вопрос до того: какие потоки на сервере вообще перекодируются и что с ними происходит.

Строки отсортированы по стоимости — сверху те, кто съедает больше всего процессорного времени. Стоимость измеряется только в процессорном времени, и это верно для любого потока: поток на видеокарте тоже тратит процессор — на подготовку кадров, фильтры и сборку выхода, — просто на кодирование тратит заметно меньше. Загрузка самой карты в эту колонку не входит, её смотрят на дашборде Server Stats.

Колонки можно фильтровать и сортировать прямо в таблице, так что «проблемным» вы назначаете то, что считаете проблемой сами: доля битых GOP, число пересборок или лаг.

Колонки:

  • name — имя потока; клик подставляет его в Stream name и в Server name, после чего работают все панели ниже;
  • server_id — сервер; клик ведёт на дашборд Server Stats;
  • device — на чём поток считался: номер видеокарты, CPU или n/a;
  • cost, % core — сколько процессорного времени стоит поток, в процентах одного ядра;
  • fps out — сколько кадров в секунду он выдаёт;
  • bad GOP % — доля повреждённых групп кадров;
  • rebuilds — сколько раз выход пересобирался;
  • lag — насколько выход отставал от реального времени, миллисекунды;
  • last seen — когда поток отчитывался в последний раз.

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

Три колонки читаются не так, как кажется на первый взгляд.

cost — это средняя доля одного ядра за выбранный интервал, а не за то время, пока поток работал. Поток, который отработал десятую часть интервала и стоил при этом два ядра, покажет здесь примерно 20 %. Так и задумано: таблица ранжирует по суммарному потреблению ресурсов, а не по мгновенной тяжести. На панелях группы Transcoder cost та же величина считается по бакетам и будет заметно выше — это не расхождение данных.

device — категория, а не число, и «видеокарта» здесь только одно из трёх возможных значений:

  • число — индекс видеокарты по драйверу, эту карту поток занимал;
  • CPU — карты не было вовсе: программный транскодер, passthrough или поток, который карту запросил и не получил;
  • n/a — данных нет. Сервер этой версии поле про видеокарты не присылает, поэтому про этот поток неизвестно, была под ним карта или нет. Это не то же самое, что CPU.

bad GOP % пустая, если за интервал поток не подал транскодеру ни одной группы кадров. Доли в этом случае просто нет — и это не то же самое, что «артефактов нет».

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

Число строк ограничено переменной Limit в шапке дашборда (по умолчанию 1000, максимум 50000).

Сценарии использования:

  • Жалоба «тормозит сервер»: отсортировать по cost и посмотреть, какие потоки съедают процессор
  • Жалоба «рассыпается картинка» без указания потока: отсортировать по bad GOP %
  • Проверить, что потоки не съехали с видеокарт на процессор: отфильтровать device по значению CPU
  • Найти потоки на карте, которая ушла в карантин: отфильтровать device по её номеру

Перезапуски транскодера

Панель Top N streams with transcoder restarts on server — главная точка входа для диагностики.

Это тепловая карта (state timeline): по вертикали — потоки с наибольшим числом перезапусков, по горизонтали — время. Цвет ячейки показывает значение метрики transcoder_restarts за интервал:

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

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

Вверху дашборда выберите Server name — один сервер или All для сводки по всей инфраструктуре.

Сценарии использования:

  • Увидеть красную или оранжевую полосу, кликнуть по строке потока и разобрать детали внизу дашборда
  • За несколько дней заметить, что один и тот же поток регулярно в топе — искать системную причину (перегрузка сервера, нестабильный источник, слишком тяжёлый профиль транскодирования)
  • Сопоставить перезапуски с проблемами на мониторинге захвата — часто транскодер падает из-за битого входа

Настройте алерты: следите за загрузкой CPU, шедулера и GPU на дашборде Server Stats — транскодирование напрямую зависит от ресурсов сервера.

Детали транскодера потока

После выбора потока в группе Stream transcoder details появляются панели с конфигурацией и метриками работы транскодера.

Аппаратное ускорение

Таблица Transcoder hardware показывает, на чём транскодер выбранного потока работал:

  • hw — на чём поток настроен перекодироваться;
  • card — на какой карте он считался: номер карты, CPU (карты не было) или n/a (сервер этой версии поле не присылает, то есть неизвестно);
  • fallbacks — сколько раз декодирование сорвалось с карты на процессор, хотя аппаратное ускорение было настроено.

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

При жалобах на нагрузку сервера проверьте, не съехали ли потоки массово на процессор: в инвентаре это колонка device со значением CPU. При проблемах с картой — смотрите её состояние на дашборде Server Stats.

Перезапуски

График Transcoder restarts — число перезапусков транскодера за интервал (increase(transcoder_restarts)).

Норма — ноль. Любой рост означает, что транскодер периодически падает и поднимается заново. На скриншоте видна типичная картина восстановления: долгий период с частыми перезапусками, затем линия падает до нуля — транскодер стабилизировался (исправили источник, снизили нагрузку или перезапустили поток вручную).

Сопоставьте моменты всплесков с ошибками входа того же потока и с графиком Video frames in / out ниже — если перезапуски есть, а кадров нет, транскодер не выдаёт результат.

Перегрузка

График Transcoder overloaded — индикатор перегрузки транскодера (transcoder_overloaded).

Ненулевое значение означает, что транскодер не успевал обрабатывать вход в реальном времени. Это предвестник перезапусков и деградации качества: кадры пропускаются, растёт задержка. Норма — ноль на всём интервале. При росте — снизьте число одновременных транскодирований на сервере, облегчите профиль (разрешение, битрейт, число качеств) или добавьте GPU.

Целевой видеостандарт

Таблица Target video standard (if configured) — для какого стандарта настроен транскодер (transcoder_target), если задан target в конфигурации.

Пустое значение или «No data» означает, что явный target не указан. Полезно при диагностике международных проектов с PAL/NTSC или при проверке, что поток настроен на нужный выходной формат.

Число выходных качеств

Панель Transcoder qualities — сколько выходных видеодорожек формирует транскодер (transcoder_qualities).

Значение 1 — одно качество (один профиль). Больше единиц — адаптивное или мультибитрейтное перекодирование. Каждое дополнительное качество умножает нагрузку на CPU/GPU; при перегрузке сервера имеет смысл сократить число качеств.

Наложение логотипа и текста

Две панели показывают, включены ли опции burn-in:

  • Transcoder burn logo (transcoder_burn_logo) — on / off, логотип вшит в кадр;
  • Transcoder burn text (transcoder_burn_text) — on / off, субтитры или произвольный текст (дата, время) вшиты в кадр.

Обе опции увеличивают нагрузку на транскодер. При transcoder_overloaded и частых перезапусках на потоке с on стоит проверить, не слишком ли тяжёлый оверлей.

Кадры на входе и выходе

График Video frames in / out — кадры в секунду по обе стороны транскодера:

  • in — кадры, которые подали транскодеру;
  • out — кадры, которые он выдал, суммарно по всем качествам; при трёх качествах эта линия примерно втрое выше in, и это норма, а не аномалия;
  • audio_in, audio_out — то же для звука, отдельно от видео.

Это главный индикатор того, что транскодер реально работает. Стабильные ненулевые линии при нулевых перезапусках — норма. in растёт, а out стоит — кодирование встало, хотя вход идёт.

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

Announces

График Transcoder Announces — входные и выходные announces транскодера (transcoder_announces по типу input / output).

Announces отражают смену параметров потока: новое разрешение, кодек, структура дорожек. Рост input без output может означать, что транскодер получил новые параметры входа, но ещё не начал стабильно выдавать результат. Одновременные всплески input и output — нормальная реакция на смену источника. Длительный ноль на обеих линиях при работающем транскодере — вход и выход стабильны.

Сценарии использования:

  • Поток «завис» в перекодированной версии: проверить Video frames in / out и Transcoder restarts — если кадров нет, смотреть вход и перегрузку
  • После добавления второго качества выросла нагрузка: сравнить Transcoder qualities с transcoder_overloaded и графиками CPU/GPU
  • Массовые перезапуски на сервере без проблем на входе: проверить суммарное число транскодируемых потоков и мультиплексор — возможно, сервер перегружен целиком
  • Жалоба на отсутствие логотипа: убедиться, что Transcoder burn logo показывает on для нужного потока

Стоимость транскодирования

Свёрнутая группа Transcoder cost отвечает на вопрос «во что обходится этот поток и почему так дорого». Разверните её, выбрав поток.

Стоимость по стадиям

График Transcoder cost by stage — сколько процессора съедает каждая стадия конвейера, в процентах одного ядра. Величины складываются: 230 % означает 2.3 ядра.

Разбивка отвечает не на вопрос «что сломано», а на вопрос «куда уходит процессорное время». На программном транскодировании самая дорогая стадия — encode, и это норма, а не находка. Читать разбивку интереснее на потоке, который настроен на видеокарту: там дорогой decode или scale означает, что работа, которую должна была делать карта, считается на процессоре.

Стадий пять:

  • decode — декодирование. Если поток настроен на аппаратное ускорение, а стадия дорогая, значит декодирование сорвалось на процессор; сверьтесь с колонкой fallbacks в таблице Transcoder hardware;
  • deinterlace — деинтерлейсинг. На прогрессивном входе или при выключенном фильтре здесь честный ноль;
  • scale — масштабирование. Дорогое, если считается программно, а не на карте;
  • encode — кодирование. Растёт от тяжёлого пресета и от числа выходных качеств;
  • audio — звук. Растёт от числа дорожек и от пересэмплирования.

Стадия дешевле одного процента ядра округляется до нуля.

Общая загрузка

График Transcoder load — во что обходится транскодер целиком, в тех же процентах одного ядра.

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

Простои выхода

График Output stalls — миллисекунды, которые транскодер простоял, не двигая кадры:

  • output_blocked — готовым кадрам некуда было отдаваться. Низкий fps вместе с низкой загрузкой и растущей этой линией означает, что узкое место ниже по течению, а не в транскодере;
  • hold — выход не собирался, потому что описание входа было неполным. Это отличается от «источник замолчал»: там растёт лаг, а эта линия стоит.

Качество картинки

Свёрнутая группа Picture quality — для разбора жалоб «рассыпается картинка», «артефакты», «дёргается».

Доля битых GOP

График Corrupted GOP share — доля групп кадров, в которых была хотя бы одна повреждённая картинка. Это ближайшее к ответу на вопрос «сколько экранного времени шло с артефактами».

Разрыв в линии означает, что за этот интервал поток не подал транскодеру ни одного GOP: доли просто нет, и это не то же самое, что «артефактов нет».

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

Потери кадров

График Frame loss — повреждённые и потерянные кадры в секунду:

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

Это счётчики, а не доли: против полутора тысяч кадров в минуту семь восстановленных — меньше половины процента, и в долях такая величина не читается. «Семь дефектных кадров в минуту» к тому же прямо называет, сколько картинок пострадало.

Ресеты декодера

График Decoder resets — перезапуски видеодекодера, по одному на эпизод восстановления, а не на каждый повреждённый кадр.

Читайте вместе с Frame loss: ресеты без восстановленных кадров означают, что декодер оправился чисто, ресеты вместе с ними — что восстановление стоило картинок.

Не складывайте с ресетами аудиодекодера из группы Audio: тот счётчик тикает на каждый повреждённый пакет, это другая единица.

Целостность выхода

Свёрнутая группа Output integrity — для разбора жалоб «поток рвётся», «замирает», «отстаёт».

Разрывы выхода

График Output breaks — эпизоды, которые рвут выход, за интервал:

  • rebuilds — выход пересобирался: оператор поменял настройки, на входе был стык, или это повтор после неудачной сборки. Каждый такой эпизод — разрыв в выходе;
  • decoder_opens — пересборка, которая потребовала открыть новый видеодекодер; растёт вместе с rebuilds — значит стыки стоят кадров;
  • configure_failures — неудачная сборка выхода или применение настроек. Растёт вместе с потерянными кадрами — выхода нет, пока не изменится вход или настройки; растёт в одиночку — сбой поймали до того, как разобрали предыдущий выход, и он продолжает работать;
  • holds — эпизоды ожидания полного описания входа: выход не собирается, кадры копятся в стартовом буфере;
  • interleaver_overflows — принудительный сброс буфера пересборки выхода: одна из дорожек перестала приходить, буфер упёрся в потолок. До сброса стоит весь выход, поэтому зритель видит долгое замирание.

Лаг выхода

График Output lag — насколько выход отставал от реального времени, худшее значение за интервал.

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

Растёт, когда источник встал или когда транскодер не успевает. Различить помогают Transcoder load и Output stalls из группы стоимости: при нехватке ресурсов загрузка высокая, при узком месте ниже по течению — низкая, зато растёт output_blocked.

Аудио

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

Аудиокадры на входе и выходе

График Audio frames in / out — аудиокадры в секунду по обе стороны транскодера.

Потери аудиокадров

График Audio frame loss — входные аудиокадры, не давшие ничего на выходе, в секунду.

Читайте против Audio frames in / out: потери при живом входе указывают на аудиотракт, потери вместе с упавшим входом означают, что источник перестал слать эту дорожку.

Ресеты аудиодекодера

График Audio decoder resets — ресеты аудиодекодера, по одному на повреждённый пакет.

Большое число здесь нормально на входе с потерями и само по себе не означает, что звук сломан — смотрите вместе с Audio frame loss.