Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2

Beşa yekem lêgerîna dijwar a dîjîtalkirina vîdyoyên malbata kevn û dabeşkirina wan di dîmenên cihê de vedibêje.. Piştî ku hemî klîban hilberandin, min xwest ku dîtina wan serhêl wekî li ser YouTube-ê hêsan organîze bikim. Ji ber ku ev bîranînên kesane yên malbatê ne, ew nikarin li ser YouTube bixwe bêne şandin. Pêdiviya me bi mêvandariyek taybetî heye ku hem hêsan û hem jî ewledar e.

Gav 3: Weşandin

ClipBucket, klonek çavkaniyek vekirî ya YouTube-ê ku dikare li ser servera xwe were saz kirin

Yekem tiştê ku min ceriband ClipBucket, ku xwe wekî klonek YouTube-a çavkaniya vekirî ya ku hûn dikarin li ser servera xwe saz bikin bi nav dike.

Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2

Ecêb e, ClipBucket tu rêwerzên sazkirinê tune. Bi saya ji bo rêveberiya derve я pêvajoya sazkirinê otomatîk kirin bi alîkariya Ansible, amûrek rêveberiya vesazkirina serverê.

Beşek ji dijwariyê ev bû ku skrîptên sazkirinê yên ClipBucket bi tevahî şikestin. Wê demê ez li Google xebitî û li gorî şertên peymanê mafê min tune ku ez beşdarî klona çavkaniya vekirî ya YouTube bikim, lê ez raporek xeletiyê şand, ku jê re sererastkirinên pêwîst bi hêsanî dikarin bêne kirin. Meh derbaz bûn, û wan hîna jî fem nedikir mesele çi ye. Di şûna wan de her tişt zêde kirin bêtir di her serbestberdanê de xeletî hene.

ClipBucket li ser modelek şêwirmendiyê xebitî - wan koda xwe belaş berdan û ji bo arîkariya bicîhkirinê drav kirin. Hêdî hêdî ji min re xuya bû ku pargîdaniyek ku ji piştevaniya drav drav dide belkî ne pir eleqedar e ku xerîdar bixwe hilberê saz bikin.

MediaGoblin, alternatîfek nûjentir

Piştî çend mehan xemgîniya ClipBucket, min li vebijarkên berdest nihêrî û min dît MediaGoblin.

Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2
MediaGoblin platformek parvekirina medyaya negirêdayî ye

MediaGoblin gelek xweşiyên xwe hene. Berevajî ClipBucket di PHP-ya nebaş de, MediaGoblin bi Python-ê hatî nivîsandin, zimanek ku ez pê re gelek ezmûna kodkirinê heye. Xwarin navrûya rêza fermanê, ku dihêle hûn bi hêsanî dakêşana vîdyoyê bixweber bikin. Ya herî girîng, MediaGoblin tê Wêneyê Docker, ku pirsgirêkên sazkirinê ji holê radike.

Docker teknolojiyek e ku ji bo serîlêdanek ku li her deverê bixebite jîngehek xweser diafirîne. Ez di nav de Docker bikar tînim gelek projeyên wî.

Zehmetiya sosret a ji nû ve dokerkirina MediaGoblin

Min texmîn kir ku bicîhkirina wêneya dokera MediaGoblin dê karekî hindik be. Welê, ew bi vî rengî bi ser neket.

Wêneya qediyayî du fonksiyonên pêwîst tune:

  • Daxuyanî
    • MediaGoblin ji hêla xwerû ve portalek medyaya giştî diafirîne, û ji min re rêyek hewce bû ku ez gihîştina biyanî sînordar bikim.
  • Transcoding
    • Her gava ku hûn vîdyoyek dakêşin, MediaGoblin hewl dide ku wê ji bo weşana çêtirîn veguherîne. Ger vîdyoyê di destpêkê de ji bo weşanê amade ye, veguheztin kalîteyê xirab dike.
    • MediaGoblin pêşkêşî dike neçalakkirina veguheztina bi vebijarkên veavakirinê, lê ev di wêneyek Docker a heyî de nayê kirin.

Belê, pirsgirêk nîne. Wêneyê Docker pê re tê çavkaniya vekirî, ji ber vê yekê gengaz e xwe ji nû ve ava bike.

Mixabin, wêneya Docker êdî ji ya heyî nayê çêkirin. Depoya MediaGoblin. Min hewl da ku wê bi guhertoya ji çêkirina serketî ya paşîn re hevdeng bikim, lê ew jî têk çû. Her çend min tam heman kod bikar anî, pêwendiya derveyî ya MediaGoblin guherî, avahî şikand. Piştî bi dehan demjimêran, min pêvajoya avakirina MediaGoblin-ê ya 10-15 hûrdemî û ji nû ve derbas kir heya ku ew di dawiyê de xebitî.

