इस गाइड में, Pod serving API और मेनिफ़ेस्ट मैनिपुलेटर की मदद से, HLS या DASH लाइवस्ट्रीम लोड करने के लिए क्लाइंट ऐप्लिकेशन डेवलप करने के बारे में बताया गया है.
ज़रूरी शर्तें
जारी रखने से पहले, आपके पास ये चीज़ें होनी चाहिए:
Pod serving redirectDAI टाइप के साथ कॉन्फ़िगर किए गए लाइव स्ट्रीम इवेंट के लिए, कस्टम ऐसेट की. यह कुंजी पाने के लिए, यह तरीका अपनाएं:LiveStreamEventऑब्जेक्ट के साथLiveStreamEventService.createLiveStreamEventsतरीके को कॉल करने के लिए, SOAP API क्लाइंट लाइब्रेरी का इस्तेमाल करें. साथ ही,dynamicAdInsertionTypeप्रॉपर्टी कोPOD_SERVING_REDIRECTenum वैल्यू पर सेट करें. सभी क्लाइंट लाइब्रेरी के लिए, क्लाइंट लाइब्रेरी और उदाहरण कोड देखें.
यह पता लगाएं कि इंटरैक्टिव मीडिया विज्ञापन (आईएमए) SDK टूल, आपके प्लैटफ़ॉर्म के लिए उपलब्ध है या नहीं. हमारा सुझाव है कि रेवेन्यू बढ़ाने के लिए, IMA SDK का इस्तेमाल करें. ज़्यादा जानकारी के लिए, DAI के लिए IMA SDK सेट अप करना लेख पढ़ें.
स्ट्रीम करने का अनुरोध करना
जब आपका उपयोगकर्ता कोई स्ट्रीम चुनता है, तो यह तरीका अपनाएं:
लाइव स्ट्रीम करने की सेवा के तरीके के लिए,
POSTअनुरोध करें. ज़्यादा जानकारी के लिए, तरीका: स्ट्रीम देखें.विज्ञापन टारगेटिंग पैरामीटर को
application/x-www-form-urlencodedयाapplication/jsonफ़ॉर्मैट में पास करें. इस अनुरोध से, स्ट्रीम सेशन को Google DAI के साथ रजिस्टर किया जाता है.यहां दिए गए उदाहरण में, स्ट्रीम करने का अनुरोध किया गया है:
फ़ॉर्म एन्कोडिंग
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const params = new URLSearchParams({ cust_params: 'section=sports&page=golf,tennis' }).toString(); const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params }); console.log(await response.json());JSON एन्कोडिंग
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ cust_params: { section: 'sports', page: 'golf,tennis' } }) }); console.log(await response.json());अगर यह प्रोसेस पूरी हो जाती है, तो आपको कुछ ऐसा आउटपुट दिखेगा:
{ "stream_id": "c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS", "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/", "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata", "session_update_url": "https://dai.google.com/linear/.../session", "polling_frequency": 10 }JSON रिस्पॉन्स में, स्ट्रीम सेशन आईडी ढूंढें और अगले चरणों के लिए अन्य डेटा सेव करें.
पोल वाले विज्ञापन का मेटाडेटा
विज्ञापन के मेटाडेटा को पोल करने के लिए, यह तरीका अपनाएं:
स्ट्रीम रजिस्ट्रेशन के जवाब से
metadata_urlवैल्यू पढ़ें.metadata_urlएंडपॉइंट पर शुरुआतीGETअनुरोध करें.delta_tokenक्वेरी पैरामीटर को शामिल न करें. इस प्रोसेस से सर्वर, स्ट्रीम के डिजिटल वीडियो रिकॉर्डर (डीवीआर) विंडो के लिए पूरा मेटाडेटा वापस भेज पाता है. डीवीआर विंडो में, ब्रॉडकास्ट की वह समयावधि होती है जिसके दौरान दर्शक, ब्रॉडकास्ट को रिवाइंड करके चला सकते हैं. जवाब मेंnext_delta_tokenफ़ील्ड शामिल है.
बैंडविथ को ऑप्टिमाइज़ करने के लिए, सबसे हाल ही के रिस्पॉन्स से
next_delta_tokenवैल्यू सेव करें.अगले अनुरोध में, उस वैल्यू को
delta_tokenक्वेरी पैरामीटर के तौर पर भेजें. सर्वर सिर्फ़ उस मेटाडेटा को दिखाता है जो टोकन जनरेट होने के बाद बदला गया है. आपको जो नया टोकन मिला है उसे हमेशा भेजें. टोकन को पार्स करने, उसमें बदलाव करने या उसे बनाने की कोशिश न करें. ज़्यादा जानकारी के लिए, तरीका: मेटाडेटा देखें.यहां दिए गए उदाहरण में, विज्ञापन का मेटाडेटा फ़ेच करने का तरीका बताया गया है:
// Initial request (returns full metadata and next_delta_token) let response = await fetch(metadata_url); let metadata = await response.json(); let deltaToken = metadata.next_delta_token; // Subsequent request (returns only changes since deltaToken) if (deltaToken) { const url = new URL(metadata_url); url.searchParams.append('delta_token', deltaToken); response = await fetch(url.toString()); const deltaMetadata = await response.json(); // Merge deltaMetadata into your local cache mergeMetadata(metadata, deltaMetadata); deltaToken = deltaMetadata.next_delta_token; }अगर अनुरोध पूरा हो जाता है, तो आपको PodMetadata जवाब मिलता है.
delta_tokenपैरामीटर देने पर, रिस्पॉन्स में सिर्फ़ वे विज्ञापन, विज्ञापन ब्रेक, और टैग शामिल होते हैं जिन्हें सर्वर ने टोकन जनरेट करने के बाद जोड़ा या अपडेट किया है. जवाब में,next_delta_tokenकी नई वैल्यू भी शामिल है. अगर कोई विज्ञापन ब्रेक पुराना हो गया है, तो जवाब मेंobsolete_ad_break_idsविज्ञापन ब्रेक की एक सूची भी शामिल होती है. आपको इस सूची में दिए गए विज्ञापन ब्रेक को अपनी कैश मेमोरी से हटाना होगा.{ "next_delta_token": "eyJyYW5nZXMiOlt7InMiOjEsImUiOjN9XX0", "obsolete_ad_break_ids": ["0003069407"], "tags":{ "google_1022389921":{ "ad":"0003069408_ad1", "ad_break_id":"0003069408", "type":"start" }, ... }, "ads":{ "0003069408_ad1":{ "ad_break_id":"0003069408", "position":1, "duration":10.01, "title":"External - Pod Midroll 1", "clickthrough_url":"https://.../", ... }, ... }, "ad_breaks":{ "0003069408":{ "type":"mid", "duration":30, "ads":3 }, ... } }tagsऑब्जेक्ट को सेव करें और अपडेट को अपनी लोकल कैश मेमोरी में मर्ज करें. अगरobsolete_ad_break_idsपैरामीटर मौजूद है, तो विज्ञापन के लिए ब्रेक और उनसे जुड़े विज्ञापनों और टैग को अपनी कैश मेमोरी से हटाएं.मेटाडेटा के लिए नियमित तौर पर अनुरोध करने के लिए,
polling_frequencyवैल्यू का इस्तेमाल करके टाइमर सेट करें. हर पोल में, मेटाडेटा के सबसे नए जवाब में मिलीnext_delta_tokenवैल्यू कोdelta_tokenक्वेरी पैरामीटर के तौर पर भेजें.
स्ट्रीम को अपने वीडियो प्लेयर में लोड करना
रजिस्ट्रेशन के जवाब से सेशन आईडी मिलने के बाद, इसे अपने मेनिफ़ेस्ट मैनिपुलेटर को पास करें. इसके अलावा, वीडियो प्लेयर में स्ट्रीम लोड करने के लिए, मेनिफ़ेस्ट यूआरएल बनाया जा सकता है.
सेशन आईडी पास करने के लिए, मेनिफ़ेस्ट मैनिपुलेटर का दस्तावेज़ देखें. अगर आपको मेनिफ़ेस्ट मैनिपुलेटर डेवलप करना है, तो लाइव स्ट्रीम के लिए मेनिफ़ेस्ट मैनिपुलेटर देखें.
यहां दिए गए उदाहरण में, मेनिफ़ेस्ट यूआरएल को असेंबल करने का तरीका बताया गया है:
https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"
जब आपका प्लेयर तैयार हो जाए, तब वीडियो चलाना शुरू करें.
विज्ञापन इवेंट को मॉनिटर करने की अनुमति
टाइम किए गए मेटाडेटा के लिए, अपनी स्ट्रीम के कंटेनर फ़ॉर्मैट की जांच करें:
ट्रांसपोर्ट स्ट्रीम (टीएस) कंटेनर वाली एचएलएस स्ट्रीम, टाइमस्टैंप किए गए आईडी3 टैग का इस्तेमाल करती हैं. इससे टाइमस्टैंप किया गया मेटाडेटा ट्रांसफ़र किया जाता है. ज़्यादा जानकारी के लिए, एचटीटीपी लाइव स्ट्रीमिंग (एचएलएस) के साथ काम करने वाले कॉमन मीडिया ऐप्लिकेशन फ़ॉर्मैट के बारे में जानकारी लेख पढ़ें.
DASH स्ट्रीम, मेनिफ़ेस्ट में इवेंट तय करने के लिए
EventStreamएलिमेंट का इस्तेमाल करती हैं.जब सेगमेंट में पेलोड डेटा के लिए इवेंट मैसेज (
emsg) बॉक्स शामिल होते हैं, तब DASH स्ट्रीमInbandEventStreamएलिमेंट का इस्तेमाल करती हैं. इनमें ID3 टैग भी शामिल होते हैं. ज़्यादा जानकारी के लिए, InbandEventStream देखें.सीएमएएफ़ स्ट्रीम, जैसे कि DASH और HLS, में
emsgबॉक्स का इस्तेमाल किया जाता है. इनमें आईडी3 टैग होते हैं.
अपनी स्ट्रीम से आईडी3 टैग वापस पाने के लिए, अपने वीडियो प्लेयर की गाइड देखें. ज़्यादा जानकारी के लिए, समय के हिसाब से मेटाडेटा मैनेज करने से जुड़ी गाइड पढ़ें
आईडी3 टैग से विज्ञापन का इवेंट आईडी वापस पाने के लिए, यह तरीका अपनाएं:
urn:google:dai:2018याhttps://aomedia.org/emsg/ID3के साथscheme_id_uriके हिसाब से इवेंट फ़िल्टर करें.message_dataफ़ील्ड से बाइट ऐरे निकालें.यहां दिए गए उदाहरण में,
emsgडेटा को JSON में डिकोड किया गया है:{ "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3", "presentation_time": 27554, "timescale": 1000, "message_data": "ID3TXXXgoogle_1022389921", ... }आईडी3 टैग को
TXXXgoogle_{ad_event_ID}फ़ॉर्मैट के हिसाब से फ़िल्टर करें:TXXXgoogle_1022389921
विज्ञापन इवेंट का डेटा दिखाएं
TagSegment ऑब्जेक्ट ढूंढने के लिए, यह तरीका अपनाएं:
Poll ad metadata से विज्ञापन का मेटाडेटा
tagsऑब्जेक्ट वापस पाएं.tagsऑब्जेक्ट,TagSegmentऑब्जेक्ट का ऐरे होता है.टाइप
progressवालाTagSegmentऑब्जेक्ट ढूंढने के लिए, विज्ञापन के इवेंट के पूरे आईडी का इस्तेमाल करें.विज्ञापन के इवेंट आईडी के पहले 17 वर्णों का इस्तेमाल करके, अन्य टाइप का
TagSegmentऑब्जेक्ट ढूंढें.आपका क्लाइंट ऐप्लिकेशन, विज्ञापन के मेटाडेटा को समय-समय पर पोल करता है. इसलिए, ऐसा हो सकता है कि स्ट्रीम में ID3 टैग दिखने और आपके वीडियो प्लेयर में उससे जुड़ा मेटाडेटा उपलब्ध होने के बीच कुछ समय लगे. अगर आपके क्लाइंट ऐप्लिकेशन को सेव किए गए टैग में ID3 टैग नहीं मिलता है, तो टैग को एक कतार में रखें और अगले मेटाडेटा पोल के बाद टैग को फिर से प्रोसेस करें. प्रोसेसिंग पूरी होने तक टैग को कतार में रखें.
TagSegmentमिलने के बाद,ad_break_idप्रॉपर्टी का इस्तेमाल कुंजी के तौर पर करें. इससे आपको विज्ञापन के मेटाडेटाad_breaksऑब्जेक्ट मेंAdBreakऑब्जेक्ट ढूंढने में मदद मिलेगी.यहां दिए गए उदाहरण में,
AdBreakऑब्जेक्ट को खोजा गया है:{ "type":"mid", "duration":15, "ads":1 }विज्ञापन ब्रेक में विज्ञापन की पोज़िशन के बारे में जानकारी दिखाने के लिए,
TagSegmentऔरAdBreakडेटा का इस्तेमाल करें. उदाहरण के लिए,Ad 1 of 3.
मीडिया की पुष्टि करने के लिए पिंग भेजना
progress टाइप को छोड़कर, हर विज्ञापन के इवेंट के लिए मीडिया की पुष्टि करने वाला पिंग भेजें.
Google DAI, progress इवेंट को खारिज कर देता है. इन इवेंट को बार-बार भेजने से, आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर असर पड़ सकता है.
विज्ञापन इवेंट के मीडिया की पुष्टि करने वाला पूरा यूआरएल जनरेट करने के लिए, यह तरीका अपनाएं:
स्ट्रीम रिस्पॉन्स से, विज्ञापन का इवेंट का पूरा आईडी
media_verification_urlवैल्यू में जोड़ें.पूरे यूआरएल के साथ
GETअनुरोध करें:// media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/" const completeUrl = `${media_verification_url}google_1022389921`; const response = await fetch(completeUrl);अगर कोड मान्य होता है, तो आपको
202कोड स्टेटस का जवाब मिलता है. ऐसा न होने पर, आपको404गड़बड़ी कोड मिलेगा.
सभी विज्ञापन इवेंट के पुराने लॉग की जांच करने के लिए, स्ट्रीम ऐक्टिविटी मॉनिटर (एसएएम) का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, लाइव स्ट्रीम को मॉनिटर करना और उसमें आने वाली समस्याओं को हल करना लेख पढ़ें