چگونه رمزگذاری ویدیو را هشت برابر افزایش دادیم

چگونه رمزگذاری ویدیو را هشت برابر افزایش دادیم

هر روز میلیون‌ها بیننده ویدیوها را در اینترنت تماشا می‌کنند. اما برای اینکه ویدیو در دسترس قرار گیرد، نه تنها باید در سرور آپلود شود، بلکه باید پردازش شود. هر چه سریعتر این اتفاق بیفتد، برای سرویس و کاربران آن بهتر است.

نام من عسکر کمالوف است، یک سال پیش به تیم فناوری ویدیوی Yandex پیوستم. امروز به طور خلاصه به خوانندگان Habr می گویم که چگونه با موازی کردن فرآیند رمزگذاری، توانستیم سرعت انتقال ویدیو به کاربر را به میزان قابل توجهی افزایش دهیم.

این پست در درجه اول برای کسانی جالب خواهد بود که قبلاً در مورد آنچه در زیر پوشش خدمات ویدیویی اتفاق می افتد فکر نکرده اند. در نظرات می توانید سوال بپرسید و موضوعاتی را برای پست های بعدی پیشنهاد دهید.

چند کلمه در مورد خود وظیفه. Yandex نه تنها به شما کمک می کند ویدیوها را در سایت های دیگر جستجو کنید، بلکه فیلم ها را برای خدمات خود ذخیره می کند. چه این یک برنامه اصلی باشد یا یک مسابقه ورزشی در حال پخش، فیلمی در KinoPoisk یا ویدیوهایی در Zen and News - همه اینها در سرورهای ما آپلود می شوند. برای اینکه کاربران بتوانند ویدیو را تماشا کنند، باید آن را آماده کرد: تبدیل به فرمت مورد نیاز، ایجاد یک پیش نمایش یا حتی اجرا از طریق فناوری DeepHD. یک فایل آماده نشده فقط فضا را اشغال می کند. علاوه بر این، ما نه تنها در مورد استفاده بهینه از سخت افزار، بلکه در مورد سرعت ارسال محتوا به کاربران صحبت می کنیم. مثال: ضبط لحظه تعیین کننده یک مسابقه هاکی را می توان در عرض یک دقیقه پس از خود رویداد جستجو کرد.

رمزگذاری متوالی

بنابراین، خوشحالی کاربر تا حد زیادی به سرعت در دسترس شدن ویدیو بستگی دارد. و این عمدتاً توسط سرعت رمزگذاری تعیین می شود. وقتی هیچ الزامات سختگیرانه ای برای سرعت آپلود ویدیو وجود ندارد، پس هیچ مشکلی وجود ندارد. شما یک فایل منفرد و غیرقابل تقسیم را می گیرید، آن را تبدیل می کنید و آپلود می کنید. در ابتدای سفر ما اینگونه کار می کردیم:

چگونه رمزگذاری ویدیو را هشت برابر افزایش دادیم

مشتری ویدیو را در حافظه آپلود می کند، مؤلفه Analyzer اطلاعات متا را جمع آوری می کند و ویدیو را برای تبدیل به مؤلفه Worker منتقل می کند. تمام مراحل به صورت متوالی انجام می شود. در این مورد، سرورهای رمزگذاری زیادی وجود دارد، اما تنها یکی از آنها مشغول پردازش یک ویدیوی خاص است. نمودار ساده و شفاف اینجاست که مزایای آن به پایان می رسد. این طرح فقط به صورت عمودی (به دلیل خرید سرورهای قدرتمندتر) قابل تغییر است.

رمزگذاری متوالی با نتیجه متوسط

برای هموار کردن انتظار دردناک، صنعت یک گزینه کدگذاری سریع ارائه کرد. این نام گمراه کننده است، زیرا در واقع، کدگذاری کامل به صورت متوالی اتفاق می افتد و به همان اندازه طول می کشد. اما با یک نتیجه متوسط. ایده این است: یک نسخه با وضوح پایین از ویدیو را در اسرع وقت آماده و منتشر کنید، و تنها پس از آن نسخه های با وضوح بالاتر.

از یک طرف، ویدیو سریعتر در دسترس می شود. و برای رویدادهای مهم مفید است. اما از سوی دیگر، تصویر تار به نظر می رسد و این موضوع بینندگان را آزار می دهد.

به نظر می رسد که شما نه تنها باید به سرعت فیلم را پردازش کنید، بلکه کیفیت آن را نیز حفظ کنید. این همان چیزی است که کاربران در حال حاضر از یک سرویس ویدیویی انتظار دارند. ممکن است به نظر برسد که کافی است پربازده ترین سرورها را بخرید (و به طور منظم همه آنها را یکباره ارتقا دهید). اما این یک بن بست است، زیرا همیشه ویدیویی وجود دارد که حتی قدرتمندترین سخت افزارها را نیز کند می کند.

رمزگذاری موازی

