PageSourceSearch

https://laziar.com/assets/videojs/plugins/es/videojs.dai.js

js laziar.com collected 2026-09-28 08:59:18 UTC 7,883 bytes, 260 lines download raw bytes

1/**
2 * @license
3 * Copyright (c) 2023 The Nuevodevel Team. All rights reserved.
4 * Google Dai Plugin for Video.js v8
5 */
6/* eslint-disable */
7import videojs from 'video.js';
8
9const defaults = {
10  fallback: '',
11  assetKey: '',
12  source_id: '',
13  video_id: '',
14  liveApiKey: '',
15  apiKey: '',
16  debug: false,
17};
18
19const registerPlugin = videojs.registerPlugin || videojs.plugin;
20
21const onPlayerReady = (player, options) => {
22  //var player = this;
23  var tech = player.$('.vjs-tech');
24
25  var streamManager;
26  var isLiveStream = false;
27
28  var current_ad = [];
29  var autoplay = false;
30  if (videojs.options.autoplay) autoplay = true;
31  if (tech.getAttribute('autoplay')) autoplay = true;
32
33  initPlayer();
34
35  if (options.assetKey !== '') {
36    requestLiveStream();
37  } else if (options.source_id !== '' && options.video_id !== '') {
38    requestVODStream();
39  }
40
41  function requestLiveStream() {
42    isLiveStream = true;
43    var streamRequest = new google.ima.dai.api.LiveStreamRequest();
44    streamRequest.assetKey = options.assetKey;
45    if (options.liveApiKey !== '') {
46      streamRequest.apiKey = options.liveApiKey || '';
47    } else {
48      streamRequest.apiKey = options.apiKey || '';
49    }
50    streamManager.requestStream(streamRequest);
51  }
52
53  function requestVODStream() {
54    isLiveStream = false;
55    var streamRequest = new google.ima.dai.api.VODStreamRequest();
56    streamRequest.contentSourceId = options.source_id;
57    streamRequest.videoId = options.video_id;
58    streamRequest.apiKey = options.apiKey || '';
59    streamManager.requestStream(streamRequest);
60  }
61
62  player.dai.requestVODStream = function (stream) {
63    isLiveStream = false;
64    //player.pause();
65    streamManager.reset();
66    player.reset();
67
68    videojs.dom.removeClass(player.el_, 'vjs-dai');
69    videojs.dom.removeClass(player.el_, 'vjs-ad-playing');
70    videojs.dom.removeClass(player.el_, 'vjs-has-started');
71    videojs.dom.removeClass(player.el_, 'vjs-playing');
72    videojs.dom.removeClass(player.bigPlayButton.el_, 'vjs-no-pointer');
73    initPlayer();
74    var streamRequest = new google.ima.dai.api.VODStreamRequest();
75
76    streamRequest.contentSourceId = stream.source_id;
77    streamRequest.videoId = stream.video_id;
78    streamRequest.apiKey = stream.apiKey || '';
79    streamManager.requestStream(streamRequest);
80  };
81  player.dai.requestLivetream = function (stream) {
82    isLiveStream = true;
83    streamManager.reset();
84    player.reset();
85    videojs.dom.removeClass(player.el_, 'vjs-dai');
86    videojs.dom.removeClass(player.el_, 'vjs-ad-playing');
87    videojs.dom.removeClass(player.el_, 'vjs-has-started');
88    videojs.dom.removeClass(player.el_, 'vjs-playing');
89    videojs.dom.removeClass(player.bigPlayButton.el_, 'vjs-no-pointer');
90    //initPlayer();
91    var streamRequest = new google.ima.dai.api.LiveStreamRequest();
92    streamRequest.assetKey = stream.assetKey;
93    streamRequest.apiKey = stream.apiKey || '';
94
95    streamManager.requestStream(streamRequest);
96  };
97
98  function initPlayer() {
99    //adUiElement = document.getElementById('adUi');
100    streamManager = streamManager = new google.ima.dai.api.StreamManager(tech);
101    streamManager.addEventListener(
102      google.ima.dai.api.StreamEvent.Type.LOADED,
103      onStreamLoaded,
104      false
105    );
106    streamManager.addEventListener(google.ima.dai.api.StreamEvent.Type.ERROR, onStreamError, false);
107    streamManager.addEventListener(
108      google.ima.dai.api.StreamEvent.Type.AD_PROGRESS,
109      onAdProgress,
110      false
111    );
112    streamManager.addEventListener(
113      google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,
114      onAdBreakStarted,
115      false
116    );
117    streamManager.addEventListener(
118      google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED,
119      onAdBreakEnded,
120      false
121    );
122    streamManager.addEventListener(google.ima.dai.api.StreamEvent.Type.STARTED, onAdStarted, false);
123    streamManager.addEventListener(
124      google.ima.dai.api.StreamEvent.Type.FIRST_QUARTILE,
125      onAdFirstQuartile,
126      false
127    );
128    streamManager.addEventListener(
129      google.ima.dai.api.StreamEvent.Type.MIDPOINT,
130      onAdMidpoint,
131      false
132    );
133    streamManager.addEventListener(
134      google.ima.dai.api.StreamEvent.Type.THIRD_QUARTILE,
135      onAdThirdQuartile,
136      false
137    );
138    streamManager.addEventListener(
139      google.ima.dai.api.StreamEvent.Type.COMPLETE,
140      onAdComplete,
141      false
142    );
143    streamManager.addEventListener(google.ima.dai.api.StreamEvent.Type.CLICK, onAdClick, false);
144  }
145  function onAdFirstQuartile(e) {
146    player.trigger('dai', { ad: current_ad, type: 'firstQuartile' });
147  }
148  function onAdMidpoint(e) {
149    player.trigger('dai', { ad: current_ad, type: 'midpoint' });
150  }
151  function onAdThirdQuartile(e) {
152    player.trigger('dai', { ad: current_ad, type: 'thirdQuartile' });
153  }
154  function onAdComplete(e) {
155    player.trigger('dai', { ad: current_ad, type: 'complete' });
156  }
157  function onAdClick(e) {
158    player.trigger('dai', { ad: current_ad, type: 'adClick' });
159  }
160  function onStreamLoaded(e) {
161    player.textTracks().addEventListener(
162      'addtrack',
163      function (e) {
164        var track = e.track;
165
166        if (track.kind === 'metadata') {
167          // a cuechange event fires when the player crosses over an ID3 tag
168          track.addEventListener(
169            'cuechange',
170            function (event) {
171              if (options.debug) {
172                console.log(track.activeCues[0]);
173              }
174              var elemTrack = track.activeCues[0];
175              if (elemTrack && elemTrack.value.data) {
176                var metadata = {};
177                metadata[elemTrack.value.key] = elemTrack.value.data;
178                metadata['duration'] = Infinity;
179                streamManager.onTimedMetadata(metadata);
180              }
181            },
182            false
183          );
184        }
185      },
186      false
187    );
188
189    player.src(e.getStreamData().url);
190    if (autoplay) {
191      player.play();
192    }
193  }
194
195  function onStreamError(e) {
196    if (options.fallback !== '') {
197      player.src(options.fallback);
198    }
199  }
200  function onAdProgress(e) {
201    if (isLiveStream !== true) {
202      var adProgressData = e.getStreamData().adProgressData;
203      var currentAdNum = adProgressData.adPosition;
204      var totalAds = adProgressData.totalAds;
205      var currentTime = adProgressData.currentTime;
206      var duration = adProgressData.duration;
207      var remainingTime = Math.floor(duration - currentTime);
208      var adLabel = player.controlBar.el_.querySelector('.vjs-vast-label');
209      if (totalAds === 1) {
210        adLabel.innerHTML = 'This Ad will end in ' + remainingTime + 's';
211      } else {
212        adLabel.innerHTML = 'Ad (' + currentAdNum + ' of ' + totalAds + ') ' + remainingTime + 's';
213      }
214    }
215  }
216  function onAdBreakStarted(e) {
217    toggleControls(true);
218  }
219  function onAdBreakEnded(e) {
220    current_ad = 'undefined';
221    toggleControls(false);
222  }
223  function onAdStarted(e) {
224    var ad = e.getAd();
225    current_ad = [];
226    current_ad['id'] = ad.getAdId();
227    current_ad['title'] = ad.getTitle();
228    current_ad['duration'] = ad.getDuration();
229    current_ad['url'] = ad.g.g.u;
230    player.trigger('dai', { ad: current_ad, type: 'started' });
231  }
232
233  function toggleControls(status) {
234    var adLabel = player.controlBar.el_.querySelector('.vjs-vast-label');
235    if (status) {
236      videojs.dom.addClass(player.el_, 'vjs-dai');
237      if (isLiveStream) adLabel.innerHTML = 'Ad Playing';
238    } else {
239      videojs.dom.removeClass(player.el_, 'vjs-dai');
240
241      player.adPlaying = false;
242    }
243  }
244};
245
246const dai = function (options) {
247  this.ready(() => {
248    try {
249      onPlayerReady(this, videojs.obj.merge(defaults, options));
250    } catch (e) {
251      onPlayerReady(this, videojs.obj.merge(defaults, options));
252    }
253  });
254};
255
256if (typeof window !== 'undefined') {
257  registerPlugin('dai', dai);
258}
259
260export default dai;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.