বিজ্ঞাপন বিরতি, বিজ্ঞাপন বিরতি

ওভারভিউ

ওয়েব রিসিভার SDK একটি প্রদত্ত মিডিয়া স্ট্রীমের মধ্যে বিজ্ঞাপন বিরতি এবং সহচর বিজ্ঞাপনগুলির জন্য নেটিভ সমর্থন বৈশিষ্ট্যযুক্ত। এটি বিজ্ঞাপনের অবস্থান, বিজ্ঞাপনের উত্স এবং বিজ্ঞাপন বিরতির আচরণ এবং তাদের সম্পর্কিত বিরতি ক্লিপ সেট করতে API প্রদান করে। এই নির্দেশিকায়, একটি Break বলতে এক বা একাধিক বিজ্ঞাপন বা বাম্পার সমন্বিত প্লেব্যাকের একটি বিরতি বোঝায় এবং প্রতিটি বিজ্ঞাপন বা বাম্পারকে একটি BreakClip হিসাবে উল্লেখ করা হয়। এই বিরতিগুলি মিডিয়ার সাথে যুক্ত যা লোড হচ্ছে বা চালানো হচ্ছে।

বিজ্ঞাপনের ধরন

ওয়েব রিসিভার SDK ক্লায়েন্ট সাইড অ্যাড ইনসার্শন (CSAI) এবং সার্ভার স্টিচড অ্যাড ইনসার্শন (SSAI) সমর্থন করে। ক্লায়েন্ট-সেলাই করা বিজ্ঞাপনগুলি অ্যাপ্লিকেশন দ্বারা ম্যানুয়ালি সেট করা যেতে পারে বা VAST এবং VMAP টেমপ্লেট ফাইলগুলি থেকে বের করা যেতে পারে। সার্ভার-সেলাই করা বিজ্ঞাপনগুলি এম্বেড করা বিজ্ঞাপন হিসাবে সামগ্রী লোড হওয়ার আগে বা এম্বেডেড প্রসারিত বিজ্ঞাপন হিসাবে সামগ্রী প্লেব্যাকের সময় গতিশীলভাবে ম্যানুয়ালি নির্দিষ্ট করা উচিত। এই বিজ্ঞাপনের ধরনগুলির প্রতিটির জন্য প্রয়োগগুলি নীচে বিশদভাবে বর্ণনা করা হয়েছে৷

ম্যানুয়াল ক্লায়েন্ট-সেলাই করা

ম্যানুয়াল ক্লায়েন্ট-সেলাই করা বিজ্ঞাপন বিরতি হল এক ধরনের বিজ্ঞাপন বিরতি যা ক্লায়েন্ট দ্বারা একসাথে সেলাই করা হয় এবং SDK API ব্যবহার করে অ্যাপ্লিকেশন দ্বারা ম্যানুয়ালি নির্দিষ্ট করা হয়। এই বিজ্ঞাপনের ধরনটি মূল বিষয়বস্তুর স্ট্রীমে এম্বেড করা নেই। BreakClip অবশ্যই contentId প্রদান করতে হবে যা একটি URL যা বিজ্ঞাপনের বিষয়বস্তুর দিকে নির্দেশ করে, বিজ্ঞাপনের বিষয়বস্তুর contentType এবং title বর্ণনা করে।

Break অবশ্যই ডিফল্ট মান falseisEmbedded এবং expanded সেট থাকতে হবে। position একটি প্রি-রোল , মিড-রোল বা পোস্ট-রোল বিজ্ঞাপন বিরতিতে সেট করা যেতে পারে ( ব্রেক পজিশনিং বিভাগে আরও দেখুন)। প্লেব্যাকের জন্য বিজ্ঞাপন প্রস্তুত করার সময়, ওয়েব রিসিভার SDK বিজ্ঞাপনের বিষয়বস্তু লোড এবং প্লে করার জন্য অন্য একটি প্লেয়ার উদাহরণ তৈরি করে। এই বিরতির জন্য একটি stitched timeline প্রয়োজন এবং স্থিরভাবে যোগ করা আবশ্যক ( বিজ্ঞাপন সন্নিবেশ বিভাগে আরও দেখুন)। নীচের নমুনাটি একটি ম্যানুয়াল ক্লায়েন্ট-সেলাই করা বিজ্ঞাপনের একটি মৌলিক বাস্তবায়ন দেখায়:

// Create the BreakClip.
let clipClient = new cast.framework.messages.BreakClip('bc_client');
clipClient.title = 'The Ad Title to be displayed during playback';
clipClient.contentId = 'https://example.com/ad.m3u8';
clipClient.contentType = 'application/vnd.apple.mpegurl';

// Optional: Used when HLS ad container formats differ from the main content's.
clipClient.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.FMP4;

// Create the Break using the BreakClip id above.
let breakPostrollClient = new cast.framework.messages.Break(
    'break_postroll_client', ['bc_client'], -1);
breakPostrollClient.isEmbedded = false; // Optional: default is false.
breakPostrollClient.expanded = false; // Optional: default is false.

VAST

ওয়েব রিসিভার SDK IAB স্ট্যান্ডার্ড VAST (ভিডিও অ্যাড সার্ভিং টেমপ্লেট) বিজ্ঞাপন যোগ করা সমর্থন করে। প্রদান করা হলে, XML টেমপ্লেটটি বিচ্ছেদ প্রবেশ করার পরে একটি পরবর্তী ক্লায়েন্ট-সেলাই করা বিরতি ক্লিপ তৈরি করতে পার্স করা হয়।

