Služba pro převod médií
Přehled případu
Jedná se o cloudovou službu pro převod médií, která převádí video a audio soubory do formátu HLS s podporou adaptivního přenosu datové rychlosti. Systém sleduje frontu SQS pro nové soubory, spouští pro každý z nich úlohu v Kubernetes a vytváří kompletní sadu playlistů m3u8 a segmentů .ts připravených pro jakýkoliv moderní video přehrávač.
Podporuje více rozlišení pro video, více úrovní bitrate pro audio a zvládá videa s několika zvukovými stopami — včetně různých jazyků nebo komentářů. Služba pracuje současně pro více projektů a organizuje výstupy do samostatných složek na S3 podle projektu nebo vydavatele.
Cíl: Vytvořit plně automatizovanou službu, která převede jakýkoli video nebo audio soubor do formátu HLS bez ručního zásahu - fungující napříč více projekty, zvládající různé typy obsahu a škálující na nulu, když je nečinná.
Klíčové informace o projektu
Průmyslová odvětví
Média a zábava, platformy pro streamování videa, OTT a vysílací služby, digitální vydavatelství, sítě pro doručování obsahu — jakýkoli podnik, který potřebuje doručovat video nebo audio obsah koncovým uživatelům na různých zařízeních a při různých podmínkách sítí.
Služby
Zpracování fronty SQS s dlouhým čekáním a správa timeoutů viditelnosti, transkódování médií a analýza streamů pomocí FFmpeg a FFprobe, orchestrace úloh Kubernetes s efemérními volume a node affinity, paralelní pipeline nahrávání do S3 s čištěním před nahráváním.
Řešení
Více rozlišení HLS videa — 1080p, 720p, 480p, 360p, 240p s adaptivním bitrate, více bitrate úrovní audio HLS — 32, 64, 96, 128, 192 kbps na audio stopu, automatická detekce všech audio streamů s jazykovými metadaty, náhledy na 2 sekundě, nízkorozlišovací MP4 náhled, kopie ve formátech MP3 a 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
Výzvy
Proces
Celý proces běží bez lidského zásahu — od momentu, kdy soubor přistane na S3, až po finální HLS výstup připravený k přehrávání. Každý krok přechází plynule do dalšího, s vestavěnou ochranou proti chybám, duplicitám a konfliktům zdrojů. Níže je popsáno, jak systém zpracovává soubor v celém cyklu převodu.
Skenování fronty
Správce úloh běží na Kubernetes a skenuje frontu SQS s dlouhým čekáním. Když přijde zpráva, analyzuje bucket S3 a klíč objektu, aby identifikoval zdrojový soubor.
Prevence duplicit
Před vytvořením nové úlohy správce kontroluje, zda již neexistuje úloha Kubernetes pro stejný soubor. Pokud ano, zpráva je opět zařazena do fronty s prodlevou, aby se předešlo dvojímu zpracování.
Vytvoření úlohy v Kubernetes
Nový pod je vytvořen z šablony s nastavenými limity zdrojů, affinita node pro instance na bázi ARM a efemérní volume pro dočasné soubory, vstup, výstup a logy.
Převod videa a zvuku
FFmpeg převádí video do pěti HLS rozlišení (1080p→240p) s 4 sekundovými segmenty. Každá audio stopa je detekována a převedena do pěti bitrate úrovní — 32 až 192 kbps.
Generování hlavního playlistu
Jeden m3u8 hlavní soubor odkazuje na všechna video rozlišení a audio stopy s jazykovými metadaty — umožňuje adaptivní streamování a přepínání jazyků v jakémkoliv moderním přehrávači.
Nahrávání, čištění a autoscaling
Všechny soubory se nahrávají do S3 paralelně přes pool se 500 vlákny. Staré HLS segmenty jsou odstraněny před tím, než přistane nová sada. Autoscaler škáluje uzly na nulu, jakmile se fronta vyprázdní.
Řešení
Klíčové vlastnosti řešení
Video s adaptivním přenosem datové rychlosti - 5 úrovní —240p (300 kbps) → 1080p (5000 kbps) v jedné playlistu. Automatický výběr kvality podle rychlosti připojení.
Více stop audio s jazykovými značkami — Detekuje a převádí všechny audio stopy, včetně komentářů a popisů, přičemž zachovává jazyková metadata.
Automatická detekce kodeku — Používá akceleraci NVIDIA / Intel / AMD, nebo softwarovou zálohu, pokud není k dispozici GPU.
Autoscaling bez nákladů na nečinnost — EC2 uzly se zmenšují na nulu, když je fronta prázdná. Aktivní úlohy jsou chráněny před předčasným ukončením.
Izolace Multi-Project S3 — Každý projekt má vlastní cestu výstupu S3. Podporuje struktury složek založené jak na vydavateli, tak na sériích.
Výsledky v číslech
1080p
Pět adaptivních úrovní přenosové rychlosti od 240p při 300 kbps až po plné HD 1080p při 5000 kbps — přehrávač automaticky přepíná kvalitu podle rychlosti připojení.
500x
Stovky výstupních souborů — segmenty, seznamy skladeb, miniatury, náhledy — jsou nahrávány do S3 současně pomocí vláknového poolu, což minimalizuje dobu dodání.
4s
4sekundové HLS segmenty vyvažují rychlost adaptivního přepínání s účinností vyrovnávací paměti — přehrávač reaguje na změny sítě v rámci jedné hranice segmentu.
5x
Každá zvuková stopa — včetně komentářů a popisů — má až pět úrovní kvality od 32 kbps (HE-AAC) do 192 kbps (LC-AAC) s normalizací hlasitosti.