Hoe't wy fideokodearring acht kear fersnelle

Hoe't wy fideokodearring acht kear fersnelle

Elke dei sjogge miljoenen sjoggers fideo's op it ynternet. Mar om de fideo beskikber te wurden, moat it net allinich wurde upload nei de server, mar ek ferwurke. Hoe flugger dit bart, hoe better foar de tsjinst en har brûkers.

Myn namme is Askar Kamalov, in jier lyn kaam ik by it Yandex fideotechnologyteam. Hjoed sil ik Habr-lêzers koart fertelle oer hoe't wy, troch parallelisearjen fan it kodearringsproses, it slagge om de levering fan fideo oan 'e brûker signifikant te fersnellen.

Dizze post sil yn it foarste plak fan belang wêze foar dyjingen dy't net earder tocht hawwe oer wat bart ûnder de kap fan fideotsjinsten. Yn 'e opmerkings kinne jo fragen stelle en ûnderwerpen foarstelle foar takomstige berjochten.

In pear wurden oer de taak sels. Yandex helpt jo net allinich te sykjen nei fideo's op oare siden, mar bewarret ek fideo's foar har eigen tsjinsten. Oft it no in orizjineel programma is as in sportwedstriid op 'e loft, in film op KinoPoisk of fideo's op Zen en Nijs - dit alles wurdt upload nei ús servers. Om brûkers de fideo te besjen, moat it wurde taret: konvertearre nei it fereaske formaat, in foarbyld makke, of sels troch technology rinne DeepHD. In net tarete triem nimt gewoan romte yn. Boppedat prate wy net allinich oer it optimale gebrûk fan hardware, mar ek oer de snelheid fan levering fan ynhâld oan brûkers. Foarbyld: in opname fan it beslissende momint fan in hockeywedstriid kin binnen in minút nei it barren sels socht wurde.

Sekwinsjele kodearring

Dat, it lok fan 'e brûker hinget foar in grut part ôf fan hoe fluch de fideo beskikber wurdt. En dit wurdt benammen bepaald troch de transkodearjen snelheid. As d'r gjin strange easken binne foar fideo-uploadsnelheid, dan binne d'r gjin problemen. Jo nimme in inkeld, ûndielber bestân, konvertearje it en upload it. Oan it begjin fan ús reis, dit is hoe't wy wurken:

Hoe't wy fideokodearring acht kear fersnelle

De kliïnt uploadt de fideo nei de opslach, de Analyzer-komponint sammelt meta-ynformaasje en bringt de fideo oer nei de Worker-komponint foar konverzje. Alle stadia wurde sequentially útfierd. Yn dit gefal kinne d'r in protte kodearringsservers wêze, mar mar ien is dwaande mei it ferwurkjen fan in spesifike fideo. Ienfâldich, transparant diagram. Dit is wêr't syn foardielen einigje. Dit skema kin allinich fertikaal wurde skalearre (fanwege de oankeap fan machtiger servers).

Sekwinsjele kodearring mei tuskenresultaat

Om it pynlike wachtsjen op ien of oare manier glêd te meitsjen, kaam de yndustry mei in rappe kodearingsopsje. De namme is misliedend, om't yn feite folsleine kodearring opfolgjend komt en krekt sa lang duorret. Mar mei in tuskenresultaat. It idee is dit: tariede en publisearje in lege-resolúsje ferzje fan 'e fideo sa fluch mooglik, en pas dan hegere resolúsje ferzjes.

Oan 'e iene kant wurdt fideo rapper beskikber. En it is nuttich foar wichtige eveneminten. Mar oan 'e oare kant, de foto blykt wazig, en dit irriteert sjoggers.

It docht bliken dat jo de fideo net allinich fluch moatte ferwurkje, mar ek har kwaliteit behâlde. Dit is wat brûkers no ferwachtsje fan in fideotsjinst. It kin lykje dat it genôch is om de meast produktive servers te keapjen (en regelmjittich opwurdearje se allegear tagelyk). Mar dit is in deade ein, om't d'r altyd in fideo is dy't sels de machtichste hardware sil fertrage.

Parallelle kodearring

