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

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

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

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

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

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

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

כך מטמיעים את snapback באמצעות IMA DAI SDK, כמו שמוצג בדוגמה המתקדמת שלנו.

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

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

Function handleFastForward(player as Object, streamManager as Object, updatedTime As Integer)
  previousAd = streamManager.getPreviousCuePoint(updatedTime)
  If previousAd = Invalid or previousAd.hasPlayed
    player.seek(updatedTime * 1000)
  Else If previousAd.start > player.currentTime
    player.isSnapback = True
    player.timeAfterSnapback = updatedTime
    player.seek(previousAd.start * 1000 + 1000)
  End If
End Function

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

ב-handler‏ adBreakEnded, בודקים אם ההפסקה הקודמת לפרסומות הופעלה כתוצאה מהחזרה לנקודת ההתחלה. אם כן, צריך להחזיר את המשתמש למקום שאליו הוא ניסה להגיע בהתחלה (בתנאי שזה לא היה באמצע הפסקת הפרסומות שהסתיימה):

player.adBreakEnded = Function(adBreakInfo as Object)
  If m.isSnapback
    m.seek(m.timeAfterSnapback * 1000)
    m.isSnapback = False
  End If
End Function