विज्ञापन के लिए ब्रेक

खास जानकारी

वेब रिसीवर के SDK टूल में, किसी खास मीडिया स्ट्रीम में विज्ञापन के लिए ब्रेक और साथ-साथ चलने वाले विज्ञापन इस्तेमाल करने की सुविधा मिलती है. यह विज्ञापन के क्रम, विज्ञापन स्रोत, और विज्ञापन के लिए ब्रेक के व्यवहार और उनसे जुड़ी ब्रेक क्लिप को सेट करने के लिए एपीआई उपलब्ध कराता है. इस गाइड में, Break वीडियो चलाने के उस इंटरवल का मतलब है जिसमें एक या उससे ज़्यादा विज्ञापन या बंपर हैं. हर विज्ञापन या बंपर को BreakClip कहा गया है. ये ब्रेक, लोड या चल रहे मीडिया से जुड़े होते हैं.

विज्ञापन के टाइप

वेब रिसीवर SDK टूल, क्लाइंट साइड ऐड इंसर्शन (सीएसएआई) और सर्वर स्टिच्ड ऐड इंसर्शन (एसएसएआई) के साथ काम करता है. क्लाइंट-स्टिच किए गए विज्ञापनों को ऐप्लिकेशन की मदद से, मैन्युअल तरीके से सेट किया जा सकता है या VAST और VMAP टेंप्लेट फ़ाइलों से लिया जा सकता है. एम्बेड किए गए विज्ञापनों के रूप में कॉन्टेंट लोड होने से पहले, सर्वर से जोड़े गए विज्ञापनों को मैन्युअल तरीके से दिखाया जाना चाहिए. इसके अलावा, वीडियो चलाने के दौरान भी उन्हें एम्बेड किए गए विज्ञापनों के तौर पर डाइनैमिक तरीके से दिखाया जाना चाहिए. इनमें से हर तरह के विज्ञापन को लागू करने के बारे में नीचे ज़्यादा जानकारी दी गई है.

मैन्युअल क्लाइंट-स्टिच्ड

मैन्युअल क्लाइंट-स्टिच्ड विज्ञापन ब्रेक एक ऐसा विज्ञापन ब्रेक है जिसे क्लाइंट एक साथ स्टिच करता है. इसे ऐप्लिकेशन, SDK टूल एपीआई का इस्तेमाल करके मैन्युअल तरीके से तय करता है. विज्ञापन का यह प्रकार मुख्य कॉन्टेंट की स्ट्रीम में एम्बेड नहीं किया गया है. BreakClip में contentId यह यूआरएल होना चाहिए, जो विज्ञापन के कॉन्टेंट पर ले जाता हो. साथ ही, contentType विज्ञापन के कॉन्टेंट के फ़ॉर्मैट की जानकारी और title.

Break में isEmbedded और expanded डिफ़ॉल्ट वैल्यू false पर सेट होना चाहिए. 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 (वीडियो विज्ञापन दिखाने वाला टेंप्लेट) विज्ञापन जोड़े जा सकते हैं. दिए जाने पर, एक्सएमएल टेंप्लेट को पार्स किया जाता है, ताकि ब्रेक डालने पर, क्लाइंट के ज़रिए जोड़ी गई ब्रेक क्लिप जनरेट की जा सके.

