Kiel ni okfoje akcelis videokodigon

Kiel ni okfoje akcelis videokodigon

Ĉiutage, milionoj da spektantoj spektas filmetojn en Interreto. Sed por ke la video fariĝu disponebla, ĝi devas ne nur esti alŝutita al la servilo, sed ankaŭ prilaborita. Ju pli rapide ĉi tio okazas, des pli bone por la servo kaj ĝiaj uzantoj.

Mi nomiĝas Askar Kamalov, antaŭ unu jaro mi aliĝis al la teamo de videoteknika Yandex. Hodiaŭ mi mallonge rakontos al Habr-legantoj pri kiel, paraleligante la kodan procezon, ni sukcesis signife akceli la liveron de video al la uzanto.

Ĉi tiu afiŝo ĉefe interesos tiujn, kiuj antaŭe ne pensis pri tio, kio okazas sub la kapuĉo de videoservoj. En la komentoj vi povas demandi kaj sugesti temojn por estontaj afiŝoj.

Kelkajn vortojn pri la tasko mem. Yandex ne nur helpas vin serĉi filmetojn en aliaj retejoj, sed ankaŭ stokas filmetojn por siaj propraj servoj. Ĉu temas pri originala programo aŭ sporta matĉo en aero, filmo sur KinoPoisk aŭ filmetoj sur Zen kaj Novaĵoj - ĉio ĉi estas alŝutita al niaj serviloj. Por ke uzantoj spektu la videon, ĝi devas esti preta: konvertita al la bezonata formato, krei antaŭrigardon aŭ eĉ travivi teknologion. DeepHD. Nepreparita dosiero nur okupas spacon. Plie, ni parolas ne nur pri la optimuma uzo de aparataro, sed ankaŭ pri la rapideco de livero de enhavo al uzantoj. Ekzemplo: registrado de la decida momento de hokematĉo povas esti serĉata ene de minuto post la okazaĵo mem.

Sinsekva kodigo

Do, la feliĉo de la uzanto plejparte dependas de kiom rapide la video fariĝas disponebla. Kaj ĉi tio estas ĉefe determinita de la transkoda rapido. Kiam ne estas striktaj postuloj por rapido de alŝuto de video, tiam ne estas problemoj. Vi prenas ununuran, nedivideblan dosieron, konvertas ĝin kaj alŝutas ĝin. Komence de nia vojaĝo, jen kiel ni laboris:

Kiel ni okfoje akcelis videokodigon

La kliento alŝutas la videon al la stokado, la Analizilo kolektas metainformojn kaj transdonas la videon al la Laboristo-komponento por konvertiĝo. Ĉiuj stadioj estas faritaj sinsekve. En ĉi tiu kazo, povas esti multaj kodaj serviloj, sed nur unu estas okupata pri prilaborado de specifa video. Simpla, travidebla diagramo. Ĉi tie finiĝas ĝiaj avantaĝoj. Ĉi tiu skemo nur povas esti skalata vertikale (pro la aĉeto de pli potencaj serviloj).

Sinsekva kodigo kun meza rezulto

Por iel glatigi la doloran atendon, la industrio elpensis rapidan kodan opcion. La nomo estas misgvida, ĉar fakte, plena kodigo okazas sinsekve kaj daŭras same longe. Sed kun meza rezulto. La ideo estas jena: preparu kaj publikigu malalt-rezolucian version de la video kiel eble plej rapide, kaj nur tiam pli alt-rezoluciajn versiojn.

Unuflanke, video fariĝas disponebla pli rapide. Kaj ĝi utilas por gravaj eventoj. Sed aliflanke, la bildo montriĝas malklara, kaj ĉi tio ĝenas spektantojn.

Rezultas, ke vi devas ne nur rapide prilabori la videon, sed ankaŭ konservi ĝian kvaliton. Jen kion uzantoj atendas de videoservo nun. Eble ŝajnas, ke sufiĉas aĉeti la plej produktivajn servilojn (kaj regule ĝisdatigi ilin ĉiujn samtempe). Sed ĉi tio estas sakstrato, ĉar ĉiam estas video, kiu malrapidigos eĉ la plej potencan aparataron.

Paralela kodado

