Nejlepší způsob, jak spravovat videa v měřítku

V dnešním světě se videa stala snadným způsobem, jak vysvětlit jakýkoli nápad a také porozumět jakémukoli tématu. Ukázalo se, že videa vyžadují větší pozornost zákazníků než jakékoli jiné médium. Lidé rádi přistupují k videům kdekoli a kdykoli a pro rozvíjející se společnosti je výzvou nejen poskytovat kvalitní obsah, ale také poskytovat svým zákazníkům dobrý zážitek ze sledování.

Představení naší společnosti -

Jsme platforma 3 lakh ověřených lékařů, největší v zemi. Jako rychle se rozvíjející společnost s produktem hodně experimentujeme a zároveň dávejte pozor, abychom dodávali kvalitní produkt pro všechny. Nedávno jsme umožnili našim uživatelům nahrávat videa z chirurgických zákroků atd., Sdílet jejich nálezy a vyhledávat návrhy od svých kolegů lékařů.

Většina našich uživatelů má na cestách minimální příjem k rychlejším internetovým rychlostem, a to je výzva při poskytování těžkého datového obsahu, jako jsou videa.

Zjistili jsme, že pro doručování videa je zcela zřejmé používat protokol HLS, protože je široce podporovaný, vyvinutý společností Apple a používaný mnoha velkými společnostmi, jako je Facebook. HLS znamená HTTP Live Streaming. Jedná se o protokol streamování médií, který poskytuje video a zvukový obsah. Video mp4 je rozděleno na malé segmenty obvykle po dobu 10 sekund a pro každý segment se také vytvoří více segmentů kvality videa, které lze stáhnout pro přehrávání na základě dostupné internetové šířky pásma.

Takže kdykoli hráč přehraje video ve formátu HLS, může požádat o segment videa na základě dostupné šířky pásma a nepřetržitě streamovat video, což uživatelům poskytuje plynulý zážitek. V jednu chvíli mohou uživatelé sledovat video s nízkým rozlišením a v další chvíli se mohou přepnout na vyšší rozlišení, jakmile je zařízení v dosahu sítě s vyšší šířkou pásma.

Níže jsou uvedena rozlišení, která jsme použili pro náš případ použití, s výjimkou původního rozlišení videa -

Rozlišení videa, které má být vygenerováno

Výzvou bylo transformovat nahraná videa v požadovaném formátu a vygenerovat miniaturu pro zástupný symbol videa. Existuje mnoho poskytovatelů služeb, kteří poskytují transformaci videa a doručení obsahu, ale hlavním problémem je, že jsou cenově dostupní do určitého bodu as růstem společnosti potřebujete řešení, které není zátěží vaší kapsy. AWS MediaConvert a S3 jsou nástroje, které jsme se rozhodli transformovat a doručit naše video média. Pomocí níže uvedeného řešení jsme schopni snížit naše náklady o 90 procent, což je pro společnost v jakémkoli měřítku docela významné. Pokračujte v článku, pokud chcete vědět, jak jsme nulovali řešení.

Počáteční přístup

Místo budování interního řešení jsme se rozhodli použít služby třetích stran, pro které Cloudinary vyhovuje našemu případu použití. Poskytuje on-line službu transformace videa, která skutečně pomohla získat potřebnou transformaci, a celkový čas, který jsme potřebovali, byl také velmi méně.

Vývoj byl rychlejší, protože se nemusíme starat o transformaci. Jeden musí nahrát video, vybrat potřebnou transformaci a Cloudinary udělá zbytek. Zpočátku byl Cloudinary v rámci našeho rozpočtu dobře, ale jakmile tato funkce začala získávat větší trakci, začalo nahrávat videa více uživatelů. Tento růst značil částku, kterou jsme za Cloudinary utráceli, a bylo na čase hledat jiné možnosti.

Naše experimenty

Nejprve jsme otestovali slavnou open source knihovnu - ffmpeg, která je schopna provést video transformaci, kterou jsme potřebovali. Měli jsme dvě možnosti použití knihovny ffmpeg - použití cloudových funkcí nebo použití jedné z již spuštěných instancí VM na GCP (Google Cloud Platform).

Vzhledem k tomu, že celý proces pracuje na modelu na vyžádání, byla druhá možnost odmítnuta. Cloudové funkce jsou založeny na modelu výpočetní techniky na vyžádání, což znamená, že získáme zdroje podle potřeby, aniž by to ovlivnilo naše další služby. Protože je na vyžádání, nemusíme platit náklady na server, když je nečinný.

Cloudové funkce se opravdu snadno používají a poskytují možnost psaní kódu ve dvou nejpopulárnějších jazycích - uzlu a pythonu. Rozhodli jsme se jít s pythonem, protože jsme spokojeni s paradigmatem, protože náš stack je na pythonu. Instalace závislostí je opravdu jednoduchá, stačí ji zmínit v souboru requirements.txt a jste nastaveni.

Skript jsme pracovali pro cloudovou funkci, kde jsme nejprve stáhli video z cloudového úložiště, transformovali jej v požadovaném formátu a přenesli ho zpět do cloudového úložiště pro streamování.

