. Tüm klipleri işledikten sonra, görüntülemelerini çevrimiçi olarak YouTube'daki kadar uygun bir şekilde düzenlemek istedim. Bunlar ailenin kişisel anıları olduğu için YouTube'da yayınlanamaz. Hem kullanışlı hem de güvenli olan daha özel bir barındırmaya ihtiyacımız var.
Adım 3. Yayınla
Kendi sunucunuza kurabileceğiniz açık kaynaklı bir YouTube klonu olan ClipBucket
Her şeyden önce denedim kendisine sunucunuza yükleyebileceğiniz açık kaynaklı bir YouTube klonu adını verir.

Şaşırtıcı bir şekilde, ClipBucket herhangi bir kurulum talimatına sahip değildir. Sayesinde я üzerinden , bir sunucu yapılandırma yönetimi aracı.
Zorluğun bir kısmı, ClipBucket kurulum komut dosyalarının tamamen bozuk olmasıydı. o zaman ben ve sözleşme şartlarına göre YouTube'un açık kaynak klonuna katkıda bulunma hakkım yoktu, ancak ben gerekli düzeltmeleri yapmak kolaydı. Aylar geçti ve hala sorunun ne olduğunu anlamadılar. Bunun yerine, her şeyi eklediler daha fazla her sürümde hatalar.
ClipBucket bir danışmanlık modeli üzerinde çalıştı - kodlarını ücretsiz olarak yayınladılar ve dağıtım için yardım için ücret aldılar. Yavaş yavaş, ücretli destekten para kazanan bir şirketin, müşterilerin ürünü kendilerinin kurmasını sağlamakla muhtemelen pek ilgilenmediğini fark ettim.
MediaGoblin, daha modern bir alternatif
ClipBucket ile birkaç aylık hayal kırıklığından sonra, mevcut seçenekleri gözden geçirdim ve buldum .

bağımsız bir medya paylaşım platformudur
MediaGoblin'in pek çok özelliği var. Çirkin PHP'deki ClipBucket'in aksine MediaGoblin, kod yazarken çok fazla deneyimim olan Python'da yazılmıştır. Yemek yemek , bu da video indirme işlemlerini otomatikleştirmeyi kolaylaştırır. En önemlisi, MediaGoblin devreye giriyor , bu da kurulumla ilgili sorunları ortadan kaldırır.
her yerde çalışan bir uygulama için bağımsız bir ortam oluşturan bir teknolojidir. Docker'ı kullanıyorum .
MediaGoblin'i Yeniden Depolamanın Şaşırtıcı Zorluğu
Bir MediaGoblin liman işçisi görüntüsünü konuşlandırmanın önemsiz bir görev olacağını varsaydım. Pekala, pek öyle yürümedi.
Bitmiş görüntünün iki gerekli işlevi yoktu:
- kimlik doğrulama
- MediaGoblin, varsayılan olarak bir genel medya portalı oluşturuyor ve dışarıdan gelenlerin erişimini kısıtlamak için bir yola ihtiyacım vardı.
- kod dönüştürme
- Her video yüklediğinizde MediaGoblin, optimum akış için videoyu yeniden kodlamaya çalışır. Video başlangıçta akış için hazırsa, kod dönüştürme kaliteyi düşürür.
- MediaGoblin Sağlar , ancak bunu mevcut bir Docker görüntüsünde yapmak mümkün değildir.
Peki, mesele yok o zaman. Docker görüntüsü ile birlikte gelir , Böylece yapabilirsiniz .
Ne yazık ki, Docker görüntüsü artık mevcut . Son başarılı yapıdaki sürümle senkronize etmeye çalıştım ama bu da işe yaramadı. Tam olarak aynı kodu kullanmama rağmen, MediaGoblin dış bağımlılıkları değişerek yapıyı bozdu. Düzinelerce saat sonra, sonunda işe yarayana kadar 10-15 dakikalık MediaGoblin oluşturma sürecini tekrar tekrar çalıştırdım.
Birkaç ay sonra da aynı şey oldu. Toplamda, geçtiğimiz birkaç yılda, MediaGoblin bağımlılık zinciri yapımı birkaç kez bozdu ve en son bu makaleyi yazarken oldu. göndermeyi bitirdim c ve açıkça belirtilen kitaplık sürümleri. Başka bir deyişle, MediaGoblin'in herhangi bir sürümle çalıştığına dair şüpheli iddia yerine >= 3.0, sürüme özel bağımlılık kurdum , çünkü MediaGoblin'i bu sürümle test ettim. Ürün ihtiyacı gibi görünüyor ama henüz yapmadım.
Her neyse, saatlerce uğraştıktan sonra, sonunda MediaGoblin'i bir Docker görüntüsünde oluşturup yapılandırabildim. zaten kolaydı и .
Adım 4. Barındırma
MediaGoblin, Docker'ı yerel makinemde çalıştırdığından, sonraki adım, ailenin videoyu izleyebilmesi için bir bulut sunucusuna dağıtım yapmaktı.
MediaGoblin ve video depolama sorunu
Docker görüntüsünü alan ve onu genel bir URL'de barındıran birçok platform vardır. İşin püf noktası, uygulamanın kendisine ek olarak 33 GB video dosyasının yayınlanması gerektiğidir. Onları bir liman işçisi görüntüsüne sabit olarak kodlamak mümkündü, ancak hantal ve çirkin olduğu ortaya çıktı. Bir yapılandırma satırının değiştirilmesi, 33 GB verinin yeniden dağıtılmasını gerektirir.
ClipBucket'ı kullandığımda sorunu şu şekilde çözdüm: - işletim sisteminin, dosya sistemine giden normal yollar olarak Google Cloud bulut depolama alanına dizinler yüklemesine izin veren bir yardımcı program. Video dosyalarını Google Cloud'da barındırdım ve onları ClipBucket'ta yerel dosyalar olarak göstermek için gcsfuse kullandım.
Aradaki fark, ClipBucket'in gerçek bir sanal makinede, MediaGoblin'in ise bir Docker kapsayıcısında çalışmasıydı. Burada, dosyaları bulut depolama alanından bağlamanın çok daha zor olduğu ortaya çıktı. Tüm sorunları çözmek için onlarca saat harcadım ve bunun hakkında yazdım .

