विज्ञापन पॉड के समय के मेटाडेटा के साथ विज्ञापन डालना

इस गाइड में, विज्ञापन पॉड के समय के मेटाडेटा (एटीएम) का इस्तेमाल करके, विज्ञापन ब्रेक डालने का तरीका बताया गया है. इससे विज्ञापन ब्रेक के लिए सटीक समय और अवधि का पता लगाया जा सकता है. इसमें प्री-रोल विज्ञापन भी शामिल हैं.

वीडियो शुरू होने से पहले दिखने वाले विज्ञापन डालने और वीडियो के बीच में विज्ञापन ब्रेक के बाद कॉन्टेंट पर वापस जाने की सुविधा को मैनेज करने के लिए, हमारा सुझाव है कि आप इन एपीआई को कॉल करें:

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

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

शुरू करने के लिए, आपको पॉड सर्विंग रीडायरेक्ट डाइनैमिक विज्ञापन इंसर्शन (डीएआई) टाइप के लिए, लाइव स्ट्रीम इवेंट सेट अप करना होगा. इनमें से कोई एक तरीका चुनें:

कॉन्टेंट स्ट्रीम वापस पाना

जब कोई उपयोगकर्ता लाइव स्ट्रीम इवेंट चुनता है, तो क्लाइंट ऐप्लिकेशन, Google Ad Manager को स्ट्रीम करने का अनुरोध करता है. स्ट्रीम के जवाब में, ऐप्लिकेशन Google DAI सेशन आईडी और मेटाडेटा को स्ट्रीम मेनिफ़ेस्ट अनुरोध में शामिल करने के लिए निकालता है.

यहां दिए गए उदाहरण में, Google DAI सेशन आईडी को मेनिफ़ेस्ट मैनिपुलेटर को पास करने का तरीका बताया गया है:

https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY

वीडियो कॉन्टेंट चलाने के अनुरोध को प्रोसेस करते समय, Google DAI सेशन आईडी और अनुरोध से मिले CUSTOM_ASSET_KEY को सेव करें, ताकि विज्ञापन स्टिचिंग की जा सके.

विज्ञापन पॉड की टाइमिंग का मेटाडेटा वापस पाना

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

  1. HMAC टोकन जनरेट करें.
  2. HMAC टोकन की मदद से, ATM API को कॉल करें.

हस्ताक्षर किया गया एचएमएसी टोकन जनरेट करना

अपने अनुरोधों की पुष्टि करने के लिए, यह तरीका अपनाएं:

  1. इन पैरामीटर को वर्णमाला के क्रम में जोड़कर, एक टोकन स्ट्रिंग बनाएं. इन पैरामीटर को टिल्ड ~ से अलग करें:

    पैरामीटर ज़रूरी है या ज़रूरी नहीं है ब्यौरा
    ad_break_id ज़रूरी है यह एक स्ट्रिंग होती है, जिसे विज्ञापन ब्रेक की पहचान करने के लिए सेट किया जाता है. उदाहरण के लिए, ad-break-1. वीडियो शुरू होने से पहले दिखने वाले विज्ञापनों के लिए, preroll का इस्तेमाल करें.
    custom_asset_key ज़रूरी है लाइव स्ट्रीम इवेंट की कस्टम ऐसेट की कुंजी.
    cust_params वैकल्पिक कस्टम टारगेटिंग पैरामीटर. ज़्यादा जानकारी के लिए, अपनी स्ट्रीम में टारगेटिंग पैरामीटर जोड़ना लेख पढ़ें.
    exp ज़रूरी है यह टोकन की समयसीमा खत्म होने का समय है. इसे Unix epoch के बाद से अब तक बीते सेकंड की कुल संख्या के तौर पर मेज़र किया जाता है.
    network_code ज़रूरी है आपका Google Ad Manager नेटवर्क कोड. ज़्यादा जानकारी के लिए, Ad Manager खाते की जानकारी ढूंढना लेख पढ़ें.
    pd ज़रूरी है विज्ञापन ब्रेक की अवधि, मिलीसेकंड में. प्री-रोल विज्ञापनों के लिए, Google DAI इस पैरामीटर को आपकी लाइव स्ट्रीम इवेंट सेटिंग से बदल देता है.
    scte35 वैकल्पिक Base64 में एन्कोड किया गया SCTE-35 सिग्नल. पुष्टि करें कि सिग्नल सही है. अगर यह गलत है, तो जवाब में X-Ad-Manager-Dai-Warning एचटीटीपी हेडर को एक मैसेज भेजा जाता है. साथ ही, विज्ञापन ब्रेक बनाने के लिए सिग्नल अब भी भेजा जाता है. विज्ञापन ब्रेक मार्कर के बारे में ज़्यादा जानकारी के लिए, HLS इंटिग्रेशन देखें.
  2. HMAC टाइप की Google DAI की पुष्टि करने वाली कुंजी डाउनलोड करें. ज़्यादा जानकारी के लिए, DAI वीडियो स्ट्रीम के अनुरोधों की पुष्टि करना लेख पढ़ें.

  3. डाउनलोड की गई एचएमएसी कुंजी का इस्तेमाल करके, टोकन स्ट्रिंग का SHA256 हस्ताक्षर जनरेट करें.

  4. टोकन स्ट्रिंग और जनरेट किए गए हस्ताक्षर को एक साथ जोड़ें.

  5. जोड़ी गई स्ट्रिंग पर यूआरएल एन्कोडिंग लागू करें. एन्कोड की गई स्ट्रिंग, Ad pod Timing Metadata (ATM) API के अनुरोधों की पुष्टि करने के लिए, हस्ताक्षर किया गया एचएमएसी टोकन है.

