Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն

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

Քայլ 3. Պարբերություն

ClipBucket, օպենսորթված YouTube-ի հայտնությունն, որն այլևս տեղադրել կարելի է սեփական սերվերում

Առաջին հերթին փորձեցի ClipBucket, որը իրեն անվանում է օպենսորթված YouTube-ի նմանակ, որը կարելի է տեղադրել սեփական սերվերում.

Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն

Հրաշքով, բայց ClipBucket-ում չկա որևէ տեղադրման հրահանգ: Կորուստվելով արտաքին ուղեցույցի կողմից ես աուտոմատացրեցի տեղադրման գործընթացը հաստատող Ansible, սերվերային կոնֆիգուրացիայի կառավարման ծրագիր.

Այդքան դժվարություններից մեկի մի մասը այն էր, որ ClipBucket-ի տեղադրման scripts-ը ամբողջովին փչացած էին: Այդ ժամանակ ես աշխատում էի Google-ում և պայմանագրերից ելնելով չունեի իրավունք հանգեցնել օպենսորթված YouTube-ի, բայց ես հրապարակեցի սխալների հաշվետվություն, որից կարելի էր հեշտությամբ կատարել անհրաժեշտ փոփոխությունները: Սահմանվել էին ամիսներ, և նրանք մինչև հիմա չէին հասկացել, թե որտեղ էր խնդիրը: Դրանից բացի, նրանք ավելացրեցին ամենը սխալներ յուրաքանչյուր թողարկման մեջ.

ClipBucket ընկերությունը աշխատում էր խորհրդատվության մոդելով՝ իր կոդը թողարկելով ազատ և գումար վերցնելով տեղադրման օգնության համար: Արդեն հասկացա, որ ընկերությունը, որը գումար է վաստակում վճարովի աջակցությամբ, հավանաբար, ոչ մի մեծ հետաքրքրություն ունի, որպեսզի հաճախորդները ինքնուրույն տեղադրեն արտադրանքը.

MediaGoblin, ավելի ժամանակակից այլընտրանք

Չորեք ամիսների ClipBucket-ի անհաջողություններից հետո ես վերանայեցի մատչելի տարբերակները և գտա MediaGoblin.

Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն
MediaGoblin ՝ այս ինքնաբավ մեդիա փոխանակման ուղեցույցը.

MediaGoblin-ում շատ լավ բաներ կան. ClipBucket-ի չափի լուրջ PHP-ից նմանինչը գրանցված է Python-ում՝ այդ լեզվով ես մեծ փորձ ունեմ ծածկագրեր գրելու: Ունի հրկիզային հրահանգների ինտերֆեյս, որը հեշտացնում է տեսանյութերի ավտոմատացում ապրել. Ամենակարևորն այն է, որ MediaGoblin-ը գալիս է Docker-ի պրոյեկտով, որը բացառում է տեղադրման հետ կապված բոլոր խնդիրները.

Docker ՝ դա տեխնոլոգիա է, որը ստեղծում է ավտոնոմ միջավայր հավելվածի համար, որը գործում է ցանկացած տեղ: Ես օգտագործում եմ Docker իմ բազմաթիվ նախագծերում. Մեդիա-կառավարման շահագործման աստիճանազրկումը MediaGoblin-ի բավականին դժվարություն.

Ես ենթադրեցի, որ Docker-ի պատրաստի իմիջ MediaGoblin-ի տեղադրումը կլինի պարզ խնդիր: Չէ, դա այդպես չէր.

Ամսյա իմիջում չկար երկու անհրաժեշտ գործառույթներ:

Ստուգում

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

Ինչ էլ լինի, խնդիր չկա: Docker նկարը գալիս է բոլորիղ ծառայող կոդով, այնպես որ դուք կարող եք կանչել այն մեծացնել.

Վախենալով, Docker նկարը այլևս չի կառուցվում ներկայիս MediaGoblin պահոցից. Ես փորձեցի համընկնել այն վերջին հաջող հավաքկարների տարբերակի հետ, բայց էլ չի ստացվել: Չնայած ես օգտագործել եմ հենց նույն կոդը, MediaGoblin-ի արտաքին կախվածությունները փոխվել են, հարվածելով հավաքմանը: Թվացույցների ընթացքում ես անընդմեջ կրկնում էի 10-15 րոպեների հավաքման գործընթացը, մինչեւ այն վերջապես աշխատեց:

Որոշ ամիս հետո կրկին նույնը տեղի ունեցավ: Ընդհանուր առմամբ վերջին մի քանի տարիների ընթացքում MediaGoblin-ի կախվածության շղթան մի քանի անգամ խանգարեց իմ հավաքումը, և վերջին անգամ դա տեղի ունեցավ հենց հիմա, երբ ես գրում էի այս հոդվածը: Վերջապես, ես հրապարակեցի իմ սեփական MediaGoblin ֆորմը հետ կարողացնում պատրաստված կախվածություններով և ակնհայտորեն նշված գրադարանների տարբերակներով: Այլ խոսքով, MediaGoblin-ի հետ աշխատելու թերագնահատված փաստարկի փոխարեն, ես կոնկրետ կախվածություն հաստատեցի celery >= 3.0, ես կարող եմ հաստատել կոնկրետ կախվածությունը celery 4.2.1, որովհետև ես փորձարկել էի MediaGoblin այս տարբերակով: Ներքին միտքն անհրաժեշտ է կրկնվող հավաքումների մեխանիզմ, բայց ես դեռ չեմ զբաղվել դրանով:

Միևնույն է, բազմաթիվ ժամ անցկացնելուց հետո, ես վերջապես կարողացա կառուցել և սահմանել MediaGoblin-ը Docker նկարի մեջ: Այնտեղ արդեն հեշտ էր անցնել անգրագիտորեն վերածնմանը և տեղադրել Nginx-а երեխայացման համար.

Քայլ 4. Հոստինգ

Չնայած MediaGoblin-ը աշխատում էր Docker-ի վրա իմ տեղական համակարգչում, հաջորդ քայլը տեղադրում էր Cloud սերվերում, որպեսզի ընտանիքը կարողանա դիտել տեսանյութերը:

MediaGoblin և տեսանյութերի պահպանման խնդիրը

Կան շատ հարթակներ, որոնք ընդունում են Docker նկարը և տեղադրում են այն հասարակ URL-ի վրա: Դժվարությունը կայանում է նրանում, որ ինքն aplicación-ին հավելվածին 33 ԳԲ տեսանյութերի ֆայլեր պետք էին հրապարակել: Կարող էինք դրանք կոշտ էակով տեղադրելու, բայց դա ստացվում էր խոշոր և անտեսանելի: Մի որոնման էական փոփոխությունը պահանջելու համար, նորից տեղադրում էր 33 ԳԲ տվյալների:

Երբ ես օգտագործեցի ClipBucket-ը, ես խնդիրը լուծեցի gcsfuse — գործիք, որը թույլ է տալիս օպերացիոն համակարգին վերադառնալ Google Cloud-ի ամպային պահեստի ուղիները որպես սովորական ֆայլային համակարգի ուղիներ: Ես տեսանյութերը տեղադրեցի Google Cloud-ում և օգտագործեցի gcsfuse-ը, որ նրանք հանդես գան ClipBucket-ում որպես տեղական ֆայլեր.

Տարբերությունը նրանում էր, որ ClipBucket-ը աշխատում էր իրական վիրտուալ մեքենայում, մինչդեռ MediaGoblin-ը գործում էր Docker կոնտեյներում։ Այստեղ ֆայլերի մոնտաժումը մեխանիկական պահոցից շատ ավելի բարդ էր։ Ես ծախսեցի բազմաթիվ ժամեր բոլոր խնդիրները լուծելու վրա և գրել եմ այդ մասին մեկ ամբողջ բլոգային գրառման մեջ.

Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն
Ամենակային MediaGoblin-ի ագրեգացումը Google Cloud պահոցի հետ, որի մասին ես հայտարարել եմ 2018 թվականին

Մի քանի շաբաթների ընթացքում բոլոր բաղկացուցիչները աշխատեցին։ Անգամ MediaGoblin-ի կոդում ապրումները փոխելով ես նենգորեն ստիպել էի, որ այն կարդա և գրի մեդիա ֆայլեր Google Cloud պահոցում։

Միակ խնդիրը այն էր, որ MediaGoblin-ը սկսեց աշխատել չափազանց դանդաղ։ Տեսանյութերի մանրապատկերների բեռնողի մուտք գործելը գլխավոր էջում պահանջում էր целых 20 վարկյան։ Եթե տեսանյութը դիտելու ժամանակ դուք առաջ էինք անցնում, MediaGoblin-ը կանգնում էր անվերջ 10 վարկյան, նախքան վերադառնալու վարվելաոճը։