MediaGoblin'in Google Cloud depolama ile ilk entegrasyonu;
Tüm bileşenleri birkaç hafta ayarladıktan sonra her şey işe yaradı. MediaGoblin kodunda herhangi bir değişiklik yapmadan, medya dosyalarını okuyup Google bulut depolama alanına yazmasını sağlamak için hile yapıyorum.
Tek sorun, MediaGoblin'in uygunsuz bir şekilde yavaş çalışmaya başlamasıydı. Video küçük resimlerinin ana sayfaya yüklenmesi tam 20 saniye sürdü. Video izlerken ileri atlarsanız, MediaGoblin oynatmaya devam etmeden önce sonsuz 10 saniye durakladı.
Asıl sorun, videoların ve resimlerin kullanıcıya uzun, dolambaçlı bir yoldan gitmesiydi. Google bulut depolama alanından gcsfuse aracılığıyla MediaGoblin, Nginx'e gitmeleri gerekiyordu - ve ancak o zaman kullanıcının tarayıcısına girdiler. Ana darboğaz, hızlı performans için optimize edilmemiş gcsfuse idi. Geliştiriciler, projenin ana sayfasında yardımcı programdaki büyük gecikmeler konusunda uyarıyor:

Uyarılar gcsfuse belgelerinde
İdeal olarak, tarayıcı tüm ara katmanları atlayarak dosyaları doğrudan Google Cloud'dan çekmelidir. MediaGoblin kod tabanının derinliklerine inmeden ve karmaşık Google Cloud entegrasyon mantığı eklemeden bunu nasıl yapabilirim?
nginx'te sub_filter hilesi
Neyse ki kolay bir çözüm buldum ama hafifçe çirkin. Nginx'te default.conf yapılandırmasına ekledim :
sub_filter "/mgoblin_media/media_entries/" "https://storage.googleapis.com/MY-GCS-BUCKET/media_entries/";
sub_filter_once off;Kurulumumda Nginx, MediaGoblin ile son kullanıcı arasında bir proxy görevi gördü. Yukarıdaki yönerge, Nginx'e tüm MediaGoblin HTML yanıtlarını son kullanıcıya sunmadan önce aramasını ve değiştirmesini söyler. Nginx, MediaGoblin medya dosyalarına giden tüm ilgili yolları Google bulut depolama alanındaki URL'lerle değiştirir.
Örneğin, MediaGoblin şu HTML'yi oluşturur:
<video width="720" height="480" controls autoplay>
<source
src="/mgoblin_media/media_entries/16/Michael-riding-a-bike.mp4"
type="video/mp4">
</video>Nginx yanıtı değiştirir:
<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>Şimdi her şey olması gerektiği gibi çalışıyor:

