Usługa Konwersji Mediów
Przegląd przypadku
To usługa konwersji mediów w chmurze, która pobiera pliki wideo i audio i zamienia je na format strumieniowy HLS z obsługą zmiennej przepływności. System nasłuchuje kolejki SQS na nowe pliki, uruchamia zadanie Kubernetes dla każdego z nich i generuje pełen zestaw playlist m3u8 oraz segmentów .ts gotowych do odtwarzania na dowolnym nowoczesnym odtwarzaczu wideo.
Obsługuje wiele rozdzielczości wideo, różne poziomy bitrate audio oraz obsługuje filmy z kilkoma ścieżkami audio — w tym różnymi językami lub komentarzami. Usługa działa jednocześnie dla wielu projektów i organizuje wyniki w oddzielnych folderach na S3 w zależności od projektu lub wydawcy.
Cel: Stworzyć w pełni zautomatyzowaną usługę, która konwertuje dowolny plik wideo lub audio do formatu HLS bez ręcznej ingerencji — działającą dla wielu projektów, obsługującą różnorodne typy treści i skalującą się do zera w czasie bezczynności.
Kluczowe informacje o projekcie
Branże
Media i rozrywka, platformy strumieniowania wideo, usługi OTT i nadawanie, wydawnictwa cyfrowe, sieci dostarczania treści — każdy biznes, który musi dostarczać treści wideo lub audio do użytkowników na różnych urządzeniach i przy zmiennych warunkach sieciowych.
Usługi
Przetwarzanie kolejki SQS z długim pollowaniem i zarządzaniem czasem widoczności, transkodowanie mediów i analiza strumieni FFmpeg & FFprobe, orkiestracja zadań Kubernetes z wolumenami efemerycznymi i afinitetem do węzłów, równoległy pipeline przesyłania do S3 z czyszczeniem przed przesłaniem.
Rozwiązania
Wielorozdzielczościowe wideo HLS — 1080p, 720p, 480p, 360p, 240p z adaptacyjnym bitrate, Wielostopniowe audio HLS — poziomy 32, 64, 96, 128, 192 kbps dla każdej ścieżki audio, Automatyczne wykrywanie wszystkich strumieni audio z metadanymi językowymi, Miniatury przy 2 sekundach, niskoresolucyjny podgląd 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ły pipeline działa bez udziału człowieka — od momentu pojawienia się pliku na S3 do finalnego wyjścia HLS gotowego do odtwarzania. Każdy krok płynnie przekazuje dalej, z wbudowanymi zabezpieczeniami przed błędami, duplikatami i rywalizacją o zasoby. Poniżej opisano, jak system przetwarza plik przez cały cykl konwersji.
Odczyt kolejki
Menedżer zadań działa na Kubernetes i odczytuje kolejkę SQS z długim pollowaniem. Gdy pojawia się wiadomość, analizuje kubełek S3 i klucz obiektu, aby zidentyfikować plik źródłowy.
Zapobieganie duplikatom
Przed utworzeniem nowego zadania menedżer sprawdza, czy istnieje już zadanie Kubernetes dla tego samego pliku. Jeśli tak, wiadomość jest ponownie dodawana do kolejki z opóźnieniem, aby zapobiec podwójnemu przetwarzaniu.
Tworzenie zadań Kubernetes
Nowy pod tworzony jest na podstawie szablonu z odpowiednimi limitami zasobów, afinitetem do węzłów na bazie 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 głównej
Pojedynczy plik m3u8 master odnosi się do wszystkich rozdzielczości wideo i ścieżek audio z metadanymi językowymi — umożliwiając adaptacyjne strumieniowanie i zmianę języka w dowolnym nowoczesnym odtwarzaczu.
Przesyłanie, czyszczenie i autoskalowanie
Wszystkie pliki są przesyłane do S3 równolegle przez pulę 500 wątków. Stare segmenty HLS są usuwane przed pojawieniem się nowego zestawu. Autoskalowanie zmniejsza liczbę węzłów do zera, gdy kolejka jest pusta.
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 prędkości połączenia.
Wielościeżkowe audio z etykietami językowymi — Wykrywa i konwertuje wszystkie ścieżki audio, w tym komentarze i opisy, zachowując metadane językowe.
Automatyczne wykrywanie kodeków — Wykorzystuje akcelerację NVIDIA / Intel / AMD lub oprogramowanie zastępcze, jeśli brak GPU.
Automatyczne skalowanie bez kosztów bezczynności — Węzły EC2 zmniejszają skalę do zera, gdy kolejka jest pusta. Aktywne zadania są chronione przed przedwczesnym zakończeniem.
Izolacja S3 dla wielu projektów — Każdy projekt ma własną ścieżkę wyjściową S3. Obsługuje struktury folderów oparte zarówno na wydawcy, jak i serii.
Wyniki w liczbach
1080p
Pięć poziomów adaptacyjnej przepływności od 240p przy 300 kbps do pełnego HD 1080p przy 5000 kbps — odtwarzacz automatycznie zmienia jakość na podstawie szybkości połączenia.
500x
Setki plików wyjściowych — segmenty, playlisty, miniaturki, podglądy — są przesyłane do S3 jednocześnie za pomocą puli wątków, co minimalizuje czas dostawy.
4sek
4-sekundowe segmenty HLS równoważą szybkość adaptacyjnego przełączania z efektywnością buforowania — odtwarzacz reaguje na zmiany sieci w granicach pojedynczego segmentu.
5x
Każda ścieżka audio — w tym komentarze i opisy — ma do pięciu poziomów jakości od 32 kbps (HE-AAC) do 192 kbps (LC-AAC) z normalizacją głośności.