سعي لمدة ثماني سنوات لرقمنة 45 شريط فيديو. الجزء 2

يصف الجزء الأول السعي الصعب لرقمنة مقاطع الفيديو العائلية القديمة وتقسيمها إلى مشاهد منفصلة . بعد معالجة جميع المقاطع ، أردت أن أجعل مشاهدتها عبر الإنترنت مريحة كما هي على YouTube. نظرًا لأن هذه ذكريات شخصية للعائلة ، فلا يمكن نشرها على موقع YouTube نفسه. نحن بحاجة إلى استضافة أكثر خصوصية مريحة وآمنة.



الخطوة 3. النشر



ClipBucket ، استنساخ YouTube مفتوح المصدر يمكن تثبيته على الخادم الخاص بك



كانت محاولتي الأولى هي ClipBucket ، والتي تطلق على نفسها نسخة مفتوحة المصدر على YouTube يمكنك تثبيتها على الخادم الخاص بك.







من المثير للدهشة أن ClipBucket لا يحتوي على أي تعليمات تثبيت. وبفضل البرنامج التعليمي طرف ثالث، I الآلي عملية التثبيت باستخدام Ansible ، أداة إدارة تكوين الملقم.



جزء من الصعوبة هو أن نصوص تثبيت ClipBucket كانت معطلة تمامًا. في ذلك الوقت كنت أعمل في Google وبموجب شروط العقد لم يكن لدي الحق في المساهمة في استنساخ YouTube مفتوح المصدر ، لكنني نشرت تقرير خطأ كان من السهل إجراء التصحيحات اللازمة منه. مرت أشهر ، وما زالوا لا يفهمون ما هي المشكلة. بدلاً من ذلك ، أضافوا المزيد والمزيد من الأخطاء مع كل إصدار.



عملت ClipBucket على نموذج استشاري - أطلقوا الكود الخاص بهم مجانًا وفرضوا رسومًا للمساعدة في النشر. لقد اتضح لي ببطء أن الشركة التي تجني المال من الدعم المدفوع ربما لا تكون مهتمة جدًا بتثبيت العملاء للمنتج بأنفسهم.



MediaGoblin ، بديل أكثر حداثة



بعد شهور من الإحباط مع ClipBucket ، قمت بمراجعة الخيارات المتاحة ووجدت MediaGoblin .





MediaGoblin  عبارة عن منصة مشاركة وسائط قائمة بذاتها



. تمتلك MediaGoblin الكثير من الأشياء الجيدة. على عكس ClipBucket في PHP القبيح ، فإن MediaGoblin مكتوب بلغة Python ، وهي اللغة التي لدي خبرة كبيرة في الترميز بها. توجد واجهة سطر أوامر تسهل أتمتة تنزيلات الفيديو. الأهم من ذلك ، يأتي MediaGoblin في صورة Docker التي تلغي أي مشكلات في التثبيت.



Docker هي تقنية تنشئ بيئة قائمة بذاتها لتطبيق يعمل في أي مكان. أستخدم Docker في العديد من مشاريعي .


صعوبة مذهلة في إعادة إرساء قاعدة MediaGoblin



افترضت أن نشر صورة عامل إرساء MediaGoblin سيكون تافهًا. حسنًا ، لم ينجح الأمر بهذه الطريقة.



تفتقد الصورة النهائية وظيفتين ضروريتين:



  • المصادقة
    • تنشئ MediaGoblin بوابة وسائط عامة بشكل افتراضي ، وكنت بحاجة إلى طريقة لتقييد الوصول غير المصرح به.
  • التحويل
    • في كل مرة تقوم فيها بتحميل مقطع فيديو ، يحاول MediaGoblin إعادة ترميزه من أجل البث الأمثل. إذا كان الفيديو جاهزًا في البداية للبث ، فإن تحويل الشفرة يقلل من الجودة.
    • يوفر MediaGoblin إمكانية تعطيل التحويل عبر خيارات التكوين ، ولكن لا يمكن القيام بذلك في صورة Docker موجودة.


حسنا لا مشكلة. صورة Docker مفتوحة المصدر ، لذا يمكنك إعادة بنائها بنفسك .



لسوء الحظ ، لم تعد صورة Docker مبنية من مستودع MediaGoblin الحالي . حاولت مزامنته مع الإصدار من آخر بناء ناجح ، لكنه لم ينجح أيضًا. على الرغم من أنني استخدمت نفس الكود تمامًا ، فقد تغيرت تبعيات MediaGoblin الخارجية ، مما أدى إلى كسر البناء. بعد عشرات الساعات ، قمت بتشغيل عملية إنشاء MediaGoblin لمدة 10-15 دقيقة مرارًا وتكرارًا حتى نجحت في النهاية.