Nginx, müşterilerin medya dosyalarını doğrudan Google bulut depolama alanından isteyebilmesi için MediaGoblin'den gelen yanıtları yeniden yazar
Çözümümün en iyi yanı, MediaGoblin kodunda herhangi bir değişiklik gerektirmemesi. İki satırlık Nginx yönergesi, iki hizmet birbiri hakkında hiçbir şey bilmese de MediaGoblin ve Google Cloud'u sorunsuz bir şekilde entegre eder.
Dikkat: Bu çözüm, Google Cloud Storage'daki dosyaların herkes tarafından okunabilmesini gerektirir. Yetkisiz erişim riskini azaltmak için uzun bir rasgele grup adı kullanıyorum (örneğin,
mediagoblin-39dpduhfz1wstbprmyk5ak29) ve klasörün erişim denetimi ilkesinin yetkisiz kullanıcıların dizinin içeriğini görüntülemesine izin vermediğini doğrulayın.
Son ürün
Bu noktada eksiksiz, çalışan bir çözümüm vardı. MediaGoblin, Google Cloud Platform'da kendi kapsayıcısında mutlu bir şekilde çalıştı, bu nedenle sık sık yama yapılması veya güncellenmesi gerekmiyordu. Sürecimdeki her şey otomatik ve tekrarlanabilirdi, bu da basit düzenlemelere veya önceki sürümlere geri dönüşlere izin veriyordu.
Ailem video izlemenin ne kadar kolay olduğunu gerçekten çok sevdi. Yukarıda açıklanan Nginx hack'inin yardımıyla, video ile çalışmak YouTube'daki kadar hızlı hale geldi.
Görünüm ekranı şöyle görünür:

"En iyi" etiketine göre aile videoları kataloğunun içeriği
Küçük resme tıklamak aşağıdaki ekranı getirir:

Tek bir klibi bir medya sunucusunda görüntüleme
Yıllarca çalıştıktan sonra, akrabalarımıza videolarımızı başlangıçta istediğim YouTube'dakiyle aynı kullanışlı arayüzde izleme fırsatı vermekten inanılmaz derecede memnun kaldım.
Bonus: Ayda 1 doların altına düşen maliyet indirimi
Ev videolarını nadiren, yalnızca birkaç ayda bir izliyorsunuz. Ailem toplu olarak yılda yaklaşık 20 saat trafik oluşturdu, ancak sunucu 15/99,7 çalışıyordu. Zamanın %XNUMX'sini kapatan bir sunucu için aylık XNUMX dolar ödedim.
2018'in sonunda Google bir ürün yayınladı . Katil özellik, Docker kapsayıcılarını o kadar hızlı çalıştırıyordu ki, uygulama HTTP isteklerine yanıt verebiliyordu. Yani, sunucu bekleme modunda kalabilir ve yalnızca biri ona gitmek istediğinde başlayabilir. Benimki gibi seyrek kullanılan uygulamalar için maliyetler ayda 15 dolardan yılda birkaç sente çıktı.
Hatırlamadığım nedenlerden dolayı Cloud Run, MediaGoblin imajımla çalışmadı. Ancak Cloud Run'ın gelişiyle şunu hatırladım benzer bir hizmeti ücretsiz olarak sunuyor ve araçları Google'ınkinden çok daha kullanışlı.
Ücretsiz bir uygulama sunucusu ile tek masraf veri depolamadır. Google'ın standart bölgesel depolama maliyeti 2,3 sent/GB'dir. Video arşivi 33 GB yani ayda sadece 77 sent ödüyorum.