It is folle effisjinter om in kompleks probleem te dielen yn in protte minder komplekse en parallel op ferskate servers op te lossen. Dit is MapReduce foar fideo. Yn dit gefal binne wy ​​net beheind troch de prestaasjes fan ien server en kinne wy ​​​​horizontaal skaalje (troch nije masines ta te foegjen).

Trouwens, it idee om fideo's yn lytse stikken te splitsen, se parallel te ferwurkjen en se tegearre te lijmen is gjin geheim. Jo kinne in protte ferwizings fine nei dizze oanpak (bygelyks op Habré advisearje ik in post oer it projekt DistVIDc). Mar dit makket it yn 't algemien net makliker, om't jo net gewoan in klearmakke oplossing kinne nimme en it yn jo hûs bouwe. Wy hawwe oanpassing nedich oan ús ynfrastruktuer, ús fideo en sels ús lading. Yn 't algemien is it makliker om jo eigen te skriuwen.

Dat, yn 'e nije arsjitektuer, ferdielden wy it monolityske Worker-blok mei opfolgjende kodearring yn mikrotsjinsten Segmenter, Tcoder, Combiner.

Hoe't wy fideokodearring acht kear fersnelle

  1. Segmenter brekt de fideo yn fragminten fan sawat 10 sekonden. Fragminten besteane út ien of mear GOP's (groep ôfbyldings). Elke GOP is ûnôfhinklik en apart kodearre, sadat it kin wurde dekodearre sûnder ferwizing nei frames fan oare GOP's. Dat is, fragminten kinne wurde spile ûnôfhinklik fan elkoar. Dizze sharding ferminderet de latency, wêrtroch ferwurking earder kin begjinne.
  2. Tcoder ferwurket elk fragmint. It nimt in taak út 'e wachtrige, downloadt in fragmint fan' e opslach, kodearret it yn ferskate resolúsjes (ûnthâld dat de spiler in ferzje kin kieze basearre op 'e ferbiningssnelheid), set it resultaat dan werom yn 'e opslach en markearret it fragmint as ferwurke yn de databank. Nei't alle fragminten ferwurke binne, stjoert Tcoder de taak om resultaten te generearjen foar de folgjende komponint.
  3. Combiner sammelt de resultaten byinoar: downloadt alle fragminten makke troch Tcoder, genereart streamen foar ferskate resolúsjes.

In pear wurden oer lûd. De meast populêre AAC audio codec hat in onaangename funksje. As jo ​​fragminten apart kodearje, dan kinne jo se gewoan net naadloos oaninoar lymje. Transysjes sille merkber wêze. Video codecs hawwe net dit probleem. Teoretysk kinne jo sykje nei in komplekse technyske oplossing, mar dit spultsje is gewoan de kears noch net wurdich (audio waacht signifikant minder as fideo). Dêrom wurdt allinich de fideo parallel kodearre, en it heule audiospoar wurdt ferwurke.

Resultaten

Mei tank oan parallelle fideoferwurking hawwe wy de fertraging signifikant fermindere tusken in fideo dy't nei ús wurdt upload en beskikber is foar brûkers. Bygelyks, earder koe it twa oeren duorje om ferskate folsleine ferzjes fan ferskate kwaliteit te meitsjen foar in FullHD-film dy't in oere en in heal duorret. No duorret dit alles 15 minuten. Boppedat meitsje wy mei parallelle ferwurking in ferzje mei hege resolúsje noch rapper as in ferzje mei lege resolúsje mei de âlde oanpak fan tuskenresultaat.

En noch ien ding. Mei de âlde oanpak wiene d'r of net genôch servers, of se wiene idle sûnder taken. Parallelle kodearring lit jo it oandiel fan izerrecycling ferheegje. No is ús kluster fan mear as tûzen servers altyd mei wat dwaande.

Eins is der noch romte foar ferbettering. Wy kinne bygelyks wichtige tiid besparje as wy fragminten fan 'e fideo begjinne te ferwurkjen foardat it yn syn gehiel by ús komt. Sa't se sizze, mear te kommen.

Skriuw yn 'e opmerkings oer hokker taken op it mêd fan wurkjen mei fideo jo graach lêze wolle.

Nuttige keppelings nei de ûnderfining fan yndustry kollega's

Boarne: www.habr.com

Add a comment