लाइव स्ट्रीम के लिए मेनिफ़ेस्ट में बदलाव करने वाला टूल

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

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

ज़रूरी शर्त: Google Ad Manager में लाइव स्ट्रीम इवेंट कॉन्फ़िगर करना

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

पॉड सर्विंग एपीआई के साथ लाइव स्ट्रीम इवेंट का इस्तेमाल करने के लिए, आपको अपने इवेंट की कई एट्रिब्यूट की जानकारी देनी होगी:

  • customAssetKey - इस इवेंट के लिए इस्तेमाल किया जाने वाला कस्टम आइडेंटिफ़ायर. नेटवर्क के सभी इवेंट में यूनीक होना चाहिए.
  • adTags - Ad Manager ट्रैफ़िकिंग वर्कफ़्लो से जनरेट हुआ मुख्य विज्ञापन टैग यूआरएल.
  • dynamicAdInsertionType - POD_SERVING_REDIRECT पर सेट होना चाहिए.
  • streamingFormat - इसके मुताबिक HLS या DASH पर सेट करें.
  • segmentUrlAuthenticationKeyIds - विज्ञापन सेगमेंट के अनुरोधों पर हस्ताक्षर करने के लिए, कम से कम एक एचएमएसी कुंजी का इस्तेमाल किया जाता है.
  • daiEncodingProfileIds - इस इवेंट के लिए चालू की गई DAIEncodingProfile आईडी की सूची.
  • startDateTime - इवेंट शुरू होने की तारीख और समय
  • endDateTime - इस इवेंट के खत्म होने की शेड्यूल की गई तारीख और समय. यह एट्रिब्यूट अगर unlimitedEndDateTimeis false and ignored ifunlimitedEndDateTimeis true.unlimitedEndDateTime` - बूलियन के लिए ज़रूरी है. ऊपर देखें.

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

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

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

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

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

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

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

विज्ञापन सेगमेंट को कॉन्टेंट स्ट्रीम में स्टिच करें

विज्ञापन सेगमेंट के यूआरएल स्टिचिंग करने के बाद के यूआरएल अलग-अलग होंगे. यह आपके स्ट्रीम फ़ॉर्मैट के हिसाब से तय होता है.

HLS स्ट्रीम

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

ध्यान दें: इसे आसानी से समझने के लिए, इस गाइड के मुताबिक आपके HLS मीडिया को एक ऐसे फ़ॉर्मैट में एन्कोड किया गया है जिसमें ऑडियो और वीडियो को एक ही सेगमेंट फ़ाइल में मर्ज किया गया हो.

प्रॉक्सी मल्टीवेरिएट प्लेलिस्ट

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

HLS को जोड़ने के बाकी चरणों में यह माना जाएगा कि एक ही वैरिएंट मेनिफ़ेस्ट को प्रोसेस किया जा रहा है.

वैरिएंट के लिए अनुरोध किए जा सकने वाले एंडपॉइंट का उदाहरण
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
पाथ के पैरामीटर
asset_key आपके सिस्टम में अनुरोध की गई लाइव स्ट्रीम से जुड़ा एक काल्पनिक आईडी.
variant एक काल्पनिक पैरामीटर जिसमें प्रोसेस किए जा रहे खास वैरिएंट के लिए आइडेंटिफ़ायर होता है.
क्वेरी पैरामीटर
stream_id क्लाइंट वीडियो प्लेयर ऐप्लिकेशन का Ad Manager स्ट्रीम आईडी. यहां इसका इस्तेमाल, मेनिफ़ेस्ट मैनिप्युलर वाले उपयोगकर्ता सेशन की पहचान करने के लिए किया जाता है.
प्रोसेस नहीं किए गए मल्टीवैरिएंट मेनिफ़ेस्ट का उदाहरण
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/360p.m3u8
प्रॉक्सी वाले मल्टीवैरिएंट मेनिफ़ेस्ट का उदाहरण
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/1080p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/720p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/360p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS

विज्ञापन के लिए ब्रेक के सेगमेंट पहचानें और गड़बड़ियां डालें

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

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

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

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

सैंपल मेनिफ़ेस्ट (ओरिजनल)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.005,
contentorigin.com/3.ts
#EXTINF:5.005,
contentorigin.com/4.ts
#EXTINF:5.005,
contentorigin.com/5.ts
#EXTINF:5.000,d
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
डिस्काउंटेस के साथ मेनिफ़ेस्ट को शामिल किया गया
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXTINF:5.005,
#EXT-X-DISCONTINUITY
{... New segments will go here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

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

विज्ञापनों के पॉड में मौजूद हर सेगमेंट के लिए, आपको कुछ और वैल्यू ट्रैक करनी होंगी:

  • segment_number: विज्ञापनों के पॉड में सेगमेंट इंडेक्स, शून्य से शुरू होता है. इसके अलावा, mp4 शुरू करने वाले सेगमेंट के लिए "init" भी इस्तेमाल किया जा सकता है.
  • segment_duration: मौजूदा सेगमेंट की अवधि मिलीसेकंड में. यह वैल्यू, पॉड के आखिरी सेगमेंट को छोड़कर सभी सेगमेंट के लिए एक जैसी होनी चाहिए.
  • segment_offset: सेगमेंट ऑफ़सेट की गिनती करने के लिए, मिलीसेकंड में पिछले सेगमेंट की अवधि को उसके सेगमेंट ऑफ़सेट में जोड़कर कैलकुलेट किया जाता है
  • last: बूलियन वैल्यू, विज्ञापनों के पॉड के आखिरी सेगमेंट की पहचान करती है. डिफ़ॉल्ट रूप से गलत पर सेट होता है.

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

विज्ञापन के लिए ब्रेक में मौजूद हर सेगमेंट को, इस फ़ॉर्मैट के यूआरएल से बदलें:

/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/pod/{pod_id}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
पाथ के पैरामीटर
network_code इस नेटवर्क के लिए Ad Manager 360 नेटवर्क कोड.
custom_asset_key पसंद के मुताबिक बनाई गई लाइव स्ट्रीम एसेट कुंजी, जिसे LiveStreamEventService एपीआई में या Ad Manager 360 के वेब इंटरफ़ेस में लाइव स्ट्रीम पेज पर बताया गया है.
pod_id विज्ञापन के लिए ब्रेक का आइडेंटिफ़ायर. यह एक पूर्णांक होना चाहिए, जो 1 से शुरू हो और हर विज्ञापन ब्रेक के लिए एक बढ़ता हो.

यह वैल्यू, मौजूदा इवेंट में एक ही विज्ञापन ब्रेक देखने वाले सभी उपयोगकर्ताओं के लिए एक जैसी होनी चाहिए.

profile_name उस प्रोफ़ाइल का आइडेंटिफ़ायर जिसके लिए अनुरोध किया जा रहा है,
segment_number विज्ञापनों के मौजूदा पॉड में इस सेगमेंट का इंडेक्स, शून्य से शुरू होता है.
MP4 कंटेनर का इस्तेमाल करते समय, segment_number को "init" पर सेट करके, शुरू करने वाले सेगमेंट का अनुरोध किया जा सकता है.
क्वेरी पैरामीटर
stream_id ज़रूरी है उपयोगकर्ता का stream_id पैरामीटर, स्ट्रीम बनाने के अनुरोध से मिला है.
sd ज़रूरी है segment_duration
so ज़रूरी नहीं segment_offset

अगर so मौजूद नहीं है, तो माना जाता है कि सभी पिछले सेगमेंट की अवधि एक जैसी है. साथ ही, सेगमेंट ऑफ़सेट की गिनती segment_number और sd से की जाती है.

pd सिर्फ़ उन इवेंट को छोड़कर ज़रूरी है जिनमें बिना विज्ञापन के लिए ब्रेक की सुविधा चालू हो विज्ञापन के लिए ब्रेक की अवधि (मिलीसेकंड में). इसे ad_pod_duration भी कहा जाता है.
auth-token ज़रूरी है इस विज्ञापन के पॉड के लिए, हस्ताक्षर किया गया, यूआरएल-कोड में बदला गया एचएमएसी टोकन.
last ज़रूरी नहीं बूलियन, विज्ञापन के लिए ब्रेक के आखिरी सेगमेंट को दिखाता है. डिफ़ॉल्ट तौर पर, यह 'गलत' पर सेट होता है.

क्वेरी पैरामीटर की वैल्यू को सही तरीके से कोड में बदला जाना चाहिए, ताकि यूआरएल सुरक्षित हो. यह खास तौर पर auth-token फ़ील्ड के लिए ज़रूरी है, क्योंकि इसमें /, +, और = वर्ण हो सकते हैं.

सैंपल मेनिफ़ेस्ट (सेगमेंट बदलने के बाद)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:3.000,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2&last=true
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

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

DASH स्ट्रीम

DASH स्ट्रीम एक MPD फ़ाइल के रूप में दी जाती है, जिसमें सभी स्ट्रीम एन्कोडिंग एक ही फ़ाइल में होती हैं. यहां कॉन्टेंट को फ़ुल स्टॉप की सीरीज़ के तौर पर दिखाया जाता है.

अनुरोध की अवधि का टेंप्लेट

Google Ad Manager से पीरियड टेंप्लेट के लिए अनुरोध करें. जब इसमें शामिल मैक्रो की जानकारी अपने-आप भर जाएगी, तब यह टेंप्लेट आपके विज्ञापन के लिए ब्रेक का पीरियड बन जाएगा.

आपको हर स्ट्रीम सेशन में इस टेंप्लेट के लिए सिर्फ़ एक बार अनुरोध करना चाहिए. साथ ही, हर विज्ञापन ब्रेक के साथ फिर से इस्तेमाल करने के लिए इसे कैश मेमोरी में सेव करना चाहिए.

पीरियड टेंप्लेट अनुरोध एंडपॉइंट hjf
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
पाथ के पैरामीटर
network_code पब्लिशर के Ad Manager 360 नेटवर्क का कोड.
custom_asset Google Ad Manager में लाइव स्ट्रीम इवेंट की कस्टम ऐसेट कुंजी.
क्वेरी पैरामीटर
stream_id क्लाइंट वीडियो प्लेयर से मिलने वाला Ad Manager स्ट्रीम आईडी.
रिस्पॉन्स JSON
dash_period_template पीरियड टेंप्लेट एक्सएमएल स्ट्रिंग.
segment_duration_ms डैश पीरियड टेंप्लेट में मौजूद हर विज्ञापन मीडिया सेगमेंट की अवधि, मिलीसेकंड में.
अनुरोध का उदाहरण (cURL)
curl https://dai.google.com/linear/pods/v1/dash/network/21775744923/custom_asset/tears_of_steel/pods.json?stream-id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS
रिस्पॉन्स का उदाहरण
{"dash_period_template":"<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$> <BaseURL>https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/</BaseURL>
 <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">
  <SegmentTimeline>
    <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
  </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>

    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>",
"segment_duration_ms":5000}

पीरियड टेंप्लेट को भरें

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

मैक्रो ब्यौरा उदाहरण
$$pod-id$$ इस अवधि के दौरान विज्ञापनों के पॉड का इंडेक्स. यह वैल्यू, दर्शकों के सभी सेशन में एक ही पॉड के लिए मैच होनी चाहिए. 1
$$period-start$$ मौजूदा एमपीडी में पीरियड शुरू होने का समय. एक वैकल्पिक एट्रिब्यूट जिसे start="###" से बदला जाना चाहिए, जहां ###, प्रज़ेंटेशन का वह समय है जब विज्ञापन के लिए ब्रेक शुरू होता है. अगर पीरियड के शुरू होने का समय नहीं दिया गया है, तो इस मैक्रो को एक खाली स्ट्रिंग से बदला जाना चाहिए. start="PT2H33M30S"
$$period-duration$$ विज्ञापन की पूरी अवधि. एक वैकल्पिक एट्रिब्यूट जिसे duration="###" से बदला जाना चाहिए, जहां ###, मानक DASH अवधि फ़ॉर्मैट में विज्ञापन की अवधि है. अगर पीरियड की अवधि नहीं दी गई है, तो इस मैक्रो को एक खाली स्ट्रिंग से बदला जाना चाहिए. duration="PT15S"
$$pod-duration$$ इस पॉड के लिए तय किए जाने वाले विज्ञापनों की अनुमानित अवधि (मिलीसेकंड में). 15000
$$number-of-repeated-segments$$ इस वैल्यू का हिसाब लगाने के लिए, विज्ञापन की अवधि (मिलीसेकंड में) को segment_duration_ms की वैल्यू से भाग दिया गया है. इसके बाद, वैल्यू को सबसे करीबी पूरी संख्या तक पूरा किया जाता है. 3
$$cust_params$$ अगर उपलब्ध हो, तो इस मैक्रो को मौजूदा विज्ञापन ब्रेक के लिए खास कस्टम टारगेटिंग पैरामीटर से बदला जा सकता है. वैल्यू को Ad Manager के इस सहायता केंद्र के लेख में बताए गए तरीके के मुताबिक फ़ॉर्मैट किया जाना चाहिए. अगर किसी कस्टम पैरामीटर की ज़रूरत नहीं है, तो इस मैक्रो को खाली स्ट्रिंग से बदल दिया जाना चाहिए. &cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
$$scte35$$ अगर मैक्रो दिया गया है, तो उसे उस विज्ञापन ब्रेक के लिए खास scte35 वैल्यू से बदलना होगा. अगर किसी scte35 जानकारी की ज़रूरत नहीं है, तो इस मैक्रो को खाली स्ट्रिंग से बदला जाना चाहिए. /DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
$$token$$ हस्ताक्षर किया गया, यूआरएल-कोड में बदला गया एचएमएसी टोकन. यह टोकन ज़रूरी है. custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9
रॉ पीरियड टेंप्लेट, जिसमें मैक्रो शामिल हैं
<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$>
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/
  </BaseURL>
  <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">  
    <SegmentTimeline>
      <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>
    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>
अपने-आप जानकारी भरने वाले विज्ञापन की अवधि
<Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>

अपने-आप भरे गए पीरियड को डैश मेनिफ़ेस्ट में डालें

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

रॉ कॉन्टेंट मेनिफ़ेस्ट का उदाहरण
<?xml version="1.0"?>
  <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    <Period start="PT0S">
      <AdaptationSet bitstreamSwitching="true">

        <Representation id="0" codecs="avc1" mimeType="video/mp4" width="1920" height="1080" startWithSAP="1" bandwidth="500000">
          <SegmentBase>
            <Initialization sourceURL="segments/1080/1.m4s" range="0-862"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/1080p/2.m4s" mediaRange="863-7113"/>
            <SegmentURL media="segments/1080p/3.m4s" mediaRange="7114-14104"/>
            <SegmentURL media="segments/1080p/4.m4s" mediaRange="14105-17990"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="1280" height="720" startWithSAP="1" bandwidth="250000">
          <SegmentBase>
            <Initialization sourceURL="segments/720p/1.m4s" range="0-864"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/720p/2.m4s" mediaRange="865-11523"/>
            <SegmentURL media="segments/720p/3.m4s" mediaRange="11524-25621"/>
            <SegmentURL media="segments/720p/4.m4s" mediaRange="25622-33693"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="640" height="480" startWithSAP="1" bandwidth="100000">
          <SegmentBase>
            <Initialization sourceURL="segment/480p/1.m4s" range="0-865"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segment/480p/2.m4s" mediaRange="866-26970"/>
            <SegmentURL media="segment/480p/3.m4s" mediaRange="26971-72543"/>
            <SegmentURL media="segment/480p/4.m4s" mediaRange="72544-95972"/>
            ...
          </SegmentList>
        </Representation>
        ...
      </AdaptationSet>
    </Period end>
  </MPD>
स्टिच किए गए मेनिफ़ेस्ट का उदाहरण
<?xml version="1.0"?>
  <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    
    <Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>
    
</MPD>

बधाई हो! अब डीएआई पॉड सर्विंग एपीआई से मिले विज्ञापन सेगमेंट के साथ DASH लाइव स्ट्रीम की जा रही है.

ज़्यादा रिसॉर्स