Сервіс конвертації медіа
Огляд справи
Це хмарний медіасервіс конвертації, який приймає відео- та аудіофайли і перетворює їх у формат HLS зі підтримкою адаптивної швидкості передачі. Система прослуховує чергу SQS для нових файлів, запускає Kubernetes job для кожного з них і створює повний набір плейлістів m3u8 та сегментів .ts, готових для будь-якого сучасного відеопрогравача.
Підтримує кілька роздільних здатностей для відео, кілька рівнів бітрейту для аудіо та обробляє відео з кількома аудіодоріжками — включно з різними мовами або коментарями. Сервіс працює одночасно для кількох проектів і організовує вихідні дані у окремі папки на S3 відповідно до проекту чи видавця.
Мета: Створити повністю автоматизований сервіс, що конвертує будь-який відео- або аудіофайл у формат HLS без ручного втручання — працюючи одночасно на кількох проектах, обробляючи різноманітний контент і масштабуючись до нуля у режимі простою.
Ключова інформація про проект
Індустрії
Медіа та розваги, платформи відеострімінгу, OTT та трансляційні сервіси, цифрове видавництво, мережі доставки контенту — будь-який бізнес, який потребує доставлення відео- або аудіоконтенту кінцевим користувачам на різних пристроях та за різних умов мережі.
Послуги
Обробка черги SQS із довгим опитуванням і керування часу видимості, медіатранскодування та аналіз потоків за допомогою FFmpeg та FFprobe, оркестрація завдань Kubernetes з епhemeral об'ємами та узгодженням вузлів, паралельний завантажувальний конвеєр 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 job для того самого файлу. Якщо знайдено, повідомлення повторно ставиться в чергу з затримкою, щоб запобігти подвійній обробці.
Створення завдання 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 через пул потоків, мінімізуючи час доставки.
4сек
4-секундні сегменти HLS збалансовують швидкість адаптивного перемикання із ефективністю буферизації — плеєр реагує на зміни мережі в межах одного сегменту.
5x
Кожна аудіодоріжка — включно з коментарями та описом — має до п’яти рівнів якості від 32 кбіт/с (HE-AAC) до 192 кбіт/с (LC-AAC) із нормалізацією гучності.