Медиа.маги Документация

Last updated

Адаптивный стриминг: HLS, DASH и субтитры

1. Что создаёт этот процесс

Многовыходной пакет адаптивного стриминга: лестницы HLS v3 и HLS v5, манифест MPEG-DASH, мезонин ProRes и дорожку субтитров WebVTT, сгенерированную из аудио источника. Все поставки создаются за один проход из одного исходного файла и загружаются вместе.

2. Когда использовать

  • Нужно прогнать один источник через HLS и DASH в одной задаче с общими субтитрами.
  • Нужно держать мезонин ProRes в архиве рядом с потоковыми поставками.
  • Нужны машинно-сгенерированные субтитры, встроенные в потоковые манифесты, без отдельного шага транскрибации.
  • У вас есть доступ к оборудованию NetInt H.264, и нужно сравнить программную (x264) и аппаратную (NetInt) копии бок о бок.

3. Входы

  • Исходный файл — любой контейнер и кодек, которые платформа может демультиплексировать. Типичен высокобитрейтный мастер HD или UHD хотя бы с одной аудиодорожкой.
  • Переменные:
    • $inputURL — URL, откуда читается источник. Укажите полный URL, доступный платформе для забора.
    • $outputURL — URL, куда записывается готовый пакет. Плейлисты HLS, манифест DASH, файл ProRes и объекты сегментов размещаются под этим назначением.

4. Выход

  • Пакет HLS v3 — плейлист .m3u8 с 8-секундными сегментами, объединяющий видеокопии H.264 x264 и NetInt с закодированным аудио AAC и встроенными субтитрами.
  • Пакет HLS v5 — плейлист .m3u8 (index.m3u8) с 8-секундными сегментами, видеокопия x264, аудио AAC и дорожка субтитров WebVTT, привязанная как группа субтитров.
  • Манифест MPEG-DASH — манифест .mpd (index.mpd) с 8-секундными фрагментами и субтитрами WebVTT.
  • Мезонин ProRes — файл .mov, закодированный в ProRes, записываемый рядом с потоковыми поставками.
  • Назначение — каждый артефакт записывается на URL, заданный переменной $outputURL.

5. Обзор процесса

Адаптивный стриминг: HLS, DASH и субтитры на холсте

Источник забирается из $inputURL и разделяется на видео- и аудиоветвь узлами map/video и map/audio. Аудиоветвь питает трёх потребителей параллельно: af/stereo фиксирует стерео-раскладку перед кодером AAC, узел whisper транскрибирует речь в дорожку субтитров WebVTT, а map/audio также пропускает сырое аудио в мезонин ProRes. Видеоветвь питает кодер мезонина prores, программный кодер x264 и аппаратный кодер NetInt ni264. Выход x264 также маршрутизируется через ccinject для встраивания сгенерированных Whisper субтитров в битстрим H.264. Упаковщик HLS v3 объединяет обе копии H.264 плюс AAC плюс субтитры; упаковщик HLS v5 берёт копию x264 с AAC и привязывает дорожку WebVTT; упаковщик DASH создаёт манифест MPEG-DASH с WebVTT. Два узла delay придерживают видео- и аудиоветви на несколько секунд, чтобы упаковщики ниже по потоку видели стабильный вход. Узел move зеркалирует исходный вход в место вывода как операционный сайдкар. Каждый выход в итоге попадает в узел upload.

6. Настройка по узлам

Map Video (map/video) и Map Audio (map/audio)

Связующие узлы map/video и map/audio выбирают видео- и аудиопотоки из скачанного пакета и подают их в ветви кодирования. В этом процессе у них нет параметров.

Delay (delay)

Два узла delay придерживают видео- и аудиоветви на три и одну секунду соответственно. Delay — связующий узел планирования, разносящий параллельные пути; на сами потоки он не влияет.

Move (move)

Узел move зеркалирует исходный объект из $inputURL в $outputURL рядом с закодированными выходами. Это операционный сайдкар — он не питает ни один кодер.

OpenAI/Whisper (whisper)

Выбранный whisper с его параметрами

Транскрибирует аудио источника в дорожку субтитров WebVTT. Выходной текст питает ccinject, hls5 и dash, поэтому каждая потоковая поставка несёт одни и те же субтитры.

Параметры этого примера:

  • FormatWebVTT. Формат WebVTT требуется для потоковых субтитров HLS v5 и DASH.
  • LanguageAfrikaans. Ожидаемый язык аудио источника. Меняйте под источник; оставляйте на автоопределении, когда язык неизвестен.
  • Modelmedium. Выше точность, чем у модели small, ценой большего объёма вычислений.

ProRes (prores)

Выбранный prores с его параметрами

Кодирует видео и аудио в мезонин ProRes, загружаемый рядом с потоковыми поставками. Этот процесс использует значения по умолчанию — имя файла и подпись не заданы.

