Служба конвертації медіа

Огляд кейсу

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


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

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

Image

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

Індустрії

Індустрії

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

Сервіси

Сервіси

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

Рішення

Рішення

Багатороздільне HLS-відео — 1080p, 720p, 480p, 360p, 240p із адаптивним бітрейтом, багаторівневе аудіо HLS — 32, 64, 96, 128, 192 kbps рівні для кожної аудіодоріжки, автоматичне виявлення всіх аудіопотоків з метаданими мови, мініатюри на 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 job для того самого файлу. Якщо знайдено, повідомлення пересилається з затримкою, щоб уникнути подвійної обробки.

Створення Kubernetes job

Створення Kubernetes job

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

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

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

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

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

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

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

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

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

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

Рішення

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

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

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

  • Автоматичне визначення кодека — Використовує прискорення 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.
×
Не знаєте, з чого почати? Ми допоможемо визначити наступні кроки!
Згода на обробку персональних даних
×
Є виклик? Наша команда перетворить його на рішення.
Згода на обробку персональних даних