Bu çözümün maliyeti ayda yalnızca 0,77 ABD dolarıdır
Deneyecek olanlar için ipuçları
Açıkçası süreç uzun sürdü. Ancak umarım bu makale, ev videonuzu dijitalleştirme ve yayınlama çabalarınızdan %80-90 oranında tasarruf etmenize yardımcı olur. Ayrı bir bölümde bulabilirsiniz süreç boyunca, ancak işte bazı genel ipuçları:
- Dijitalleştirme ve düzenleme aşamasında mümkün olduğunca fazla meta veri kaydedin.
- Değerli bilgiler genellikle video kaset etiketlerine kaydedilir.
- Hangi klibin hangi kasetten ve hangi sırayla çekildiğini kaydedin.
- Videoda belirtilmiş olabilecek çekim tarihini not edin.
- Profesyonel sayısallaştırma hizmetleri için ödeme yapmayı düşünün.
- Olacaksın чрезвычайно dijitalleştirme kalitesi açısından bunları eşleştirmek zor ve pahalıdır.
- Ancak EverPresent adlı bir şirketten uzak durun (daha fazla ayrıntıya ihtiyacınız olursa bana bildirin).
- Dijitalleştirmeyi kendiniz yapıyorsanız, bir HDD satın alın.
- Sıkıştırılmamış standart tanımlı video dakikada 100-200 MB alır.
- her şeyi üzerimde tuttum (10 TB).
- Belirli bir uygulamaya bağlı olmayan bazı genel formatlarda meta veri yazın.
- Klip açıklamaları, zaman kodları, tarihler vb.
- Meta verileri uygulamaya özel bir biçimde kaydederseniz (veya daha kötüsü hiç kaydetmezseniz), başka bir çözüm kullanmaya karar verirseniz işi yeniden yapamazsınız.
- Düzenleme yaparken, videoda pek çok yararlı meta veri görürsünüz. Onları kurtarmazsanız kaybedersiniz.
- Videoda neler oluyor?
- Orada kim kayıtlı?
- Ne zaman kaydedildi?
- En sevdiğiniz videoları etiketleyin.
- Dürüst olmak gerekirse, çoğu ev videosu içeriği oldukça sıkıcıdır.
- En sevdiğim kliplere "en iyi" etiketini yapıştırıyorum ve komik videolar izlemek istediğimde açıyorum.
- Kapsamlı bir çözümü olabildiğince erken organize edin, böylece süreç baştan sona hemen devam eder.
- Önce tüm kasetleri dijitalleştirmeye, ardından tüm kasetleri düzenlemeye vb. çalıştım.
- Tek bir kasetle başlayıp tüm işi onunla yapmamış olmam çok kötü. O zaman hangi kararların ve hangi aşamalarda nihai sonucu etkilediğini anlardım.
- Yeniden kodlamayı en aza indirin.
- Bir klibi her düzenlediğinizde veya yeniden kodladığınızda, kalitesini düşürürsünüz.
- Ham görüntüleri maksimum kalitede dijitalleştirin, ardından her bir klibin kodunu tarayıcıların yerel olarak oynattığı biçime tam olarak bir kez dönüştürün.
- Video klipleri yayınlamak için mümkün olan en basit çözümü kullanın.
- Geriye dönüp bakıldığında MediaGoblin, statik bir dizi video dosyasıyla web sayfaları oluşturmaya yönelik oldukça basit bir senaryo için aşırı karmaşık bir araç gibi görünüyor.
- Baştan başlasaydım, aşağıdaki gibi statik bir site oluşturucu kullanırdım: , veya .
- Bir montaj yapın.
- Video düzenleme, birden fazla videodaki en iyi anları birleştirmenin eğlenceli bir yoludur.
- Düzenlemede ana şey müziktir. mesela konu harika The National'dan, bu benim kişisel keşfim.
Kaynak: habr.com
