वह DAI समाधान चुनें जिसमें आपकी दिलचस्पी है
पॉड सर्विंग डीएआई
IMA SDK की मदद से, मल्टीमीडिया विज्ञापनों को अपनी वेबसाइटों और ऐप्लिकेशन में आसानी से इंटिग्रेट किया जा सकता है.
IMA SDK, वीएएसटी (वीडियो विज्ञापन देने के लिए टेंप्लेट) के साथ काम करने वाले किसी भी विज्ञापन सर्वर से विज्ञापनों का अनुरोध कर सकते हैं. साथ ही, आपके ऐप्लिकेशन में विज्ञापन चलाने की सुविधा को मैनेज कर सकते हैं.
IMA DAI SDK की मदद से, ऐप्लिकेशन विज्ञापन और कॉन्टेंट वीडियो के लिए स्ट्रीम का अनुरोध करते हैं. यह अनुरोध, वीओडी या लाइव कॉन्टेंट के लिए किया जाता है. इसके बाद, SDK टूल एक साथ वीडियो स्ट्रीम दिखाता है, ताकि आपको अपने ऐप्लिकेशन में विज्ञापन और कॉन्टेंट वीडियो के बीच स्विच करने की ज़रूरत न पड़े.
इस गाइड में, CAF के लिए IMA DAI SDK टूल का इस्तेमाल करके, DAI पॉड सर्विंग स्ट्रीम चलाने का तरीका बताया गया है.
इस गाइड का इस्तेमाल करने से पहले, Chromecast ऐप्लिकेशन फ़्रेमवर्क के वेब रिसीवर प्रोटोकॉल के बारे में जानें. इस गाइड में यह मानकर चला गया है कि आपको CAF रिसीवर के बुनियादी सिद्धांतों के बारे में जानकारी है. जैसे, मैसेज इंटरसेप्टर और mediaInformation ऑब्जेक्ट. साथ ही, आपको CAF सेंडर की नकल करने के लिए, Cast Command and Control टूल का इस्तेमाल करना आता है.
IMA DAI पॉड सर्विंग का इस्तेमाल करने के लिए, आपको पॉड सर्विंग पार्टनर के साथ काम करना होगा. साथ ही, आपके पास Ad Manager 360 Advanced खाता होना चाहिए. अगर आपके पास Ad Manager खाता है, तो ज़्यादा जानकारी के लिए अपने खाता मैनेजर से संपर्क करें. Ad Manager के लिए साइन अप करने के बारे में जानने के लिए, Ad Manager सहायता केंद्र पर जाएं.
अन्य प्लैटफ़ॉर्म के साथ इंटिग्रेट करने या IMA क्लाइंट-साइड एसडीके इस्तेमाल करने के बारे में जानकारी पाने के लिए, इंटरैक्टिव मीडिया विज्ञापन एसडीके देखें.
IMA DAI Pod Serving की खास जानकारी
IMA CAF DAI SDK का इस्तेमाल करके पॉड सर्विंग को लागू करने में दो मुख्य कॉम्पोनेंट शामिल होते हैं. इनके बारे में इस गाइड में बताया गया है:
StreamRequest
: यह एक ऐसा ऑब्जेक्ट है जो Google के विज्ञापन सर्वर को स्ट्रीम के अनुरोध के बारे में बताता है. अनुरोधों में नेटवर्क कोड, कस्टम ऐसेट कुंजी, और एपीआई कुंजी (ज़रूरी नहीं) के साथ-साथ अन्य पैरामीटर (ज़रूरी नहीं) शामिल होते हैं.StreamManager
: यह एक ऐसा ऑब्जेक्ट होता है जो वीडियो स्ट्रीम और IMA DAI SDK के बीच कम्यूनिकेशन को मैनेज करता है. जैसे, ट्रैकिंग पिंग को ट्रिगर करना और स्ट्रीम इवेंट को पब्लिशर को फ़ॉरवर्ड करना.
ज़रूरी शर्तें
- Cast Developer Console खाता, जिसमें टेस्ट डिवाइस रजिस्टर किए गए हों.
- होस्ट किया गया वेब रिसीवर ऐप्लिकेशन, जो Cast Developer Console में रजिस्टर हो. साथ ही, जिसमें इस गाइड में दिया गया कोड होस्ट करने के लिए बदलाव किया जा सकता हो.
- भेजने वाला ऐसा ऐप्लिकेशन जिसे आपके वेब रिसीवर ऐप्लिकेशन का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया हो. इस उदाहरण के लिए, कास्ट कमांड और कंट्रोल टूल को सेंडर के तौर पर इस्तेमाल करें.
भेजने वाले के MediaInfo ऑब्जेक्ट कॉन्फ़िगर करना
सबसे पहले, अपने सेंडर ऐप्लिकेशन के MediaInfo
ऑब्जेक्ट को कॉन्फ़िगर करें, ताकि इसमें ये फ़ील्ड शामिल किए जा सकें:
फ़ील्ड | सामग्री | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
contentId
|
इस मीडिया आइटम के लिए यूनीक आइडेंटिफ़ायर.
CONTENT_ID |
||||||||||
contentUrl
|
ज़रूरी नहीं. अगर डीएआई स्ट्रीम लोड नहीं होती है, तो चलाने के लिए बैकअप स्ट्रीम का यूआरएल.
BACKUP_STREAM_URL |
||||||||||
contentType
|
ज़रूरी नहीं. कॉन्टेंट बैकअप स्ट्रीम का माइम टाइप. यह सिर्फ़ DASH
स्ट्रीम के लिए ज़रूरी है.
CONTENT_STREAM_MIMETYPE |
||||||||||
streamType
|
इस वैल्यू के लिए इस्तेमाल किया गया स्ट्रिंग लिटरल या कॉन्स्टेंट, भेजने वाले प्लैटफ़ॉर्म के हिसाब से अलग-अलग होता है. | ||||||||||
customData
|
customData फ़ील्ड में, ज़रूरी अतिरिक्त फ़ील्ड का की-वैल्यू स्टोर होता है. इस सैंपल में, इसमें आपके DAI स्ट्रीम पैरामीटर शामिल हैं. प्रोडक्शन ऐप्लिकेशन में, इसके बजाय एक ऐसा आइडेंटिफ़ायर पास किया जा सकता है जिसका इस्तेमाल आपका Cast रिसीवर ऐप्लिकेशन, सर्वर साइड के अनुरोध के साथ इन पैरामीटर को वापस पाने के लिए करेगा.
|
यहां कुछ कोड सैंपल दिए गए हैं, ताकि आप इसका इस्तेमाल शुरू कर सकें:
वेब
Cast वेब सेंडर में इन वैल्यू को कॉन्फ़िगर करने के लिए, सबसे पहले ज़रूरी डेटा वाला MediaInfo
ऑब्जेक्ट बनाएं. इसके बाद, वेब रिसीवर को लोड करने का अनुरोध करें.
// Create mediaInfo object
const mediaInfo = new chrome.cast.media.MediaInfo("CONTENT_ID");
mediaInfo.contentUrl = "BACKUP_STREAM_URL";
mediaInfo.contentType = "CONTENT_STREAM_MIMETYPE";
mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;
mediaInfo.customData = {
daiStreamType: "DAI_STREAM_TYPE",
networkCode: "NETWORK-CODE",
customAssetKey: "CUSTOM_ASSET_KEY",
apiKey: "API_KEY"
};
// Make load request to cast web receiver
const castSession = cast.framework.CastContext.getInstance().getCurrentSession();
const request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request).then(
() => { console.log('Load succeed'); },
(errorCode) => { console.log('Error code: ' + errorCode); });
Android
Cast वेब सेंडर में इन वैल्यू को कॉन्फ़िगर करने के लिए, सबसे पहले ज़रूरी डेटा के साथ MediaInfo ऑब्जेक्ट बनाएं. इसके बाद, वेब रिसीवर को लोड करने का अनुरोध करें.
JSONObject customData = new JSONObject()?
.put("daiStreamType", "DAI_STREAM_TYPE")
.put("networkCode", "NETWORK-CODE")
.put("customAssetKey", "CUSTOM_ASSET_KEY")
.put("apiKey", "API_KEY");
MediaInfo mediaInfo = MediaInfo.Builder("CONTENT_ID")
.setContentUrl("BACKUP_STREAM_URL")
.setContentType("CONTENT_STREAM_MIMETYPE")
.setStreamType(MediaInfo.STREAM_TYPE_LIVE)
.setCustomData(customData)
.build();
RemoteMediaClient remoteMediaClient = mCastSession.getRemoteMediaClient();
remoteMediaClient.load(new MediaLoadRequestData.Builder().setMediaInfo(mediaInfo).build());
iOS (Obj-C)
Cast वेब सेंडर में इन वैल्यू को कॉन्फ़िगर करने के लिए, सबसे पहले ज़रूरी डेटा वाला GCKMediaInformation
ऑब्जेक्ट बनाएं. इसके बाद, वेब रिसीवर को लोड करने का अनुरोध करें.
NSURL url = [NSURL URLWithString:@"BACKUP_STREAM_URL"];
NSDictionary *customData = @{
@"daiStreamType": @"DAI_STREAM_TYPE",
@"networkCode": @"NETWORK-CODE",
@"customAssetKey": @"CUSTOM_ASSET_KEY",
@"apiKey": @"API_KEY"};
mediaInfoBuilder.customData = customData;
GCKMediaInformationBuilder *mediaInfoBuilder =
[[GCKMediaInformationBuilder alloc] initWithContentID: @"CONTENT_ID"];
mediaInfoBuilder.contentURL = url;
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE";
mediaInfoBuilder.streamType = GCKMediaStreamTypeLive;
mediaInfoBuilder.customData = customData;
self.mediaInformation = [mediaInfoBuilder build];
GCKRequest *request = [self.sessionManager.currentSession.remoteMediaClient loadMedia:self.mediaInformation];
if (request != nil) {
request.delegate = self;
}
iOS (Swift)
Cast वेब सेंडर में इन वैल्यू को कॉन्फ़िगर करने के लिए, सबसे पहले ज़रूरी डेटा वाला GCKMediaInformation
ऑब्जेक्ट बनाएं. इसके बाद, वेब रिसीवर को लोड करने का अनुरोध करें.
let url = URL.init(string: "BACKUP_STREAM_URL")
guard let mediaURL = url else {
print("invalid mediaURL")
return
}
let customData = [
"daiStreamType": "DAI_STREAM_TYPE",
"networkCode": "NETWORK-CODE",
"customAssetKey": "CUSTOM_ASSET_KEY",
"region": "API_KEY"
]
let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentId: "CONTENT_ID")
mediaInfoBuilder.contentURL = mediaUrl
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE"
mediaInfoBuilder.streamType = GCKMediaStreamType.Live
mediaInfoBuilder.customData = customData
mediaInformation = mediaInfoBuilder.build()
guard let mediaInfo = mediaInformation else {
print("invalid mediaInformation")
return
}
if let request = sessionManager.currentSession?.remoteMediaClient?.loadMedia
(mediaInfo) {
request.delegate = self
}
सीएसी टूल
Cast Command and Control tool में इन वैल्यू को कॉन्फ़िगर करने के लिए, Load Media टैब पर क्लिक करें. इसके बाद, कस्टम लोड अनुरोध के टाइप को LOAD पर सेट करें. इसके बाद, टेक्स्ट एरिया में मौजूद JSON डेटा को इस JSON से बदलें:
{
"media": {
"contentId": "CONTENT_ID",
"contentUrl": "BACKUP_STREAM_URL",
"contentType": ""CONTENT_STREAM_MIMETYPE"",
"streamType": "LIVE",
"customData": {
"daiStreamType": "DAI_STREAM_TYPE",
"networkCode": "NETWORK-CODE",
"customAssetKey": "CUSTOM_ASSET_KEY",
"oAuthToken": "API_KEY"
}
}
}
इस कस्टम लोड अनुरोध को पाने वाले व्यक्ति को भेजा जा सकता है, ताकि बाकी चरणों की जांच की जा सके.
बेसिक सीएएफ़ रिसीवर बनाना
CAF SDK Custom Web Receiver Guide में दिए गए निर्देशों के मुताबिक, कस्टम वेब रिसीवर बनाएं.
आपके रिसीवर का कोड ऐसा दिखना चाहिए:
<html>
<head>
<script
src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
</script>
</head>
<body>
<cast-media-player></cast-media-player>
<script>
// ...
</script>
</body>
</html>
IMA DAI SDK इंपोर्ट करें और प्लेयर मैनेजर पाएं
CAF के लिए IMA DAI SDK टूल को अपने वेब रिसीवर में इंपोर्ट करने के लिए, स्क्रिप्ट टैग जोड़ें. इसे CAF लोड करने वाली स्क्रिप्ट के ठीक बाद जोड़ें. स्क्रिप्ट टैग में, रिसीवर शुरू करने से पहले रिसीवर कॉन्टेक्स्ट और प्लेयर मैनेजर को कॉन्स्टेंट के तौर पर सेव करें.
<html>
<head>
<script
src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script>
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
castContext.start();
</script>
</body>
</html>
IMA Stream Manager को शुरू करना
IMA स्ट्रीम मैनेजर को शुरू करें.
<html>
<head>
<script type="text/javascript"
src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script>
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
const streamManager = new google.ima.cast.dai.api.StreamManager();
castContext.start();
</script>
</body>
</html>
स्ट्रीम मैनेजर लोड इंटरसेप्टर बनाना
मीडिया आइटम को सीएएफ़ को भेजने से पहले, लोड मैसेज इंटरसेप्टर में स्ट्रीम का अनुरोध बनाएं.
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
const streamManager = new google.ima.cast.dai.api.StreamManager();
/**
* Creates a livestream request object for a Pod Serving stream.
* @param {!LoadRequestData} castRequest The request object from the cast sender
* @return {StreamRequest} an IMA stream request
*/
const createStreamRequest = (castRequest) => { /* ... */};
/**
* Initates a DAI stream request for the final stream manifest.
* @param {!LoadRequestData} castRequest The request object from the cast sender
* @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
*/
const createDAICastRequest = (castRequest) => {
return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
.then((castRequestWithPodStreamData) => {
console.log('Successfully made DAI stream request.');
// ...
return castRequestWithPodStreamData;
})
.catch((error) => {
console.log('Failed to make DAI stream request.');
// CAF will automatically fallback to the content URL
// that it can read from the castRequest object.
return castRequest;
});
};
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, createDAICastRequest);
castContext.start();
स्ट्रीम करने का अनुरोध बनाना
CAF लोड करने के अनुरोध के आधार पर, पॉड सर्विंग स्ट्रीम बनाने के लिए createStreamRequest
फ़ंक्शन पूरा करें.
/**
* Creates a livestream request object for a Pod Serving stream.
* @param {!LoadRequestData} castRequest The request object from the cast sender
* @return {StreamRequest} an IMA stream request
*/
const createStreamRequest = (castRequest) => {
const customData = castRequest.media.customData;
let streamRequest;
if (customData.daiStreamType == "LIVE") {
streamRequest = new google.ima.cast.dai.api.PodStreamRequest();
streamRequest.customAssetKey = customData.customAssetKey;
streamRequest.networkCode = customData.networkCode;
streamRequest.apiKey = customData.apiKey;
} else if (customData.daiStreamType == "VOD") {
streamRequest = new google.ima.cast.dai.api.PodVodStreamRequest();
streamRequest.networkCode = customData.networkCode;
streamRequest.apiKey = customData.apiKey;
}
return streamRequest;
};
अपने वीटीपी से स्टिच किया गया मेनिफ़ेस्ट वापस पाएं
अगर स्ट्रीम करने का आपका अनुरोध पूरा हो जाता है, तो स्ट्रीम का आईडी वापस पाने के लिए streamManager.getStreamId()
का इस्तेमाल करें. आपका वीडियो टेक्निकल पार्टनर (वीटीपी) या कस्टम मेनिफ़ेस्ट मैनिपुलेटर, इस स्ट्रीम आईडी का इस्तेमाल करके मेनिफ़ेस्ट यूआरएल को वापस पाने के निर्देश देगा.
मेनिफ़ेस्ट यूआरएल मिल जाने के बाद, मौजूदा contentUrl
को नए manifestUrl
से बदलें.
आखिर में, बदली गई स्ट्रीम मेनिफ़ेस्ट को वापस भेजने से पहले, अपने streamManager
पर loadStreamMetadata
तरीके को कॉल करें, ताकि IMA SDK को यह सूचना दी जा सके कि वह स्ट्रीम के मेटाडेटा का सुरक्षित तरीके से अनुरोध कर सकता है. यह कॉल सिर्फ़ वीओडी स्ट्रीम के लिए ज़रूरी है.
/**
* Initates a DAI stream request for the final stream manifest.
* @param {!LoadRequestData} castRequest The request object from the cast sender
* @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
*/
const createDAICastRequest = (castRequest) => {
return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
.then((castRequestWithPodStreamData) => {
console.log('Successfully made DAI stream request.');
// This is a sample VTP integration. Consult your VTP documentation
// for how to retrieve an ad-stitched stream manifest URL.
const manifestTemplate = "https://.../manifest.m3u8?gam_stream_id=[[STREAMID]]";
const streamId = streamManager.getStreamId();
const manifestUrl = manifestTemplate.replace('[[STREAMID]]', streamId)
// Assign your manifestUrl to the request's content URL.
castRequestWithPodStreamData.media.contentUrl = manifestUrl;
// After generating the manifest URL, VOD streams must notify the
// IMA SDK that it is safe to request ad pod metadata.
// This is only necessary for VOD streams. It is a no-op for
// livestreams, so no conditional is needed.
streamManager.loadStreamMetadata();
return castRequestWithPodStreamData;
})
.catch((error) => {
console.log('Failed to make DAI stream request.');
// CAF will automatically fallback to the content URL
// that it can read from the castRequest object.
return castRequest;
});
};
IMA DAI ऐसेट मिटाना
IMA DAI SDK की मदद से, पॉड सर्विंग स्ट्रीम में विज्ञापनों का अनुरोध करने और उन्हें दिखाने की प्रोसेस पूरी होने के बाद, हमारा सुझाव है कि पॉड सर्विंग सेशन पूरा होने के बाद, सभी संसाधनों को हटा दें. स्ट्रीम का प्लेबैक रोकने, विज्ञापन की सभी ट्रैकिंग रोकने, और लोड की गई सभी स्ट्रीम ऐसेट को रिलीज़ करने के लिए, StreamManager.destroy()
को कॉल करें.