Estas multe pli efika dividi kompleksan problemon en multajn malpli kompleksajn kaj solvi ilin paralele sur malsamaj serviloj. Ĉi tio estas MapReduce por video. En ĉi tiu kazo, ni ne estas limigitaj de la agado de unu servilo kaj povas grimpi horizontale (aldonante novajn maŝinojn).

Cetere, la ideo dividi filmetojn en malgrandajn pecojn, prilabori ilin paralele kaj kunglui ilin ne estas ia sekreto. Vi povas trovi multajn referencojn al ĉi tiu aliro (ekzemple, ĉe Habré mi rekomendas afiŝon pri la projekto DistVIDc). Sed ĉi tio ne plifaciligas ĝin ĝenerale, ĉar vi ne povas simple preni pretan solvon kaj enkonstrui ĝin en vian hejmon. Ni bezonas adaptiĝon al nia infrastrukturo, nia video kaj eĉ nia ŝarĝo. Ĝenerale, estas pli facile skribi vian propran.

Do, en la nova arkitekturo, ni dividis la monolitan Worker-blokon kun sinsekva kodigo en mikroservojn Segmenter, Tcoder, Combiner.

Kiel ni okfoje akcelis videokodigon

  1. Segmentilo rompas la vidbendon en fragmentojn de proksimume 10 sekundoj. Fragmentoj konsistas el unu aŭ pluraj GOPoj (grupo de bildoj). Ĉiu GOP estas sendependa kaj ĉifrita aparte tiel ke ĝi povas esti deĉifrita sen referenco al kadroj de aliaj GOPoj. Tio estas, fragmentoj povas esti luditaj sendepende unu de la alia. Ĉi tiu sharding reduktas latencian, permesante al pretigo komenciĝi pli frue.
  2. Tcoder prilaboras ĉiun fragmenton. Ĝi prenas taskon el la atendovico, elŝutas fragmenton el la stokado, kodas ĝin en malsamajn rezoluciojn (memoru, ke la ludanto povas elekti version bazitan sur la konektorapideco), tiam metas la rezulton reen en la stokadon kaj markas la fragmenton kiel prilaborita. en la datumbazo. Prilaborinte ĉiujn fragmentojn, Tcoder sendas la taskon por generi rezultojn por la sekva komponanto.
  3. Combiner kolektas la rezultojn kune: elŝutas ĉiujn fragmentojn faritajn de Tcoder, generas fluojn por malsamaj rezolucioj.

Kelkaj vortoj pri sono. La plej populara sonkodeko AAC havas malagrablan funkcion. Se vi kodas fragmentojn aparte, tiam vi simple ne povos kunglui ilin perfekte. Transiroj estos videblaj. Videokodekoj ne havas ĉi tiun problemon. Teorie, vi povas serĉi kompleksan teknikan solvon, sed ĉi tiu ludo simple ankoraŭ ne valoras la kandelon (aŭdio pezas signife malpli ol video). Tial nur la video estas kodita paralele, kaj la tuta sontrako estas prilaborita.

Результаты

Danke al paralela video-prilaborado, ni signife reduktis la prokraston inter video alŝutita al ni kaj disponebla por uzantoj. Ekzemple, antaŭe ĝi povus daŭri du horojn por krei plurajn plenajn versiojn de malsama kvalito por FullHD-filmo daŭranta horon kaj duonon. Nun ĉio ĉi daŭras 15 minutojn. Krome, kun paralela prilaborado, ni kreas alt-rezolucian version eĉ pli rapide ol malalt-rezolucian version kun la malnova meza rezulta aliro.

Kaj ankoraŭ unu afero. Kun la malnova aliro, aŭ ne estis sufiĉe da serviloj, aŭ ili estis senlabore sen taskoj. Paralela kodigo permesas vin pliigi la parton de ferreciklado. Nun nia areto de pli ol mil serviloj ĉiam estas okupata de io.

Fakte, estas ankoraŭ loko por plibonigo. Ekzemple, ni povas ŝpari signifan tempon se ni komencas prilabori fragmentojn de la video antaŭ ol ĝi alvenas al ni en sia tutaĵo. Kiel oni diras, pli venos.

Skribu en la komentoj pri kiuj taskoj en la kampo de laboro kun video vi ŝatus legi.

Utilaj ligiloj al la sperto de industriaj kolegoj

fonto: www.habr.com

Aldoni komenton