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.