বিজ্ঞাপন ম্যানেজার ক্লাস তৈরি করুন

ads_manager.js ফাইলে, IMA SDK StreamManager-এর জন্য একটি র‍্যাপার ক্লাস সংজ্ঞায়িত করুন, যা স্ট্রিম রিকোয়েস্ট পাঠাবে, অ্যাড পড ম্যানিফেস্ট সংগ্রহ করবে, IMA স্ট্রিম ইভেন্ট শুনবে এবং emsg ইভেন্টগুলো IMA SDK-তে পাঠাবে।

ads_manager.js ফাইলে, IMA HbbTV স্যাম্পল অ্যাপটি নিম্নলিখিত মেথডগুলো সেট আপ করে:

  • requestStream()
  • onStreamEvent()
  • onEmsgEvent()
  • loadAdPodManifest()

বিজ্ঞাপন ব্যবস্থাপক শুরু করুন

অ্যাডস ম্যানেজার ক্লাসটি ইনিশিয়ালাইজ করুন এবং IMA স্ট্রিম ইভেন্টগুলোর জন্য লিসেনার সেট করুন। এই কলে, VideoPlayer.setEmsgEventHandler() মেথড ব্যবহার করে emsg ইভেন্ট হ্যান্ডলারটি সেট করুন।

/**
 * Wraps IMA SDK ad stream manager.
 * @param {!VideoPlayer} videoPlayer Reference an instance of the wrapper from
 * video_player.js.
 */
var AdManager = function(videoPlayer) {
  this.streamData = null;
  this.videoPlayer = videoPlayer;
  // Ad UI is not supported for HBBTV, so no 'adUiElement' is passed in the
  // StreamManager constructor.
  this.streamManager = new google.ima.dai.api.StreamManager(
      this.videoPlayer.videoElement);
  this.streamManager.addEventListener(
      [
        google.ima.dai.api.StreamEvent.Type.STREAM_INITIALIZED,
        google.ima.dai.api.StreamEvent.Type.ERROR,
        google.ima.dai.api.StreamEvent.Type.CLICK,
        google.ima.dai.api.StreamEvent.Type.STARTED,
        google.ima.dai.api.StreamEvent.Type.FIRST_QUARTILE,
        google.ima.dai.api.StreamEvent.Type.MIDPOINT,
        google.ima.dai.api.StreamEvent.Type.THIRD_QUARTILE,
        google.ima.dai.api.StreamEvent.Type.COMPLETE,
        google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,
        google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED,
        google.ima.dai.api.StreamEvent.Type.AD_PROGRESS,
        google.ima.dai.api.StreamEvent.Type.PAUSED,
        google.ima.dai.api.StreamEvent.Type.RESUMED
      ],
      this.onStreamEvent.bind(this),
      false);

  this.videoPlayer.setEmsgEventHandler(this.onEmsgEvent, this);
};

একটি অ্যাড পড স্ট্রিমের জন্য অনুরোধ করুন

আপনার গুগল অ্যাড ম্যানেজার নেটওয়ার্ক কোড এবং স্ট্রিমের কাস্টম অ্যাসেট কী ব্যবহার করে একটি PodStreamRequest অবজেক্ট তৈরি করতে AdManager.requestStream() মেথডটি তৈরি করুন। নিম্নলিখিত স্ট্রিম প্যারামিটারসহ স্ট্রিম পরিবেশনকারী IMA স্যাম্পল DASH পড ব্যবহার করে আপনার HbbTV অ্যাপটি পরীক্ষা করুন:

  • নেটওয়ার্ক কোড : '21775744923'
  • কাস্টম অ্যাসেট কী : 'hbbtv-dash'
/**
 * Makes a pod stream request.
 * @param {string} networkCode The network code.
 * @param {string} customAssetKey The custom asset key.
 */
AdManager.prototype.requestStream = function (networkCode, customAssetKey) {
  var streamRequest = new google.ima.dai.api.PodStreamRequest();
  var secretKey = getStreamSecretKeys();

  streamRequest.networkCode = networkCode;
  streamRequest.customAssetKey = customAssetKey;
  streamRequest.format = 'dash';

  if (secretKey.STREAM_CREATE_SECRET) {
    var expirationTime = Math.trunc(new Date().getTime() / 1000) + 3600;
    var params = {
      custom_asset_key: customAssetKey,
      exp: expirationTime,
      network_code: networkCode
    };
    streamRequest.authToken =
        this.generateAuthToken(params, secretKey.STREAM_CREATE_SECRET);
    debugView.log('AdsManager: make Auth-PodStreamRequest');
  } else {
    debugView.log('AdsManager: make PodStreamRequest without auth');
  }

  this.streamManager.requestStream(streamRequest);
};

বিজ্ঞাপন স্ট্রিম ইভেন্টগুলি শুনুন

আপনার অ্যাপের পক্ষ থেকে IMA স্ট্রিম ইভেন্ট STREAM_INITIALIZED , AD_BREAK_STARTED , এবং AD_BREAK_ENDED এর প্রতিক্রিয়া পরিচালনা করার জন্য AdManager.onStreamEvent() মেথডটি তৈরি করুন।

