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

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

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

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

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

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

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

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 सबटाइटल की भाषा, आरएफ़सी5646 भाषा स्ट्रिंग के तौर पर. अगर यह वैल्यू दी जाती है, तो इसका इस्तेमाल सिर्फ़ DASH रेंडरिंग के लिए किया जाता है.

उदाहरण: 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 फ़ॉर्मैट में आईएसओ8601 के मुताबिक, तारीख और समय वाली स्ट्रिंग के तौर पर मान्य हैं.
ad_pods इस स्ट्रीम के लिए चुने गए विज्ञापन पॉड की सूची.
विज्ञापनों का पॉड
manifest_uris सिर्फ़ एचएलएस स्ट्रीम के लिए. एचएलएस मेनिफ़ेस्ट यूआरआई के लिए, एन्कोडिंग प्रोफ़ाइल आईडी का मैप.
mpd_uri सिर्फ़ DASH स्ट्रीम के लिए. DASH MPD का यूआरआई.
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

अनुरोध के मुख्य हिस्से का उदाहरण

यह ऊपर दिए गए cURL कॉल में रेफ़र किए गए request-body.json का कॉन्टेंट है.

{
  "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
    }
  ]
}

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

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

एचएलएस स्ट्रीम

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

एन्कोडिंग प्रोफ़ाइलों पर बार-बार जाना

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

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

अगर आपका कॉन्टेंट मेनिफ़ेस्ट एन्क्रिप्ट (सुरक्षित) किया गया है, तो आपको मौजूदा विज्ञापन पॉड शुरू होने से पहले, एन्क्रिप्शन की आखिरी कुंजी को #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 DASH फ़ॉर्मैट में स्टिच किया जा रहा है, तो आपको सिर्फ़ एक फ़ाइल बनानी होगी. इससे, HLS की तुलना में DASH स्ट्रीम को आसानी से स्टिच किया जा सकता है.

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

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

एमपीडी फ़ाइल को जोड़ने के बाद, वह पूरी तरह से 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>

अन्य संसाधन