Si e përshpejtuam kodimin e videove në tetë herë

Si e përshpejtuam kodimin e videove në tetë herë

Çdo ditĂ«, miliona shikues shohin video nĂ« internet. Por pĂ«r tĂ« bĂ«rĂ« videon tĂ« aksesueshme, ajo duhet jo vetĂ«m tĂ« ngarkohet nĂ« server, por edhe tĂ« pĂ«rpunojĂ«. Sa mĂ« shpejt tĂ« ndodhĂ« kjo, aq mĂ« mirĂ« Ă«shtĂ« pĂ«r shĂ«rbimin dhe pĂ«rdoruesit e tij.

Unë quhem Askar Kamalov, një vit më parë iu bashkova ekipit të teknologjive video të Yandex. Sot do t'u tregoj lexuesve të Habrës se si arritëm të përshpejtonim dërgimin e videove te përdoruesit përmes paralelizimit të procesit të kodifikimit.

Ky postim në radhë të parë do të jetë i interesant për ata që nuk kanë menduar ndonjëherë se çfarë ndodh nën kapakët e shërbimeve video. Në komentet mund të bëni pyetje dhe të sugjeroni tema për postime të ardhshme.

Pak fjalĂ« mbi detyrĂ«n vetĂ«. Yandex jo vetĂ«m qĂ« ndihmon pĂ«r tĂ« kĂ«rkuar video nĂ« faqe tĂ« tjera, por gjithashtu ruan video pĂ«r shĂ«rbimet e tij. QoftĂ« njĂ« program autorĂ«sh, njĂ« ndeshje sportive nĂ« eter, njĂ« film nĂ« KinoPoisk, apo klipet nĂ« Zen dhe Lajme — gjithçka ngarkohet nĂ« serverĂ«t tanĂ«. PĂ«r tĂ« parĂ« videon, ajo duhet pĂ«rgatitur: tĂ« konvertohet nĂ« formatin e nevojshĂ«m, tĂ« krijohet njĂ« miniaturĂ« apo madje tĂ« kalojĂ« pĂ«rmes teknologjisĂ« DeepHD. NjĂ« skedar i papĂ«rgatitur thjesht zĂ« vend. Dhe nuk bĂ«het fjalĂ« vetĂ«m pĂ«r pĂ«rdorimin optimal tĂ« harduerit, por gjithashtu pĂ«r shpejtĂ«sinĂ« e dĂ«rgimit tĂ« pĂ«rmbajtjes te pĂ«rdoruesit. PĂ«r shembull: njĂ« regjistrim me momentin vendimtar tĂ« njĂ« ndeshjeje hokej mund tĂ« kĂ«rkohet nĂ« kĂ«rkimin brenda njĂ« minute pas ngjarjes.

Kodimi i radhës

Pra, lumturia e përdoruesit varet shumë nga sa shpejt bëhet video e aksesueshme. Dhe kjo përcaktohet kryesisht nga shpejtësia e transkodimit. Kur nuk ka kërkesa të rrepta për shpejtësinë e publikimit të videos, nuk ka asnjë problem. Ne marrim një skedar të vetëm, të pandarë, e konvertojmë atë dhe e ngremë. Në fillim ne punonim kështu:

Si e përshpejtuam kodimin e videove në tetë herë

Klienti ngarkon videon në ruajtje, komponenti Analyzer mbledh meta-informacione dhe e dërgon videon për konvertim në komponentin Worker. Të gjitha hapat kryhen në radhë. Edhe pse mund të ketë shumë serverë për kodim, vetëm një është i angazhuar në përpunimin e videos specifike. Një skemë e thjeshtë, transparente. Në këtë pikë mbarojnë avantazhet e saj. Kjo skemë mund të shkallëzohet vetëm verticalisht (duke blerë serverë më të fuqishëm).

Kodimi i radhës me rezultat të ndërmjetëm

PĂ«r tĂ« zbutur pritjen e mundimshme, industria ka shpikur njĂ« variant tĂ« kodimit tĂ« shpejtĂ«. NjĂ« emĂ«r mashtrues, sepse nĂ« tĂ« vĂ«rtetĂ« kodimi i plotĂ« ndodh nĂ« radhĂ« dhe po aq ngadalĂ«. Por pĂ«rveç kĂ«saj, me njĂ« rezultat tĂ« ndĂ«rmjetĂ«m. Ideja Ă«shtĂ« kĂ«shtu: sa mĂ« shpejt tĂ« pĂ«rgatitet dhe tĂ« ngarkohet njĂ« version video merezolucion tĂ« ulĂ«t, dhe pastaj — versione me rezolucione mĂ« tĂ« larta.

Në një anë, video bëhet më shpejt e aksesueshme. Dhe kjo është e dobishme për ngjarjet e rëndësishme. Por nga ana tjetër, skena rezulton të jetë e paqartë, dhe kjo e nervozon shikuesit.

