Ինչպես մենք ութ անգամ արագացրինք տեսանյութերի կոդավորումը

Ինչպես մենք ութ անգամ արագացրինք տեսանյութերի կոդավորումը

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

Ես Ասկար Կամալովն եմ, մեկ տարի առաջ միացա Yandex վիդեո տեխնոլոգիաների թիմին։ Այսօր ես համառոտ կպատմեմ Habr-ի ընթերցողներին այն մասին, թե ինչպես կոդավորման գործընթացի զուգահեռականացման միջոցով մեզ հաջողվեց զգալիորեն արագացնել տեսանյութի առաքումը օգտատերերին։

Այս գրառումն առաջին հերթին կհետաքրքրի նրանց, ովքեր նախկինում չեն մտածել, թե ինչ է կատարվում տեսածառայությունների գլխարկի տակ։ Մեկնաբանություններում կարող եք հարցեր տալ և առաջարկել թեմաներ հետագա գրառումների համար։

Մի քանի խոսք բուն առաջադրանքի մասին։ Yandex-ը ոչ միայն օգնում է այլ կայքերում տեսանյութեր որոնել, այլև տեսանյութեր է պահում սեփական ծառայությունների համար: Լինի դա հեղինակային հաղորդում, թե սպորտային հանդիպում եթերում, ֆիլմ KinoPoisk-ում կամ տեսանյութեր Zen-ում և News-ում, այս ամենը վերբեռնվում է մեր սերվերներում: Որպեսզի օգտատերերը կարողանան դիտել տեսանյութը, այն պետք է պատրաստ լինի՝ փոխակերպել պահանջվող ձևաչափին, ստեղծել նախադիտում կամ նույնիսկ անցնել տեխնոլոգիայի միջոցով։ DeepHD. Անպատրաստ ֆայլը պարզապես տեղ է զբաղեցնում: Եվ խոսքը ոչ միայն երկաթի օպտիմալ օգտագործման, այլեւ օգտատերերին բովանդակության առաքման արագության մասին է։ Օրինակ. հոկեյի խաղի որոշիչ պահով ռեկորդը կարող է որոնվել որոնման մեջ հենց իրադարձությունից մեկ րոպե անց:

Հաջորդական կոդավորում

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

Ինչպես մենք ութ անգամ արագացրինք տեսանյութերի կոդավորումը

Հաճախորդը բեռնում է տեսանյութը պահեստում, Analyzer բաղադրիչը հավաքում է մետա տեղեկատվություն և փոխանցում է տեսանյութը Worker բաղադրիչին փոխակերպման համար: Բոլոր քայլերը կատարվում են հաջորդաբար: Միևնույն ժամանակ, կոդավորման համար կարող են լինել բազմաթիվ սերվերներ, բայց միայն մեկը զբաղված է որոշակի տեսանյութի մշակմամբ։ Պարզ, թափանցիկ սխեմա. Այստեղ ավարտվում են նրա առաքինությունները: Նման սխեման չափվում է միայն ուղղահայաց (առավել հզոր սերվերներ գնելով):

Միջանկյալ արդյունքով հաջորդական կոդավորում

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

Մի կողմից՝ տեսանյութն ավելի արագ է հասանելի դառնում։ Իսկ դա օգտակար է կարևոր իրադարձությունների համար։ Բայց մյուս կողմից պատկերը մշուշոտ է, և դա նյարդայնացնում է հանդիսատեսին։

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

Զուգահեռ կոդավորում

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

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

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

Ինչպես մենք ութ անգամ արագացրինք տեսանյութերի կոդավորումը

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

Մի քանի խոսք ձայնի մասին. Ամենատարածված AAC աուդիո կոդեկը տհաճ տարօրինակություն ունի: Եթե ​​դուք կոդավորում եք բեկորները առանձին, ապա դրանք անխափան սոսնձելը պարզապես չի աշխատի: Անցումները նկատելի կլինեն։ Վիդեո կոդեկներն այս խնդիրը չունեն: Տեսականորեն, դուք կարող եք բարդ տեխնիկական լուծում փնտրել, բայց այս խաղը պարզապես արժանի չէ մինչ այժմ մոմը (աուդիոն կշռում է զգալիորեն ավելի քիչ, քան տեսանյութը): Հետևաբար, մենք միայն զուգահեռաբար կոդավորում ենք տեսանյութը, և ամբողջ աուդիո ուղին մշակվում է:

Արդյունքները

Տեսանյութերի զուգահեռ մշակման միջոցով մենք զգալիորեն կրճատել ենք տեսանյութի մեզ վերբեռնման և օգտատերերի համար հասանելի լինելու ուշացումը: Օրինակ, մեկուկես ժամ տևողությամբ FullHD ֆիլմի համար տարբեր որակի մի քանի ամբողջական տարբերակներ ստեղծելու համար պահանջվում էր երկու ժամ: Այժմ ամեն ինչ տևում է 15 րոպե։ Ավելին, զուգահեռ մշակման ընթացքում մենք ստեղծում ենք բարձր լուծույթով տարբերակ նույնիսկ ավելի արագ, քան ցածր ռեզոնանսային տարբերակը հին միջանկյալ արդյունքի մոտեցմամբ:

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

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

Մեկնաբանություններում գրեք, թե տեսանյութի հետ աշխատելու ոլորտում ինչ խնդիրների մասին կուզենայիք կարդալ։

Օգտակար հղումներ ոլորտի գործընկերների փորձին

Source: www.habr.com

Добавить комментарий