Piştî çend mehan heman tişt qewimî. Bi tevahî, zincîra girêdayîbûna MediaGoblin di van du salên çûyî de çend caran avakirina min şikand, û cara paşîn ku ew qewimî tenê dema ku min vê gotarê dinivîsand bû. Min di dawiyê de weşand fork xwe ya MediaGoblin c girêdanên hişk-kodkirî û guhertoyên pirtûkxaneyan bi eşkere hatine destnîşan kirin. Bi gotinek din, li şûna îdîaya gumanbar ku MediaGoblin bi her guhertoyê re dixebite kerfes >= 3.0, min girêdanek guhertoyek taybetî saz kir kerfes 4.2.1ji ber ku min MediaGoblin bi vê versiyonê ceriband. Wusa xuya dike ku hilberê hewce dike mekanîzmaya avakirina dubare, lê min hîn nekiriye.

Wekî din, piştî gelek demjimêrên têkoşînê, min di dawiyê de karî MediaGoblin di wêneyek Docker de ava bikim û mîheng bikim. Jixwe li wir hêsan bû ji transkodkirina nehewce derbas bibin и Nginx ji bo pejirandinê saz bikin.

Gav 4. Hosting

Ji ber ku MediaGoblin Docker li ser komputera min a herêmî dimeşand, gava din ew bû ku wê li serverek ewr were bicîh kirin da ku malbat bikaribe vîdyoyê temaşe bike.

MediaGoblin û pirsgirêka hilanîna vîdyoyê

Gelek platform hene ku wêneyek Docker digirin û li ser URLek gelemperî mêvandar dikin. Girîng ev e ku ji bilî sepanê bixwe, diviyabû 33 GB pelên vîdyoyê werin weşandin. Mimkun bû ku wan di nav wêneyek Docker-ê de hişk-kod bikin, lê ew ê giran û nebaş be. Guhertina yek rêza veavakirinê dê ji nû ve 33 GB daneyê hewce bike.

Dema ku min ClipBucket bikar anî, min pirsgirêk çareser kir gcsfuse - amûrek ku destûrê dide pergala xebitandinê ku pelrêtan li hilanîna cloudê ya Google Cloud wekî rêyên birêkûpêk berbi pergala pelan bar bike. Min pelên vîdyoyê li Google Cloud mêvandar kir û gcsfuse bikar anî da ku ew di ClipBucket de wekî pelên herêmî xuya bikin.

Cûdahî ev bû ku ClipBucket di makîneyek virtual ya rastîn de dimeşiya, dema ku MediaGoblin di konteynerek Docker de dimeşiya. Li vir, sazkirina pelan ji hilanîna cloudê pir dijwartir derket. Min bi dehan saetan hemû pirsgirêkan çareser kir û li ser nivîsand tevahiya posta blogê.

Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2
Yekbûna destpêkê ya MediaGoblin bi hilanîna Google Cloud re, ku ez qala wê dikim di sala 2018 de got

Piştî çend hefteyên sererastkirina hemî pêkhateyan, her tişt xebitî. Bêyî ku ez di koda MediaGoblin-ê de guheztinê bikim, min ew xapandin ku pelên medyayê li hilanîna cloudê Google bixwînin û binivîsim.

Pirsgirêk tenê ev bû ku MediaGoblin bi rengekî bêaqil hêdî bû. Bi tevahî 20 saniyeyan girt ku hûrguliyên vîdyoyê li ser rûpelê malê werin barkirin. Ger hûn dema ku hûn vîdyoyek temaşe dikin ber bi pêş ve bizivirin, MediaGoblin dê 10 saniyeyên bêdawî raweste berî ku ji nû ve veguhezîne.

Pirsgirêka sereke ev bû ku vîdyoyan û wêneyan rêyek dûr û dirêj berbi bikarhêner ve birin. Ew neçar bûn ku ji hilanîna ewr a Google-ê bi navgîniya gcsfuse biçin MediaGoblin, Nginx - û tenê hingê ew gihîştin geroka bikarhêner. Kêşeya sereke gcsfuse bû, ku ji bo lezê ne xweşbîn e. Pêşdebiran di derbarê derengiyên mezin ên di xebata kargêriyê de rast li ser rûpela sereke ya projeyê hişyar dikin:

Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2
Hişyariyên li ser performansa kêm di belgeya gcsfuse de

Bi îdeal, gerok divê pelan rasterast ji Google Cloud bigire, ji her qatên navîn derbas bike. Meriv çawa dikare wiya bike bêyî ku têkevin nav bingeha koda MediaGoblin an lê zêdekirina mantiqa entegrasyona Google Cloud ya tevlihev?

