. Pasi përfundova të gjithë klipet, dëshiroja të organizoja shikimin e tyre online, njësoj si në YouTube. Duke qenë se këto janë kujtime personale të familjes, nuk mund t'i ngarkoja ato në YouTube. Më duhet një hosting më privat, njëkohësisht i përshtatshëm dhe i sigurt.
Hapi 3. Publikimi
ClipBucket, kloni open-source i YouTube që mund të instalohet në serverin tuaj
Së pari, provoja , i quajtur kloni open-source i YouTube që mund të instalohet në serverin tuaj.

Çuditërisht, ClipBucket nuk ka ndonjë udhëzues për instalimin. Falë unë me anë të , një mjet për menaxhimin e konfigurimit të serverëve.
Pjesërisht, vështirësia ishte se skenarët e instalimit të ClipBucket janë të kompletuarisht të prishur. Në atë kohë, unë dhe sipas kushteve të kontratës nuk kisha të drejtë të kontriboja në klonin open-source të YouTube, por unë , nga e cila ishte lehtë për të bërë korrigjimet e nevojshme. Kaluan muaj, dhe ata ende nuk kuptonin se cila ishte problema. Në vend të kësaj, ata shtonin gjithçka më shumë gabime në çdo version.
Kompania ClipBucket punonte sipas modelit të konsulencës — ata publikuan kodin e tyre falas dhe chargesin për ndihmën në vendosje. Me kalimin e kohës, më erdhi në mendje se kompania, e cila fiton para nga mbështetje paguese, ndoshta nuk është shumë e interesuar që klientët ta instalojnë produktin vetë.
MediaGoblin, një alternativë më moderne
Pas disa muajsh zhgënjimi me ClipBucket, rishikova opsionet e disponueshme dhe gjeta .

— është një platformë autonome për shkëmbimin e mediave
MediaGoblin ka shumë kënaqësi. Ndryshe nga ClipBucket në PHP të pangjyrshëm, MediaGoblin është shkruar në Python — në këtë gjuhë kam shumë përvojë në shkrimin e kodit. Ka , i cili lejon automatizimin e lehtë të ngarkimit të videove. Më e rëndësishmja, MediaGoblin vjen në , i cili përjashton çdo problem me instalimin.
— është teknologjia që krijon një ambient autonom për aplikacionin, që punon kudo. Unë përdor Docker në .
Vështirësia e jashtëzakonshme e rikthimit në Docker të MediaGoblin
Mendoja se deployimi i imazhit Docker të MediaGoblin do të ishte një detyrë triviale. Mirë, nuk doli kështu.
Imazhi përfundimtar nuk kishte dy funksionalitete të nevojshme:
- Autentifikimi
- MediaGoblin, për default, krijon një portal mediatik publik, por unë kisha nevojë për një mënyrë për të kufizuar aksesin e të tjerëve.
- Transkodimi
- Çdo herë që ngarkoni një video, MediaGoblin përpiqet ta rikodojë atë për streaming optimal. Nëse videoja është fillimisht e gatshme për streaming, transkodimi e përkeqëson cilësinë.
- MediaGoblin ofron , por në imazhin ekzistues Docker, kjo nuk është e mundur.
Mirë, asnjë problem. Imazhi Docker vjen me , kështu që mund të .
Fatkeqësisht, imazhi Docker nuk mbledh më nga repozitori aktual . Kam përpjekur ta sinkronizoj atë me versionin e ndërtimit të fundit të suksesshëm, por as kjo nuk funksionoi. Edhe pse përdora pikërisht të njëjtin kod, varësitë e jashtme të MediaGoblin ishin ndryshuar, duke prishur ndërtimin. Pas dhjetra orësh, e përsërisja procesin e ndërtimit të MediaGoblin-it për 10-15 minuta, deri sa më në fund funksionoi.
Disa muaj më vonë ndodhi e njëjta gjë. Në total, gjatë dy viteve të fundit, zinxhiri i varësive të MediaGoblin ka prishur ndërtimin tim disa herë, dhe hera e fundit ndodhi sapo kur po shkruaja këtë artikull. Në fund, publikova me dhe versione specifike të bibliotekave të shënuara qartë. Në fjalë të tjera, në vend të pohimit të dyshimtë se MediaGoblin punon me çdo version >= 3.0, unë vendosa një varësi specifike për versionin , sepse e kam testuar MediaGoblin me këtë version. Duket se produkti ka nevojë për , por unë ende nuk kam përfshirë këtë.
Në çdo rast, pas shumë orësh përpjekje, më në fund arrita të ndërtoj dhe konfiguroj MediaGoblin në imazhin Docker. Atje ishte tashmë e lehtë dhe .
Hapi 4. Hosting
Duke pasur parasysh se MediaGoblin funksiononte nën Docker në kompjuterin tim lokal, hapi tjetër ishte deploy në një server në re, për të lejuar familjen të shikonte videot.
MediaGoblin dhe problemi i ruajtjes së videove
Ka shumë platforma që pranojnë imazhe Docker dhe i publikojnë ato në një URL publike. Problemi ishte se, përveç aplikacionit vetë, duhej të publikoheshin 33 GB skedarë video. Mund të ishin koduar ashtu si duhet në imazhin docker, por do të rezultonte i madh dhe i paestetik. Ndryshimi i një rreshti në konfigurim do të kërkonte një ri-deploy të 33 GB të dhënash.
Kur përdora ClipBucket, unë e zgjida problemin duke përdorur — një utilitare që lejon sistemin operativ të ngarkojë direktoret në ruajtjen në cloud Google Cloud si rrugë të zakonshme të sistemit të skedarëve. Unë publikova skedarët video në Google Cloud dhe përdora gcsfuse për t'i shfaqur ato në ClipBucket si skedarë lokalë.
Dallimi ishte se ClipBucket punonte në një makinë virtuale të vërtetë, ndërsa MediaGoblin në një kontejner Docker. Këtu, montimi i skedarëve nga ruajtja në Cloud ishte shumë më i ndërlikuar. Kam shpenzuar dhjetëra orë duke zgjidhur të gjitha problemet dhe shkrova për këtë .

