Usługa konwersji mediów
Przegląd przypadku
To usługa konwersji mediów w chmurze, która przetwarza pliki wideo i audio na format HLS z obsługą adaptacyjnego bitrate. System nasłuchuje kolejki SQS na nowe pliki, uruchamia zadanie Kubernetes dla każdego z nich i generuje pełny zestaw playlist m3u8 oraz segmentów .ts gotowych do odtwarzania w nowoczesnych odtwarzaczach wideo.
Obsługuje wiele rozdzielczości wideo, wiele poziomów bitrate dla audio oraz obsługuje filmy z wieloma ścieżkami dźwiękowymi – w tym w różnych językach lub komentarzach. Usługa działa jednocześnie dla wielu projektów i organizuje wyniki w osobnych folderach na S3 w zależności od projektu lub wydawcy.
Cel: Zbudować w pełni zautomatyzowaną usługę, która konwertuje dowolny plik wideo lub audio do formatu HLS bez ręcznej ingerencji - działającą na wielu projektach, obsługującą różnorodne typy treści i skalującą się do zera w stanie bezczynności.
Kluczowe informacje o projekcie
Branże
Media i rozrywka, platformy strumieniowania wideo, usługi OTT i nadawcze, publikacje cyfrowe, sieci dostarczania treści — każdy biznes potrzebujący dostarczania treści wideo lub audio użytkownikom końcowym na różnych urządzeniach i przy zmiennych warunkach sieciowych.
Usługi
Przetwarzanie kolejki SQS z długim pollingiem i zarządzaniem czasem widoczności, transcoding mediów FFmpeg i analiza strumieni FFprobe, orkiestracja zadań Kubernetes z wolumenami efemerycznymi i regułami affiniteci węzłów, równoległy pipeline uploadu do S3 z czyszczeniem przed wysłaniem.
Rozwiązania
Wideo HLS o wielu rozdzielczościach — 1080p, 720p, 480p, 360p, 240p z adaptacyjnym bitrate, audio HLS o wielu poziomach bitrate — 32, 64, 96, 128, 192 kbps na ścieżkę audio, automatyczne wykrywanie wszystkich strumieni audio z metadanymi językowymi, miniaturki na 2 sekundzie, podgląd w niskiej rozdzielczości MP4, kopie MP3 i WAV.
Technologie
AWS SQS, S3, Kubernetes, FFmpeg, FFprobe, H.264, AAC/HE-AAC, HLS/m3u8, NVIDIA NVENC, Intel Quick Sync, EC2 Auto Scaling, Docker, Helm
Wyzwania
Proces
Cała procedura przebiega bez udziału człowieka — od momentu załadowania pliku na S3 aż do gotowego wyjścia HLS do odtwarzania. Każdy etap płynnie przekazuje zadanie do następnego, z wbudowanymi zabezpieczeniami na wypadek awarii, duplikatów i konfliktów zasobów. Poniżej opisano, jak system przetwarza plik przez cały cykl konwersji.
Monitorowanie kolejki
Manager zadań działa na Kubernetes i nasłuchuje kolejki SQS za pomocą długiego pollingu. Gdy przychodzi wiadomość, analizuje bucket S3 i klucz obiektu, aby zidentyfikować plik źródłowy.
Zapobieganie duplikatom
Przed utworzeniem nowego zadania manager sprawdza, czy dla tego pliku istnieje już zadanie Kubernetes. Jeśli tak, wiadomość jest ponownie umieszczana w kolejce z opóźnieniem, aby zapobiec podwójnemu przetwarzaniu.
Tworzenie zadań Kubernetes
Nowy pod tworzony jest z szablonu z poprawnymi limitami zasobów, affinitetą węzłów dla instancji ARM oraz wolumenami efemerycznymi na pliki tymczasowe, wejście, wyjście i logi.
Konwersja wideo i audio
FFmpeg konwertuje wideo na pięć rozdzielczości HLS (1080p→240p) z segmentami 4-sekundowymi. Każda ścieżka audio jest wykrywana i konwertowana na pięć poziomów bitrate – od 32 do 192 kbps.
Generowanie playlisty master
Jeden plik m3u8 master odwołuje się do wszystkich rozdzielczości wideo i ścieżek audio z metadanymi językowymi — umożliwiając adaptacyjne strumieniowanie i przełączanie języków w każdym nowoczesnym odtwarzaczu.
Przesyłanie, czyszczenie i autoskalowanie
Wszystkie pliki są przesyłane do S3 równolegle za pomocą puli 500 wątków. Stare segmenty HLS są usuwane przed pojawieniem się nowych. Autoskalowacz zmniejsza liczbę węzłów do zera, gdy kolejka się opróżnia.
Rozwiązania
Kluczowe cechy rozwiązania
Adaptacyjne wideo z bitrate - 5 poziomów — 240p (300 kbps) → 1080p (5000 kbps) w jednej playliście. Automatyczny dobór jakości na podstawie szybkości połączenia.
Wielościeżkowe audio z tagami językowymi — Wykrywa i konwertuje wszystkie ścieżki audio, w tym komentarze i opisy, zachowując metadane językowe.
Automatyczne wykrywanie kodeka — Wykorzystuje przyspieszenie NVIDIA / Intel / AMD lub software'owy fallback, jeśli brak GPU.
Automatyczne skalowanie Zero Idle Cost — Węzły EC2 zmniejszają się do zera, gdy kolejka jest pusta. Aktywne zadania są chronione przed przedwczesnym zakończeniem.
Izolacja Multi-Project S3 — Każdy projekt ma swoją własną ścieżkę wyjściową S3. Obsługuje zarówno struktury folderów oparte na wydawcy, jak i na serii.
Wyniki w liczbach
1080p
Pięć warstw adaptacyjnej przepływności od 240p przy 300 kbps do pełnego HD 1080p przy 5000 kbps — odtwarzacz automatycznie zmienia jakość w zależności od szybkości łącza.
500x
Setki plików wyjściowych — segmenty, playlisty, miniatury, podglądy — są przesyłane do S3 jednocześnie za pomocą puli wątków, minimalizując czas dostawy.
4sek
4-sekundowe segmenty HLS balansują szybkość adaptacyjnej zmiany jakości z wydajnością buforowania — odtwarzacz reaguje na zmiany sieci w granicach jednego segmentu.
5x
Każda ścieżka audio — w tym komentarze i opis — ma do pięciu poziomów jakości od 32 kbps (HE-AAC) do 192 kbps (LC-AAC) z normalizacją głośności.