একটি VAST বিজ্ঞাপন তৈরি করতে, রিসিভার অ্যাপটিকে অবশ্যই একটি VastAdsRequest তৈরি করতে হবে এবং এটিকে BreakClip vastAdsRequest প্রপার্টিতে উল্লেখ করতে হবে। VastAdsRequest অবজেক্টে অবশ্যই adsResponse (XML টেমপ্লেটের একটি স্ট্রিং উপস্থাপনা) অথবা adTagUrl (যে url যেখানে XML টেমপ্লেট হোস্ট করা হয়) বৈশিষ্ট্য থাকতে হবে। URL নির্দিষ্ট করা থাকলে, SDK টেমপ্লেট আনার কাজ পরিচালনা করবে। এনক্যাপসুলেটিং Break ক্লায়েন্ট-সেলাই করা বিজ্ঞাপনের নিয়ম অনুসরণ করে। এই বিজ্ঞাপনগুলি অন্যান্য ম্যানুয়াল ক্লায়েন্ট-সেলাই করা বিজ্ঞাপনগুলির সাথে একই বিরতিতে বা একই সামগ্রীর জন্য পৃথক বিরতিতে যোগ করা যেতে পারে। নীচের নমুনাটি একটি VAST বিজ্ঞাপনের একটি মৌলিক বাস্তবায়ন দেখায়:

// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/ads.xml'

// Create the BreakClip.
let clipVast = new cast.framework.messages.BreakClip('bc_vast');
clipVast.vastAdsRequest = vastTemplate;

// Create the Break using the BreakClip id above.
let breakPostrollVast = new cast.framework.messages.Break(
    'break_postroll_vast', ['bc_vast'], -1);
breakPostrollVast.isEmbedded = false; // Optional: default is false.
breakPostrollVast.expanded = false; // Optional: default is false.

একটি VAST BreakClip ধারণকারী একটি Break প্রবেশ করানো হলে, ওয়েব রিসিভার SDK ঐচ্ছিকভাবে আনবে এবং তারপর টেমপ্লেটটি পার্স করবে৷ পার্স করার সময়, SDK একটি নতুন BreakClip তৈরি করবে এবং টেমপ্লেট থেকে বের করা মান যেমন contentId , contentType , title , duration , whenSkippable , এবং clickThroughUrl দিয়ে এটিকে পপুলেট করবে। জেনারেটেড ব্রেক ক্লিপের id GENERATED:N সেট করা হয়েছে যেখানে N হল একটি পূর্ণসংখ্যা যা 0 থেকে শুরু করে তৈরি প্রতিটি নতুন VAST ব্রেক ক্লিপের জন্য 1 দ্বারা বৃদ্ধি পায়। জেনারেট করা বিজ্ঞাপনটি BreakClip অ্যারেতে যোগ করা হয়। বর্তমান Break প্রতিটি VAST ব্রেক ক্লিপের id তারপর তার সংশ্লিষ্ট জেনারেট করা ব্রেক ক্লিপের id দিয়ে প্রতিস্থাপিত হয়। নীচের স্নিপেটগুলি MEDIA_STATUS বার্তাগুলির পরিবর্তনগুলিকে চিত্রিত করে যা এই ধরনের বিরতির আগে এবং পরে বিজ্ঞাপনগুলির সাথে সম্পর্কিত৷

VAST বিজ্ঞাপনের সাথে বিরতি দেওয়ার আগে Break এবং BreakClip তথ্য।

"breaks": [
  {
    "id": "break_postroll_vast",
    "breakClipIds": [
      "bc_vast"
    ],
    "position": 0,
    "isWatched": false
  }
],
"breakClips": [
  {
    "id": "bc_vast"
  }
]

VAST বিজ্ঞাপনের সাথে বিরতি দেওয়ার পরে Break এবং BreakClip তথ্য।

"breaks": [
  {
    "id": "break_postroll_vast",
    "breakClipIds": [
      "GENERATED:0"
    ],
    "position": 0,
    "isWatched": true
  }
],
"breakClips": [
  {
    "id": "bc_vast"
  },
  {
    "id": "GENERATED:0",
    "contentId": "https://example.com/break-clip-1.mpd",
    "contentType": "application/dash+xml",
    "title": "Ad Title Extracted from Template",
    "duration": 10,
    "whenSkippable": 5,
    "clickThroughUrl": "https://example.com/ad-target"
  }
]

VMAP

ওয়েব রিসিভার SDK IAB VMAP (ভিডিও একাধিক বিজ্ঞাপন প্লেলিস্ট) মানকে সমর্থন করে। যখন একটি VMAP প্রদান করা হয়, তখন ওয়েব রিসিভার SDK VMAP প্রতিক্রিয়া পার্স করবে এবং প্রতিক্রিয়াতে যেকোনো <AdBreak> এন্ট্রির জন্য ক্লায়েন্ট-সেলাই করা Break অবজেক্ট তৈরি করবে। এটি VMAP-এ দেওয়া প্রতিটি <AdSource> এন্ট্রির জন্য একটি vastAdsRequest অবজেক্ট সহ উপযুক্ত BreakClips তৈরি করবে। আপনার সামগ্রীতে বিজ্ঞাপন সন্নিবেশ করার জন্য VMAP সক্ষম করতে, অ্যাপ্লিকেশনটিকে অবশ্যই একটি VastAdsRequest অবজেক্ট তৈরি করতে হবে এবং LoadRequestDataMediaInformation এর vmapAdsRequest প্রপার্টিতে বরাদ্দ করতে হবে। এই বিজ্ঞাপনগুলি অবশ্যই স্থিরভাবে সন্নিবেশ করাতে হবে ( বিজ্ঞাপন সন্নিবেশ বিভাগে আরও দেখুন)। নীচে একটি স্নিপেট একটি VMAP অনুরোধ তৈরির রূপরেখা রয়েছে৷

// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/vmap.xml'

// Add it to the MediaInformation of the LoadRequest.
loadRequestData.media.vmapAdsRequest = vastTemplate;

এমবেড করা

এম্বেড করা বিজ্ঞাপন বিরতি হল এক ধরনের বিজ্ঞাপন বিরতি যা মূল বিষয়বস্তুর স্ট্রীমে সার্ভারের পাশে সেলাই করা হয়। মিডিয়া সময় গণনা করার সময় প্রধান বিষয়বস্তুর সময়কাল থেকে Break সময়কাল বিয়োগ করা হয়।

BreakClip অবশ্যই বিজ্ঞাপনের বিষয়বস্তুর duration এবং title প্রদান করবে। Break অবশ্যই true isEmbedded সেট এবং false expanded সেট থাকতে হবে। position একটি প্রি-রোল বা মিড-রোল বিজ্ঞাপন বিরতি হিসাবে সেট করা যেতে পারে. পোস্ট-রোল বিজ্ঞাপন বিরতি ইতিবাচক সঠিক position মানগুলির সাথে সমর্থিত। ব্রেক পজিশনিং বিভাগে এই সম্পর্কে আরও দেখুন। যখন বিজ্ঞাপনটি চালানোর জন্য ট্রিগার করা হয়, তখন ওয়েব রিসিভার SDK স্ট্রীমের প্লেব্যাক চালিয়ে যায় কারণ বিজ্ঞাপনের অংশগুলি এতে এমবেড করা থাকে। এই ধরনের বিজ্ঞাপনের জন্য কোনো অতিরিক্ত লোডিং ব্যবস্থা নেই। প্লেহেড বিরতির সময়সীমার মধ্যে থাকলে প্রাসঙ্গিক বিজ্ঞাপন মেটাডেটা ব্যবহারকারীকে দেখানো হয়। এই বিরতির জন্য একটি embedded timeline প্রয়োজন এবং স্থিরভাবে যোগ করা আবশ্যক ( বিজ্ঞাপন সন্নিবেশ বিভাগে আরও দেখুন)। নীচের নমুনাটি একটি embedded বিজ্ঞাপনের একটি মৌলিক বাস্তবায়ন দেখায়।

// Create the BreakClip.
let clipEmbedded = new cast.framework.messages.BreakClip('bc_embedded');
clipEmbedded.title = 'The Ad Title to be displayed during playback';
clipEmbedded.duration = 15;

// Create the Break using the BreakClip id above.
let breakPrerollEmbedded = new cast.framework.messages.Break(
    'break_preroll_embedded', ['bc_embedded'], 0);
breakPrerollEmbedded.isEmbedded = true;
breakPrerollEmbedded.expanded = false; // Optional: default is false.

এমবেডেড প্রসারিত

এম্বেড করা সম্প্রসারিত বিজ্ঞাপন বিরতি হল এক ধরনের বিজ্ঞাপন বিরতি যা প্রধান বিষয়বস্তুর স্ট্রীমে সার্ভার সাইডে সেলাই করা হয়। মিডিয়া সময় গণনা করার সময় Break সময়কাল প্রধান বিষয়বস্তুর সময়কাল অন্তর্ভুক্ত করা হয়।

BreakClip অবশ্যই বিজ্ঞাপনের বিষয়বস্তুর duration এবং title প্রদান করবে। Break অবশ্যই true isEmbedded সেট এবং true expanded সেট থাকতে হবে। position একটি প্রি-রোল বা মিড-রোল বিজ্ঞাপন বিরতি হিসাবে সেট করা যেতে পারে. পোস্ট-রোল বিজ্ঞাপন বিরতি ইতিবাচক position মান সঙ্গে সমর্থিত হয়. ব্রেক পজিশনিং বিভাগে এই সম্পর্কে আরও দেখুন। যখন বিজ্ঞাপনটি চালানোর জন্য ট্রিগার করা হয়, তখন ওয়েব রিসিভার SDK স্ট্রীমের প্লেব্যাক চালিয়ে যায় কারণ বিজ্ঞাপনের অংশগুলি এতে এমবেড করা থাকে। এই ধরনের বিজ্ঞাপনের জন্য কোনো অতিরিক্ত লোডিং ব্যবস্থা নেই। প্লেহেড বিরতির সময়সীমার মধ্যে থাকলে প্রাসঙ্গিক বিজ্ঞাপন মেটাডেটা ব্যবহারকারীকে দেখানো হয়। এই বিরতির জন্য একটি embedded timeline প্রয়োজন এবং স্থিতিশীল বা গতিশীলভাবে যুক্ত করা যেতে পারে ( বিজ্ঞাপন সন্নিবেশ বিভাগে আরও দেখুন)। নীচের নমুনাটি একটি embedded expanded বিজ্ঞাপনের একটি মৌলিক বাস্তবায়ন দেখায়:

// Create the BreakClip.
let clipEmbeddedExpanded =
    new cast.framework.messages.BreakClip('bc_embedded_expanded');
clipEmbeddedExpanded.title = 'The Ad Title to be displayed during playback';
clipEmbeddedExpanded.duration = 15;

// Create the Break using the BreakClip id above.
let breakPrerollEmbeddedExpanded = new cast.framework.messages.Break(
    'break_preroll_embedded_expanded', ['bc_embedded_expanded'], 0);
breakPrerollEmbeddedExpanded.isEmbedded = true;
breakPrerollEmbeddedExpanded.expanded = true;

প্লেয়ার টাইমলাইন প্রকার

প্লেয়ার ইন্সট্যান্স তৈরি করার সময়, ওয়েব রিসিভার SDK কন্টেন্ট প্লেব্যাকের সময় বিজ্ঞাপনগুলিকে সমর্থন করার জন্য একটি টাইমলাইন টাইপ নির্বাচন করে। প্রতিটি টাইমলাইন নির্দিষ্ট বিজ্ঞাপন বিরতির ধরন যোগ করতে সক্ষম করে। LoadRequestData এর MediaInformation এ লোডের সময় উপস্থিত বিজ্ঞাপনের ধরন দ্বারা টাইমলাইনের ধরন নির্ধারণ করা হয়। এম্বেড করা বিজ্ঞাপন বিরতি থাকলে, embedded টাইমলাইন নির্বাচন করা হয়। ক্লায়েন্ট-সেলাই করা বিজ্ঞাপন বিরতি উপস্থিত থাকলে, stitched টাইমলাইন নির্বাচন করা হয়। কোনো বিজ্ঞাপন উপস্থিত না থাকলে, embedded টাইমলাইন ব্যবহার করার জন্য SDK ডিফল্ট। একবার টাইমলাইন নির্বাচন করা হলে, এটি বর্তমান মিডিয়া আইটেমের জন্য পরিবর্তন করা যাবে না। নীচের সারণী প্রতিটি টাইমলাইনের একটি বিশদ বিবরণ প্রদান করে।

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

নীচের চিত্র 1 থেকে 3 বৈচিত্র্যময় বিজ্ঞাপনের ধরন এবং তাদের নিজ নিজ টাইমলাইন মান সহ কিছু বিষয়বস্তু চিত্রিত করে৷ বিষয়বস্তু দুটি বিরতি ক্লিপ ধারণকারী একটি প্রি-রোল বিরতি এবং একটি একক বিরতি ক্লিপ ধারণকারী মিড-রোল এবং পোস্ট-রোল বিরতি সহ কনফিগার করা হয়েছে। কন্টেন্ট প্লেব্যাক শুরু হওয়ার পর থেকে প্রাচীর ঘড়ির সময় , প্রধান বিষয়বস্তুর মিডিয়া সময় এবং বর্তমানে বিরতির ক্লিপ চালানোর সময় প্রতিটি চিত্রের নীচে সারিবদ্ধ করা হয়েছে।

ক্লায়েন্ট-সেলাই করা বিজ্ঞাপনের টাইমলাইন
চিত্র 1: টাইমলাইন কিছু বিষয়বস্তুর প্রতিনিধিত্ব করে এবং এর 3টি ক্লায়েন্ট-সেলাই করা বিজ্ঞাপন বিরতি।


সার্ভার-সেলাই এমবেডেড বিজ্ঞাপনের সময়রেখা
চিত্র 2: টাইমলাইন কিছু বিষয়বস্তুর প্রতিনিধিত্ব করে এবং এর 3টি সার্ভার-সেলাই এমবেড করা বিজ্ঞাপন বিরতি।


সার্ভার-সেলাই এমবেডেড প্রসারিত বিজ্ঞাপনের সময়রেখা
চিত্র 3: টাইমলাইন কিছু বিষয়বস্তুর প্রতিনিধিত্ব করে এবং এর 3টি সার্ভার-সেলাই এমবেডেড প্রসারিত বিজ্ঞাপন বিরতি।

ব্রেক পজিশনিং

ওয়েব রিসিভার SDK ডেভেলপারদের Break position বৈশিষ্ট্য সেট করে বিজ্ঞাপন বিরতিগুলি কোথায় রাখা উচিত তা নির্দিষ্ট করতে দেয়৷ এই মানটি প্রধান বিষয়বস্তুর মিডিয়া সময়ের সাথে মিলে যায় এবং pre-roll , mid-roll এবং post-roll বিজ্ঞাপন বিরতি তৈরি করতে ব্যবহার করা যেতে পারে। এগুলি নিম্নরূপ সংজ্ঞায়িত করা হয়েছে:

ব্রেক পজিশন বর্ণনা
প্রাক রোল একটি বিজ্ঞাপন বিরতি যা মূল বিষয়বস্তুর আগে চালানো হয়। breakPosition 0 এ সেট করে এটি চিহ্নিত করা হয়
মধ্য রোল একটি বিজ্ঞাপন বিরতি যা মধ্যবর্তী বিষয়বস্তু চালানো হয়। breakPosition এমন একটি সময়ে সেট করার মাধ্যমে বোঝানো হয় যেখানে ব্রেক শুরু প্রধান বিষয়বস্তুর শুরুর চেয়ে বেশি এবং বিরতির শেষ সময় প্রধান বিষয়বস্তুর শেষ সময়ের চেয়ে কম।
পোস্ট রোল একটি বিজ্ঞাপন বিরতি যা মূল বিষয়বস্তুর পরে চালানো হয়। সেলাই করা টাইমলাইনের জন্য breakPosition -1 -এ সেট করে এটি চিহ্নিত করা হয়। এমবেডেড টাইমলাইনের জন্য breakPosition বিরতির সময়কাল দ্বারা বিয়োগ করে প্রধান বিষয়বস্তুর সময়কালের জন্য সেট করা উচিত। লাইভ সামগ্রীর জন্য সমর্থিত নয়।

ইন্টারঅপারেবিলিটি ম্যাট্রিক্স

