Kā mēs astoņas reizes paātrinājām video kodÄ“Å”anu

Kā mēs astoņas reizes paātrinājām video kodÄ“Å”anu

Katru dienu miljoniem skatÄ«tāju skatās video internetā. Bet, lai video kļūtu pieejams, tas ir ne tikai jāaugÅ”upielādē serverÄ«, bet arÄ« jāapstrādā. Jo ātrāk tas notiek, jo labāk pakalpojumam un tā lietotājiem.

Mani sauc Askars Kamalovs, pirms gada pievienojos Yandex video tehnoloÄ£iju komandai. Å odien Ä«si pastāstÄ«Å”u Habr lasÄ«tājiem par to, kā, paralēli veicot kodÄ“Å”anas procesu, mums izdevās ievērojami paātrināt video piegādi lietotājam.

Å is ieraksts galvenokārt bÅ«s interesants tiem, kuri iepriekÅ” nav domājuÅ”i par to, kas notiek zem video pakalpojumu pārsega. Komentāros varat uzdot jautājumus un ieteikt tēmas turpmākajiem ierakstiem.

Daži vārdi par paÅ”u uzdevumu. Yandex ne tikai palÄ«dz meklēt videoklipus citās vietnēs, bet arÄ« saglabā videoklipus saviem pakalpojumiem. NeatkarÄ«gi no tā, vai tā ir oriÄ£ināla programma vai sporta mačs ēterā, filma vietnē KinoPoisk vai video pakalpojumā Zen un News ā€” tas viss tiek augÅ”upielādēts mÅ«su serveros. Lai lietotāji varētu skatÄ«ties videoklipu, tas ir jāsagatavo: jāpārveido vajadzÄ«gajā formātā, jāizveido priekÅ”skatÄ«jums vai pat jāpalaiž cauri tehnoloÄ£ijai DeepHD. Nesagatavots fails vienkārÅ”i aizņem vietu. Turklāt mēs runājam ne tikai par optimālu aparatÅ«ras izmantoÅ”anu, bet arÄ« par satura piegādes ātrumu lietotājiem. Piemērs: hokeja spēles izŔķiroŔā brīža ierakstu var meklēt minÅ«tes laikā pēc paÅ”a notikuma.

SecÄ«gā kodÄ“Å”ana

Tātad lietotāja laime lielā mērā ir atkarÄ«ga no tā, cik ātri videoklips kļūst pieejams. Un to galvenokārt nosaka pārkodÄ“Å”anas ātrums. Ja video augÅ”upielādes ātrumam nav stingru prasÄ«bu, tad problēmu nav. JÅ«s paņemat vienu, nedalāmu failu, konvertējat to un augÅ”upielādējat to. Ceļojuma sākumā mēs strādājām Ŕādi:

Kā mēs astoņas reizes paātrinājām video kodÄ“Å”anu

Klients augÅ”upielādē video krātuvē, komponents Analyzer apkopo meta informāciju un pārsÅ«ta video uz Worker komponentu konvertÄ“Å”anai. Visi posmi tiek veikti secÄ«gi. Å ajā gadÄ«jumā var bÅ«t daudz kodÄ“Å”anas serveru, bet tikai viens ir aizņemts ar konkrēta video apstrādi. VienkārÅ”a, caurspÄ«dÄ«ga diagramma. Å eit tās priekÅ”rocÄ«bas beidzas. Å o shēmu var mērogot tikai vertikāli (jaudÄ«gāku serveru iegādes dēļ).

SecÄ«gā kodÄ“Å”ana ar starprezultātu

Lai kaut kā izlÄ«dzinātu sāpÄ«go gaidÄ«Å”anu, nozare nāca klajā ar ātru kodÄ“Å”anas iespēju. Nosaukums ir maldinoÅ”s, jo patiesÄ«bā pilna kodÄ“Å”ana notiek secÄ«gi un aizņem tikpat ilgu laiku. Bet ar starprezultātu. Ideja ir Ŕāda: pēc iespējas ātrāk sagatavojiet un publicējiet video zemas izŔķirtspējas versiju un tikai pēc tam augstākas izŔķirtspējas versijas.

No vienas puses, video kļūst pieejams ātrāk. Un tas noder svarīgiem notikumiem. Bet, no otras puses, attēls izrādās izplūdis, un tas skatītājus kaitina.

Izrādās, ka nepiecieÅ”ams ne tikai ātri apstrādāt video, bet arÄ« saglabāt tā kvalitāti. Tas ir tas, ko lietotāji tagad sagaida no video pakalpojuma. Var Ŕķist, ka pietiek iegādāties produktÄ«vākos serverus (un regulāri atjaunināt tos visus uzreiz). Bet tas ir strupceļŔ, jo vienmēr ir kāds video, kas pat jaudÄ«gākajai aparatÅ«rai liks bremzēt.

Paralēlā kodÄ“Å”ana

