প্লেয়ার ক্লাস সেট আপ করুন

video_player.js ফাইলে, dash.js প্লেয়ারটি চালু ও নিয়ন্ত্রণ করার জন্য একটি ভিডিও প্লেয়ার র‍্যাপার ক্লাস সংজ্ঞায়িত করুন।

ব্রডব্যান্ড প্লেয়ার সেট আপ করুন

ভিডিও এবং র‍্যাপার ট্যাগ তৈরি করে আপনার অ্যাপের কোথায় ব্রডব্যান্ড প্লেয়ারটি রাখবেন তা নির্ধারণ করুন:

<div id="broadband-wrapper">
    <video id="broadband-video"></video>
</div>

ভিডিও প্লেয়ার তৈরি করুন

HTML এলিমেন্ট, dash.js প্লেয়ার এবং অন্যান্য ক্লাস মেথড ব্যবহার করতে পারে এমন কলব্যাকগুলোর জন্য ভ্যারিয়েবল দিয়ে ভিডিও প্লেয়ার ক্লাসটি ইনিশিয়ালাইজ করুন।

/**
 * Video player wrapper class to control ad creative playback with dash.js in
 * broadband.
 */
var VideoPlayer = function() {
  this.videoElement = document.querySelector('video');
  this.broadbandWrapper = document.getElementById('broadband-wrapper');
  this.player = dashjs.MediaPlayer().create();
  this.onAdPodEndedCallback = null;

  // Function passed in VideoPlayer.prototype.setEmsgEventHandler.
  this.onCustomEventHandler = null;
  //  Scope (this) passed in VideoPlayer.prototype.setEmsgEventHandler.
  this.customEventHandlerScope = null;

  // Function to remove all of player event listeners.
  this.cleanUpPlayerListener = null;
  debugView.log('Player: Creating dash.js player');
};

প্লেব্যাক নিয়ন্ত্রণ ফাংশনগুলি সংজ্ঞায়িত করুন

অ্যাড প্লেয়ার দেখাতে এবং ভিডিও ভিউ সংযুক্ত করতে VideoPlayer.play() মেথডটি তৈরি করুন। এরপর, অ্যাড পডগুলো শেষ হওয়ার পর পরিষ্করণ পরিচালনার জন্য VideoPlayer.stop() মেথডটি তৈরি করুন।

/** Starts playback of ad stream. */
VideoPlayer.prototype.play = function() {
  debugView.log('Player: Start playback');
  this.show();
  this.player.attachView(this.videoElement);
};

/** Stops ad stream playback and deconstructs player. */
VideoPlayer.prototype.stop = function() {
  debugView.log('Player: Request to stop player');
  if (this.cleanUpPlayerListener) {
    this.cleanUpPlayerListener();
  }
  this.player.reset();
  this.player.attachView(null);
  this.player.attachSource(null);
  this.player = null;
  this.hide();
};

বিজ্ঞাপন স্ট্রিম ম্যানিফেস্ট প্রি-লোড করুন

কন্টেন্ট স্ট্রিম চলাকালীন এবং বিজ্ঞাপন বিরতি শুরু হওয়ার আগে বিজ্ঞাপনগুলো পর্যাপ্তভাবে লোড হয়েছে কিনা তা যাচাই করতে, VideoPlayer.preload() এবং VideoPlayer.isPreloaded() ব্যবহার করুন।

১. বিজ্ঞাপন প্রবাহটি আগে থেকে লোড করুন

বিজ্ঞাপন বিরতির আগে অ্যাড স্ট্রিম ম্যানিফেস্ট প্রি-লোড করতে এবং একটি অ্যাড বাফার তৈরি করতে VideoPlayer.preload() মেথডটি তৈরি করুন। আপনাকে অবশ্যই প্লেয়ার স্ট্রিমিং সেটিংস 'cacheInitSegments' ট্রু ( true )-তে আপডেট করতে হবে। এই সেটিংস আপডেট করার মাধ্যমে, আপনি ইনিট সেগমেন্টগুলোর ক্যাশিং সক্ষম করেন, যা বিজ্ঞাপনে যাওয়ার সময় বিলম্ব এড়াতে সাহায্য করে।