একটি দ্রুত রেফারেন্স পয়েন্ট হিসাবে, সারণী 1 বিজ্ঞাপনের ধরনগুলির একটি ওভারভিউ এবং বিজ্ঞাপন সম্পর্কিত বৈশিষ্ট্যগুলির সাথে তাদের সামঞ্জস্য দেখায়৷

সারণি 1: বিজ্ঞাপন আন্তঃকার্যযোগ্যতা ম্যাট্রিক্স
বৈশিষ্ট্য সমর্থন ম্যানুয়াল ক্লায়েন্ট-সেলাই বিজ্ঞাপন VAST VMAP এম্বেড করা বিজ্ঞাপন এমবেডেড প্রসারিত বিজ্ঞাপন
সাথে সামঞ্জস্যপূর্ণ VAST ম্যানুয়াল ক্লায়েন্ট-সেলাই করা N/A এমবেডেড প্রসারিত এমবেড করা
সময়রেখা সেলাই করা সেলাই করা সেলাই করা এমবেড করা এমবেড করা
বিজ্ঞাপন সন্নিবেশ স্থির স্থির স্থির স্থির স্থির, গতিশীল
বিজ্ঞাপন অপসারণ
প্রি-রোল বিজ্ঞাপন
মিড রোল বিজ্ঞাপন
পোস্ট রোল বিজ্ঞাপন
বিজ্ঞাপন এড়িয়ে যান
বিরতি খোঁজা ইন্টারসেপ্টর
ব্রেক ক্লিপ লোড ইন্টারসেপ্টর

ঘটনা

যখন কী ব্রেক ইভেন্টগুলি ঘটে, কাস্ট SDK BreaksEvent টাইপের ইভেন্টগুলি প্রেরণ করবে। PlayerManager addEventListener API ব্যবহার করে একটি রিসিভার অ্যাপ তাদের সদস্যতা নিতে পারে।

এই ইভেন্টগুলি বিশ্লেষণ এবং বিজ্ঞাপন প্লেব্যাক ট্র্যাকিংয়ের জন্য ব্যবহার করা যেতে পারে। যখন VMAP (ভিডিও মাল্টিপল অ্যাড প্লেলিস্ট) এবং VAST (ভিডিও অ্যাড সার্ভিং টেমপ্লেট) বিজ্ঞাপনগুলি ব্যবহার করা হয়, তখন প্রতিক্রিয়াগুলিতে প্রদত্ত যে কোনও স্ট্যান্ডার্ড ট্র্যাকিং ইভেন্ট স্বয়ংক্রিয়ভাবে SDK দ্বারা প্রেরণ করা হয়।

ইভেন্টের ধরনগুলিকে সারণী 2- এ তালিকাভুক্ত করা হয়েছে যখন সেগুলিকে বরখাস্ত করা হয় তার বিশদ বিবরণ সহ।

ব্রেক ইভেন্ট জীবনচক্র
চিত্র 4 : বিরতি ঘটনা জীবনচক্র.
সারণী 2: ব্রেক ইভেন্ট এবং তাদের বিবরণ.
ব্রেক ইভেন্ট বর্ণনা
BREAK_STARTED মূল বিষয়বস্তুর বর্তমান মিডিয়া সময় একটি অপরিবর্তিত বিরতির position সমান হলে বহিস্কার করা হয়।
BREAK_CLIP_LOADING একটি সেলাই করা টাইমলাইন বিরতি ক্লিপ লোড হওয়া শুরু হলেই ফায়ার করা হয়৷
BREAK_CLIP_STARTED একটি বিরতি ক্লিপ প্লেব্যাক শুরু হলে বহিস্কার করা হয়।
BREAK_CLIP_ENDED একটি বিরতি ক্লিপ শেষ হলে গুলি করা হয়. endedReason নিম্নলিখিত পরিস্থিতিতে পূরণ করা হবে:
  • একটি সেলাই করা টাইমলাইন বিরতি ক্লিপ সম্পূর্ণরূপে বাজানো হয়েছে।
  • একটি সেলাই করা টাইমলাইন ব্রেক ক্লিপ অন্য ব্রেক ক্লিপে রূপান্তরিত হয়।
  • কোনো বিরতি ক্লিপ এড়িয়ে যাওয়া হয়.
  • শেষ বিরতি ক্লিপটি সম্পূর্ণরূপে একটি পোস্ট-রোল এমবেডেড বিরতিতে বাজানো হয়েছে।
  • একটি ত্রুটি ঘটেছে.
BREAK_ENDED একটি বিরতিতে শেষ বিরতি ক্লিপ শেষ হলে বহিস্কার করা হয়.

বিজ্ঞাপন সন্নিবেশ

কাস্ট SDK অ্যাপ্লিকেশনগুলিকে একটি কাস্ট সেশনের বিভিন্ন মুহুর্তে বিজ্ঞাপনগুলি সন্নিবেশ করতে এবং সরাতে সক্ষম করে৷ দুই ধরনের বিজ্ঞাপন সন্নিবেশ হল স্ট্যাটিক এবং ডাইনামিকস্ট্যাটিক বিজ্ঞাপন সন্নিবেশের জন্য প্লেয়ার তৈরির আগে LoadRequestData এ বিজ্ঞাপন উল্লেখ করা প্রয়োজন। ডায়নামিক বিজ্ঞাপন সন্নিবেশ ইতিমধ্যে লোড করা সামগ্রীতে বিরতি সন্নিবেশ করতে BreakManager addBreak API ব্যবহার করে। প্রতিটি ধরনের সন্নিবেশ পদ্ধতি নির্দিষ্ট বিজ্ঞাপন প্রকারের সাথে সামঞ্জস্যপূর্ণ। ইন্টারঅপারেবিলিটি ম্যাট্রিক্সে একটি সামঞ্জস্য ওভারভিউ প্রদান করা হয়েছে।

