वीओडी स्ट्रीम के लिए मेनिफ़ेस्ट मैन्युफ़ैक्चरर

पॉड सर्विंग एपीआई, अडैप्टिव-बिटरेट वीडियो विज्ञापनों के पॉड को इस तरह से तैयार करता है कि उन्हें सीधे उपयोगकर्ता के लिए उपलब्ध HLS या MPEG-DASH मीडिया प्लेलिस्ट में जोड़ा जा सके.

इस गाइड में वीओडी स्ट्रीम के लिए, पॉड सर्विंग मेनिफ़ेस्ट में बदलाव करने वाले बुनियादी सर्वर को लागू करने पर फ़ोकस किया गया है.

स्ट्रीम मेनिफ़ेस्ट अनुरोध पाएं

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

सही कॉन्टेंट स्ट्रीम की पहचान करने के लिए, आपको कुछ और जानकारी भी इकट्ठा करनी होगी. उदाहरण के लिए, Content ID.

मेनिफ़ेस्ट के अनुरोध वाले एंडपॉइंट का उदाहरण

GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
पाथ के पैरामीटर
stream_id क्लाइंट वीडियो प्लेयर ऐप्लिकेशन से मिला Ad Manager स्ट्रीम आईडी.
content_id आपके सिस्टम में मौजूद कॉन्टेंट वीडियो से जुड़ा एक काल्पनिक आईडी.
format स्ट्रीम फ़ॉर्मैट से जुड़ा एक काल्पनिक पैरामीटर. इनमें से कोई एक:
mpd MPEG-DASH स्ट्रीम के लिए
m3u8 HLS स्ट्रीम के लिए

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

विज्ञापनों से जोड़ने के लिए कॉन्टेंट स्ट्रीम चुनने के लिए, मेनिफ़ेस्ट अनुरोध से इकट्ठा किए गए Content ID का इस्तेमाल करें.

विज्ञापनों के पॉड मेनिफ़ेस्ट के लिए अनुरोध करें

Ad Manager से विज्ञापनों का अनुरोध करने के लिए, आपके सर्वर को विज्ञापन पॉड के एंडपॉइंट पर एक POST अनुरोध करना होगा, जो अनुरोध की गई एन्कोडिंग प्रोफ़ाइल, विज्ञापन टैग, और टारगेटिंग पैरामीटर को पास करेगा. इस अनुरोध में वह स्ट्रीम आईडी भी शामिल है जिसे आपने पहले चरण में इकट्ठा किया था.

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

POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
पाथ के पैरामीटर
network_code पब्लिशर के Ad Manager 360 नेटवर्क का कोड.
stream_id क्लाइंट वीडियो प्लेयर ऐप्लिकेशन का स्ट्रीम आईडी.

JSON का मुख्य हिस्सा

मुख्य भाग के पैरामीटर
encoding_profiles Required कोड में बदलने वाले उन प्रोफ़ाइल की JSON सूची जिन्हें आपको हर विज्ञापन ब्रेक के लिए पाना है. नीचे दी गई जानकारी देखें

वीडियो को आसानी से चलाने के लिए, यह आपकी कॉन्टेंट स्ट्रीम में इस्तेमाल की गई एन्कोडिंग प्रोफ़ाइल के सेट से मेल खाना चाहिए.

ad_tag Required VMAP विज्ञापनों का अनुरोध करने के लिए एक विज्ञापन टैग.
cuepoints Optional कॉन्टेंट स्ट्रीम के अंदर क्यू पॉइंट की सूची, जहां वीडियो के बीच में विज्ञापन के लिए ब्रेक डाले जाएंगे. क्यू पॉइंट को फ़्लोटिंग पॉइंट सेकंड में मापा जाता है.

सिर्फ़ ऐसे VMAP रिस्पॉन्स के लिए ज़रूरी है जिनमें पोज़िशनल टाइम ऑफ़सेट का इस्तेमाल करके वीडियो के बीच में विज्ञापन दिखाए जाते हैं. ऐसा आम बात है.

content_duration_seconds Optional कॉन्टेंट की अवधि, सेकंड में.

सिर्फ़ प्रतिशत समय ऑफ़सेट का इस्तेमाल करके, ऐसे VMAP रिस्पॉन्स के लिए ज़रूरी है जिनमें वीडियो के बीच में दिखने वाले विज्ञापन शामिल हैं. ऐसा आम बात है.

manifest_type Optional अनुरोध की जा रही विज्ञापन स्ट्रीम का फ़ॉर्मैट, hls या dash. डिफ़ॉल्ट वैल्यू hls है.
dai_options Optional मेनिफ़ेस्ट को रेंडर करने के पहलुओं को कंट्रोल करने वाले अन्य विकल्प. नीचे दी गई जानकारी देखें
प्रोफ़ाइल को कोड में बदलने का तरीका
profile_name Required इस एन्कोडिंग प्रोफ़ाइल के लिए एक आइडेंटिफ़ायर. यह वैल्यू, आपकी चुनी गई कोई भी स्ट्रिंग हो सकती है. हालांकि, एक स्ट्रीम पर एक ही नाम से, कोड में बदलने वाली एक से ज़्यादा प्रोफ़ाइलें नहीं बनाई जा सकतीं.
type Required इस एन्कोडिंग प्रोफ़ाइल के ज़रिए स्ट्रीम की एन्कोडिंग का प्रकार. कॉन्टेंट के टाइप इस तरह हैं: media, iframe, subtitles.
container_type Required इस एन्कोडिंग प्रोफ़ाइल में इस्तेमाल किया जाने वाला कंटेनर फ़ॉर्मैट. कंटेनर के फ़ॉर्मैट हैं: mpeg2ts, fmp4cmaf, hls_packed_audio
video_settings Optional अगर एन्कोडिंग प्रोफ़ाइल प्रकार iframe है, तो इसे भरना ज़रूरी है. अगर ऐसा नहीं है, तो इसे सिर्फ़ तब इस्तेमाल किया जा सकता है, जब मीडिया के टाइप में वीडियो हो. नीचे जानकारी देखें
audio_settings Optional अगर एन्कोडिंग प्रोफ़ाइल में ऑडियो है, तो यह ज़रूरी है. सिर्फ़ तब अनुमति दी जाती है, जब टाइप, मीडिया हो. नीचे दी गई जानकारी देखें
subtitle_settings Optional अगर एन्कोडिंग प्रोफ़ाइल में सबटाइटल हैं, तो इसे भरना ज़रूरी है. नीचे दी गई जानकारी देखें
वीडियो की सेटिंग
codec Required RFC6381 कोडेक स्ट्रिंग.

उदाहरण: avc1.4d000c

bitrate Required इस प्रोफ़ाइल के लिए ज़्यादा से ज़्यादा वीडियो बिटरेट को बाइट प्रति सेकंड में दिखाने वाला पूर्णांक.
frames_per_second Required वीडियो का फ़्लोटिंग पॉइंट FPS (फ़्रेम प्रति सेकंड).
resolution Required JSON में कोड में बदली गई वैल्यू, जिसमें वीडियो की `चौड़ाई` और `ऊंचाई` पिक्सल में होती है.

उदाहरण: {"width": 640, "height": 320}

ऑडियो सेटिंग
codec Required RFC6381 कोडेक स्ट्रिंग.

उदाहरण: mp4a.40.5

bitrate Required इस प्रोफ़ाइल के लिए, हर सेकंड बाइट में ज़्यादा से ज़्यादा ऑडियो बिटरेट को दिखाने वाला पूर्णांक.

उदाहरण: 300000

channels Required कम फ़्रीक्वेंसी वाले चैनलों के साथ-साथ ऑडियो चैनलों की संख्या दिखाने वाला पूर्णांक.
sample_rate Required हर्ट्ज़ में ऑडियो सैंपलिंग रेट को दिखाने वाला पूर्णांक.

उदाहरण: 4800

सबटाइटल की सेटिंग
format Required इन-बैंड सबटाइटल के लिए इस्तेमाल किया जाने वाला फ़ाइल फ़ॉर्मैट. webvtt या ttml को वैल्यू के तौर पर इस्तेमाल किया जा सकता है.
language Optional RFC5646 भाषा की स्ट्रिंग के तौर पर सबटाइटल की भाषा. अगर इस वैल्यू का इस्तेमाल किया जाता है, तो इसका इस्तेमाल सिर्फ़ डैश रेंडरिंग के लिए किया जाता है.

उदाहरण: en-us

डीएआई के विकल्प
dash_profile Optional विज्ञापनों के पॉड मेनिफ़ेस्ट पर लागू करने के लिए, MPEG-DASH प्रोफ़ाइल. इस सेटिंग का इस्तेमाल सिर्फ़ DASH मेनिफ़ेस्ट के लिए किया जाता है. live या on-demand को वैल्यू के तौर पर इस्तेमाल किया जा सकता है. डिफ़ॉल्ट वैल्यू on-demand है.