Pra, nuk duhet vetëm të përpunoni video shpejt, por edhe të ruani cilësinë e saj. Kjo është ajo që përdoruesit presin nga shërbimi video tani. Mund të duket se mjafton të bleni serverët më të fuqishëm (dhe t'i përmirësoni ato rregullisht). Por kjo është një rrugë pa dalje, sepse gjithmonë do të ketë video që do të ngadalësojnë edhe harduerin më të fuqishëm.

Kodimi paralel

Më efikase është të ndash një detyrë të komplikuar në shumë detyra më pak të komplikuara dhe t'i zgjidhësh ato paralelisht në servera të ndryshëm. Një lloj MapReduce për video. Në këtë rast, ne nuk përballemi me performancën e një serveri dhe mund të shkallëzojmë horizontalisht (duke shtuar makineri të reja).

Për ta thënë ndryshe, ideja për të ndarë videon në copa të vogla, për ta përpunuar ato paralelisht dhe për t'i ngjitur, nuk është ndonjë sekret. Ju mund të gjeni shumë përmendje të këtij qasje (për shembull, në Habr sugjeroj një postim mbi projektin DistVIDc). Por kjo nuk e bën të lehtë, sepse nuk mund të merrni thjesht një zgjidhje të gatshme dhe ta integroni. Kërkohet një adaptim për infrastrukturën tonë, videon tonë dhe madje edhe ngarkesën tonë. Në përgjithësi, është më e lehtë të shkruash vetë.

Pra, në arkitekturën e re, blloku monolitik Worker me kodimin e radhës e kemi ndarë në mikroshërbime Segmenter, Tcoder, Combiner.

Si e përshpejtuam kodimin e videove në tetë herë

  1. Segmenter ndan videon nĂ« fragmente tĂ« pĂ«rafĂ«rsisht 10 sekondash. Fragmente pĂ«rbĂ«hen nga njĂ« ose mĂ« shumĂ« GOP (group of pictures). Çdo GOP Ă«shtĂ« e pavarur dhe kodifikohet veçmas, kĂ«shtu qĂ« mund tĂ« dekodifikohet pa u referuar nĂ« kadrin nga GOP tĂ« tjera. Pra, fragmentet mund tĂ« luajnĂ« pavarĂ«sisht nga njĂ«ri-tjetri. Kjo segmentim zvogĂ«lon vonesĂ«n, duke lejuar qĂ« pĂ«rpunimi tĂ« fillojĂ« mĂ« herĂ«t.
  2. Tcoder përpunon çdo fragment. Ai merr detyrën nga rradha, shkarkon fragmentin nga depoja, kodon në rezoluta të ndryshme (mos harroni, që playeri mund të zgjedh versionin në bazë të shpejtësisë së lidhjes), pastaj e rivendos rezultatin prapë në depo dhe e shënon fragmentin si të përpunuar në bazën e të dhënave. Pasi të ketë përpunuar të gjithë fragmentet, Tcoder dërgon detyrën për formimin e rezultateve për komponentin e ardhshëm.
  3. Combiner bashkon rezultatet: shkarkon të gjithë fragmentet e realizuara nga Tcoder, formon rrjedha për rezoluta të ndryshme.

Disa fjalë për zërin. Kodiku më popullor të audios, AAC, ka një disavantazh të padëshiruar. Nse kodifikoni fragmentet veçmas, ato nuk mund të bashkohen pa probleme. Kalimet do të jenë të dukshme. Video kodikëve nuk kanë këtë problem. Teoretikisht, mund të kërkohet një zgjidhje teknike më komplekse, por kjo lojë për momentin nuk ia vlen (audio peson ndjeshëm më pak se video). Prandaj, ne kodojmë video vetëm paralelisht, ndërsa shtegu audio përpunohen në mënyrë të plotë.

Rezultatet

Falë përpunimit paralel të videos, ne kemi reduktuar ndjeshëm vonesën midis ngarkesës së videos tek ne dhe disponueshmërisë për përdoruesit. Për shembull, më parë, krijimi i disa versioneve të plota me cilësi të ndryshme për një film FullHD që zgjaste një orë e gjysmë mund të merrte deri në dy orë. Tani e gjitha kjo zgjat 15 minuta. Për më tepër, me përpunimin paralel, ne krijojmë një version në rezolucion të lartë edhe më shpejt se versionin në rezolucion të ulët me qasjen e vjetër me rezultatet e përkohshme.

Dhe diçka tjetër. Me qasjen e vjetër, ndoshta nuk kishim mjaft serverë, ose ata ishin të papunë pa detyra. Kodifikimi paralel lejon rritjen e përqindjes së shfrytëzimit të pajisjeve. Tani klasteri ynë prej më shumë se një mijë serverëve është gjithmonë i angazhuar me diçka.

Në të vërtetë, akoma ka shumë për të arritur. Për shembull, ne mund të kursejmë ndjeshëm kohën nëse fillojmë të përpunojmë fragmentet e videos para se ajo të arrijë tek ne plotësisht. Siç thonë, përpara është më shumë.

Shkruani në komente për çfarë detyrash në fushën e përpunimit të videos do të dëshironit të lexonit.

Linket e dobishme mbi përvojën e kolegëve në industri

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster