ClipBucket, egy nyílt forráskódú YouTube klón, amely telepíthető saját szerverére
Az első, amit kipróbáltam ClipBucket, amely nyílt forráskódú YouTube-klónnak nevezi magát, amelyet telepíthet a szerverére.
Meglepő módon a ClipBucket nem rendelkezik telepítési utasításokkal. Köszönet külső vezetésnek я automatizálta a telepítési folyamatot keresztül Ansible, egy szerverkonfiguráció-kezelő eszköz.
A nehézség egy része az volt, hogy a ClipBucket telepítési szkriptjei teljesen megszakadtak. Annak idején én dolgozott a Google-nál és a szerződés feltételei szerint nem nekem volt jogom hozzájárulni a nyílt forráskódú YouTube klónhoz, de én hibajelentést tett közzé, amelyből a szükséges korrekciók könnyen elvégezhetők. Teltek-múltak a hónapok, és még mindig nem értették, mi a probléma. Ehelyett mindent hozzáadtak több mint hibák minden kiadásban.
A ClipBucket tanácsadói modellen működött – ingyenesen adták ki kódjukat, és díjat számoltak fel a telepítési segítségért. Fokozatosan tudatosult bennem, hogy a fizetett támogatásból pénzt kereső cég valószínűleg nem nagyon érdeklődik abban, hogy az ügyfelek maguk telepítsék a terméket.
MediaGoblin, egy modernebb alternatíva
A ClipBucket miatt több hónapig tartó frusztráció után megvizsgáltam a rendelkezésre álló lehetőségeket, és megtaláltam MediaGoblin.
A MediaGoblinnak sok finomsága van. Ellentétben a csúnya PHP ClipBucketével, a MediaGoblin Python nyelven íródott, egy olyan nyelven, amelyen sok tapasztalatom van a kódírásban. Eszik parancssori felület, amely lehetővé teszi a videók letöltésének egyszerű automatizálását. A legfontosabb, hogy a MediaGoblin is benne van Docker kép, amely kiküszöböli a telepítési problémákat.
Dokkmunkás egy olyan technológia, amely autonóm környezetet hoz létre az alkalmazások bárhol futtatásához. Dockert használok számos projektje.
A MediaGoblin újradokkolásának meglepő nehézségei
Feltételeztem, hogy a MediaGoblin docker image telepítése triviális feladat lenne. Hát, ez nem egészen így sikerült.
A kész kép nem tartalmazott két szükséges funkciót:
Hitelesítés
A MediaGoblin alapértelmezés szerint létrehoz egy nyilvános médiaportált, és szükségem volt egy módra, hogy korlátozzam a hozzáférést a kívülállókra.
Átkódolás
Minden alkalommal, amikor letölt egy videót, a MediaGoblin megpróbálja átkódolni az optimális streamelés érdekében. Ha a videó kezdetben készen áll a streamelésre, az átkódolás rontja a minőséget.
Sajnos a Docker image már nem a jelenlegiből épül fel. MediaGoblin adattár. Megpróbáltam szinkronizálni a legutóbbi sikeres build verziójával, de ez sem sikerült. Annak ellenére, hogy pontosan ugyanazt a kódot használtam, a MediaGoblin külső függőségei megváltoztak, megszakítva a felépítést. Több tucat óra elteltével újra és újra végigfutottam a 10-15 perces MediaGoblin összeállítási folyamatot, míg végül sikerült.
Néhány hónappal később ugyanez történt. Összességében a MediaGoblin függőségi lánc többször megtörte a buildemet az elmúlt néhány évben, és utoljára ez a cikk írása közben történt. végre publikáltam a MediaGoblin saját villája c keményen kódolt függőségek és a könyvtárak kifejezetten meghatározott verziói. Más szóval, a kétes állítás helyett, hogy a MediaGoblin bármilyen verzióval működik zeller >= 3.0, telepítettem egy adott verziófüggőséget zeller 4.2.1mert ezzel a verzióval teszteltem a MediaGoblint. Úgy tűnik, a terméknek szüksége van reprodukálható építési mechanizmus, de még nem tettem meg.
Mivel a MediaGoblin a Dockert futtatta a helyi számítógépemen, a következő lépés az volt, hogy telepítettem egy felhőkiszolgálóra, hogy a család megnézhesse a videót.
MediaGoblin és a videó tárolási probléma
Számos platform létezik, amely Docker-képet készít, és nyilvános URL-címen tárolja. A bökkenő az, hogy magán az alkalmazáson kívül 33 GB videófájlt kellett közzétenni. Lehetséges volt keményen kódolni őket egy Docker-képbe, de ez nehézkes és csúnya lenne. A konfiguráció egy sorának megváltoztatásához 33 GB adat újratelepítésére lenne szükség.
Amikor a ClipBucketet használtam, megoldottam a problémát gcsfuse - egy segédprogram, amely lehetővé teszi az operációs rendszer számára, hogy könyvtárakat töltsön fel a Google Cloud felhőtárhelyére a fájlrendszer szokásos elérési útjaként. A videofájlokat a Google Cloudon tároltam, és a gcsfuse segítségével helyi fájlként jelennek meg a ClipBucketben.
A különbség az volt, hogy a ClipBucket valódi virtuális gépen futott, míg a MediaGoblin egy Docker konténerben. Itt sokkal nehezebbnek bizonyult a fájlok felcsatolása a felhőtárhelyről. Több tucat órát töltöttem az összes probléma megoldásával, és írtam is róla az egész blogbejegyzést.
A MediaGoblin kezdeti integrációja a Google Cloud Storage-val, amiről beszélek elmondták 2018-ban
Több hét után az összes alkatrész beállítása után minden működött. Anélkül, hogy bármit is módosítottam volna a MediaGoblin kódjában, átvertem, hogy médiafájlokat olvasson és írjon a Google felhőtárhelyére.
Az egyetlen probléma az volt, hogy a MediaGoblin obszcén lassú lett. Teljes 20 másodpercbe telt, mire a videók miniatűrjei betöltődnek a kezdőlapra. Ha egy videó megtekintése közben előreugrott, a MediaGoblin végtelen 10 másodpercig szünetet tart, mielőtt folytatná a lejátszást.
A fő probléma az volt, hogy a videók és képek hosszú, körbefutó úton jutottak el a felhasználóhoz. A Google felhőtárhelyéről a gcsfuse-n keresztül a MediaGoblin-re, az Nginx-re kellett eljutniuk – és csak ezután jutottak el a felhasználó böngészőjéhez. A fő szűk keresztmetszet a gcsfuse volt, ami nincs sebességre optimalizálva. A fejlesztők közvetlenül a projekt főoldalán figyelmeztetnek a segédprogram működésében bekövetkező nagy késésekre:
Ideális esetben a böngészőnek közvetlenül a Google Cloudból kell letöltenie a fájlokat, megkerülve a közbenső rétegeket. Hogyan teheti ezt meg anélkül, hogy belemerülne a MediaGoblin kódbázisba vagy bonyolult Google Cloud integrációs logikát adna hozzá?
Sub_filter trükk az nginxben
Szerencsére találtam egy egyszerű megoldást немного csúnya. Hozzáadtam az Nginx alapértelmezett.conf konfigurációjához egy ilyen szűrő:
Az én beállításomban az Nginx proxyként működött a MediaGoblin és a végfelhasználó között. A fenti direktíva arra utasítja az Nginxet, hogy keresse meg és cserélje ki az összes MediaGoblin HTML-választ, mielőtt kiszolgálná azokat a végfelhasználónak. Az Nginx a MediaGoblin médiafájlok összes relatív elérési útját lecseréli a Google felhőtárhelyéről származó URL-ekre.
Például a MediaGoblin a következő HTML-kódot állítja elő:
Az Nginx átírja a MediaGoblin válaszait, így az ügyfelek közvetlenül a Google felhőtárhelyéről kérhetnek médiafájlokat
A megoldásom legjobb része az, hogy nem szükséges módosítani a MediaGoblin kódot. Az Nginx kétsoros direktívája zökkenőmentesen integrálja a MediaGoblin-t és a Google Cloud-ot, annak ellenére, hogy a szolgáltatások semmit sem tudnak egymásról.
Megjegyzés: Ez a megoldás megköveteli, hogy a Google felhőtárhelyen lévő fájlok mindenki számára olvashatóak legyenek. A jogosulatlan hozzáférés kockázatának csökkentése érdekében hosszú, véletlenszerű vödörnevet használok (pl. mediagoblin-39dpduhfz1wstbprmyk5ak29) és győződjön meg arról, hogy a tárolóhely hozzáférés-vezérlési házirendje nem teszi lehetővé a jogosulatlan felhasználók számára a címtár tartalmának megjelenítését.
Végtermék
Ezen a ponton volt egy teljes, működő megoldásom. A MediaGoblin boldogan futott a saját konténerében a Google felhőplatformján, így nem kellett gyakran javítani vagy frissíteni. A folyamatban minden automatizált és reprodukálható volt, lehetővé téve az egyszerű szerkesztéseket vagy a korábbi verziók visszaállítását.
A családomnak nagyon tetszett, hogy milyen könnyű volt nézni a videókat. A fent leírt Nginx hack segítségével a videókkal való munka olyan gyors lett, mint a YouTube-on.
A megtekintő képernyő így néz ki:
A családi videókatalógus tartalma „Legjobb” címke szerint
A bélyegképre kattintva a következő képernyő jelenik meg:
Egyetlen klip megtekintése médiaszerveren
Több éves munka után hihetetlenül kifizetődő volt lehetőséget adni a családtagoknak, hogy ugyanazon a felhasználóbarát YouTube-szerű felületen nézhessék meg videóinkat, mint amilyet eredetileg szerettem volna.
Bónusz: Csökkentse a költségeket havi 1 dollár alá
Nem gyakran nézel otthoni videókat, csak néhány havonta. A családom összesen körülbelül 20 óra forgalmat generált egy év alatt, de a szerver éjjel-nappal működött. Havi 15 dollárt fizettem egy szerverért, amely az esetek 99,7%-ában leállt.
2018 végén a Google kiadta a terméket Cloud Run. A gyilkos funkció olyan gyorsan futtatta a Docker-tárolókat, hogy az alkalmazás válaszolni tudott a HTTP-kérésekre. Vagyis a szerver készenléti módban maradhatott, és csak akkor indulhatott el, ha valaki hozzá akart érni. Az olyan ritkán futó alkalmazások esetében, mint az enyém, a költségek havi 15 dollárról évi néhány centre csökkentek.
Már nem emlékszem, hogy a Cloud Run nem működött a MediaGoblin-képemmel. De a Cloud Run megjelenésével ez eszembe jutott Heroku hasonló szolgáltatást kínál ingyenesen, és eszközeik sokkal felhasználóbarátabbak, mint a Google-é.
Az ingyenes alkalmazásszerverrel az egyetlen költség az adattárolás. A Google szabványos regionális tárhelye 2,3 cent/GB-ba kerül. A videoarchívum 33 GB-ot foglal el, így csak 77 centet fizetek havonta.
Ez a megoldás mindössze 0,77 dollárba kerül havonta
Tippek azoknak, akik szeretnének kipróbálni
Nyilvánvalóan sokáig tartott a folyamat. De remélem, hogy ez a cikk segít megspórolni az otthoni videók digitalizálásával és közzétételével kapcsolatos erőfeszítések 80-90%-át. Külön részben megtalálod részletes, lépésről lépésre útmutató az egész folyamat során, de íme néhány általános tipp:
A digitalizálási és szerkesztési szakaszban a lehető legtöbb metaadatot őrizze meg.
A videokazetta-címkékre gyakran értékes információkat rögzítenek.
Kövesse nyomon, hogy melyik klip melyik szalagról készült és milyen sorrendben.
Írja le a forgatás dátumát, amely megjelenhet a videón.
Fontolja meg a professzionális digitalizálási szolgáltatások fizetését.
Fogsz rendkívüli módon a digitalizálás minőségét tekintve nehéz és költséges összehozni őket.
De maradjon távol az EverPresent nevű cégtől (üzenjen nekem, ha részletekre van szüksége).
Ha saját maga végzi a digitalizálást, vásároljon HDD-t.
Rögzítse a metaadatokat valamilyen általános formátumban, amely nincs egy adott alkalmazáshoz kötve.
Klipleírások, időkódok, dátumok stb.
Ha a metaadatokat alkalmazás-specifikus formátumban menti (vagy ami még rosszabb, egyáltalán nem menti el), akkor nem tudja újra elvégezni a munkát, ha más megoldás mellett dönt.
Szerkesztés közben sok hasznos metaadatot lát a videón. Elveszíti őket, ha nem menti meg őket.
Mi történik a videóban?
Ki van ott regisztrálva?
Ezt mikor rögzítették?
Jelölje be kedvenc videóit.
Őszintén szólva a legtöbb házi videó elég unalmas.
A „best of” címkét felhelyezem a kedvenc klipjeimre, és megnyitom őket, amikor vicces videókat akarok nézni.
Szervezzen meg egy átfogó megoldást a lehető legkorábban, hogy a folyamat az elejétől a végéig egyenesen menjen.
Megpróbáltam először az összes szalagot digitalizálni, majd az összes szalagot szerkeszteni stb.
Bárcsak egy szalaggal kezdtem volna, és minden munkát azzal végeztem volna. Akkor megérteném, hogy mely döntések és milyen szakaszokban befolyásolják a végeredményt.
Tartsa minimálisra az átkódolást.
Minden alkalommal, amikor szerkeszt vagy újrakódol egy klipet, rontja a minőségét.
Digitalizálja nyers felvételeit maximális minőségben, majd minden klipet pontosan egyszer kódoljon át a böngészők által natívan megjelenített formátumba.
Használja a lehető legegyszerűbb megoldást videoklipek közzétételére.
Utólag visszatekintve a MediaGoblin túlságosan összetett eszköznek tűnik ahhoz a meglehetősen egyszerű forgatókönyvhöz, amikor egy statikus videofájlokból álló weboldalakat generál.
Ha újrakezdeném, egy statikus webhelygenerátort használnék, mint pl Hugo, Jekyll vagy Zavaros.
Végezze el a telepítést.
A videószerkesztés szórakoztató módja annak, hogy több videó legjobb pillanatait ötvözze.
A szerkesztésben a zene a legfontosabb. Például a téma elképesztő Lassú hó a The Nationalból ez az én személyes felfedezésem.