Ale byl tu háček. Našim uživatelům dovolujeme nahrávat videa až do 100 MB a zpracovávat video s cloudovou funkcí této velikosti zabralo hodně času a nakonec skončilo před dokončením celého procesu z důvodu časového limitu (540 sekund). Na naši obranu jsme o tomto scénáři neuvažovali dříve.

Po prozkoumání dalších možností a mnoha průzkumů vypadal AWS MediaConvert slibně. Práce s programem MediaConvert byla ošidná, protože nabízí mnoho možností přizpůsobení vaší transformace a v této situaci lze snadno ztratit (zkaženo výběrem). Ale po nějaké době rozhlédnutí jsme dostali šablonu potřebnou pro naši požadovanou transformaci. (připojte šablonu)

Celý náš tok vypadal jako -

Nahráváme video do kbelíku S3, který zase spouští funkci Lambda. V lambda určíme parametry potřebné jako vstup pro MediaConvert pomocí jiných než ffmpeg. Po výpočtu všech parametrů odešlete AWS MediaConvert požadavek na transformaci našeho videa. Chcete-li dostávat upozornění na dokončení transformace, můžete si vytvořit událost cloudového sledování stavu změny úlohy odeslané v programu MediaConvert z „postupující“ na „dokončovací“, což zase spustí funkci lambda. Spuštěná funkce lambda může provést volání api nebo provést aktualizaci db na základě proveditelnosti vašeho projektu.

Ve zkratce :

Řešení AWS fungovalo jako kouzlo a bylo to opravdu rychlé. Může to vypadat jako hodně práce, ale stojí za to udělat, pokud potřebujete měřítko.

Výhody použití tohoto řešení -

  • Používáme S3 k ukládání a doručování našeho mediálního obsahu, který je také velmi škálovatelný a cenově dostupný.
  • AWS MediaConvert je opravdu rychlý a poskytuje funkce pro udržování několika front pro odesílání úloh k transformaci. Nemusíte se tedy obávat náhlého skoku v požadavcích na zpracování videa. Také ceny jsou opravdu ekonomické, žádné měsíční poplatky a musíte platit pouze za použité služby.
  • AWS Lambda je založena na výpočtu na vyžádání, o kterém jsme již diskutovali výše. Kromě toho vám AWS poskytuje bezplatnou lambda vyvolání a dobu CPU funkce Lambda za měsíc, což je opravdu skvělé a dokonce i použití nad rámec cen za volné vrstvy nezatěžuje vaši kapsu.

Problémy, kterým čelí během nasazení AWS:

  • Vždy pamatujte, že AWS poskytuje služby založené na regionech, s výjimkou několika jako S3, které jsou k dispozici na globální úrovni. Používejte služby ve stejném regionu, jinak nebudete schopni zachytit události nebo spustit funkce lambda.
  • Poskytněte nezbytné oprávnění vaší roli IAM pro služby, které používáte.
  • Jak bylo uvedeno výše, nahrávání videa do S3 kbelíku spustí funkci lambda, kde vyplníme potřebné transformační detaily, jako je rozlišení výsledných videí, bitová rychlost atd. A pro tyto hodnoty musíte najít metadata videa nahraného jako výška , šířka a bitrate. Musíte použít nějakou knihovnu pro zpracování videa, jako je ffmpeg, abyste získali tuto hodnotu, která není předem načtena na kontejneru, na kterém běží naše lambda, protože lambda běží na jednom nebo více kontejnerech, které jsou vytvořeny a na požádání podle potřeby odstraněny.
  • Na rozdíl od Google Cloud Functions, kde stačí přidat název knihovny v požadavcích.txt a oni zvládnou zbytek, pro AWS lambda musíte vytvořit zip soubor všech knihoven a binárních souborů použitých ve funkci lambda. Po provedeném výzkumu jsme zjistili, že můžete přidat binární soubory ffmpeg do složky / tmp a použít je ve vaší funkci. Kroky pro zahrnutí ffmpeg do vaší cesty najdete zde a vytvoření balíčku implementace aws lambda naleznete zde.
  • Při testování jsme zjistili, že videa natočená na zařízeních iOS se po transformaci otočila z portrétu na šířku (diskuse o zásobníkuOverflow a fórum AWS). Důvodem je video pořízené na zařízení iOS, které bylo původně uloženo v režimu na šířku s příznakem v metadatových datech videa, která hráči řeknou, aby během přehrávání otáčel video. Při provádění transformace se identifikátor rotace ztratí a proto se video přehrává v režimu na šířku a vypadá jako otočené.
  • Abychom toto překonali, identifikovali jsme tato videa pomocí ffmpeg. Tato videa mají hodnotu „rotace“ v „matici zobrazení“ metadat videa, která lze získat pomocí ffmpeg. Pak tato videa otočte na základě dané rotace a nyní máte otočené video, které lze snadno transformovat pomocí výše uvedené techniky.

Pokud shledáte tento článek užitečným, stiskněte prosím tolikrát, kolikrát se vám líbí. Pokud potřebujete pomoc v některém z výše uvedených kroků, neváhejte a kontaktujte.