Сервіс конвертації медіа
Огляд кейсу
Це хмарний сервіс конвертації медіа, який перетворює відео- та аудіофайли у формат HLS для потокового відтворення з підтримкою адаптивної швидкості передачі. Система слухає чергу SQS на предмет нових файлів, для кожного запускає задачу Kubernetes і створює повний набір плейлистів m3u8 і сегментів .ts, готових до відтворення в будь-якому сучасному відеоплеєрі.
Підтримує кілька роздільних здатностей для відео, кілька рівнів бітрейту для аудіо, а також обробляє відео з кількома аудіодоріжками — включно з різними мовами або коментарями. Сервіс працює одночасно для кількох проектів і організовує вихідні дані в окремі папки на S3 залежно від проекту чи видавця.
Мета: Створити повністю автоматизований сервіс, який конвертує будь-який відео-або аудіофайл у формат HLS без ручного втручання — працюючи над кількома проектами, обробляючи різноманітні типи контенту та масштабуючись до нуля у режимі простою.
Основна інформація про проєкт
Індустрії
Медіа та розваги, платформи потокового відео, 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
Виклики
Процес
Весь конвеєр працює без участі людини — від моменту потрапляння файлу на S3 до готовності кінцевого HLS-виводу для відтворення. Кожен етап плавно передає естафету наступному, з вбудованими заходами безпеки для збоїв, дублікатів та конкуренції за ресурси. Нижче описано, як система проходить файл повним циклом конвертації.
Опитування черги
Менеджер завдань працює на Kubernetes і опитує чергу SQS за допомогою довгого опитування. Коли приходить повідомлення, він розбирає відро S3 та ключ об’єкта, щоб визначити вихідний файл.
Запобігання дублюванню
Перед створенням нової задачі менеджер перевіряє наявність існуючої задачі 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. Підтримує структури папок як за видавцем, так і за серіями.
Результати у цифрах
1080p
П’ять рівнів адаптивної швидкості передачі від 240p при 300 кбіт/с до повного HD 1080p при 5000 кбіт/с — плеєр автоматично перемикає якість залежно від швидкості з’єднання.
500x
Сотні файлових виходів — сегменти, плейлисти, ескізи, прев’ю — одночасно завантажуються в S3 через пул потоків, мінімізуючи час доставки.
4sec
4-секундні сегменти HLS балансують швидкість адаптивного перемикання та ефективність буферизації — плеєр реагує на зміни мережі протягом одного сегмента.
5x
Кожна аудіодоріжка — включно з коментарем та описом — має до п’яти рівнів якості від 32 кбіт/с (HE-AAC) до 192 кбіт/с (LC-AAC) з нормалізацією гучності.