Ինչպես մենք վեց անգամ արագ խոդում ենք վիդեո արդարացման գործընթացը

Ինչպես մենք վեց անգամ արագ խոդում ենք վիդեո արդարացման գործընթացը

Յուրաքանչյուր օր միլիոնավոր դիտորդներ դիտում են տեսանյութեր ինտերնետում: Բայց որպեսզի տեսանյութը հասանելի լինի, այն պետք է ոչ միայն բեռնել սերվերի վրա, այլ նաև մշակել: Նպատակն է անել դա որքան հնարավոր է արագ, քանի որ դա բարելավում է ծառայությունը և օգտվողների փորձը:

Իմ անունը Ասկար Կամալով է, մեկ տարի առաջ ես միացա Յանդեքսի տեսաուղերձի թիմին: Այսօր ես կարճ ներկայացնեմ Հաբրի ընթերցողներին, թե որտեղ ենք մենք կարողացել բազմապատիկ արագացնել տեսանյութերի հասանելիությունը, օգտագործելով գործընթացի պարալելացում:

Այս գրառումը նախ և առաջ հետաքրքիր կլինի նրանց համար, ովքեր մինչ այժմ չեն մտածել, թե ինչ է տեղի ունենում տեսահեռարձակման թիկունքում: Հեռախոսներից կարող եք հարցեր տալ և առաջարկել ապագա գրառումների թեմաներ:

Քիչ խոսք խնդրի մասին: Յանդեքսը ոչ միայն օգնում է որոնել տեսանյութեր այլ կայքերում, այլ նաև պահում է տեսանյութեր իր սեփական ծառայությունների համար: Պիտի լինի հեղինակային ծրագրա թե սպորտային խաղի ցուցադրում, կինոն Կինոմսի վրա կամ տեսանյութեր Դզենում և Նորություններում՝ բոլորն էլ բեռնվում են մեր սերվերներին: Դիտելու համար տեսանյութը պետք է պատրաստել. հարկավոր է այն փոխարկել անհրաժեշտ ձևաչափին, ստեղծել ներկայացում, անգամ անցկացնել դա տեխնոլոգիայի միջոցով DeepHD. Անպատրաստ ֆայլը պարզապես զբաղեցնում է տարածք: Причём речь идёт не только об оптимальном использовании железа, но и о скорости доставки контента до пользователей. Օրինակ՝ վճռիչ պահի հոկեյի խաղի գրառումները կարող են որոնվել արդեն մեկ րոպե հետո:

Հաստատուն կոդավորում

Այժմ՝ այսպիսով, օգտագործողի երջանկությունը մեծապես կախված է այն բանից, թե որքան արագ է տեսանյութը հասանելի դառնում: Սա հիմնականում որոշվում է փոխակերպման արագությամբ: Երբ տեսանյութի հրատապ արագության չափելի պահանջներ չկան, խնդիրներ չկա: Դուք վերցնում եք միասնական, թիրախային ֆայլ, փոխում եք այն, հրապարակում: Սկզբի պահին մենք հենց այսպես էլ աշխատում էինք:

Ինչպես մենք վեց անգամ արագ խոդում ենք վիդեո արդարացման գործընթացը

Հաճախորդը բեռնում է տեսանյութը պահեստում, Analyzer կոմպոնենթը հավաքում է մետաինֆորմացիան և փոխանցում տեսանյութը Worker կոմպոնենտին փոխարկելու համար: Բոլոր փուլերը կատարվում են շարունակական կերպով: Այդուհանդերձ, կոդավորման համար կարող է լինել բազմաթիվ սերվերներ, բայց միայն մեկը զբաղված է դասակարգված տեսանյութը մշակելով: Ս ساده, թափանցիկ սխեմա: Այսպիսով, դրա առավելությունները ավարտվում են: Այս սխեման ընդլայնվում է միայն հորիզոնական (ավելի հզոր սերվերերի գնման հաշվին):

Հերթային կոդավորում միջանկյալ արդյունքով

Մինչև մի փոքր մեղմել ցավալի սպասումը, արդյունաբերությունն առաջարկեց արագ կոդավորման տարբերակ: Մոլորեցնում է անունը, քանի որ իրականում լիարժեք կոդավորումը տեղի է ունենում հերթային և ալիքի երկարությամբ: Բայց առնվազն միջանկյունում արդյունք կա: Իդեան հետևյալն է. որքան հնարավոր է արագ պատրաստել և հրապարակել տեսանյութի տարբերակ ցածր լուծաչափով, և հետո՝ ավելի բարձր լուծաչափերի տարբերակները:

Մի կողմից, տեսանյութը հասանելի է ավելի արագ: Եվ դա օգտակար է կարևոր իրադարձությունների համար: Բայց մյուս կողմից՝ նկարը ստացվում է մթագնված, ինչը դժգոհում է դիտողների:

Դե, գոյություն ունի ոչ միայն արագությամբ մանրամասն մշակելու տեսանյութ, այլ նաև պահպանելու դրա որակը: Սա է, ինչի սպասում են օգտվողները տեսափոխանցման ծառայությունից: Կարող է թվալ, որ բավարար է գնել ամենաարդյունավետ սերվերները (և կանոնավոր կերպով դրանք բոլորին բարձրացնել): Բայց սա փակուղի է, քանի որ միշտ կլինի տեսանյութ, որը կստիպի դանդաղել նույնիսկ ամենաուժեղ տեխնիկան:

Առաջնորդական կոդավորում

