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:
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).
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.
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.
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.