क्लाइंट को पॉड सर्विंग रीडायरेक्ट के लिए तैयार करना

इस गाइड में, Pod serving API और मेनिफ़ेस्ट मैनिपुलेटर की मदद से, HLS या DASH लाइवस्ट्रीम लोड करने के लिए क्लाइंट ऐप्लिकेशन डेवलप करने के बारे में बताया गया है.

ज़रूरी शर्तें

जारी रखने से पहले, आपके पास ये चीज़ें होनी चाहिए:

  • Pod serving redirect DAI टाइप के साथ कॉन्फ़िगर किए गए लाइव स्ट्रीम इवेंट के लिए, कस्टम ऐसेट की. यह कुंजी पाने के लिए, यह तरीका अपनाएं:

  • यह पता लगाएं कि इंटरैक्टिव मीडिया विज्ञापन (आईएमए) SDK टूल, आपके प्लैटफ़ॉर्म के लिए उपलब्ध है या नहीं. हमारा सुझाव है कि रेवेन्यू बढ़ाने के लिए, IMA SDK का इस्तेमाल करें. ज़्यादा जानकारी के लिए, DAI के लिए IMA SDK सेट अप करना लेख पढ़ें.

स्ट्रीम करने का अनुरोध करना

जब आपका उपयोगकर्ता कोई स्ट्रीम चुनता है, तो यह तरीका अपनाएं:

  1. लाइव स्ट्रीम करने की सेवा के तरीके के लिए, POST अनुरोध करें. ज़्यादा जानकारी के लिए, तरीका: स्ट्रीम देखें.

  2. विज्ञापन टारगेटिंग पैरामीटर को application/x-www-form-urlencoded या application/json फ़ॉर्मैट में पास करें. इस अनुरोध से, स्ट्रीम सेशन को Google DAI के साथ रजिस्टर किया जाता है.

    यहां दिए गए उदाहरण में, स्ट्रीम करने का अनुरोध किया गया है:

    फ़ॉर्म एन्कोडिंग

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const params = new URLSearchParams({
            cust_params: 'section=sports&page=golf,tennis'
    }).toString();
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
            },
            body: params
    });
    
    console.log(await response.json());
    

    JSON एन्कोडिंग

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json'
            },
            body: JSON.stringify({
              cust_params: {
                section: 'sports',
                page: 'golf,tennis'
              }
            })
    });
    
    console.log(await response.json());
    

    अगर यह प्रोसेस पूरी हो जाती है, तो आपको कुछ ऐसा आउटपुट दिखेगा:

    {
    "stream_id": "c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS",
    "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata",
    "session_update_url": "https://dai.google.com/linear/.../session",
    "polling_frequency": 10
    }
    
  3. JSON रिस्पॉन्स में, स्ट्रीम सेशन आईडी ढूंढें और अगले चरणों के लिए अन्य डेटा सेव करें.

पोल वाले विज्ञापन का मेटाडेटा