live वैल्यू, MPEG-DASH प्रोफ़ाइल "urn:mpeg:dash:profile:isoff-live:2011" से जुड़ी है.

on-demand वैल्यू, MPEG-DASH प्रोफ़ाइल urn:mpeg:dash:profile:isoff-on-demand:2011 से जुड़ी है.

ad_pod_timeout Optional फ़्लोटिंग पॉइंट सेकंड में, विज्ञापनों को चुनने और विज्ञापनों का पॉड बनाने में लगने वाला ज़्यादा से ज़्यादा समय. इतने समय के बाद, Ad Manager ad_pods रिस्पॉन्स में पहले से चुने गए किसी भी विज्ञापन को दिखाता है और प्रोसेसिंग बंद कर देता है.
sam_id Optional यह किसी दूसरी डीबग कुंजी के बारे में बताती है जिसका इस्तेमाल स्ट्रीम गतिविधि मॉनिटर में सेशन को खोजने के लिए किया जा सकता है.

जवाब

रिस्पॉन्स पैरामीटर
valid_for वह अवधि जिसके लिए विज्ञापन पॉड की ये प्लेलिस्ट dhms (दिन, घंटे, मिनट, सेकंड) फ़ॉर्मैट में मान्य रहती हैं.
valid_until वह तारीख और समय जब तक इन विज्ञापनों के पॉड की प्लेलिस्ट, yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm फ़ॉर्मैट में ISO8601 'तारीख और समय' स्ट्रिंग के तौर पर मान्य रहती हैं.
ad_pods इस स्ट्रीम के लिए चुने गए विज्ञापनों के पॉड की सूची.
विज्ञापनों का पॉड
manifest_uris यह सुविधा सिर्फ़ HLS स्ट्रीम के लिए उपलब्ध है. HLS मेनिफ़ेस्ट यूआरआई पर प्रोफ़ाइल आईडी को कोड में बदलने का मैप.
mpd_uri सिर्फ़ DASH स्ट्रीम के लिए. DASH एमपीडी का यूआरआई.
type विज्ञापनों के पॉड का टाइप. विज्ञापनों के पॉड के टाइप इस तरह हैं: pre, mid या post.
start सिर्फ़ वीडियो के बीच में दिखने वाले विज्ञापनों के पॉड के लिए. स्ट्रीम की वह जगह जहां फ़्लोटिंग पॉइंट सेकंड में विज्ञापनों के इस पॉड को डाला जाना चाहिए.
duration फ़्लोटिंग पॉइंट सेकंड में इस विज्ञापन पॉड की अवधि.
midroll_index सिर्फ़ वीडियो के बीच में दिखने वाले विज्ञापनों के पॉड के लिए. वीडियो के बीच में दिखने वाले मौजूदा विज्ञापनों के पॉड का इंडेक्स. इंडेक्स करने की शुरुआत 1 से होती है.

अनुरोध का उदाहरण (cURL)

curl -X POST \
     -d '@request-body.json' \
     -H 'Content-Type: application/json' \
  https://dai.google.com/ondemand/pods/api/v1/network/21775744923/streams/6e69425c-0ac5-43ef-b070-c5143ba68541:CHS/adpods

अनुरोध का मुख्य हिस्सा

यह request_body.json का कॉन्टेंट है, जिसके बारे में ऊपर दिए गए cURL कॉल में बताया गया है.

{
  "encoding_profiles": [
   {
     "profile_name": "1080p",
     "type": "media",
     "container_type": "mpeg2ts",
     "video_settings": {
       "codec": "avc1.4d000c",
       "bitrate": 5000000,
       "frames_per_second": 30.0,
       "resolution": {
         "width": 1920,
         "height": 1080
       }
     },
     "audio_settings": {
       "codec": "mp4a.40.5",
       "bitrate": 300000,
       "channels": 2,
       "sample_rate": 48000
     }
   },
   {
     "profile_name": "360p",
     "type": "media",
     "container_type": "mpeg2ts",
     "video_settings": {
       "codec": "avc1.4d000d",
       "bitrate": 1000000,
       "frames_per_second": 30.0,
       "resolution": {
         "width": 640,
         "height": 360
       }
     },
     "audio_settings": {
       "codec": "mp4a.40.5",
       "bitrate": 64000,
       "channels": 2,
       "sample_rate": 48000
     }
   },
   {
     "profile_name": "subtitles-webvtt",
     "type": "subtitles",
     "subtitle_settings": {
       "format": "webvtt"
     }
   }
 ],
 "ad_tag": "https://pubads.g.doubleclick.net/gampad/ads?...",
 "manifest_type": "hls"
}