Գլխավոր խնդիրը այն էր, որ տեսանյութերն ու պատկերները գնացին թափանցիկ, շրջիկ ճանապարհով։ Նրանք ստիպված էին անցնել Google Cloud պահովանից gcsfuse-ով MediaGoblin, Nginx-ից միայն հետո կգան օգտագործողի բրաուզեր։ Բարձրերան տեղը gcsfuse-ը էր, որը նպատակահարմար չի լինի արագ աշխատանքի համար։ Արդյունաբերողները տեղեկացնում են մեծ դանդաղ շարժումների մասին հենց նախագծի գլխավոր էջում։

Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն
Տեղեկատվություն տղամարդկանց դանդաղ կատարողականության մասին gcsfuse-ի փաստաթղթերում

Ամենաիդալական բրաուզերը պետք է գտնի ֆայլերը անմիջապես Google Cloud-ից, շրջելով բոլոր միջถุนային շերտերը։ Ինչպե՞ս դա անել՝ MediaGoblin-ի կոդային բազայից դուրս գալով և չհավելելով Google Cloud-ի ինտեգրման բարդ տրամաբանություն:

nginx-ի sub_filter հնարքը

Օրինակ, ես գտա պարզ լուծում, սակայն մանրամասների հիասոսական։ Ես ավելացրել եմ default.conf-ի կոնֆիգուրացիայում Nginx այսպիսի ֆիլտր:

sub_filter "\/mgoblin_media\/media_entries\/:" "https:\/\/storage.googleapis.com\/MY-GCS-BUCKET\/media_entries\/";
sub_filter_once off;

Որպես իմ Nginx գործունեություն, նա աշխատում էր որպես պրոքսի MediaGoblin-ի և վերջնական օգտագործչի միջև։ վերոնշյալ հրահանգը արդեն ասում է Nginx-ին որոնել ու փոխարինել բոլոր HTML պատասխանները MediaGoblin-ի, նախքան դրանք փոխանցել վերջին օգտագործչին։ Nginx-ը փոխարինում է MediaGoblin-ի բոլոր հարաբերական ուղիները մեդիա ֆայլերի հետ Google-ի պաշարների URL-ներով։

Օրինակ, MediaGoblin-ը արտադրում է այսպիսի HTML․

<video width="720" height="480" controls autoplay>
  <source
    src="\/mgoblin_media\/media_entries\/16\/Michael-riding-a-bike.mp4"
    type="video\/mp4">
<\/video>

Nginx-ը փոփոխում է պատասխան․

<video width="720" height="480" controls autoplay>
  <source
    src="https:\/\/storage.googleapis.com\/MY-GCS-BUCKET\/media_entries\/16\/Michael-riding-a-bike.mp4"
    type="video\/mp4">
<\/video>

Այժմ ամեն բան աշխարհում ընդունելի է.

Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն
Nginx-ը գրում է MediaGoblin-ից ստացված պատասխանները, այնպես որ օգտագործողները կարող են հարցնել մեդիա ֆայլեր անմիջապես Google Cloud պաշարներից։

Իմ որոշման ամենա հաճելի մասը այն է, որ դա պահանջում է MediaGoblin-ի կոդում որևէ փոփոխություն: Երկու տողանոց Nginx- ի հրամանը հեշտությամբ ինտեգրում է MediaGoblin-ը և Google Cloud-ը, թեև այդ ծառայությունները միմյանց մասին ոչինչ չեն գիտակցում:

Նշում: այս լուծումը պահանջում է, որ Google-ის ամպային պահպանման ֆայլերը հասանելի լինեն բոլորի համար ընթերցման համար: Անհանդուրժողական հասանելիության ռիսկը նվազեցնելու համար ես օգտագործում եմ պատահական և երկար անունով ուրբաթ (օրինակ, mediagoblin-39dpduhfz1wstbprmyk5ak29) և ստուգում եմ, որ վերացման քաղաքականությունը չի թույլատրում չարտոնված օգտվողներին ցուցադրել վյուֆ-կենտրոնի բովանդակությունը:

Վերջնական արտադրանքը

