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

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

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

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

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

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

  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": "8d2b2292-6356-4c0e-94be-cece01d2df2e: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. एंडपॉइंट के लिए, GET अनुरोध करें. ज़्यादा जानकारी के लिए, तरीका: मेटाडेटा देखें.

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

    const response = await fetch(metadata_url);
    console.log(await response.json());
    

    अनुरोध पूरा होने पर, आपको मौजूदा और आने वाले विज्ञापन ब्रेक के लिए, PodMetadata रिस्पॉन्स मिलेगा:

    {
      "tags":{
        "google_5555555555":{
          "ad":"0000229834_ad1",
          "ad_break_id":"0000229834",
          "type":"firstquartile"
        },
        "google_1234567890123456789":{
          "ad":"0000229834_ad1",
          "ad_break_id":"0000229834",
          "type":"progress"
        },
        ...
      },
      "ads":{
        "0000229834_ad1":{
          "ad_break_id":"0000229834",
          "position":1,
          "duration":15,
          "clickthrough_url":"https://.../",
          ...
        },
              ...
      },
      "ad_breaks":{
        "0000229834":{
          "type":"mid",
          "duration":15,
          "ads":1
        },
        ...
      }
    }
    
  3. tags ऑब्जेक्ट को बाद के चरणों के लिए सेव करें.

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

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

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

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

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

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

जब आपका प्लेयर तैयार हो जाए, तो प्लेबैक शुरू करें.

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

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

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

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

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

  • CMAF स्ट्रीम, जिनमें DASH और HLS शामिल हैं, ID3 टैग वाले emsg बॉक्स का इस्तेमाल करती हैं.

अपनी स्ट्रीम से ID3 टैग पाने के लिए, अपने वीडियो प्लेयर की गाइड देखें. ज़्यादा जानकारी के लिए, टाइम किए गए मेटाडेटा को मैनेज करने की गाइड देखें

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

  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_1234567890123456789",
      ...
    }
    
  3. TXXXgoogle_{ad_event_ID} फ़ॉर्मैट वाले ID3 टैग फ़िल्टर करें:

    TXXXgoogle_1234567890123456789
    

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

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

  1. विज्ञापन के मेटाडेटा के लिए पोल विज्ञापन मेटाडेटा से, विज्ञापन के मेटाडेटा का tags ऑब्जेक्ट वापस पाएं. tags ऑब्जेक्ट, TagSegment ऑब्जेक्ट का एक कलेक्शन होता है.

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

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

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

    यहां दिए गए उदाहरण में, 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_5555555555123456789`;
    
    const response = await fetch(completeUrl);
    

    अनुरोध पूरा होने पर, आपको कोड स्टेटस 202 रिस्पॉन्स मिलेगा. ऐसा न होने पर, आपको 404 गड़बड़ी का कोड मिलेगा.

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