Integrimi fillestar i MediaGoblin me ruajtjen Google Cloud, për të cilin
Pas disa javëve në rregullimin e të gjithë komponenteve, gjithçka funksionoi. Pa bërë asnjë ndryshim në kodin e MediaGoblin, arrita ta bëj atë të lexojë dhe shkruajë skedarët mediatikë në ruajtjen Google.
Problemi i vetëm ishte se MediaGoblin filloi të punojë tepër ngadalë. Ngarkimi i miniaturave të videove në faqe zgjaste 20 sekonda. Nëse gjatë shikimit të videos hidhnit përpara, MediaGoblin ndalohej për 10 sekonda të pafund përpara se të rifillonte reproduktimin.
Problemi kryesor që po përjetonin përdoruesit ishte se videot dhe imazhet arrinin te ata përmes një rruge të gjatë dhe të ndërlikuar. Atyre u duheshin të kalonin nga shërbimi i ruajtjes në re të Google përmes gcsfuse në MediaGoblin, Nginx — dhe vetëm atëherë ato arrinin në shfletuesin e përdoruesit. Ngushtica kryesore ishte gcsfuse, i cili nuk është optimizuar për performancë të shpejtë. Zhvilluesit paralajmërojnë për vonesa të mëdha në funksionimin e utilites direkt në faqen kryesore të projektit:

Paralajmërimet në dokumentacionin e gcsfuse
Idealisht, shfletuesi duhet të nxjerrë skedarët direkt nga Google Cloud, duke anashkaluar të gjitha shtresat ndërmjetëse. Si të bëhet kjo, pa u thelluar në bazën e kodit të MediaGoblin dhe pa shtuar logjikë të komplikuar për integrimin e Google Cloud?
Truku sub_filter në nginx
Me fat, gjetja e një zgjidhje të thjeshtë, ndonëse pak e shëmtuar. Shtova në konfigurimin default.conf në Nginx :
sub_filter "/mgoblin_media/media_entries/" "https://storage.googleapis.com/MY-GCS-BUCKET/media_entries/";
sub_filter_once off;Në instalimin tim, Nginx punonte si një proxy midis MediaGoblin dhe përdoruesit përfundimtar. Direktiva e lartë i thotë Nginx-it të kryejë kërkimin dhe zëvendësimin e të gjitha përgjigjeve HTML nga MediaGoblin përpara se t'i dërgojë ato përdoruesit përfundimtar. Nginx zëvendëson gjithë rrugët relative të mediave nga MediaGoblin me URL-të nga ruajtja në të cilin Google.
Për shembull, MediaGoblin gjeneron këtë HTML:
Nginx e ndryshon përgjigjen:
Tani gjithçka funksionon siç duhet:

Nginx rregullon përgjigjet nga MediaGoblin, për të lejuar që klientët të kërkojnë mediat direkt nga ruajtja në Google.
E bukura në zgjidhjen time është se ajo nuk kërkon asnjë ndryshim në kodin e MediaGoblin. Direktiva e dy linjave e Nginx-it integron lehtësisht MediaGoblin me Google Cloud, ndonëse këto shërbime nuk dinë asgjë për njëra-tjetrën.
Shënim: kyçja për këtë zgjidhje është që skedarët në ruajtin në re të Google duhet të jenë të aksesueshëm për të gjitha. Për të reduktuar rrezikun e qasjes të paautorizuar, unë përdor një emër të gjatë rastësor për kontejnerin (p.sh.,
mediagoblin-39dpduhfz1wstbprmyk5ak29) dhe sigurohem që politika e kontrollit të aksesit të kontejnerit nuk lejon që përdoruesit e paautorizuar të nxjerrin përmbajtjen e katalogut.
Produkti përfundimtar
Në këtë moment, unë kisha një zgjidhje të plotë dhe funksionale. MediaGoblin kishte funksionuar me kënaqësi në kontejnerin e vet në platformën cloud të Google, kështu që nuk ishte e nevojshme të riparohej ose të përditësohej shpesh. Çdo gjë në procesin tim ishte e automatizuar dhe e riprodhueshme, duke lejuar ndryshime të thjeshta ose rikthim në versione të mëparshme.
Familja ime e ka pëlqyer shumë sa e lehtë është të shikosh video. Me hakatin e mësipërm për Nginx, puna me video tani ishte po aq e shpejtë sa në YouTube.
Ekrani i shikimit duket si më poshtë:

Përmbajtja e katalogut të videove familjare me etiketën 'Më të mirat'
Një klikim mbi miniaturën sjell një ekran të tillë:

Shikimi i një klipi të veçantë në serverin e medias
Pas një periudhë të gjatë pune, më bëri shumë kënaqësi t'u jepja të afërmve mundësinë të shihnin videot tona në një ndërfaqe kaq të përshtatshme si në YouTube, siç e kisha dëshiruar që në fillim.
Bonusi: ulja e kostove deri në më pak se 1 dollar në muaj.
Nuk e shihni videon në shtëpi shpesh, vetëm çdo disa muaj. Familja ime përbashkërisht ka gjeneruar rreth 20 orë trafik brenda një viti, por serveri ka punuar 24 orë. Çdo muaj paguaja $15 për serverin, i cili ishte i papunë 99.7% të kohës.
Në fund të vitit 2018, Google lëshoi një produkt. . Veçoria kryesore ishte nisja e kontejnerëve Docker aq shpejt saqë aplikacioni mund të përgjigjej në kërkesat HTTP. Kështu, serveri mund të qëndronte në modalitetin pritës - dhe të aktivizohej vetëm kur dikush donte të hynte. Për aplikacione të zakonshme si e imja, kostot u ulën nga 15 dollarë në muaj në disa cent në vit.
Për arsye që tashmë nuk i mbaj mend, Cloud Run nuk punonte me imazhin tim MediaGoblin. Por me shfaqjen e Cloud Run, kujtova se ofron një shërbim të ngjashëm falas, dhe mjetet e tyre janë shumë më të përdorshme se ato të Google.
Me serverin falas për aplikacione, shpenzimi i vetëm është ruajtja e të dhënave. Ruajtja standarde rajonale e Google kushton 2,3 centë/GB. Arkivi i videos zë 33 GB, kështu që unë paguaj vetëm 77 centë në muaj.