यहां दिए गए उदाहरण में, प्री-रोल विज्ञापनों के लिए हस्ताक्षर किया गया एचएमएसी टोकन जनरेट किया गया है:

custom_asset_key="CUSTOM_ASSET_KEY"
exp="1750700000" # Expired on Mon Jun 23 2025 13:33:20 GMT-0400 (Eastern Daylight Time)
network_code="NETWORK_CODE"
ad_break_id="preroll"
pd="0" # Pod duration value is overridden by the livestream event settings.

# The HMAC authentication key associated with your livestream event in Google Ad Manager.
secret_key="24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C"

# Concatenate the parameters, keep the parameters alphabetically ordered by name.
token_string="ad_break_id=${ad_break_id}~custom_asset_key=${custom_asset_key}~exp=${exp}~network_code=${network_code}~pd=${pd}"

# Calculate the SHA256 signature of the token_string.
hmac_signature=$(echo -n "$token_string" | openssl dgst -sha256 -hmac "$secret_key" | awk '{print $2}')

# Concatenate the token string and the signature.
signed_token="${token_string}~hmac=${hmac_signature}"

url_encode() {
    local string="${1}"
    local strlen=${#string}
    local encoded=""
    local pos c
    for (( pos=0 ; pos<strlen ; pos++ )); do
        c=${string:$pos:1}
        case "$c" in
            [-_.~a-zA-Z0-9] ) o="${c}" ;;
            *   ) printf -v o '%%%02x' "'$c"
        esac
        encoded+="${o}"
    done
    echo "${encoded}"
}

# Apply URL encoding to the concatenated string.
url_encoded_signed_token=$(url_encode "$signed_token")

echo "Signed HMAC token:"
echo "${url_encoded_signed_token}"

# Example output:
# ad_break_id%3Dpreroll~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D21775744923~pd%3D180000~pod_id%3D5~hmac%3D24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C

वीडियो शुरू होने से पहले दिखने वाले विज्ञापनों के लिए, अनुरोध के समय का मेटाडेटा

लाइव स्ट्रीम इवेंट के लिए, प्री-रोल सेटिंग की पुष्टि करने के लिए, इनमें से कोई विकल्प इस्तेमाल करें:

प्री-रोल विज्ञापन के फ़ैसले के नतीजे पाने के लिए, एटीएम एपीआई से अनुरोध करें.

यहां दिए गए उदाहरण में, प्री-रोल विज्ञापनों के लिए एटीएम अनुरोध किया गया है:

curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"

