Сервіс конвертації медіа

Огляд кейсу

Це хмарний сервіс конвертації медіа, який перетворює відео- та аудіофайли у формат HLS для потокового відтворення з підтримкою адаптивної швидкості передачі. Система слухає чергу SQS на предмет нових файлів, для кожного запускає задачу Kubernetes і створює повний набір плейлистів m3u8 і сегментів .ts, готових до відтворення в будь-якому сучасному відеоплеєрі.


Підтримує кілька роздільних здатностей для відео, кілька рівнів бітрейту для аудіо, а також обробляє відео з кількома аудіодоріжками — включно з різними мовами або коментарями. Сервіс працює одночасно для кількох проектів і організовує вихідні дані в окремі папки на S3 залежно від проекту чи видавця.

Мета: Створити повністю автоматизований сервіс, який конвертує будь-який відео-або аудіофайл у формат HLS без ручного втручання — працюючи над кількома проектами, обробляючи різноманітні типи контенту та масштабуючись до нуля у режимі простою.

Image

Основна інформація про проєкт

Індустрії

Індустрії

Медіа та розваги, платформи потокового відео, OTT та трансляційні сервіси, цифрове видавництво, мережі доставки контенту — будь-який бізнес, що потребує доставки відео або аудіо контенту кінцевим користувачам на різних пристроях і при різних мережевих умовах.

Послуги

Послуги

Обробка черги SQS з довгим опитуванням і керуванням таймаутом видимості, медіа-транскодування та аналіз потоків за допомогою FFmpeg і FFprobe, оркестрація задач Kubernetes з тимчасовими томами та афінністю вузлів, паралельний конвеєр завантаження в S3 з попереднім очищенням.

Рішення

Рішення

Відео з багатою роздільною здатністю HLS — 1080p, 720p, 480p, 360p, 240p з адаптивним бітрейтом, аудіо HLS з кількома бітрейтами — 32, 64, 96, 128, 192 кбіт/с на кожну аудіодоріжку, автоматичне визначення всіх аудіопотоків з метаданими мови, мініатюри на позначці 2 секунди, низькороздільний MP4-огляд, копії у форматах MP3 і WAV.

Технології

Технології

AWS SQS, S3, Kubernetes, FFmpeg, FFprobe, H.264, AAC/HE-AAC, HLS/m3u8, NVIDIA NVENC, Intel Quick Sync, EC2 Auto Scaling, Docker, Helm

Виклики

Багато форматів вихідних даних
з одного вхідного файлу

Багато форматів вихідних даних з одного вхідного файлу

Один відеофайл може породити сотні файлів — п’ять роздільних здібностей відео, п’ять аудіобітрейтів на кожну аудіодоріжку, плюс мініатюри та прев’ю. Ми мусили все це акуратно організувати та швидко завантажити.

Декілька аудіопотоків на відеофайл

Декілька аудіопотоків на відеофайл

Деякі відео мають декілька аудіодоріжок різними мовами. Система мусила автоматично їх усі виявляти, конвертувати кожну окремо та формувати головний плейлист, що посилається на кожну доріжку з правильною мовною міткою.

Надійність черги
та логіка повторів

Надійність черги та логіка повторів

З SQS потрібно коректно обробляти дублікати, таймаути видимості та невдалі задачі. Якщо задача не вдається, повідомлення має повернутися в чергу для повторної спроби. Якщо той самий файл додано в чергу двічі, ми не повинні його обробляти повторно.

Керування в Kubernetes

Керування в Kubernetes

Кожна задача конвертації використовує багато CPU та пам’яті. Потрібно було налаштувати тимчасові томи, правила афінності вузлів і правильне очищення, щоб задачі не накопичувалися і не блокували одна одну.

Ізоляція кількох проектів на S3

Ізоляція кількох проектів на S3

Сервіс працює одночасно для кількох проектів. Кожен має свій шлях виводу на S3, і ми мусили підтримувати структури папок за видавцем і за серіями, не порушуючи нічого.

Автоматичний вибір кодеків

Автоматичний вибір кодеків

Не кожна машина має апаратне прискорення GPU. Система мусила виявляти доступні кодеки — NVIDIA, Intel Quick Sync, AMD чи просто програмні — і автоматично обирати найкращий.

Процес