Daudz efektÄ«vāk ir sadalÄ«t sarežģītu problēmu daudzās mazāk sarežģītās un risināt tās paralēli dažādos serveros. Å is ir MapReduce video. Å ajā gadÄ«jumā mÅ«s neierobežo viena servera veiktspēja un varam mērogot horizontāli (pievienojot jaunas maŔīnas).

Starp citu, ideja sadalÄ«t video mazos gabaliņos, paralēli apstrādāt un salÄ«mēt kopā nav nekāds noslēpums. JÅ«s varat atrast daudzas atsauces uz Å”o pieeju (piemēram, vietnē HabrĆ© es iesaku ievietot ziņu par projektu DistVIDc). Taču tas kopumā to nepadara vieglāk, jo nevar vienkārÅ”i paņemt gatavu risinājumu un iebÅ«vēt to savā mājā. Mums ir jāpielāgojas mÅ«su infrastruktÅ«rai, video un pat slodzei. Kopumā ir vieglāk rakstÄ«t pats.

Tātad jaunajā arhitektÅ«rā mēs sadalÄ«jām monolÄ«tu Worker bloku ar secÄ«gu kodÄ“Å”anu mikropakalpojumos Segmenter, Tcoder, Combiner.

Kā mēs astoņas reizes paātrinājām video kodÄ“Å”anu

  1. Segmentētājs sadala videoklipu aptuveni 10 sekunžu garos fragmentos. Fragmenti sastāv no viena vai vairākiem GOP (attēlu grupa). Katra GOP ir neatkarÄ«ga un kodēta atseviŔķi, lai to varētu atkodēt, neatsaucoties uz citu GOP kadriem. Tas ir, fragmentus var atskaņot neatkarÄ«gi vienu no otra. Å Ä« sadalÄ«Å”ana samazina latentumu, ļaujot apstrādi sākt agrāk.
  2. Tcoder apstrādā katru fragmentu. Tas aizņem uzdevumu no rindas, lejupielādē fragmentu no krātuves, kodē to dažādās izŔķirtspējās (atcerieties, ka atskaņotājs var izvēlēties versiju, pamatojoties uz savienojuma ātrumu), pēc tam ievieto rezultātu atpakaļ krātuvē un atzÄ«mē fragmentu kā apstrādātu. datu bāzē. Pēc visu fragmentu apstrādes Tcoder nosÅ«ta uzdevumu, lai Ä£enerētu rezultātus nākamajam komponentam.
  3. Combiner apkopo rezultātus kopā: lejupielādē visus Tcoder izveidotos fragmentus, Ä£enerē straumes dažādām izŔķirtspējām.

Daži vārdi par skaņu. Vispopulārākajam AAC audio kodekam ir nepatÄ«kama funkcija. Ja kodējat fragmentus atseviŔķi, jÅ«s vienkārÅ”i nevarēsit tos nemanāmi salÄ«mēt kopā. Pārejas bÅ«s pamanāmas. Video kodekiem Ŕīs problēmas nav. Teorētiski var meklēt sarežģītu tehnisko risinājumu, taču Ŕī spēle vienkārÅ”i vēl nav sveces vērta (audio sver ievērojami mazāk nekā video). Tāpēc paralēli tiek kodēts tikai video, un tiek apstrādāts viss audio celiņŔ.

rezultātus

Pateicoties paralēlajai video apstrādei, esam ievērojami samazinājuÅ”i aizkavi starp videoklipa augÅ”upielādi mums un to pieejamÄ«bu lietotājiem. Piemēram, iepriekÅ” varēja bÅ«t nepiecieÅ”amas divas stundas, lai izveidotu vairākas pilnas dažādas kvalitātes pilnas versijas pusotru stundu ilgajai FullHD filmai. Tagad tas viss aizņem 15 minÅ«tes. Turklāt, izmantojot paralēlo apstrādi, mēs izveidojam augstas izŔķirtspējas versiju pat ātrāk nekā zemas izŔķirtspējas versiju ar veco starprezultāta pieeju.

Un vēl viena lieta. Ar veco pieeju vai nu nebija pietiekami daudz serveru, vai arÄ« tie bija dÄ«kstāvē bez uzdevumiem. Paralēlā kodÄ“Å”ana ļauj palielināt dzelzs pārstrādes daļu. Tagad mÅ«su vairāk nekā tÅ«kstoÅ” serveru klasteris vienmēr ir ar kaut ko aizņemts.

Patiesībā vēl ir kur uzlaboties. Piemēram, mēs varam ievērojami ietaupīt laiku, ja sākam apstrādāt videoklipa fragmentus, pirms tas pilnībā nonācis pie mums. Kā saka, vēl būs.

Raksti komentāros, par kādiem uzdevumiem darba ar video jomā vēlies lasīt.

Noderīgas saites uz nozares kolēģu pieredzi

Avots: www.habr.com

Pievieno komentāru