विज्ञापन के मेटाडेटा को पोल करने के लिए, यह तरीका अपनाएं:

  1. स्ट्रीम रजिस्ट्रेशन के जवाब से metadata_url वैल्यू पढ़ें.

  2. metadata_url एंडपॉइंट पर शुरुआती GET अनुरोध करें.

    • delta_token क्वेरी पैरामीटर को शामिल न करें. इस प्रोसेस से सर्वर, स्ट्रीम के डिजिटल वीडियो रिकॉर्डर (डीवीआर) विंडो के लिए पूरा मेटाडेटा वापस भेज पाता है. डीवीआर विंडो में, ब्रॉडकास्ट की वह समयावधि होती है जिसके दौरान दर्शक, ब्रॉडकास्ट को रिवाइंड करके चला सकते हैं. जवाब में next_delta_token फ़ील्ड शामिल है.
  3. बैंडविथ को ऑप्टिमाइज़ करने के लिए, सबसे हाल ही के रिस्पॉन्स से next_delta_token वैल्यू सेव करें.

  4. अगले अनुरोध में, उस वैल्यू को delta_token क्वेरी पैरामीटर के तौर पर भेजें. सर्वर सिर्फ़ उस मेटाडेटा को दिखाता है जो टोकन जनरेट होने के बाद बदला गया है. आपको जो नया टोकन मिला है उसे हमेशा भेजें. टोकन को पार्स करने, उसमें बदलाव करने या उसे बनाने की कोशिश न करें. ज़्यादा जानकारी के लिए, तरीका: मेटाडेटा देखें.

    यहां दिए गए उदाहरण में, विज्ञापन का मेटाडेटा फ़ेच करने का तरीका बताया गया है:

    // Initial request (returns full metadata and next_delta_token)
    let response = await fetch(metadata_url);
    let metadata = await response.json();
    let deltaToken = metadata.next_delta_token;
    
    // Subsequent request (returns only changes since deltaToken)
    if (deltaToken) {
      const url = new URL(metadata_url);
      url.searchParams.append('delta_token', deltaToken);
      response = await fetch(url.toString());
      const deltaMetadata = await response.json();
      // Merge deltaMetadata into your local cache
      mergeMetadata(metadata, deltaMetadata);
      deltaToken = deltaMetadata.next_delta_token;
    }
    

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

    {
      "next_delta_token": "eyJyYW5nZXMiOlt7InMiOjEsImUiOjN9XX0",
      "obsolete_ad_break_ids": ["0003069407"],
      "tags":{
        "google_1022389921":{
          "ad":"0003069408_ad1",
          "ad_break_id":"0003069408",
          "type":"start"
        },
        ...
      },
      "ads":{
        "0003069408_ad1":{
          "ad_break_id":"0003069408",
          "position":1,
          "duration":10.01,
          "title":"External - Pod Midroll 1",
          "clickthrough_url":"https://.../",
          ...
        },
        ...
      },
      "ad_breaks":{
        "0003069408":{
          "type":"mid",
          "duration":30,
          "ads":3
        },
        ...
      }
    }
    
  5. tags ऑब्जेक्ट को सेव करें और अपडेट को अपनी लोकल कैश मेमोरी में मर्ज करें. अगर obsolete_ad_break_ids पैरामीटर मौजूद है, तो विज्ञापन के लिए ब्रेक और उनसे जुड़े विज्ञापनों और टैग को अपनी कैश मेमोरी से हटाएं.

  6. मेटाडेटा के लिए नियमित तौर पर अनुरोध करने के लिए, polling_frequency वैल्यू का इस्तेमाल करके टाइमर सेट करें. हर पोल में, मेटाडेटा के सबसे नए जवाब में मिली next_delta_token वैल्यू को delta_token क्वेरी पैरामीटर के तौर पर भेजें.

स्ट्रीम को अपने वीडियो प्लेयर में लोड करना

रजिस्ट्रेशन के जवाब से सेशन आईडी मिलने के बाद, इसे अपने मेनिफ़ेस्ट मैनिपुलेटर को पास करें. इसके अलावा, वीडियो प्लेयर में स्ट्रीम लोड करने के लिए, मेनिफ़ेस्ट यूआरएल बनाया जा सकता है.

सेशन आईडी पास करने के लिए, मेनिफ़ेस्ट मैनिपुलेटर का दस्तावेज़ देखें. अगर आपको मेनिफ़ेस्ट मैनिपुलेटर डेवलप करना है, तो लाइव स्ट्रीम के लिए मेनिफ़ेस्ट मैनिपुलेटर देखें.

यहां दिए गए उदाहरण में, मेनिफ़ेस्ट यूआरएल को असेंबल करने का तरीका बताया गया है:

https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"

जब आपका प्लेयर तैयार हो जाए, तब वीडियो चलाना शुरू करें.

विज्ञापन इवेंट को मॉनिटर करने की अनुमति

टाइम किए गए मेटाडेटा के लिए, अपनी स्ट्रीम के कंटेनर फ़ॉर्मैट की जांच करें:

  • ट्रांसपोर्ट स्ट्रीम (टीएस) कंटेनर वाली एचएलएस स्ट्रीम, टाइमस्टैंप किए गए आईडी3 टैग का इस्तेमाल करती हैं. इससे टाइमस्टैंप किया गया मेटाडेटा ट्रांसफ़र किया जाता है. ज़्यादा जानकारी के लिए, एचटीटीपी लाइव स्ट्रीमिंग (एचएलएस) के साथ काम करने वाले कॉमन मीडिया ऐप्लिकेशन फ़ॉर्मैट के बारे में जानकारी लेख पढ़ें.

  • DASH स्ट्रीम, मेनिफ़ेस्ट में इवेंट तय करने के लिए EventStream एलिमेंट का इस्तेमाल करती हैं.

  • जब सेगमेंट में पेलोड डेटा के लिए इवेंट मैसेज (emsg) बॉक्स शामिल होते हैं, तब DASH स्ट्रीम InbandEventStream एलिमेंट का इस्तेमाल करती हैं. इनमें ID3 टैग भी शामिल होते हैं. ज़्यादा जानकारी के लिए, InbandEventStream देखें.

  • सीएमएएफ़ स्ट्रीम, जैसे कि DASH और HLS, में emsg बॉक्स का इस्तेमाल किया जाता है. इनमें आईडी3 टैग होते हैं.

