IMA DAI SDK দিয়ে শুরু করুন

আপনি আগ্রহী DAI সমাধান নির্বাচন করুন

পড পরিবেশন DAI

IMA SDKগুলি আপনার ওয়েবসাইট এবং অ্যাপে মাল্টিমিডিয়া বিজ্ঞাপনগুলিকে একীভূত করা সহজ করে৷

IMA SDK যেকোন VAST-সঙ্গী বিজ্ঞাপন সার্ভার থেকে বিজ্ঞাপনের অনুরোধ করতে পারে এবং আপনার অ্যাপে বিজ্ঞাপন প্লেব্যাক পরিচালনা করতে পারে।

IMA DAI SDK-এর সাথে, অ্যাপগুলি VOD বা লাইভ কন্টেন্টের জন্য বিজ্ঞাপন এবং কন্টেন্ট ভিডিওর জন্য একটি স্ট্রিম অনুরোধ করে। SDK তারপরে একটি সম্মিলিত ভিডিও স্ট্রিম ফেরত দেয়, যাতে আপনাকে আপনার অ্যাপের মধ্যে বিজ্ঞাপন এবং বিষয়বস্তু ভিডিওর মধ্যে স্যুইচিং পরিচালনা করতে হবে না।

এই নির্দেশিকা প্রদর্শন করে যে কীভাবে CAF-এর জন্য IMA DAI SDK ব্যবহার করে একটি DAI পড সার্ভিং স্ট্রিম খেলতে হয়।

এই নির্দেশিকাটি ব্যবহার করার আগে, Chromecast অ্যাপ্লিকেশন ফ্রেমওয়ার্কের ওয়েব রিসিভার প্রোটোকলের সাথে নিজেকে পরিচিত করুন৷ এই নির্দেশিকাটি CAF রিসিভার ধারণাগুলির একটি প্রাথমিক বোঝার অনুমান করে, যেমন বার্তা ইন্টারসেপ্টর এবং মিডিয়া ইনফরমেশন অবজেক্ট এবং CAF প্রেরককে অনুকরণ করতে কাস্ট কমান্ড এবং কন্ট্রোল টুল ব্যবহার করার সাথে পরিচিতি।

IMA DAI Pod Serving ব্যবহার করতে, আপনাকে অবশ্যই একজন Pod Serving অংশীদারের সাথে কাজ করতে হবে এবং একটি Ad Manager 360 Advanced অ্যাকাউন্ট থাকতে হবে। আপনার যদি অ্যাড ম্যানেজার অ্যাকাউন্ট থাকে, তাহলে আরও বিশদ বিবরণের জন্য আপনার অ্যাকাউন্ট পরিচালকের সাথে যোগাযোগ করুন। অ্যাড ম্যানেজারের জন্য সাইন আপ করার বিষয়ে তথ্যের জন্য, অ্যাড ম্যানেজার সহায়তা কেন্দ্রে যান।

অন্যান্য প্ল্যাটফর্মের সাথে একীভূত করার বিষয়ে বা IMA ক্লায়েন্ট-সাইড SDK ব্যবহার করার বিষয়ে তথ্যের জন্য, ইন্টারেক্টিভ মিডিয়া বিজ্ঞাপন SDK দেখুন।

IMA DAI পড সার্ভিং ওভারভিউ

IMA CAF DAI SDK ব্যবহার করে পড পরিবেশন বাস্তবায়নে দুটি প্রধান উপাদান রয়েছে, যা এই নির্দেশিকায় প্রদর্শিত হয়েছে:

  • StreamRequest : একটি বস্তু যা Google এর বিজ্ঞাপন সার্ভারে একটি স্ট্রিম অনুরোধ সংজ্ঞায়িত করে। অনুরোধগুলি একটি নেটওয়ার্ক কোড, কাস্টম সম্পদ কী, এবং একটি ঐচ্ছিক API কী, সেইসাথে অন্যান্য ঐচ্ছিক পরামিতিগুলি নির্দিষ্ট করে৷
  • StreamManager : একটি বস্তু যা ভিডিও স্ট্রীম এবং IMA DAI SDK-এর মধ্যে যোগাযোগ পরিচালনা করে, যেমন ফায়ারিং ট্র্যাকিং পিং এবং প্রকাশকের কাছে স্ট্রিম ইভেন্ট ফরওয়ার্ড করা।

পূর্বশর্ত

