bitmovin-player
Version:
The Bitmovin HTML5 Adaptive Streaming Player for MPEG-DASH and HLS
14 lines (13 loc) • 36.9 kB
JavaScript
/****************************************************************************
* Copyright (C) 2019, Bitmovin, Inc., All Rights Reserved
*
* This source code and its use and distribution, is subject to the terms
* and conditions of the applicable license agreement.
*
* Bitmovin Player Version 8.16.2
*
****************************************************************************/
(function() {
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.mserenderer=t():(e.bitmovin=e.bitmovin||{},e.bitmovin.player=e.bitmovin.player||{},e.bitmovin.player.mserenderer=t())}(this,function(){return webpackJsonpbitmovin_player__name_([12],{179:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(2),i=r(0),o=r(27),s=r(32),u=r(7),a=r(3),d=r(4),f=r(6),c=r(11),h=r(19),l=r(14),m=r(384),p=r(97),g=r(389),v=function(){function e(e){var t=this;this.consecutiveErrorCount=0,this.reOpenMse=function(){var e=Object.keys(t.segmentQueues);if(e.length<1)return Promise.resolve();var r=e.find(function(e){return t.timestampOffset.hasOwnProperty(e)});return r?t.setTimestampOffset(r,t.timestampOffset[r]):t.setTimestampOffset(e[0],0)},this.firePictureInPictureEvent=function(){t.video.isPictureInPicture()?t.context.eventHandler.dispatchEvent(f.InternalEvent.ViewModeChanged,{from:void 0,to:u.ViewMode.PictureInPicture,legacy:void 0},!0):t.context.eventHandler.dispatchEvent(f.InternalEvent.ViewModeChanged,{from:u.ViewMode.PictureInPicture,to:void 0,legacy:void 0},!0)},this.resetConsecutiveErrorCountCallback=function(e){e.time&&e.time>0&&(t.consecutiveErrorCount=0)},this.processSegmentQueues=function(){var e=Object.keys(t.segmentQueues).filter(function(e){return t.segmentQueues[e].length>0}).map(function(e){return t.addSegmentFromQueueToMse(e)});return 0===e.length?Promise.resolve():Promise.all(e).then(t.processSegmentQueues)["catch"](function(e){if(e!==s.SOURCE_BUFFER_APPEND_STATUS.SUSPENDED)throw e})},this.context=e,this.logger=e.logger,this.video=e.videoElement,this.settings=e.settings,this.readyPromise=Promise.resolve(),this.drmManagerUnloadPromise=Promise.resolve(),this.eventHandler=null,this.timestampOffset={},this.currentTime=0,this.init()}return e.prototype.createMSEWrapper=function(){return new p.MSEWrapper(this.context,{gapTolerance:3})},e.prototype.createDRMManager=function(){return n.ModuleManager.has(i.ModuleName.DRM)?new(n.ModuleManager.get(i.ModuleName.DRM).DRMManager)(this.context):null},e.prototype.init=function(){var e=this;this.segmentQueueProcessingPromise=Promise.resolve(),this.mse=this.createMSEWrapper(),this.readyPromise=this.readyPromise.then(function(){return e.mse.createNewMSE()}).then(function(){e.isShutdownForPeriodSwitch=!1}),this.drmManager=this.createDRMManager(),this.needsInitialSeek=!0,this.segmentQueues={},this.setCurrentTimeContext=null,this.setCurrentTimeDelayedContext=null,this.quotaExceededMap=new h.ObjectMap,this.quotaExceededDeferredMap=new h.ObjectMap,this.gapHandler=new m.GapHandler(this.context),null==this.eventHandler&&(this.eventHandler=new g.VideoEventHandler(this.video),this.eventHandler.on(l.MediaElementEvent.timeupdate,this.resetConsecutiveErrorCountCallback)),this.on(l.MediaElementEvent.webkitpresentationmodechanged,this.firePictureInPictureEvent)},e.prototype.trackRendererError=function(){this.consecutiveErrorCount++,this.consecutiveErrorCount>=this.settings.MAX_CONSECUTIVE_RENDERER_ERRORS&&this.context.eventHandler.fireError(new d.PlayerError(a.ErrorCode.PLAYBACK_VIDEO_DECODING_ERROR))},e.prototype.hasSourceBuffers=function(){return Object.keys(this.segmentQueues).length>0},e.prototype.hasDataInSourceBuffers=function(){var e=this,t=Object.keys(this.segmentQueues);return this.hasSourceBuffers()&&t.every(function(t){return e.mse.getBufferedRanges(t).length>0})},e.prototype.addBuffer=function(e,t){var r=this;if(null===this.mse)return!1;var n=Boolean(this.mse.addBuffer(e,t));return n&&(this.mse.addUpdateEndCallback(e,function(){return r.quotaExceededMap.set(e,!1)}),this.segmentQueues[e]=[]),n},e.prototype.appendData=function(e){var t=e.getMimeType();return this.segmentQueues[t].push(e),this.segmentQueueProcessingPromise=this.segmentQueueProcessingPromise["catch"](function(){}).then(this.processSegmentQueues),this.segmentQueueProcessingPromise},e.prototype.isDataBeingAppended=function(e){if(null===this.mse)return!1;var t=this.segmentQueues&&this.segmentQueues[e]&&this.segmentQueues[e].length>0;return t||this.mse.isAnyBufferUpdating()},e.prototype.getBufferedRanges=function(e){if(null===this.mse||!this.segmentQueues.hasOwnProperty(e))return[];var t=o.BufferRangeHelper.getRangesFromQueue(this.segmentQueues[e],this.settings.GAP_TOLERANCE);return t=t.concat(this.mse.getBufferedRanges(e)),t=o.BufferRangeHelper.mergeRanges(t,this.settings.GAP_TOLERANCE)},e.prototype.getEndOfBufferTime=function(){var e=this,t=[];return Object.keys(this.segmentQueues).forEach(function(r){var n=e.getBufferedRanges(r);if(n.length>0){var i=n[n.length-1].end;t.push(i)}}),0===t.length?null:Math.min.apply(Math,t)},e.prototype.removeDataFromSegmentQueues=function(e,t,r){void 0===t&&(t=-(1/0)),void 0===r&&(r=1/0),this.segmentQueues.hasOwnProperty(e)&&(this.segmentQueues[e]=this.segmentQueues[e].filter(function(e){var n=e.getDuration(),i=e.getPlaybackTime();return i<t||i+n>r}))},e.prototype.removeData=function(e,t,r){if(null===this.mse)return Promise.reject(null);var n=void 0===t&&void 0===r;return n&&this.saveCurrentTime(),this.removeDataFromSegmentQueues(e,t,r),this.mse.removeFromBuffer(e,t,r)},e.prototype.getDroppedVideoFrames=function(){return this.video.droppedVideoFrames},e.prototype.setPlaybackSpeed=function(e){!isNaN(e)&&e>0&&(this.video.playbackRate=e)},e.prototype.getPlaybackSpeed=function(){return this.video.playbackRate||1},e.prototype.setVolume=function(e){isNaN(e)||(this.video.volume=Math.min(e/100,1))},e.prototype.getVolume=function(){return 100*this.video.volume},e.prototype.mute=function(){this.video.muted=!0},e.prototype.unmute=function(){this.video.muted=!1},e.prototype.isMuted=function(){return this.video.muted},e.prototype.play=function(){var e=this,t=this.video.play()["catch"](function(t){if(e.isShutdownForPeriodSwitch)return e.ready();throw t});if(this.needsInitialSeek){this.needsInitialSeek=!1,this.setCurrentTimeContext&&(this.setCurrentTimeContext.isInitialSeek=!0);var r=this.setCurrentTimeContext&&this.setCurrentTimeContext.time||this.getCurrentTime();this.setCurrentTime(r)["catch"](function(){e.logger.debug("Couldn't set current time on initial play")})}return t},e.prototype.pause=function(){this.video.pause()},e.prototype.end=function(){this.pause(),this.cancelSetCurrentTimeDelayed()},e.prototype.isPaused=function(){return this.video.paused},e.prototype.setDuration=function(e){null!==this.mse&&(e=Math.floor(1e4*e)/1e4,this.duration=e,this.mse.setDuration(e))},e.prototype.getDuration=function(){return this.video.duration},e.prototype.setCurrentTime=function(e){var t=this;if(null===this.mse)return Promise.reject("MSE is not open");if(e=Math.ceil(100*e)/100,this.setCurrentTimeContext){if(this.setCurrentTimeContext.time===e)return this.setCurrentTimeContext.promise;this.cancelSetCurrentTimeDelayed()}this.setCurrentTimeContext={time:e,isInitialSeek:this.needsInitialSeek};var r=Promise.resolve();return this.mse.readyState===p.MediaSourceReadyState.open||this.isInBufferSeek(e)||(this.logger.debug("reopen MSE on setCurrentTime"),r=this.reOpenMse()),this.setCurrentTimeContext.promise=r.then(function(){return t.setCurrentTimeInternal(e)["catch"](function(r){return t.logger.debug("could not set time "+e+" on video element",r),t.getCurrentTime()}).then(function(e){return t.needsInitialSeek=!1,e})})},e.prototype.getCurrentVideoTime=function(){return this.video.currentTime},e.prototype.getCurrentFallbackTime=function(){var e=this.setCurrentTimeContext;return e&&e.isInitialSeek&&e.time!==-1?this.setCurrentTimeContext.time:this.hasDataInSourceBuffers()?this.getCurrentVideoTime():this.currentTime},e.prototype.getCurrentTime=function(e){return e?this.getCurrentVideoTime():this.getCurrentFallbackTime()},e.prototype.getSnapshotData=function(e,t){void 0===t&&(t=1);try{var r=this.video.videoWidth,n=this.video.videoHeight;this.snapshotCanvas||(this.snapshotCanvas=document.createElement("canvas"),this.snapshotCanvas.id="snapshotHiddenCanvas"),this.snapshotCanvas.width=r,this.snapshotCanvas.height=n;var i=this.snapshotCanvas.getContext("2d");i.drawImage(this.video.getWrappedElement(),0,0,r,n);var o=void 0;return"image/jpeg"===e||"image/webp"===e?(t=Math.max(t,0),t=Math.min(t,1),o=this.snapshotCanvas.toDataURL(e,t)):o=this.snapshotCanvas.toDataURL(e,t),{height:n,width:r,data:o}}catch(s){return s&&s.message?this.logger.debug("Snapshot acquisition failed: "+s.message):this.logger.debug("Snapshot acquisition failed"),null}},e.prototype.ready=function(){var e=this;return this.drmManagerUnloadPromise.then(function(){return e.video.eventHandler.clearEventSuppression(l.MediaElementEvent.error),null===e.mse&&e.init(),e.readyPromise})},e.prototype.setTimestampOffset=function(e,t){var r=this;return null===this.mse?Promise.resolve():this.mse.setTimestampOffset(e,t).then(function(){r.timestampOffset[e]=t})},e.prototype.shutdown=function(e){var t=this;if(void 0===e&&(e=!1),!this.mse)return this.readyPromise;this.isShutdownForPeriodSwitch=e,this.saveCurrentTime();for(var r in this.segmentQueues)this.segmentQueues.hasOwnProperty(r)&&delete this.segmentQueues[r];return this.mse.tearDownMediaSource(),this.mse=null,this.cancelSetCurrentTimeDelayed(),this.gapHandler&&(this.gapHandler.shutdown(),this.gapHandler=null),this.eventHandler&&!e&&(this.eventHandler.dispose(),this.eventHandler=null),this.drmManager&&(this.drmManagerUnloadPromise=this.drmManager.shutdown()),this.quotaExceededMap.clear(),this.quotaExceededDeferredMap.clear(),this.drmManagerUnloadPromise.then(function(){return t.readyPromise})},e.prototype.release=function(){var e=this,t=Promise.resolve();for(var r in this.segmentQueues)this.segmentQueues.hasOwnProperty(r)&&null!==this.mse&&delete this.segmentQueues[r];return this.mse&&this.mse.dispose(),this.readyPromise=Promise.resolve(),this.timestampOffset={},this.cancelSetCurrentTimeDelayed(),this.gapHandler&&(this.gapHandler.shutdown(),this.gapHandler=null),this.off(l.MediaElementEvent.webkitpresentationmodechanged,this.firePictureInPictureEvent),this.eventHandler&&(this.eventHandler.off(l.MediaElementEvent.timeupdate,this.resetConsecutiveErrorCountCallback),this.eventHandler.dispose(),this.eventHandler=null),this.drmManager&&(t=this.drmManager.shutdown()["catch"](function(t){e.logger.debug("could not shut down DRM manager",t)}),this.drmManager=null),t},e.prototype.on=function(e,t){this.eventHandler.on(e,t)},e.prototype.off=function(e,t){this.eventHandler&&this.eventHandler.off(e,t)},e.prototype.setDrmConfig=function(e,t){return this.drmManager.setConfig(e,t)},e.prototype.addDrmInitData=function(e){var t=this;this.drmManager.ready().then(function(){return t.drmManager.addInitData(e)})["catch"](function(){return t.logger.debug("Adding DRM init data failed!")})},e.prototype.isLicenseRequestOngoing=function(){return!!this.drmManager&&this.drmManager.isLicenseRequestOngoing()},e.prototype.isMediaTypeSupported=function(e,t){return"MediaSource"in window&&MediaSource.isTypeSupported(e+'; codecs="'+t+'"')},e.prototype.setEndOfStream=function(e){return void 0===e&&(e=!0),e?this.hasSourceBuffers()&&null!==this.mse?(this.setCurrentTimeDelayedContext&&this.setCurrentTimeDelayedContext.time>=this.duration&&this.cancelSetCurrentTimeDelayed(this.setCurrentTimeInternal(this.getEndOfBufferTime())),this.mse.endOfStream()):(this.logger.debug("Cannot signal EOS as no buffers have been added yet"),Promise.resolve()):this.mse.readyState!==p.MediaSourceReadyState.open?this.reOpenMse():Promise.resolve()},e.prototype.isInBufferSeek=function(e){var t=this.getRangesInSourceBuffers(),r=this.getRangesPendingRemoval();for(var n in r){var i=r[n];if(i.start<=e&&i.end>=e)return!1}return!!t&&o.BufferRangeHelper.isInBufferedRange(t,e)},e.prototype.adjustTimeToNextCommonBufferStart=function(e){if(this.isInBufferSeek(e))return e;var t=o.BufferRangeHelper.getCommonBufferedRanges(this.getRangesInSourceBuffers()).filter(function(t){return t.getEnd()>=e}).map(function(e){return e.getStart()}).filter(function(e){return!isNaN(e)});return 0===t.length?NaN:(e=Math.max.apply(null,t),this.logger.debug("adjust current time to buffer start: "+e),e)},e.prototype.getRangesInSourceBuffers=function(){if(null===this.mse)return null;var e={};for(var t in this.segmentQueues)if(this.segmentQueues.hasOwnProperty(t)&&(e[t]=this.mse.getBufferedRanges(t),e[t].length<1))return null;return e},e.prototype.getRangesPendingRemoval=function(){if(null===this.mse||!this.mse.isBufferRemovalPending())return{};var e={};for(var t in this.segmentQueues)this.segmentQueues.hasOwnProperty(t)&&(e[t]=this.mse.getRangePendingRemoval(t)||{});return e},e.prototype.addSegmentFromQueueToMse=function(e){var t=this;return null===this.mse?Promise.resolve():(this.mse.readyState!==p.MediaSourceReadyState.open&&this.reOpenMse(),this.mse.addToBuffer(this.segmentQueues[e][0]).then(function(){t.segmentQueues[e].shift(),t.drmManager&&t.hasDataInSourceBuffers()&&t.drmManager.signalInitDataShouldBeAvailable()})["catch"](function(r){if(r===s.SOURCE_BUFFER_APPEND_STATUS.FAILURE&&(t.trackRendererError(),t.eventHandler.fire(l.MediaElementEvent.error,{code:a.ErrorCode.INTERNAL_ERROR})),t.mse&&r===s.SOURCE_BUFFER_APPEND_STATUS.QUOTA_EXCEEDED){t.quotaExceededMap.set(e,!0),t.quotaExceededDeferredMap.has(e)||t.quotaExceededDeferredMap.set(e,new c.Deferred);var n=t.quotaExceededDeferredMap.get(e);return t.mse.addOneUpdateEndCallback(e,n.resolve).then(function(){t.quotaExceededDeferredMap["delete"](e),t.context.logger.debug("Appending segment after quota has been exceeded...")}),n.promise.then(t.processSegmentQueues)}return t.mse?t.mse.queueActionOnBuffer(e,t.processSegmentQueues):Promise.reject(r)}))},e.prototype.cancelSetCurrentTimeDelayed=function(e){void 0===e&&(e=this.getCurrentTime()),this.setCurrentTimeDelayedContext&&(clearTimeout(this.setCurrentTimeDelayedContext.timeoutId),this.setCurrentTimeDelayedContext.promiseResolve(e),this.setCurrentTimeDelayedContext=null)},e.prototype.recoverFromExceededQuota=function(e){var t=this;Object.keys(this.segmentQueues).forEach(function(r){t.segmentQueues[r]=t.segmentQueues[r].filter(function(t){return t.getPlaybackTime()+t.getDuration()>=e}),t.quotaExceededMap.set(r,!1)}),this.quotaExceededDeferredMap.values.forEach(function(e){return e.reject()}),this.quotaExceededDeferredMap.clear()},e.prototype.setCurrentTimeDelayed=function(e){var t=this;return this.logger.debug("delayed set time "+e+" on video element"),this.cancelSetCurrentTimeDelayed(),new Promise(function(r,n){t.setCurrentTimeDelayedContext={time:e,promiseReject:n,promiseResolve:r,timeoutId:setTimeout(function(){r(t.setCurrentTimeInternal(e))},1e3*t.settings.SYNC_ON_SEEK_TIMEOUT)}})},e.prototype.setCurrentTimeInternal=function(e){var t=this;return null===this.mse?Promise.reject("Couldn't set current time, MSE is not open"):(this.quotaExceededMap.values.some(function(e){return e})&&this.recoverFromExceededQuota(e),this.mse.waitForBuffers().then(function(){var r=t.adjustTimeToNextCommonBufferStart(e);if(isNaN(r))return t.setCurrentTimeDelayed(e);try{return t.logger.debug("set time on video element to "+r),t.cancelSetCurrentTimeDelayed(),t.setCurrentTimeContext=null,t.video.currentTime=r,t.video.currentTime}catch(n){return t.logger.debug("failed to set current time",n),t.setCurrentTimeDelayed(r)}}))},e.prototype.saveCurrentTime=function(){this.setCurrentTimeContext?this.currentTime=this.setCurrentTimeContext.time:this.currentTime=this.video.currentTime},e}();t.MSERenderer=v},180:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(7),i=function(){function e(){}return e.prototype.getSupportedTechnologies=function(){return[{player:n.PlayerType.Html5,streaming:n.StreamType.Dash},{player:n.PlayerType.Html5,streaming:n.StreamType.Hls},{player:n.PlayerType.Html5,streaming:n.StreamType.Smooth}]},e}();t.TechnologyChecker=i},384:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1),i=r(6),o=r(14),s=r(387),u=function(){function e(e){var t=this;this.timerCancelEvents=[o.MediaElementEvent.seeking,o.MediaElementEvent.seeked,o.MediaElementEvent.pause,o.MediaElementEvent.playing,o.MediaElementEvent.error],this.consecutiveUpdateUntilWaitingThreshold=5,this.consecutiveWaitingThreshold=10,this.intervalDelay=250,this.checkIfWaiting=function(){t.video.paused||t.video.seeking&&!t.isAtEndOfBufferedRange(t.video.currentTime)||t.lastTimeupdate&&!(Date.now()-t.lastTimeupdate>1e3)||(t.consecutiveWaiting++,t.waiting())},this.waiting=function(){t.video.seeking&&!t.isAtEndOfBufferedRange(t.video.currentTime)||t.setTimer()},this.timeupdate=function(){if(t.lastTimeupdate=Date.now(),!t.video.paused&&!t.video.seeking){t.hasPlayedAnythingYet=!0;var e=t.video.currentTime;t.consecutiveUpdates===t.consecutiveUpdateUntilWaitingThreshold&&e===t.lastRecordedTime?(t.consecutiveUpdates++,t.waiting()):e===t.lastRecordedTime?t.consecutiveUpdates++:(t.consecutiveUpdates=0,t.consecutiveWaiting=0,t.lastRecordedTime=e)}},this.cancelTimer=function(){t.consecutiveUpdates=0,t.consecutiveWaiting=0,clearTimeout(t.timer),t.timer=null},this.skipTheGap=function(e){var r=t.video.buffered,n=t.video.currentTime,i=s.Ranges.findNextRange(r,n);t.consecutiveUpdates=0,t.consecutiveWaiting=0,t.timer=null,0!==i.length&&n===e&&(t.context.logger.debug("skipTheGap: currentTime: "+n+" scheduled currentTime: "+e+" nextRange start: "+i.start(0)),t.setCurrentTime(i.start(0)+s.Ranges.TIME_FUDGE_FACTOR))},this.onPlaying=function(){t.hasPlayedAnythingYet=!0,t.context.eventHandler.off(n.PlayerEvent.Playing,t.onPlaying)},this.context=e,this.video=e.videoElement,this.consecutiveUpdates=0,this.consecutiveWaiting=0,this.hasPlayedAnythingYet=!1,this.video.addEventListener(o.MediaElementEvent.waiting,this.waiting),this.video.addEventListener(o.MediaElementEvent.timeupdate,this.timeupdate),this.context.eventHandler.on(n.PlayerEvent.Playing,this.onPlaying);for(var r=0,i=this.timerCancelEvents;r<i.length;r++){var u=i[r];this.video.addEventListener(u,this.cancelTimer)}this.timeupdateIntervalId=window.setInterval(this.checkIfWaiting,this.intervalDelay)}return e.prototype.gapFromVideoUnderflow=function(e,t){for(var r=s.Ranges.findGaps(e),n=0;n<r.length;n++){var i=r.start(n),o=r.end(n);if(t-i<4&&t-i>2)return{start:i,end:o}}return null},e.prototype.setTimer=function(){if(!this.timer&&this.hasPlayedAnythingYet){var e=this.video.buffered,t=this.video.currentTime,r=s.Ranges.findNextRange(e,t);if(0!==r.length){var n=r.start(0)-t;this.context.logger.debug("setTimer: stopped at: "+t+", setting timer for:"+n+", seeking to:"+r.start(0)),this.timer=window.setTimeout(this.skipTheGap.bind(this),n,t)}else{var o=this.gapFromVideoUnderflow(e,t);if(o)this.context.logger.debug("setTimer: Encountered a gap in video from: "+o.start+"to: "+o.end+"seeking to current time: "+t),this.consecutiveWaiting=0,this.setCurrentTime(t);else if(this.consecutiveWaiting>this.consecutiveWaitingThreshold){this.context.logger.debug("currentTime not advancing although the video element is neither paused nor seeking"),this.context.eventHandler.dispatchEvent(i.InternalEvent.CurrentTimeNotAdvancing,void 0,!0);var u=this.video.buffered,a=!1,d=1/0;this.consecutiveWaiting=0;for(var f=0;f<u.length;f++){var c=u.start(f),h=u.end(f);if(a&&!isFinite(d)){d=c;break}c<t&&h>t&&t+2*s.Ranges.TIME_FUDGE_FACTOR>h&&(a=!0)}a&&isFinite(d)?(this.context.logger.debug("playback stalled at very small gap, skipping it by seeking to "+d),this.setCurrentTime(d)):this.context.settings.QJY_BROWSER_WORKAROUND?this.setCurrentTime(t+.01):this.setCurrentTime(t)}}}},e.prototype.isAtEndOfBufferedRange=function(e){for(var t=this.video.buffered,r=0;r<t.length;r++)if(t.end(r)===e)return!0;return!1},e.prototype.shutdown=function(){this.video.removeEventListener(o.MediaElementEvent.waiting,this.waiting),this.video.removeEventListener(o.MediaElementEvent.timeupdate,this.timeupdate),this.context.eventHandler.off(n.PlayerEvent.Playing,this.onPlaying);for(var e=0,t=this.timerCancelEvents;e<t.length;e++){var r=t[e];this.video.removeEventListener(r,this.cancelTimer)}clearInterval(this.timeupdateIntervalId),this.cancelTimer(),this.waiting=null,this.timeupdate=null,this.setTimer=null},e.prototype.setCurrentTime=function(e){try{this.video.currentTime=e}catch(t){this.context.logger.debug("GapHandler failed to set currentTime on video element to "+e,t)}},e}();t.GapHandler=u},385:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),i=r(179),o=r(97),s=r(180);t.MSERendererModuleDefinition={name:n.ModuleName.RendererMse,module:{MSEWrapper:o.MSEWrapper,MSERenderer:i.MSERenderer,technologyChecker:new s.TechnologyChecker}},t["default"]=t.MSERendererModuleDefinition},386:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e){this.value=e}return e}(),i=function(){function e(){this.count=0}return Object.defineProperty(e.prototype,"length",{get:function(){return this.count},enumerable:!0,configurable:!0}),e.prototype.dequeue=function(){if(0!==this.count){var e=this.last;return this.last=e.previous,e.previous=null,e.next=null,this.count--,e.value}},e.prototype.enqueue=function(e){if(0===this.count){var t=new n(e);this.first=t,this.last=t}else{var r=this.first;this.first=new n(e),this.first.next=r,r.previous=this.first}this.count++},e.prototype.isEmpty=function(){return 0===this.length},e}();t.LinkedListQueue=i},387:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Ranges=function(){function e(e,t){return e>=0&&e<=t}function t(t,r,n){return e(n,r.length-1)?r[n][t]:null}function r(e){return void 0===e||0===e.length?{length:0,start:function(){return 0},end:function(){return 0}}:{length:e.length,start:function(r){return t(0,e,r)},end:function(r){return t(1,e,r)}}}function n(e,t){return Array.isArray(e)?r(e):void 0===e||void 0===t?r():r([[e,t]])}var i=1/30,o=function(e,t){var r=[];if(e&&e.length)for(var i=0;i<e.length;i++)t(e.start(i),e.end(i))&&r.push([e.start(i),e.end(i)]);return n(r)},s=function(e,t){return o(e,function(e){return e-i>=t})},u=function(e){if(e.length<2)return n();for(var t=[],r=1;r<e.length;r++){var i=e.end(r-1),o=e.start(r);t.push([i,o])}return n(t)};return{findNextRange:s,findGaps:u,TIME_FUDGE_FACTOR:i}}()},388:function(e,t,r){"use strict";function n(e){for(var t=[],r=0;r<e.length;r++)t.push({start:e.start(r),end:e.end(r)});return t}Object.defineProperty(t,"__esModule",{value:!0});var i=r(11),o=r(386),s=function(){function e(e){var t=this;this.onUpdateSuccess=function(){t.updateExposedBufferRanges();for(var e;null!=(e=t.pendingUpdateEndedPromises.dequeue());)e.resolve()},this.onUpdateError=function(e){for(var r;null!=(r=t.pendingUpdateEndedPromises.dequeue());)r.reject(e)},this.ready=function(){return t.buffer.updating?t.onUpdateEnded():Promise.resolve()},this.buffer=e,this.bufferedRanges=[],this.queuePromise=Promise.resolve(),this.pendingUpdateEndedPromises=new o.LinkedListQueue,["error","abort","sourceended","sourceclose"].forEach(function(e){t.buffer.addEventListener(e,t.onUpdateError)}),this.buffer.addEventListener("updateend",this.onUpdateSuccess)}return e.prototype.updateExposedBufferRanges=function(){try{this.bufferedRanges=n(this.buffer.buffered)}catch(e){}},e.prototype.onUpdateEnded=function(){var e=new i.Deferred;return this.pendingUpdateEndedPromises.enqueue(e),e.promise},e.prototype.queueAction=function(e){var t=this,r=this.queuePromise.then(function(){return t.ready()}).then(function(){return Promise.resolve(e()).then(function(){return t.ready()})});return this.queuePromise=r["catch"](function(){}),r},e.prototype.dispose=function(){var e=this;["error","abort","sourceended","sourceclose"].forEach(function(t){e.buffer.removeEventListener(t,e.onUpdateError)}),this.buffer.removeEventListener("updateend",this.onUpdateSuccess)},e}();t.SourceBufferWrapper=s},389:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e){var t=this;this.addTimeToEvent=function(e){return e.time=t.video&&t.video.currentTime||0,e},this.video=e}return e.prototype.on=function(e,t){this.video&&this.video.addEventListener(e,t,!1,this.addTimeToEvent)},e.prototype.off=function(e,t){this.video&&this.video.removeEventListener(e,t)},e.prototype.fire=function(e,t){this.video&&this.video.eventHandler.triggerEvent(e,t)},e.prototype.dispose=function(){},e}();t.VideoEventHandler=n},97:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(32),o=r(1),s=r(51),u=r(3),a=r(4),d=r(18),f=r(16),c=r(6),h=r(29),l=r(11),m=r(388);!function(e){e.closed="closed",e.open="open",e.ended="ended"}(n=t.MediaSourceReadyState||(t.MediaSourceReadyState={}));var p=function(){function e(e,t){var r=this;this.waitForBuffer=function(e){return r.sourceBuffers.hasOwnProperty(e)?r.mseReady().then(function(){return r.sourceBuffers[e].ready()}):Promise.reject("No SourceBuffer for '"+e+"' available")},e.videoElement&&(this.context=e,this.logger=e.logger,this.video=e.videoElement,this.config=t,this.gapTolerance=t.gapTolerance||.5,this.searchRealEnd=t.searchRealEnd||!1,this.negativeDTSCorrectionOffset=0,this.sourceBuffers={},this.isInit=!1,this.updateEndListeners=new h.ArrayMap)}return e.prototype.getBufferedRanges=function(e){return this.sourceBuffers.hasOwnProperty(e)?this.sourceBuffers[e].bufferedRanges:[]},e.prototype.printDetailedBufferRange=function(e,t){var r;try{r=e.buffered}catch(n){return}for(var i=0;i<r.length;i++)this.logger.debug(t+" buffer range ["+i+"]: "+r.start(i)+" - "+r.end(i))},e.prototype.getBufferStartTime=function(){var e=this,t=Object.keys(this.sourceBuffers).map(function(t){return 0===e.sourceBuffers[t].bufferedRanges.length?0:e.sourceBuffers[t].bufferedRanges[0].start});return Math.max.apply(null,t)},e.prototype.onBufferChanged=function(e,t){if(t&&"target"in t&&t.target){var r=t.target;this.printDetailedBufferRange(r,e)}this.context.eventHandler.dispatchEvent(c.InternalEvent.BufferChanged,{mimeType:e},!0)},e.prototype.addBuffer=function(e,t){var r=this;if(this.isInit&&!this.sourceBuffers.hasOwnProperty(e))try{var n=this.mediaSource.addSourceBuffer(e+"; codecs="+t),i=function(t){return r.onBufferChanged(e,t)};this.sourceBuffers[e]=new m.SourceBufferWrapper(n),this.updateEndListeners.add(e,i),this.addUpdateEndCallback(e,i)}catch(s){return this.logger.debug("Could not add SourceBuffer for "+e+" with codecs "+t+":"+s),this.context.eventHandler.dispatchEvent(o.PlayerEvent.Warning,new d.PlayerWarning(f.WarningCode.SOURCE_CODEC_OR_FILE_FORMAT_NOT_SUPPORTED)),null}return this.logger.debug("Added SourceBuffer for "+e+" with codecs "+t),this.searchRealEnd||isNaN(this.mediaSource.duration)||(this.sourceBuffers[e].appendWindowEnd=this.mediaSource.duration),this.sourceBuffers[e].buffer},e.prototype.setTimestampOffset=function(e,t){var r=this,n=function(){var n=r.sourceBuffers[e];n&&(r.logger.debug("setting new source buffer ["+e+"] offset:"+t),n.buffer.timestampOffset=t)};return this.sourceBuffers.hasOwnProperty(e)?(t&&!isNaN(t)||(this.logger.debug("source buffer ["+e+"] offset is "+t+", setting it to 0"),t=0),this.queueActionOnBuffer(e,n)):(this.logger.debug("no such source buffer found (mime type="+e+")"),Promise.resolve())},e.prototype.removeFromBuffer=function(e,t,r){var i=this;return this.queueActionOnBuffer(e,function(){try{if(i.video.currentTime>=0&&i.sourceBuffers.hasOwnProperty(e)&&i.sourceBuffers[e].buffer.buffered.length>0){var s=i.sourceBuffers[e].buffer,u=t||s.buffered.start(0),a=r||s.buffered.end(s.buffered.length-1);if(u>=0&&a>u){if(i.sourceBuffers[e].removalPending=!0,i.sourceBuffers[e].rangePendingRemoval={start:u,end:a},i.mediaSource.readyState===n.open){var d=i.sourceBuffers[e].onUpdateEnded().then(function(){i.sourceBuffers[e]&&(i.sourceBuffers[e].rangePendingRemoval=null,i.sourceBuffers[e].removalPending=!1,i.logger.debug("successfully removed buffer for "+e+" (from "+u+" to "+a+")"))});return i.logger.debug("removing buffer for "+e+" (from "+u+" to "+a+")"),i.sourceBuffers[e].buffer.remove(u,a),d}i.logger.debug("cannot remove buffer for "+e+" (from "+u+" to "+a+"): MediaSource is not open"),i.addOneSourceOpenCallback(function(){i.removeFromBuffer(e,u,a)["catch"](function(t){i.logger.debug("Couldn't remove buffer from "+u+" to "+a+" for "+e,t)})})}}}catch(c){i.context.eventHandler.dispatchEvent(o.PlayerEvent.Warning,{message:f.WarningCode[f.WarningCode.PLAYBACK_WARNING]+". Exception: "+JSON.stringify(c),code:f.WarningCode.PLAYBACK_WARNING})}})},e.prototype.removeBuffer=function(e){var t=this;if(this.sourceBuffers.hasOwnProperty(e)&&Boolean(this.sourceBuffers[e])){if(this.mediaSource&&this.mediaSource.readyState===n.open&&this.queueActionOnBuffer(e,function(){return t.sourceBuffers[e].buffer.abort()}),e.indexOf("text")>-1||e.indexOf("application")>-1)this.removeFromBuffer(e)["catch"](function(e){t.logger.debug("Error removing buffer data",e)});else try{(this.updateEndListeners.get(e)||[]).slice().forEach(function(r){t.removeUpdateEndCallback(e,r)}),this.mediaSource.removeSourceBuffer(this.sourceBuffers[e].buffer)}catch(r){}this.sourceBuffers[e].dispose(),delete this.sourceBuffers[e],this.logger.debug("Removed SourceBuffer for "+e)}},e.prototype.resetAllBuffers=function(){if(null!==this.mediaSource){for(var e in this.sourceBuffers)this.sourceBuffers.hasOwnProperty(e)&&this.removeBuffer(e);this.sourceBuffers={},this.logger.debug("Removed all SourceBuffers")}},e.prototype.tearDownMediaSource=function(){if(this.mediaSource&&null!==this.video.getWrappedElement()){if(this.resetAllBuffers(),window&&window.URL&&"function"==typeof window.URL.revokeObjectURL&&""!==this.video.src)try{window.URL.revokeObjectURL(this.video.src)}catch(e){}this.mediaSourceReadyDeferred&&this.mediaSourceReadyDeferred.reject("MediaSource is being destroyed."),this.mediaSourceReadyDeferred=null,s.VideoElementUtil.removeSource(this.video),this.video.load(),this.mediaSource=null,this.isInit=!1,this.updateEndListeners.clear(),this.updateEndListeners=null,this.logger.debug("Detached video element and MSE")}},e.prototype.removeUpdateEndCallback=function(e,t){this.sourceBuffers.hasOwnProperty(e)&&this.sourceBuffers[e].buffer.removeEventListener("updateend",t)},e.prototype.addUpdateEndCallback=function(e,t){this.sourceBuffers.hasOwnProperty(e)&&this.sourceBuffers[e].buffer.addEventListener("updateend",t)},e.prototype.addOneUpdateEndCallback=function(e,t){return this.sourceBuffers[e].onUpdateEnded()["catch"](function(){}).then(t)},e.prototype.addSourceOpenCallback=function(e){this.mediaSource&&this.mediaSource.addEventListener("sourceopen",e)},e.prototype.removeSourceOpenCallback=function(e){this.mediaSource&&this.mediaSource.removeEventListener("sourceopen",e)},e.prototype.addOneSourceOpenCallback=function(e){var t=this,r=function(n){t.removeSourceOpenCallback(r),e(n)};this.addSourceOpenCallback(r)},e.prototype.isAnyBufferUpdating=function(){var e=this;return 0!==Object.keys(this.sourceBuffers).filter(function(t){return e.sourceBuffers[t].buffer.updating}).length},e.prototype.setDuration=function(e){var t=this;this.queueActionOnBuffers(function(){void 0===e||isNaN(e)||e<=0?t.mediaSource.duration=1/0:t.mediaSource.duration=e})["catch"](function(e){t.logger.debug("Could not set the duration of the MSE!",e)})},e.prototype.getDuration=function(){return this.mediaSource&&!isNaN(this.mediaSource.duration)?this.mediaSource.duration:0},e.prototype.isInitialized=function(){return this.isInit},Object.defineProperty(e.prototype,"readyState",{get:function(){return this.mediaSource?this.mediaSource.readyState:null},enumerable:!0,configurable:!0}),e.prototype.isBufferRemovalPending=function(){var e=this;return Object.keys(this.sourceBuffers).some(function(t){return e.sourceBuffers[t].removalPending})},e.prototype.getRangePendingRemoval=function(e){return this.sourceBuffers.hasOwnProperty(e)?this.sourceBuffers[e].rangePendingRemoval:null},e.prototype.getBufferSizeInSeconds=function(e){return this.getBufferedRanges(e).reduce(function(e,t){return e+(t.end-t.start);
},0)},e.prototype.addToBuffer=function(e){var t=this,r=e.getMimeType(),s=e.getPlaybackTime();return!e.isInit()&&s<0&&s<this.negativeDTSCorrectionOffset?(this.context.eventHandler.dispatchEvent(o.PlayerEvent.Warning,new d.PlayerWarning(f.WarningCode.PLAYBACK_NEGATIVE_DECODING_TIMESTAMP_ENCOUNTERED)),this.logger.debug("Encountered negative DTS "+s+" for "+r+" segment ("+e.getUrl()+"), attempting to correct PTO...',"),this.negativeDTSCorrectionOffset=s,Promise.all(Object.keys(this.sourceBuffers).map(function(e){return t.setTimestampOffset(e,t.sourceBuffers[e].buffer.timestampOffset-t.negativeDTSCorrectionOffset)})).then(function(){return t.addToBuffer(e)})):this.queueActionOnBuffer(r,function(){if(!t.mediaSource)return t.logger.debug("Could not queue action on SourceBuffer: MediaSource has been destroyed"),Promise.reject(i.SOURCE_BUFFER_APPEND_STATUS.FAILURE);if(t.mediaSource.readyState!==n.open)return t.logger.warn("MediaSource is not open (readyState="+t.mediaSource.readyState+")"),Promise.reject(i.SOURCE_BUFFER_APPEND_STATUS.FAILURE);if(!t.sourceBuffers.hasOwnProperty(r))return t.logger.log("sourceBuffers has no entry for "+r),Promise.reject(i.SOURCE_BUFFER_APPEND_STATUS.FAILURE);try{t.sourceBuffers[r].buffer.appendBuffer(e.getData())}catch(o){return o.name&&"QuotaExceededError"===o.name?(t.logger.debug("QuotaExceededError, trying to remove old data from buffers..."),t.context.eventHandler.dispatchEvent(c.InternalEvent.QuotaExceeded,{mimeType:r,bufferSize:t.getBufferSizeInSeconds(r)}),Promise.reject(i.SOURCE_BUFFER_APPEND_STATUS.QUOTA_EXCEEDED)):(t.video.error?t.context.eventHandler.dispatchEvent(c.InternalEvent.InternalError,new a.PlayerError(u.ErrorCode.INTERNAL_ERROR),!0):t.context.eventHandler.fireError(new a.PlayerError(u.ErrorCode.UNKNOWN,{exception:o})),Promise.reject(i.SOURCE_BUFFER_APPEND_STATUS.FAILURE))}})},e.prototype.endOfStream=function(){var e=this;return this.queueActionOnBuffers(function(){e.mediaSource.readyState===n.open?(e.logger.debug("Signaled mse end of stream"),e.mediaSource.endOfStream()):e.logger.debug("Skipped signaling EOS as the mse is not open")})["catch"](function(t){e.logger.debug("Unable to signal EOS on media source",t)})},e.prototype.waitForBuffers=function(){var e=Object.keys(this.sourceBuffers).map(this.waitForBuffer);return this.mseReady().then(function(){return Promise.all(e).then(function(){})})},e.prototype.queueActionOnBuffers=function(e){var t=this,r=new Promise(function(e,n){var i=Object.keys(t.sourceBuffers).map(function(e){var n=t.queueActionOnBuffer(e,function(){});return t.queueActionOnBuffer(e,function(){return r}).then()["catch"](),n});Promise.all(i).then(function(){return e()},n)}).then(function(){return e()}).then(function(){return Promise.all(Object.keys(t.sourceBuffers).map(function(e){return t.sourceBuffers[e].ready()})).then(function(){})});return r},e.prototype.queueActionOnBuffer=function(e,t){return this.sourceBuffers.hasOwnProperty(e)?this.sourceBuffers[e].queueAction(t):Promise.reject("No SourceBuffer for '"+e+"' available")},e.prototype.mseReady=function(){var e=this;if(this.mediaSourceReadyPromise)return this.mediaSourceReadyPromise;this.mediaSourceReadyDeferred=new l.Deferred,this.mediaSourceReadyPromise=this.mediaSourceReadyDeferred.promise;var t=function(t){n(),e.mediaSourceReadyDeferred.reject(t)},r=function(){n(),e.isInit=!0,e.mediaSourceReadyDeferred.resolve()},n=function(){e.mediaSource&&(e.mediaSource.removeEventListener("error",t),e.mediaSource.removeEventListener("sourceopen",r),e.mediaSource.removeEventListener("webkitsourceopen",r))};return this.mediaSource.addEventListener("error",t),this.mediaSource.addEventListener("sourceopen",r,!1),this.mediaSource.addEventListener("webkitsourceopen",r,!1),window&&window.URL&&"function"==typeof window.URL.createObjectURL?this.video.src=window.URL.createObjectURL(this.mediaSource):(this.logger.debug("Could not use window.URL.createObjectURL(mediaSource) as the browser claims the function does not exist."),this.mediaSourceReadyDeferred.reject("Could not create Object URL")),this.mediaSourceReadyPromise.then(function(){return e.mediaSourceReadyDeferred=null})},e.prototype.createNewMSE=function(){return this.tearDownMediaSource(),this.mediaSource=new window.MediaSource,this.mseReady()},e.prototype.dispose=function(){this.resetAllBuffers(),this.tearDownMediaSource(),this.sourceBuffers=null,this.video=null,this.config=null},e}();t.MSEWrapper=p}},[385])});
})();