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

Pod Serving API, कोड में बदले और कंडीशन किए गए विज्ञापन सेगमेंट का ऐक्सेस देता है. इस तरह से तैयार किए जाते हैं कि उन्हें सीधे इस्तेमाल किए जा सकने वाले HLS में स्टिच किया जा सकता है या MPEG-DASH मीडिया प्लेलिस्ट. 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 - कम से कम एक HMAC कुंजी का इस्तेमाल विज्ञापन सेगमेंट के अनुरोधों पर हस्ताक्षर करने के लिए किया जाता है.
  • daiEncodingProfileIds - DAIEncodingProfile इस इवेंट के लिए आईडी चालू किए गए.
  • startDateTime - इवेंट शुरू होने की तारीख और समय
  • endDateTime - इस इवेंट के खत्म होने की शेड्यूल की गई तारीख और समय. यह एट्रिब्यूट अगर unlimitedEndDateTimeis false and ignored ifunlimitedEndDateTimeis true.unlimitedEndDateTime` - बूलियन है, तो ज़रूरी है. ऊपर देखें.

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

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

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

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

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
पाथ पैरामीटर
asset_key आपके सिस्टम में, अनुरोध की गई लाइव स्ट्रीम से जुड़ा एक काल्पनिक आईडी.
format स्ट्रीम फ़ॉर्मैट से जुड़ा एक काल्पनिक पैरामीटर. इनमें से कोई एक:
mpd MPEG-DASH स्ट्रीम के लिए
m3u8 एचएलएस स्ट्रीम के लिए
क्वेरी पैरामीटर
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: विज्ञापनों के पॉड में सेगमेंट का इंडेक्स, जिसकी शुरुआत शून्य से होती है. या "init" mp4 शुरू करने वाले सेगमेंट के लिए.
  • 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 ज़रूरी है यूआरएल को कोड में बदला गया और हस्ताक्षर किया गया 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/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

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

DASH स्ट्रीम

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

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

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}&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="###" से बदल दिया जाएगा, जहां ### विज्ञापन अवधि की अवधि को स्टैंडर्ड डैश अवधि फ़ॉर्मैट में बदला जा सकता है. अगर अवधि की अवधि प्रदान नहीं की गई है, इस मैक्रो को किसी खाली स्ट्रिंग. 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&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 लाइवस्ट्रीम पेश कर रहे हैं DAI Pod Serving API की मदद से.

अन्य संसाधन