Այս պահին ես ունեի լիարժեք, գործունակ լուծում: MediaGoblin-ը երջանիկ էր աշխատում իր սեփական կոնտեյներում Google ամպային հարթակում և այդպիսով, այն չէր պահանջում հաճախակի շտկումներ կամ թարմացումներ: Իմ ամբողջ գործընթացը ավտոմատացված և վերարտադրելի էր, ինչը թույլ էր տալիս պարզապես փոփոխություններ կամ հեռանալ նախորդ տարբերակներից:

Իմ ընտանիքը շատ գոհ էր, թե որքան հեշտ է տեսնել տեսանյութերը: Վերը նշված Nginx-ի հնարքով, տեսանյութերի աշխատանքը դարձավ այնպիսին, ինչպես YouTube-ում:

Դիտման էկրանն ունի հետևյալ տեսքը:

Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն
Ընտանիքի վիդեո կատալոգի բովանդակությունը «Լավագույն» պիտակով

Մանրապատկերին սեղմելը ցույց է տալիս այդ էկրանը:

Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն
Ազատ Ֆիլմի դիտումը մեդիա սերվերում

Շատ տարիներ աշխատանքի հետո, ինձ անհավատալի հաճելի էր տալ բարեկեցիկներին մեր տեսանյութերը տեսնելու հնարավորություն այնպիսի հարմարավետ ինտերֆեյսով, ինչպես YouTube-ում, ինչպես նախկինում էի ցանկանում:

Բոնուս: ծախսերի նվազեցում մինչև 1 դոլար ամսական

Դուք հազվադեպ եք դիտում տան տեսանյութեր, միայն յուրաքանչյուր մի քանի ամիս մեկ անգամ: Իմ ընտանիքը միասին բացառապես 20 ժամ տրաֆիկ է ստեղծել մեկ տարվա ընթացքում, սակայն սերվերը աշխատանքի մեջ էր 24/7: Ես ամսական վճարում էի $15 սերվերի համար, որը 99.7% ժամանակ աշխատանք չուներ:

2018-ի վերջին Google-ը ներկայացրեց արտադրանքը Cloud Run. Նորագույն առանձնահատկությունն էր Docker կոնտեյներով настолько արագ գործարկելը, որպեսզի կիրառումը կարողանար արձագանքել HTTP հարցումներին: Աւելին, սերվերը կարող էր մնալ սպասման մեջ՝ գործարկվել միայն այն ժամանակ, երբ ինչ-որ մեկը ցանկանում էր մուտք ունենալ: Դժվար ներս նետվող կիրառությունների համար, ինչպիսին է իմը, ծախսերը նվազեցին 15 դոլարից ամսական մինչև մի քանի տասնյակ ցենտ:

Ես այլևս չեմ հիշում, թե ինչու, սակայն Cloud Run-ը չէր աշխատում իմ MediaGoblin պատկերի հետ: Բայց Cloud Run-ի հայտնվելով ես հիշեցի, որ Heroku առաջարկում է նման ծառայություն անվճար, և իրենց գործիքները շատ ավելի հարմար են, քան Google-ի:

Անվճար նախագիծային սերվերով միայն մեկ ծախսն է տվյալների պահպանումը: Արժեքային միջին պահեստը Google-ում արժե 2.3 ցենտ/ԳԲ: Վիդեո արխիվը զբաղեցնում է 33 ԳԲ, հետևաբար ես ամսական վճարում եմ ընդամենը 77 ցենտ:

Իմ ութ տարվա որոնումը 45 վիդեոացույցների թվայինացման հարցում. Երկրորդ մասն
Այս լուծման արժեքը միանգամայն կազմում է $0,77 ամսական

Առաջարկներ նրանց, ովքեր պատրաստվում են փորձել

