Nola bizkortu genuen bideoen kodeketa zortzi aldiz

Nola bizkortu genuen bideoen kodeketa zortzi aldiz

Egunero, milioika ikuslek bideoak ikusten dituzte Interneten. Baina bideoa eskuragarri egon dadin, zerbitzarira igo ez ezik, prozesatu ere egin behar da. Zenbat eta azkarrago gertatu, orduan eta hobeto zerbitzuarentzat eta bere erabiltzaileentzat.

Nire izena Askar Kamalov da, duela urtebete Yandex bideo teknologia taldean sartu nintzen. Gaur laburki esango diet Habr-eko irakurleei nola, kodetze-prozesua paralelizatuz, erabiltzaileari bideoa bidaltzea nabarmen bizkortzea lortu genuen.

Mezu hau, batez ere, bideo-zerbitzuen azpian zer gertatzen den pentsatu ez dutenentzat interesgarria izango da. Iruzkinetan galderak egin eta hurrengo argitalpenetarako gaiak iradoki ditzakezu.

Zereginari berari buruzko hitz batzuk. Yandex-ek beste gune batzuetan bideoak bilatzen laguntzen ez ezik, bere zerbitzuetarako bideoak gordetzen ditu. Jatorrizko programa bat edo aireko kirol-partida bat, KinoPoisk-eko film bat edo Zen eta News-en bideoak izan - hau guztia gure zerbitzarietara kargatzen da. Erabiltzaileek bideoa ikusi ahal izateko, prestatu egin behar da: behar den formatura bihurtu, aurrebista sortu edo teknologiaren bidez exekutatu. DeepHD. Prestatu gabeko fitxategi batek tokia besterik ez du hartzen. Gainera, hardwarearen erabilera optimoaz ez ezik, erabiltzaileei edukiak bidaltzeko abiaduraz ere ari gara. Adibidea: hockey-partida baten une erabakigarriaren grabazioa bila daiteke ekitaldia bera eta minutu baten barruan.

Kodeketa sekuentziala

Beraz, erabiltzailearen zoriontasuna, neurri handi batean, bideoa erabilgarri dagoenaren araberakoa da. Eta hori batez ere transkodetze abiadurak zehazten du. Bideoak igotzeko abiadurarako baldintza zorrotzik ez daudenean, ez dago arazorik. Fitxategi bakar eta zatiezina hartu, bihurtu eta igotzen duzu. Gure ibilbidearen hasieran, hauxe egin genuen lan:

Nola bizkortu genuen bideoen kodeketa zortzi aldiz

Bezeroak bideoa biltegira kargatzen du, Analyzer osagaiak meta informazioa biltzen du eta bideoa Worker osagaira transferitzen du bihurtzeko. Etapa guztiak sekuentzialki egiten dira. Kasu honetan, kodetze zerbitzari asko egon daitezke, baina bakarra dago bideo zehatz bat prozesatzen lanpetuta. Diagrama sinple eta gardena. Hor amaitzen dira bere abantailak. Eskema hau bertikalean bakarrik eskala daiteke (zerbitzari indartsuagoak erosi direlako).

Kodeketa sekuentziala tarteko emaitzarekin

Itxaronaldi mingarria nolabait leuntzeko, industriak kodetze aukera azkar bat sortu zuen. Izena engainagarria da, izan ere, kodeketa osoa sekuentzialki gertatzen baita eta denbora berdina hartzen du. Baina tarteko emaitzarekin. Ideia hau da: bideoaren bereizmen baxuko bertsioa ahalik eta azkarren prestatu eta argitaratzea, eta orduan bakarrik bereizmen handiagoko bertsioak.

Alde batetik, bideoa azkarrago eskuragarri dago. Eta ekitaldi garrantzitsuetarako erabilgarria da. Baina, bestalde, irudia lausoa bihurtzen da, eta horrek ikusleak gogaitzen ditu.

Bihurtzen da bideoa azkar prozesatu ez ezik, kalitatea mantendu behar duzula. Hau da erabiltzaileek bideo-zerbitzu batetik espero dutena orain. Badirudi nahikoa dela zerbitzari produktiboenak erostea (eta aldizka berritzea aldi berean). Baina hau muturra da, beti baitago hardwarerik indartsuena ere moteldu egingo duen bideo bat.

Kodeketa paraleloa

