برگشتن به وقفه آگهی ردشده

پلاتفرم را انتخاب کنید: HTML5 Android iOS tvOS Roku

به‌عنوان ناشر ویدیو، ممکن است بخواهید از رد کردن آگهی‌های میان‌ویدیویی توسط بینندگان خود جلوگیری کنید. وقتی کاربر از وقفه آگهی رد می‌شود، می‌توانید او را به ابتدای آن وقفه آگهی برگردانید و سپس پس‌از تکمیل آن وقفه آگهی، او را به مکان رد شدن برگردانید. به این ویژگی «بازگشت سریع» می‌گویند.

به‌عنوان مثال، نمودار زیر را ببینید. بیننده شما درحال تماشای ویدیو است و تصمیم می‌گیرد از دقیقه ۵ به دقیقه ۱۵ برود. بااین‌حال، یک وقفه آگهی در دقیقه ۱۰ وجود دارد که می‌خواهید قبل‌از تماشای محتوای بعداز آن، آن را تماشا کنند:

برای نمایش این وقفه آگهی، مراحل زیر را انجام دهید:

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

در قالب نمودار، این‌گونه به‌نظر می‌رسد:

در اینجا نحوه پیاده‌سازی این گردش کار در IMA DAI SDK، همان‌طور که در AdvancedExample انجام شده است، آورده شده است.

جلوگیری از جستجو برای ترک وقفه آگهی تماشانشده

بررسی کنید که آیا کاربر جستجویی انجام داده است که از وقفه آگهی تماشانشده عبور کرده است یا نه، و اگر چنین است، او را به وقفه آگهی برگردانید. در کیت توسعه نرم‌افزار Android، از شیء PlayerControl برای شناسایی جستجو استفاده کنید. وقتی کاربر جستجو می‌کند، روش onSeek() SampleHlsVideoPlayerCallback را که توسط SampleAdsWrapper پیاده‌سازی شده است راه‌اندازی کنید. این روش (که در زیر ارائه شده است) نقطه راهنما را قبل‌از زمان جستجوی کاربر بررسی می‌کند. اگر پخش نشده است، به‌جای نقطه جستجوی مطلوب اولیه، به ابتدای آن وقفه آگهی بروید و آن نقطه جستجوی مطلوب را در snapBackTime ذخیره کنید.

@Override
public void onSeek(int timeMillis) {
  double timeToSeek = timeMillis;
  if (streamManager != null) {
    CuePoint cuePoint =
        streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
    if (cuePoint != null && !cuePoint.isPlayed()) {
      snapBackTime = timeToSeek / 1000.0; // Update snapback time.
      // Missed cue point, so snap back to the beginning of cue point.
      timeToSeek = cuePoint.getStartTime() * 1000;
      videoPlayer.seek(Math.round(timeToSeek));
      videoPlayer.setCanSeek(false);
      return;
    }
  }
  videoPlayer.seek(Math.round(timeToSeek));
}

برگرداندن کاربر به جستجوی اصلی

اکنون وقتی رویداد onAdBreakEnded را دریافت می‌کنید، بررسی کنید که آیا snapBackTime تنظیم شده است یا نه. If so, take the user to that point in the stream, because the ad break they just watched was the result of snapback:

@Override
public void onAdBreakEnded() {
  // Re-enable player controls.
  videoPlayer.setCanSeek(true);
  videoPlayer.enableControls(true);
  if (snapBackTime > 0) {
    videoPlayer.seek(Math.round(snapBackTime * 1000));
  }
  snapBackTime = 0;
}