חזרה להפסקה למודעה שדילגתם עליה

הפלטפורמה: HTML5 Android iOS tvOS Roku

מוציאים לאור של סרטונים יכולים לרצות למנוע מהצופים לדלג על מודעות באמצע הסרטון. כשמשתמש מדלג מעבר להפסקת פרסום, אפשר להחזיר אותו לתחילת הפסקת הפרסום הזו, ואז להחזיר אותו למיקום הדילוג אחרי שההפסקה מסתיימת. התכונה הזו נקראת 'חזרה מהירה'.

לדוגמה, ראו את התרשים הבא. הצופה צופה בסרטון ומחליט לדלג מנקודת הזמן של 5 דקות לנקודת הזמן של 15 דקות. עם זאת, יש הפסקת פרסומות אחרי 10 דקות צפייה, ואתם רוצים שהצופים יצפו בה לפני שהם יוכלו לצפות בתוכן שאחריה:

כדי להציג את ההפסקה המסחרית הזו, פועלים לפי השלבים הבאים:

  1. בודקים אם המשתמש הפעיל מעבר מהיר שדילג על הפסקת פרסום שהוא לא צפה בה, ואם כן, מחזירים אותו להפסקת הפרסום.
  2. אחרי שהפסקת הפרסום מסתיימת, מחזירים את הצופים למיקום המקורי בסרטון.

בתרשים, זה נראה כך:

כך מטמיעים את התכונה 'חזרה מהירה' באמצעות IMA DAI SDK, כמו שמוצג בדוגמה המתקדמת.

איך מונעים מעבר מהיר קדימה שגורם לדילוג על הפסקה למודעה

בודקים אם המשתמש הפעיל מעבר מהיר קדימה שדילג על הפסקת פרסום שהוא לא צפה בה, ואם כן, מחזירים אותו להפסקת הפרסום. ב-SDK של HTML5, מגדירים event listener באירוע seeked של נגן התוכן כדי להפעיל את onSeekEnd(). השיטה הזו (שמוצגת בהמשך) בודקת את נקודת האות לפני זמן החיפוש של המשתמש. אם המודעה לא הופעלה, המערכת תעביר את הצופה לתחילת ההפסקה המסחרית במקום לנקודת ההתחלה הרצויה, ותשמור את נקודת ההתחלה הרצויה ב-snapForwardTime.

function onSeekEnd() {
  if (isLiveStream) { return; }
  if (isSnapback) {
    isSnapback = false;
    return;
  }
  var currentTime = videoElement.currentTime;
  var previousCuePoint =
      streamManager.previousCuePointForStreamTime(currentTime);
  if (previousCuePoint && !previousCuePoint.played) {
    isSnapback = true;
    snapForwardTime = currentTime;
    videoElement.currentTime = previousCuePoint.start;
}

החזרת המשתמש למיקום המקורי שלו בסרטון

עכשיו, כשמתקבל אירוע AD_BREAK_ENDED, בודקים אם הערך snapForwardTime מוגדר. אם כן, צריך להעביר את המשתמש לנקודה הזו בשידור, כי הפסקת הפרסום שהוא צפה בה הייתה תוצאה של חזרה מהירה:

function onAdBreakEnded(e) {
  videoElement.controls = true;
  clickElement.style.display = 'none';
  adUiDiv.style.display = 'none';
  if (snapForwardTime && snapForwardTime > videoElement.currentTime) {
    videoElement.currentTime = snapForwardTime;
    snapForwardTime = null;
  }
}