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

برای نمایش این تبلیغ کوتاه، مراحل زیر را انجام دهید:
- بررسی کنید که آیا کاربر جستجویی انجام داده که از یک تبلیغ دیده نشده عبور کرده است یا خیر، و اگر چنین است، او را به تبلیغ دیده نشده برگردانید.
- پس از اتمام نمایش تبلیغات، آنها را به جستجوی اصلیشان برگردانید.
در شکل نمودار، این به این شکل است:

در اینجا نحوه پیادهسازی این گردش کار در IMA DAI SDK، همانطور که در AdvancedExample انجام شده است، آورده شده است.
جلوگیری از اینکه یک جستجوی خاص، تبلیغ تماشا نشده را رها کند
بررسی کنید که آیا کاربر جستجویی را اجرا کرده است که از یک وقفه تبلیغاتی مشاهده نشده عبور کرده است یا خیر، و در این صورت، او را به وقفه تبلیغاتی برگردانید. در SDK اندروید، از شیء PlayerControl برای تشخیص جستجو استفاده کنید. هنگامی که کاربر جستجو میکند، متد onSeek() از SampleHlsVideoPlayerCallback پیادهسازی شده توسط SampleAdsWrapper را فعال کنید. این متد (که در زیر ارائه شده است) نقطه نشانه (cue point) را قبل از زمان جستجوی کاربر بررسی میکند. اگر پخش نشده باشد، به جای نقطه جستجوی اولیه مورد نظر او، به ابتدای آن وقفه تبلیغاتی جستجو کنید و آن نقطه جستجوی مورد نظر را در 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 تنظیم شده است یا خیر. اگر چنین است، کاربر را به آن نقطه از پخش زنده ببرید، زیرا وقفه تبلیغاتی که آنها مشاهده کردهاند نتیجه 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;
}