AAC (aac)

Выбранный aac с его параметрами

Кодирует приведённое к стерео аудио для каждого потокового выхода. Упаковщики HLS v3, HLS v5 и DASH разделяют эту дорожку AAC.

Параметры этого примера:

  • Bitrate100 KBPS. Стереобитрейт, подходящий под веб-профиль доставки потоковых выходов.

Полный список параметров и компромиссов см. в aac.

x264 (x264)

Выбранный x264 с его параметрами

Программный кодер H.264. Его выход питает копию с субтитрами, подаваемую в HLS v3, HLS v5 и (через ccinject) вариант с субтитрами.

Параметры этого примера:

  • H264 Codec Profilemain. Широко совместимый профиль H.264; подходит для общего стриминга.
  • Presetmedium. Сбалансированный пресет скорость/качество.
  • Rate ControlABR. Режим среднего битрейта для предсказуемых размеров сегментов по всей лестнице.
  • Bitrate1000 KBPS. Целевой видеобитрейт для программной копии.

Полный список параметров и компромиссов см. в x264.

NetInt H.264 (ni264)

Выбранный ni264 с его параметрами

Аппаратно-ускоренный кодер H.264. Создаёт вторую видеокопию для HLS v3 рядом с программной копией x264.

Параметры этого примера:

  • Profilemain. Профиль H.264 для кодера NetInt.
  • Codec LevelAuto. Позволяет кодеру выбрать уровень под разрешение и битрейт.
  • Rate ControlABR. Режим среднего битрейта для паритета с программной копией.
  • vbvBuf size3000 msec. Задержка инициализации буфера в миллисекундах.
  • Bitrate1000 KBPS. Целевой битрейт, согласованный с копией x264 для прямого сравнения.
  • GOP patternI-B-B-B-P,... (gop_size=4). Повторяющийся паттерн I-B-B-B-P; предсказуемая структура для доставки ABR.
  • GOP92. Максимальная длина GOP в кадрах.

HLS3 (hls3)

Выбранный hls3 с его параметрами

Упаковывает многокопийную лестницу HLS v3. На вход поступают обе видеодорожки H.264 (x264 + ni264) вместе с аудио AAC и слитыми через ccinject субтитрами.

Параметры этого примера:

  • Segment Duration8 sec. Стандартные 8-секундные сегменты HLS.

HLS5 (hls5)

Выбранный hls5 с его параметрами

Упаковывает поставку HLS v5. Берёт программное видео x264, аудио AAC и дорожку субтитров WebVTT как группу субтитров.

Параметры этого примера:

  • Output Filenameindex.m3u8. Имя мастер-плейлиста для этого пакета HLS v5.
  • Segment Duration8 sec. Совпадает с длительностью сегмента HLS v3, чтобы поведение кэша было единообразным.

MPEG-DASH (dash)

Выбранный dash с его параметрами

Упаковывает поставку MPEG-DASH. Получает субтитры WebVTT от whisper и формирует манифест DASH. Видео- и аудиопредставления настроены выше по потоку.

Параметры этого примера:

  • Output Filenameindex.mpd. Имя файла манифеста DASH.
  • Fragment Duration8 sec. Восьмисекундные фрагменты согласуются с ритмом сегментов HLS.

MP4 (mp4)

Выбранный mp4 с его параметрами

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

Полный список параметров и компромиссов см. в mp4.

7. Запуск

  1. Откройте Процессы → Создать и либо соберите граф выше, либо импортируйте шаблон адаптивного стриминга.
  2. Задайте $inputURL равным URL источника, а $outputURL — URL назначения, куда должен попасть пакет.
  3. Нажмите Запустить либо привяжите процесс к папке мониторинга для автоматической обработки.
  4. Отслеживайте ход на странице Задачи; плейлисты HLS, манифест DASH, файл ProRes и зеркало входа появятся под URL, заданным в $outputURL.

8. Варианты

  • Уберите ветвь NetInt, когда аппаратного кодера нет; тогда HLS v3 понесёт только копию x264.
  • Переключите Language на узле whisper под язык вашего источника или оставьте пустым для автоопределения.
  • Поднимите Bitrate на x264 и ni264 (с заданием Buffer size на x264) ради более качественной верхней ступени; уменьшите битрейты, чтобы добавить низкоскоростную ступень внизу лестницы.
  • Увеличьте Segment Duration на HLS v3 / HLS v5 до 10 ради меньшего числа более крупных сегментов; лучше попадания в кэш ценой большей задержки запуска.
  • Переключите Format на whisper на SRT, когда процесс ниже по потоку ожидает субтитры SubRip вместо WebVTT.

9. Связанное

  • x264
  • aac
  • mp4
  • H.264 HD — единая поставка H.264 MP4 из того же семейства узлов.
Медиа.маги Документация