স্ট্যাটিক বিজ্ঞাপন সন্নিবেশ

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

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {

  // Create the BreakClip.
  let clipClient = new cast.framework.messages.BreakClip('bc_client');
  clipClient.title = 'The Ad Title to be displayed during playback';
  clipClient.contentId = 'https://example.com/ad.mp4';
  clipClient.contentType = 'video/mp4';

  // Create the Break using the BreakClip id above.
  let breakPostrollClient = new cast.framework.messages.Break(
      'break_postroll_client', ['bc_client'], -1);

  // Set the ad information in the load request data.
  let media = loadRequestData.media;
  media.breakClips = [clipClient];
  media.breaks = [breakPostrollClient];

  return loadRequestData;
});

গতিশীল বিজ্ঞাপন সন্নিবেশ

ডায়নামিক বিজ্ঞাপন সন্নিবেশ কন্টেন্ট প্লেব্যাকের সময় একটি বিজ্ঞাপন বিরতি সেট করে চিহ্নিত করা হয়। এটি BreakManager এর একটি উদাহরণ পেয়ে এবং addBreak API-কে কল করে করা হয়। এটির জন্য ন্যূনতম দুটি প্যারামিটার লাগে, একটি এমবেডেড প্রসারিত Break এবং একটি অ্যারে BreakClip । একটি ঐচ্ছিক তৃতীয় বৈশিষ্ট্য অন্তর্ভুক্ত করা হয় যখন true সেট করা হয় তখন একটি MediaStatus সম্প্রচারের মাধ্যমে সংযুক্ত প্রেরকদের পরিবর্তনগুলি পাঠাতে বাধ্য করা হয়৷ বিরতি এবং বিরতি ক্লিপ যোগ করার সময়, সংশ্লিষ্ট আইডি অনন্য হতে হবে। প্লেয়ার তৈরি হয়ে গেলেই এই বিজ্ঞাপনগুলি যোগ করা যাবে। প্লেয়ার তৈরি হয়ে গেলে ওয়েব রিসিভার SDK PLAYER_LOADING ইভেন্টটি ফায়ার করে। একটি ইভেন্ট হ্যান্ডলারে ব্যবহার দেখানোর নীচের নমুনাটি দেখুন যা একটি স্ট্রিমের ID3 মেটাডেটাতে পরিবর্তনের প্রতিক্রিয়া জানায় এবং টাইমলাইনে ঢোকানোর জন্য Break এবং BreakClip অবজেক্ট তৈরি করে।

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

playerManager.addEventListener(cast.framework.events.EventType.ID3, (event) => {

  // Create the BreakClip.
  let clipEmbeddedExpanded = parseBreakClipFromData(event.segmentData);
  let breakEmbeddedExpanded = parseExpandedBreakFromData(event.segmentData);

  // Add the break and break clip.
  breakManager.addBreak(breakEmbeddedExpanded, [clipEmbeddedExpanded]);
});

গতিশীল বিজ্ঞাপন অপসারণ

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

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.removeBreakById('break_midroll_embedded_expanded');

বিরতির আচরণ

প্লেয়ার কখন প্রবেশ করে এবং বিরতি ছেড়ে দেয় তার জন্য SDK একটি ডিফল্ট আচরণ সংজ্ঞায়িত করে এবং BreakManager এ প্রদত্ত কিছু API ব্যবহার করে এটিকে আরও কাস্টমাইজ করার উপায় প্রদান করে।

ডিফল্ট বিরতি আচরণ

যখন নিয়মিত প্লেব্যাকের মাধ্যমে বা একটি Break খোঁজার মাধ্যমে একটি Break প্রবেশ করা হয়, তখন SDK মূল্যায়ন করবে যে ব্যবহারকারী ইতিমধ্যেই এটি দেখেছেন কিনা তা isWatched প্রপার্টি চেক করে৷ তৈরি করা হলে, এই সম্পত্তির জন্য একটি বিরতির ডিফল্ট মান false । সম্পত্তি true হলে, প্রবেশ করার সময় বিরতি চালানো হবে না এবং মূল বিষয়বস্তু বাজানো অব্যাহত থাকবে। সম্পত্তি false হলে, প্রবেশ করার সময় বিরতি খেলা হবে।

অতীত বিরতি খোঁজার সময়, ডিফল্ট বাস্তবায়ন সমস্ত Break আইটেম প্রাপ্ত করে যার position অনুসন্ধান অপারেশনের seekFrom এবং seekTo মানগুলির মধ্যে। বিরতির এই তালিকা থেকে, SDK সেই Break খেলবে যার position seekTo মানের সবচেয়ে কাছাকাছি এবং যার isWatched প্রপার্টি false সেট করা আছে। সেই বিরতির isWatched সম্পত্তি তারপর true সেট করা হবে এবং প্লেয়ার তার বিরতি ক্লিপগুলি চালানো শুরু করবে। বিরতি একবার দেখা হয়ে গেলে, মূল বিষয়বস্তু seekTo অবস্থান থেকে পুনরায় প্লেব্যাক শুরু করবে। যদি এই ধরনের কোনো বিরতি না থাকে, তাহলে কোনো বিরতি চালানো হবে না এবং মূল বিষয়বস্তু seekTo অবস্থানে আবার বাজানো শুরু হবে।