Եղեք, որ իմ գործընթացը շատ ժամանակ պահանջեց: Բայց ես հույս ունեմ, որ այս հոդվածը կօգնի ձեզ խնայել 80-90% ջանքեր ընտանեկան տեսանյութերի թվայնացման և հրապարակման մեջ: Ընդամենը բաժնում կարող եք գտնել ամբողջական քայլ առ քայլ ուղեցույց որոնք բացատրում են ողջ գործընթացը, բայց here's ոմանք ընդհանուր խորհուրդներ:

  • Թվայնացման և խմբագրման փուլում պահպանեք հնարավորինս շատ մետադատներ:
    • Արժեքավոր տեղեկությունները հաճախ նշված են վիդեոալբոմների վրա:
    • Գրանցեք, թե որ տեսանյութը մոնտաժված է ինչպես ալբոմից և ինչ հերթով:
    • Գրանցեք նկարահանման ամսաթիվը, որը կարող է նշված լինել տեսանյութում:
  • Գնացեք պրոֆեսիոնալ թվայնացման ծառայության հետ:
    • Դուք պետք է չափազանց կանցնել նրանց դարձման որակի համեմատ:
    • Բայց հեռու մնացեք EverPresent ընկերությունից (գրեք ինձ, եթե անհրաժեշտ են մանրամասներ):
  • Եթե ինքներդ եք թվայնացնում, գնել HDD:
    • Անսեղմված ստանդարտ տեսանյութը 100-200 ՄԲ է մեկ րոպեում:
    • Ես ամեն ինչը պահում էի իմ Synology DS412+ (10 TB):
  • Գրանցեք մետադատները տարածված ձևաչափով, որը կապված չէ որոշակի ծրագրի հետ:
    • Տեսանյութերի նկարագրություններ, ժամանակի կոդեր, ամսաթվերը և այլն:
    • Եթե մետադատները պահում եք որոշակի ծրագրի ձևաչափով (կամ, ինչը ավելի վատ է, ոչինչ չեք պահում), ապա չեք կարող վերականգնել աշխատանքը, եթե որոշեք օգտագործել այլ լուծում:
    • Հեգնանքի ընթացքում շատ օգտակար մետադատներ եք տեսնում տեսանյութի մեջ: Դուք դրանք կկորցնեք, եթե չպահեք:
      • Ինչ է պատահում տեսանյութում?
      • Ով է այնտեղ նկարահանված?
      • Երբ է դա նկարահանված?
  • Նշեք ձեր սիրած տեսանյութերը:
    • Աληա, մեծամասնությունը ընտանեկան տեսանյութերից բավական շատ ձանձրալի է:
    • Ես “լավագույն” պիտակը ծրագրում եմ իմ սիրելի տեսանյութերի համար եւ դիտում եմ դրանք, երբ ուզում եմ հետաքրքիր տեսանյութեր դիտել:
  • Ինչ հնարավորին վաղ կազմակերպեք ամբողջական լուծում, որպեսզի գործընթացը սկսվի անմիջապես սկզբից մինչև վերջ:
    • Ես առաջինը փորձեցի թվայնացնել բոլոր ալբոմները, ապա խմբագրված բոլոր ալբոմները և այլն:
    • Չեմ կարելի, որ ես սկսեցի մեկ ալբոմից և բոլոր աշխատանքը դրա շուրջ իրականացրեցի: Այդ ժամանակ կնկատեի, որ ինչ լուծումներ և որ փուլերում ազդում են վերջնական արդյունքի վրա:
  • Ապակծառատեք վերամշակումը:
    • Յուրաքանչյուր անգամ, երբ չեք խմբագրում կամ վերամշակում տեսանյութը, դուք վատացնում եք դրա որակը:
    • Թվայնացրեք ս_raw կադրերը առավելագույն որակով, ապա վերամշակեք յուրաքանչյուր տեսանյութ միայն մեկ անգամ այն ձևաչափով, որը բրաուզերները բնականաբար ընթանում են:
  • Օգտագործեք հնարավոր ամենանշանակավոր լուծումը՝ տեսանյութերի հրապարակման համար:
    • Անցյալում MediaGoblin-ն ինձ թվում է չափազանց բարդ գործիք՝ բավականին պարզ անջատված վիդեոէջքերի կայքի ստեղծման համար:
    • Եթե ես սկսեի էլի, կօգտագործեի մասնագիտացված կայքերի միացնող կայք, ինչպիսին է Hugo, Jekyll կամ Gridsome.
  • Պրոդյուցացիայի մասը:
    • Տեսանյութերի մոնտաժը հետաքրքիր միջոց է միավորելու մի քանի տեսանյութի լավագույն պահերը։
    • Մոնտաժի մեջ ամենակարևորը երաժշտությունն է։ Օրինակ, Սլո Սնոու թեման Slow Snow The National-ից, սա իմ անձնական բացահայտումն է։

Ընտանիք: habr.com

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