Сервіс медіа конвертації
Огляд кейсу
Це хмарний сервіс конвертації медіа, який приймає відео- та аудіофайли і перетворює їх у формат 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 кбіт/с.
Створення головного плейлиста
Один файл м3u8 містить посилання на всі роздільності відео та аудіодоріжки з мовними метаданими — забезпечуючи адаптивне стрімінгове відтворення та переключення мов у будь-якому сучасному плеєрі.
Завантаження, очищення та автмасштабування
Всі файли завантажуються на S3 паралельно через пул із 500 потоків. Старі сегменти HLS очищуються перед надходженням нового набору. Автомасштабувальник зменшує кількість вузлів до нуля, коли черга порожня.
Рішення
Ключові особливості рішення
Адаптивне відео за бітрейтом - 5 рівнів —240p (300 kbps) → 1080p (5000 kbps) в одному плейлисті. Автовибір якості залежно від швидкості підключення.
Аудіо з кількома доріжками з мовними тегами — Виявляє та конвертує всі аудіодоріжки, включаючи коментарі та описи, збереженням метаданих мови.
Автоматичне виявлення кодека — Використовує апаратне прискорення NVIDIA / Intel / AMD або програмне резервне рішення, якщо відсутня GPU.
Автоматичне масштабування з нульовими витратами у простої — Вузли EC2 масштабуються до нуля, коли черга порожня. Активні завдання захищені від передчасного завершення.
Ізоляція S3 для кількох проєктів — Кожен проєкт має власний шлях виводу в S3. Підтримує структури папок, засновані як на видавцях, так і на серіях.
Результати в цифрах
1080p
П’ять адаптивних рівнів бітрейту від 240p при 300 кбіт/с до Full HD 1080p при 5000 кбіт/с — плеєр автоматично переключає якість залежно від швидкості з’єднання.
500x
Сотні вихідних файлів — сегменти, плейлисти, мініатюри, прев’ю — одночасно завантажуються в S3 через пул потоків, що зберігає мінімальний час доставки.
4сек
4-секундні сегменти HLS балансують швидкість адаптивного перемикання і ефективність буферизації — плеєр реагує на мережеві зміни в межах одного сегменту.
5x
Кожна аудіодоріжка — включно з коментарями та описом — має до п’яти рівнів якості від 32 кбіт/с (HE-AAC) до 192 кбіт/с (LC-AAC) з нормалізацією гучності.