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