سرویس ترنسکد ویدئو VOD
سرویس VOD یکی از سرویسهای جدید ستون است که بخش transcode آن در مرحله آلفا و آماده استفاده است.
سرویس تبدیل ویدیو یک سرویس برای تبدیل یک منبع چندرسانهای (Multimedia) به فرمتها و کیفیتهای متفاوت جهت پخش در سکوهای مختلف میباشد. این سرویس همچنین توانایی تولید استریمهای انطباقی نظیر HLS را نیز دارد. از دیگر قابلیتهای این سرویس میتوان به ایجاد فایلهای بندانگشتی (thumbnails) با فاصلههای زمانی قابل پیکربندی اشاره کرد. API سرویس نیز به صورت ساز و کار CRD ها درون کوبرنتیز تعریف میشوند.
از قابلیتهای این سرویس میتوان به موارد زیر اشاره کرد:
- ورودی و خروجی:
- پشتیبانی از کانتینرهای متفاوت در ورودی و خروجی نظیر mp4، mov و flv
- امکان خروجی گرفتن با کیفیتهای متفاوت (از 240p تا 1080p)
- دریافت فایلهای ورودی از s3
- پشتیبانی از استریمهای انطباقی نظیر hls
- پلیلیست امکان فعال شدن یا غیر فعال شدن دارد
- پیکربندی خودکار cdn برای پخش playlist
- ترنسکد:
- در نظر گرفتن تعداد اختصاصی و فیکس ترنسکدهای همزمان
- در نظر گرفتن تعداد ترنسکد همزمان به صورت منعطف با منابع اشتراکی برای کاهش هزینهها و هدررفت منابع
- امکان تبدیل ویدیو با کدکهای متفاوت نظیر h264، h265 و vp9
- پشتیبانی از کدکهای صدا نظیر mp3 و aac
- امکان video only و audio only
- امکان پیکربندی پارامترهای ویدیو مانند sample rate، bit rate و buffer size
- تصویر بندانگشتی Thumbnail
- تعیین بازه زمانی برداشتن تصویر بندانگشتی از ویدئو
- بازه رو اگر زیاد بگذارید همون فریم اول رو به عنوان بندانگشتی میذاره
- امکان خروجی دادن بر اساس کیفیت ویدئو (پردازش سمت ستون) و کیفیتهای پایینتر از آن با یک تیک (Auto Preset)
- ویژگیهای دیگر:
- امکان درج watermark روی تصویر
- پشتیبانی از افزودن زیرنویس
- پشتیبانی از افزودن audio language
- نمایش درصد پیشرفت و خطاهای احتمالی بصورت همزمان (در استاتوس آبجکت کوبرنتیز)
- مانیتورینگ (فعلا به ازای هر مشتری نیست ولی اضافه کردنش زمان بر نیست)
عموما مفاهیم توسعه این سرویس را میتوان به ۲ قسمت زیر تقسیم کرد که در ادامه توضیحات هر قسمت ارائه شده است.
برای ایجاد API سرویس از مکانیزم CRD کوبرنتیز استفاده شده است به این صورت که هر موجودیت سرویس را به صورت custom resource definition تعریف نموده (برای خودکار کردن این فرآیند از ابزار kubebuilder استفاده شده است) و سپس کاربر میتواند از روی این CRD ها آبجکتهای مورد نظر خود را بسازد. همچنین هنگام تعریف این CRD ها محدودیتهایی روی نوع دادههای فیلدها اعمال میشود به عنوان مثال محدودیت بازه دادههای عددی یا طول رشتهها. برای اعمال محدودیتهای پیچیده تر که نیاز به برنامهنویسی دارد از قابلیت dynamic admission control کوبرنتیز و تعریف validating admission webhooks استفاده شده است.
هنگامی که یک کاربر از طریق API کوبرنتیز اقدام به ساخت Transcode میکند پس از اعتبار سنجی توسط controller manager یک job کوبرنتیز ساخته میشود که عملیات تبدیل ویدیو به فورمتهای مورد نیاز خروجی را بر عهده دارد و سپس حذف میشود. عملیاتی که یک worker انجام میدهد به این نحو میباشد که ابتدا فایلهای مورد نیاز اعم از ویدیو و زیرنویس و یا واترمارک را از روی باکت در S3 دانلود میکند. سپس با توجه به تنظیمات Transcode اقدام به تعریف پارامترهای FFmpeg برای تولید خروجیهای مورد نظر میکند و در نهایت این خروجی ها را روی باکتی که برای مشتری ساخته شده آپلود میکند. برای آپلود این فایلها یک http proxy ایجاد نمودیم که وظیفه دریافت فایلها از FFmpeg از طریق http و ارسال آن به s3 پس از رسیدن به حجم مورد نظر که از پیش تعیین شده را دارد. همچنین worker ها متریکهای متنوعی را بر روی یک سرور pushgateway ارسال میکنند. و وظیفه به روز رسانی وضعیت ترانسکد بر روی Redis را نیز بر عهده دارند.
.مفهوم جاب ترنسکد، preset و پایپلاین
برای اینکه با مفهوم جاب ترنسکد در سرویس VOD ستون آشنا شویم بهتر است ابتدا بدانیم که مفهوم ترنسکد ویدیو چیست.
ویدیو ترنسکد در واقع فرآیند تبدیل از یک فرمت انکدینگ دیجیتال به یک فرمت دیگر است. به عبارت دیگر ویدیو ترنسکدینگ فرآیند ایجاد چندین نسخه از یک ویدیو در اندازههای مختلف است. هر نسخه جداگانه دارای تنظیمات بهینهای است که میتواند برای کاربران با سرعتهای مختلف ایدهآل باشد.
در سرویس VOD ستون نیز، یک ترنسکد، بیانگر فرآیند تبدیل یک منبع چند رسانهای به چندین خروجی، پلیلیست و همچنین thumbnail (ریزعکس) است.
مفهوم کیفیت خروجی (preset)
preset در واقع یک گروه از تنظیمات است که کیفیت صدا و تصویر یک خروجی را را تعیین میکنند. تنظیماتی مانند کدک صوت و تصویر، فریمریت، بیتریت و سایر تنظیمات در این قسمت پیکربندی میشوند. در سرویس VOD ستون شما میتوانید یک preset بسازید و تنظیمات مورد نظرتان را در آن تعیین کنید و آن را برای گروهی از منابع چند رسانهای خود مورد استفاده قرار دهید.
مفهوم پایپلاین
پایپلاین ویدیو در واقع بیانگر فرآیندی است که فایلهای ورودی برای تبدیل شدن به خروجی طی میکنند. این فرآیند شامل تعداد خروجیها، نام و پیکربندی آنها، تعریف پلیلیست برای استفاده در بخش استریمینگ و همچنین تعریف نحوه تولید thumbnailها است.
پروتکل استریمینگ در پایپلاین
در پایپلاین میتوانید در صورت درخواست ایجاد پلیلیست پروتکل استریمینگ مد نظر خود را نیز انتخاب کنید. در سرویس VOD امکان انتخاب DASH یا HLS برای شما فراهم شده است. برای اطلاع بیشتر در رابطه با این پروتکل میتوانید به این مستند مراجعه کنید.
برای استفاده از API به این لینک مراجعه کنید:
https://docs.google.com/document/d/1C_pn8z7d8VR7wj_9i-wExUI25LI2rrkBZEMCKhOXmj4/edit?usp=sharing