वीडियो के बीच में दिखने वाले विज्ञापनों के लिए, समय के हिसाब से मेटाडेटा का अनुरोध करना

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

  1. लाइव स्ट्रीम के मेनिफ़ेस्ट को पार्स करके, विज्ञापन मार्कर ढूंढता है. इन मार्कर में, वीडियो के बीच में विज्ञापन दिखाने के हर ब्रेक का समय और अवधि शामिल होती है.
  2. विज्ञापन पॉड और स्लेट की सटीक अवधि का अनुरोध करने के लिए, ATM API एंडपॉइंट को कॉल करें. एपीआई, विज्ञापन पॉड के फ़ैसले के नतीजों के साथ एक JSON ऑब्जेक्ट दिखाता है.

यहां दिए गए उदाहरण में, वीडियो के बीच में विज्ञापन दिखाने के लिए एटीएम अनुरोध किया गया है:

curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"

अगर अनुरोध पूरा हो जाता है, तो आपको इस JSON ऑब्जेक्ट जैसा आउटपुट दिखेगा:

{
  "status": "final",
  "ads": [
    {
      "duration_ms": 5046,
      "variants": {
        "devrel1428000": {
          "segment_extension": "ts",
          "segment_durations": {
            "timescale": 1000,
            "values": [
              5045
            ]
          }
        },
        "devrel1928000": {
          "segment_extension": "ts",
          "segment_durations": {
            "timescale": 1000,
            "values": [
              5045
            ]
          }
        }
      }
    }
  ],
  "slate": {
    "duration_ms": 0,
    "variants": {
      "devrel1428000": {
        "segment_extension": "ts",
        "segment_durations": {
          "timescale": 1000,
          "values": [
            5005,
            ...
            5046
          ]
        }
      },
      "devrel1928000": {
        "segment_extension": "ts",
        "segment_durations": {
          "timescale": 1000,
          "values": [
            5005,
            ...
            5046
          ]
        }
      }
    }
  }
}

कॉन्टेंट मेनिफ़ेस्ट में विज्ञापन स्टिच करना

नीचे दिए गए सेक्शन में, लाइव स्ट्रीम के मेनिफ़ेस्ट में बदलाव करने और विज्ञापन सेगमेंट जोड़ने का तरीका बताया गया है.

विज्ञापन ब्रेक सेगमेंट की पहचान करना और उन्हें अलग-अलग हिस्सों में बांटना

हर वैरिएंट मेनिफ़ेस्ट को प्रोसेस करते समय, अपनी स्ट्रीम में EXT-X-CUE-IN और EXT-X-CUE-OUT टैग ढूंढें. इनसे विज्ञापन ब्रेक की शुरुआत और खत्म होने का पता चलता है.

क्लाइंट के वीडियो प्लेयर के लिए, EXT-X-CUE-IN और EXT-X-CUE-OUT टैग को EXT-X-DISCONTINUITY एलिमेंट से बदलें, ताकि कॉन्टेंट और विज्ञापनों के बीच स्विच किया जा सके.

यहां दिए गए मेनिफ़ेस्ट के उदाहरण में, EXT-X-CUE-IN और EXT-X-CUE-OUT टैग को बदला गया है:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

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

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Google DAI के विज्ञापन सेगमेंट एन्क्रिप्ट (सुरक्षित) नहीं किए जाते. अगर आपका कॉन्टेंट एन्क्रिप्ट (सुरक्षित) किया गया है, तो हर विज्ञापन ब्रेक के पहले विज्ञापन सेगमेंट से पहले EXT-X-KEY:METHOD=NONE एलिमेंट डालकर, एन्क्रिप्शन हटाएं. विज्ञापन ब्रेक के खत्म होने पर, सही EXT-X-KEY डालकर एन्क्रिप्शन की सुविधा को फिर से चालू करें.

आने वाले विज्ञापन ब्रेक के शुरू होने के समय, अवधि, और इंडेक्स को ट्रैक करें.

विज्ञापन सेगमेंट के यूआरएल बनाना

EXT-X-DISCONTINUITY टैग के बीच मौजूद कॉन्टेंट सेगमेंट को, हर विज्ञापन सेगमेंट के यूआरएल से बदलें. कितने विज्ञापन सेगमेंट डालने हैं, यह तय करने के लिए, एटीएम एपीआई से मिले JSON रिस्पॉन्स में दिए गए ads.segment_durations.values का इस्तेमाल करें.