بسیار کارآمدتر است که یک مسئله پیچیده را به بسیاری از مشکلات کمتر پیچیده تقسیم کنید و آنها را به طور موازی در سرورهای مختلف حل کنید. این MapReduce برای ویدیو است. در این مورد، ما محدود به عملکرد یک سرور نیستیم و می توانیم به صورت افقی (با افزودن ماشین های جدید) مقیاس بندی کنیم.

به هر حال، ایده تقسیم فیلم ها به قطعات کوچک، پردازش آنها به صورت موازی و چسباندن آنها به هم پنهان نیست. شما می توانید ارجاعات زیادی به این رویکرد پیدا کنید (به عنوان مثال، در Habré من یک پست در مورد پروژه را توصیه می کنم DistVIDc). اما این کار را به طور کلی آسان نمی کند، زیرا شما نمی توانید یک راه حل آماده را انتخاب کنید و آن را در خانه خود بسازید. ما نیاز به تطبیق با زیرساخت، ویدئو و حتی بار خود داریم. به طور کلی، نوشتن خود آسانتر است.

بنابراین، در معماری جدید، بلوک Worker یکپارچه را با کدگذاری متوالی به میکروسرویس‌های Segmenter، Tcoder، Combiner تقسیم کردیم.

چگونه رمزگذاری ویدیو را هشت برابر افزایش دادیم

  1. Segmenter ویدیو را به قطعات تقریباً 10 ثانیه ای تقسیم می کند. قطعات شامل یک یا چند GOP (گروهی از تصاویر). هر GOP مستقل است و به طور جداگانه رمزگذاری شده است تا بتوان آن را بدون ارجاع به فریم های دیگر GOP رمزگشایی کرد. یعنی قطعات را می توان مستقل از یکدیگر پخش کرد. این تقسیم‌بندی تأخیر را کاهش می‌دهد و اجازه می‌دهد پردازش زودتر شروع شود.
  2. Tcoder هر قطعه را پردازش می کند. یک کار را از صف می گیرد، یک قطعه را از حافظه دانلود می کند، آن را با وضوح های مختلف رمزگذاری می کند (به یاد داشته باشید که پخش کننده می تواند نسخه ای را بر اساس سرعت اتصال انتخاب کند)، سپس نتیجه را دوباره به حافظه ذخیره می کند و قطعه را به عنوان پردازش علامت گذاری می کند. در پایگاه داده پس از پردازش تمام قطعات، Tcoder وظیفه را برای ایجاد نتایج برای مؤلفه بعدی ارسال می کند.
  3. Combiner نتایج را با هم جمع آوری می کند: تمام قطعات ساخته شده توسط Tcoder را دانلود می کند، جریان هایی را برای وضوح های مختلف تولید می کند.

چند کلمه در مورد صدا محبوب ترین کدک صوتی AAC یک ویژگی ناخوشایند دارد. اگر قطعات را جداگانه رمزگذاری کنید، به سادگی نمی توانید آنها را به طور یکپارچه به هم بچسبانید. انتقال قابل توجه خواهد بود. کدک های ویدیویی این مشکل را ندارند. از نظر تئوری، شما می توانید به دنبال یک راه حل فنی پیچیده باشید، اما این بازی به سادگی ارزش شمع را ندارد (وزن صدا به طور قابل توجهی کمتر از ویدیو است). بنابراین، فقط ویدیو به صورت موازی کدگذاری می شود و کل آهنگ صوتی پردازش می شود.

یافته ها

به لطف پردازش موازی ویدیو، تاخیر بین آپلود شدن ویدیو برای ما و در دسترس قرار گرفتن کاربران را به میزان قابل توجهی کاهش داده ایم. به عنوان مثال، قبلاً ساخت چندین نسخه کامل با کیفیت متفاوت برای یک فیلم FullHD که یک ساعت و نیم طول می‌کشید، دو ساعت طول می‌کشید. اکنون همه اینها 15 دقیقه طول می کشد. علاوه بر این، با پردازش موازی، ما یک نسخه با وضوح بالا حتی سریعتر از یک نسخه با وضوح پایین با رویکرد نتیجه متوسط ​​قدیمی ایجاد می کنیم.

و یه چیز دیگه با رویکرد قدیمی، یا سرورهای کافی وجود نداشت یا بدون کار بیکار بودند. کدگذاری موازی به شما امکان می دهد سهم بازیافت آهن را افزایش دهید. اکنون خوشه بیش از هزار سرور ما همیشه با چیزی مشغول است.

در واقع هنوز جای پیشرفت وجود دارد. به عنوان مثال، اگر قسمت‌هایی از ویدیو را قبل از اینکه به طور کامل به دست ما برسد، پردازش کنیم، می‌توانیم در زمان قابل توجهی صرفه‌جویی کنیم. همانطور که می گویند، بیشتر در راه است.

در نظرات بنویسید که دوست دارید در مورد چه وظایفی در زمینه کار با ویدیو بخوانید.

لینک های مفید به تجربه همکاران صنعت

منبع: www.habr.com

اضافه کردن نظر