रिस्पॉन्स का उदाहरण

{
  "valid_for": "8h0m0s",
  "valid_until": "2023-03-24T08:30:26.839717986-07:00",
  "ad_pods": [
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/0/profile/1080p.m3u8",
        "360p": "https://{...}/pod/0/profile.m3u8",
        "subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt"
      },
      "type": "pre",
      "duration": 10.0
    },
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/1/profile/1080p.m3u8",
        "360p": "https://{...}/pod/1/profile.m3u8",
        "subtitles-webvtt": "https://{...}/pod/1/profile/subtitles-en.vtt"
      },
      "type": "mid",
      "start": 15.0,
      "duration": 15.0,
      "midroll_index": 1
    },
    {
      "manifest_urls":{
        ]"1080p": "https://{...}/pod/2/profile/1080p.m3u8",
        "360p": "https://{...}/pod/2/profile.m3u8",
        "subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt""
      },
      "type": "post",
      "duration": 10.0
    }
  ]
}

कॉन्टेंट में विज्ञापनों के पॉड जोड़ें

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

HLS स्ट्रीम

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

प्रोफ़ाइलों को कोड में बदलने के बाद उनकी संख्या में बदलाव करें

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

विज्ञापनों के पॉड के कलेक्शन का उदाहरण
"ad_pods": [
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/0/profile/1080p.m3u8",
        "360p": "https://{...}/pod/0/profile/360p.m3u8",
        "subtitles-en": "https://{...}/pod/0/profile/subitles-en.vtt"
      },
      "type": "pre",
      "duration": 10.0
    },
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/1/profile/1080p.m3u8",
        "360p": "https://{...}/pod/1/profile/360p.m3u8",
        "subtitles-en": "https://{...}/pod/1/profile/subitles-en.vtt"
      },
      "type": "mid",
      "start": 15.0,
      "duration": 15.0,
      "midroll_index": 1
    },
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/2/profile/1080p.m3u8",
        "360p": "https://{...}/pod/2/profile/360p.m3u8",
        "subtitles-en": "https://{...}/pod/2/profile/subitles-en.vtt"
      },
      "type": "post",
      "duration": 10.0
    }
  ]
मल्टीवेरिएंट कॉन्टेंट की प्लेलिस्ट का उदाहरण
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://{...}/subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{...}/360p.m3u8
इकट्ठा किए गए वैरिएंट के डेटा का उदाहरण
Encoding profile: "1080p"
Profile settings: {...}
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
    0 -> https://{...}/pod/0/profile/1080p.m3u8
   15 -> https://{...}/pod/1/profile/1080p.m3u8
  600 -> https://{...}/pod/2/profile/1080p.m3u8

हर वैरिएंट मेनिफ़ेस्ट में विज्ञापन डालें

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

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

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

इकट्ठा किए गए वैरिएंट के डेटा का उदाहरण
Encoding profile: "1080p"
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
    0 -> https://dai.google.com/{...}pod/0/profile/1080p.m3u8
   15 -> https://dai.google.com/{...}pod/1/profile/1080p.m3u8
  600 -> https://dai.google.com/{...}pod/2/profile/1080p.m3u8
कॉन्टेंट मेनिफ़ेस्ट का उदाहरण

यह https://{...}/1080p.m3u8 मेनिफ़ेस्ट का कॉन्टेंट है, जिसे इकट्ठा किए गए वैरिएंट डेटा की सूची में शामिल किया गया है.

#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}
विज्ञापन पॉड मेनिफ़ेस्ट का उदाहरण

यह https://dai.google.com/{...}/pod/1/profile/1080p.m3u8 मेनिफ़ेस्ट का कॉन्टेंट है, जिसे इकट्ठा किए गए वैरिएंट के डेटा में शामिल किया गया है.

#EXTM3U
{...}
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
सिले हुए वैरिएंट मेनिफ़ेस्ट का उदाहरण