अपनी स्ट्रीम से आईडी3 टैग वापस पाने के लिए, अपने वीडियो प्लेयर की गाइड देखें. ज़्यादा जानकारी के लिए, समय के हिसाब से मेटाडेटा मैनेज करने से जुड़ी गाइड पढ़ें

आईडी3 टैग से विज्ञापन का इवेंट आईडी वापस पाने के लिए, यह तरीका अपनाएं:

  1. urn:google:dai:2018 या https://aomedia.org/emsg/ID3 के साथ scheme_id_uri के हिसाब से इवेंट फ़िल्टर करें.
  2. message_data फ़ील्ड से बाइट ऐरे निकालें.

    यहां दिए गए उदाहरण में, emsg डेटा को JSON में डिकोड किया गया है:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1022389921",
      ...
    }
    
  3. आईडी3 टैग को TXXXgoogle_{ad_event_ID} फ़ॉर्मैट के हिसाब से फ़िल्टर करें:

    TXXXgoogle_1022389921
    

विज्ञापन इवेंट का डेटा दिखाएं

TagSegment ऑब्जेक्ट ढूंढने के लिए, यह तरीका अपनाएं:

  1. Poll ad metadata से विज्ञापन का मेटाडेटा tags ऑब्जेक्ट वापस पाएं. tags ऑब्जेक्ट, TagSegment ऑब्जेक्ट का ऐरे होता है.

  2. टाइप progress वाला TagSegment ऑब्जेक्ट ढूंढने के लिए, विज्ञापन के इवेंट के पूरे आईडी का इस्तेमाल करें.

  3. विज्ञापन के इवेंट आईडी के पहले 17 वर्णों का इस्तेमाल करके, अन्य टाइप का TagSegment ऑब्जेक्ट ढूंढें.

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

  4. TagSegment मिलने के बाद, ad_break_id प्रॉपर्टी का इस्तेमाल कुंजी के तौर पर करें. इससे आपको विज्ञापन के मेटाडेटा ad_breaks ऑब्जेक्ट में AdBreak ऑब्जेक्ट ढूंढने में मदद मिलेगी.

    यहां दिए गए उदाहरण में, AdBreak ऑब्जेक्ट को खोजा गया है:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. विज्ञापन ब्रेक में विज्ञापन की पोज़िशन के बारे में जानकारी दिखाने के लिए, TagSegment और AdBreak डेटा का इस्तेमाल करें. उदाहरण के लिए, Ad 1 of 3.

मीडिया की पुष्टि करने के लिए पिंग भेजना

progress टाइप को छोड़कर, हर विज्ञापन के इवेंट के लिए मीडिया की पुष्टि करने वाला पिंग भेजें. Google DAI, progress इवेंट को खारिज कर देता है. इन इवेंट को बार-बार भेजने से, आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर असर पड़ सकता है.

विज्ञापन इवेंट के मीडिया की पुष्टि करने वाला पूरा यूआरएल जनरेट करने के लिए, यह तरीका अपनाएं:

  1. स्ट्रीम रिस्पॉन्स से, विज्ञापन का इवेंट का पूरा आईडी media_verification_url वैल्यू में जोड़ें.

  2. पूरे यूआरएल के साथ GET अनुरोध करें:

    // media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/"
    const completeUrl = `${media_verification_url}google_1022389921`;
    
    const response = await fetch(completeUrl);
    

    अगर कोड मान्य होता है, तो आपको 202 कोड स्टेटस का जवाब मिलता है. ऐसा न होने पर, आपको 404 गड़बड़ी कोड मिलेगा.

सभी विज्ञापन इवेंट के पुराने लॉग की जांच करने के लिए, स्ट्रीम ऐक्टिविटी मॉनिटर (एसएएम) का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, लाइव स्ट्रीम को मॉनिटर करना और उसमें आने वाली समस्याओं को हल करना लेख पढ़ें