بصفتك ناشر فيديوهات، قد تريد منع المشاهدين من تخطّي "الإعلانات أثناء التشغيل". عندما يتخطّى المستخدم فاصلًا إعلانيًا، يمكنك إعادته إلى بداية هذا الفاصل، ثم إعادته إلى موضع التقديم السريع بعد انتهاء الفاصل. تُعرف هذه الميزة باسم "الرجوع السريع".
اطّلِع على الرسم البياني أدناه كمثال. يشاهد المستخدم فيديو ويقرّر الانتقال من الدقيقة 5 إلى الدقيقة 15. ومع ذلك، هناك فاصل إعلاني عند الدقيقة 10 تريد أن يشاهده المستخدمون قبل أن يتمكّنوا من مشاهدة المحتوى بعده:
لعرض فاصل إعلاني، اتّبِع الخطوات التالية:
- تحقَّق مما إذا كان المستخدم قد نفّذ عملية بحث تجاوزت فاصل إعلاني لم تتم مشاهدته، وإذا كان الأمر كذلك، أعِد المستخدم إلى الفاصل الإعلاني.
- بعد انتهاء فاصل الإعلانات، أعِد المستخدمين إلى موضع البحث الأصلي.
في شكل رسم بياني، يبدو ذلك على النحو التالي:
إليك كيفية تنفيذ سير العمل هذا في حزمة تطوير البرامج (SDK) الخاصة بميزة "الإعلانات الديناميكية المدرَجة" في "إعلانات الوسائط التفاعلية"، كما هو موضّح في 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;
}