Адаптивный стриминг: 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. Обзор процесса

Источник забирается из $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)

Транскрибирует аудио источника в дорожку субтитров WebVTT. Выходной текст питает ccinject, hls5 и dash, поэтому каждая потоковая поставка несёт одни и те же субтитры.
Параметры этого примера:
- Format —
WebVTT. Формат WebVTT требуется для потоковых субтитров HLS v5 и DASH. - Language —
Afrikaans. Ожидаемый язык аудио источника. Меняйте под источник; оставляйте на автоопределении, когда язык неизвестен. - Model —
medium. Выше точность, чем у моделиsmall, ценой большего объёма вычислений.
ProRes (prores)

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

Кодирует приведённое к стерео аудио для каждого потокового выхода. Упаковщики HLS v3, HLS v5 и DASH разделяют эту дорожку AAC.
Параметры этого примера:
- Bitrate —
100KBPS. Стереобитрейт, подходящий под веб-профиль доставки потоковых выходов.
Полный список параметров и компромиссов см. в aac.
x264 (x264)

Программный кодер H.264. Его выход питает копию с субтитрами, подаваемую в HLS v3, HLS v5 и (через ccinject) вариант с субтитрами.
Параметры этого примера:
- H264 Codec Profile —
main. Широко совместимый профиль H.264; подходит для общего стриминга. - Preset —
medium. Сбалансированный пресет скорость/качество. - Rate Control —
ABR. Режим среднего битрейта для предсказуемых размеров сегментов по всей лестнице. - Bitrate —
1000KBPS. Целевой видеобитрейт для программной копии.
Полный список параметров и компромиссов см. в x264.
NetInt H.264 (ni264)

Аппаратно-ускоренный кодер H.264. Создаёт вторую видеокопию для HLS v3 рядом с программной копией x264.
Параметры этого примера:
- Profile —
main. Профиль H.264 для кодера NetInt. - Codec Level —
Auto. Позволяет кодеру выбрать уровень под разрешение и битрейт. - Rate Control —
ABR. Режим среднего битрейта для паритета с программной копией. - vbvBuf size —
3000msec. Задержка инициализации буфера в миллисекундах. - Bitrate —
1000KBPS. Целевой битрейт, согласованный с копией x264 для прямого сравнения. - GOP pattern —
I-B-B-B-P,... (gop_size=4). Повторяющийся паттерн I-B-B-B-P; предсказуемая структура для доставки ABR. - GOP —
92. Максимальная длина GOP в кадрах.
HLS3 (hls3)

Упаковывает многокопийную лестницу HLS v3. На вход поступают обе видеодорожки H.264 (x264 + ni264) вместе с аудио AAC и слитыми через ccinject субтитрами.
Параметры этого примера:
- Segment Duration —
8sec. Стандартные 8-секундные сегменты HLS.
HLS5 (hls5)

Упаковывает поставку HLS v5. Берёт программное видео x264, аудио AAC и дорожку субтитров WebVTT как группу субтитров.
Параметры этого примера:
- Output Filename —
index.m3u8. Имя мастер-плейлиста для этого пакета HLS v5. - Segment Duration —
8sec. Совпадает с длительностью сегмента HLS v3, чтобы поведение кэша было единообразным.
MPEG-DASH (dash)

Упаковывает поставку MPEG-DASH. Получает субтитры WebVTT от whisper и формирует манифест DASH. Видео- и аудиопредставления настроены выше по потоку.
Параметры этого примера:
- Output Filename —
index.mpd. Имя файла манифеста DASH. - Fragment Duration —
8sec. Восьмисекундные фрагменты согласуются с ритмом сегментов HLS.
MP4 (mp4)

На холсте есть мультиплексор MP4, размещённый на будущее; в этом процессе он не подключён и ничего не выводит. Подключите к нему входы видео и аудио, если нужна единая поставка MP4 рядом с потоковыми пакетами.
Полный список параметров и компромиссов см. в mp4.
7. Запуск
- Откройте Процессы → Создать и либо соберите граф выше, либо импортируйте шаблон адаптивного стриминга.
- Задайте
$inputURLравным URL источника, а$outputURL— URL назначения, куда должен попасть пакет. - Нажмите Запустить либо привяжите процесс к папке мониторинга для автоматической обработки.
- Отслеживайте ход на странице Задачи; плейлисты 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.