Весь конвеєр працює без участі людини — від моменту потрапляння файлу на S3 до готовності кінцевого HLS-виводу для відтворення. Кожен етап плавно передає естафету наступному, з вбудованими заходами безпеки для збоїв, дублікатів та конкуренції за ресурси. Нижче описано, як система проходить файл повним циклом конвертації.

Опитування черги

Опитування черги

Менеджер завдань працює на Kubernetes і опитує чергу SQS за допомогою довгого опитування. Коли приходить повідомлення, він розбирає відро S3 та ключ об’єкта, щоб визначити вихідний файл.

Запобігання дублюванню

Запобігання дублюванню

Перед створенням нової задачі менеджер перевіряє наявність існуючої задачі Kubernetes для того самого файлу. Якщо така є, повідомлення повторно додають до черги з затримкою, щоб уникнути подвійної обробки.

Створення задачі Kubernetes

Створення задачі Kubernetes

Новий под створюється з шаблону з правильними лімітами ресурсів, афінністю вузлів для інстансів на ARM та тимчасовими томами для тимчасових файлів, вхідних, вихідних і логів.

Конвертація відео та аудіо

Конвертація відео та аудіо

FFmpeg конвертує відео у п’ять роздільних здатностей HLS (з 1080p до 240p) зі сегментами по 4 секунди. Кожна аудіодоріжка виявляється та конвертується у п’ять рівнів бітрейту — від 32 до 192 кбіт/с.

Генерація головного плейлиста

Генерація головного плейлиста

Один файл m3u8 master посилається на всі роздільні здатності відео і аудіодоріжки з метаданими мови — це дає адаптивне стрімінг і можливість перемикання мови в будь-якому сучасному плеєрі.

Завантаження, очищення та автоскейлінг

Завантаження, очищення та автоскейлінг

Усі файли завантажуються в S3 паралельно через пул з 500 потоків. Старі сегменти HLS очищуються перед появою нового набору. Автоскейлер знижує кількість вузлів до нуля, коли черга порожня.

Рішення

Ключові особливості рішення

  • Адаптивне відео з бітрейтом - 5 рівнів — 240p (300 кбіт/с) → 1080p (5000 кбіт/с) в одному плейлисті. Автоматичний вибір якості на основі швидкості з’єднання.

  • Аудіо з мультидорожками і мовними тегами — Виявляє та конвертує всі аудіодоріжки, включно з коментарями та описами, зберігаючи метадані мови.

  • Автоматичне визначення кодека — Використовує прискорення NVIDIA / Intel / AMD або програмний резервний варіант, якщо GPU відсутній.

  • Автошкалювання без витрат у стані очікування — Вузли EC2 масштабуються до нуля, коли черга порожня. Активні завдання захищені від передчасного завершення.

  • Ізоляція S3 для кількох проєктів — Кожен проєкт має власний шлях виводу в S3. Підтримує структури папок як за видавцем, так і за серіями.


Image

Результати у цифрах

Покриття якості відео

1080p

П’ять рівнів адаптивної швидкості передачі від 240p при 300 кбіт/с до повного HD 1080p при 5000 кбіт/с — плеєр автоматично перемикає якість залежно від швидкості з’єднання.

Паралельні потоки завантаження

500x

Сотні файлових виходів — сегменти, плейлисти, ескізи, прев’ю — одночасно завантажуються в S3 через пул потоків, мінімізуючи час доставки.

Тривалість сегментів HLS

4sec

4-секундні сегменти HLS балансують швидкість адаптивного перемикання та ефективність буферизації — плеєр реагує на зміни мережі протягом одного сегмента.

Рівні бітрейту аудіо на доріжку

5x

Кожна аудіодоріжка — включно з коментарем та описом — має до п’яти рівнів якості від 32 кбіт/с (HE-AAC) до 192 кбіт/с (LC-AAC) з нормалізацією гучності.

Побудуйте масштабований медіапайплайн для вашої платформи!

Отримайте повністю автоматизовану систему конвертації HLS, що масштабується з вашим контентом — і ми допоможемо вам знайти оптимальну архітектуру для вашого проєкту.

Message not sent.
Message not sent.
×
Не знаєте, з чого почати? Ми допоможемо вам окреслити наступні кроки!
Згода на обробку персональних даних
×
Є виклик? Наша команда перетворить його на рішення.
Згода на обробку персональних даних