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

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

उदाहरण: {"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

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

यह ऊपर दिए गए 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
    }
  ]
}

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

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

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

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

जोड़ी गई आखिरी एमपीडी फ़ाइल पूरी तरह से 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>

अन्य संसाधन