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

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

כך מטמיעים את התכונה 'חזרה מהירה' באמצעות IMA DAI SDK, כמו שמוצג בדוגמה המתקדמת.
איך מונעים מדילוג על הפסקה למודעה מבלי שהיא נצפית
בודקים אם המשתמש דילג על הפסקה למודעה שהוא לא צפה בה, ואם כן, מחזירים אותו להפסקה למודעה.
ב-SDK של HTML5, מגדירים event listener בseeked event של נגן התוכן כדי להפעיל את 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;
}
}