প্রেরকের MediaInfo অবজেক্ট কনফিগার করুন

প্রথমে, নিম্নলিখিত ক্ষেত্রগুলি অন্তর্ভুক্ত করতে আপনার প্রেরক অ্যাপের MediaInfo অবজেক্ট কনফিগার করুন:

মাঠ বিষয়বস্তু
contentId এই মিডিয়া আইটেমটির জন্য একটি অনন্য শনাক্তকারী৷

CONTENT_ID

contentUrl ঐচ্ছিক। DAI স্ট্রীম লোড হতে ব্যর্থ হলে ব্যাকআপ স্ট্রীম URL প্লে করার জন্য।

BACKUP_STREAM_URL

contentType ঐচ্ছিক। বিষয়বস্তুর ব্যাকআপ স্ট্রীমের মাইমেটাইপ। শুধুমাত্র DASH স্ট্রীমগুলির জন্য প্রয়োজন৷

CONTENT_STREAM_MIMETYPE

streamType এই মানের জন্য ব্যবহৃত স্ট্রিং আক্ষরিক বা ধ্রুবক প্রেরক প্ল্যাটফর্ম অনুসারে পরিবর্তিত হয়।
customData customData ফিল্ডে অতিরিক্ত প্রয়োজনীয় ক্ষেত্রগুলির একটি মূল-মান স্টোর রয়েছে। এই নমুনায়, এটিতে আপনার DAI স্ট্রিম প্যারামিটার রয়েছে। একটি প্রোডাকশন অ্যাপে আপনি পরিবর্তে একটি শনাক্তকারী পাস করতে পারেন যা আপনার কাস্ট রিসিভার অ্যাপ সার্ভার-সাইড অনুরোধের সাথে এই প্যারামিটারগুলি পুনরুদ্ধার করতে ব্যবহার করবে।
মাঠ বিষয়বস্তু
daiStreamType আপনার DAI স্ট্রিমের ধরন। "LIVE" বা "VOD" এর একটি

DAI_STREAM_TYPE

networkCode আপনার Google Ad Manager 360 অ্যাকাউন্টের নেটওয়ার্ক কোড।

NETWORK_CODE

customAssetKey এই ক্ষেত্রটি শুধুমাত্র লাইভ স্ট্রিমের জন্য প্রয়োজন। কাস্টম সম্পদ কী যা Google Ad Manager 360-এ আপনার Pod সার্ভিং ইভেন্টকে শনাক্ত করে।

CUSTOM_ASSET_KEY

apiKey IMA DAI SDK থেকে একটি স্ট্রিম আইডি পুনরুদ্ধার করার জন্য একটি ঐচ্ছিক API কী।

API_KEY

আপনাকে শুরু করতে সহায়তা করার জন্য এখানে কিছু কোড নমুনা রয়েছে:

ওয়েব

কাস্ট ওয়েব প্রেরকের মধ্যে এই মানগুলি কনফিগার করতে, প্রথমে প্রয়োজনীয় ডেটা সহ একটি 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); });

অ্যান্ড্রয়েড

কাস্ট ওয়েব প্রেরকের মধ্যে এই মানগুলি কনফিগার করতে, প্রথমে প্রয়োজনীয় ডেটা সহ একটি 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)

কাস্ট ওয়েব প্রেরকের মধ্যে এই মানগুলি কনফিগার করতে, প্রথমে প্রয়োজনীয় ডেটা সহ একটি 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 (সুইফট)

কাস্ট ওয়েব প্রেরকের মধ্যে এই মানগুলি কনফিগার করতে, প্রথমে প্রয়োজনীয় ডেটা সহ একটি 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 স্ক্রিপ্ট লোড হওয়ার ঠিক পরে আপনার ওয়েব রিসিভারে 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 স্ট্রিম ম্যানেজার চালু করুন

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>

স্ট্রীম ম্যানেজার লোড ইন্টারসেপ্টর তৈরি করুন

আপনার মিডিয়া আইটেমগুলি 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) বা কাস্টম ম্যানিফেস্ট ম্যানিপুলেটর এই স্ট্রিম আইডি ব্যবহার করে একটি ম্যানিফেস্ট ইউআরএল পুনরুদ্ধার করার নির্দেশনা প্রদান করবে।

একবার আপনি আপনার ম্যানিফেস্ট ইউআরএল পুনরুদ্ধার করলে, বিদ্যমান 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() এ কল করুন৷