Kostoja e këtij zgjidhjeje është vetëm 0,77 $ në muaj.
Këshilla për ata që planifikojnë ta provojnë.
Sigurisht, procesi im ka marrë shumë kohë. Por shpresoj se kjo artikull do t'ju ndihmojë të kurseni 80-90% përpjekjeve për digitalizimin dhe publikimin e videove shtëpiake. Në një seksion të veçantë mund të gjeni për të gjithë procesin, por këtu janë disa këshilla të përgjithshme:
- Në fazën e digitalizimit dhe redaktimit, ruani sa më shumë metadatash të mundshme.
- Informacioni i çmuar shpesh është shkruar në etiketat e kasetave të videos.
- Shkruani se cili klip është xhiruar nga cila kasetë dhe në çfarë rendi.
- Shkruani datën e xhirimit, e cila mund të jetë e shënuar në video.
- Mendoni për pagesën e shërbimeve profesionale të digitalizimit.
- Do t'ju jetë jashtëzakonisht vështirë dhe e shtrenjtë të arrini një cilësi digitalizimi si ata.
- Por shmangni kompaninë që quhet EverPresent (më shkruani nëse keni nevojë për detaje).
- Nëse po e digjitizoni vetë, blini një HDD.
- Një video e pakompresuar me rezolutë standarde zë 100-200 MB për minutë.
- Unë gjithçka e kam ruajtur në (10 TB).
- Shkruani metadata në ndonjë format të njohur që nuk është i lidhur me një aplikacion të caktuar.
- Përshkrimet e videove, kodet e kohës, datat, etj.
- Nëse ruani metadata në formatin e një aplikacioni të caktuar (ose, gjë më e keqe, nuk i ruani fare), atëherë nuk do të jeni në gjendje të ripërsërisni punën nëse vendosni të përdorni një zgjidhje tjetër.
- Gjatë redaktimit, do të shihni shumë metadata të dobishme në video. Do t'i humbni ato nëse nuk i ruani.
- Çfarë po ndodh në video?
- Kush është aty?
- Kur është regjistruar?
- Shënoni videot e preferuara.
- Sinqerisht, shumica e materialeve video të shtëpisë janë mjaft të mërzitura.
- Unë aplikoj etiketën “best of” për videot e mia të preferuara dhe i hap ato kur dua të shikoj video argëtuese.
- Sa më shpejt që të jetë e mundur, organizoni një zgjidhje gjithëpërfshirëse që procesi të ndodhë menjëherë nga fillimi në fund.
- Unë përpiqesha fillimisht të digjitalizoj të gjitha kasetat, pastaj të redaktoj të gjitha kasetat, etj.
- Më vjen keq që nuk kam filluar me një kasetë dhe nuk kam bërë gjithë punën me të. Atëherë do ta kuptonin se cilat zgjidhje dhe në cilat etapa ndikojnë në rezultatet përfundimtare.
- Minimizoni ribërdhjen.
- Çdo herë që editoj ose që ribërdh një klip, përkeqësoj cilësinë e tij.
- Dixhitalizoni pamjet origjinale me cilësinë maksimale dhe pastaj ribërdhni çdo klip vetëm një herë në formatin që shfletuesit e riprodhojnë natyrshëm.
- Përdorni zgjidhjen më të thjeshtë të mundshme për publikimin e videoklipeve.
- Në retrospektivë, MediaGoblin duket si një mjet shumë i komplikuar për një skenar të thjeshtë të gjenerimit të faqeve në internet me një grup static të skedarëve video.
- Nëse do të filloja gjithçka nga e para, do të përdorja një gjenerues faqeje statike si , ose .
- Bëni montazh.
- Montazhi i videove është një mënyrë interesante për të bashkuar momentet më të mira nga disa videoklipe.
- Elementi më i rëndësishëm në montazh është muzika. P.sh., tema nga The National, është një zbulim personal për mua.
Burimi: habr.com
