کلاس مدیر تبلیغات را ایجاد کنید

در ads_manager.js ، یک کلاس پوششی برای StreamManager مربوط به IMA SDK تعریف کنید که درخواست‌های استریم را ایجاد می‌کند، مانیفست ad pod را دریافت می‌کند، به رویدادهای استریم IMA گوش می‌دهد و رویدادهای emsg را به IMA SDK ارسال می‌کند.

در ads_manager.js ، برنامه نمونه IMA HbbTV متدهای زیر را تنظیم می‌کند:

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

مدیر تبلیغات را اولیه کنید

کلاس مدیریت تبلیغات را مقداردهی اولیه کنید و شنونده‌هایی برای رویدادهای پخش جریانی IMA تنظیم کنید. در این فراخوانی، کنترل‌کننده رویداد emsg را با متد VideoPlayer.setEmsgEventHandler() تنظیم کنید.

/**
 * 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);
};

درخواست پخش پادکست تبلیغاتی بدهید

متد AdManager.requestStream() را برای ایجاد یک شیء PodStreamRequest با استفاده از کد شبکه Google Ad Manager و کلید دارایی سفارشی جریان ایجاد کنید. برنامه HbbTV خود را با استفاده از جریان ارائه دهنده پاد DASH نمونه IMA با پارامترهای جریان زیر آزمایش کنید:

  • کد شبکه : '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();
  streamRequest.networkCode = networkCode;
  streamRequest.customAssetKey = customAssetKey;
  streamRequest.format = 'dash';
  debugView.log('AdsManager: make PodStreamRequest');
  this.streamManager.requestStream(streamRequest);
};

به رویدادهای پخش تبلیغات گوش دهید

متد AdManager.onStreamEvent() را برای مدیریت پاسخ برنامه خود به رویدادهای جریان IMA، STREAM_INITIALIZED ، AD_BREAK_STARTED و AD_BREAK_ENDED ، ایجاد کنید.

/**
 * 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;
  }
};

مدیریت فراداده‌های جریان تبلیغات

برای ارسال اطلاعات رویداد emsg به IMA، متد AdManager.onEmsgEvent() را با استفاده از متد StreamManager.processMetadata() ایجاد کنید. کلاس پخش‌کننده ویدیو این متد را با متد 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، آدرس اینترنتی مانیفست را بسازید.

/**
 * 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('IMA SDK: No DAI pod session registered.');
    return;
  }

  var MANIFEST_BASE_URL = 'https://dai.google.com/linear/pods/v1/dash/network/';
  // Method: DASH pod manifest reference docs:
  // https://developers.google.com/ad-manager/dynamic-ad-insertion/api/pod-serving/reference/live#method_dash_pod_manifest
  var manifestUrl = MANIFEST_BASE_URL + networkCode + '/custom_asset/' +
    customAssetKey + '/stream/' + this.streamData.streamId + '/pod/' +
    this.getPodId() + '/manifest.mpd?pd=' + podDuration;
  this.videoPlayer.preload(manifestUrl);
};

برنامه نمونه HbbTV از یک podId منحصر به فرد که به صورت تصادفی تولید می‌شود، استفاده می‌کند. در برنامه‌های کاربردی، podId یک عدد صحیح است که از یک شروع می‌شود و برای هر وقفه تبلیغاتی یک واحد افزایش می‌یابد. تأیید کنید که podId برای همه بینندگان وقفه تبلیغاتی مقدار یکسانی دارد. برای دریافت podId ، توصیه می‌کنیم از API اعلان‌های اولیه وقفه تبلیغاتی (EABN) استفاده کنید. در یک محیط کاربردی، podId و podDuration را در رویداد پخش HbbTV AD_BREAK_ANNOUNCE وارد کنید.

در مرحله بعد، کلاس برنامه اصلی را برای برنامه HbbTV خود ایجاد کنید که با پخش HbbTV در تعامل باشد.