VAST विज्ञापन बनाने के लिए, रिसीवर ऐप्लिकेशन को एक VastAdsRequest बनाना होगा और उसकी जानकारी BreakClip vastAdsRequest प्रॉपर्टी में देनी होगी. VastAdsRequest ऑब्जेक्ट में, adsResponse (एक्सएमएल टेंप्लेट को स्ट्रिंग में दिखाने वाला स्ट्रिंग) या adTagUrl (वह यूआरएल जहां एक्सएमएल टेंप्लेट होस्ट किया गया है) प्रॉपर्टी तय होनी चाहिए. अगर यूआरएल दिया गया है, तो 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 ऑब्जेक्ट बनाना होगा और उसे LoadRequestData में MediaInformation की 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 में isEmbedded true पर सेट होना चाहिए और expanded false पर सेट होना चाहिए. 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 में isEmbedded true पर सेट होना चाहिए और expanded true पर सेट होना चाहिए. 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 टाइमलाइन चुनी जाती है. अगर कोई विज्ञापन मौजूद नहीं है, तो SDK टूल डिफ़ॉल्ट रूप से embedded टाइमलाइन का इस्तेमाल करता है. टाइमलाइन चुनने के बाद, उसे मौजूदा मीडिया आइटम के लिए नहीं बदला जा सकता. नीचे दी गई टेबल में हर टाइमलाइन के बारे में पूरी जानकारी दी गई है.

टाइमलाइन का टाइप ब्यौरा
एम्बेड की गई टाइमलाइन विज्ञापनों को चलाने में लगने वाले समय को दिखाता है. ये विज्ञापन मुख्य कॉन्टेंट में एम्बेड किए जाते हैं (एम्बेड किए गए और बड़े किए गए विज्ञापन के लिए ब्रेक). जब विज्ञापन के लिए कोई ब्रेक नहीं दिखाया जाता, तो उसकी अवधि को कॉन्टेंट के कुल समय में से घटा दिया जाता है. वहीं दूसरी ओर, विज्ञापन के लिए बड़ा किया गया ब्रेक मौजूद होने पर, उसके समय को मुख्य कॉन्टेंट का हिस्सा माना जाता है.
स्टिच की गई टाइमलाइन ऐसे मीडिया समय को दिखाता है जो बाहरी मीडिया फ़ाइलों से लिए गए विज्ञापनों को सपोर्ट करते हैं (मैन्युअल क्लाइंट-स्टिच, VAST, और VMAP विज्ञापन ब्रेक). जोड़े जाने पर, विज्ञापन के लिए ब्रेक की अवधि मुख्य कॉन्टेंट की अवधि का हिस्सा नहीं होती.

नीचे दिए गए आंकड़े 1 से 3 अलग-अलग तरह के विज्ञापन टाइप और उनकी टाइमलाइन वैल्यू के साथ कुछ कॉन्टेंट के बारे में जानकारी दी गई है. कॉन्टेंट को वीडियो शुरू होने से पहले दिखने वाले ब्रेक के हिसाब से कॉन्फ़िगर किया जाता है. इसमें दो ब्रेक क्लिप और वीडियो के बीच में दिखने वाले और वीडियो खत्म होने के बाद, सिंगल ब्रेक क्लिप वाले ब्रेक होते हैं. वीडियो चलाना शुरू होने के बाद से वॉल क्लॉक का समय, मुख्य कॉन्टेंट के लिए मीडिया टाइम, और ब्रेक के समय चल रहे ब्रेक की क्लिप के समय को हर आंकड़े के नीचे अलाइन किया गया है.

क्लाइंट-स्टिच किए गए विज्ञापनों की टाइमलाइन
पहली इमेज: कुछ कॉन्टेंट और क्लाइंट के जोड़े गए तीन विज्ञापन ब्रेक को दिखाने वाली टाइमलाइन.


सर्वर से एम्बेड किए गए विज्ञापनों की टाइमलाइन
दूसरी इमेज: कुछ कॉन्टेंट और उसके सर्वर से एम्बेड किए गए विज्ञापन के लिए ब्रेक को दिखाने वाली टाइमलाइन.


सर्वर से एम्बेड किए गए बड़े किए गए विज्ञापनों की टाइमलाइन
तीसरी इमेज: कुछ कॉन्टेंट और उसके तीन सर्वर से एम्बेड किए गए बड़े किए गए विज्ञापन ब्रेक को दिखाने वाली टाइमलाइन.

ब्रेक की पोज़िशनिंग

वेब रिसीवर के SDK टूल की मदद से डेवलपर, Break की position प्रॉपर्टी को सेट करके यह तय कर सकते हैं कि विज्ञापन के लिए ब्रेक कहां लगाने चाहिए. यह वैल्यू मुख्य कॉन्टेंट के मीडिया समय से मेल खाती है. इसका इस्तेमाल pre-roll, mid-roll, और post-roll विज्ञापन के लिए ब्रेक बनाने के लिए किया जा सकता है. इनके बारे में नीचे बताया गया है:

ब्रेक की स्थिति ब्यौरा
वीडियो शुरू होने से पहले विज्ञापन मुख्य वीडियो से पहले दिखाया जाने वाला विज्ञापन के लिए ब्रेक. इसे breakPosition को 0 पर सेट करके दिखाया जाता है
वीडियो के बीच में दिखने वाले विज्ञापन वीडियो के बीच में चलने वाला विज्ञापन ब्रेक. इसके लिए, breakPosition को उस समय पर सेट किया जाता है जब ब्रेक की शुरुआत मुख्य कॉन्टेंट के शुरू होने के समय से होती है. साथ ही, ब्रेक के खत्म होने का समय, मुख्य कॉन्टेंट के खत्म होने के समय से कम होता है.
वीडियो खत्म होने के बाद मुख्य वीडियो के बाद दिखाया जाने वाला विज्ञापन के लिए ब्रेक. स्टिच की गई टाइमलाइन के लिए, breakPosition को -1 पर सेट करके इसे दिखाया जाता है. एम्बेड की गई टाइमलाइन के लिए, breakPosition को मुख्य कॉन्टेंट की कुल अवधि पर सेट किया जाना चाहिए, जिसमें ब्रेक की अवधि को घटाकर, घटाया गया हो. लाइव कॉन्टेंट के लिए यह सुविधा उपलब्ध नहीं है.

इंटरोऑपरेबिलिटी मैट्रिक्स

ध्यान दें: टेबल 1 में विज्ञापन के टाइप और विज्ञापन से जुड़ी सुविधाओं के साथ उनकी काम करने की खास जानकारी दी गई है.

टेबल 1: विज्ञापनों के लिए इंटरऑपरेबिलिटी मैट्रिक्स
सुविधा के लिए सहायता मैन्युअल रूप से क्लाइंट का बनाया हुआ विज्ञापन VAST VMAP एम्बेड किया गया विज्ञापन एम्बेड किया गया बड़ा किया गया विज्ञापन
इसके साथ काम करता है VAST मैन्युअल क्लाइंट-स्टिच्ड लागू नहीं एम्बेड किया गया बड़ा किया गया एम्बेड किया गया
समयावधि सिला गया सिला गया सिला गया एम्बेड किया गया एम्बेड किया गया
विज्ञापन इंसर्शन स्थिर स्थिर स्थिर स्थिर स्टैटिक, डाइनैमिक
विज्ञापन हटाना
वीडियो शुरू होने से पहले दिखने वाला विज्ञापन
वीडियो के बीच में दिखने वाला विज्ञापन
वीडियो खत्म होने के बाद दिखने वाला विज्ञापन
विज्ञापन स्किप करना
ब्रेक सीक इंटरसेप्टर
ब्रेक क्लिप लोड इंटरसेप्टर

इवेंट

मुख्य ब्रेक वाले इवेंट होने पर, कास्ट करने के लिए इस्तेमाल किया जाने वाला SDK टूल, BreaksEvent टाइप के इवेंट भेजता है. रिसीवर ऐप्लिकेशन उनकी सदस्यता लेने के लिए, PlayerManager addEventListener एपीआई का इस्तेमाल कर सकता है.

इन इवेंट का इस्तेमाल आंकड़े देखने और विज्ञापन प्लेबैक ट्रैक करने के लिए किया जा सकता है. जब VMAP (एक से ज़्यादा वीडियो विज्ञापन प्लेलिस्ट) और VAST (वीडियो विज्ञापन दिखाने के लिए टेंप्लेट) विज्ञापनों का इस्तेमाल किया जाता है, तो जवाबों में दिए गए सभी स्टैंडर्ड ट्रैकिंग इवेंट को SDK टूल अपने-आप भेज देता है.