इसका नतीजा एक-दूसरे से जुड़ा हुआ वैरिएंट मेनिफ़ेस्ट होगा, जिसे सीडीएन को पास किया जाता है और https://cdn.{...}/{userid}/1080p.m3u8 पर होस्ट किया जाता है.

#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}

कई वैरिएंट वाली प्लेलिस्ट बनाएं

पूरे हो चुके हर वैरिएंट मेनिफ़ेस्ट के लिए, सीडीएन पते इकट्ठा करें. साथ ही, मेल खाने वाली एन्कोडिंग प्रोफ़ाइल की जानकारी भी इकट्ठा करें. साथ ही, नतीजों को एक नए मल्टीवेरिएंट मेनिफ़ेस्ट में इकट्ठा करें. उपयोगकर्ता के लिए यह खास मेनिफ़ेस्ट, पहले चरण में मिले मेनिफ़ेस्ट अनुरोध के जवाब के तौर पर दिखाया जाता है.

फ़ाइनल मल्टीवेरिएंट प्लेलिस्ट का उदाहरण
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://cdn.{...}-subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/{userid}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/{userid}/360p.m3u8

MPEG DASH स्ट्रीम

अगर आपको MPEG डैश फ़ॉर्मैट में किसी स्ट्रीम को जोड़ना है, तो आपको सिर्फ़ एक फ़ाइल बनानी होगी. इससे HLS के मुकाबले DASH स्ट्रीम को स्टिच करना आसान हो सकता है.

अच्छी तरह से तैयार की गई MPEG DASH मीडिया प्रज़ेंटेशन (MPD) फ़ाइल में कई पीरियड होने चाहिए. हर पीरियड में कई पीरियड होने चाहिए. हर जानकारी, आपकी एन्कोडिंग वाली किसी प्रोफ़ाइल से मेल खानी चाहिए. Ad Manager से मिलने वाले हर विज्ञापन पॉड की एक एमपीडी फ़ाइल भी होती है, जिसमें फ़ुल स्टॉप के साथ मेल खाने वाले निरूपणों का क्रम होता है.

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

अंतिम रूप से जोड़ी गई MPD फ़ाइल MPEG_DASH के निर्देशों के मुताबिक होनी चाहिए, इसलिए आपको किसी भी अवधि के शुरू होने के समय को ठीक करने के लिए, फ़ाइनल फ़ाइल पर एक बार और दोहराना होगा, मीडिया प्रज़ेंटेशन की अवधि को नई शामिल की गई विज्ञापन अवधियों के हिसाब से तय करना होगा और ऐसे किसी भी अन्य विवाद को हल करना होगा जो स्टिचिंग प्रोसेस की वजह से हो सकता था.

कॉन्टेंट के एमपीडी का उदाहरण

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M00.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
  <ProgramInformation moreInformationURL="http://.../info">
    <Title>Example Stream</Title>
  </ProgramInformation>
  <Period duration="PT0H0M15.000S" id="content-period-1">
    ...
  </Period>
  <Period duration="PT0H0M15.000S" id="content-period-2">
    ...
  </Period>
  <Period duration="PT0H0M15.000S" id="content-period-3">
    ...
  </Period>
  ...
</MPD>

विज्ञापन पॉड JSON का उदाहरण

[{
  "mpd_uri": "https://{...}pod/1.mpd",
  "type": "mid",
  "start": 15.0,
  "duration": 15.0,
  "midroll_index": 1
}]

विज्ञापन पॉड के एमपीडी का उदाहरण

यह ऊपर दिए गए विज्ञापन पॉड JSON में मौजूद mpd_uri का कॉन्टेंट है.

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H0M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
  <ProgramInformation moreInformationURL="http://.../info">
    <Title>Ad Pod 1</Title>
  </ProgramInformation>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
    ...
  </Period>
  ...
</MPD>

सिले हुए एमपीडी का उदाहरण

इसे शुरुआती स्ट्रीम मेनिफ़ेस्ट अनुरोध के जवाब के तौर पर इस्तेमाल करें.

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
  <ProgramInformation moreInformationURL="http://.../info">
    <Title>Example Stream</Title>
  </ProgramInformation>
  <Period duration="PT0H0M15.000S" id="content-period-1">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
    ...
  </Period>
  <Period duration="PT0H0M15.000S" id="content-period-2">
    ...
  </Period>
  <Period duration="PT0H0M15.000S" id="content-period-3">
    ...
  </Period>
  ...
</MPD>

अन्य संसाधन