1(function (window) { 2 "use strict"; 3 4 yomvi.addPackage('yomvi.player', function () { 5 6 var installed = false; 7 var objPlayer; 8 var dataPlayer; 9 var loadDataPlayer; 10 var params = { subtitleID: -1 }; 11 var drmSystem = []; 12 var preload = true; 13 this.data_next = {}; 14 15 this.errors = 0; 16 17 function _appendVideo() { 18 if (yomvi.player.open()) { 19 $('#' + yomvi.player.getTag('video')).remove(); 20 } 21 $("#" + yomvi.player.getTag('container')).append('<video id="' + yomvi.player.getTag('video') + '" autoplay></video>'); 22 } 23 24 function _showPlayer() { 25 26 $('#' + yomvi.player.getTag('object')).removeClass('playend'); 27 28 $('#' + yomvi.player.getTag('object')).show(); 29 $('html').addClass('objetoPlayer'); 30 } 31 32 function _hidePlayer() { 33 if (yomvi.player.getData().following == true) { 34 $('#' + yomvi.player.getTag('object')).addClass('playend'); 35 } 36 $('#' + yomvi.player.getTag('object')).hide(); 37 $('html').removeClass('objetoPlayer'); 38 39 } 40 41 this.getConfiguration = function (_type) { 42 var _min = parseInt(yomvi.system.directorio.getContext('min_bitrate'))|| 400000; 43 var _max = parseInt(yomvi.system.directorio.getContext('max_bitrate')) || 5200000; 44 var _conf = { 45 "abr": { 46 "defaultBandwidthEstimate": _min, 47 "restrictions": { 48 "minBandwidth": _min, 49 "maxBandwidth": _max 50 } 51 }, 52 "streaming": { 53 //"bufferingGoal": 120, 54 "bufferingGoal": 12, 55 "rebufferingGoal": 6, 56 "jumpLargeGaps": true, 57 "stallSkip": 1, 58 "retryParameters": { 59 "maxAttempts": 7, 60 "baseDelay": 2000 61 } 62 }, 63 "manifest": { 64 "defaultPresentationDelay": 18 // 404 con 18 seg 65 } 66 }; 67 return _conf; 68 }; 69 70 function _actualizarData() { 71 if (yomvi.ficha.activa() || yomvi.struct.ajax_carrusel_default || yomvi.struct.ajax_catalogo_default) { 72 setTimeout(function () { 73 $(document).trigger('actualizarFicha'); 74 }, 1000); 75 } 76 } 77 78 function _reset() { 79 yomvi.player.events.unload(); 80 _actualizarData(); 81 } 82 83 this.getTag = function (_tag) { 84 switch (_tag) { 85 case 'object': 86 return 'object-player-multidrm'; 87 case 'container': 88 return 'video-player-content'; 89 case 'mid_roll': 90 return 'player_mid_roll'; 91 case 'video': 92 default: 93 return 'player-multidrm'; 94 } 95 }; 96 97 this.getVideo = function () { 98 99 return document.getElementById('player_mid_roll') || document.getElementById('player-multidrm'); 100 }; 101 102 this.getPlayer = function () { 103 return objPlayer; 104 }; 105 106 this.install = function () { 107 if (installed) { 108 return true; 109 } 110 shaka.polyfill.installAll(); 111 shaka.polyfill.PatchedMediaKeysApple.install(); 112 113 if (shaka.Player.isBrowserSupported()) { 114 //installed = true; 115 return true; 116 }else { 117 console.log ('NOT SUPPORTED'); 118 return false; 119 } 120 121 }; 122 123 this.setPlayer = function () { 124 var _video = yomvi.player.getVideo(); 125 if (!_video) { 126 return false; 127 } 128 objPlayer = new shaka.Player(_video); 129 window.shakaPlayer = objPlayer; 130 return objPlayer; 131 }; 132 133 function _tryDRMSystem(_system, _drm) { 134 return new Promise(function (resolve) { 135 var _config = [{ 136 'initDataTypes': ['cenc'], 137 'audioCapabilities': [{ 138 'contentType': 'audio/mp4;codecs=\"mp4a.40.2\"' 139 }], 140 'videoCapabilities': [{ 141 'contentType': 'video/mp4;codecs=\"avc1.42E01E\"' 142 }] 143 }]; 144 try { 145 navigator.requestMediaKeySystemAccess(_system, _config).then(function () { 146 resolve(_drm); 147 }).catch(function (_err) { 148 resolve(null); 149 }); 150 } catch (_err) { 151 resolve(null); 152 } 153 }); 154 } 155 this.streamParams = function (){ 156 157 var _params = {}; 158 switch (yomvi.player.getDRMSystem()) { 159 case 'widevine':
160 _params.streamDRM = 'Widevine'; 161 _params.streamFormat = 'DASH'; 162 break; 163 case 'playready': 164 _params.streamDRM = 'PlayReady'; 165 _params.streamFormat = 'DASH'; 166 break; 167 case 'fairplay': 168 default: 169 _params.streamDRM = 'FairPlay'; 170 _params.streamFormat = 'HLS'; 171 break; 172 } 173 return _params; 174 175 } 176 177 this.checkStartOver = function({urlStartOver, streamFormat, streamDRM, streamProtocol}){ 178 179 180 var params = { type: 'get', url:urlStartOver, bearer: true, dataType: 'json', cache: true}; 181 var replace_params = { streamFormat, streamDRM: streamDRM, streamProtocol: streamProtocol }; 182 183 yomvi.system.directorio.urlService(params, replace_params).done(function(data) { 184 //Esperamos que sea data.url pero puede ser diferente 185 let urlManifest = data; 186 const url = new URL(urlManifest); 187 const urlSearchParams = url.searchParams.entries(); 188 const urlObject = Object.fromEntries(urlSearchParams); 189 let currentTime = Date.now(); 190 if (urlObject.end_time){ 191 let parsedEndTime = Date.parse (urlObject.end_time) 192 if (currentTime > parsedEndTime){ 193 return(urlManifest); 194 } 195 } 196 return (false); 197 198 }).fail(function(error) { 199 return(false); 200 }); 201 202 203 } 204 205 this.setDRMSystem = function () { 206 return new Promise(function (resolve, reject) { 207 if (drmSystem.length) { 208 return resolve(drmSystem); 209 } 210 if (window.YomviGetNavigator() == YOMVI_NAVIGATOR.SAFARI) { 211 //var _drm = 'widevine'; 212 var _drm = 'fairplay'; 213 drmSystem.push(_drm); 214 return resolve([_drm]); 215 } 216 if (navigator.requestMediaKeySystemAccess) { 217 //var systems = [ { drm: 'widevine', mediakey: 'com.widevine.alpha' }, { drm: 'playready', mediakey: 'com.microsoft.playready' } ]; 218 var _systems = [{ drm: 'playready', mediakey: 'com.microsoft.playready' }, { drm: 'widevine', mediakey: 'com.widevine.alpha' }]; 219 var _promises = []; 220 _.each(_systems, function (_system) { 221 _promises.push(_tryDRMSystem(_system.mediakey, _system.drm)); 222 }); 223 Promise.all(_promises).then(function (_results) { 224 var _drmSystem = _results.filter(function (_result) { 225 return _result != null; 226 }); 227 drmSystem = _drmSystem; 228 resolve(_drmSystem); 229 }).catch(function (_err) { 230 var _err = { msg: yomvi.txt('ERROR_PLAYER_MULTIDRM') }; 231 reject(_err); 232 }); 233 } else { 234 var _err = { msg: yomvi.txt('ERROR_PLAYER_MULTIDRM') }; 235 reject(_err); 236 } 237 }); 238 }; 239 240 this.getDRMSystem = function () { 241 return drmSystem[0]; 242 }; 243 244 this.getData = function () { 245 return dataPlayer || {}; 246 }; 247 248 this.getLoadData = function () { 249 return loadDataPlayer || {}; 250 }; 251 252 this.getParams = function () { 253 return params || {}; 254 }; 255 256 //this.closeAndFinalize = function () { 257 //yomvi.player.events.finalize(); 258 this.closeAndFinalize = function (manualclose = false) { 259 const withBeacon = false; 260 261 yomvi.player.events.finalize(false, manualclose); 262 yomvi.player.remove(); 263 _reset(); 264 }; 265 266 this.remove = function () {
267 let url = yomvi.util.parseURL(); 268 yomvi.player.exitFullScreen(); 269 _hidePlayer(); 270 /* 271 if (yomvi.player.getVideo()) { 272 yomvi.player.getVideo().src = ''; 273 } 274 */ 275 $('.container').removeClass('reproplayer'); 276 $('#' + yomvi.player.getTag('video')).remove(); 277 yomvi.player.stop().then(function () { 278 yomvi.player.toolbar.remove(); 279 }); 280 281 282 }; 283 this.bingeWatchingNext = function () { 284 _reset(); 285 yomvi.player.events.finalize(); 286 $('.container').removeClass('reproplayer'); 287 $('#' + yomvi.player.getTag('object')).addClass('playend'); 288 $('#' + yomvi.player.getTag('video')).remove(); 289 yomvi.player.stop().then(function () { 290 yomvi.player.toolbar.remove(); 291 }); 292 293 } 294 this.toggleFullScreen = function () { 295 if (!document.fullscreenElement) { 296 document.documentElement.requestFullscreen(); 297 } else { 298 if (document.exitFullscreen) { 299 document.exitFullscreen(); 300 } 301 } 302 } 303 304 this.getFullScreen = function () { 305 const elem = document.documentElement; 306 if (elem.webkitRequestFullscreen) { 307 elem.webkitRequestFullscreen(); 308 } else if (elem.requestFullscreen) { 309 elem.requestFullscreen(); 310 } 311 } 312 313 this.exitFullScreen = function () { 314 if (document.fullscreenElement) { 315 document.exitFullscreen(); 316 } else if (document.webkitFullscreenElement) { 317 document.webkitExitFullscreen(); 318 } 319 } 320 321 this.showSpinner = function (info = false) { 322 if (info){ 323 document.getElementById('spinner-player').classList.add('info'); 324 } 325 $('#spinner-player').show(); 326 }; 327 328 this.hideSpinner = function () { 329 if ( document.getElementById('spinner-player').classList.contains('info')){ 330 document.getElementById('spinner-player').classList.remove('info') 331 } 332 $('#spinner-player').hide(); 333 }; 334 335 this.open = function () { 336 return $('#' + yomvi.player.getTag('container') + ' #' + yomvi.player.getTag('video')).length > 0; 337 }; 338 339 this.getDeviceId = function () { 340 var _deviceId = this.deviceId || yomvi.usuario.prefs('did'); 341 return _deviceId; 342 }; 343 this.stop = function (_objPlayer) { 344 return new Promise(function (resolve) { 345 _objPlayer = _objPlayer || objPlayer; 346 if (_objPlayer) { 347 _objPlayer.unload().then(function () { 348 _objPlayer.destroy().then(function () { 349 resolve(); 350 }); 351 }); 352 } else { 353 resolve(); 354 } 355 }); 356 }; 357 358 this.play = function () { 359 if (!objPlayer) { 360 return false; 361 } 362 switch (window.YomviGetNavigator()) { 363 case YOMVI_NAVIGATOR.EDGE: 364 yomvi.player.getVideo().play(); 365 $('#popup_player').hide(); 366 break; 367 default: 368 yomvi.player.getVideo().play().then(function () { 369 $('#popup_player').hide(); 370 }).catch(function (_evt) { 371 372 373 374 375 }); 376 break; 377 } 378 }; 379 380 this.pause = function () { 381 if (!yomvi.player.getVideo()) { 382 return false; 383 } 384 yomvi.player.getVideo().pause(); 385 }; 386 387 this.seek = function (gotoTime) { 388 //console.log('hago ir a', gotoTime); 389 yomvi.player.getVideo().currentTime = gotoTime 390 }; 391 392 this.seekRange = function () { 393 if (!objPlayer) { 394 return false;
395 } 396 return objPlayer.seekRange(); 397 }; 398 399 this.enableSubtitles = function (_boolean) { 400 if (!objPlayer) { 401 return false; 402 } 403 _boolean = _boolean || false; 404 objPlayer.setTextTrackVisibility(_boolean); 405 }; 406 407 this.selectTrack = function (_media, _new_track) { 408 if (!objPlayer) { 409 return false; 410 } 411 switch (_media) { 412 case 'audio': 413 var _safeMargin = 2, _clearBuffer = true; 414 objPlayer.selectVariantTrack(_new_track, _clearBuffer, _safeMargin); 415 break; 416 case 'text': 417 objPlayer.setTextTrackVisibility(true); 418 objPlayer.selectTextTrack(_new_track); 419 break; 420 } 421 422 }; 423 424 this.getTracks = function (_media) { 425 if (!objPlayer) { 426 return false; 427 } 428 switch (_media) { 429 case 'audio': 430 return objPlayer.getVariantTracks(); 431 case 'text': 432 return objPlayer.getTextTracks() 433 } 434 }; 435 436 this.removeMidRoll = function () { 437 yomvi.player.getData().mid_roll = false; 438 yomvi.player.getData().publi = false; 439 var _video_id = yomvi.player.getTag('mid_roll'); 440 $('#' + _video_id).remove(); 441 yomvi.player.toolbar.remove('player_toolbar_mid_roll'); 442 443 }; 444 445 this.loadMidRoll = function (_mid_roll) { 446 return new Promise(function (resolve) { 447 yomvi.player.getData().mid_roll = _mid_roll; 448 yomvi.player.getData().publi = true; 449 yomvi.player.publi.config.load().then(function (_breaks) { 450 _breaks = _breaks || []; 451 if (_breaks.length > 0) { 452 yomvi.player.pause(); 453 var _video_id = yomvi.player.getTag('mid_roll'); 454 455 $("#video-player-content").prepend('<video id="' + _video_id + '" autoplay></video>'); 456 var _midroll_video = document.getElementById('player_mid_roll'); 457 var _midroll = new shaka.Player(_midroll_video); 458 var _break = _breaks[0]; 459 var _infopub_url = _break.contentUrl; 460 _midroll.load(_infopub_url).then(function () { 461 yomvi.player.events.mid_roll(yomvi.player.getData(), _break); 462 }).catch(function () { 463 yomvi.player.removeMidRoll(); 464 $('#' + yomvi.player.getTag()).show(); 465 yomvi.player.toolbar.initControls(yomvi.player.getData()); 466 yomvi.player.play(); 467 }); 468 } else { 469 yomvi.player.removeMidRoll(); 470 } 471 }); 472 }); 473 }; 474 475 function _preload() { 476 return new Promise(function (resolve) { 477 switch (window.YomviGetNavigator()) { 478 case YOMVI_NAVIGATOR.SAFARI: 479 if (preload) { 480 resolve(); 481 } else { 482 var _video_id = 'preload_multidrm'; 483 $("body").append('<video style="display:none;" id="' + _video_id + '" autoplay muted></video>'); 484 var _preload_video = document.getElementById(_video_id); 485 preload = new shaka.Player(_preload_video); 486 preload.load('/preload.mp4').then(function () { 487 $('#' + _video_id).remove(); 488 resolve(); 489 }).catch(function (_err) { 490 $('#' + _video_id).remove(); 491 resolve(); 492 }); 493 } 494 break; 495 default: 496 resolve(); 497 break; 498 } 499 }); 500 } 501 502 function _loadPlayer() { 503 return new Promise(function (resolve) { 504 if (yomvi.player.data) { 505 resolve(); 506 } else { 507 yomvi.loadPackage('player').done(function () { 508 resolve(); 509 }); 510 } 511 }); 512 } 513 514 this.preloading = function (_preloading) { 515 if (_preloading) { 516 preload = false;
517 } 518 }; 519 520 this.load = function (_data) { 521 yomvi.player.analytics.fireInit(); 522 if (yomvi.player.install()) { 523 loadDataPlayer = _data; 524 _preload().then(function () { 525 _loadPlayer().then(function () { 526 yomvi.player.error.setCode(); 527 //yomvi.player.analytics.initialize(); 528 yomvi.player.control.check(_data).then(function (_dataPlayer) { 529 dataPlayer = _dataPlayer; 530 _appendVideo(); 531 yomvi.player.multidrm.load(_dataPlayer); 532 _showPlayer(); 533 yomvi.player.showSpinner(); 534 }).catch(function (_err) { 535 yomvi.player.analytics.fatalError(); 536 }); 537 }); 538 }); 539 } else { 540 var _err = { cabecera: 'Aviso', msg: yomvi.txt('ERROR_PLAYER_MULTIDRM') }; 541 yomvi.struct.mostrarAviso(_err); 542 } 543 }; 544 545 }); 546 547}(window));
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.