Di nginx de hîleka Sub_filterê

Xwezî min çareseriyek hêsan dît, her çend piçek nerind. Min li Nginx veavakirina default.conf zêde kir parzûneke wisa:

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

Di sazkirina min de, Nginx di navbera MediaGoblin û bikarhênerê dawî de wekî proxy tevdigere. Rêbernameya jorîn rê dide Nginx ku berî ku wan ji bikarhênerê dawî re xizmetê bike, li hemî bersivên MediaGoblin HTML-ê bigere û biguhezîne. Nginx hemî rêyên têkildar ên pelên medyayê yên MediaGoblin bi URL-yên ji hilanîna ewr a Google-ê diguhezîne.

Mînakî, MediaGoblin HTML-ê bi vî rengî çêdike:

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

Nginx bersivê diguherîne:

<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>

Niha her tişt wekî ku tê hêvî kirin dixebite:

Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2
Nginx bersivên ji MediaGoblin ji nû ve dinivîse da ku xerîdar dikarin pelên medyayê rasterast ji hilanîna cloudê Google bixwazin

Di derbarê çareseriya min de ya çêtirîn ev e ku ew ji koda MediaGoblin re guheztinê hewce nake. Rêvebiriya du-xêz a Nginx bi rengek bêkêmasî MediaGoblin û Google Cloud yek dike, her çend karûbar bi tevahî tiştek li ser hev nizanin.

bingotin: Ev çareserî hewce dike ku pelên di hilanîna cloudê Google de ji hêla her kesî ve bêne xwendin. Ji bo kêmkirina metirsiya gihîştina bêdestûr, ez navek dirêj û bêserûber bikar tînim (mînak. mediagoblin-39dpduhfz1wstbprmyk5ak29) û verast bikin ku polîtîkaya kontrolkirina gihîştina kepçeyê rê nade bikarhênerên bêdestûr ku naveroka pelrêçê nîşan bidin.

Hilbera dawîn

Di vê nuqteyê de min çareseriyek bêkêmasî, xebatkar hebû. MediaGoblin bi bextewarî di konteynera xwe ya li ser platforma ewr a Google-ê de dimeşiya, ji ber vê yekê ne hewce bû ku ew pir caran were pelixandin an nûvekirin. Di pêvajoya min de her tişt bixweber û ji nû ve hate hilberandin, ku rê dide guherandinên hêsan an vegerandina guhertoyên berê.

Malbata min bi rastî jê hez kir ku temaşekirina vîdyoyan çiqas hêsan bû. Bi alîkariya hacka Nginx ya ku li jor hatî destnîşan kirin, xebata bi vîdyoyan bi qasî li ser YouTube-ê bilez bû.

Dîmena temaşekirinê wiha xuya dike:

Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2
Naveroka kataloga vîdyoya malbatê ji hêla etîketa "Best"

Bi tikandina li ser tabloyê dîmenek bi vî rengî derdikeve holê:

Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2
Dîtina yek klîpek li ser serverek medyayê

Piştî xebata bi salan, pir xelatdar bû ku meriv fersendê bide endamên malbatê ku vîdyoyên me di heman navbeynkariya YouTube-ya-dostane ya ku min di destpêkê de dixwest temaşe bikin.

Bonus: Mesrefên mehê ji 1 $ kêmtir kêm bikin

Hûn pir caran vîdyoyên malê nabînin, tenê çend mehan carekê. Malbata min bi hev re di salekê de nêzî 20 demjimêran seyrûsefer çêkir, lê server 15/99,7 dixebitî. Min ji bo serverek ku% XNUMX kêm bû mehê XNUMX $ drav da.

Di dawiya 2018 de, Google hilberek derxist Cloud Run. Taybetmendiya kujer ew qas zû konteynerên Docker dimeşand ku serîlêdan dikaribû bersivê bide daxwazên HTTP. Ango, server dikare di moda standby de bimîne û tenê gava ku kesek bixwaze bigihîje wê dest pê bike. Ji bo serîlêdanên ku kêm caran têne xebitandin wekî ya min, lêçûn ji mehê 15 $ daketiye çend cent salane.

Ji ber sedemên ku êdî nayê bîra min, Cloud Run bi wêneya min MediaGoblin re nexebitî. Lê bi hatina Cloud Run re hat bîra min Heroku karûbarek wekhev belaş pêşkêşî dike, û amûrên wan ji yên Google-ê pir bikêrhatîtir in.

Bi serverek serîlêdana belaş, tenê lêçûn hilanîna daneyê ye. Mesrefa hilanîna herêmî ya standard a Google 2,3 cent / GB ye. Arşîva vîdyoyê 33 GB digire, ji ber vê yekê ez mehê tenê 77 cent didim.