इवेंट के टाइप टेबल 2 में दिए गए हैं. साथ ही, उनके ट्रिगर होने के समय की पूरी जानकारी भी दी गई है.

ब्रेक इवेंट की लाइफ़साइकल
चौथी इमेज: ब्रेक इवेंट की लाइफ़साइकल.
टेबल 2: ब्रेक इवेंट और उनके ब्यौरे.
ब्रेक इवेंट ब्यौरा
BREAK_STARTED यह तब ट्रिगर होता है, जब मुख्य कॉन्टेंट के मीडिया का मौजूदा समय, न देखे गए ब्रेक के position के बराबर हो.
BREAK_CLIP_LOADING सिर्फ़ तब सक्रिय होता है, जब स्टिच की गई टाइमलाइन ब्रेक क्लिप लोड होना शुरू होती है.
BREAK_CLIP_STARTED ब्रेक क्लिप प्लेबैक शुरू होने पर सक्रिय होता है.
BREAK_CLIP_ENDED ब्रेक क्लिप खत्म होने पर सक्रिय होता है. endedReason को इन स्थितियों के हिसाब से अपने-आप भरा जाएगा:
  • पूरी तरह से जोड़ी गई टाइमलाइन ब्रेक क्लिप.
  • जोड़ी गई टाइमलाइन ब्रेक क्लिप, किसी दूसरी ब्रेक क्लिप में बदल जाती है.
  • किसी भी ब्रेक क्लिप को स्किप कर दिया जाता है.
  • आखिरी ब्रेक की क्लिप, पूरी तरह पोस्ट-रोल एम्बेड किए गए ब्रेक में चलाई गई.
  • कोई गड़बड़ी हुई.
BREAK_ENDED किसी ब्रेक में मौजूद आखिरी ब्रेक क्लिप खत्म होने पर सक्रिय होता है.

विज्ञापन इंसर्शन

कास्ट SDK टूल की मदद से, ऐप्लिकेशन, कास्ट सेशन के अलग-अलग समय पर विज्ञापन डाल और हटा सकते हैं. स्टैटिक और डाइनैमिक दो तरह के विज्ञापन होते हैं. स्टैटिक विज्ञापन डालने की सुविधा के लिए ज़रूरी है कि प्लेयर बनाने से पहले विज्ञापनों की जानकारी LoadRequestData में दी गई हो. डाइनैमिक विज्ञापन इंसर्शन में पहले से लोड किए गए कॉन्टेंट में ब्रेक डालने के लिए, BreakManager addBreak एपीआई का इस्तेमाल किया जाता है. हर तरह की इंसर्शन का तरीका, कुछ विज्ञापन के टाइप के साथ काम करता है. इंटरऑपरेबिलिटी मैट्रिक्स में, कम्पैटबिलटी से जुड़ी खास जानकारी दी जाती है.

स्टैटिक विज्ञापन इंसर्शन

प्लेयर बनाने से पहले, काम का विज्ञापन मेटाडेटा जोड़कर, स्टैटिक विज्ञापन इंसर्शन की सुविधा जोड़ी जा सकती है. यह जानकारी, 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 एपीआई को कॉल करें. इसमें कम से कम दो पैरामीटर लगते हैं, एक एम्बेड किए गए बड़े किए गए 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 में दिए गए कुछ एपीआई का इस्तेमाल करके, गेम को अपनी पसंद के मुताबिक बनाने का तरीका बताता है.

ब्रेक का डिफ़ॉल्ट व्यवहार

जब सामान्य वीडियो चलाने या Break खोजने पर Break डाला जाता है, तो SDK टूल isWatched प्रॉपर्टी की जांच करके यह आकलन करेगा कि उपयोगकर्ता ने उसे पहले ही देखा है या नहीं. इस प्रॉपर्टी के लिए ब्रेक की डिफ़ॉल्ट वैल्यू false होती है. अगर प्रॉपर्टी true है, तो डालने पर ब्रेक नहीं चलाया जाएगा और मुख्य कॉन्टेंट चलता रहेगा. अगर प्रॉपर्टी false है, तो यूआरएल डालने पर ब्रेक चलेगा.

