DAI এর জন্য IMA SDK সেট আপ করুন, DAI এর জন্য IMA SDK সেট আপ করুন, DAI এর জন্য IMA SDK সেট আপ করুন, DAI এর জন্য IMA SDK সেট আপ করুন

প্ল্যাটফর্ম নির্বাচন করুন: HTML5 অ্যান্ড্রয়েড iOS tvOS কাস্ট রোকু

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

পড সার্ভিং ডিএআই

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

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

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

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

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

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

অন্যান্য প্ল্যাটফর্মের সাথে একীভূতকরণ বা 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-এ আপনার পড সার্ভিং ইভেন্ট শনাক্ত করে।

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());

আইওএস (ওবিজে-সি)

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

আইওএস (সুইফট)

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

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) অথবা কাস্টম ম্যানিফেস্ট ম্যানিপুলেটর এই স্ট্রিম আইডি ব্যবহার করে একটি ম্যানিফেস্ট 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() এ কল করুন।