قبعة سناباك

وبصفتك ناشر فيديو، قد تحتاج إلى منع المشاهدين من تخطّي الإعلانات أثناء التشغيل عندما يتخطّى المستخدم الفاصل الإعلاني يمكنك إعادتها إلى بداية الفاصل الإعلاني، ثم إلى موقع البحث بعد اكتمال ذلك الفاصل الإعلاني. هذا النمط تسمى "Snapback".

كمثال، انظر الرسم التخطيطي أدناه. إذا كان المستخدم يشاهد فيديو ويقرر الانتقال من علامة 5 دقائق إلى 15 دقيقة. ومع ذلك، هناك فاصل إعلاني عند الوصول إلى علامة الـ 10 دقائق التي تريد ليتمكّنوا من مشاهدة المحتوى بعد انتهائه:

لعرض هذا الفاصل الإعلاني، اتّبِع الخطوات التالية:

  1. تحقّق مما إذا كان المستخدم قد أجرى عملية بحث تجاوزت فاصل إعلاني لم تتم مشاهدته. وفي هذه الحالة، ارجع إلى الفاصل الإعلاني.
  2. بعد اكتمال الفاصل الإعلاني، يمكنك إعادته إلى موضعه الأصلي.

وفي شكل الرسم التخطيطي، يبدو ذلك كما يلي:

في ما يلي كيفية تنفيذ سير العمل هذا في حزمة تطوير البرامج لإدراج إعلان ديناميكي لإعلانات الوسائط التفاعلية، كما تم في AdvancedExample.

منع التمرير حتى لا تتم مشاهدة فاصل إعلاني

تحقّق مما إذا كان المستخدم قد أجرى عملية بحث تجاوزت فاصل إعلاني لم تتم مشاهدته. وفي هذه الحالة، ارجع إلى الفاصل الإعلاني. في حزمة تطوير البرامج (SDK) لنظام التشغيل 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 تم تعيينها. إذا كان الأمر كذلك، فوجِّه المستخدم إلى تلك المرحلة من البث، لأن الإعلان الاستراحة التي شاهدها للتو كانت نتيجة العودة إلى المحتوى السابق:

@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;
}