Ads मैनेजर क्लास बनाना

ads_manager.js में, IMA SDK टूल के StreamManager के लिए एक रैपर क्लास तय करें. यह क्लास, स्ट्रीम के अनुरोध करता है, विज्ञापन पॉड मेनिफ़ेस्ट पाता है, IMA स्ट्रीम इवेंट को सुनता है, और IMA SDK टूल को emsg इवेंट पास करता है.

ads_manager.js में, IMA HbbTV सैंपल ऐप्लिकेशन ये तरीके सेट अप करता है:

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

विज्ञापन मैनेजर शुरू करें

Ads मैनेजर क्लास शुरू करें और IMA स्ट्रीम इवेंट के लिए लिसनर सेट करें. इस कॉल में, ईमेल इवेंट हैंडलर को 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);
};

विज्ञापनों के पॉड स्ट्रीम के लिए अनुरोध करना

अपने Google Ad Manager नेटवर्क कोड और स्ट्रीम की कस्टम ऐसेट कुंजी का इस्तेमाल करके, 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();
  streamRequest.networkCode = networkCode;
  streamRequest.customAssetKey = customAssetKey;
  streamRequest.format = 'dash';
  debugView.log('AdsManager: make PodStreamRequest');
  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;
  }
};

विज्ञापन स्ट्रीम के मेटाडेटा को मैनेज करना

emsg इवेंट की जानकारी को IMA को पास करने के लिए, 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() तरीका बनाएं. तरीका: DASH पॉड मेनिफ़ेस्ट में दिए गए स्ट्रक्चर का इस्तेमाल करके, मेनिफ़ेस्ट यूआरएल बनाएं.

/**
 * 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 पाने के लिए, हमारा सुझाव है कि आप विज्ञापन के लिए ब्रेक की सूचनाएं (ईएबीएन) एपीआई का इस्तेमाल करें. प्रोडक्शन एनवायरमेंट में, HbbTV के स्ट्रीम इवेंट AD_BREAK_ANNOUNCE में podId और podDuration शामिल करें.

इसके बाद, अपने HbbTV ऐप्लिकेशन के लिए मुख्य ऐप्लिकेशन क्लास बनाएं, जो HbbTV ब्रॉडकास्ट के साथ इंटरैक्ट करता है.