/**
 * Starts ad stream prefetching into Media Source Extensions (MSE) buffer.
 * @param {string} url manifest url for ad stream playback.
 */
VideoPlayer.prototype.preload = function(url) {
  if (!this.player) {
    this.player = dashjs.MediaPlayer().create();
  }
  debugView.log('Player: init with ' + url);
  this.player.initialize(/* HTMLVideoElement */ null, url, /* autoplay */ true);

  this.player.updateSettings({
    'debug': {
      'logLevel': dashjs.Debug.LOG_LEVEL_WARNING,
      'dispatchEvent': true,  // flip to false to hide all debug events.
    },
    'streaming': {
      'cacheInitSegments': true,
    }
  });
  this.player.preload();
  this.attachPlayerListener();
  debugView.log('Player: Pre-loading into MSE buffer');
};

২. আগে থেকে লোড করা বিজ্ঞাপন বাফার পরীক্ষা করুন

অ্যাপে সেট করা বাফার থ্রেশহোল্ডের তুলনায় পর্যাপ্ত বিজ্ঞাপন বাফার প্রি-লোড হয়েছে কিনা তা পরীক্ষা করার জন্য VideoPlayer.isPreloaded() মেথডটি তৈরি করুন:

// Ads will only play with 10 or more seconds of ad loaded.
var MIN_BUFFER_THRESHOLD = 10;
/**
 * Checks if the ad is preloaded and ready to play.
 * @return {boolean} whether the ad buffer level is sufficient.
 */
VideoPlayer.prototype.isPreloaded = function() {
  var currentBufferLevel = this.player.getDashMetrics()
      .getCurrentBufferLevel('video', true);
  return currentBufferLevel >= MIN_BUFFER_THRESHOLD;
};

প্লেয়ার লিসেনার সংযুক্ত করুন

dash.js প্লেয়ারের ইভেন্টের জন্য ইভেন্ট লিসেনার যোগ করতে, VideoPlayer.attachPlayerListener() মেথডটি তৈরি করুন: PLAYBACK_PLAYING , PLAYBACK_ENDED , LOG , এবং ERROR । এই লিসেনারগুলো মুছে ফেলার জন্য ক্লিন-আপ ফাংশন সেট করার পাশাপাশি, এই মেথডটি স্কিম আইডি URI-এর ইভেন্টগুলোও পরিচালনা করে।

var SCHEME_ID_URI = 'https://developer.apple.com/streaming/emsg-id3';
/** Attaches event listener for various dash.js events.*/
VideoPlayer.prototype.attachPlayerListener = function() {
  var playingHandler = function() {
    this.onAdPodPlaying();
  }.bind(this);
  this.player.on(dashjs.MediaPlayer.events['PLAYBACK_PLAYING'], playingHandler);
  var endedHandler = function() {
    this.onAdPodEnded();
  }.bind(this);
  this.player.on(dashjs.MediaPlayer.events['PLAYBACK_ENDED'], endedHandler);
  var logHandler = function(e) {
    this.onLog(e);
  }.bind(this);
  this.player.on(dashjs.MediaPlayer.events['LOG'], logHandler);
  var errorHandler = function(e) {
    this.onAdPodError(e);
  }.bind(this);
  this.player.on(dashjs.MediaPlayer.events['ERROR'], errorHandler);

  var customEventHandler = null;
  if (this.onCustomEventHandler) {
    customEventHandler =
        this.onCustomEventHandler.bind(this.customEventHandlerScope);
    this.player.on(SCHEME_ID_URI, customEventHandler);
  }

  this.cleanUpPlayerListener = function() {
    this.player.off(
        dashjs.MediaPlayer.events['PLAYBACK_PLAYING'], playingHandler);
    this.player.off(dashjs.MediaPlayer.events['PLAYBACK_ENDED'], endedHandler);
    this.player.off(dashjs.MediaPlayer.events['LOG'], logHandler);
    this.player.off(dashjs.MediaPlayer.events['ERROR'], errorHandler);
    if (customEventHandler) {
      this.player.off(SCHEME_ID_URI, customEventHandler);
    }
  };
};