Askoz eraginkorragoa da arazo konplexu bat ez hain konplexuetan zatitzea eta zerbitzari desberdinetan paraleloki ebaztea. Hau bideorako MapReduce da. Kasu honetan, ez gaitu zerbitzari baten errendimendua mugatzen eta horizontalki eskala ditzakegu (makina berriak gehituz).

Bide batez, bideoak zati txikitan zatitzea, paraleloan prozesatzea eta elkarrekin itsatsiaren ideia ez da sekretua. Ikuspegi honi buruzko erreferentzia ugari aurki ditzakezu (adibidez, HabrΓ©-n proiektuari buruzko argitalpen bat gomendatzen dut DistVIDc). Baina horrek ez du orokorrean errazago egiten, ezin duzulako prestatutako irtenbide bat hartu eta zure etxean sartu. Gure azpiegiturara, gure bideora eta baita gure kargara ere egokitzea behar dugu. Oro har, errazagoa da zurea idaztea.

Beraz, arkitektura berrian, kodeketa sekuentziala duen Worker bloke monolitikoa mikrozerbitzuetan banatu dugu Segmenter, Tcoder, Combiner.

Nola bizkortu genuen bideoen kodeketa zortzi aldiz

  1. Segmenter-ek bideoa gutxi gorabehera 10 segundoko zatitan banatzen du. Zatiak GOP bat edo gehiagoz osatuta daude (argazki taldea). GOP bakoitza independentea da eta bereiz kodetuta dago, beste GOP batzuetako fotogramak erreferentziarik gabe deskodetu ahal izateko. Hau da, zatiak elkarrengandik independentean erreproduzi daitezke. Zatiketa honek latentzia murrizten du, prozesatzea lehenago hastea ahalbidetuz.
  2. Tcoderrek zati bakoitza prozesatzen du. Ilaratik zeregin bat hartzen du, biltegitik zati bat deskargatzen du, bereizmen ezberdinetan kodetzen du (gogoratu jokalariak bertsio bat aukera dezakeela konexio-abiaduraren arabera), ondoren emaitza berriro biltegian jartzen du eta zatia prozesatu gisa markatzen du. datu-basean. Zati guztiak prozesatu ondoren, Tcoderrek hurrengo osagaiaren emaitzak sortzeko zeregina bidaltzen du.
  3. Combiner-ek emaitzak batera biltzen ditu: Tcoder-ek egindako zati guztiak deskargatzen ditu, bereizmen ezberdinetarako korronteak sortzen ditu.

Soinuari buruzko hitz batzuk. AAC audio-kodek ezagunenak ezaugarri desatsegin bat du. Zatikiak bereiz kodetzen badituzu, ezin izango dituzu elkarrekin itsatsi. Trantsizioak nabarituko dira. Bideo-kodekek ez dute arazo hau. Teorian, irtenbide tekniko konplexu bat bilatu dezakezu, baina joko honek ez du oraindik kandela merezi (audioak bideoak baino askoz gutxiago pisatzen du). Hori dela eta, bideoa bakarrik kodetzen da paraleloan, eta audio-pista osoa prozesatzen da.

Findings

Bideoen prozesamendu paraleloari esker, bideo bat kargatzen zaigun eta erabiltzaileen eskura egon arteko atzerapena nabarmen murriztu dugu. Adibidez, lehenago bi ordu behar izan litezke kalitate ezberdineko bertsio osoak sortzeko ordu eta erdiko iraupena duen FullHD film baterako. Orain honek guztiak 15 minutu behar ditu. Gainera, prozesamendu paraleloarekin, bereizmen handiko bertsio bat sortzen dugu bereizmen baxuko bertsioa baino are azkarrago tarteko emaitzaren ikuspegi zaharrarekin.

Eta gauza bat gehiago. Ikuspegi zaharrarekin, zerbitzari nahikorik ez zegoen edo zereginik gabe geldirik zeuden. Kodetze paraleloak burdina birziklatzearen kuota handitzeko aukera ematen du. Orain mila zerbitzari baino gehiagoko gure multzoa beti dago lanpetuta zerbaitekin.

Izan ere, oraindik badago zer hobetu. Adibidez, denbora nabarmena aurreztu dezakegu bideoaren zatiak osorik iritsi baino lehen prozesatzen hasten bagara. Esan bezala, gehiago etorriko dira.

Idatzi iruzkinetan bideoa lantzeko alorreko zein zeregin irakurri nahiko zenukeen.

Industriako lankideen esperientziarako esteka erabilgarriak

Iturria: www.habr.com

Gehitu iruzkin berria