বিরতি প্লেব্যাকের সময়, SDK MediaStatus সংযুক্ত প্রেরক অ্যাপ্লিকেশনগুলিতে যে কোনও প্রাসঙ্গিক আপডেট সম্প্রচার করবে। breakStatus প্রপার্টি পড়ে বিজ্ঞাপনের জন্য তাদের UI আপডেট করতে এই অ্যাপ্লিকেশনগুলি সম্প্রচার ব্যবহার করবে। এই সম্পত্তি শুধুমাত্র বিরতি প্লেব্যাক সময় সংজ্ঞায়িত করা হয়.

রিসিভার অ্যাপ্লিকেশনগুলি PlayerManager getBreakClipCurrentTimeSec কে কল করে দেখানো BreakClip বর্তমান সময়ের সাপেক্ষে প্লেহেডের অবস্থান সম্পর্কিত তথ্য সরাসরি জিজ্ঞাসা করতে পারে। একইভাবে, অ্যাপ্লিকেশনগুলি getBreakClipDurationSec এ কল করে বর্তমান BreakClip এর সময়কাল জিজ্ঞাসা করতে পারে।

কাস্টম বিরতি আচরণ

ব্রেক এবং ব্রেক ক্লিপগুলির জন্য ডিফল্ট আচরণ BreakManager এ প্রদত্ত setBreakClipLoadInterceptor এবং setBreakSeekInterceptor পদ্ধতি ব্যবহার করে সংশোধন করা যেতে পারে।

বিরতি খুঁজছেন ইন্টারসেপ্টর

ব্রেক সিক ইন্টারসেপ্টর অ্যাপটিকে বিজ্ঞাপন বিরতি চাওয়ার আচরণ নিয়ন্ত্রণ করতে দেয়। ফাংশনটি ট্রিগার করা হয় যখন একটি অনুসন্ধান অপারেশনের অনুরোধ করা হয় যা এক বা একাধিক বিরতির জন্য এগিয়ে বা পিছনের দিকে চাওয়া হয়। কল করা হলে, BreakSeekData কলব্যাক ফাংশনে একটি প্যারামিটার হিসাবে পাস করা হয়। BreakSeekData অবজেক্টে Break অবজেক্টের একটি অ্যারে রয়েছে যার position বৈশিষ্ট্য বর্তমান প্লেহেড সময়ের মধ্যে একটি সংখ্যায় সেট করা হয়েছে যা seekFrom হিসাবে সংজ্ঞায়িত করা হয়েছে এবং গন্তব্যের সময় সন্ধান করার সময় seekTo

এই ইন্টারসেপ্টর সংশ্লিষ্ট বিরতিতে Break অবজেক্টগুলিকে পরিবর্তন করার অনুমতি দেয়। প্রয়োগ করা হলে, ব্রেক সিক ইন্টারসেপ্টরকে অবশ্যই নির্দিষ্ট করে দিতে হবে যে কোন বিজ্ঞাপন বিরতিগুলি একটি ঐচ্ছিকভাবে পরিবর্তিত BreakSeekData অবজেক্ট ফিরিয়ে দিয়ে খেলতে হবে। খেলোয়াড় রিটার্ন মানের অন্তর্ভুক্ত সমস্ত বিরতি খেলতে এগিয়ে যাবে। যদি ব্রেক সিক ইন্টারসেপ্টর থেকে null বা কিছুই ফেরত না দেওয়া হয়, তাহলে বিরতি বাদ দেওয়া হয়।

ইন্টারসেপ্টরের একটি সাধারণ বাস্তবায়নের জন্য নীচের নমুনাটি দেখুন যা ইতিমধ্যে দেখা বিরতিগুলি বাদ দিয়ে চাওয়া সমস্ত বিজ্ঞাপন বিরতি দেখার জন্য ডিফল্ট আচরণকে ওভাররাইড করে৷

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakSeekInterceptor((breakSeekData) => {

  // Filter the breaks array by removing watched breaks.
  const unwatchedBreaks =
      breakSeekData.breaks.filter(adBreak => !adBreak.isWatched);
  breakSeekData.breaks = unwatchedBreaks;

  return breakSeekData;
});

ব্রেক ক্লিপ লোড ইন্টারসেপ্টর

ব্রেক ক্লিপ লোড ইন্টারসেপ্টর ব্যবহার করে, একটি BreakClip অবজেক্ট প্লেব্যাক শুরু হওয়ার আগে পরিবর্তন করা যেতে পারে।

ব্রেক ক্লিপ লোড ইন্টারসেপ্টরটি শুধুমাত্র সেলাই করা টাইমলাইন বিরতির জন্য বলা হয় এবং setBreakClipLoadInterceptor ব্যবহার করে সেট করা যেতে পারে। একটি Break প্রবেশ করার আগে, সেই বিরতিতে সংজ্ঞায়িত প্রতিটি পৃথক BreakClip জন্য এই ইন্টারসেপ্টরটিকে একবার কল করা হয়। SDK মূল BreakClip অবজেক্টটিকে কলব্যাক ফাংশনের প্যারামিটার হিসাবে পাস করে। অ্যাপ্লিকেশনটি তারপর এই BreakClip সংশোধন করতে পারে এবং এটি ফেরত দিতে পারে যাতে SDK আপডেট করা কনফিগারেশনের সাথে ব্রেক ক্লিপটি আনতে এবং প্রদর্শন করতে পারে। যদি null বা কিছুই ফেরত না দেওয়া হয়, বিরতি ক্লিপটি এড়িয়ে যায়।