بعد بضعة أشهر ، حدث نفس الشيء. في المجموع على مدار العامين الماضيين ، كسرت سلسلة التبعية MediaGoblin بنائي عدة مرات ، وكانت آخر مرة حدث فيها عندما كنت أكتب هذا المقال. انتهى بي الأمر بنشر تفرعاتي الخاصة من MediaGoblin ، مع التبعيات المشفرة وإصدارات المكتبات الصريحة. بعبارة أخرى ، بدلاً من الادعاء المشكوك فيه أن MediaGoblin يعمل مع أي إصدار من الكرفس > = 3.0 ، قمت بتثبيت اعتماد محدد على الكرفس 4.2.1 لأنني اختبرت MediaGoblin مع هذا الإصدار. يبدو أن المنتج يحتاج إلى آلية إنشاء قابلة للتكرار ، لكنني لم أفعل ذلك بعد.



على أي حال ، بعد عدة ساعات من النضال ، تمكنت أخيرًا من إنشاء وتهيئة MediaGoblin في صورة Docker. كان هناك بالفعل من السهل تخطي الترميز لا لزوم لها و وضع إنجن إكس للمصادقة .



الخطوة 4. الاستضافة



نظرًا لأن MediaGoblin كان يشغل Docker على جهازي المحلي ، كانت الخطوة التالية هي النشر إلى خادم سحابي حتى تتمكن العائلة من مشاهدة الفيديو.



MediaGoblin ومشكلة تخزين الفيديو



هناك العديد من الأنظمة الأساسية التي تلتقط صورة Docker وتستضيفها على عنوان URL عام. المهم أنه بالإضافة إلى التطبيق نفسه ، كان لابد من نشر 33 جيجابايت من ملفات الفيديو. كان من الممكن ترميزها في صورة عامل إرساء ، لكن اتضح أنها مرهقة وقبيحة. يتطلب تغيير سطر واحد من التكوين إعادة نشر 33 جيجابايت من البيانات.



عندما استخدمت ClipBucket ، قمت بحل مشكلة gcsfuse  ، وهي أداة تتيح لنظام التشغيل تحميل الأدلة إلى Google Cloud كمسارات نظام ملفات عادية. لقد قمت بنشر ملفات الفيديو على Google Cloud واستخدمت gcsfuse لإظهارها كملفات محلية في ClipBucket.



كان الاختلاف هو أن ClipBucket كان يعمل في جهاز افتراضي حقيقي ، بينما كان MediaGoblin يعمل في حاوية Docker. هنا ، أصبح تحميل الملفات من التخزين السحابي أكثر صعوبة. لقد أمضيت عشرات الساعات في حل جميع المشكلات وكتبت مشاركة مدونة كاملة عنها .





التكامل الأولي لـ MediaGoblin مع Google Cloud Storage ، والذي تحدثت عنه في 2018.



بعد عدة أسابيع من التغيير والتبديل بين جميع المكونات ، نجح كل شيء. بدون إجراء أي تغييرات على رمز MediaGoblin ، أجبرها بشكل خادع على قراءة ملفات الوسائط وكتابتها على التخزين السحابي من Google.



كانت المشكلة الوحيدة هي أن MediaGoblin أصبح بطيئًا بشكل فاحش. استغرق تحميل الصور المصغرة للفيديو على الصفحة الرئيسية 20 ثانية. إذا قفزت للأمام أثناء مشاهدة مقطع فيديو ، فسيتوقف MediaGoblin مؤقتًا لمدة 10 ثوانٍ غير محدودة قبل استئناف التشغيل.



كانت المشكلة الرئيسية أن مقاطع الفيديو والصور تذهب إلى المستخدم بطريقة ملتوية طويلة. كان عليهم الانتقال من التخزين السحابي لـ Google عبر gcsfuse إلى MediaGoblin و Nginx - وعندها فقط دخلوا إلى متصفح المستخدم. كان عنق الزجاجة الرئيسي هو gcsfuse ، والذي لم يتم تحسينه لتحقيق أداء سريع. يحذر المطورون من التأخيرات الكبيرة في عمل الأداة مباشرة على الصفحة الرئيسية للمشروع:





تحذيرات الأداء في وثائق gcsfuse



من الناحية المثالية ، يجب أن يجلب المتصفح الملفات مباشرة من Google Cloud ، متجاوزًا جميع الطبقات المتوسطة. كيف يمكنني القيام بذلك دون الغوص في قاعدة رموز MediaGoblin وإضافة منطق تكامل Google Cloud المعقد؟



خدعة Nginx sub_filter



لحسن الحظ ، وجدت حلاً بسيطًا ، وإن كان قبيحًا بعض الشيء . أضفت عامل التصفية التالي إلى إعداد default.conf في Nginx :



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


في التثبيت الخاص بي ، عمل Nginx كوكيل بين MediaGoblin والمستخدم النهائي. يخبر التوجيه أعلاه Nginx بالبحث عن جميع استجابات HTML الخاصة بـ MediaGoblin واستبدالها قبل تمريرها إلى المستخدم النهائي. يستبدل Nginx جميع المسارات النسبية لملفات وسائط MediaGoblin بعناوين URL من Google Cloud Storage.



على سبيل المثال ، تقوم MediaGoblin بإنشاء HTML مثل هذا:



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


يغير Nginx الاستجابة:



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


الآن كل شيء يعمل كما هو متوقع:





Nginx يعيد كتابة الردود من MediaGoblin بحيث يمكن للعملاء طلب ملفات الوسائط مباشرة من التخزين السحابي لـ Google.



أفضل جزء في الحل الخاص بي هو أنه لا يتطلب أي تغييرات على كود MediaGoblin. يدمج توجيه Nginx المكون من سطرين بسلاسة MediaGoblin و Google Cloud ، على الرغم من أن هذه الخدمات لا تعرف شيئًا عن بعضها البعض على الإطلاق.



ملاحظة : يتطلب هذا الحل أن تكون الملفات في Google Cloud Storage قابلة للقراءة من قبل الجميع. للتخفيف من مخاطر الوصول غير المصرح به ، أستخدم اسم حاوية طويلًا عشوائيًا (على سبيل المثال mediagoblin-39dpduhfz1wstbprmyk5ak29) وأتحقق من أن سياسة التحكم في الوصول للحاوية لا تسمح للمستخدمين غير المصرح لهم بعرض محتويات الدليل.


المنتج النهائي



في هذه المرحلة ، كان لدي حل كامل وعملي. عملت MediaGoblin بسعادة في حاويتها الخاصة على منصة Google السحابية ، لذلك لم تكن بحاجة إلى التصحيح أو التحديث بشكل متكرر. كان كل شيء في عملي مؤتمتًا وقابلًا للتكرار ، مما يسمح بإجراء تعديلات بسيطة أو التراجع إلى الإصدارات السابقة.



أحب عائلتي مدى سهولة مشاهدة الفيديو. مع اختراق Nginx أعلاه ، أصبحت معالجة الفيديو الآن بنفس سرعة YouTube.



تبدو شاشة المعاينة على النحو التالي :





محتوى دليل فيديو العائلة بواسطة



العلامة المميزة يؤدي النقر فوق الصورة المصغرة إلى عرض الشاشة التالية:





عرض مقطع واحد على خادم الوسائط



بعد سنوات عديدة من العمل ، كان من دواعي سروري بشكل لا يصدق أن أعطي أقاربي الفرصة لمشاهدة مقاطع الفيديو الخاصة بنا بنفس الواجهة سهلة الاستخدام على YouTube ، كما كنت أرغب في الأصل.



المكافأة: خفض التكلفة إلى أقل من 1 دولار شهريًا



لا تشاهد مقاطع الفيديو المنزلية كثيرًا ، فقط كل بضعة أشهر. قامت عائلتي بشكل جماعي بتوليد حوالي 20 ساعة من حركة المرور في السنة ، لكن الخادم كان يعمل على مدار الساعة. دفعت 15 دولارًا شهريًا لخادم كان أقل بنسبة 99.7 ٪ من الوقت.



في أواخر عام 2018 ، أصدرت Google منتج Cloud Run . كانت الميزة القاتلة هي إطلاق حاويات Docker بسرعة كبيرة بحيث يمكن للتطبيق الاستجابة لطلبات HTTP. أي أن الخادم يمكن أن يظل في وضع الاستعداد - ويبدأ فقط عندما يريد شخص ما الوصول إليه. بالنسبة للتطبيقات التي يتم تشغيلها بشكل غير متكرر مثل تطبيقاتي ، انخفضت التكاليف من 15 دولارًا شهريًا إلى بضعة سنتات في السنة.



لأسباب لا أتذكرها ، لم يعمل Cloud Run مع صورة MediaGoblin الخاصة بي. ولكن مع ظهور Cloud Run ، تذكرت أن Herokuتقدم خدمة مماثلة مجانًا ، وأدواتها أكثر ملاءمة من أدوات Google.



باستخدام خادم تطبيق مجاني ، فإن نفقتك الوحيدة هي تخزين البيانات. تبلغ تكلفة التخزين الإقليمي القياسي لشركة Google 2.3 سنتًا / جيجابايت. أرشيف الفيديو 33 جيجا بايت ، لذلك أنا أدفع 77 سنتًا فقط شهريًا.





تكلفة هذا الحل هي 0.77 دولار شهريًا فقط



نصائح لمن يبحث عن تجربتها



من الواضح أن العملية استغرقت وقتًا طويلاً بالنسبة لي. لكن آمل أن تساعدك هذه المقالة في توفير 80-90٪ من جهودك لرقمنة مقاطع الفيديو المنزلية ونشرها. في قسم منفصل ، يمكنك العثور على دليل تفصيلي تفصيلي للعملية بأكملها ، ولكن إليك بعض النصائح العامة:



  • أثناء مرحلة الرقمنة والتحرير ، احتفظ بأكبر قدر ممكن من البيانات الوصفية.
    • .
    • , .
    • , .
  • .
    • .
    • EverPresent ( , ).
  • , HDD.
  • - , .
    • , , . .
    • (, , ), , .
    • . , .
      • ?
      • ?
      • ?
  • .
    • , .
    • “best of” , .
  • , .
    • , . .
    • , . , .
  • .
    • , , .
    • , , .
  • .
  • .
    •  — .
    •  — . , Slow Snow The National, .



All Articles