IMA SDK আপনার ওয়েবসাইট ও অ্যাপে মাল্টিমিডিয়া বিজ্ঞাপন ইন্টিগ্রেট করার কাজ সহজ করে দেয়।
IMA SDK যেকোনও VAST-মেনে চলা বিজ্ঞাপন সার্ভার থেকে বিজ্ঞাপনের অনুরোধ করতে এবং আপনার অ্যাপে বিজ্ঞাপন প্লেব্যাক ম্যানেজ করতে পারে।
IMA DAI SDK-এর মাধ্যমে, অ্যাপ VOD বা লাইভ কন্টেন্টের জন্য বিজ্ঞাপন ও কন্টেন্ট ভিডিওর স্ট্রিম অনুরোধ করে। 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 ক্লায়েন্ট-সাইড SDK ব্যবহার করার ব্যাপারে আরও তথ্য পেতে, Interactive Media Ads SDK দেখুন।
IMA DAI পড পরিবেশন সংক্রান্ত ওভারভিউ
IMA CAF DAI SDK ব্যবহার করে পড সার্ভিং প্রয়োগ করার ক্ষেত্রে দুটি প্রধান কম্পোনেন্ট রয়েছে, যা এই গাইডে দেখানো হয়েছে:
StreamRequest: একটি অবজেক্ট যা Google-এর বিজ্ঞাপন সার্ভারে স্ট্রিম অনুরোধকে সংজ্ঞায়িত করে। অনুরোধে নেটওয়ার্ক কোড, কাস্টম অ্যাসেট কী এবং ঐচ্ছিক API কী উল্লেখ করা থাকে, এর সাথে অন্যান্য ঐচ্ছিক প্যারামিটারও থাকে।StreamManager: এমন একটি অবজেক্ট যা ভিডিও স্ট্রিম ও IMA DAI SDK-এর মধ্যে যোগাযোগ পরিচালনা করে, যেমন ট্র্যাকিং পিং ফায়ার করা এবং প্রকাশকের কাছে স্ট্রিম ইভেন্ট ফরওয়ার্ড করা।
পূর্বশর্ত
- রেজিস্টার করা টেস্ট ডিভাইস সহ Cast Developer Console অ্যাকাউন্ট।
- একটি হোস্ট করা ওয়েব রিসিভার অ্যাপ যা আপনার Cast Developer Console-এ রেজিস্টার করা আছে এবং যা হোস্ট করার জন্য পরিবর্তন করা যেতে পারে এই নির্দেশিকা দ্বারা প্রদত্ত কোড।
- একটি প্রেরক অ্যাপ যা আপনার ওয়েব রিসিভার অ্যাপ ব্যবহার করার জন্য কনফিগার করা হয়েছে। জন্য এই উদাহরণের উদ্দেশ্য, কাস্ট কমান্ড এবং কন্ট্রোল ব্যবহার করুন আপনার প্রেরক হিসাবে টুল ।
প্রেরকের MediaInfo অবজেক্ট কনফিগার করুন
প্রথমে, আপনার প্রেরক অ্যাপের
MediaInfo অবজেক্ট
কনফিগার করুন যাতে নিম্নলিখিত ফিল্ডগুলি অন্তর্ভুক্ত থাকে:
| ফিল্ড | কন্টেন্ট | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
contentId
|
এই মিডিয়া আইটেমের জন্য অনন্য শনাক্তকারী।
CONTENT_ID |
||||||||||
contentUrl
|
ঐচ্ছিক। DAI স্ট্রিম লোড না হলে ব্যাক-আপ স্ট্রিম URL চালানো হবে।
BACKUP_STREAM_URL |
||||||||||
contentType
|
ঐচ্ছিক। কন্টেন্ট ব্যাক-আপ স্ট্রিমের MIME-এর ধরন। শুধুমাত্র DASH
স্ট্রিমের জন্য প্রয়োজন।
CONTENT_STREAM_MIMETYPE |
||||||||||
streamType
|
এই ভ্যালুর জন্য ব্যবহৃত স্ট্রিং লিটারেল বা কনস্ট্যান্ট প্রেরকের প্ল্যাটফর্ম অনুযায়ী আলাদা হয়। | ||||||||||
customData
|
customData ফিল্ডে অতিরিক্ত প্রয়োজনীয় ফিল্ডের
কী-ভ্যালু স্টোর থাকে। এই স্যাম্পেলে আপনার DAI স্ট্রিম প্যারামিটার রয়েছে। প্রোডাকশন
অ্যাপে আপনি এর পরিবর্তে একটি শনাক্তকারী পাস করতে পারেন যা আপনার কাস্ট
রিসিভার অ্যাপ সার্ভার-সাইড অনুরোধের মাধ্যমে এইসব প্যারামিটার ফিরিয়ে আনতে
ব্যবহার করবে।
|
শুরু করার জন্য আপনাকে সাহায্য করতে এখানে কিছু কোড স্যাম্পেল দেওয়া হল:
ওয়েব
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
}
CAC টুল
Cast Command and Control টুল-এ এইসব ভ্যালু কনফিগার করতে, 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 রিসিভার তৈরি করুন
CAF SDK কাস্টম ওয়েব রিসিভার গাইড-এ যেমন দেখানো হয়েছে, সেই অনুযায়ী কাস্টম ওয়েব রিসিভার তৈরি করুন।
আপনার প্রাপকের কোডটি এইরকম দেখতে হবে:
<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 লোড করার স্ক্রিপ্টের ঠিক পরে, আপনার ওয়েব রিসিভারে CAF-এর জন্য IMA DAI SDK ইমপোর্ট করতে স্ক্রিপ্ট ট্যাগ যোগ করুন। স্ক্রিপ্ট ট্যাগে, রিসিভার শুরু করার আগে রিসিভার কনটেক্সট এবং প্লেয়ার ম্যানেজারকে কনস্ট্যান্ট হিসেবে স্টোর করুন।
<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 Stream Manager শুরু করুন।
<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>
স্ট্রিম ম্যানেজার লোড ইন্টারসেপ্টর তৈরি করুন
আপনার মিডিয়া আইটেম CAF-এ পাস করার আগে, LOAD মেসেজ ইন্টারসেপ্টর-এ আপনার স্ট্রিম অনুরোধ তৈরি করুন।
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;
};
আপনার VTP থেকে স্টিচ করা ম্যানিফেস্ট ফিরিয়ে আনুন
আপনার স্ট্রিম অনুরোধ সফল হলে, স্ট্রিমের আইডি
উদ্ধার করতে streamManager.getStreamId() ব্যবহার করুন। আপনার ভিডিও টেকনিক্যাল পার্টনার (VTP) বা কাস্টম ম্যানিফেস্ট
ম্যানিপুলেটর এই স্ট্রিম আইডি ব্যবহার করে ম্যানিফেস্ট URL ফিরিয়ে আনার নির্দেশাবলী প্রদান করবে।
আপনার ম্যানিফেস্ট URL ফিরিয়ে আনার পরে, বর্তমান contentUrl-এর জায়গায়
নতুন manifestUrl যোগ করুন।
সবশেষে, পরিবর্তিত স্ট্রিম ম্যানিফেস্ট ফিরিয়ে দেওয়ার আগে, আপনার
streamManager-এ
loadStreamMetadata
মেথড কল করুন
যাতে IMA SDK-কে জানানো যায় যে এটি নিরাপদে স্ট্রিম মেটাডেটার অনুরোধ করতে পারে। এই কলটি শুধুমাত্র
VOD স্ট্রিমের জন্য প্রয়োজন।
/**
* 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() কল করুন।