EXT-X-CUE-IN टैग का पता चलने पर, विज्ञापन पॉड को जल्दी खत्म करने के लिए, विज्ञापन के आखिरी सेगमेंट के यूआरएल में d= पैरामीटर जोड़ें. यह पैरामीटर, सेगमेंट को छोटा करता है, ताकि क्लाइंट के वीडियो प्लेयर की टाइमलाइन पर कोई असर न पड़े.

यहां दिए गए उदाहरण में, मेनिफ़ेस्ट में प्री-रोल विज्ञापन सेगमेंट का यूआरएल जोड़ा गया है. ध्यान दें कि विज्ञापन सेगमेंट में, ज़ीरो-आधारित इंडेक्स का इस्तेमाल किया जाता है:

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

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

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

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

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4

स्लेट सेगमेंट बनाना

विज्ञापन और कॉन्टेंट के बीच के अंतर को भरने के लिए, स्लेट सेगमेंट डालें. हर स्लेट सेगमेंट की अवधि तय करने के लिए, ATM API के JSON रिस्पॉन्स से मिले slates.segment_durations.values कलेक्शन का इस्तेमाल करें. विज्ञापन ब्रेक को पूरा करने के लिए, सेगमेंट की अवधि को ज़रूरत के हिसाब से दोहराएं.

यहां स्लेट सेगमेंट बनाने का उदाहरण दिया गया है:

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

उदाहरण में मौजूद slate/0, स्लेट के वर्शन नंबर को दिखाता है. अपने क्लाइंट के वीडियो प्लेयर की कंपैटिबिलिटी और कैश मेमोरी की सुविधा के बारे में जानें. इससे यह तय करने में मदद मिलेगी कि स्लेट के हर लूप के लिए, 0 से शुरू करके इस संख्या को बढ़ाना है या सभी इटरेशन के लिए इसे 0 पर रखना है.

कॉन्टेंट पर वापस जाने की सुविधा को मैनेज करना

विज्ञापन पॉड से सभी सेगमेंट डालने के बाद, अपने कॉन्टेंट स्ट्रीम पर वापस जाने के लिए इनमें से कोई एक तरीका चुनें:

तरीका ब्यौरा क्लाइंट के वीडियो प्लेयर पर असर
स्लेट सेगमेंट से भरना स्लेट सेगमेंट डालता है और स्लेट को लूप करता है. यह फ़ंक्शन, अवधि की जानकारी भरता है और हर स्लेट इटरेशन के बीच EXT-X-DISCONTINUITY एलिमेंट डालता है. कोई इफ़ेक्ट नहीं.
वीडियो प्लेयर, टाइमलाइन में बदलाव किए बिना कॉन्टेंट पर वापस चला जाता है.
एकल स्लेट सेगमेंट के साथ फिर से अलाइन करना एक स्लेट सेगमेंट डालता है. यह कॉन्टेंट शुरू होने तक की अवधि को भरने के लिए, d= पैरामीटर का इस्तेमाल करता है. कोई इफ़ेक्ट नहीं.
वीडियो प्लेयर, टाइमलाइन में बदलाव किए बिना कॉन्टेंट पर वापस चला जाता है.
तुरंत लौटाना कॉन्टेंट सेगमेंट डालें. वीडियो प्लेयर की टाइमलाइन में बदलाव किया गया है.
आपके क्लाइंट वीडियो प्लेयर को, बदली गई टाइमलाइन को मैनेज करना होगा.

ज़रूरी नहीं: विज्ञापन के लिए ब्रेक शेड्यूल करना

विज्ञापन दिखाने की दर बढ़ाने के लिए, विज्ञापन पॉड की अवधि, कस्टम टारगेटिंग पैरामीटर, और SCTE-35 सिग्नल डेटा के साथ, विज्ञापन ब्रेक की सूचना (ईएबीएन) भेजें. ज़्यादा जानकारी के लिए, विज्ञापन ब्रेक की सूचनाएं पहले से भेजने का तरीका लेख पढ़ें.