Мониторинг транскодера¶
Дашборд 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.