पिछले ब्रेक पर जाते समय, डिफ़ॉल्ट तौर पर लागू करने के तरीके में वे सभी Break आइटम शामिल होते हैं जिनका position, सीक करने की कार्रवाई के seekFrom और seekTo वैल्यू के बीच होता है. ब्रेक की इस सूची में से, SDK टूल उस Break को चलाएगा जिसका position seekTo वैल्यू के सबसे करीब है और जिसकी isWatched प्रॉपर्टी false पर सेट है. इसके बाद, उस ब्रेक की isWatched प्रॉपर्टी true पर सेट हो जाएगी और प्लेयर ब्रेक क्लिप चलाना शुरू कर देगा. ब्रेक होने के बाद, मुख्य कॉन्टेंट seekTo पोज़िशन से फिर से चलना शुरू हो जाएगा. अगर ऐसा कोई ब्रेक मौजूद नहीं है, तो कोई ब्रेक नहीं चलाया जाएगा और मुख्य कॉन्टेंट seekTo पोज़िशन पर फिर से चलना शुरू हो जाएगा.

ब्रेक प्लेबैक के दौरान, SDK टूल MediaStatus में कनेक्ट किए गए भेजने वाले ऐप्लिकेशन के सभी ज़रूरी अपडेट ब्रॉडकास्ट करेगा. ये ऐप्लिकेशन, ब्रॉडकास्ट का इस्तेमाल करके, breakStatus प्रॉपर्टी को पढ़कर, विज्ञापनों के लिए अपने यूज़र इंटरफ़ेस (यूआई) को अपडेट करेंगे. यह प्रॉपर्टी सिर्फ़ ब्रेक प्लेबैक के दौरान तय की जाती है.

पाने वाले के ऐप्लिकेशन, सीधे 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 या कुछ भी नहीं दिखता, तो ब्रेक क्लिप को छोड़ दिया जाता है.

नीचे एक उदाहरण दिया गया है, जिसमें ब्रेक क्लिप के contentUrl में, यूटिलिटी फ़ंक्शन कॉल getUrlFromClipId की मदद से बदलाव किया जाता है. यहां BreakClip के id को किसी यूआरएल से मैप किया जाता है.

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 टूल, विज्ञापन ब्रेक के दौरान विज्ञापन के लिए ब्रेक और अलग-अलग ब्रेक के लिए इस्तेमाल की जाने वाली क्लिप को स्किप करने के लिए एपीआई उपलब्ध कराता है. इस 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.

इस जानकारी को भेजने वाले के मूल लोड अनुरोध में या पाने वाले के ऐप्लिकेशन में सेट किया जा सकता है. इसे स्किप करने पर, स्टिच की गई टाइमलाइन वाले विज्ञापन ब्रेक में ब्रेक क्लिप, मौजूदा ब्रेक क्लिप को चलाना बंद कर देगी. अगर मुख्य कॉन्टेंट मौजूद है, तो प्लेयर अगली ब्रेक क्लिप लोड करेगा या लोड करेगा. स्किप किए जाने पर, एम्बेड की गई टाइमलाइन विज्ञापन ब्रेक में ब्रेक क्लिप, ब्रेक क्लिप के आखिर में पहुंचती है और उस समय स्ट्रीम चलाना जारी रखती है.

प्रोग्राम की मदद से विज्ञापनों को स्किप करना

उपयोगकर्ता के इंटरैक्शन के बिना भी विज्ञापनों को अपने-आप स्किप किया जा सकता है.

किसी पूरी तरह ब्रेक को चलने से रोकने के लिए, ऐप्लिकेशन को isWatched Break की प्रॉपर्टी को 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;
});