Skip to content

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

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

Раздел VOD для этого держит две вкладки: Шаблоны ассетов и Задания. Ход конкретного ассета виден в его карточке, общая картина — на панели управления.

Шаблоны ассетов

Вкладка Шаблоны ассетов — каталог лестниц. Колонки: Имя, Описание — качества словами, например 720p H.264, 360p H.264, и Ассеты — сколько ассетов закреплено за шаблоном.

Шаблоны ассетов: системные лестницы и свои

Системные шаблоны (mbr-1080, mbr-720, source-like) не правятся и не удаляются, у них одно действие — Клонировать: открывается форма своего шаблона с копией лестницы. У своих шаблонов действия Править и Удалить; кнопка Новый шаблон открывает форму с одним качеством.

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

Форма шаблона

Форма шаблона — лестница по качествам. Имя — как шаблон виден в списках. Оригинал — что делать с исходником после обработки: оставлять или удалять после обработки. Дальше качества: у каждого своё разрешение (поле Высота), Кодек и Битрейт, на каждое качество приходится один выходной файл; пресет кодера, длина GOP и структура кадров задаются на всю лестницу. Кнопки Добавить качество предлагают ходовые разрешения, Другая… — произвольное, оригинал как есть — качество без изменения размера. Правило звука одно на всю лестницу: все аудиодорожки оригинала перекодируются в AAC и кладутся в каждый выход с сохранением языковых меток, поэтому озвучки и переводы не теряются.

Форма шаблона: качества, что получится из movie.mp4 и ассеты с этим шаблоном

Имена выходов задавать не нужно, они строятся из имени исходника и разрешения качества. Карточка Что получится из movie.mp4 справа показывает результат для примера: movie-mp4-720p.mp4, movie-mp4-360p.mp4 и описатель movie-mp4.smil. Точка в имени исходника заменяется на дефис, поэтому movie.mp4 и movie.mkv в одном ассете дают разные выходы и не перезаписывают друг друга.

Два качества с одним разрешением и одним кодеком форма не сохраняет: это один и тот же файл под двумя именами. Качества различаются разрешениями.

Ниже стоит карточка Ассеты с этим шаблоном — ссылки на карточки ассетов, за которыми он закреплён; если их больше сотни, карточка показывает первые сто. Шаблон, созданный через API, подчиняется тем же правилам: сервер принимает только такую лестницу, поэтому любой шаблон открывается в форме.

Загрузка с шаблоном

Шаблон закрепляется за ассетом при загрузке: в предпросмотре загрузки рядом с именем нового ассета стоит поле Шаблон ассета. У каждого видеофайла есть отметка По шаблону; снятая отметка кладёт файл как есть, без задания. Загрузка в ассет с шаблоном идёт по его шаблону, выбора нет; ассет без шаблона предлагает выбрать его прямо в предпросмотре.

Задание появляется само, как только загрузка завершилась. Ставить его руками не нужно.

Задания

Вкладка Задания — реестр работы всех стримеров. Над списком сводка по статусам: в очереди, выдано, в работе, отменяется, ошибка.

Задания: сводка, фильтры и задание в работе

Колонки: Задание — исходный файл, ссылка ведёт в карточку задания; Ассет — ключ, ссылка ведёт в карточку ассета; Статус; Прогресс — процент и скорость относительно реального времени; Исполнитель — стример и его очередь; Попытка; Ошибка — словами; Поставлено — когда задание поставлено. У задания в очереди колонка Ошибка называет причину ожидания: стример не на связи или не исполняет задания, в его очереди нет места, попытка не удалась и будет повторена.

Статусы задания:

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

По умолчанию список показывает активные и ошибки; готовые и отменённые задания открываются фильтром Статус, пункт все показывает реестр целиком. Фильтр Ассет принимает ключ ассета, Нода — стример-исполнитель, Сбросить снимает все фильтры.

Действия в строке:

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

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

Карточка задания

Карточка задания открывается по имени исходника в списке. В шапке — файл, статус и ссылка К списку заданий.

Карточка задания в работе: ход, ожидаемый финиш, подробности

Блок Прогресс — полоса хода, Обработано относительно длительности файла, Скорость и Попытка. Блок Подробности — шаблон, что станет с оригиналом после обработки, исходник и выходы; у упавшего задания здесь же сообщение исполнителя целиком. Блок Результат появляется, когда готов хотя бы один выход, и перечисляет готовые файлы и описатель для плеера. У задания в очереди вместо хода стоит причина ожидания. Справа Исполнение — ассет, исполнитель с его очередью и кто поставил задание, и Хронология — когда поставлено, выдано и начато; Финиш у задания в работе — оценка по текущей скорости, со знаком ≈, у готового — фактическое время, у упавшего и отменённого строка называется Остановлено. У отменённого задания выходы и результат не показываются: оно ничего не произвело.

Ассет в работе

В карточке ассета блок Шаблон ассета показывает закреплённый шаблон. Сохранить меняет только шаблон, заданий не ставит. Запустить задание… открывает выбор оригиналов: отмеченные обрабатываются по текущему шаблону заново, выходы пересобираются. Ссылка Задания ассета ведёт в реестр с фильтром по этому ассету и всеми статусами, включая готовые; рядом — сколько его заданий в работе и с ошибкой.

Карточка ассета во время обработки: оригинал в работе стоит первым

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

Карточка ассета после обработки: выходы и описатель рядом с оригиналом

Панель управления

На панели управления строка Транскодирование файлов VOD показывает, сколько заданий в очереди, в работе и с ошибкой, и сколько стримеров могут их выполнять; ссылка к заданиям открывает реестр. Исполнитель конкретного задания — всегда стример, на котором лежит оригинал: файл никуда не копируется.

Панель управления: строка транскодирования файлов VOD

Задание через API

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

curl -X POST 'http://<central>/central/api-v4/vod/jobs' \
  -H 'Authorization: Bearer <ключ>' -H 'Content-Type: application/json' \
  -d '{"asset_id": "<asset id>", "files": ["movie.mp4"], "template_id": "mbr-720"}'
  • files — какие оригиналы обработать; без поля берутся все оригиналы ассета.
  • template_id либо plan — шаблон или план прямо в запросе; к ассету он не привязывается, шаблон ассета не меняется.
  • target_asset_id кладёт выходы в другой ассет, trim режет отрезок.

Собственный план не ограничен формой лестницы: описатель, имена выходов и набор дорожек в нём произвольные. Такое задание видно на вкладке Задания наравне с остальными.

Реестр через API — GET /central/api-v4/vod/jobs с фильтрами asset_key, status (один статус или несколько через запятую, например queued,running) и node; запись несёт причину ожидания кодом (wait_reason) и словами (reason). DELETE /vod/jobs/{id} у готового, упавшего или отменённого задания убирает запись, DELETE /vod/jobs?status=error — все записи этого статуса.

Что дальше

  • Загрузка VOD — предпросмотр загрузки, док и стореджи.
  • Каталог VOD — карточка ассета, проигрывание и удаление.