Lêgerîna min a heşt salan a dîjîtalkirina 45 kasetên vîdyoyê. Beş 2
Ev çareserî tenê mehê 0,77 $ lêçû

Serişteyên ji bo kesên ku plan dikin ku biceribînin

Eşkere ye ku pêvajo demek dirêj min girt. Lê ez hêvî dikim ku ev gotar dê ji we re bibe alîkar ku hûn 80-90% ji hewildana dîjîtalkirin û weşandina vîdyoyên xaniyê xwe biparêzin. Di beşa cuda de hûn dikarin bibînin rêberiya gav-bi-gav berfireh li seranserê pêvajoyê, lê li vir çend serişteyên gelemperî hene:

  • Di qonaxa dîjîtalkirin û sererastkirinê de, bi qasî ku gengaz dibe metadata biparêzin.
    • Agahiyên hêja bi gelemperî li ser etîketên kasetên vîdyoyê têne tomar kirin.
    • Bişopînin ka kîjan klîp ji kîjan kasêtê û bi çi rêzê hatiye kişandin.
    • Dîroka kişandinê, ku dibe ku li ser vîdyoyê xuya bibe, binivîsin.
  • Ji bo karûbarên dîjîtalkirina profesyonel drav bidin fikirîn.
    • tu dê gelekî di warê kalîteya dîjîtalbûnê de berhevkirina wan dijwar û biha ye.
    • Lê ji pargîdaniyek bi navê EverPresent dûr bimînin (ger hûn hûrguliyan hewce bikin ji min re bişînin).
  • Heke hûn bi xwe dîjîtalkirinê dikin, HDD bikirin.
    • Vîdyoya pênase standard a bêkomperkirî 100-200 MB serê hûrdemê digire.
    • Min her tişt li ser destê xwe girt Synology DS412 + (10 TB).
  • Metadata di hin formatek hevpar de tomar bikin ku bi serîlêdanek taybetî ve ne girêdayî ye.
    • Danasîna klîp, kodên demê, tarîx, hwd.
    • Ger hûn metadata di forma serîlêdanê-taybetî de hilînin (an xirabtir, wê qet hilnebijêrin), heke hûn biryar bidin ku çareseriyek cûda bikar bînin hûn ê nikaribin kar ji nû ve bikin.
    • Gava ku hûn biguherînin, hûn li ser vîdyoyê gelek metadata kêrhatî dibînin. Heke hûn wan xilas nekin hûn ê wan winda bikin.
      • Di vîdyoyê de çi diqewime?
      • Kî li wir qeydkirî ye?
      • Ev kengî hatiye tomarkirin?
  • Vîdyoyên xweyên bijare nîşan bikin.
    • Rast be, piraniya vîdyoyên malê pir bêzar in.
    • Ez etîketa "herî baş" li klîbên xweyên bijare dixemilînim û gava ku ez dixwazim vîdyoyên qeşeng temaşe bikim wan vedikim.
  • Ji bo ku pêvajo rasterast ji destpêkê heya dawiyê bimeşe çareseriyek berfireh bi zûtirîn dem organîze bikin.
    • Min hewl da ku pêşî hemî kasetan dîjîtal bikim, paşê hemî kasetan biguherînim û hwd.
    • Xwezî min bi kasetekê dest pê bikira û hemû kar pê re bikira. Wê hingê ez ê fêm bikim ka kîjan biryar û di kîjan qonaxan de bandorê li encama dawîn dike.
  • Rekodkirina herî kêm bidomînin.
    • Her gava ku hûn klîbekê biguherînin an ji nû ve kod bikin, hûn qalîteya wê kêm dikin.
    • Dîmenên xwe yên xav bi kalîteya herî zêde dîjîtal bikin, dûv re her klîp tam carekê bi forma ku gerok bi xwemalî pêşkêş dikin veguherînin.
  • Ji bo weşandina klîbên vîdyoyê çareseriya herî hêsan bikar bînin.
    • Di paşerojê de, MediaGoblin ji bo senaryoya pir hêsan a çêkirina rûpelên malperê bi komek pelên vîdyoyê yên statîk ve wekî amûrek pir tevlihev xuya dike.
    • Ger min ji nû ve dest pê bikira, ez ê wekî hilberînerek malpera statîk bikar bînim Hugo, Jekyll an Gridsome.
  • Sazkirinê bikin.
    • Guhertina vîdyoyê rêyek kêfxweş e ku meriv demên çêtirîn ji gelek vîdyoyan berhev bike.
    • Tişta sereke di guherandinê de muzîk e. Mînakî, mijar ecêb e Slow Snow ji The National, ev vedîtina şexsî min e.

Source: www.habr.com