पॉड सर्विंग एपीआई, एन्कोड किए गए और शर्तों के मुताबिक विज्ञापन सेगमेंट का ऐक्सेस देता है. इन्हें इस तरह से तैयार किया जाता है कि इन्हें सीधे तौर पर, उपयोगकर्ता के सामने दिखने वाली एचएलएस या एमपीईजी-डीएश मीडिया प्लेलिस्ट में जोड़ा जा सके. MPEG-DASH के लिए, Pod Serving API इन विज्ञापनों के बारे में ज़्यादा जानकारी और कॉन्टेक्स्ट देने के लिए मेनिफ़ेस्ट टेंप्लेट सेगमेंट.
इस गाइड में, पॉड सर्विंग मेनिफ़ेस्ट फ़ाइल में बुनियादी बदलाव करने के बारे में बताया गया है लाइव स्ट्रीम के लिए सर्वर.
ज़रूरी शर्त: Google Ad Manager में लाइव स्ट्रीम इवेंट कॉन्फ़िगर करना
podServing API से कोई अनुरोध करने से पहले, आपको एक विज्ञापन बनाना होगा
प्रोसेस की जाने वाली हर स्ट्रीम के लिए, मैनेजर लाइव स्ट्रीम इवेंट. LiveStreamEventService API
या Google Ad Manager के वेब इंटरफ़ेस का इस्तेमाल करके, लाइव स्ट्रीम इवेंट बनाया जा सकता है.
पॉड सर्विंग एपीआई के साथ लाइव स्ट्रीम इवेंट का इस्तेमाल करने के लिए, आपको अपने इवेंट के कई एट्रिब्यूट की जानकारी देनी होगी:
customAssetKey
- इस इवेंट के लिए इस्तेमाल किया जाने वाला कस्टम आइडेंटिफ़ायर. होना चाहिए यह नेटवर्क के सभी इवेंट के लिए यूनीक होता है.adTags
- Ad Manager ट्रैफ़िकिंग से जनरेट हुआ प्राइमरी विज्ञापन टैग यूआरएल वर्कफ़्लो.dynamicAdInsertionType
-POD_SERVING_REDIRECT
पर सेट होना चाहिए.streamingFormat
- इसके हिसाब सेHLS
याDASH
पर सेट करें.segmentUrlAuthenticationKeyIds
- विज्ञापन सेगमेंट के अनुरोधों पर हस्ताक्षर करने के लिए, कम से कम एक एचएमएसी कुंजी का इस्तेमाल किया जाता है.daiEncodingProfileIds
- इस इवेंट के लिए चालू किए गए DAIEncodingProfile आईडी की सूची.startDateTime
- इवेंट शुरू होने की तारीख और समयendDateTime
- इस इवेंट के खत्म होने की शेड्यूल की गई तारीख और समय. अगरunlimitedEndDateTime
is false and ignored if
unlimitedEndDateTimeis true.
unlimitedEndDateTime` - बूलियन है, तो इस एट्रिब्यूट की वैल्यू देना ज़रूरी है. ऊपर देखें.
स्ट्रीम मेनिफ़ेस्ट के अनुरोध पाना
मेनिफ़ेस्ट को सुनने के लिए, आपके मेनिफ़ेस्ट मेनिफ़ैक्चरर को एक एपीआई एंडपॉइंट उपलब्ध कराना होगा वीडियो प्लेयर क्लाइंट ऐप्लिकेशन से मिले अनुरोध. कम से कम इस एंडपॉइंट में क्लाइंट प्लेयर ऐप्लिकेशन से स्ट्रीम आईडी इकट्ठा करता है. साथ ही, एक-एक करके स्टिच किया जाता है स्ट्रीम मेनिफ़ेस्ट किया जा सकता है. स्ट्रीम आईडी का इस्तेमाल, विज्ञापन के स्ट्रीमिंग सेशन की पहचान करने के लिए किया जाता है मैनेजर.
सही कॉन्टेंट स्ट्रीम की पहचान करने के लिए, आपको कुछ और जानकारी भी इकट्ठा करनी होगी. जैसे, Content ID.
संभावित मेनिफ़ेस्ट अनुरोध एंडपॉइंट का उदाहरण
GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
पाथ पैरामीटर | |||||
---|---|---|---|---|---|
asset_key |
आपके सिस्टम में, अनुरोध की गई लाइव स्ट्रीम से जुड़ा एक काल्पनिक आईडी. | ||||
format |
स्ट्रीम फ़ॉर्मैट से जुड़ा एक काल्पनिक पैरामीटर. इनमें से कोई एक:
|
क्वेरी पैरामीटर | |
---|---|
stream_id |
क्लाइंट वीडियो प्लेयर ऐप्लिकेशन से Ad Manager स्ट्रीम आईडी. |
कॉन्टेंट स्ट्रीम वापस पाना
कॉन्टेंट चुनने के लिए, मेनिफ़ेस्ट अनुरोध से इकट्ठा किए गए Content ID का इस्तेमाल करें स्ट्रीम करने के लिए वीडियो विज्ञापनों से जोड़ें.
विज्ञापन सेगमेंट को कॉन्टेंट स्ट्रीम में जोड़ें
स्ट्रीम फ़ॉर्मैट के आधार पर, विज्ञापन सेगमेंट के यूआरएल अलग-अलग होंगे.
एचएलएस स्ट्रीम
आम तौर पर, एचएलएस स्ट्रीम को मल्टीवैरिएंट मेनिफ़ेस्ट के तौर पर दिखाया जाता है. इसमें वैरिएंट मेनिफ़ेस्ट के लिंक का एक सेट होता है, जो हर एन्कोडिंग प्रोफ़ाइल से जुड़ा होता है.
ध्यान दें: इसे आसानी से समझने के लिए, इस गाइड में यह माना गया है कि आपका एचएलएस मीडिया यह एक ही सेगमेंट फ़ाइल में ऑडियो और वीडियो को मर्ज करता है.
प्रॉक्सी मल्टीवेरिएंट प्लेलिस्ट
आपको ओरिजनल मल्टीवैरिएंट प्लेलिस्ट में मौजूद हर वैरिएंट प्लेलिस्ट के यूआरएल को, मैनिपुलेटर के दूसरे एंडपॉइंट कॉल से बदलना होगा. ऐसा, प्लेयर के चुने गए वैरिएंट मेनिफ़ेस्ट को प्रोसेस करने के लिए करना होगा.
एचएलएस को स्टिच करने के बाकी चरण, यह मानेंगे कि एक ही वैरिएंट मेनिफ़ेस्ट है प्रोसेस किया जा रहा है.
संभावित वैरिएंट के अनुरोध के एंडपॉइंट का उदाहरण
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_identifier}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
पाथ पैरामीटर | |
---|---|
network_code
|
इस नेटवर्क के लिए Ad Manager 360 नेटवर्क कोड. |
custom_asset_key
|
LiveStreamEventService एपीआई या Ad Manager 360 के वेब इंटरफ़ेस में लाइव स्ट्रीम पेज पर बताई गई, कस्टम लाइव स्ट्रीम एसेट की. |
pod_identifier |
ये फ़ॉर्मैट काम करते हैं: pod/{integer}
मौजूदा विज्ञापन के लिए अंकों वाला आइडेंटिफ़ायर. विज्ञापन पॉड आईडी ये हैं
विज्ञापन के लिए ब्रेक के हर इवेंट के लिए, 'बढ़ोतरी' क्रम से असाइन किए गए होंगे. ये इवेंट इतने बजे से शुरू होंगे
ad_break_id/{string}
विज्ञापन के लिए मौजूदा ब्रेक के लिए स्ट्रिंग आइडेंटिफ़ायर. |
profile_name
|
अनुरोध की जा रही प्रोफ़ाइल का आइडेंटिफ़ायर, |
segment_number
|
विज्ञापनों के मौजूदा पॉड में इस सेगमेंट का इंडेक्स, शून्य से शुरू होता है. MP4 कंटेनर का इस्तेमाल करते समय, segment_number को "init" पर सेट करके शुरू करने वाले सेगमेंट का अनुरोध किया जा सकता है. |
क्वेरी पैरामीटर | ||
---|---|---|
stream_id
|
ज़रूरी है | स्ट्रीम बनाने के अनुरोध से मिला उपयोगकर्ता का stream_id पैरामीटर.
|
sd
|
ज़रूरी है | segment_duration
|
so
|
वैकल्पिक | segment_offset
अगर |
pd
|
यह जानकारी देना ज़रूरी है. हालांकि, जिन इवेंट में विज्ञापन के लिए कोई ब्रेक नहीं है उनके लिए यह जानकारी देना ज़रूरी नहीं है | विज्ञापन के लिए ब्रेक की अवधि (मिलीसेकंड में). इसे
ad_pod_duration भी कहा जाता है.
|
auth-token
|
ज़रूरी है | यूआरएल को कोड में बदला गया और हस्ताक्षर किया गया HMAC टोकन इस विज्ञापन पॉड के लिए. |
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/ad_break_id/adbreak1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=ad_break_id%3adbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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
बधाई हो! अब आप एक ऐसी लाइव स्ट्रीम पेश कर रहे हैं, जिसमें विज्ञापन सेगमेंट दिए गए हैं: DAI पॉड सर्विंग एपीआई के साथ काम करता है.
DASH स्ट्रीम
DASH स्ट्रीम, एमपीडी फ़ाइल के तौर पर उपलब्ध कराई जाती हैं. इसमें एक ही फ़ाइल में सभी स्ट्रीम को एन्कोड किया जाता है. इसमें कॉन्टेंट को समयावधि की सीरीज़ के तौर पर दिखाया जाता है.
अनुरोध की अवधि के लिए टेंप्लेट
Google Ad Manager से, अवधि के टेंप्लेट का अनुरोध करें. यह टेंप्लेट आपका विज्ञापन के लिए ब्रेक की अवधि. इसमें शामिल मैक्रो की जानकारी अपने-आप भर जाती है.
आपको हर स्ट्रीम सेशन के लिए, इस टेंप्लेट का सिर्फ़ एक बार अनुरोध करना चाहिए और इसे साथ ही, विज्ञापन के लिए यह तरीका इस्तेमाल भी किया जा सकता है.
पीरियड टेंप्लेट अनुरोध Endpointhjf
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}&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&scte35=$$scte35$$&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="###" से बदला जाना चाहिए. 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$$ |
यूआरएल को कोड में बदला गया और हस्ताक्षर किया गया HMAC टोकन. यह टोकन ज़रूरी है. |
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&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&scte35=$$scte35$$&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&sd=5000&pd=30000&cust_params=&auth-token=&scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&pd=30000&cust_params=&auth-token=&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>
DASH मेनिफ़ेस्ट में, अपने पॉप्युलेट किए गए पीरियड को डालें
आखिर में, अपने रॉ मेनिफ़ेस्ट में सही पीरियड को नए अपने-आप भरी हुई विज्ञापन अवधि सेट करें और अनुरोध वाले पेज पर जोड़े गए आखिरी मेनिफ़ेस्ट को दिखाएं वीडियो क्लाइंट.
रॉ कॉन्टेंट मेनिफ़ेस्ट का उदाहरण
<?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&sd=5000&pd=30000&cust_params=&auth-token=&scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&pd=30000&cust_params=&auth-token=&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 लाइवस्ट्रीम पेश कर रहे हैं DAI Pod Serving API की मदद से.
अन्य संसाधन
- IMA SDK टूल की मदद से पॉडकास्ट चलाना:
- डीएआई की मदद से पॉड का इस्तेमाल किया जा रहा है एपीआई