Այնպես չէ, որ ավելի արդյունավետ է բաժանել բարդ խնդիրը մի շարք ավելի հեշտ խնդիրների և դրանք իրարքին լուծել տարբեր սերվերներում: Սա նման է MapReduce-ին տեսանյութերի համար: Այս դեպքում մենք չենք բախվում մեկ սերվերի արտադրողականությանը և կարող ենք հորիզոնականորեն ընդարձակվել (ըստ նոր մեքենաների ավելացման):

Հիշենք, որ տեսանյութը փոքր կտրվածքների բաժանելու, որպեսզի միաժամանակ մշակվեն և միավորվեն, ոչ մի գաղտնիք չէ: Դուք կարող եք գտնել շատ հիշատակություններ այդ մոտեցման վերաբերյալ (օրինակ, Հաբրում խորհուրդ եմ տալիս գրառում նախագծի մասին DistVIDc). Բայց դրանից իսկապես ավելի հեշտ չի դառնում, քանի որ հնարավոր չէ պարզապես վերցնել արդեն պատրաստված լուծումը և կիրառել այն ձեզ մոտ: Ապահով պետք է իրականացնել մեր ենթակառուցման, մեր տեսանյութի և նույնիսկ մեր բեռի համար ադապտացիա: Ընդհանուր առմամբ, ավելի հեշտ է գրել Ձեր սեփականը:

Այդպիսով, նոր ճարտարապետության մեջ, մոնոլիտային աշխատանքը հերթային կոդավորմամբ բաժանվում է միկրոսերվերների Segmenter, Tcoder, Combiner:

Ինչպես մենք վեց անգամ արագ խոդում ենք վիդեո արդարացման գործընթացը

  1. Segmenter-ը բաժանում է տեսանյութը մոտ 10 վայրկյան տևողությամբ հատվածների: Հաճախորդները բաղկացած են մեկ կամ մի քանի GOP-ից (նկարի խմբեր). Յուրաքանչյուր GOP անկախ է և կոդավորվում է առանձին, այնպես որ կարելի է արդարացնել առանց այլ GOP-երին հաղորդելով: Դա նշանակում է, որ դրվագները կարող են տեղադրվել անկախ միմյանցից: Այսպիսի հատվածավորում նվազեցնում է ուշացումը, թույլ տալով ավելի վաղ սկսել գործընթացը:
  2. Tcoder-ը մշակվում է յուրաքանչյուր հատվածի համար: Հավաքում է հերթականությունը, ներբեռնում հատվածը բաց աղբյուրից, կոդավորում է տարբեր լուծումներ (հիշեցնենք, որ նվագարկիչը կարող է ընտրել տարբերակը՝ հիմնվելով միացման արագությանը), ապա արդյունքը دوبե վերադառնում է պահեստ և նշում է հատվածը մշակված դիրքում տվյալների բազայում: Երբ բոլոր հատվածները մշակվեն, Tcoder-ը ուղարկում է առաջադրանքը արդյունքների ձևավորման համար հաջորդ կոմպոնենտին:
  3. Сombiner-ը համակցում է արդյունքները միասին: Ներբեռնում է բոլոր հատվածները, որոնք իրականացվել են Tcoder-ի կողմից, ձևավորում է հոսքեր տարբեր լուծումների համար:

Կարճ նշումներ ձայնի մասին: Ամենատարածված աուդիո կոդեկը AAC ունի неприятная особенность: Եթե հաշվարկել հատվածները առանձին, ապա միացնել դրանք Seamless פשוט չի լինի: Վերումը կտեսնվեն: Տեսակների կոդեկներում այդպիսի խնդիր չկա: Теоретически можно поискать сложное техническое решение, но эта игра пока что просто не стоит свеч (аудио весит существенно меньше, чем видео). Поэтому у нас параллельно кодируется только видео, а аудиոդорожка обрабатывается целиком.

Արդյունքներ

Պարալել մշակումով մենք զգալիորեն կրճատել ենք ուշացումը՝ մեր կողմից տեսանյութի загрузка և նրա հասանելիությունը օգտվողներին: Օրինակ, նախկինում բազմազան որակների համար FullHD ֆիլմի վերաբերվելու համար, որը տևում էր մեկ ժամ, կարող էր անցնել երկու ժամ: Այժմ դա զբաղեցնում է 15 րոպե: Ամենավառապես, պարալել մշակումով մենք ստեղծում ենք բարձր լուծման տարբերակը ավելի արագ, քան ցածր լուծման տարբերակը նախորդ մոտեցման դեպքում, միջանկյալ արդյունքով:

Եվ ևս մեկ բան: Բոլորովին նախկին մոտեցմամբ, կամ կարող էին բավական թվով սերվերներ լինեք, կամ նրանք թերվել են առանց առաջադրանքների: Պարալել կոդավորումը թույլ է տալիս բարձրացնել սարքերու օգտագործման բաժինը: Այժմ մեր զույգից գոյացած հարուստ սերվերները մշտապես ինչ-որ բանով զբաղված են:

Աληություն է, որ մենք դեռ կարող ենք սպասել: Օրինակ, մենք կարող ենք զգալիորեն տնտեսել ժամանակ, եթե սկսենք մշակել տեսանյութի հատվածները դեռ այն պահին, երբ դա մեզ հասու է ամբողջությամբ: Ինչպես ասում են, ավելի հեռու՝ ավելի շատ:

留言中告诉我们您希望了解哪些视频工作领域的任务。

同行经验的有用链接

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster