پرش به مطلب اصلی

پخش زنده کم‌تاخیر

هنگام ایجاد یک استریم، می‌توان نوع آن را عادی یا کم‌تاخیر انتخاب کرد. در حالت عادی، استریم شما با 30 ثانیه تاخیر پخش می‌شود. در حالت کم تاخیر و به‌شکل ایده‌آل تاخیر سرویس پخش زنده، چیزی در حدود ۱۰ الی ۱۵ ثانیه است. اما دست‌یابی به این میزان تاخیر، نیازمند تنظیماتی سمت سرور شماست.

‫از طرفی، فریم ورودی محتوا بعد از ۴.۸ ثانیه از سرویس پخش زنده‌ی ابر آروان خارج می‌شود. این موضوع به این معنا نیست که تاخیر در پخش زنده، فقط به این مقدار محدود می‌شود، بلکه موارد دیگری وجود دارند که در عدد نهایی تاثیرگذا‫ر استند. در واقع

میزان نهایی تاخیر = (A) مدت زمان ارسال محتوا +‌ (B) مدت زمان مورد نیاز برای پردازش (۴.۸ ثانیه)(C) + مدت زمان رسیدن محتوا به پلیر(D) + مدت زمان پخش به‌وسیله‌ی پلیر برای کاربر نهایی

در ادامه نحوه‌‌ی کاهش این ۴ پارامتر را به‌شکل کامل بررسی خواهیم کرد.

کاهش مدت زمان ارسال محتوا

نکته‌ی مهمی که باید به آن توجه داشته باشیم این است که سرویس پخش زنده‌ی ابر آروان قابلیت ارایه‌ی ۳ خروجی از محتوای دریافتی (بسته به انتخاب و تشخیص کاربر) را دارد و به‌طور معمول برای سرویس‌های پخش زنده پیشنهاد می‌شود از هر سه‌ خروجی‌ برای سه گروه کاربر استفاده شود:

  • ‫خروجی با بیت‌ریت و رزولوشن بالا برای کاربران با کیفیت و سرعت اینترنت بالا ارایه شود.
  • خروجی با بیت‌ریت و رزولوشن متوسط برای کاربران با کیفیت و سرعت اینترنت خوب ارایه شود.
  • و در نهایت خروجی با بیت‌ریت و رزولوشن پایین برای کاربرانی که از کیفیت و سرعت اینترنت‫ خوبی برخوردار نیستند، ارایه شود.

بنابراین نیازی به ارسال محتوای چندگانه وجود ندارد (این مورد، باعث ایجاد تاخیر در دریافت محتوا توسط سرویس‫ پخش زنده‌ی ابر آروان شده و ممکن است عملکرد آن را به مخاطره بیاندازد). در خصوص کاهش تاخیر، یک توصیه‌ی مهم وجود دارد:

محتوای ارسالی باید کم‌ترین بیت‌ریت ممکن را داشته باشد تا بتوان از کاهش تاخیر در ارسال، اطمینان‫ حاصل کرد.

افزون بر این، سرویس پخش زنده‌ی ابر آروان کم‌ترین زمان را برای تولید خروجی مورد نیاز صرف می‌کند.

در خصوص انتخاب بیت‌ریت باید یه این نکته توجه داشته باشید که بیت‌ریت ارسالی نباید کم‌تر از بیت‌ریت‫ مورد انتظار در خروجی باشد تا کاهش کیفیت غیرعمدی رخ ندهد.

از نکات دیگری که در کاهش مدت زمان ارسال محتوا به شما کمک می‌کند، می‌توان به موارد زیر اشاره کرد:

  • ‫اطمینان کسب کنید که برای Encode کردن محتوا از CPU استفاده می‌کنید. استفاده از کارت گرافیک، سربار تبدیل و تبادل اطلاعات به وجود می‌آورد.
  • ‫مقدار CPU Usage Preset را ultrafast و مقدار Tune را zerolatency انتخاب کنید.
  • ‫در قسمت x264 Options می‌توانید مقدار bframe=0 crf=X را بنویسید. مقدار X عددی از بازه‌ی یک الی ۲۰ است. به‌شکلی که عدد کوچک‌تر به معنی کیفیت بالاتر و مصرف CPU بیش‌تر است. توصیه می‌شود این مقدار را با تست و آزمایش انتخاب کنید. برای شروع می‌توانید از عدد ۱۵ استفاده کنید.
  • از جمله عوامل دخیل در این مرحله، استفاده از سیستم با منابع اختصاصی است. به این معنا که هیچ‌یک‫ از منابع درگیر (RAM، CPU، Internet) به‌شکل اشتراکی با برنامه‌ها یا سیستم‌های دیگر مورد استفاده قرار نگیرند.

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

کاهش مدت زمان پردازش محتوا (۴.۸ ثانیه)

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

کاهش مدت زمان رسیدن محتوا به پلیر

از عوامل تاثیرگذار در این مرحله، می‌توان به خروجی انتخاب شده و کیفیت اینترنت کاربر نهایی هنگام دریافت‫ خروجی اشاره کرد. بنابراین توصیه می‌شود در انتخاب خروجی با وسواس بیش‌تری عمل کنید.

کاهش مدت زمان پخش به‌وسیله‌ پلیر برای کاربر نهایی

منیفست‌های ارایه‌شده توسط سرویس پخش‌ زنده‌ی ابر آروان شامل ۳ چانک ۶ ثانیه‌ای در حالت عادی است که طول این چانک‌ها در حالت low latency یا کم‌تاخیر دو ثانیه است. پلیرهای رایج برای ایجاد تجربه‌ی پخش مستمر و یکپارچه برای کاربر نهایی بدین شکل عمل می‌کنند که حین پخش چانک‌های جاری، از این فرصت استفاده کرده و شروع به دریافت چانک‌های بعدی می‌کنند تا زمانی که نوبت پخش آن‌ها رسید، آماده‌ی پخش باشند.

در حالت کلی پلیر در حد پخش آخرین چانک فرصت برای دانلود چانک بعدی دارد، ولی هر پلیری به نسبت تنظیمات پیش‌فرض‌ش، اولین بار که شروع به پخش استریم می‌کند از چند چانک آخر شروع می‌کند. این روند می‌تواند تاخیر چند ثانیه‌ای در پخش را در پی داشته باشد. کاری که می‌توان در این مرحله انجام داد این است که پلیر به نوعی تنظیم شود که همیشه با آخرین چانک شروع کند تا تاخیر موجود در پخش به کم‌ترین حالت ممکن برسد. نکته‌ای که در این خصوص باید در نظر گرفته شود این است که پایداری پخش با Realtime بودن آن نسبت عکس دارد و کاهش تاخیر باعث کاهش پخش مستمر، یکپارچه و بدون لگ هنگام پخش خواهد شد. بنابراین پیدا کردن بهترین چانک برای شروع پخش نیازمند بررسی تنظیمات مختلف و برآورد و مقایسه‌ی نتایج حاصل از آن‌هاست.

‫به‌شکل کلی برای پلیر و در زمان پخش برای Compatible شدن با ساختار Low Latency باید پلیر را به گونه‌ای تنظیم کرد که تا جای ممکن Chunk آخر درون Manifest را بخواند، اما با رعایت شرایط خاص.

در ساختار LL معمولا Manifest را کوچک در نظر می‌گیرند و طول Chunk ها هم کم‌تر از حد معمول و استاندارد در نظر گرفته می‌شود، برای مثال در ساختار ابر آروان یک Manifest سه چانکی که طول هر چانک ۲ ثانیه است در نظر می‌گیریم که در نهایت طول Manifest ۶ ثانیه می‌شود.

‫سمت کاربر، Player در این بازه ۶ ثانیه‌ای فعالیت می‌کند، یعنی اگر کاربر هر جای این بازه ۶ ثانیه‌ای باشد، پلیر به‌شکل عادی پخش می‌شود، ولی اگر از این بازه خارج شود و تفاوت زمانی‌اش با چیزی که دریافت می‌کند بیش‌تر از ۶ ثانیه شود، در اینجا از چانک آخر شروع به پخش می‌کند. به همین دلیل ممکن است که دو Device در کنار هم باشند و یکی از آن ها در لحظه دچار قطعی اینترنت شود و این قطعی یک یا دو ثانیه طول بکشد. بعد از وصل شدن اینترنت این Device، کاربر، استریم مد نظر را با تفاوت دو ثانیه‌ای نسبت به Device یا کاربر دیگر می‌بیند و چانک آخر را دریافت نمی‌کند چون در بازه ۶ ثانیه یا طول Manifest قرار دارد.

‫به‌شکل کلی، تنظیم کردن Player برای این‌که همیشه و در هر شرایطی چانک آخر را بخواند، حتی اگر در داخل بازه و طول Manifest قرار داشت، روال درست و استانداردی نیست، زیرا در شرایط Unstable بودن اینترنت باعث می‌شود که کاربران Frame یا تصاویری را از دست بدهند و نبینند.

‫نکته‌ی قابل ذکر دیگر این است که استفاده از MPEG-DASH نتیجه‌ی بهتری در سینک بودن پخش بین چند کاربر دارد به همین دلیل، توصیه می‌شود که برای کاربران اندروید از MPEG-DASH و در کاربران iOS از HLS استفاده شود.