একজন ভিডিও প্রকাশক হিসেবে, আপনি হয়তো আপনার দর্শকদের মিড-রোল বিজ্ঞাপনগুলো এড়িয়ে যাওয়া থেকে আটকাতে চাইতে পারেন। যখন কোনো ব্যবহারকারী একটি বিজ্ঞাপন বিরতি এড়িয়ে যান, তখন আপনি তাকে সেই বিরতির শুরুতে ফিরিয়ে নিয়ে যেতে পারেন এবং বিরতিটি শেষ হওয়ার পর তাকে তার আগের অবস্থানে ফিরিয়ে আনতে পারেন। এই বৈশিষ্ট্যটিকে "স্ন্যাপব্যাক" বলা হয়।
উদাহরণস্বরূপ, নিচের ডায়াগ্রামটি দেখুন। আপনার দর্শক একটি ভিডিও দেখছেন এবং তিনি ৫ মিনিটের পর থেকে ১৫ মিনিটের পর যেতে চান। কিন্তু, ১০ মিনিটের মাথায় একটি বিজ্ঞাপন বিরতি আছে, যার পরের কন্টেন্ট দেখার আগে আপনি চান যে দর্শক সেটি দেখুক।

এই বিজ্ঞাপন বিরতিটি দেখানোর জন্য, নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:
- যাচাই করুন ব্যবহারকারী এমন কোনো অনুসন্ধান চালিয়েছেন কিনা যা কোনো না দেখা বিজ্ঞাপন বিরতি এড়িয়ে গেছে, এবং যদি তাই হয়, তবে তাকে বিজ্ঞাপন বিরতিতে ফিরিয়ে নিয়ে যান।
- বিজ্ঞাপন বিরতি শেষ হলে, তাদেরকে তাদের আগের অবস্থানে ফিরিয়ে দিন।
ডায়াগ্রাম আকারে, এটি দেখতে এইরকম:

AdvancedExample- এ যেমন করা হয়েছে, সেই অনুযায়ী IMA DAI SDK-তে এই ওয়ার্কফ্লোটি কীভাবে প্রয়োগ করতে হয় তা এখানে দেখানো হলো।
বিজ্ঞাপনের বিরতি দেখার আগে কোনো অনুসন্ধান বন্ধ করুন।
ব্যবহারকারী কোনো না দেখা বিজ্ঞাপন বিরতি পার করে সিক (seek) করেছেন কিনা তা পরীক্ষা করুন, এবং যদি তাই হয়, তবে তাকে সেই বিজ্ঞাপন বিরতিতে ফিরিয়ে নিয়ে যান। অ্যান্ড্রয়েড এসডিকে-তে, সিকিং শনাক্ত করতে PlayerControl অবজেক্টটি ব্যবহার করুন। যখন ব্যবহারকারী সিক করেন, তখন SampleAdsWrapper দ্বারা ইমপ্লিমেন্টেড SampleHlsVideoPlayerCallback এর onSeek() মেথডটি ট্রিগার করুন। সেই মেথডটি (যা নিচে দেখানো হলো) ব্যবহারকারীর সিক করার সময়ের আগের কিউ পয়েন্টটি পরীক্ষা করে। যদি সেটি প্লে না হয়ে থাকে, তবে ব্যবহারকারীর প্রাথমিক কাঙ্ক্ষিত সিক পয়েন্টের পরিবর্তে সেই বিজ্ঞাপন বিরতির শুরুতে সিক করুন, এবং সেই কাঙ্ক্ষিত সিক পয়েন্টটি 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;
}