প্লেয়ার ইভেন্ট কলব্যাক সেট করুন

প্লেয়ার ইভেন্টের উপর ভিত্তি করে অ্যাড পড প্লেব্যাক পরিচালনা করতে, VideoPlayer.onAdPodPlaying() , VideoPlayer.onAdPodEnded() , এবং VideoPlayer.onAdPodError() মেথডগুলো তৈরি করুন:

/**
 * Called when ad stream playback buffered and is playing.
 */
VideoPlayer.prototype.onAdPodPlaying = function() {
  debugView.log('Player: Ad Playback started');
};

/**
 * Called when ad stream playback has been completed.
 * Will call the restart of broadcast stream.
 */
VideoPlayer.prototype.onAdPodEnded = function() {
  debugView.log('Player: Ad Playback ended');
  this.stop();
  if (this.onAdPodEndedCallback) {
    this.onAdPodEndedCallback();
  }
};

/**
 * @param {!Event} event The error event to handle.
 */
VideoPlayer.prototype.onAdPodError = function(event) {
  debugView.log('Player: Ad Playback error from dash.js player.');
  this.stop();
  if (this.onAdPodEndedCallback) {
    this.onAdPodEndedCallback();
  }
};

onAdPodEnded ইভেন্টের জন্য সেটার তৈরি করুন

VideoPlayer.setOnAdPodEnded() মেথডটি তৈরি করে একটি কলব্যাক ফাংশন সেট করুন যা কোনো অ্যাড পড শেষ হলে রান করবে। অ্যাপ ক্লাসটি বিজ্ঞাপনের বিরতির পর কন্টেন্ট সম্প্রচার পুনরায় শুরু করতে এই মেথডটি ব্যবহার করে।

/**
 * Sets a callback function for when an ad pod has ended.
 * @param {!Function} callback Callback function.
 */
VideoPlayer.prototype.setOnAdPodEnded = function(callback) {
  this.onAdPodEndedCallback = callback;
};

স্ট্রিম মেটাডেটা ইভেন্টগুলি পরিচালনা করুন

VideoPlayer.setEmsgEventHandler() মেথডটি তৈরি করে emsg ইভেন্টের উপর ভিত্তি করে চলার জন্য একটি কলব্যাক ফাংশন সেট করুন। এই নির্দেশিকার জন্য, scope প্যারামিটারটি অন্তর্ভুক্ত করুন, কারণ আপনি video_player.js এর বাইরে setEmsgEventHandler() কল করবেন।

/**
 * Sets emsg event handler.
 * @param {!Function} customEventHandler Event handler.
 * @param {!Object} scope JS scope in which event handler function is called.
 */
VideoPlayer.prototype.setEmsgEventHandler = function(
    customEventHandler, scope) {
  this.onCustomEventHandler = customEventHandler;
  this.customEventHandlerScope = scope;
};

বিজ্ঞাপনের বিরতির জন্য ভিডিও প্লেয়ারটি দেখানো এবং লুকানো

বিজ্ঞাপনের বিরতির সময় ভিডিও প্লেয়ারটি প্রদর্শন করতে এবং বিজ্ঞাপন বিরতি শেষ হওয়ার পর প্লেয়ারটি লুকাতে, VideoPlayer.show() এবং VideoPlayer.hide() মেথডগুলো তৈরি করুন:

/** Shows the video player. */
VideoPlayer.prototype.show = function() {
  debugView.log('Player: show');
  this.broadbandWrapper.style.display = 'block';
};

/** Hides the video player. */
VideoPlayer.prototype.hide = function() {
  debugView.log('Player: hide');
  this.broadbandWrapper.style.display = 'none';
};

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