একটি উদাহরণের জন্য নীচে দেখুন যা একটি ইউটিলিটি ফাংশন কল getUrlFromClipId সহ ব্রেক ক্লিপগুলির contentUrl পরিবর্তন করে যেখানে BreakClip id একটি URL এ ম্যাপ করা হয়৷

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakClipLoadInterceptor(
    (breakClip, breakClipLoadInterceptorContext) => {

  // Obtains the URL of a break clip id from a function call.
  breakClip.contentUrl = getUrlFromClipId(breakClip.id);

  return breakClip;
});

বিজ্ঞাপন এড়িয়ে যাওয়া

ওয়েব রিসিভার SDK একটি বিজ্ঞাপন বিরতির মধ্যে বিজ্ঞাপন বিরতি এবং পৃথক বিরতি ক্লিপগুলি এড়ানোর জন্য API প্রদান করে। SDK ব্যবহারকারীদের তাদের প্রেরক অ্যাপ্লিকেশন বা স্মার্ট ডিসপ্লে ডিভাইসের সাথে ইন্টারঅ্যাক্ট করার মাধ্যমে ঐচ্ছিকভাবে ব্রেক ক্লিপগুলি এড়িয়ে যাওয়ার অনুমতি দেয়।

ব্যবহারকারী এড়িয়ে যাওয়ার যোগ্য বিরতি ক্লিপ

বিরতি ক্লিপগুলিকে এড়িয়ে যাওয়ার যোগ্য হিসাবে সেট করা ব্যবহারকারীদের সংযুক্ত প্রেরক অ্যাপ্লিকেশন এবং স্মার্ট ডিসপ্লে ডিভাইসগুলির সাথে ইন্টারঅ্যাক্ট করতে দেয় যাতে বর্তমানে চলমান বিরতি ক্লিপের বাকি অংশগুলি এড়িয়ে যেতে পারে৷ সেকেন্ডের একটি নন-নেতিবাচক সংখ্যায় whenSkippable প্রপার্টি সেট করা BreakClip অবজেক্টের জন্য এই বৈশিষ্ট্যটিকে সক্রিয় করবে। প্লেয়ার সেই সংখ্যক সেকেন্ডের জন্য বিরতি ক্লিপ প্লে হয়ে গেলে বিরতি ক্লিপটিকে এড়িয়ে যাওয়ার যোগ্য বলে বিবেচনা করবে। এই মানটি 0 তে সেট করা ব্যবহারকারীদের অবিলম্বে বিরতি ক্লিপটি এড়িয়ে যেতে দেয়।

// Create the BreakClip.
let clip = new cast.framework.messages.BreakClip('bc');
clip.title = 'The Ad Title to be displayed during playback';
clip.whenSkippable = 10; // Users can skip the clip after 10 seconds of playback.

এই তথ্য প্রেরকের আসল লোড অনুরোধে বা রিসিভার অ্যাপে সেট করা যেতে পারে। এড়িয়ে গেলে, একটি সেলাই করা টাইমলাইন বিজ্ঞাপন বিরতিতে একটি বিরতি ক্লিপ বর্তমান বিরতি ক্লিপ চালানো বন্ধ করে দেবে। প্লেয়ার উপস্থিত থাকলে পরবর্তী বিরতি ক্লিপ লোড করবে বা মূল বিষয়বস্তু লোড করবে। এড়িয়ে গেলে, একটি এমবেডেড টাইমলাইন বিজ্ঞাপন বিরতিতে একটি বিরতি ক্লিপ বিরতি ক্লিপের শেষের দিকে তাকাবে এবং সেই সময়ে স্ট্রিমের প্লেব্যাক চালিয়ে যাবে৷

প্রোগ্রামগতভাবে বিজ্ঞাপন এড়িয়ে যাওয়া

কোনো ব্যবহারকারীর মিথস্ক্রিয়া ছাড়াই বিজ্ঞাপনগুলি স্বয়ংক্রিয়ভাবে এড়িয়ে যেতে পারে।

খেলা থেকে একটি সম্পূর্ণ বিরতি এড়ানোর জন্য, একটি অ্যাপ্লিকেশনকে একটি Break isWatched বৈশিষ্ট্য true সেট করা উচিত। এটি লোড সিকোয়েন্স বা কন্টেন্ট প্লেব্যাকের সময় যে কোনো সময় করা যেতে পারে। যখন একটি বিরতির position মূল বিষয়বস্তুর বর্তমান সময়ে পূরণ করা হয় তখন প্লেয়ার দ্বারা isWatched সম্পত্তি মূল্যায়ন করা হয়। সেই সময়ে, প্লেয়ার নির্ধারণ করবে একটি বিরতি প্রবেশ করা উচিত কিনা। নীচের নমুনাটি দেখুন যা সমস্ত বিরতির মধ্য দিয়ে লুপ করে এবং প্লেয়ার লোড হওয়ার সময় মান পরিবর্তন করে।

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

playerManager.addEventListener(cast.framework.events.EventType.PLAYER_LOADING,
    (event) => {

  // Obtain the breaks and iterate through each item to skip all ad breaks.
  let breaks = breakManager.getBreaks();
  breaks.forEach((brk) => {
    brk.isWatched = true;
  });
});

প্রোগ্রামগতভাবে একটি নির্দিষ্ট বিরতি ক্লিপ এড়িয়ে যেতে, বিরতি ক্লিপ লোড ইন্টারসেপ্টর ব্যবহার করা উচিত। কলব্যাক ফাংশনে null প্রত্যাবর্তন বা একটি মান ফেরত না দিলে, সেই বিরতির ক্লিপটি এড়িয়ে যাবে৷

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakClipLoadInterceptor(
      (breakClip, breakClipLoadInterceptorContext) => {
  return null;
});