আপনি যে DAI সমাধান ব্যবহার করতে চান সেটি বেছে নিন
পড পরিবেশনকারী DAI
IMA SDK আপনার ওয়েবসাইট ও অ্যাপে মাল্টিমিডিয়া বিজ্ঞাপন ইন্টিগ্রেট করার প্রসেসকে সহজ করে তোলে।
IMA SDK যেকোনও VAST-মেনে চলা বিজ্ঞাপন সার্ভার থেকে বিজ্ঞাপনের অনুরোধ করতে এবং আপনার অ্যাপে বিজ্ঞাপন প্লেব্যাক ম্যানেজ করতে পারে।
IMA DAI SDK-এর মাধ্যমে, অ্যাপগুলি VOD বা লাইভ কন্টেন্টের জন্য বিজ্ঞাপন ও কন্টেন্ট ভিডিওর স্ট্রিমের অনুরোধ করে। SDK তারপরে একটি সম্মিলিত ভিডিও স্ট্রিম রিটার্ন করে, যাতে আপনাকে নিজের অ্যাপের মধ্যে বিজ্ঞাপন এবং কন্টেন্ট ভিডিওর মধ্যে পরিবর্তন ম্যানেজ করতে না হয়।
এই গাইড দেখায় যে কীভাবে CAF-এর জন্য IMA DAI SDK ব্যবহার করে DAI Pod Serving স্ট্রিম চালাতে হয়।
এই নির্দেশিকা ব্যবহার করার আগে, Chromecast অ্যাপ্লিকেশন ফ্রেমওয়ার্কের ওয়েব রিসিভার প্রোটোকল সম্পর্কে ভালোভাবে জেনে নিন। এই নির্দেশিকায় ধরে নেওয়া হয়েছে যে CAF রিসিভার কনসেপ্ট সম্পর্কে আপনার প্রাথমিক ধারণা আছে, যেমন মেসেজ ইন্টারসেপ্টর ও mediaInformation অবজেক্ট এবং CAF প্রেরক এমুলেট করার জন্য Cast কমান্ড ও কন্ট্রোল টুল ব্যবহার করার ব্যাপারে আপনি পরিচিত।
IMA DAI Pod Serving ব্যবহার করতে হলে, আপনাকে অবশ্যই Pod Serving পার্টনারের সাথে কাজ করতে হবে এবং 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 টুল
কাস্ট কমান্ড ও কন্ট্রোল টুলে এইসব ভ্যালু কনফিগার করতে, 'মিডিয়া লোড করুন' ট্যাবে ক্লিক করুন এবং কাস্টম লোড অনুরোধের ধরন 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-এর জন্য 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 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 যোগ করুন।
সবশেষে, পরিবর্তিত স্ট্রিম ম্যানিফেস্ট ফেরত দেওয়ার আগে, IMA SDK-কে জানানোর জন্য আপনার
streamManager
এ
loadStreamMetadata
মেথড কল করুন যাতে এটি নিরাপদে স্ট্রিম মেটাডেটা অনুরোধ করতে পারে। এই কলটি
শুধুমাত্র 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() কল করুন।