Schritt 3. Veröffentlichen
ClipBucket, ein Open-Source-YouTube-Klon, der auf Ihrem eigenen Server installiert werden kann
Mein erster Versuch war ClipBucket , das sich selbst als Open-Source-YouTube-Klon bezeichnet, den Sie auf Ihrem Server installieren können.
Überraschenderweise hat ClipBucket keine Installationsanweisungen. Dank eines Tutorials von Drittanbietern habe ich den Installationsprozess mit Ansible , einem Tool zur Verwaltung der Serverkonfiguration , automatisiert .
Ein Teil der Schwierigkeit bestand darin, dass die ClipBucket-Installationsskripte vollständig beschädigt waren. Zu dieser Zeit arbeitete ich bei Google und hatte gemäß den Vertragsbedingungen kein Recht, zum Open-Source-YouTube-Klon beizutragen. Ich veröffentlichte jedoch einen Fehlerbericht, anhand dessen sich die erforderlichen Korrekturen leicht vornehmen ließen. Monate vergingen und sie verstanden immer noch nicht, was das Problem war. Stattdessen fügten sie mit jeder Version mehr und mehr Fehler hinzu .
ClipBucket arbeitete an einem Beratungsmodell - sie veröffentlichten ihren Code kostenlos und berechneten eine Gebühr, um bei der Bereitstellung zu helfen. Mir wurde langsam klar, dass ein Unternehmen, das mit bezahlter Unterstützung Geld verdient, wahrscheinlich nicht sehr daran interessiert ist, dass Kunden das Produkt selbst installieren.
MediaGoblin, eine modernere Alternative
Nach Monaten der Frustration mit ClipBucket überprüfte ich die verfügbaren Optionen und fand MediaGoblin .
MediaGoblin ist eine eigenständige Media-Sharing-Plattform
. MediaGoblin bietet viele Extras. Im Gegensatz zu ClipBucket in unansehnlichem PHP ist MediaGoblin in Python geschrieben, der Sprache, in der ich viel Erfahrung im Codieren habe. Es gibt eine Befehlszeilenschnittstelle , mit der das Herunterladen von Videos einfach automatisiert werden kann. Am wichtigsten ist, dass MediaGoblin in einem Docker-Image geliefert wird , das Installationsprobleme beseitigt.
Docker ist eine Technologie, die eine eigenständige Umgebung für eine Anwendung erstellt, die überall ausgeführt werden kann. Ich benutze Docker in vielen meiner Projekte .
Erstaunliche Schwierigkeit, MediaGoblin erneut anzudocken
Ich ging davon aus, dass die Bereitstellung des MediaGoblin-Docker-Images trivial wäre. Nun, so hat es nicht ganz geklappt.
Dem fertigen Bild fehlten zwei notwendige Funktionen:
- Authentifizierung
- MediaGoblin erstellt standardmäßig ein öffentliches Medienportal, und ich brauchte eine Möglichkeit, den nicht autorisierten Zugriff einzuschränken.
- Transcodierung
- Jedes Mal, wenn Sie ein Video hochladen, versucht MediaGoblin, es für ein optimales Streaming neu zu codieren. Wenn das Video anfänglich zum Streamen bereit ist, verschlechtert die Transcodierung die Qualität.
- MediaGoblin ermöglicht das Deaktivieren der Transcodierung über Konfigurationsoptionen. Dies ist jedoch in einem vorhandenen Docker-Image nicht möglich.
Gut, kein Problem. Das Docker-Image ist Open Source , sodass Sie es selbst neu erstellen können .
Leider wird das Docker-Image nicht mehr aus dem aktuellen MediaGoblin-Repository erstellt . Ich habe versucht, es mit der Version des letzten erfolgreichen Builds zu synchronisieren, aber es hat auch nicht funktioniert. Obwohl ich genau den gleichen Code verwendet habe, haben sich die externen Abhängigkeiten von MediaGoblin geändert und den Build beschädigt. Nach Dutzenden von Stunden habe ich den 10-15-minütigen Build-Prozess von MediaGoblin immer und immer wieder ausgeführt, bis er schließlich funktionierte.
Ein paar Monate später passierte dasselbe. Insgesamt hat die MediaGoblin-Abhängigkeitskette in den letzten Jahren meinen Build mehrmals unterbrochen, und das letzte Mal geschah dies, als ich diesen Artikel schrieb. Am Ende veröffentlichte ich meine eigene Verzweigung von MediaGoblin mit fest codierten Abhängigkeiten und expliziten Bibliotheksversionen. Mit anderen Worten, anstatt zweifelhaft zu behaupten, dass MediaGoblin mit jeder Version von Sellerie > = 3.0 funktioniert , habe ich eine spezifische Abhängigkeit von Sellerie 4.2.1 installiert, weil ich MediaGoblin mit dieser Version getestet habe. Es sieht so aus, als ob das Produkt einen reproduzierbaren Build-Mechanismus benötigt , aber das habe ich noch nicht getan.
Nach vielen Stunden des Kampfes konnte ich MediaGoblin endlich in einem Docker-Image erstellen und konfigurieren. Dort war es bereits einfach, unnötige Transcodierungen zu überspringen und Nginx für die Authentifizierung einzurichten .
Schritt 4. Hosting
Da MediaGoblin Docker auf meinem lokalen Computer ausführte, bestand der nächste Schritt darin, auf einem Cloud-Server bereitzustellen, damit die Familie das Video ansehen konnte.
MediaGoblin- und Videospeicherproblem
Es gibt viele Plattformen, die ein Docker-Image aufnehmen und unter einer öffentlichen URL hosten. Der Haken ist, dass zusätzlich zur App selbst 33 GB Videodateien veröffentlicht werden mussten. Es war möglich, sie fest in ein Docker-Image zu codieren, aber es stellte sich als umständlich und hässlich heraus. Das Ändern einer Konfigurationszeile würde das erneute Bereitstellen von 33 GB Daten erfordern.
Als ich ClipBucket verwendete, löste ich das Problem mit gcsfuse , einem Dienstprogramm, mit dem das Betriebssystem Verzeichnisse als normale Dateisystempfade in Google Cloud hochladen kann. Ich habe die Videodateien in Google Cloud gepostet und sie mit gcsfuse als lokale Dateien in ClipBucket angezeigt.
Der Unterschied bestand darin, dass ClipBucket in einer echten VM ausgeführt wurde, während MediaGoblin in einem Docker-Container ausgeführt wurde. Hier stellte sich heraus, dass das Mounten von Dateien aus dem Cloud-Speicher viel schwieriger war. Ich habe Dutzende von Stunden damit verbracht, alle Probleme zu lösen, und einen ganzen Blog-Beitrag darüber geschrieben .
Die anfängliche Integration von MediaGoblin in den Google Cloud-Speicher, über die ich 2018 gesprochen habe.
Nach mehreren Wochen der Optimierung aller Komponenten hat alles funktioniert. Ohne Änderungen am MediaGoblin-Code vorzunehmen, erzwinge ich betrügerisch das Lesen und Schreiben von Mediendateien in den Google Cloud-Speicher.
Das einzige Problem war, dass MediaGoblin obszön langsam wurde. Das Laden von Video-Miniaturansichten auf der Startseite dauerte satte 20 Sekunden. Wenn Sie beim Ansehen eines Videos nach vorne springen, hält MediaGoblin unendlich 10 Sekunden inne, bevor Sie die Wiedergabe fortsetzen.
Das Hauptproblem bestand darin, dass Videos und Bilder auf lange und unübersichtliche Weise an den Benutzer gingen. Sie mussten vom Google Cloud-Speicher über gcsfuse zu MediaGoblin, Nginx, wechseln - und erst dann gelangten sie in den Browser des Benutzers. Der Hauptengpass war gcsfuse, das nicht für eine schnelle Leistung optimiert ist. Die Entwickler warnen vor große Verzögerungen bei der Arbeit Recht des Dienstprogramm auf dem Projekt Haupt-Seite: Performance
- Warnungen in der gcsfuse Dokumentation
Im Idealfall sollte der Browser Dateien direkt aus Google Cloud abrufen und alle Zwischenebenen umgehen. Wie kann ich dies tun, ohne in die MediaGoblin-Codebasis einzutauchen und eine komplexe Google Cloud-Integrationslogik hinzuzufügen?
Nginx sub_filter Trick
Zum Glück habe ich eine einfache Lösung gefunden, wenn auch etwas hässlich. Ich habe der default.conf-Konfiguration in Nginx den folgenden Filter hinzugefügt :
sub_filter "/mgoblin_media/media_entries/" "https://storage.googleapis.com/MY-GCS-BUCKET/media_entries/";
sub_filter_once off;
In meiner Installation arbeitete Nginx als Proxy zwischen MediaGoblin und dem Endbenutzer. Die obige Anweisung weist Nginx an, alle HTML-Antworten von MediaGoblin zu suchen und zu ersetzen, bevor sie an den Endbenutzer weitergeleitet werden. Nginx ersetzt alle relativen Pfade zu MediaGoblin-Mediendateien durch URLs aus Google Cloud Storage.
Zum Beispiel generiert MediaGoblin HTML wie folgt:
<video width="720" height="480" controls autoplay>
<source
src="/mgoblin_media/media_entries/16/Michael-riding-a-bike.mp4"
type="video/mp4">
</video>
Nginx ändert die Antwort:
<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>
Jetzt läuft alles wie erwartet:
Nginx schreibt die Antworten von MediaGoblin neu, damit Kunden Mediendateien direkt aus dem Cloud-Speicher von Google anfordern können.
Das Beste an meiner Lösung ist, dass keine Änderungen am MediaGoblin-Code erforderlich sind. Die zweizeilige Richtlinie von Nginx integriert MediaGoblin und Google Cloud nahtlos, obwohl diese Dienste absolut nichts voneinander wissen.
Hinweis : Für diese Lösung müssen Dateien in Google Cloud Storage für alle lesbar sein. Um das Risiko eines nicht autorisierten Zugriffs zu verringern, verwende ich (zum Beispiel mediagoblin-39dpduhfz1wstbprmyk5ak29) einen langen, zufälligen Bucket-Namen und überprüfe, ob die Zugriffssteuerungsrichtlinie des Buckets es nicht autorisierten Benutzern nicht erlaubt, den Inhalt des Verzeichnisses anzuzeigen.
Endprodukt
Zu diesem Zeitpunkt hatte ich eine vollständige, funktionierende Lösung. MediaGoblin lief problemlos in einem eigenen Container auf der Cloud-Plattform von Google, sodass es nicht häufig gepatcht oder aktualisiert werden musste. Alles in meinem Prozess war automatisiert und reproduzierbar und ermöglichte einfache Bearbeitungen oder Rollbacks.
Meine Familie fand es toll, wie einfach es war, das Video anzusehen. Mit dem oben genannten Nginx-Hack ist die Videoverarbeitung jetzt so schnell wie bei YouTube.
Der Vorschaubildschirm sieht folgendermaßen aus:
Inhalt des Familienvideoverzeichnisses nach dem empfohlenen
Tag Wenn Sie auf die Miniaturansicht klicken, wird der folgende Bildschirm angezeigt:
Anzeigen eines einzelnen Clips auf dem Medienserver
Nach vielen Jahren der Arbeit war ich unglaublich erfreut, meinen Verwandten die Möglichkeit zu geben, unsere Videos in derselben benutzerfreundlichen Oberfläche wie auf YouTube anzusehen, wie ich es ursprünglich wollte.
Bonus: Kostenreduzierung auf weniger als 1 USD pro Monat
Sie sehen Heimvideos nicht oft, nur alle paar Monate. Meine Familie hat in einem Jahr zusammen etwa 20 Stunden Verkehr generiert, aber der Server lief rund um die Uhr. Ich habe monatlich 15 US-Dollar für einen Server bezahlt, der in 99,7% der Fälle ausgefallen war.
Ende 2018 veröffentlichte Google das Cloud Run- Produkt . Die Killer-Funktion war der Start von Docker-Containern so schnell, dass die Anwendung auf HTTP-Anfragen reagieren konnte. Das heißt, der Server kann im Standby-Modus bleiben - und nur starten, wenn jemand darauf zugreifen möchte. Für selten gestartete Apps wie meine sanken die Kosten von 15 USD pro Monat auf einige Cent pro Jahr.
Aus Gründen, an die ich mich nicht erinnern kann, funktionierte Cloud Run nicht mit meinem MediaGoblin-Image. Aber mit dem Aufkommen von Cloud Run erinnerte ich mich an Herokubietet einen ähnlichen Service kostenlos an und ihre Tools sind viel bequemer als die von Google.
Mit einem kostenlosen Anwendungsserver ist Ihre einzige Ausgabe die Datenspeicherung. Der regionale Standardspeicher von Google kostet 2,3 Cent / GB. Das Videoarchiv hat eine Größe von 33 GB, daher zahle ich nur 77 Cent pro Monat.
Die Kosten für diese Lösung betragen nur 0,77 USD pro Monat
Tipps für diejenigen, die es versuchen möchten
Offensichtlich hat der Prozess für mich lange gedauert. Ich hoffe jedoch, dass dieser Artikel Ihnen hilft, 80-90% Ihrer Bemühungen um die Digitalisierung und Veröffentlichung von Heimvideos zu sparen. In einem separaten Abschnitt finden Sie eine detaillierte Schritt-für-Schritt-Anleitung für den gesamten Prozess. Hier einige allgemeine Tipps:
- Bewahren Sie während der Digitalisierungs- und Bearbeitungsphase so viele Metadaten wie möglich auf.
- .
- , .
- , .
- .
- .
- EverPresent ( , ).
- , HDD.
- 100-200 .
- Synology DS412+ (10 ).
- - , .
- , , . .
- (, , ), , .
- . , .
- ?
- ?
- ?
- .
- , .
- “best of” , .
- , .
- , . .
- , . , .
- .
- , , .
- , , .
- .
- .
- — .
- — . , Slow Snow The National, .