/**
 * Handles IMA playback events.
 * @param {!Event} event The event object.
 */
AdManager.prototype.onStreamEvent = function(event) {
  switch (event.type) {
    // Once the stream response data is received, generate pod manifest url
    // for the video stream.
    case google.ima.dai.api.StreamEvent.Type.STREAM_INITIALIZED:
      debugView.log('IMA SDK: stream initialized');
      this.streamData = event.getStreamData();
      break;
    case google.ima.dai.api.StreamEvent.Type.ERROR:
      break;
    // Hide video controls while ad is playing.
    case google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED:
      debugView.log('IMA SDK: ad break started');
      this.adPlaying = true;
      this.adBreakStarted = true;
      break;
    // Show video controls when ad ends.
    case google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED:
      debugView.log('IMA SDK: ad break ended');
      this.adPlaying = false;
      this.adBreakStarted = false;
      break;
    // Update ad countdown timers.
    case google.ima.dai.api.StreamEvent.Type.AD_PROGRESS:
      break;
    default:
      debugView.log('IMA SDK: ' + event.type);
      break;
  }
};

বিজ্ঞাপন স্ট্রিম মেটাডেটা পরিচালনা করুন

IMA-তে emsg ইভেন্টের তথ্য পাঠাতে, StreamManager.processMetadata() মেথডটি ব্যবহার করে AdManager.onEmsgEvent() মেথডটি তৈরি করুন। ভিডিও প্লেয়ার ক্লাসটি VideoPlayer.setEmsgEventHandler() মেথডের মাধ্যমে এই মেথডটিকে কল করে।

/**
 * Callback on Emsg event.
 * Instructs IMA SDK to fire back VAST events accordingly.
 * @param {!Event} event The event object.
 */
AdManager.prototype.onEmsgEvent = function(event) {
  var data = event.event.messageData;
  var pts = event.event.calculatedPresentationTime;
  if ((data instanceof Uint8Array) && data.byteLength > 0) {
    this.streamManager.processMetadata('ID3', data, pts);
  }
};

অ্যাড পড ম্যানিফেস্ট লোড করুন

ভিডিও প্লেয়ার সহ অ্যাড পড ম্যানিফেস্ট প্রি-লোড করার জন্য AdManager.loadAdPodManifest() মেথডটি তৈরি করুন। Method: DASH pod manifest- এ দেওয়া কাঠামো ব্যবহার করে একটি অথেনটিকেটেড ম্যানিফেস্ট URL তৈরি করুন।

/**
 * Creates DAI pod url and instructs video player to load manifest.
 * @param {string} networkCode The network code.
 * @param {string} customAssetKey The custom asset key.
 * @param {number} podDuration The duration of the ad pod.
 */
AdManager.prototype.loadAdPodManifest = function (networkCode, customAssetKey, podDuration) {
  if (!this.streamData) {
    debugView.log('AdsManager: No stream data available.');
    return;
  }

  var adBreakId = this.getAdBreakId();
  var expirationTime = Math.trunc(new Date().getTime() / 1000) + 3600;

  var params = {
    ad_break_id: adBreakId,
    custom_asset_key: customAssetKey,
    exp: expirationTime,
    network_code: networkCode,
    pd: podDuration
  };

  var secretKey = getStreamSecretKeys();
  var token = this.generateAuthToken(params, secretKey.MANIFEST_SECRET);
  var encodedToken = encodeURIComponent(token);

  var manifestUrl = 'https://dai.google.com/linear/pods/v1/dash/network/' +
    networkCode + '/custom_asset/' + customAssetKey + '/stream/' +
    this.streamData.streamId + '/ad_break_id/' + adBreakId +
    '/manifest.mpd?pd=' + podDuration + '&auth-token=' + encodedToken;

  this.videoPlayer.preload(manifestUrl);
};

HbbTV স্যাম্পল অ্যাপটি র‍্যান্ডমলি জেনারেটেড একটি ইউনিক adBreakId ভ্যালু ব্যবহার করে। প্রোডাকশন অ্যাপে, adBreakId ভ্যালুটি একটি অ্যালফানিউমেরিক স্ট্রিং হয়, যেমন ab-001 , যা প্রতিটি অ্যাড ব্রেকের জন্য এক করে বাড়ে। অ্যাড ব্রেকের সকল দর্শকের জন্য adBreakId ভ্যালুটি একই আছে কিনা তা যাচাই করুন। adBreakId ভ্যালু পেতে, আমরা DAI Ad Break API ব্যবহার করার পরামর্শ দিই। প্রোডাকশন এনভায়রনমেন্টে, HbbTV স্ট্রিম ইভেন্ট AD_BREAK_ANNOUNCEadBreakId ভ্যালু এবং podDuration ভ্যালু অন্তর্ভুক্ত করুন।

এরপরে, আপনার HbbTV অ্যাপের জন্য প্রধান অ্যাপ্লিকেশন ক্লাসটি তৈরি করুন, যেটি HbbTV সম্প্রচারের সাথে যোগাযোগ করবে।