-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
dash.reporting.debug.js.map
1 lines (1 loc) · 625 KB
/
dash.reporting.debug.js.map
1
{"version":3,"sources":["webpack://dashjs/webpack/universalModuleDefinition","webpack://dashjs/webpack/bootstrap","webpack://dashjs/./node_modules/path-browserify/index.js","webpack://dashjs/./node_modules/process/browser.js","webpack://dashjs/./node_modules/ua-parser-js/src/ua-parser.js","webpack://dashjs/(webpack)/buildin/amd-options.js","webpack://dashjs/./src/core/Debug.js","webpack://dashjs/./src/core/EventBus.js","webpack://dashjs/./src/core/FactoryMaker.js","webpack://dashjs/./src/core/Settings.js","webpack://dashjs/./src/core/Utils.js","webpack://dashjs/./src/core/events/CoreEvents.js","webpack://dashjs/./src/core/events/Events.js","webpack://dashjs/./src/core/events/EventsBase.js","webpack://dashjs/./src/dash/vo/UTCTiming.js","webpack://dashjs/./src/streaming/MediaPlayerEvents.js","webpack://dashjs/./src/streaming/constants/Constants.js","webpack://dashjs/./src/streaming/constants/MetricsConstants.js","webpack://dashjs/./src/streaming/metrics/MetricsReporting.js","webpack://dashjs/./src/streaming/metrics/MetricsReportingEvents.js","webpack://dashjs/./src/streaming/metrics/controllers/MetricsCollectionController.js","webpack://dashjs/./src/streaming/metrics/controllers/MetricsController.js","webpack://dashjs/./src/streaming/metrics/controllers/MetricsHandlersController.js","webpack://dashjs/./src/streaming/metrics/controllers/RangeController.js","webpack://dashjs/./src/streaming/metrics/controllers/ReportingController.js","webpack://dashjs/./src/streaming/metrics/metrics/MetricsHandlerFactory.js","webpack://dashjs/./src/streaming/metrics/metrics/handlers/BufferLevelHandler.js","webpack://dashjs/./src/streaming/metrics/metrics/handlers/DVBErrorsHandler.js","webpack://dashjs/./src/streaming/metrics/metrics/handlers/GenericMetricHandler.js","webpack://dashjs/./src/streaming/metrics/metrics/handlers/HttpListHandler.js","webpack://dashjs/./src/streaming/metrics/reporting/ReportingFactory.js","webpack://dashjs/./src/streaming/metrics/reporting/reporters/DVBReporting.js","webpack://dashjs/./src/streaming/metrics/utils/DVBErrorsTranslator.js","webpack://dashjs/./src/streaming/metrics/utils/HandlerHelpers.js","webpack://dashjs/./src/streaming/metrics/utils/ManifestParsing.js","webpack://dashjs/./src/streaming/metrics/utils/MetricSerialiser.js","webpack://dashjs/./src/streaming/metrics/utils/RNG.js","webpack://dashjs/./src/streaming/metrics/vo/DVBErrors.js","webpack://dashjs/./src/streaming/metrics/vo/Metrics.js","webpack://dashjs/./src/streaming/metrics/vo/Range.js","webpack://dashjs/./src/streaming/metrics/vo/Reporting.js","webpack://dashjs/./src/streaming/models/CustomParametersModel.js","webpack://dashjs/./src/streaming/rules/SwitchRequest.js","webpack://dashjs/./src/streaming/rules/abr/ABRRulesCollection.js","webpack://dashjs/./src/streaming/rules/abr/AbandonRequestsRule.js","webpack://dashjs/./src/streaming/rules/abr/BolaRule.js","webpack://dashjs/./src/streaming/rules/abr/DroppedFramesRule.js","webpack://dashjs/./src/streaming/rules/abr/InsufficientBufferRule.js","webpack://dashjs/./src/streaming/rules/abr/L2ARule.js","webpack://dashjs/./src/streaming/rules/abr/SwitchHistoryRule.js","webpack://dashjs/./src/streaming/rules/abr/ThroughputRule.js","webpack://dashjs/./src/streaming/rules/abr/lolp/LearningAbrController.js","webpack://dashjs/./src/streaming/rules/abr/lolp/LoLpQoEEvaluator.js","webpack://dashjs/./src/streaming/rules/abr/lolp/LoLpRule.js","webpack://dashjs/./src/streaming/rules/abr/lolp/LoLpWeightSelector.js","webpack://dashjs/./src/streaming/rules/abr/lolp/QoeInfo.js","webpack://dashjs/./src/streaming/utils/CustomTimeRanges.js","webpack://dashjs/./src/streaming/utils/SupervisorTools.js","webpack://dashjs/./src/streaming/vo/metrics/HTTPRequest.js"],"names":["LOG_LEVEL_NONE","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARNING","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG","Debug","config","context","eventBus","EventBus","getInstance","settings","logFn","instance","showLogTimestamp","showCalleeName","startTime","setup","Date","getTime","window","console","getLogFn","error","warn","info","debug","fn","bind","log","getLogger","fatal","setLogTimestampVisible","value","setCalleeNameVisible","params","doLog","level","_this","message","logTime","getClassName","getType","length","Array","apply","forEach","item","get","logLevel","dispatchEvent","trigger","Events","LOG","__dashjs_factory_name","factory","FactoryMaker","getSingletonFactory","updateSingletonFactory","EVENT_PRIORITY_LOW","EVENT_PRIORITY_HIGH","handlers","on","type","listener","scope","options","Error","priority","getHandlerIdx","handler","callback","getStreamId","streamId","mediaType","mode","inserted","some","idx","splice","push","off","payload","filters","hasOwnProperty","filter","MediaPlayerEvents","EVENT_MODE_ON_RECEIVE","call","index","reset","singletonContexts","singletonFactories","classFactories","extend","name","childInstance","override","getSingletonInstance","className","i","obj","setSingletonInstance","deleteSingletonInstances","x","getFactoryByName","factoriesArray","updateFactory","updateClassFactory","getClassFactoryByName","getClassFactory","classConstructor","undefined","create","merge","arguments","getSingletonFactoryByName","args","classInstance","extensionObject","extension","parent","prop","Settings","DISPATCH_KEY_MAP","SETTING_UPDATED_LIVE_DELAY","SETTING_UPDATED_LIVE_DELAY_FRAGMENT_COUNT","SETTING_UPDATED_CATCHUP_ENABLED","SETTING_UPDATED_PLAYBACK_RATE_MIN","SETTING_UPDATED_PLAYBACK_RATE_MAX","defaultSettings","streaming","abandonLoadTimeout","wallclockTimeUpdateInterval","manifestUpdateRetryInterval","cacheInitSegments","applyServiceDescription","applyProducerReferenceTime","applyContentSteering","eventControllerRefreshDelay","enableManifestDurationMismatchFix","capabilities","filterUnsupportedEssentialProperties","useMediaCapabilitiesApi","timeShiftBuffer","calcFromSegmentTimeline","fallbackToSegmentTimeline","metrics","maxListDepth","delay","liveDelayFragmentCount","NaN","liveDelay","useSuggestedPresentationDelay","protection","keepProtectionMediaKeys","ignoreEmeEncryptedEvent","detectPlayreadyMessageFormat","buffer","enableSeekDecorrelationFix","fastSwitchEnabled","flushBufferAtTrackSwitch","reuseExistingSourceBuffers","bufferPruningInterval","bufferToKeep","bufferTimeAtTopQuality","bufferTimeAtTopQualityLongForm","initialBufferLevel","stableBufferTime","longFormContentDurationThreshold","stallThreshold","useAppendWindow","setStallState","avoidCurrentTimeRangePruning","useChangeTypeForTrackSwitch","gaps","jumpGaps","jumpLargeGaps","smallGapLimit","threshold","enableSeekFix","enableStallFix","stallSeek","utcSynchronization","enabled","useManifestDateHeaderTimeSource","backgroundAttempts","timeBetweenSyncAttempts","maximumTimeBetweenSyncAttempts","minimumTimeBetweenSyncAttempts","timeBetweenSyncAttemptsAdjustmentFactor","maximumAllowedDrift","enableBackgroundSyncAfterSegmentDownloadError","defaultTimingSource","scheme","scheduling","defaultTimeout","lowLatencyTimeout","scheduleWhilePaused","text","defaultEnabled","liveCatchup","maxDrift","playbackRate","min","max","playbackBufferMin","Constants","LIVE_CATCHUP_MODE_DEFAULT","lastBitrateCachingInfo","ttl","lastMediaSettingsCachingInfo","cacheLoadThresholds","video","audio","trackSwitchMode","TRACK_SWITCH_MODE_ALWAYS_REPLACE","TRACK_SWITCH_MODE_NEVER_REPLACE","selectionModeForInitialTrack","TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY","fragmentRequestTimeout","manifestRequestTimeout","retryIntervals","HTTPRequest","MPD_TYPE","XLINK_EXPANSION_TYPE","MEDIA_SEGMENT_TYPE","INIT_SEGMENT_TYPE","BITSTREAM_SWITCHING_SEGMENT_TYPE","INDEX_SEGMENT_TYPE","MSS_FRAGMENT_INFO_SEGMENT_TYPE","LICENSE","OTHER_TYPE","retryAttempts","abr","movingAverageMethod","MOVING_AVERAGE_SLIDING_WINDOW","ABRStrategy","ABR_STRATEGY_DYNAMIC","additionalAbrRules","insufficientBufferRule","switchHistoryRule","droppedFramesRule","abandonRequestsRule","bandwidthSafetyFactor","useDefaultABRRules","useDeadTimeLatency","limitBitrateByPortal","usePixelRatioInLimitBitrateByPortal","maxBitrate","minBitrate","maxRepresentationRatio","initialBitrate","initialRepresentationRatio","autoSwitchBitrate","fetchThroughputCalculationMode","ABR_FETCH_THROUGHPUT_CALCULATION_MOOF_PARSING","cmcd","sid","cid","rtp","rtpSafetyFactor","CMCD_MODE_QUERY","enabledKeys","errors","recoverAttempts","mediaErrorDecode","Utils","clone","mixinSettings","source","dest","path","n","slice","update","settingsObj","copy","s","empty","mixin","src","r","l","url","modifiedUrl","URL","param","key","searchParams","set","href","e","headerStr","headers","headerPairs","trim","split","ilen","headerPair","indexOf","substring","dt","uuid","replace","c","Math","random","floor","toString","string","hash","chr","charCodeAt","originalUrl","targetUrl","original","target","protocol","origin","relativePath","relative","pathname","substr","lastIndexOf","startIndexOffset","ua","uaString","navigator","userAgent","toLowerCase","UAParser","CoreEvents","ATTEMPT_BACKGROUND_SYNC","BUFFERING_COMPLETED","BUFFER_CLEARED","BYTES_APPENDED_END_FRAGMENT","BUFFER_REPLACEMENT_STARTED","CHECK_FOR_EXISTENCE_COMPLETED","CURRENT_TRACK_CHANGED","DATA_UPDATE_COMPLETED","INBAND_EVENTS","INITIAL_STREAM_SWITCH","INIT_FRAGMENT_LOADED","INIT_FRAGMENT_NEEDED","INTERNAL_MANIFEST_LOADED","ORIGINAL_MANIFEST_LOADED","LOADING_COMPLETED","LOADING_PROGRESS","LOADING_DATA_PROGRESS","LOADING_ABANDONED","MANIFEST_UPDATED","MEDIA_FRAGMENT_LOADED","MEDIA_FRAGMENT_NEEDED","QUOTA_EXCEEDED","SEGMENT_LOCATION_BLACKLIST_ADD","SEGMENT_LOCATION_BLACKLIST_CHANGED","SERVICE_LOCATION_BLACKLIST_ADD","SERVICE_LOCATION_BLACKLIST_CHANGED","SET_FRAGMENTED_TEXT_AFTER_DISABLED","SET_NON_FRAGMENTED_TEXT","SOURCE_BUFFER_ERROR","STREAMS_COMPOSED","STREAM_BUFFERING_COMPLETED","STREAM_REQUESTING_COMPLETED","TEXT_TRACKS_QUEUE_INITIALIZED","TIME_SYNCHRONIZATION_COMPLETED","UPDATE_TIME_SYNC_OFFSET","URL_RESOLUTION_FAILED","VIDEO_CHUNK_RECEIVED","WALLCLOCK_TIME_UPDATED","XLINK_ELEMENT_LOADED","XLINK_READY","SEEK_TARGET","EventsBase","events","publicOnly","evt","UTCTiming","schemeIdUri","AST_IN_FUTURE","BUFFER_EMPTY","BUFFER_LOADED","BUFFER_LEVEL_STATE_CHANGED","BUFFER_LEVEL_UPDATED","DYNAMIC_TO_STATIC","ERROR","FRAGMENT_LOADING_COMPLETED","FRAGMENT_LOADING_PROGRESS","FRAGMENT_LOADING_STARTED","FRAGMENT_LOADING_ABANDONED","MANIFEST_LOADED","METRICS_CHANGED","METRIC_CHANGED","METRIC_ADDED","METRIC_UPDATED","PERIOD_SWITCH_STARTED","PERIOD_SWITCH_COMPLETED","QUALITY_CHANGE_REQUESTED","QUALITY_CHANGE_RENDERED","TRACK_CHANGE_RENDERED","STREAM_INITIALIZING","STREAM_UPDATED","STREAM_ACTIVATED","STREAM_DEACTIVATED","STREAM_INITIALIZED","STREAM_TEARDOWN_COMPLETE","TEXT_TRACKS_ADDED","TEXT_TRACK_ADDED","TTML_PARSED","TTML_TO_PARSE","CAPTION_RENDERED","CAPTION_CONTAINER_RESIZE","CAN_PLAY","CAN_PLAY_THROUGH","PLAYBACK_ENDED","PLAYBACK_ERROR","PLAYBACK_NOT_ALLOWED","PLAYBACK_METADATA_LOADED","PLAYBACK_LOADED_DATA","PLAYBACK_PAUSED","PLAYBACK_PLAYING","PLAYBACK_PROGRESS","PLAYBACK_RATE_CHANGED","PLAYBACK_SEEKED","PLAYBACK_SEEKING","PLAYBACK_STALLED","PLAYBACK_STARTED","PLAYBACK_TIME_UPDATED","PLAYBACK_VOLUME_CHANGED","PLAYBACK_WAITING","MANIFEST_VALIDITY_CHANGED","EVENT_MODE_ON_START","CONFORMANCE_VIOLATION","REPRESENTATION_SWITCH","ADAPTATION_SET_REMOVED_NO_CAPABILITIES","CONTENT_STEERING_REQUEST_COMPLETED","mediaPlayerEvents","init","STREAM","VIDEO","AUDIO","TEXT","MUXED","IMAGE","STPP","TTML","VTT","WVTT","CONTENT_STEERING","ABR_STRATEGY_BOLA","ABR_STRATEGY_L2A","ABR_STRATEGY_LoLP","ABR_STRATEGY_THROUGHPUT","ABR_FETCH_THROUGHPUT_CALCULATION_DOWNLOADED_DATA","ABR_FETCH_THROUGHPUT_CALCULATION_AAST","LIVE_CATCHUP_MODE_LOLP","MOVING_AVERAGE_EWMA","BAD_ARGUMENT_ERROR","MISSING_CONFIG_ERROR","TRACK_SELECTION_MODE_FIRST_TRACK","TRACK_SELECTION_MODE_HIGHEST_BITRATE","TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY","TRACK_SELECTION_MODE_WIDEST_RANGE","CMCD_MODE_HEADER","LOCATION","INITIALIZE","TEXT_SHOWING","TEXT_HIDDEN","CC1","CC3","UTF8","SCHEME_ID_URI","START_TIME","SERVICE_DESCRIPTION_DVB_LL_SCHEME","SUPPLEMENTAL_PROPERTY_DVB_LL_SCHEME","XML","ARRAY_BUFFER","DVB_REPORTING_URL","DVB_PROBABILITY","VIDEO_ELEMENT_READY_STATES","HAVE_NOTHING","HAVE_METADATA","HAVE_CURRENT_DATA","HAVE_FUTURE_DATA","HAVE_ENOUGH_DATA","FILE_LOADER_TYPES","FETCH","XHR","constants","MetricsConstants","TCP_CONNECTION","HTTP_REQUEST","TRACK_SWITCH","BUFFER_LEVEL","ABANDON_LOAD","ALLOW_LOAD","BUFFER_STATE","DVR_INFO","DROPPED_FRAMES","SCHEDULING_INFO","REQUESTS_QUEUE","MANIFEST_UPDATE","MANIFEST_UPDATE_STREAM_INFO","MANIFEST_UPDATE_TRACK_INFO","PLAY_LIST","DVB_ERRORS","HTTP_REQUEST_DVB_REPORTING_TYPE","MetricsReporting","dvbErrorsTranslator","createMetricsReporting","DVBErrorsTranslator","dashMetrics","metricsConstants","initialise","MetricsCollectionController","getReportingFactory","ReportingFactory","getMetricsHandlerFactory","MetricsHandlerFactory","dashjs","MetricsReportingEvents","METRICS_INITIALISATION_COMPLETE","BECAME_REPORTING_PLAYER","CMCD_DATA_GENERATED","metricsReportingEvents","metricsControllers","controllersToRemove","Object","keys","ManifestParsing","adapter","getMetrics","manifest","m","JSON","stringify","controller","MetricsController","initialize","resetMetricsControllers","metricsHandlersController","reportingController","rangeController","metricsEntry","RangeController","mediaElement","Range","ReportingController","mediaPlayerModel","Reporting","MetricsHandlersController","metricsHandlerFactory","handle","handleNewMetric","metric","midx","ms","nextm","useWallClockTime","ranges","rs","start","starttime","end","duration","add","_useWallClockTime","clear","CustomTimeRanges","isEnabled","numRanges","time","currentTime","reporters","reportingFactory","reporting","reporter","report","vos","logger","keyRegex","knownFactoryProducts","BufferLevel","DVBErrors","HttpList","PlayList","GenericMetricHandler","RepSwitchList","TcpList","listType","matches","match","register","unregister","BufferLevelHandler","interval","lastReportedTime","handlerHelpers","HandlerHelpers","storedVOs","getLowestBufferLevelVO","map","reduce","a","b","intervalCallback","vo","t","basename","rc","n_ms","validateN","reconstructFullMetricName","setInterval","clearInterval","DVBErrorsHandler","onInitialisationComplete","unused","metricName","HttpListHandler","storedVos","requestType","knownReportingSchemeIdUris","DVBReporting","entry","moduleName","metricSerialiser","customParametersModel","randomNumberGenerator","reportingPlayerStatusDecided","isReportingPlayer","reportingUrl","USE_DRAFT_DVB_SPEC","allowPendingRequestsToCompleteOnReset","pendingRequests","MetricSerialiser","RNG","CustomParametersModel","resetInitialSettings","doGetRequest","successCB","failureCB","req","XMLHttpRequest","withCredentials","getXHRWithCredentialsForType","oncomplete","reqIndex","status","open","onloadend","onerror","send","isArray","serialise","probability","dvb_reportingUrl","dvb_probability","abort","mpd","o","mpdurl","terror","addDVBErrors","onManifestUpdate","onServiceLocationChanged","errorcode","BASE_URL_CHANGED","servicelocation","onBecameReporter","BECAME_REPORTER","handleHttpMetric","responsecode","CONNECTION_ERROR","tresponse","_serviceLocation","onMetricEvent","onPlaybackError","reason","code","MediaError","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","CORRUPT_MEDIA_OTHER","mn","isNaN","getMetricsRangeStartTime","dynamic","range","voPeriods","reportingStartTime","presentationStartTime","getAvailabilityStartTime","getRegularPeriods","Metrics_asArray","metricEntry","Metrics","isDynamic","getIsDynamic","Range_asArray","rangeEntry","getDuration","Reporting_asArray","reportingEntry","pairs","v","isBuiltIn","prototype","encodeURIComponent","join","toISOString","round","crypto","msCrypto","ArrayType","Uint32Array","MAX_VALUE","pow","BYTES_PER_ELEMENT","NUM_RANDOM_NUMBERS","randomNumbers","getRandomValues","rand","ipaddress","SSL_CONNECTION_FAILED_PREFIX","DNS_RESOLUTION_FAILED","HOST_UNREACHABLE","CONNECTION_REFUSED","CORRUPT_MEDIA_ISOBMFF","Infinity","DEFAULT_DVB_PROBABILITY","DEFAULT_XHR_WITH_CREDENTIALS","utcTimingSources","xhrWithCredentials","licenseRequestFilters","licenseResponseFilters","customCapabilitiesFilters","customInitialTrackSelectionFunction","customAbrRules","_resetInitialSettings","setConfig","setCustomInitialTrackSelectionFunction","customFunc","resetCustomInitialTrackSelectionFunction","getCustomInitialTrackSelectionFunction","getLicenseRequestFilters","getLicenseResponseFilters","registerLicenseRequestFilter","registerLicenseResponseFilter","unregisterLicenseRequestFilter","_unregisterFilter","unregisterLicenseResponseFilter","getCustomCapabilitiesFilters","registerCustomCapabilitiesFilter","unregisterCustomCapabilitiesFilter","_findAbrCustomRuleIndex","rulename","addAbrCustomRule","rule","ABRRulesCollection","ABANDON_FRAGMENT_RULES","QUALITY_SWITCH_RULES","removeAbrCustomRule","removeAllAbrCustomRule","getAbrCustomRules","addUTCTimingSource","removeUTCTimingSource","getUTCTimingSources","checkParameterType","clearDefaultUTCTimingSources","restoreDefaultUTCTimingSources","defaultUtcTimingSource","setXHRWithCredentialsForType","useCreds","NO_CHANGE","PRIORITY","DEFAULT","STRONG","WEAK","SwitchRequest","q","p","quality","getPriority","ret","qualitySwitchRules","abandonFragmentRules","L2ARule","LoLPRule","BolaRule","ThroughputRule","InsufficientBufferRule","SwitchHistoryRule","DroppedFramesRule","AbandonRequestsRule","customRules","_getRulesWithChange","srArray","sr","getMinSwitchRequest","values","newSwitchReq","len","getMaxQuality","rulesContext","switchRequestArray","getMaxIndex","activeRules","maxQuality","shouldAbandonFragment","abandonRequestArray","shouldAbandon","rules","getQualitySwitchRules","ABANDON_MULTIPLIER","GRACE_TIME_THRESHOLD","MIN_LENGTH_TO_AVERAGE","fragmentDict","abandonDict","throughputArray","setFragmentRequestDict","id","storeLastRequestThroughputByType","throughput","switchRequest","mediaInfo","getMediaInfo","getMediaType","streamInfo","getStreamInfo","getCurrentRequest","getStableBufferTime","bufferLevel","getCurrentBufferLevel","fragmentInfo","firstByteDate","firstByteTime","segmentDuration","bytesTotal","bytesLoaded","elapsedTime","totalSampledValue","measuredBandwidthInKbps","estimatedTimeOfDownload","toFixed","getRepresentationInfo","abrController","getAbrController","bytesRemaining","bitrateList","getBitrateList","getQualityForBitrate","minQuality","getMinAllowedIndexFor","newQuality","estimateOtherBytesTotal","bitrate","getQualityFor","fragmentID","BOLA_STATE_ONE_BITRATE","BOLA_STATE_STARTUP","BOLA_STATE_STEADY","MINIMUM_BUFFER_S","MINIMUM_BUFFER_PER_BITRATE_LEVEL_S","PLACEHOLDER_BUFFER_DECAY","bolaStateDict","onBufferEmpty","onPlaybackSeeking","onMetricAdded","onQualityChangeRequested","onFragmentLoadingAbandoned","onMediaFragmentLoaded","utilitiesFromBitrates","bitrates","calculateBolaParameters","utilities","highestUtilityIndex","highestIndex","u","uIndex","bufferTime","gp","Vp","getInitialBolaState","initialState","bandwidth","state","lastQuality","clearBolaStateOnSeek","bolaState","placeholderBuffer","mostAdvancedSegmentStart","lastSegmentWasReplacement","lastSegmentStart","lastSegmentDurationS","lastSegmentRequestTimeMs","lastSegmentFinishTimeMs","checkBolaStateStableBufferTime","effectiveBufferLevel","getBolaState","getQualityFromBufferLevel","bitrateCount","score","maxBufferLevelForQuality","minBufferLevelForQuality","qBitrate","qUtility","iBitrate","iUtility","updatePlaceholderBuffer","nowMs","now","lastCallTimeMs","stateDict","chunk","checkNewSegment","trace","trequest","_tfinish","bufferAtLastSegmentRequest","maxEffectiveBufferForLastSegment","maxPlaceholderBuffer","abrQuality","wantEffectiveBufferLevel","scheduleController","getScheduleController","throughputHistory","getThroughputHistory","manifestInfo","useBufferOccupancyABR","setTimeToLoadDelay","getAverageThroughput","safeThroughput","getSafeAverageThroughput","latency","getAverageLatency","qualityForThroughput","delayS","getMaxAllowedIndexFor","DROPPED_PERCENTAGE_FORBID","GOOD_SAMPLE_SIZE","droppedFramesHistory","getDroppedFramesHistory","dfh","getFrameHistory","droppedFrames","totalFrames","maxIndex","droppedVideoFrames","totalVideoFrames","INSUFFICIENT_BUFFER_SAFETY_FACTOR","SEGMENT_IGNORE_COUNT","bufferStateDict","_onPlaybackSeeking","_onBytesAppended","checkConfig","currentBufferState","getCurrentBufferState","representationInfo","fragmentDuration","playbackController","getPlaybackController","lowLatencyEnabled","getLowLatencyModeEnabled","shouldIgnore","ignoreCount","L2A_STATE_ONE_BITRATE","L2A_STATE_STARTUP","L2A_STATE_STEADY","l2AStateDict","l2AParameterDict","_onMediaFragmentLoaded","_onMetricAdded","_onQualityChangeRequested","_getInitialL2AState","_initializeL2AParameters","_clearL2AStateOnSeek","w","prev_w","Q","segment_request_start_s","segment_download_finish_s","B_target","l2AState","_getL2AState","l2aState","l2AParameters","_checkNewSegment","L2AState","_dotmultiplication","arr1","arr2","sumdot","euclideanProjection","arr","bget","ii","sort","tmpsum","tmax","horizon","vl","alpha","sqrt","useL2AABR","react","videoModel","getVideoModel","currentPlaybackRate","getPlaybackRate","l2AParameter","diff1","throughputMeasureTime","getCurrentHttpRequest","d","downloadBytes","lastthroughput","V","sign","temp","abs","MAX_SWITCH","SAMPLE_SIZE","switchRequestHistory","getSwitchHistory","switchRequests","getSwitchRequests","drops","noDrops","dropSize","getAbandonmentStateFor","WEIGHT_SELECTION_MODES","MANUAL","RANDOM","DYNAMIC","LearningAbrController","somBitrateNeurons","bitrateNormalizationFactor","latencyNormalizationFactor","weights","sortedCenters","weightSelectionMode","_setup","_getMaxThroughput","maxThroughput","neuron","_getMagnitude","magnitude","sum","_getDistance","_getNeuronDistance","aState","rebuffer","bState","_updateNeurons","winnerNeuron","somElements","somNeuron","sigma","neuronDistance","neighbourHood","exp","_updateNeuronState","_getDownShiftNeuron","currentNeuron","currentThroughput","maxSuitableBitrate","result","getNextQuality","bufferSize","currentQualityIndex","dynamicWeightsSelector","currentLatency","currentBuffer","_getSomBitrateNeurons","throughputNormalized","targetLatency","targetRebufferLevel","targetSwitch","throughputDelta","downloadTime","getSegmentDuration","getMinBuffer","qualityIndex","_manualWeightSelection","_randomWeightSelection","_dynamicWeightSelection","minDistance","minIndex","somNeuronState","somData","distanceWeights","nextBuffer","getNextBufferWithBitrate","isBufferLow","distance","bitrateSwitch","throughputWeight","latencyWeight","bufferWeight","switchWeight","_getXavierWeights","weightVector","findWeightVector","neuronCount","weightCount","W","upperBound","bitrateVector","element","_getInitialKmeansPlusPlusCenters","_getRandomData","size","dataArray","data","centers","randomDataSet","k","nextPoint","maxDistance","currentPoint","j","leastSimilarIndex","LoLpQoeEvaluator","voPerSegmentQoeInfo","maxBitrateKbps","minBitrateKbps","setupPerSegmentQoe","sDuration","maxBrKbps","minBrKbps","_createQoeInfo","fragmentType","qoeInfo","QoeInfo","bitrateReward","bitrateSwitchPenalty","rebufferPenalty","latencyPenalty","penalty","playbackSpeedPenalty","logSegmentMetrics","segmentBitrate","segmentRebufferTime","currentPlaybackSpeed","_logMetricsInQoeInfo","rebufferTime","playbackSpeed","bitrateWSum","lastBitrate","bitrateSwitchWSum","rebufferWSum","latencyRange","latencyWSum","playbackSpeedWSum","totalQoe","getPerSegmentQoe","calculateSingleUseQoe","singleUseQoeInfo","DWS_TARGET_LATENCY","DWS_BUFFER_MIN","learningController","qoeEvaluator","currentQuality","bufferStateVO","currentBufferLevel","getCurrentLiveLatency","useLoLPABR","currentBitrate","currentBitrateKbps","httpRequest","lastFragmentDownloadTime","LoLpWeightSelector","bufferMin","valueList","weightTypeCount","weightOptions","previousLatency","_getPermutations","neurons","currentRebuffer","maxQoE","winnerWeights","winnerBitrate","deltaLatency","weightsObj","getNextBuffer","wt","weightedRebuffer","weightedLatency","totalQoE","_checkConstraints","nextLatency","list","perm","val","generate","currLen","currPerm","shift","concat","bitrateToDownload","customTimeRangeArray","mergeRanges","remove","rangeIndex1","rangeIndex2","range1","range2","checkInteger","parameter","isInt","checkRange","checkIsVideoOrAudioType","tcpid","actualurl","_stream","_mediaduration","_quality","_responseHeaders","_fileLoaderType","HTTPRequestTrace","GET","HEAD","DVB_REPORTING_TYPE","CONTENT_STEERING_TYPE"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;AClFA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,oBAAoB;AAC9B;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7SA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,0CAA0C;AAC1C;;AAEA;AACA;;AAEA;;AAEA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,IAAI;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,gBAAgB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,8CAA8C,EAAE;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sDAAsD;AACtD;;AAEA,sBAAsB;AACtB;;AAEA,+BAA+B;AAC/B;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iCAAiC,KAAK;AACtC;;AAEA,8CAA8C;AAC9C;;AAEA,uBAAuB;AACvB;;AAEA,+BAA+B,0CAA0C;AACzE;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,IAAI,WAAW,IAAI;AACpE;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA,sBAAsB,QAAQ;AAC9B;AACA,kCAAkC;AAClC;;AAEA;AACA,wDAAwD,EAAE;AAC1D;AACA,wCAAwC;AACxC,4BAA4B,IAAI;AAChC;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd,0BAA0B,EAAE;AAC5B;;AAEA;AACA;AACA,wBAAwB,EAAE,iBAAiB;AAC3C;;AAEA;AACA,0BAA0B,EAAE,UAAU;AACtC;;AAEA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA,gCAAgC,IAAI;AACpC;;AAEA;AACA,gCAAgC,EAAE,eAAe,GAAG,GAAG,aAAa,IAAI;AACxE;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA,6DAA6D,EAAE,WAAW,EAAE;AAC5E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,gBAAgB,IAAI;AACzC;;AAEA;AACA,8BAA8B,EAAE,yDAAyD,IAAI;AAC7F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA,oBAAoB;AACpB;;AAEA;AACA,0CAA0C,KAAK;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,IAAI,IAAI;;AAE7B;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;;AAEA;AACA,qBAAqB;AACrB,yBAAyB,GAAG;AAC5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kCAAkC,IAAI;AACtC,gCAAgC,EAAE;AAClC,gCAAgC,IAAI;AACpC;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA;AACA;AACA;AACA;AACA,qBAAqB,EAAE;AACvB;AACA;AACA;AACA,qBAAqB,EAAE;AACvB;AACA,sBAAsB,EAAE;AACxB;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA,uBAAuB,EAAE;AACzB,yCAAyC,EAAE;AAC3C;AACA,uBAAuB,IAAI;AAC3B;AACA,+BAA+B,IAAI;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iCAAiC,WAAW;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B;AAC1B;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,4CAA4C,QAAQ,IAAI,IAAI;AAC5D;AACA,oDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB,SAAS,IAAI;AAClC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB,KAAK;AAC5B;AACA,uBAAuB,KAAK;AAC5B;AACA,8BAA8B;AAC9B;AACA,+BAA+B;AAC/B;AACA,8BAA8B,IAAI,EAAE;AACpC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,IAAI;AAC7B;AACA;;AAEA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,IAAI,4BAA4B;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,sBAAsB;AACtB;AACA,0CAA0C;AAC1C;AACA,2DAA2D,SAAS;AACpE;AACA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,aAAa;;AAEjC;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,+BAA+B,IAAI,mCAAmC,IAAI;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,YAAY,UAAc,kBAAkB,gGAAU;AACtD,YAAY,mCAAO;AACnB;AACA,aAAa;AAAA,oGAAC;AACd,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;;ACz2BD;AACA;;;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AACA,SAASmE,QAAT,GAAoB;AAAA;;AAChB,MAAI9G,QAAJ;AACA,MAAMN,OAAO,GAAG,KAAKA,OAArB;AACA,MAAMC,QAAQ,GAAGC,yDAAQ,CAACF,OAAD,CAAR,CAAkBG,WAAlB,EAAjB;AACA,MAAMkH,gBAAgB,GAAG;AACrB,iCAA6BxE,sDAAM,CAA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;;AAGA,WAAK,IAAMC,GAAX,IAAkBF,MAAlB,EAA0B;AACtB,YAAI,CAACA,MAAM,CAACnS,cAAP,CAAsBqS,GAAtB,CAAD,IAAgC,KAAKA,GAAL,KAAa,CAACxR,QAAlD,EAA6D;AAC7D,YAAIuR,UAAU,IAAID,MAAM,CAACE,GAAD,CAAN,CAAY7E,OAAZ,CAAoB,SAApB,MAAmC,CAAC,CAAtD,EAAyD;AACzD,aAAK6E,GAAL,IAAYF,MAAM,CAACE,GAAD,CAAlB;AAEH;AACJ;;;;;;AAGUH,yEAAf,E;;;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;IACMI,S,GACF,qBAAc;AAAA;;AACV;AACA,OAAKC,WAAL,GAAmB,EAAnB;AACA,OAAK1V,KAAL,GAAa,EAAb;AACH,C;;AAGUyV,wEAAf,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;IACMpS,iB;;;;;AAEF;AACJ;AACA;AACI,+BAAc;AAAA;;AAAA;;AACV;AACA;AACR;AACA;AACA;AACA;AACA;;AACQ,UAAKsS,aAAL,GAAqB,aAArB;AAEA;AACR;AACA;AACA;AACA;;AACQ,UAAKC,YAAL,GAAoB,eAApB;AAEA;AACR;AACA;AACA;AACA;;AACQ,UAAKC,aAAL,GAAqB,cAArB;AAEA;AACR;AACA;AACA;;AACQ,UAAKC,0BAAL,GAAkC,oBAAlC;AAEA;AACR;AACA;AACA;;AACQ,UAAKC,oBAAL,GAA4B,oBAA5B;AAEA;AACR;AACA;AACA;;AACQ,UAAKC,iBAAL,GAAyB,iBAAzB;AAEA;AACR;AACA;AA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EAAf,E;;;;;;;;;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;IACMiH,O,GACF,mBAAc;AAAA;;AAEV,OAAKtiB,OAAL,GAAe,EAAf;AACA,OAAKgZ,KAAL,GAAa,EAAb;AACA,OAAKG,SAAL,GAAiB,EAAjB;AACH,C;;AAGUmJ,sEAAf,E;;;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;IACMtJ,K,GACF,iBAAc;AAAA;;AAEV;AACA,OAAKgB,SAAL,GAAiB,CAAjB;AACA,OAAKE,QAAL,GAAgBqK,QAAhB,CAJU,CAMV;;AACA,OAAKnK,iBAAL,GAAyB,KAAzB;AACH,C;;AAGUpB,oEAAf,E;;;;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AAEA;AACA,IAAMwL,uBAAuB,GAAG,IAAhC;;IAEMrL,S,GACF,qBAAc;AAAA;;AAEV,OAAK3K,WAAL,GAAmB,EAAnB;AACA,OAAK1V,KAAL,GAAa,EAAb,CAHU,CAKV;;AACA,OAAKgnB,gBAAL,GAAwB,EAAxB;AACA,OAAKC,eAAL,GAAuByE,uBAAvB;AACH,C;;AAGUrL,wEAAf,E;;;;;;;;;;;;AClDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"dash.reporting.debug.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dashjs\"] = factory();\n\telse\n\t\troot[\"dashjs\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/streaming/metrics/MetricsReporting.js\");\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.2\n Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.2',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 255;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n },\n lowerize = function (str) {\n return str.toLowerCase();\n },\n majorize = function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n },\n trim = function (str, len) {\n if (typeof(str) === STR_TYPE) {\n str = str.replace(/^\\s\\s*/, EMPTY).replace(/\\s\\s*$/, EMPTY);\n return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /\\bqbcore\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i // LieBao Browser\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w\\.]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}-[atu]?[ln][01259x][012359][an]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ ([c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser.major = majorize(_browser.version);\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventBus from './EventBus';\nimport Events from './events/Events';\nimport FactoryMaker from './FactoryMaker';\n\nconst LOG_LEVEL_NONE = 0;\nconst LOG_LEVEL_FATAL = 1;\nconst LOG_LEVEL_ERROR = 2;\nconst LOG_LEVEL_WARNING = 3;\nconst LOG_LEVEL_INFO = 4;\nconst LOG_LEVEL_DEBUG = 5;\n\n/**\n * @module Debug\n * @param {object} config\n * @ignore\n */\nfunction Debug(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n const settings = config.settings;\n\n const logFn = [];\n\n let instance,\n showLogTimestamp,\n showCalleeName,\n startTime;\n\n function setup() {\n showLogTimestamp = true;\n showCalleeName = true;\n startTime = new Date().getTime();\n\n if (typeof window !== 'undefined' && window.console) {\n logFn[LOG_LEVEL_FATAL] = getLogFn(window.console.error);\n logFn[LOG_LEVEL_ERROR] = getLogFn(window.console.error);\n logFn[LOG_LEVEL_WARNING] = getLogFn(window.console.warn);\n logFn[LOG_LEVEL_INFO] = getLogFn(window.console.info);\n logFn[LOG_LEVEL_DEBUG] = getLogFn(window.console.debug);\n }\n }\n\n function getLogFn(fn) {\n if (fn && fn.bind) {\n return fn.bind(window.console);\n }\n // if not define, return the default function for reporting logs\n return window.console.log.bind(window.console);\n }\n\n /**\n * Retrieves a logger which can be used to write logging information in browser console.\n * @param {object} instance Object for which the logger is created. It is used\n * to include calle object information in log messages.\n * @memberof module:Debug\n * @returns {Logger}\n * @instance\n */\n function getLogger(instance) {\n return {\n fatal: fatal.bind(instance),\n error: error.bind(instance),\n warn: warn.bind(instance),\n info: info.bind(instance),\n debug: debug.bind(instance)\n };\n }\n\n /**\n * Prepends a timestamp in milliseconds to each log message.\n * @param {boolean} value Set to true if you want to see a timestamp in each log message.\n * @default LOG_LEVEL_WARNING\n * @memberof module:Debug\n * @instance\n */\n function setLogTimestampVisible(value) {\n showLogTimestamp = value;\n }\n\n /**\n * Prepends the callee object name, and media type if available, to each log message.\n * @param {boolean} value Set to true if you want to see the callee object name and media type in each log message.\n * @default true\n * @memberof module:Debug\n * @instance\n */\n function setCalleeNameVisible(value) {\n showCalleeName = value;\n }\n\n function fatal(...params) {\n doLog(LOG_LEVEL_FATAL, this, ...params);\n }\n\n function error(...params) {\n doLog(LOG_LEVEL_ERROR, this, ...params);\n }\n\n function warn(...params) {\n doLog(LOG_LEVEL_WARNING, this, ...params);\n }\n\n function info(...params) {\n doLog(LOG_LEVEL_INFO, this, ...params);\n }\n\n function debug(...params) {\n doLog(LOG_LEVEL_DEBUG, this, ...params);\n }\n\n function doLog(level, _this, ...params) {\n let message = '';\n let logTime = null;\n\n if (showLogTimestamp) {\n logTime = new Date().getTime();\n message += '[' + (logTime - startTime) + ']';\n }\n\n if (showCalleeName && _this && _this.getClassName) {\n message += '[' + _this.getClassName() + ']';\n if (_this.getType) {\n message += '[' + _this.getType() + ']';\n }\n }\n\n if (message.length > 0) {\n message += ' ';\n }\n\n Array.apply(null, params).forEach(function (item) {\n message += item + ' ';\n });\n\n // log to console if the log level is high enough\n if (logFn[level] && settings.get().debug.logLevel >= level) {\n logFn[level](message);\n }\n\n // send log event regardless of log level\n if (settings && settings.get().debug.dispatchEvent) {\n eventBus.trigger(Events.LOG, { message: message, level: level });\n }\n }\n\n instance = {\n getLogger: getLogger,\n setLogTimestampVisible: setLogTimestampVisible,\n setCalleeNameVisible: setCalleeNameVisible\n };\n\n setup();\n\n return instance;\n}\n\nDebug.__dashjs_factory_name = 'Debug';\n\nconst factory = FactoryMaker.getSingletonFactory(Debug);\nfactory.LOG_LEVEL_NONE = LOG_LEVEL_NONE;\nfactory.LOG_LEVEL_FATAL = LOG_LEVEL_FATAL;\nfactory.LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;\nfactory.LOG_LEVEL_WARNING = LOG_LEVEL_WARNING;\nfactory.LOG_LEVEL_INFO = LOG_LEVEL_INFO;\nfactory.LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG;\nFactoryMaker.updateSingletonFactory(Debug.__dashjs_factory_name, factory);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from './FactoryMaker';\nimport MediaPlayerEvents from '../streaming/MediaPlayerEvents';\n\nconst EVENT_PRIORITY_LOW = 0;\nconst EVENT_PRIORITY_HIGH = 5000;\n\nfunction EventBus() {\n\n let handlers = {};\n\n function on(type, listener, scope, options = {}) {\n\n if (!type) {\n throw new Error('event type cannot be null or undefined');\n }\n if (!listener || typeof (listener) !== 'function') {\n throw new Error('listener must be a function: ' + listener);\n }\n\n let priority = options.priority || EVENT_PRIORITY_LOW;\n\n if (getHandlerIdx(type, listener, scope) >= 0) return;\n\n handlers[type] = handlers[type] || [];\n\n const handler = {\n callback: listener,\n scope,\n priority\n };\n\n if (scope && scope.getStreamId) {\n handler.streamId = scope.getStreamId();\n }\n if (scope && scope.getType) {\n handler.mediaType = scope.getType();\n }\n if (options && options.mode) {\n handler.mode = options.mode;\n }\n\n const inserted = handlers[type].some((item, idx) => {\n if (item && priority > item.priority) {\n handlers[type].splice(idx, 0, handler);\n return true;\n }\n });\n\n if (!inserted) {\n handlers[type].push(handler);\n }\n }\n\n function off(type, listener, scope) {\n if (!type || !listener || !handlers[type]) return;\n const idx = getHandlerIdx(type, listener, scope);\n if (idx < 0) return;\n handlers[type][idx] = null;\n }\n\n function trigger(type, payload = {}, filters = {}) {\n if (!type || !handlers[type]) return;\n\n payload = payload || {};\n\n if (payload.hasOwnProperty('type')) throw new Error('\\'type\\' is a reserved word for event dispatching');\n\n payload.type = type;\n\n if (filters.streamId) {\n payload.streamId = filters.streamId;\n }\n if (filters.mediaType) {\n payload.mediaType = filters.mediaType;\n }\n\n handlers[type]\n .filter((handler) => {\n if (!handler) {\n return false;\n }\n if (filters.streamId && handler.streamId && handler.streamId !== filters.streamId) {\n return false;\n }\n if (filters.mediaType && handler.mediaType && handler.mediaType !== filters.mediaType) {\n return false;\n }\n // This is used for dispatching DASH events. By default we use the onStart mode. Consequently we filter everything that has a non matching mode and the onReceive events for handlers that did not specify a mode.\n if ((filters.mode && handler.mode && handler.mode !== filters.mode) || (!handler.mode && filters.mode && filters.mode === MediaPlayerEvents.EVENT_MODE_ON_RECEIVE)) {\n return false;\n }\n return true;\n })\n .forEach(handler => handler && handler.callback.call(handler.scope, payload));\n }\n\n function getHandlerIdx(type, listener, scope) {\n\n let idx = -1;\n\n if (!handlers[type]) return idx;\n\n handlers[type].some((item, index) => {\n if (item && item.callback === listener && (!scope || scope === item.scope)) {\n idx = index;\n return true;\n }\n });\n return idx;\n }\n\n function reset() {\n handlers = {};\n }\n\n const instance = {\n on: on,\n off: off,\n trigger: trigger,\n reset: reset\n };\n\n return instance;\n}\n\nEventBus.__dashjs_factory_name = 'EventBus';\nconst factory = FactoryMaker.getSingletonFactory(EventBus);\nfactory.EVENT_PRIORITY_LOW = EVENT_PRIORITY_LOW;\nfactory.EVENT_PRIORITY_HIGH = EVENT_PRIORITY_HIGH;\nFactoryMaker.updateSingletonFactory(EventBus.__dashjs_factory_name, factory);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @module FactoryMaker\n * @ignore\n */\nconst FactoryMaker = (function () {\n\n let instance;\n let singletonContexts = [];\n const singletonFactories = {};\n const classFactories = {};\n\n function extend(name, childInstance, override, context) {\n if (!context[name] && childInstance) {\n context[name] = {\n instance: childInstance,\n override: override\n };\n }\n }\n\n /**\n * Use this method from your extended object. this.factory is injected into your object.\n * this.factory.getSingletonInstance(this.context, 'VideoModel')\n * will return the video model for use in the extended object.\n *\n * @param {Object} context - injected into extended object as this.context\n * @param {string} className - string name found in all dash.js objects\n * with name __dashjs_factory_name Will be at the bottom. Will be the same as the object's name.\n * @returns {*} Context aware instance of specified singleton name.\n * @memberof module:FactoryMaker\n * @instance\n */\n function getSingletonInstance(context, className) {\n for (const i in singletonContexts) {\n const obj = singletonContexts[i];\n if (obj.context === context && obj.name === className) {\n return obj.instance;\n }\n }\n return null;\n }\n\n /**\n * Use this method to add an singleton instance to the system. Useful for unit testing to mock objects etc.\n *\n * @param {Object} context\n * @param {string} className\n * @param {Object} instance\n * @memberof module:FactoryMaker\n * @instance\n */\n function setSingletonInstance(context, className, instance) {\n for (const i in singletonContexts) {\n const obj = singletonContexts[i];\n if (obj.context === context && obj.name === className) {\n singletonContexts[i].instance = instance;\n return;\n }\n }\n singletonContexts.push({\n name: className,\n context: context,\n instance: instance\n });\n }\n\n /**\n * Use this method to remove all singleton instances associated with a particular context.\n *\n * @param {Object} context\n * @memberof module:FactoryMaker\n * @instance\n */\n function deleteSingletonInstances(context) {\n singletonContexts = singletonContexts.filter(x => x.context !== context);\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Factories storage Management\n\n /*------------------------------------------------------------------------------------------*/\n\n function getFactoryByName(name, factoriesArray) {\n return factoriesArray[name];\n }\n\n function updateFactory(name, factory, factoriesArray) {\n if (name in factoriesArray) {\n factoriesArray[name] = factory;\n }\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Class Factories Management\n\n /*------------------------------------------------------------------------------------------*/\n\n function updateClassFactory(name, factory) {\n updateFactory(name, factory, classFactories);\n }\n\n function getClassFactoryByName(name) {\n return getFactoryByName(name, classFactories);\n }\n\n function getClassFactory(classConstructor) {\n let factory = getFactoryByName(classConstructor.__dashjs_factory_name, classFactories);\n\n if (!factory) {\n factory = function (context) {\n if (context === undefined) {\n context = {};\n }\n return {\n create: function () {\n return merge(classConstructor, context, arguments);\n }\n };\n };\n\n classFactories[classConstructor.__dashjs_factory_name] = factory; // store factory\n }\n return factory;\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Singleton Factory MAangement\n\n /*------------------------------------------------------------------------------------------*/\n\n function updateSingletonFactory(name, factory) {\n updateFactory(name, factory, singletonFactories);\n }\n\n function getSingletonFactoryByName(name) {\n return getFactoryByName(name, singletonFactories);\n }\n\n function getSingletonFactory(classConstructor) {\n let factory = getFactoryByName(classConstructor.__dashjs_factory_name, singletonFactories);\n if (!factory) {\n factory = function (context) {\n let instance;\n if (context === undefined) {\n context = {};\n }\n return {\n getInstance: function () {\n // If we don't have an instance yet check for one on the context\n if (!instance) {\n instance = getSingletonInstance(context, classConstructor.__dashjs_factory_name);\n }\n // If there's no instance on the context then create one\n if (!instance) {\n instance = merge(classConstructor, context, arguments);\n singletonContexts.push({\n name: classConstructor.__dashjs_factory_name,\n context: context,\n instance: instance\n });\n }\n return instance;\n }\n };\n };\n singletonFactories[classConstructor.__dashjs_factory_name] = factory; // store factory\n }\n\n return factory;\n }\n\n function merge(classConstructor, context, args) {\n\n let classInstance;\n const className = classConstructor.__dashjs_factory_name;\n const extensionObject = context[className];\n\n if (extensionObject) {\n\n let extension = extensionObject.instance;\n\n if (extensionObject.override) { //Override public methods in parent but keep parent.\n\n classInstance = classConstructor.apply({context}, args);\n extension = extension.apply({\n context,\n factory: instance,\n parent: classInstance\n }, args);\n\n for (const prop in extension) {\n if (classInstance.hasOwnProperty(prop)) {\n classInstance[prop] = extension[prop];\n }\n }\n\n } else { //replace parent object completely with new object. Same as dijon.\n\n return extension.apply({\n context,\n factory: instance\n }, args);\n\n }\n } else {\n // Create new instance of the class\n classInstance = classConstructor.apply({context}, args);\n }\n\n // Add getClassName function to class instance prototype (used by Debug)\n classInstance.getClassName = function () {return className;};\n\n return classInstance;\n }\n\n instance = {\n extend: extend,\n getSingletonInstance: getSingletonInstance,\n setSingletonInstance: setSingletonInstance,\n deleteSingletonInstances: deleteSingletonInstances,\n getSingletonFactory: getSingletonFactory,\n getSingletonFactoryByName: getSingletonFactoryByName,\n updateSingletonFactory: updateSingletonFactory,\n getClassFactory: getClassFactory,\n getClassFactoryByName: getClassFactoryByName,\n updateClassFactory: updateClassFactory\n };\n\n return instance;\n\n}());\n\nexport default FactoryMaker;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from './FactoryMaker';\nimport Utils from './Utils.js';\nimport Debug from '../core/Debug';\nimport Constants from '../streaming/constants/Constants';\nimport {HTTPRequest} from '../streaming/vo/metrics/HTTPRequest';\nimport EventBus from './EventBus';\nimport Events from './events/Events';\n\n/** @module Settings\n * @description Define the configuration parameters of Dash.js MediaPlayer.\n * @see {@link module:Settings~PlayerSettings PlayerSettings} for further information about the supported configuration properties.\n */\n\n\n/**\n * @typedef {Object} PlayerSettings\n * @property {module:Settings~DebugSettings} [debug]\n * Debug related settings.\n * @property {module:Settings~ErrorSettings} [errors]\n * Error related settings\n * @property {module:Settings~StreamingSettings} [streaming]\n * Streaming related settings.\n * @example\n *\n * // Full settings object\n * settings = {\n * debug: {\n * logLevel: Debug.LOG_LEVEL_WARNING,\n * dispatchEvent: false\n * },\n * streaming: {\n * abandonLoadTimeout: 10000,\n * wallclockTimeUpdateInterval: 100,\n * manifestUpdateRetryInterval: 100,\n * cacheInitSegments: true,\n * applyServiceDescription: true,\n * applyProducerReferenceTime: true,\n * applyContentSteering: true,\n * eventControllerRefreshDelay: 100,\n * enableManifestDurationMismatchFix: true,\n * capabilities: {\n * filterUnsupportedEssentialProperties: true,\n * useMediaCapabilitiesApi: false\n * },\n * timeShiftBuffer: {\n * calcFromSegmentTimeline: false,\n * fallbackToSegmentTimeline: true\n * },\n * metrics: {\n * maxListDepth: 100\n * },\n * delay: {\n * liveDelayFragmentCount: NaN,\n * liveDelay: NaN,\n * useSuggestedPresentationDelay: true\n * },\n * protection: {\n * keepProtectionMediaKeys: false,\n * ignoreEmeEncryptedEvent: false,\n * detectPlayreadyMessageFormat: true,\n * },\n * buffer: {\n * enableSeekDecorrelationFix: true,\n * fastSwitchEnabled: true,\n * flushBufferAtTrackSwitch: false,\n * reuseExistingSourceBuffers: true,\n * bufferPruningInterval: 10,\n * bufferToKeep: 20,\n * bufferTimeAtTopQuality: 30,\n * bufferTimeAtTopQualityLongForm: 60,\n * initialBufferLevel: NaN,\n * stableBufferTime: 12,\n * longFormContentDurationThreshold: 600,\n * stallThreshold: 0.5,\n * useAppendWindow: true,\n * setStallState: true,\n * avoidCurrentTimeRangePruning: false,\n * useChangeTypeForTrackSwitch: true\n * },\n * gaps: {\n * jumpGaps: true,\n * jumpLargeGaps: true,\n * smallGapLimit: 1.5,\n * threshold: 0.3,\n * enableSeekFix: true,\n * enableStallFix: false,\n * stallSeek: 0.1\n * },\n * utcSynchronization: {\n * enabled: true,\n * useManifestDateHeaderTimeSource: true,\n * backgroundAttempts: 2,\n * timeBetweenSyncAttempts: 30,\n * maximumTimeBetweenSyncAttempts: 600,\n * minimumTimeBetweenSyncAttempts: 2,\n * timeBetweenSyncAttemptsAdjustmentFactor: 2,\n * maximumAllowedDrift: 100,\n * enableBackgroundSyncAfterSegmentDownloadError: true,\n * defaultTimingSource: {\n * scheme: 'urn:mpeg:dash:utc:http-xsdate:2014',\n * value: 'http://time.akamai.com/?iso&ms'\n * }\n * },\n * scheduling: {\n * defaultTimeout: 300,\n * lowLatencyTimeout: 100,\n * scheduleWhilePaused: true\n * },\n * text: {\n * defaultEnabled: true\n * },\n * liveCatchup: {\n * maxDrift: NaN,\n * playbackRate: {min: NaN, max: NaN},\n * playbackBufferMin: 0.5,\n * enabled: false,\n * mode: Constants.LIVE_CATCHUP_MODE_DEFAULT\n * },\n * lastBitrateCachingInfo: { enabled: true, ttl: 360000 },\n * lastMediaSettingsCachingInfo: { enabled: true, ttl: 360000 },\n * cacheLoadThresholds: { video: 50, audio: 5 },\n * trackSwitchMode: {\n * audio: Constants.TRACK_SWITCH_MODE_ALWAYS_REPLACE,\n * video: Constants.TRACK_SWITCH_MODE_NEVER_REPLACE\n * },\n * selectionModeForInitialTrack: Constants.TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY,\n * fragmentRequestTimeout: 20000,\n * manifestRequestTimeout: 10000,\n * retryIntervals: {\n * [HTTPRequest.MPD_TYPE]: 500,\n * [HTTPRequest.XLINK_EXPANSION_TYPE]: 500,\n * [HTTPRequest.MEDIA_SEGMENT_TYPE]: 1000,\n * [HTTPRequest.INIT_SEGMENT_TYPE]: 1000,\n * [HTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE]: 1000,\n * [HTTPRequest.INDEX_SEGMENT_TYPE]: 1000,\n * [HTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE]: 1000,\n * [HTTPRequest.LICENSE]: 1000,\n * [HTTPRequest.OTHER_TYPE]: 1000,\n * lowLatencyReductionFactor: 10\n * },\n * retryAttempts: {\n * [HTTPRequest.MPD_TYPE]: 3,\n * [HTTPRequest.XLINK_EXPANSION_TYPE]: 1,\n * [HTTPRequest.MEDIA_SEGMENT_TYPE]: 3,\n * [HTTPRequest.INIT_SEGMENT_TYPE]: 3,\n * [HTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE]: 3,\n * [HTTPRequest.INDEX_SEGMENT_TYPE]: 3,\n * [HTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE]: 3,\n * [HTTPRequest.LICENSE]: 3,\n * [HTTPRequest.OTHER_TYPE]: 3,\n * lowLatencyMultiplyFactor: 5\n * },\n * abr: {\n * movingAverageMethod: Constants.MOVING_AVERAGE_SLIDING_WINDOW,\n * ABRStrategy: Constants.ABR_STRATEGY_DYNAMIC,\n * additionalAbrRules: {\n * insufficientBufferRule: false,\n * switchHistoryRule: true,\n * droppedFramesRule: true,\n * abandonRequestsRule: false\n * },\n * bandwidthSafetyFactor: 0.9,\n * useDefaultABRRules: true,\n * useDeadTimeLatency: true,\n * limitBitrateByPortal: false,\n * usePixelRatioInLimitBitrateByPortal: false,\n * maxBitrate: { audio: -1, video: -1 },\n * minBitrate: { audio: -1, video: -1 },\n * maxRepresentationRatio: { audio: 1, video: 1 },\n * initialBitrate: { audio: -1, video: -1 },\n * initialRepresentationRatio: { audio: -1, video: -1 },\n * autoSwitchBitrate: { audio: true, video: true },\n * fetchThroughputCalculationMode: Constants.ABR_FETCH_THROUGHPUT_CALCULATION_DOWNLOADED_DATA\n * },\n * cmcd: {\n * enabled: false,\n * sid: null,\n * cid: null,\n * rtp: null,\n * rtpSafetyFactor: 5,\n * mode: Constants.CMCD_MODE_QUERY,\n * enabledKeys: ['br', 'd', 'ot', 'tb' , 'bl', 'dl', 'mtp', 'nor', 'nrr', 'su' , 'bs', 'rtp' , 'cid', 'pr', 'sf', 'sid', 'st', 'v']\n * }\n * },\n * errors: {\n * recoverAttempts: {\n * mediaErrorDecode: 5\n * }\n * }\n * }\n */\n\n/**\n * @typedef {Object} TimeShiftBuffer\n * @property {boolean} [calcFromSegmentTimeline=false]\n * Enable calculation of the DVR window for SegmentTimeline manifests based on the entries in \\<SegmentTimeline\\>.\n * * @property {boolean} [fallbackToSegmentTimeline=true]\n * In case the MPD uses \\<SegmentTimeline\\ and no segment is found within the DVR window the DVR window is calculated based on the entries in \\<SegmentTimeline\\>.\n */\n\n/**\n * @typedef {Object} LiveDelay\n * @property {number} [liveDelayFragmentCount=NaN]\n * Changing this value will lower or increase live stream latency.\n *\n * The detected segment duration will be multiplied by this value to define a time in seconds to delay a live stream from the live edge.\n *\n * Lowering this value will lower latency but may decrease the player's ability to build a stable buffer.\n * @property {number} [liveDelay]\n * Equivalent in seconds of setLiveDelayFragmentCount.\n *\n * Lowering this value will lower latency but may decrease the player's ability to build a stable buffer.\n *\n * This value should be less than the manifest duration by a couple of segment durations to avoid playback issues.\n *\n * If set, this parameter will take precedence over setLiveDelayFragmentCount and manifest info.\n * @property {boolean} [useSuggestedPresentationDelay=true]\n * Set to true if you would like to overwrite the default live delay and honor the SuggestedPresentationDelay attribute in by the manifest.\n */\n\n/**\n * @typedef {Object} Buffer\n * @property {boolean} [enableSeekDecorrelationFix=false]\n * Enables a workaround for playback start on some devices, e.g. WebOS 4.9.\n * It is necessary because some browsers do not support setting currentTime on video element to a value that is outside of current buffer.\n *\n * If you experience unexpected seeking triggered by BufferController, you can try setting this value to false.\n\n * @property {boolean} [fastSwitchEnabled=true]\n * When enabled, after an ABR up-switch in quality, instead of requesting and appending the next fragment at the end of the current buffer range it is requested and appended closer to the current time.\n *\n * When enabled, The maximum time to render a higher quality is current time + (1.5 * fragment duration).\n *\n * Note, When ABR down-switch is detected, we appended the lower quality at the end of the buffer range to preserve the\n * higher quality media for as long as possible.\n *\n * If enabled, it should be noted there are a few cases when the client will not replace inside buffer range but rather just append at the end.\n * 1. When the buffer level is less than one fragment duration.\n * 2. The client is in an Abandonment State due to recent fragment abandonment event.\n *\n * Known issues:\n * 1. In IE11 with auto switching off, if a user switches to a quality they can not download in time the fragment may be appended in the same range as the playhead or even in the past, in IE11 it may cause a stutter or stall in playback.\n * @property {boolean} [flushBufferAtTrackSwitch=false]\n * When enabled, after a track switch and in case buffer is being replaced, the video element is flushed (seek at current playback time) once a segment of the new track is appended in buffer in order to force video decoder to play new track.\n *\n * This can be required on some devices like GoogleCast devices to make track switching functional.\n *\n * Otherwise track switching will be effective only once after previous buffered track is fully consumed.\n * @property {boolean} [reuseExistingSourceBuffers=true]\n * Enable reuse of existing MediaSource Sourcebuffers during period transition.\n * @property {number} [bufferPruningInterval=10]\n * The interval of pruning buffer in seconds.\n * @property {number} [bufferToKeep=20]\n * This value influences the buffer pruning logic.\n *\n * Allows you to modify the buffer that is kept in source buffer in seconds.\n * 0|-----------bufferToPrune-----------|-----bufferToKeep-----|currentTime|\n * @property {number} [bufferTimeAtTopQuality=30]\n * The time that the internal buffer target will be set to once playing the top quality.\n *\n * If there are multiple bitrates in your adaptation, and the media is playing at the highest bitrate, then we try to build a larger buffer at the top quality to increase stability and to maintain media quality.\n * @property {number} [bufferTimeAtTopQualityLongForm=60]\n * The time that the internal buffer target will be set to once playing the top quality for long form content.\n * @property {number} [longFormContentDurationThreshold=600]\n * The threshold which defines if the media is considered long form content.\n *\n * This will directly affect the buffer targets when playing back at the top quality.\n * @property {number} [initialBufferLevel=NaN]\n * Initial buffer level before playback starts\n * @property {number} [stableBufferTime=12]\n * The time that the internal buffer target will be set to post startup/seeks (NOT top quality).\n *\n * When the time is set higher than the default you will have to wait longer to see automatic bitrate switches but will have a larger buffer which will increase stability.\n * @property {number} [stallThreshold=0.3]\n * Stall threshold used in BufferController.js to determine whether a track should still be changed and which buffer range to prune.\n * @property {boolean} [useAppendWindow=true]\n * Specifies if the appendWindow attributes of the MSE SourceBuffers should be set according to content duration from manifest.\n * @property {boolean} [setStallState=true]\n * Specifies if we fire manual waiting events once the stall threshold is reached\n * @property {boolean} [avoidCurrentTimeRangePruning=false]\n * Avoids pruning of the buffered range that contains the current playback time.\n *\n * That buffered range is likely to have been enqueued for playback. Pruning it causes a flush and reenqueue in WPE and WebKitGTK based browsers. This stresses the video decoder and can cause stuttering on embedded platforms.\n * @property {boolean} [useChangeTypeForTrackSwitch=true]\n * If this flag is set to true then dash.js will use the MSE v.2 API call \"changeType()\" before switching to a different track.\n * Note that some platforms might not implement the changeType functio. dash.js is checking for the availability before trying to call it.\n */\n\n/**\n * @typedef {Object} module:Settings~AudioVideoSettings\n * @property {number|boolean|string} [audio]\n * Configuration for audio media type of tracks.\n * @property {number|boolean|string} [video]\n * Configuration for video media type of tracks.\n */\n\n/**\n * @typedef {Object} DebugSettings\n * @property {number} [logLevel=dashjs.Debug.LOG_LEVEL_WARNING]\n * Sets up the log level. The levels are cumulative.\n *\n * For example, if you set the log level to dashjs.Debug.LOG_LEVEL_WARNING all warnings, errors and fatals will be logged.\n *\n * Possible values.\n *\n * - dashjs.Debug.LOG_LEVEL_NONE\n * No message is written in the browser console.\n *\n * - dashjs.Debug.LOG_LEVEL_FATAL\n * Log fatal errors.\n * An error is considered fatal when it causes playback to fail completely.\n *\n * - dashjs.Debug.LOG_LEVEL_ERROR\n * Log error messages.\n *\n * - dashjs.Debug.LOG_LEVEL_WARNING\n * Log warning messages.\n *\n * - dashjs.Debug.LOG_LEVEL_INFO\n * Log info messages.\n *\n * - dashjs.Debug.LOG_LEVEL_DEBUG\n * Log debug messages.\n * @property {boolean} [dispatchEvent=false]\n * Enable to trigger a Events.LOG event whenever log output is generated.\n *\n * Note this will be dispatched regardless of log level.\n */\n\n/**\n * @typedef {Object} module:Settings~ErrorSettings\n * @property {object} [recoverAttempts={mediaErrorDecode: 5}]\n * Defines the maximum number of recover attempts for specific media errors.\n *\n * For mediaErrorDecode the player will reset the MSE and skip the blacklisted segment that caused the decode error. The resulting gap will be handled by the GapController.\n */\n\n/**\n * @typedef {Object} CachingInfoSettings\n * @property {boolean} [enable]\n * Enable or disable the caching feature.\n * @property {number} [ttl]\n * Time to live.\n *\n * A value defined in milliseconds representing how log to cache the settings for.\n */\n\n/**\n * @typedef {Object} Gaps\n * @property {boolean} [jumpGaps=true]\n * Sets whether player should jump small gaps (discontinuities) in the buffer.\n * @property {boolean} [jumpLargeGaps=true]\n * Sets whether player should jump large gaps (discontinuities) in the buffer.\n * @property {number} [smallGapLimit=1.5]\n * Time in seconds for a gap to be considered small.\n * @property {number} [threshold=0.3]\n * Threshold at which the gap handling is executed. If currentRangeEnd - currentTime < threshold the gap jump will be triggered.\n * For live stream the jump might be delayed to keep a consistent live edge.\n * Note that the amount of buffer at which platforms automatically stall might differ.\n * @property {boolean} [enableSeekFix=true]\n * Enables the adjustment of the seek target once no valid segment request could be generated for a specific seek time. This can happen if the user seeks to a position for which there is a gap in the timeline.\n * @property {boolean} [enableStallFix=false]\n * If playback stalled in a buffered range this fix will perform a seek by the value defined in stallSeek to trigger playback again.\n * @property {number} [stallSeek=0.1]\n * Value to be used in case enableStallFix is set to true\n */\n\n/**\n * @typedef {Object} UtcSynchronizationSettings\n * @property {boolean} [enabled=true]\n * Enables or disables the UTC clock synchronization\n * @property {boolean} [useManifestDateHeaderTimeSource=true]\n * Allows you to enable the use of the Date Header, if exposed with CORS, as a timing source for live edge detection.\n *\n * The use of the date header will happen only after the other timing source that take precedence fail or are omitted as described.\n * @property {number} [backgroundAttempts=2]\n * Number of synchronization attempts to perform in the background after an initial synchronization request has been done. This is used to verify that the derived client-server offset is correct.\n *\n * The background requests are async and done in parallel to the start of the playback.\n *\n * This value is also used to perform a resync after 404 errors on segments.\n * @property {number} [timeBetweenSyncAttempts=30]\n * The time in seconds between two consecutive sync attempts.\n *\n * Note: This value is used as an initial starting value. The internal value of the TimeSyncController is adjusted during playback based on the drift between two consecutive synchronization attempts.\n *\n * Note: A sync is only performed after an MPD update. In case the @minimumUpdatePeriod is larger than this value the sync will be delayed until the next MPD update.\n * @property {number} [maximumTimeBetweenSyncAttempts=600]\n * The maximum time in seconds between two consecutive sync attempts.\n *\n * @property {number} [minimumTimeBetweenSyncAttempts=2]\n * The minimum time in seconds between two consecutive sync attempts.\n *\n * @property {number} [timeBetweenSyncAttemptsAdjustmentFactor=2]\n * The factor used to multiply or divide the timeBetweenSyncAttempts parameter after a sync. The maximumAllowedDrift defines whether this value is used as a factor or a dividend.\n *\n * @property {number} [maximumAllowedDrift=100]\n * The maximum allowed drift specified in milliseconds between two consecutive synchronization attempts.\n *\n * @property {boolean} [enableBackgroundSyncAfterSegmentDownloadError=true]\n * Enables or disables the background sync after the player ran into a segment download error.\n *\n * @property {object} [defaultTimingSource={scheme:'urn:mpeg:dash:utc:http-xsdate:2014',value: 'http://time.akamai.com/?iso&ms'}]\n * The default timing source to be used. The timing sources in the MPD take precedence over this one.\n */\n\n/**\n * @typedef {Object} Scheduling\n * @property {number} [defaultTimeout=300]\n * Default timeout between two consecutive segment scheduling attempts\n * @property {number} [lowLatencyTimeout]\n * Default timeout between two consecutive low-latency segment scheduling attempts\n * @property {boolean} [scheduleWhilePaused=true]\n * Set to true if you would like dash.js to keep downloading fragments in the background when the video element is paused.\n */\n\n/**\n * @typedef {Object} Text\n * @property {number} [defaultEnabled=true]\n * Enable/disable subtitle rendering by default.\n */\n\n/**\n * @typedef {Object} LiveCatchupSettings\n * @property {number} [maxDrift=NaN]\n * Use this method to set the maximum latency deviation allowed before dash.js to do a seeking to live position.\n *\n * In low latency mode, when the difference between the measured latency and the target one, as an absolute number, is higher than the one sets with this method, then dash.js does a seek to live edge position minus the target live delay.\n *\n * LowLatencyMaxDriftBeforeSeeking should be provided in seconds.\n *\n * If 0, then seeking operations won't be used for fixing latency deviations.\n *\n * Note: Catch-up mechanism is only applied when playing low latency live streams.\n * @property {number} [playbackRate={min: NaN, max: NaN}]\n * Use this parameter to set the minimum and maximum catch up rates, as percentages, for low latency live streams.\n *\n * In low latency mode, when measured latency is higher/lower than the target one, dash.js increases/decreases playback rate respectively up to (+/-) the percentage defined with this method until target is reached.\n *\n * Valid values for min catch up rate are in the range -0.5 to 0 (-50% to 0% playback rate decrease)\n *\n * Valid values for max catch up rate are in the range 0 to 1 (0% to 100% playback rate increase).\n *\n * Set min and max to NaN to turn off live catch up feature.\n *\n * These playback rate limits take precedence over any PlaybackRate values in ServiceDescription elements in an MPD. If only one of the min/max properties is given a value, the property without a value will not fall back to a ServiceDescription value. Its default value of NaN will be used.\n *\n * Note: Catch-up mechanism is only applied when playing low latency live streams.\n * @property {number} [playbackBufferMin=NaN]\n * Use this parameter to specify the minimum buffer which is used for LoL+ based playback rate reduction.\n *\n *\n * @property {boolean} [enabled=false]\n * Use this parameter to enable the catchup mode for non low-latency streams.\n *\n * @property {string} [mode=\"liveCatchupModeDefault\"]\n * Use this parameter to switch between different catchup modes.\n *\n * Options: \"liveCatchupModeDefault\" or \"liveCatchupModeLOLP\".\n *\n * Note: Catch-up mechanism is automatically applied when playing low latency live streams.\n */\n\n/**\n * @typedef {Object} RequestTypeSettings\n * @property {number} [MPD]\n * Manifest type of requests.\n * @property {number} [XLinkExpansion]\n * XLink expansion type of requests.\n * @property {number} [InitializationSegment]\n * Request to retrieve an initialization segment.\n * @property {number} [IndexSegment]\n * Request to retrieve an index segment (SegmentBase).\n * @property {number} [MediaSegment]\n * Request to retrieve a media segment (video/audio/image/text chunk).\n * @property {number} [BitstreamSwitchingSegment]\n * Bitrate stream switching type of request.\n * @property {number} [FragmentInfoSegment]\n * Request to retrieve a FragmentInfo segment (specific to Smooth Streaming live streams).\n * @property {number} [other]\n * Other type of request.\n * @property {number} [lowLatencyReductionFactor]\n * For low latency mode, values of type of request are divided by lowLatencyReductionFactor.\n *\n * Note: It's not type of request.\n * @property {number} [lowLatencyMultiplyFactor]\n * For low latency mode, values of type of request are multiplied by lowLatencyMultiplyFactor.\n *\n * Note: It's not type of request.\n */\n\n/**\n * @typedef {Object} Protection\n * @property {boolean} [keepProtectionMediaKeys=false]\n * Set the value for the ProtectionController and MediaKeys life cycle.\n *\n * If true, the ProtectionController and then created MediaKeys and MediaKeySessions will be preserved during the MediaPlayer lifetime.\n * @property {boolean} ignoreEmeEncryptedEvent\n * If set to true the player will ignore \"encrypted\" and \"needkey\" events thrown by the EME.\n *\n * @property {boolean} detectPlayreadyMessageFormat\n * If set to true the player will use the raw unwrapped message from the Playready CDM\n */\n\n/**\n * @typedef {Object} Capabilities\n * @property {boolean} [filterUnsupportedEssentialProperties=true]\n * Enable to filter all the AdaptationSets and Representations which contain an unsupported \\<EssentialProperty\\> element.\n * @property {boolean} [useMediaCapabilitiesApi=false]\n * Enable to use the MediaCapabilities API to check whether codecs are supported. If disabled MSE.isTypeSupported will be used instead.\n */\n\n/**\n * @typedef {Object} AbrSettings\n * @property {string} [movingAverageMethod=\"slidingWindow\"]\n * Sets the moving average method used for smoothing throughput estimates.\n *\n * Valid methods are \"slidingWindow\" and \"ewma\".\n *\n * The call has no effect if an invalid method is passed.\n *\n * The sliding window moving average method computes the average throughput using the last four segments downloaded.\n *\n * If the stream is live (as opposed to VOD), then only the last three segments are used.\n *\n * If wide variations in throughput are detected, the number of segments can be dynamically increased to avoid oscillations.\n *\n * The exponentially weighted moving average (EWMA) method computes the average using exponential smoothing.\n *\n * Two separate estimates are maintained, a fast one with a three-second half life and a slow one with an eight-second half life.\n *\n * The throughput estimate at any time is the minimum of the fast and slow estimates.\n *\n * This allows a fast reaction to a bandwidth drop and prevents oscillations on bandwidth spikes.\n * @property {string} [ABRStrategy=\"abrDynamic\"]\n * Returns the current ABR strategy being used: \"abrDynamic\", \"abrBola\" or \"abrThroughput\".\n * @property {object} [trackSwitchMode={video: \"neverReplace\", audio: \"alwaysReplace\"}]\n * @property {object} [additionalAbrRules={insufficientBufferRule: false,switchHistoryRule: true,droppedFramesRule: true,abandonRequestsRule: false}]\n * Enable/Disable additional ABR rules in case ABRStrategy is set to \"abrDynamic\", \"abrBola\" or \"abrThroughput\".\n * @property {number} [bandwidthSafetyFactor=0.9]\n * Standard ABR throughput rules multiply the throughput by this value.\n *\n * It should be between 0 and 1, with lower values giving less rebuffering (but also lower quality).\n * @property {boolean} [useDefaultABRRules=true]\n * Should the default ABR rules be used, or the custom ones added.\n * @property {boolean} [useDeadTimeLatency=true]\n * If true, only the download portion will be considered part of the download bitrate and latency will be regarded as static.\n *\n * If false, the reciprocal of the whole transfer time will be used.\n * @property {boolean} [limitBitrateByPortal=false]\n * If true, the size of the video portal will limit the max chosen video resolution.\n * @property {boolean} [usePixelRatioInLimitBitrateByPortal=false]\n * Sets whether to take into account the device's pixel ratio when defining the portal dimensions.\n *\n * Useful on, for example, retina displays.\n * @property {module:Settings~AudioVideoSettings} [maxBitrate={audio: -1, video: -1}]\n * The maximum bitrate that the ABR algorithms will choose. This value is specified in kbps.\n *\n * Use -1 for no limit.\n * @property {module:Settings~AudioVideoSettings} [minBitrate={audio: -1, video: -1}]\n * The minimum bitrate that the ABR algorithms will choose. This value is specified in kbps.\n *\n * Use -1 for no limit.\n * @property {module:Settings~AudioVideoSettings} [maxRepresentationRatio={audio: 1, video: 1}]\n * When switching multi-bitrate content (auto or manual mode) this property specifies the maximum representation allowed, as a proportion of the size of the representation set.\n *\n * You can set or remove this cap at anytime before or during playback.\n *\n * To clear this setting you set the value to 1.\n *\n * If both this and maxAllowedBitrate are defined, maxAllowedBitrate is evaluated first, then maxAllowedRepresentation, i.e. the lowest value from executing these rules is used.\n *\n * This feature is typically used to reserve higher representations for playback only when connected over a fast connection.\n * @property {module:Settings~AudioVideoSettings} [initialBitrate={audio: -1, video: -1}]\n * Explicitly set the starting bitrate for audio or video. This value is specified in kbps.\n *\n * Use -1 to let the player decide.\n * @property {module:Settings~AudioVideoSettings} [initialRepresentationRatio={audio: -1, video: -1}]\n * Explicitly set the initial representation ratio.\n *\n * If initalBitrate is specified, this is ignored.\n * @property {module:Settings~AudioVideoSettings} [autoSwitchBitrate={audio: true, video: true}]\n * Indicates whether the player should enable ABR algorithms to switch the bitrate.\n *\n * @property {string} [fetchThroughputCalculationMode=\"abrFetchThroughputCalculationDownloadedData\"]\n * Algorithm to determine the throughput in case the Fetch API is used for low latency streaming.\n *\n * For details please check the samples section and FetchLoader.js.\n */\n\n/**\n * @typedef {Object} module:Settings~CmcdSettings\n * @property {boolean} [enable=false]\n * Enable or disable the CMCD reporting.\n * @property {string} [sid]\n * GUID identifying the current playback session.\n *\n * Should be in UUID format.\n *\n * If not specified a UUID will be automatically generated.\n * @property {string} [cid]\n * A unique string to identify the current content.\n *\n * If not specified it will be a hash of the MPD url.\n * @property {number} [rtp]\n * The requested maximum throughput that the client considers sufficient for delivery of the asset.\n *\n * If not specified this value will be dynamically calculated in the CMCDModel based on the current buffer level.\n * @property {number} [rtpSafetyFactor]\n * This value is used as a factor for the rtp value calculation: rtp = minBandwidth * rtpSafetyFactor\n *\n * If not specified this value defaults to 5. Note that this value is only used when no static rtp value is defined.\n * @property {number} [mode]\n * The method to use to attach cmcd metrics to the requests. 'query' to use query parameters, 'header' to use http headers.\n *\n * If not specified this value defaults to 'query'.\n * @property {Array.<string>} [enabledKeys]\n * This value is used to specify the desired CMCD parameters. Parameters not included in this list are not reported.\n */\n\n/**\n * @typedef {Object} Metrics\n * @property {number} [metricsMaxListDepth=100]\n * Maximum number of metrics that are persisted per type.\n */\n\n/**\n * @typedef {Object} StreamingSettings\n * @property {number} [abandonLoadTimeout=10000]\n * A timeout value in seconds, which during the ABRController will block switch-up events.\n *\n * This will only take effect after an abandoned fragment event occurs.\n * @property {number} [wallclockTimeUpdateInterval=50]\n * How frequently the wallclockTimeUpdated internal event is triggered (in milliseconds).\n * @property {number} [manifestUpdateRetryInterval=100]\n * For live streams, set the interval-frequency in milliseconds at which dash.js will check if the current manifest is still processed before downloading the next manifest once the minimumUpdatePeriod time has.\n * @property {boolean} [cacheInitSegments=true]\n * Enables the caching of init segments to avoid requesting the init segments before each representation switch.\n * @property {boolean} [applyServiceDescription=true]\n * Set to true if dash.js should use the parameters defined in ServiceDescription elements\n * @property {boolean} [applyProducerReferenceTime=true]\n * Set to true if dash.js should use the parameters defined in ProducerReferenceTime elements in combination with ServiceDescription elements.\n * @property {boolean} [applyContentSteering=true]\n * Set to true if dash.js should apply content steering during playback.\n * @property {number} [eventControllerRefreshDelay=100]\n * For multi-period streams, overwrite the manifest mediaPresentationDuration attribute with the sum of period durations if the manifest mediaPresentationDuration is greater than the sum of period durations\n * @property {boolean} [enableManifestDurationMismatchFix=true]\n * Defines the delay in milliseconds between two consecutive checks for events to be fired.\n * @property {module:Settings~Metrics} metrics Metric settings\n * @property {module:Settings~LiveDelay} delay Live Delay settings\n * @property {module:Settings~TimeShiftBuffer} timeShiftBuffer TimeShiftBuffer settings\n * @property {module:Settings~Protection} protection DRM related settings\n * @property {module:Settings~Capabilities} capabilities Capability related settings\n * @property {module:Settings~Buffer} buffer Buffer related settings\n * @property {module:Settings~Gaps} gaps Gap related settings\n * @property {module:Settings~UtcSynchronizationSettings} utcSynchronization Settings related to UTC clock synchronization\n * @property {module:Settings~Scheduling} scheduling Settings related to segment scheduling\n * @property {module:Settings~Text} text Settings related to Subtitles and captions\n * @property {module:Settings~LiveCatchupSettings} liveCatchup Settings related to live catchup.\n * @property {module:Settings~CachingInfoSettings} [lastBitrateCachingInfo={enabled: true, ttl: 360000}]\n * Set to false if you would like to disable the last known bit rate from being stored during playback and used to set the initial bit rate for subsequent playback within the expiration window.\n *\n * The default expiration is one hour, defined in milliseconds.\n *\n * If expired, the default initial bit rate (closest to 1000 kbps) will be used for that session and a new bit rate will be stored during that session.\n * @property {module:Settings~AudioVideoSettings} [cacheLoadThresholds={video: 50, audio: 5}]\n * For a given media type, the threshold which defines if the response to a fragment request is coming from browser cache or not.\n * @property {module:Settings~AudioVideoSettings} [trackSwitchMode={video: \"neverReplace\", audio: \"alwaysReplace\"}]\n * For a given media type defines if existing segments in the buffer should be overwritten once the track is switched. For instance if the user switches the audio language the existing segments in the audio buffer will be replaced when setting this value to \"alwaysReplace\".\n *\n * Possible values\n *\n * - Constants.TRACK_SWITCH_MODE_ALWAYS_REPLACE\n * Replace existing segments in the buffer\n *\n * - Constants.TRACK_SWITCH_MODE_NEVER_REPLACE\n * Do not replace existing segments in the buffer\n *\n * @property {string} [selectionModeForInitialTrack=\"highestBitrate\"]\n * Sets the selection mode for the initial track. This mode defines how the initial track will be selected if no initial media settings are set. If initial media settings are set this parameter will be ignored. Available options are:\n *\n * Possible values\n *\n * - Constants.TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY\n * This mode makes the player select the track with the highest selectionPriority as defined in the manifest. If not selectionPriority is given we fallback to TRACK_SELECTION_MODE_HIGHEST_BITRATE. This mode is a default mode.\n *\n * - Constants.TRACK_SELECTION_MODE_HIGHEST_BITRATE\n * This mode makes the player select the track with a highest bitrate.\n *\n * - Constants.TRACK_SELECTION_MODE_FIRST_TRACK\n * This mode makes the player select the first track found in the manifest.\n *\n * - Constants.TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY\n * This mode makes the player select the track with the lowest bitrate per pixel average.\n *\n * - Constants.TRACK_SELECTION_MODE_WIDEST_RANGE\n * This mode makes the player select the track with a widest range of bitrates.\n *\n *\n * @property {number} [fragmentRequestTimeout=20000]\n * Time in milliseconds before timing out on loading a media fragment.\n *\n * @property {number} [manifestRequestTimeout=10000]\n * Time in milliseconds before timing out on loading a manifest.\n *\n * Fragments that timeout are retried as if they failed.\n * @property {module:Settings~RequestTypeSettings} [retryIntervals]\n * Time in milliseconds of which to reload a failed file load attempt.\n *\n * For low latency mode these values are divided by lowLatencyReductionFactor.\n * @property {module:Settings~RequestTypeSettings} [retryAttempts]\n * Total number of retry attempts that will occur on a file load before it fails.\n *\n * For low latency mode these values are multiplied by lowLatencyMultiplyFactor.\n * @property {module:Settings~AbrSettings} abr\n * Adaptive Bitrate algorithm related settings.\n * @property {module:Settings~CmcdSettings} cmcd\n * Settings related to Common Media Client Data reporting.\n */\n\n\n/**\n * @class\n * @ignore\n */\nfunction Settings() {\n let instance;\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n const DISPATCH_KEY_MAP = {\n 'streaming.delay.liveDelay': Events.SETTING_UPDATED_LIVE_DELAY,\n 'streaming.delay.liveDelayFragmentCount': Events.SETTING_UPDATED_LIVE_DELAY_FRAGMENT_COUNT,\n 'streaming.liveCatchup.enabled': Events.SETTING_UPDATED_CATCHUP_ENABLED,\n 'streaming.liveCatchup.playbackRate.min': Events.SETTING_UPDATED_PLAYBACK_RATE_MIN,\n 'streaming.liveCatchup.playbackRate.max': Events.SETTING_UPDATED_PLAYBACK_RATE_MAX\n };\n\n\n /**\n * @const {PlayerSettings} defaultSettings\n * @ignore\n */\n const defaultSettings = {\n debug: {\n logLevel: Debug.LOG_LEVEL_WARNING,\n dispatchEvent: false\n },\n streaming: {\n abandonLoadTimeout: 10000,\n wallclockTimeUpdateInterval: 100,\n manifestUpdateRetryInterval: 100,\n cacheInitSegments: false,\n applyServiceDescription: true,\n applyProducerReferenceTime: true,\n applyContentSteering: true,\n eventControllerRefreshDelay: 100,\n enableManifestDurationMismatchFix: true,\n capabilities: {\n filterUnsupportedEssentialProperties: true,\n useMediaCapabilitiesApi: false\n },\n timeShiftBuffer: {\n calcFromSegmentTimeline: false,\n fallbackToSegmentTimeline: true\n },\n metrics: {\n maxListDepth: 100\n },\n delay: {\n liveDelayFragmentCount: NaN,\n liveDelay: NaN,\n useSuggestedPresentationDelay: true\n },\n protection: {\n keepProtectionMediaKeys: false,\n ignoreEmeEncryptedEvent: false,\n detectPlayreadyMessageFormat: true,\n },\n buffer: {\n enableSeekDecorrelationFix: false,\n fastSwitchEnabled: true,\n flushBufferAtTrackSwitch: false,\n reuseExistingSourceBuffers: true,\n bufferPruningInterval: 10,\n bufferToKeep: 20,\n bufferTimeAtTopQuality: 30,\n bufferTimeAtTopQualityLongForm: 60,\n initialBufferLevel: NaN,\n stableBufferTime: 12,\n longFormContentDurationThreshold: 600,\n stallThreshold: 0.3,\n useAppendWindow: true,\n setStallState: true,\n avoidCurrentTimeRangePruning: false,\n useChangeTypeForTrackSwitch: true\n },\n gaps: {\n jumpGaps: true,\n jumpLargeGaps: true,\n smallGapLimit: 1.5,\n threshold: 0.3,\n enableSeekFix: true,\n enableStallFix: false,\n stallSeek: 0.1\n },\n utcSynchronization: {\n enabled: true,\n useManifestDateHeaderTimeSource: true,\n backgroundAttempts: 2,\n timeBetweenSyncAttempts: 30,\n maximumTimeBetweenSyncAttempts: 600,\n minimumTimeBetweenSyncAttempts: 2,\n timeBetweenSyncAttemptsAdjustmentFactor: 2,\n maximumAllowedDrift: 100,\n enableBackgroundSyncAfterSegmentDownloadError: true,\n defaultTimingSource: {\n scheme: 'urn:mpeg:dash:utc:http-xsdate:2014',\n value: 'https://time.akamai.com/?iso&ms'\n }\n },\n scheduling: {\n defaultTimeout: 500,\n lowLatencyTimeout: 0,\n scheduleWhilePaused: true\n },\n text: {\n defaultEnabled: true\n },\n liveCatchup: {\n maxDrift: NaN,\n playbackRate: {\n min: NaN,\n max: NaN\n },\n playbackBufferMin: 0.5,\n enabled: null,\n mode: Constants.LIVE_CATCHUP_MODE_DEFAULT\n },\n lastBitrateCachingInfo: {\n enabled: true,\n ttl: 360000\n },\n lastMediaSettingsCachingInfo: {\n enabled: true,\n ttl: 360000\n },\n cacheLoadThresholds: {\n video: 50,\n audio: 5\n },\n trackSwitchMode: {\n audio: Constants.TRACK_SWITCH_MODE_ALWAYS_REPLACE,\n video: Constants.TRACK_SWITCH_MODE_NEVER_REPLACE\n },\n selectionModeForInitialTrack: Constants.TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY,\n fragmentRequestTimeout: 20000,\n manifestRequestTimeout: 10000,\n retryIntervals: {\n [HTTPRequest.MPD_TYPE]: 500,\n [HTTPRequest.XLINK_EXPANSION_TYPE]: 500,\n [HTTPRequest.MEDIA_SEGMENT_TYPE]: 1000,\n [HTTPRequest.INIT_SEGMENT_TYPE]: 1000,\n [HTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE]: 1000,\n [HTTPRequest.INDEX_SEGMENT_TYPE]: 1000,\n [HTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE]: 1000,\n [HTTPRequest.LICENSE]: 1000,\n [HTTPRequest.OTHER_TYPE]: 1000,\n lowLatencyReductionFactor: 10\n },\n retryAttempts: {\n [HTTPRequest.MPD_TYPE]: 3,\n [HTTPRequest.XLINK_EXPANSION_TYPE]: 1,\n [HTTPRequest.MEDIA_SEGMENT_TYPE]: 3,\n [HTTPRequest.INIT_SEGMENT_TYPE]: 3,\n [HTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE]: 3,\n [HTTPRequest.INDEX_SEGMENT_TYPE]: 3,\n [HTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE]: 3,\n [HTTPRequest.LICENSE]: 3,\n [HTTPRequest.OTHER_TYPE]: 3,\n lowLatencyMultiplyFactor: 5\n },\n abr: {\n movingAverageMethod: Constants.MOVING_AVERAGE_SLIDING_WINDOW,\n ABRStrategy: Constants.ABR_STRATEGY_DYNAMIC,\n additionalAbrRules: {\n insufficientBufferRule: true,\n switchHistoryRule: true,\n droppedFramesRule: true,\n abandonRequestsRule: true\n },\n bandwidthSafetyFactor: 0.9,\n useDefaultABRRules: true,\n useDeadTimeLatency: true,\n limitBitrateByPortal: false,\n usePixelRatioInLimitBitrateByPortal: false,\n maxBitrate: {\n audio: -1,\n video: -1\n },\n minBitrate: {\n audio: -1,\n video: -1\n },\n maxRepresentationRatio: {\n audio: 1,\n video: 1\n },\n initialBitrate: {\n audio: -1,\n video: -1\n },\n initialRepresentationRatio: {\n audio: -1,\n video: -1\n },\n autoSwitchBitrate: {\n audio: true,\n video: true\n },\n fetchThroughputCalculationMode: Constants.ABR_FETCH_THROUGHPUT_CALCULATION_MOOF_PARSING\n },\n cmcd: {\n enabled: false,\n sid: null,\n cid: null,\n rtp: null,\n rtpSafetyFactor: 5,\n mode: Constants.CMCD_MODE_QUERY,\n enabledKeys: ['br', 'd', 'ot', 'tb' , 'bl', 'dl', 'mtp', 'nor', 'nrr', 'su' , 'bs', 'rtp' , 'cid', 'pr', 'sf', 'sid', 'st', 'v']\n }\n },\n errors: {\n recoverAttempts: {\n mediaErrorDecode: 5\n }\n }\n };\n\n let settings = Utils.clone(defaultSettings);\n\n //Merge in the settings. If something exists in the new config that doesn't match the schema of the default config,\n //regard it as an error and log it.\n function mixinSettings(source, dest, path) {\n for (let n in source) {\n if (source.hasOwnProperty(n)) {\n if (dest.hasOwnProperty(n)) {\n if (typeof source[n] === 'object' && !(source[n] instanceof Array) && source[n] !== null) {\n mixinSettings(source[n], dest[n], path.slice() + n + '.');\n } else {\n dest[n] = Utils.clone(source[n]);\n if (DISPATCH_KEY_MAP[path + n]) {\n eventBus.trigger(DISPATCH_KEY_MAP[path + n]);\n }\n }\n } else {\n console.error('Settings parameter ' + path + n + ' is not supported');\n }\n }\n }\n }\n\n /**\n * Return the settings object. Don't copy/store this object, you won't get updates.\n * @func\n * @instance\n */\n function get() {\n return settings;\n }\n\n /**\n * @func\n * @instance\n * @param {object} settingsObj - This should be a partial object of the Settings.Schema type. That is, fields defined should match the path (e.g.\n * settingsObj.streaming.abr.autoSwitchBitrate.audio -> defaultSettings.streaming.abr.autoSwitchBitrate.audio). Where an element's path does\n * not match it is ignored, and a warning is logged.\n *\n * Use to change the settings object. Any new values defined will overwrite the settings and anything undefined will not change.\n * Implementers of new settings should add it in an approriate namespace to the defaultSettings object and give it a default value (that is not undefined).\n *\n */\n function update(settingsObj) {\n if (typeof settingsObj === 'object') {\n mixinSettings(settingsObj, settings, '');\n }\n }\n\n /**\n * Resets the settings object. Everything is set to its default value.\n * @func\n * @instance\n *\n */\n function reset() {\n settings = Utils.clone(defaultSettings);\n }\n\n instance = {\n get,\n update,\n reset\n };\n\n return instance;\n}\n\n\nSettings.__dashjs_factory_name = 'Settings';\nlet factory = FactoryMaker.getSingletonFactory(Settings);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @class\n * @ignore\n */\n\nimport path from 'path-browserify'\nimport { UAParser } from 'ua-parser-js'\n\nclass Utils {\n static mixin(dest, source, copy) {\n let s;\n let empty = {};\n if (dest) {\n for (let name in source) {\n if (source.hasOwnProperty(name)) {\n s = source[name];\n if (!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))) {\n if (typeof dest[name] === 'object' && dest[name] !== null) {\n dest[name] = Utils.mixin(dest[name], s, copy);\n } else {\n dest[name] = copy(s);\n }\n }\n }\n }\n }\n return dest;\n }\n\n static clone(src) {\n if (!src || typeof src !== 'object') {\n return src; // anything\n }\n let r;\n if (src instanceof Array) {\n // array\n r = [];\n for (let i = 0, l = src.length; i < l; ++i) {\n if (i in src) {\n r.push(Utils.clone(src[i]));\n }\n }\n } else {\n r = {};\n }\n return Utils.mixin(r, src, Utils.clone);\n }\n\n static addAditionalQueryParameterToUrl(url, params) {\n try {\n if (!params || params.length === 0) {\n return url;\n }\n\n let modifiedUrl = new URL(url);\n\n params.forEach((param) => {\n if (param.key && param.value) {\n modifiedUrl.searchParams.set(param.key, param.value);\n }\n });\n\n return modifiedUrl.href;\n\n\n } catch (e) {\n return url;\n }\n }\n\n static parseHttpHeaders(headerStr) {\n let headers = {};\n if (!headerStr) {\n return headers;\n }\n\n // Trim headerStr to fix a MS Edge bug with xhr.getAllResponseHeaders method\n // which send a string starting with a \"\\n\" character\n let headerPairs = headerStr.trim().split('\\u000d\\u000a');\n for (let i = 0, ilen = headerPairs.length; i < ilen; i++) {\n let headerPair = headerPairs[i];\n let index = headerPair.indexOf('\\u003a\\u0020');\n if (index > 0) {\n headers[headerPair.substring(0, index)] = headerPair.substring(index + 2);\n }\n }\n return headers;\n }\n\n static generateUuid() {\n let dt = new Date().getTime();\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (dt + Math.random() * 16) % 16 | 0;\n dt = Math.floor(dt / 16);\n return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n });\n return uuid;\n }\n\n static generateHashCode(string) {\n let hash = 0;\n\n if (string.length === 0) {\n return hash;\n }\n\n for (let i = 0; i < string.length; i++) {\n const chr = string.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0;\n }\n return hash;\n }\n\n /**\n * Compares both urls and returns a relative url (target relative to original)\n * @param {string} original\n * @param {string} target\n * @return {string|*}\n */\n static getRelativeUrl(originalUrl, targetUrl) {\n try {\n const original = new URL(originalUrl);\n const target = new URL(targetUrl);\n\n // Unify the protocol to compare the origins\n original.protocol = target.protocol;\n if (original.origin !== target.origin) {\n return targetUrl;\n }\n\n // Use the relative path implementation of the path library. We need to cut off the actual filename in the end to get the relative path\n let relativePath = path.relative(original.pathname.substr(0, original.pathname.lastIndexOf('/')), target.pathname.substr(0, target.pathname.lastIndexOf('/')));\n\n // In case the relative path is empty (both path are equal) return the filename only. Otherwise add a slash in front of the filename\n const startIndexOffset = relativePath.length === 0 ? 1 : 0;\n relativePath += target.pathname.substr(target.pathname.lastIndexOf('/') + startIndexOffset, target.pathname.length - 1);\n\n // Build the other candidate, e.g. the 'host relative' path that starts with \"/\", and return the shortest of the two candidates.\n if (target.pathname.length < relativePath.length) {\n return target.pathname;\n }\n return relativePath;\n } catch (e) {\n return targetUrl\n }\n }\n\n static parseUserAgent(ua = null) {\n try {\n const uaString = ua === null ? typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase() : '' : '';\n\n return UAParser(uaString);\n }\n catch(e) {\n return {};\n }\n }\n}\n\nexport default Utils;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from './EventsBase';\n\n/**\n * These are internal events that should not be needed at the player level.\n * If you find and event in here that you would like access to from MediaPlayer level\n * please add an issue at https://github.com/Dash-Industry-Forum/dash.js/issues/new\n * @class\n * @ignore\n */\nclass CoreEvents extends EventsBase {\n constructor () {\n super();\n this.ATTEMPT_BACKGROUND_SYNC = 'attemptBackgroundSync';\n this.BUFFERING_COMPLETED = 'bufferingCompleted';\n this.BUFFER_CLEARED = 'bufferCleared';\n this.BYTES_APPENDED_END_FRAGMENT = 'bytesAppendedEndFragment';\n this.BUFFER_REPLACEMENT_STARTED = 'bufferReplacementStarted';\n this.CHECK_FOR_EXISTENCE_COMPLETED = 'checkForExistenceCompleted';\n this.CURRENT_TRACK_CHANGED = 'currentTrackChanged';\n this.DATA_UPDATE_COMPLETED = 'dataUpdateCompleted';\n this.INBAND_EVENTS = 'inbandEvents';\n this.INITIAL_STREAM_SWITCH = 'initialStreamSwitch';\n this.INIT_FRAGMENT_LOADED = 'initFragmentLoaded';\n this.INIT_FRAGMENT_NEEDED = 'initFragmentNeeded';\n this.INTERNAL_MANIFEST_LOADED = 'internalManifestLoaded';\n this.ORIGINAL_MANIFEST_LOADED = 'originalManifestLoaded';\n this.LOADING_COMPLETED = 'loadingCompleted';\n this.LOADING_PROGRESS = 'loadingProgress';\n this.LOADING_DATA_PROGRESS = 'loadingDataProgress';\n this.LOADING_ABANDONED = 'loadingAborted';\n this.MANIFEST_UPDATED = 'manifestUpdated';\n this.MEDIA_FRAGMENT_LOADED = 'mediaFragmentLoaded';\n this.MEDIA_FRAGMENT_NEEDED = 'mediaFragmentNeeded';\n this.QUOTA_EXCEEDED = 'quotaExceeded';\n this.SEGMENT_LOCATION_BLACKLIST_ADD = 'segmentLocationBlacklistAdd';\n this.SEGMENT_LOCATION_BLACKLIST_CHANGED = 'segmentLocationBlacklistChanged';\n this.SERVICE_LOCATION_BLACKLIST_ADD = 'serviceLocationBlacklistAdd';\n this.SERVICE_LOCATION_BLACKLIST_CHANGED = 'serviceLocationBlacklistChanged';\n this.SET_FRAGMENTED_TEXT_AFTER_DISABLED = 'setFragmentedTextAfterDisabled';\n this.SET_NON_FRAGMENTED_TEXT = 'setNonFragmentedText';\n this.SOURCE_BUFFER_ERROR = 'sourceBufferError';\n this.STREAMS_COMPOSED = 'streamsComposed';\n this.STREAM_BUFFERING_COMPLETED = 'streamBufferingCompleted';\n this.STREAM_REQUESTING_COMPLETED = 'streamRequestingCompleted';\n this.TEXT_TRACKS_QUEUE_INITIALIZED = 'textTracksQueueInitialized';\n this.TIME_SYNCHRONIZATION_COMPLETED = 'timeSynchronizationComplete';\n this.UPDATE_TIME_SYNC_OFFSET = 'updateTimeSyncOffset';\n this.URL_RESOLUTION_FAILED = 'urlResolutionFailed';\n this.VIDEO_CHUNK_RECEIVED = 'videoChunkReceived';\n this.WALLCLOCK_TIME_UPDATED = 'wallclockTimeUpdated';\n this.XLINK_ELEMENT_LOADED = 'xlinkElementLoaded';\n this.XLINK_READY = 'xlinkReady';\n this.SEEK_TARGET = 'seekTarget';\n this.SETTING_UPDATED_LIVE_DELAY = 'settingUpdatedLiveDelay';\n this.SETTING_UPDATED_LIVE_DELAY_FRAGMENT_COUNT = 'settingUpdatedLiveDelayFragmentCount';\n this.SETTING_UPDATED_CATCHUP_ENABLED = 'settingUpdatedCatchupEnabled';\n this.SETTING_UPDATED_PLAYBACK_RATE_MIN = 'settingUpdatedPlaybackRateMin';\n this.SETTING_UPDATED_PLAYBACK_RATE_MAX = 'settingUpdatedPlaybackRateMax';\n }\n}\n\nexport default CoreEvents;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nimport CoreEvents from './CoreEvents';\nclass Events extends CoreEvents {\n}\nlet events = new Events();\nexport default events;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass EventsBase {\n extend (events, config) {\n if (!events) return;\n\n let override = config ? config.override : false;\n let publicOnly = config ? config.publicOnly : false;\n\n\n for (const evt in events) {\n if (!events.hasOwnProperty(evt) || (this[evt] && !override)) continue;\n if (publicOnly && events[evt].indexOf('public_') === -1) continue;\n this[evt] = events[evt];\n\n }\n }\n}\n\nexport default EventsBase;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass UTCTiming {\n constructor() {\n // UTCTiming is a DescriptorType and doesn't have any additional fields\n this.schemeIdUri = '';\n this.value = '';\n }\n}\n\nexport default UTCTiming;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from '../core/events/EventsBase';\n\n/**\n * @class\n * @implements EventsBase\n */\nclass MediaPlayerEvents extends EventsBase {\n\n /**\n * @description Public facing external events to be used when developing a player that implements dash.js.\n */\n constructor() {\n super();\n /**\n * Triggered when playback will not start yet\n * as the MPD's availabilityStartTime is in the future.\n * Check delay property in payload to determine time before playback will start.\n * @event MediaPlayerEvents#AST_IN_FUTURE\n */\n this.AST_IN_FUTURE = 'astInFuture';\n\n /**\n * Triggered when the video element's buffer state changes to stalled.\n * Check mediaType in payload to determine type (Video, Audio, FragmentedText).\n * @event MediaPlayerEvents#BUFFER_EMPTY\n */\n this.BUFFER_EMPTY = 'bufferStalled';\n\n /**\n * Triggered when the video element's buffer state changes to loaded.\n * Check mediaType in payload to determine type (Video, Audio, FragmentedText).\n * @event MediaPlayerEvents#BUFFER_LOADED\n */\n this.BUFFER_LOADED = 'bufferLoaded';\n\n /**\n * Triggered when the video element's buffer state changes, either stalled or loaded. Check payload for state.\n * @event MediaPlayerEvents#BUFFER_LEVEL_STATE_CHANGED\n */\n this.BUFFER_LEVEL_STATE_CHANGED = 'bufferStateChanged';\n\n /**\n * Triggered when the buffer level of a media type has been updated\n * @event MediaPlayerEvents#BUFFER_LEVEL_UPDATED\n */\n this.BUFFER_LEVEL_UPDATED = 'bufferLevelUpdated';\n\n /**\n * Triggered when a dynamic stream changed to static (transition phase between Live and On-Demand).\n * @event MediaPlayerEvents#DYNAMIC_TO_STATIC\n */\n this.DYNAMIC_TO_STATIC = 'dynamicToStatic';\n\n /**\n * Triggered when there is an error from the element or MSE source buffer.\n * @event MediaPlayerEvents#ERROR\n */\n this.ERROR = 'error';\n /**\n * Triggered when a fragment download has completed.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_COMPLETED\n */\n this.FRAGMENT_LOADING_COMPLETED = 'fragmentLoadingCompleted';\n\n /**\n * Triggered when a partial fragment download has completed.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_PROGRESS\n */\n this.FRAGMENT_LOADING_PROGRESS = 'fragmentLoadingProgress';\n /**\n * Triggered when a fragment download has started.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_STARTED\n */\n this.FRAGMENT_LOADING_STARTED = 'fragmentLoadingStarted';\n\n /**\n * Triggered when a fragment download is abandoned due to detection of slow download base on the ABR abandon rule..\n * @event MediaPlayerEvents#FRAGMENT_LOADING_ABANDONED\n */\n this.FRAGMENT_LOADING_ABANDONED = 'fragmentLoadingAbandoned';\n\n /**\n * Triggered when {@link module:Debug} logger methods are called.\n * @event MediaPlayerEvents#LOG\n */\n this.LOG = 'log';\n\n /**\n * Triggered when the manifest load is complete\n * @event MediaPlayerEvents#MANIFEST_LOADED\n */\n this.MANIFEST_LOADED = 'manifestLoaded';\n\n /**\n * Triggered anytime there is a change to the overall metrics.\n * @event MediaPlayerEvents#METRICS_CHANGED\n */\n this.METRICS_CHANGED = 'metricsChanged';\n\n /**\n * Triggered when an individual metric is added, updated or cleared.\n * @event MediaPlayerEvents#METRIC_CHANGED\n */\n this.METRIC_CHANGED = 'metricChanged';\n\n /**\n * Triggered every time a new metric is added.\n * @event MediaPlayerEvents#METRIC_ADDED\n */\n this.METRIC_ADDED = 'metricAdded';\n\n /**\n * Triggered every time a metric is updated.\n * @event MediaPlayerEvents#METRIC_UPDATED\n */\n this.METRIC_UPDATED = 'metricUpdated';\n\n /**\n * Triggered when a new stream (period) starts.\n * @event MediaPlayerEvents#PERIOD_SWITCH_STARTED\n */\n this.PERIOD_SWITCH_STARTED = 'periodSwitchStarted';\n\n /**\n * Triggered at the stream end of a period.\n * @event MediaPlayerEvents#PERIOD_SWITCH_COMPLETED\n */\n this.PERIOD_SWITCH_COMPLETED = 'periodSwitchCompleted';\n\n /**\n * Triggered when an ABR up /down switch is initiated; either by user in manual mode or auto mode via ABR rules.\n * @event MediaPlayerEvents#QUALITY_CHANGE_REQUESTED\n */\n this.QUALITY_CHANGE_REQUESTED = 'qualityChangeRequested';\n\n /**\n * Triggered when the new ABR quality is being rendered on-screen.\n * @event MediaPlayerEvents#QUALITY_CHANGE_RENDERED\n */\n this.QUALITY_CHANGE_RENDERED = 'qualityChangeRendered';\n\n /**\n * Triggered when the new track is being rendered.\n * @event MediaPlayerEvents#TRACK_CHANGE_RENDERED\n */\n this.TRACK_CHANGE_RENDERED = 'trackChangeRendered';\n\n /**\n * Triggered when a stream (period) is being loaded\n * @event MediaPlayerEvents#STREAM_INITIALIZING\n */\n this.STREAM_INITIALIZING = 'streamInitializing';\n\n /**\n * Triggered when a stream (period) is loaded\n * @event MediaPlayerEvents#STREAM_UPDATED\n */\n this.STREAM_UPDATED = 'streamUpdated';\n\n /**\n * Triggered when a stream (period) is activated\n * @event MediaPlayerEvents#STREAM_ACTIVATED\n */\n this.STREAM_ACTIVATED = 'streamActivated';\n\n /**\n * Triggered when a stream (period) is deactivated\n * @event MediaPlayerEvents#STREAM_DEACTIVATED\n */\n this.STREAM_DEACTIVATED = 'streamDeactivated';\n\n /**\n * Triggered when a stream (period) is activated\n * @event MediaPlayerEvents#STREAM_INITIALIZED\n */\n this.STREAM_INITIALIZED = 'streamInitialized';\n\n /**\n * Triggered when the player has been reset.\n * @event MediaPlayerEvents#STREAM_TEARDOWN_COMPLETE\n */\n this.STREAM_TEARDOWN_COMPLETE = 'streamTeardownComplete';\n\n /**\n * Triggered once all text tracks detected in the MPD are added to the video element.\n * @event MediaPlayerEvents#TEXT_TRACKS_ADDED\n */\n this.TEXT_TRACKS_ADDED = 'allTextTracksAdded';\n\n /**\n * Triggered when a text track is added to the video element's TextTrackList\n * @event MediaPlayerEvents#TEXT_TRACK_ADDED\n */\n this.TEXT_TRACK_ADDED = 'textTrackAdded';\n\n /**\n * Triggered when a ttml chunk is parsed.\n * @event MediaPlayerEvents#TTML_PARSED\n */\n this.TTML_PARSED = 'ttmlParsed';\n\n /**\n * Triggered when a ttml chunk has to be parsed.\n * @event MediaPlayerEvents#TTML_TO_PARSE\n */\n this.TTML_TO_PARSE = 'ttmlToParse';\n\n /**\n * Triggered when a caption is rendered.\n * @event MediaPlayerEvents#CAPTION_RENDERED\n */\n this.CAPTION_RENDERED = 'captionRendered';\n\n /**\n * Triggered when the caption container is resized.\n * @event MediaPlayerEvents#CAPTION_CONTAINER_RESIZE\n */\n this.CAPTION_CONTAINER_RESIZE = 'captionContainerResize';\n\n /**\n * Sent when enough data is available that the media can be played,\n * at least for a couple of frames. This corresponds to the\n * HAVE_ENOUGH_DATA readyState.\n * @event MediaPlayerEvents#CAN_PLAY\n */\n this.CAN_PLAY = 'canPlay';\n\n /**\n * This corresponds to the CAN_PLAY_THROUGH readyState.\n * @event MediaPlayerEvents#CAN_PLAY_THROUGH\n */\n this.CAN_PLAY_THROUGH = 'canPlayThrough';\n\n /**\n * Sent when playback completes.\n * @event MediaPlayerEvents#PLAYBACK_ENDED\n */\n this.PLAYBACK_ENDED = 'playbackEnded';\n\n /**\n * Sent when an error occurs. The element's error\n * attribute contains more information.\n * @event MediaPlayerEvents#PLAYBACK_ERROR\n */\n this.PLAYBACK_ERROR = 'playbackError';\n\n /**\n * Sent when playback is not allowed (for example if user gesture is needed).\n * @event MediaPlayerEvents#PLAYBACK_NOT_ALLOWED\n */\n this.PLAYBACK_NOT_ALLOWED = 'playbackNotAllowed';\n\n /**\n * The media's metadata has finished loading; all attributes now\n * contain as much useful information as they're going to.\n * @event MediaPlayerEvents#PLAYBACK_METADATA_LOADED\n */\n this.PLAYBACK_METADATA_LOADED = 'playbackMetaDataLoaded';\n\n /**\n * The event is fired when the frame at the current playback position of the media has finished loading;\n * often the first frame\n * @event MediaPlayerEvents#PLAYBACK_LOADED_DATA\n */\n this.PLAYBACK_LOADED_DATA = 'playbackLoadedData';\n\n /**\n * Sent when playback is paused.\n * @event MediaPlayerEvents#PLAYBACK_PAUSED\n */\n this.PLAYBACK_PAUSED = 'playbackPaused';\n\n /**\n * Sent when the media begins to play (either for the first time, after having been paused,\n * or after ending and then restarting).\n *\n * @event MediaPlayerEvents#PLAYBACK_PLAYING\n */\n this.PLAYBACK_PLAYING = 'playbackPlaying';\n\n /**\n * Sent periodically to inform interested parties of progress downloading\n * the media. Information about the current amount of the media that has\n * been downloaded is available in the media element's buffered attribute.\n * @event MediaPlayerEvents#PLAYBACK_PROGRESS\n */\n this.PLAYBACK_PROGRESS = 'playbackProgress';\n\n /**\n * Sent when the playback speed changes.\n * @event MediaPlayerEvents#PLAYBACK_RATE_CHANGED\n */\n this.PLAYBACK_RATE_CHANGED = 'playbackRateChanged';\n\n /**\n * Sent when a seek operation completes.\n * @event MediaPlayerEvents#PLAYBACK_SEEKED\n */\n this.PLAYBACK_SEEKED = 'playbackSeeked';\n\n /**\n * Sent when a seek operation begins.\n * @event MediaPlayerEvents#PLAYBACK_SEEKING\n */\n this.PLAYBACK_SEEKING = 'playbackSeeking';\n\n /**\n * Sent when the video element reports stalled\n * @event MediaPlayerEvents#PLAYBACK_STALLED\n */\n this.PLAYBACK_STALLED = 'playbackStalled';\n\n /**\n * Sent when playback of the media starts after having been paused;\n * that is, when playback is resumed after a prior pause event.\n *\n * @event MediaPlayerEvents#PLAYBACK_STARTED\n */\n this.PLAYBACK_STARTED = 'playbackStarted';\n\n /**\n * The time indicated by the element's currentTime attribute has changed.\n * @event MediaPlayerEvents#PLAYBACK_TIME_UPDATED\n */\n this.PLAYBACK_TIME_UPDATED = 'playbackTimeUpdated';\n\n /**\n * Sent when the video element reports that the volume has changed\n * @event MediaPlayerEvents#PLAYBACK_VOLUME_CHANGED\n */\n this.PLAYBACK_VOLUME_CHANGED = 'playbackVolumeChanged';\n\n /**\n * Sent when the media playback has stopped because of a temporary lack of data.\n *\n * @event MediaPlayerEvents#PLAYBACK_WAITING\n */\n this.PLAYBACK_WAITING = 'playbackWaiting';\n\n /**\n * Manifest validity changed - As a result of an MPD validity expiration event.\n * @event MediaPlayerEvents#MANIFEST_VALIDITY_CHANGED\n */\n this.MANIFEST_VALIDITY_CHANGED = 'manifestValidityChanged';\n\n /**\n * Dash events are triggered at their respective start points on the timeline.\n * @event MediaPlayerEvents#EVENT_MODE_ON_START\n */\n this.EVENT_MODE_ON_START = 'eventModeOnStart';\n\n /**\n * Dash events are triggered as soon as they were parsed.\n * @event MediaPlayerEvents#EVENT_MODE_ON_RECEIVE\n */\n this.EVENT_MODE_ON_RECEIVE = 'eventModeOnReceive';\n\n /**\n * Event that is dispatched whenever the player encounters a potential conformance validation that might lead to unexpected/not optimal behavior\n * @event MediaPlayerEvents#CONFORMANCE_VIOLATION\n */\n this.CONFORMANCE_VIOLATION = 'conformanceViolation';\n\n /**\n * Event that is dispatched whenever the player switches to a different representation\n * @event MediaPlayerEvents#REPRESENTATION_SWITCH\n */\n this.REPRESENTATION_SWITCH = 'representationSwitch';\n\n /**\n * Event that is dispatched whenever an adaptation set is removed due to all representations not being supported.\n * @event MediaPlayerEvents#ADAPTATION_SET_REMOVED_NO_CAPABILITIES\n */\n this.ADAPTATION_SET_REMOVED_NO_CAPABILITIES = 'adaptationSetRemovedNoCapabilities';\n /**\n * Triggered when a content steering request has completed.\n * @event MediaPlayerEvents#CONTENT_STEERING_REQUEST_COMPLETED\n */\n this.CONTENT_STEERING_REQUEST_COMPLETED = 'contentSteeringRequestCompleted';\n }\n}\n\nlet mediaPlayerEvents = new MediaPlayerEvents();\nexport default mediaPlayerEvents;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Constants declaration\n * @class\n * @ignore\n * @hideconstructor\n */\nclass Constants {\n\n init() {\n /**\n * @constant {string} STREAM Stream media type. Mainly used to report metrics relative to the full stream\n * @memberof Constants#\n * @static\n */\n this.STREAM = 'stream';\n\n /**\n * @constant {string} VIDEO Video media type\n * @memberof Constants#\n * @static\n */\n this.VIDEO = 'video';\n\n /**\n * @constant {string} AUDIO Audio media type\n * @memberof Constants#\n * @static\n */\n this.AUDIO = 'audio';\n\n /**\n * @constant {string} TEXT Text media type\n * @memberof Constants#\n * @static\n */\n this.TEXT = 'text';\n\n /**\n * @constant {string} MUXED Muxed (video/audio in the same chunk) media type\n * @memberof Constants#\n * @static\n */\n this.MUXED = 'muxed';\n\n /**\n * @constant {string} IMAGE Image media type\n * @memberof Constants#\n * @static\n */\n this.IMAGE = 'image';\n\n /**\n * @constant {string} STPP STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.STPP = 'stpp';\n\n /**\n * @constant {string} TTML STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.TTML = 'ttml';\n\n /**\n * @constant {string} VTT STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.VTT = 'vtt';\n\n /**\n * @constant {string} WVTT STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.WVTT = 'wvtt';\n\n /**\n * @constant {string} Content Steering\n * @memberof Constants#\n * @static\n */\n this.CONTENT_STEERING = 'contentSteering';\n\n /**\n * @constant {string} ABR_STRATEGY_DYNAMIC Dynamic Adaptive bitrate algorithm\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_DYNAMIC = 'abrDynamic';\n\n /**\n * @constant {string} ABR_STRATEGY_BOLA Adaptive bitrate algorithm based on Bola (buffer level)\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_BOLA = 'abrBola';\n\n /**\n * @constant {string} ABR_STRATEGY_L2A Adaptive bitrate algorithm based on L2A (online learning)\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_L2A = 'abrL2A';\n\n /**\n * @constant {string} ABR_STRATEGY_LoLP Adaptive bitrate algorithm based on LoL+\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_LoLP = 'abrLoLP';\n\n /**\n * @constant {string} ABR_STRATEGY_THROUGHPUT Adaptive bitrate algorithm based on throughput\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_THROUGHPUT = 'abrThroughput';\n\n /**\n * @constant {string} ABR_FETCH_THROUGHPUT_CALUCUALTION_DOWNLOADED_DATA Throughput calculation based on downloaded data array\n * @memberof Constants#\n * @static\n */\n this.ABR_FETCH_THROUGHPUT_CALCULATION_DOWNLOADED_DATA = 'abrFetchThroughputCalculationDownloadedData';\n\n /**\n * @constant {string} ABR_FETCH_THROUGHPUT_CALCULATION_MOOF_PARSING Throughput calculation based on moof parsing\n * @memberof Constants#\n * @static\n */\n this.ABR_FETCH_THROUGHPUT_CALCULATION_MOOF_PARSING = 'abrFetchThroughputCalculationMoofParsing';\n\n /**\n * @constant {string} ABR_FETCH_THROUGHPUT_CALCULATION_AAST Throughput calculation based on adjusted availability start time in low latency mode\n * @memberof Constants#\n * @static\n */\n this.ABR_FETCH_THROUGHPUT_CALCULATION_AAST = 'abrFetchThroughputCalculationAAST';\n\n /**\n * @constant {string} LIVE_CATCHUP_MODE_DEFAULT Throughput calculation based on moof parsing\n * @memberof Constants#\n * @static\n */\n this.LIVE_CATCHUP_MODE_DEFAULT = 'liveCatchupModeDefault';\n\n /**\n * @constant {string} LIVE_CATCHUP_MODE_LOLP Throughput calculation based on moof parsing\n * @memberof Constants#\n * @static\n */\n this.LIVE_CATCHUP_MODE_LOLP = 'liveCatchupModeLoLP';\n\n /**\n * @constant {string} MOVING_AVERAGE_SLIDING_WINDOW Moving average sliding window\n * @memberof Constants#\n * @static\n */\n this.MOVING_AVERAGE_SLIDING_WINDOW = 'slidingWindow';\n\n /**\n * @constant {string} EWMA Exponential moving average\n * @memberof Constants#\n * @static\n */\n this.MOVING_AVERAGE_EWMA = 'ewma';\n\n /**\n * @constant {string} BAD_ARGUMENT_ERROR Invalid Arguments type of error\n * @memberof Constants#\n * @static\n */\n this.BAD_ARGUMENT_ERROR = 'Invalid Arguments';\n\n /**\n * @constant {string} MISSING_CONFIG_ERROR Missing configuration parameters type of error\n * @memberof Constants#\n * @static\n */\n this.MISSING_CONFIG_ERROR = 'Missing config parameter(s)';\n\n /**\n * @constant {string} TRACK_SWITCH_MODE_ALWAYS_REPLACE used to clear the buffered data (prior to current playback position) after track switch. Default for audio\n * @memberof Constants#\n * @static\n */\n this.TRACK_SWITCH_MODE_ALWAYS_REPLACE = 'alwaysReplace';\n\n /**\n * @constant {string} TRACK_SWITCH_MODE_NEVER_REPLACE used to forbid clearing the buffered data (prior to current playback position) after track switch. Defers to fastSwitchEnabled for placement of new data. Default for video\n * @memberof Constants#\n * @static\n */\n this.TRACK_SWITCH_MODE_NEVER_REPLACE = 'neverReplace';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_FIRST_TRACK makes the player select the first track found in the manifest.\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_FIRST_TRACK = 'firstTrack';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_HIGHEST_BITRATE makes the player select the track with a highest bitrate. This mode is a default mode.\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_HIGHEST_BITRATE = 'highestBitrate';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY makes the player select the track with the lowest bitrate per pixel average.\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY = 'highestEfficiency';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_WIDEST_RANGE makes the player select the track with a widest range of bitrates.\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_WIDEST_RANGE = 'widestRange';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_WIDEST_RANGE makes the player select the track with the highest selectionPriority as defined in the manifest\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY = 'highestSelectionPriority';\n\n /**\n * @constant {string} CMCD_MODE_QUERY specifies to attach CMCD metrics as query parameters.\n * @memberof Constants#\n * @static\n */\n this.CMCD_MODE_QUERY = 'query';\n\n /**\n * @constant {string} CMCD_MODE_HEADER specifies to attach CMCD metrics as HTTP headers.\n * @memberof Constants#\n * @static\n */\n this.CMCD_MODE_HEADER = 'header';\n\n\n this.LOCATION = 'Location';\n this.INITIALIZE = 'initialize';\n this.TEXT_SHOWING = 'showing';\n this.TEXT_HIDDEN = 'hidden';\n this.CC1 = 'CC1';\n this.CC3 = 'CC3';\n this.UTF8 = 'utf-8';\n this.SCHEME_ID_URI = 'schemeIdUri';\n this.START_TIME = 'starttime';\n this.SERVICE_DESCRIPTION_DVB_LL_SCHEME = 'urn:dvb:dash:lowlatency:scope:2019';\n this.SUPPLEMENTAL_PROPERTY_DVB_LL_SCHEME = 'urn:dvb:dash:lowlatency:critical:2019';\n this.XML = 'XML';\n this.ARRAY_BUFFER = 'ArrayBuffer';\n this.DVB_REPORTING_URL = 'dvb:reportingUrl';\n this.DVB_PROBABILITY = 'dvb:probability';\n this.VIDEO_ELEMENT_READY_STATES = {\n HAVE_NOTHING: 0,\n HAVE_METADATA: 1,\n HAVE_CURRENT_DATA: 2,\n HAVE_FUTURE_DATA: 3,\n HAVE_ENOUGH_DATA: 4\n };\n this.FILE_LOADER_TYPES = {\n FETCH: 'fetch_loader',\n XHR: 'xhr_loader'\n }\n }\n\n constructor() {\n this.init();\n }\n}\n\nconst constants = new Constants();\nexport default constants;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Metrics Constants declaration\n * @class\n * @ignore\n */\nclass MetricsConstants {\n\n init () {\n this.TCP_CONNECTION = 'TcpList';\n this.HTTP_REQUEST = 'HttpList';\n this.TRACK_SWITCH = 'RepSwitchList';\n this.BUFFER_LEVEL = 'BufferLevel';\n this.BUFFER_LOADED = 'bufferLoaded';\n this.ABANDON_LOAD = 'abandonload';\n this.ALLOW_LOAD = 'allowload';\n this.BUFFER_EMPTY = 'bufferStalled';\n this.BUFFER_STATE = 'BufferState';\n this.DVR_INFO = 'DVRInfo';\n this.DROPPED_FRAMES = 'DroppedFrames';\n this.SCHEDULING_INFO = 'SchedulingInfo';\n this.REQUESTS_QUEUE = 'RequestsQueue';\n this.MANIFEST_UPDATE = 'ManifestUpdate';\n this.MANIFEST_UPDATE_STREAM_INFO = 'ManifestUpdatePeriodInfo';\n this.MANIFEST_UPDATE_TRACK_INFO = 'ManifestUpdateRepresentationInfo';\n this.PLAY_LIST = 'PlayList';\n this.DVB_ERRORS = 'DVBErrors';\n this.HTTP_REQUEST_DVB_REPORTING_TYPE = 'DVBReporting';\n }\n\n constructor() {\n this.init();\n }\n}\n\nlet constants = new MetricsConstants();\nexport default constants;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport DVBErrorsTranslator from './utils/DVBErrorsTranslator';\nimport MetricsReportingEvents from './MetricsReportingEvents';\nimport MetricsCollectionController from './controllers/MetricsCollectionController';\nimport MetricsHandlerFactory from './metrics/MetricsHandlerFactory';\nimport ReportingFactory from './reporting/ReportingFactory';\n\nfunction MetricsReporting() {\n\n let context = this.context;\n let instance,\n dvbErrorsTranslator;\n\n /**\n * Create a MetricsCollectionController, and a DVBErrorsTranslator\n * @param {Object} config - dependancies from owner\n * @return {MetricsCollectionController} Metrics Collection Controller\n */\n function createMetricsReporting(config) {\n dvbErrorsTranslator = DVBErrorsTranslator(context).getInstance({\n eventBus: config.eventBus,\n dashMetrics: config.dashMetrics,\n metricsConstants: config.metricsConstants,\n events: config.events\n });\n dvbErrorsTranslator.initialise();\n return MetricsCollectionController(context).create(config);\n }\n\n /**\n * Get the ReportingFactory to allow new reporters to be registered\n * @return {ReportingFactory} Reporting Factory\n */\n function getReportingFactory() {\n return ReportingFactory(context).getInstance();\n }\n\n /**\n * Get the MetricsHandlerFactory to allow new handlers to be registered\n * @return {MetricsHandlerFactory} Metrics Handler Factory\n */\n function getMetricsHandlerFactory() {\n return MetricsHandlerFactory(context).getInstance();\n }\n\n instance = {\n createMetricsReporting: createMetricsReporting,\n getReportingFactory: getReportingFactory,\n getMetricsHandlerFactory: getMetricsHandlerFactory\n };\n\n return instance;\n}\n\nMetricsReporting.__dashjs_factory_name = 'MetricsReporting';\nconst factory = dashjs.FactoryMaker.getClassFactory(MetricsReporting); /* jshint ignore:line */\nfactory.events = MetricsReportingEvents;\ndashjs.FactoryMaker.updateClassFactory(MetricsReporting.__dashjs_factory_name, factory); /* jshint ignore:line */\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from '../../core/events/EventsBase';\n\n/**\n * @class\n * @implements EventsBase\n */\nclass MetricsReportingEvents extends EventsBase {\n constructor () {\n super();\n\n this.METRICS_INITIALISATION_COMPLETE = 'internal_metricsReportingInitialized';\n this.BECAME_REPORTING_PLAYER = 'internal_becameReportingPlayer';\n\n /**\n * Triggered when CMCD data was generated for a HTTP request\n * @event MetricsReportingEvents#CMCD_DATA_GENERATED\n */\n this.CMCD_DATA_GENERATED = 'cmcdDataGenerated';\n }\n}\n\nlet metricsReportingEvents = new MetricsReportingEvents();\nexport default metricsReportingEvents;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MetricsController from './MetricsController';\nimport ManifestParsing from '../utils/ManifestParsing';\nimport MetricsReportingEvents from '../MetricsReportingEvents';\n\nfunction MetricsCollectionController(config) {\n\n config = config || {};\n let instance;\n let metricsControllers = {};\n let context = this.context;\n let eventBus = config.eventBus;\n const events = config.events;\n\n function update(e) {\n if (e.error) {\n return;\n }\n\n // start by assuming all existing controllers need removing\n let controllersToRemove = Object.keys(metricsControllers);\n\n const metrics = ManifestParsing(context).getInstance({\n adapter: config.adapter,\n constants: config.constants\n }).getMetrics(e.manifest);\n\n metrics.forEach(m => {\n const key = JSON.stringify(m);\n\n if (!metricsControllers.hasOwnProperty(key)) {\n try {\n let controller = MetricsController(context).create(config);\n controller.initialize(m);\n metricsControllers[key] = controller;\n } catch (e) {\n // fail quietly\n }\n } else {\n // we still need this controller - delete from removal list\n controllersToRemove.splice(key, 1);\n }\n });\n\n // now remove the unwanted controllers\n controllersToRemove.forEach(c => {\n metricsControllers[c].reset();\n delete metricsControllers[c];\n });\n\n eventBus.trigger(MetricsReportingEvents.METRICS_INITIALISATION_COMPLETE);\n }\n\n function resetMetricsControllers() {\n Object.keys(metricsControllers).forEach(key => {\n metricsControllers[key].reset();\n });\n\n metricsControllers = {};\n }\n\n function setup() {\n eventBus.on(events.MANIFEST_UPDATED, update, instance);\n eventBus.on(events.STREAM_TEARDOWN_COMPLETE, resetMetricsControllers, instance);\n }\n\n function reset() {\n eventBus.off(events.MANIFEST_UPDATED, update, instance);\n eventBus.off(events.STREAM_TEARDOWN_COMPLETE, resetMetricsControllers, instance);\n }\n\n instance = {\n reset: reset\n };\n\n setup();\n return instance;\n}\n\nMetricsCollectionController.__dashjs_factory_name = 'MetricsCollectionController';\nexport default dashjs.FactoryMaker.getClassFactory(MetricsCollectionController); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport RangeController from './RangeController';\nimport ReportingController from './ReportingController';\nimport MetricsHandlersController from './MetricsHandlersController';\n\nfunction MetricsController(config) {\n\n config = config || {};\n let metricsHandlersController,\n reportingController,\n rangeController,\n instance;\n\n let context = this.context;\n\n function initialize(metricsEntry) {\n try {\n rangeController = RangeController(context).create({\n mediaElement: config.mediaElement\n });\n\n rangeController.initialize(metricsEntry.Range);\n\n reportingController = ReportingController(context).create({\n debug: config.debug,\n metricsConstants: config.metricsConstants,\n mediaPlayerModel: config.mediaPlayerModel\n });\n\n reportingController.initialize(metricsEntry.Reporting, rangeController);\n\n metricsHandlersController = MetricsHandlersController(context).create({\n debug: config.debug,\n eventBus: config.eventBus,\n metricsConstants: config.metricsConstants,\n events: config.events\n });\n\n metricsHandlersController.initialize(metricsEntry.metrics, reportingController);\n } catch (e) {\n reset();\n throw e;\n }\n }\n\n function reset() {\n if (metricsHandlersController) {\n metricsHandlersController.reset();\n }\n\n if (reportingController) {\n reportingController.reset();\n }\n\n if (rangeController) {\n rangeController.reset();\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset\n };\n\n return instance;\n}\n\nMetricsController.__dashjs_factory_name = 'MetricsController';\nexport default dashjs.FactoryMaker.getClassFactory(MetricsController); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MetricsHandlerFactory from '../metrics/MetricsHandlerFactory';\n\nfunction MetricsHandlersController(config) {\n\n config = config || {};\n let handlers = [];\n\n let instance;\n const context = this.context;\n const eventBus = config.eventBus;\n const Events = config.events;\n\n let metricsHandlerFactory = MetricsHandlerFactory(context).getInstance({\n debug: config.debug,\n eventBus: config.eventBus,\n metricsConstants: config.metricsConstants\n });\n\n function handle(e) {\n handlers.forEach(handler => {\n handler.handleNewMetric(e.metric, e.value, e.mediaType);\n });\n }\n\n function initialize(metrics, reportingController) {\n metrics.split(',').forEach(\n (m, midx, ms) => {\n let handler;\n\n // there is a bug in ISO23009-1 where the metrics attribute\n // is a comma-separated list but HttpList key can contain a\n // comma enclosed by ().\n if ((m.indexOf('(') !== -1) && m.indexOf(')') === -1) {\n let nextm = ms[midx + 1];\n\n if (nextm &&\n (nextm.indexOf('(') === -1) &&\n (nextm.indexOf(')') !== -1)) {\n m += ',' + nextm;\n\n // delete the next metric so forEach does not visit.\n delete ms[midx + 1];\n }\n }\n\n handler = metricsHandlerFactory.create(\n m,\n reportingController\n );\n\n if (handler) {\n handlers.push(handler);\n }\n }\n );\n\n eventBus.on(\n Events.METRIC_ADDED,\n handle,\n instance\n );\n\n eventBus.on(\n Events.METRIC_UPDATED,\n handle,\n instance\n );\n }\n\n function reset() {\n eventBus.off(\n Events.METRIC_ADDED,\n handle,\n instance\n );\n\n eventBus.off(\n Events.METRIC_UPDATED,\n handle,\n instance\n );\n\n handlers.forEach(handler => handler.reset());\n\n handlers = [];\n }\n\n instance = {\n initialize: initialize,\n reset: reset\n };\n\n return instance;\n}\n\nMetricsHandlersController.__dashjs_factory_name = 'MetricsHandlersController';\nexport default dashjs.FactoryMaker.getClassFactory(MetricsHandlersController); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport CustomTimeRanges from '../../utils/CustomTimeRanges';\n\nfunction RangeController(config) {\n\n config = config || {};\n let useWallClockTime = false;\n let context = this.context;\n let instance,\n ranges;\n\n let mediaElement = config.mediaElement;\n\n function initialize(rs) {\n if (rs && rs.length) {\n rs.forEach(r => {\n let start = r.starttime;\n let end = start + r.duration;\n\n ranges.add(start, end);\n });\n\n useWallClockTime = !!rs[0]._useWallClockTime;\n }\n }\n\n function reset() {\n ranges.clear();\n }\n\n function setup() {\n ranges = CustomTimeRanges(context).create();\n }\n\n function isEnabled() {\n let numRanges = ranges.length;\n let time;\n\n if (!numRanges) {\n return true;\n }\n\n // When not present, DASH Metrics reporting is requested\n // for the whole duration of the content.\n time = useWallClockTime ?\n (new Date().getTime() / 1000) :\n mediaElement.currentTime;\n\n for (let i = 0; i < numRanges; i += 1) {\n let start = ranges.start(i);\n let end = ranges.end(i);\n\n if ((start <= time) && (time < end)) {\n return true;\n }\n }\n\n return false;\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n isEnabled: isEnabled\n };\n\n setup();\n\n return instance;\n}\n\nRangeController.__dashjs_factory_name = 'RangeController';\nexport default dashjs.FactoryMaker.getClassFactory(RangeController); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport ReportingFactory from '../reporting/ReportingFactory';\n\nfunction ReportingController(config) {\n\n let reporters = [];\n let instance;\n\n const reportingFactory = ReportingFactory(this.context).getInstance(config);\n\n function initialize(reporting, rangeController) {\n // \"if multiple Reporting elements are present, it is expected that\n // the client processes one of the recognized reporting schemes.\"\n // to ignore this, and support multiple Reporting per Metric,\n // simply change the 'some' below to 'forEach'\n reporting.some(r => {\n let reporter = reportingFactory.create(r, rangeController);\n\n if (reporter) {\n reporters.push(reporter);\n return true;\n }\n });\n }\n\n function reset() {\n reporters.forEach(r => r.reset());\n reporters = [];\n }\n\n function report(type, vos) {\n reporters.forEach(r => r.report(type, vos));\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n report: report\n };\n\n return instance;\n}\n\nReportingController.__dashjs_factory_name = 'ReportingController';\nexport default dashjs.FactoryMaker.getClassFactory(ReportingController); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport BufferLevel from './handlers/BufferLevelHandler';\nimport DVBErrors from './handlers/DVBErrorsHandler';\nimport HttpList from './handlers/HttpListHandler';\nimport GenericMetricHandler from './handlers/GenericMetricHandler';\n\nfunction MetricsHandlerFactory(config) {\n\n config = config || {};\n let instance;\n const logger = config.debug ? config.debug.getLogger(instance) : {};\n\n // group 1: key, [group 3: n [, group 5: type]]\n let keyRegex = /([a-zA-Z]*)(\\(([0-9]*)(\\,\\s*([a-zA-Z]*))?\\))?/;\n\n const context = this.context;\n let knownFactoryProducts = {\n BufferLevel: BufferLevel,\n DVBErrors: DVBErrors,\n HttpList: HttpList,\n PlayList: GenericMetricHandler,\n RepSwitchList: GenericMetricHandler,\n TcpList: GenericMetricHandler\n };\n\n function create(listType, reportingController) {\n var matches = listType.match(keyRegex);\n var handler;\n\n if (!matches) {\n return;\n }\n\n try {\n handler = knownFactoryProducts[matches[1]](context).create({\n eventBus: config.eventBus,\n metricsConstants: config.metricsConstants\n });\n\n handler.initialize(\n matches[1],\n reportingController,\n matches[3],\n matches[5]\n );\n } catch (e) {\n handler = null;\n logger.error(`MetricsHandlerFactory: Could not create handler for type ${matches[1]} with args ${matches[3]}, ${matches[5]} (${e.message})`);\n }\n\n return handler;\n }\n\n function register(key, handler) {\n knownFactoryProducts[key] = handler;\n }\n\n function unregister(key) {\n delete knownFactoryProducts[key];\n }\n\n instance = {\n create: create,\n register: register,\n unregister: unregister\n };\n\n return instance;\n}\n\nMetricsHandlerFactory.__dashjs_factory_name = 'MetricsHandlerFactory';\nexport default dashjs.FactoryMaker.getSingletonFactory(MetricsHandlerFactory); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport HandlerHelpers from '../../utils/HandlerHelpers';\n\nfunction BufferLevelHandler(config) {\n\n config = config || {};\n let instance,\n reportingController,\n n,\n name,\n interval,\n lastReportedTime;\n\n let context = this.context;\n let handlerHelpers = HandlerHelpers(context).getInstance();\n\n let storedVOs = [];\n\n const metricsConstants = config.metricsConstants;\n\n function getLowestBufferLevelVO() {\n try {\n return Object.keys(storedVOs).map(\n key => storedVOs[key]\n ).reduce(\n (a, b) => {\n return (a.level < b.level) ? a : b;\n }\n );\n } catch (e) {\n return;\n }\n }\n\n function intervalCallback() {\n let vo = getLowestBufferLevelVO();\n\n if (vo) {\n if (lastReportedTime !== vo.t) {\n lastReportedTime = vo.t;\n reportingController.report(name, vo);\n }\n }\n }\n\n function initialize(basename, rc, n_ms) {\n if (rc) {\n // this will throw if n is invalid, to be\n // caught by the initialize caller.\n n = handlerHelpers.validateN(n_ms);\n reportingController = rc;\n name = handlerHelpers.reconstructFullMetricName(basename, n_ms);\n interval = setInterval(intervalCallback, n);\n }\n }\n\n function reset() {\n clearInterval(interval);\n interval = null;\n n = 0;\n reportingController = null;\n lastReportedTime = null;\n }\n\n function handleNewMetric(metric, vo, type) {\n if (metric === metricsConstants.BUFFER_LEVEL) {\n storedVOs[type] = vo;\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n handleNewMetric: handleNewMetric\n };\n\n return instance;\n}\n\nBufferLevelHandler.__dashjs_factory_name = 'BufferLevelHandler';\nexport default dashjs.FactoryMaker.getClassFactory(BufferLevelHandler); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MetricsReportingEvents from '../../MetricsReportingEvents';\n\nfunction DVBErrorsHandler(config) {\n\n config = config || {};\n let instance,\n reportingController;\n\n let eventBus = config.eventBus;\n const metricsConstants = config.metricsConstants;\n\n function onInitialisationComplete() {\n // we only want to report this once per call to initialize\n eventBus.off(\n MetricsReportingEvents.METRICS_INITIALISATION_COMPLETE,\n onInitialisationComplete,\n this\n );\n\n // Note: A Player becoming a reporting Player is itself\n // something which is recorded by the DVBErrors metric.\n eventBus.trigger(MetricsReportingEvents.BECAME_REPORTING_PLAYER);\n }\n\n function initialize(unused, rc) {\n if (rc) {\n reportingController = rc;\n\n eventBus.on(\n MetricsReportingEvents.METRICS_INITIALISATION_COMPLETE,\n onInitialisationComplete,\n this\n );\n }\n }\n\n function reset() {\n reportingController = null;\n }\n\n function handleNewMetric(metric, vo) {\n // simply pass metric straight through\n if (metric === metricsConstants.DVB_ERRORS) {\n if (reportingController) {\n reportingController.report(metric, vo);\n }\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n handleNewMetric: handleNewMetric\n };\n\n return instance;\n}\n\nexport default dashjs.FactoryMaker.getClassFactory(DVBErrorsHandler); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @ignore\n */\nfunction GenericMetricHandler() {\n\n let instance,\n metricName,\n reportingController;\n\n function initialize(name, rc) {\n metricName = name;\n reportingController = rc;\n }\n\n function reset() {\n reportingController = null;\n metricName = undefined;\n }\n\n function handleNewMetric(metric, vo) {\n // simply pass metric straight through\n if (metric === metricName) {\n if (reportingController) {\n reportingController.report(metricName, vo);\n }\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n handleNewMetric: handleNewMetric\n };\n\n return instance;\n}\n\nGenericMetricHandler.__dashjs_factory_name = 'GenericMetricHandler';\nexport default dashjs.FactoryMaker.getClassFactory(GenericMetricHandler); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport HandlerHelpers from '../../utils/HandlerHelpers';\n\nfunction HttpListHandler(config) {\n\n config = config || {};\n let instance,\n reportingController,\n n,\n type,\n name,\n interval;\n\n let storedVos = [];\n\n let handlerHelpers = HandlerHelpers(this.context).getInstance();\n\n const metricsConstants = config.metricsConstants;\n\n function intervalCallback() {\n var vos = storedVos;\n\n if (vos.length) {\n if (reportingController) {\n reportingController.report(name, vos);\n }\n }\n\n storedVos = [];\n }\n\n function initialize(basename, rc, n_ms, requestType) {\n if (rc) {\n\n // this will throw if n is invalid, to be\n // caught by the initialize caller.\n n = handlerHelpers.validateN(n_ms);\n\n reportingController = rc;\n\n if (requestType && requestType.length) {\n type = requestType;\n }\n\n name = handlerHelpers.reconstructFullMetricName(\n basename,\n n_ms,\n requestType\n );\n\n interval = setInterval(intervalCallback, n);\n }\n }\n\n function reset() {\n clearInterval(interval);\n interval = null;\n n = null;\n type = null;\n storedVos = [];\n reportingController = null;\n }\n\n function handleNewMetric(metric, vo) {\n if (metric === metricsConstants.HTTP_REQUEST) {\n if (!type || (type === vo.type)) {\n storedVos.push(vo);\n }\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n handleNewMetric: handleNewMetric\n };\n\n return instance;\n}\n\nHttpListHandler.__dashjs_factory_name = 'HttpListHandler';\nexport default dashjs.FactoryMaker.getClassFactory(HttpListHandler); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport DVBReporting from './reporters/DVBReporting';\n\nfunction ReportingFactory(config) {\n config = config || {};\n\n const knownReportingSchemeIdUris = {\n 'urn:dvb:dash:reporting:2014': DVBReporting\n };\n\n const context = this.context;\n let instance;\n const logger = config.debug ? config.debug.getLogger(instance) : {};\n const metricsConstants = config.metricsConstants;\n const mediaPlayerModel = config.mediaPlayerModel || {};\n\n function create(entry, rangeController) {\n let reporting;\n\n try {\n reporting = knownReportingSchemeIdUris[entry.schemeIdUri](context).create({\n metricsConstants: metricsConstants,\n mediaPlayerModel: mediaPlayerModel\n });\n\n reporting.initialize(entry, rangeController);\n } catch (e) {\n reporting = null;\n logger.error(`ReportingFactory: could not create Reporting with schemeIdUri ${entry.schemeIdUri} (${e.message})`);\n }\n\n return reporting;\n }\n\n function register(schemeIdUri, moduleName) {\n knownReportingSchemeIdUris[schemeIdUri] = moduleName;\n }\n\n function unregister(schemeIdUri) {\n delete knownReportingSchemeIdUris[schemeIdUri];\n }\n\n instance = {\n create: create,\n register: register,\n unregister: unregister\n };\n\n return instance;\n}\n\nReportingFactory.__dashjs_factory_name = 'ReportingFactory';\nexport default dashjs.FactoryMaker.getSingletonFactory(ReportingFactory); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MetricSerialiser from '../../utils/MetricSerialiser';\nimport RNG from '../../utils/RNG';\nimport CustomParametersModel from '../../../models/CustomParametersModel';\n\nfunction DVBReporting(config) {\n config = config || {};\n let instance;\n\n let context = this.context;\n let metricSerialiser,\n customParametersModel,\n randomNumberGenerator,\n reportingPlayerStatusDecided,\n isReportingPlayer,\n reportingUrl,\n rangeController;\n\n let USE_DRAFT_DVB_SPEC = true;\n let allowPendingRequestsToCompleteOnReset = true;\n let pendingRequests = [];\n\n const metricsConstants = config.metricsConstants;\n\n function setup() {\n metricSerialiser = MetricSerialiser(context).getInstance();\n randomNumberGenerator = RNG(context).getInstance();\n customParametersModel = CustomParametersModel(context).getInstance();\n\n resetInitialSettings();\n }\n\n function doGetRequest(url, successCB, failureCB) {\n let req = new XMLHttpRequest();\n req.withCredentials = customParametersModel.getXHRWithCredentialsForType(metricsConstants.HTTP_REQUEST_DVB_REPORTING_TYPE);\n const oncomplete = function () {\n let reqIndex = pendingRequests.indexOf(req);\n\n if (reqIndex === -1) {\n return;\n } else {\n pendingRequests.splice(reqIndex, 1);\n }\n\n if ((req.status >= 200) && (req.status < 300)) {\n if (successCB) {\n successCB();\n }\n } else {\n if (failureCB) {\n failureCB();\n }\n }\n };\n\n pendingRequests.push(req);\n\n try {\n req.open('GET', url);\n req.onloadend = oncomplete;\n req.onerror = oncomplete;\n req.send();\n } catch (e) {\n req.onerror();\n }\n }\n\n function report(type, vos) {\n if (!Array.isArray(vos)) {\n vos = [vos];\n }\n\n // If the Player is not a reporting Player, then the Player shall\n // not report any errors.\n // ... In addition to any time restrictions specified by a Range\n // element within the Metrics element.\n if (isReportingPlayer && rangeController.isEnabled()) {\n\n // This reporting mechanism operates by creating one HTTP GET\n // request for every entry in the top level list of the metric.\n vos.forEach(function (vo) {\n let url = metricSerialiser.serialise(vo);\n\n // this has been proposed for errata\n if (USE_DRAFT_DVB_SPEC && (type !== metricsConstants.DVB_ERRORS)) {\n url = `metricname=${type}&${url}`;\n }\n\n // Take the value of the @reportingUrl attribute, append a\n // question mark ('?') character and then append the string\n // created in the previous step.\n url = `${reportingUrl}?${url}`;\n\n // Make an HTTP GET request to the URL contained within the\n // string created in the previous step.\n doGetRequest(url, null, function () {\n // If the Player is unable to make the report, for\n // example because the @reportingUrl is invalid, the\n // host cannot be reached, or an HTTP status code other\n // than one in the 200 series is received, the Player\n // shall cease being a reporting Player for the\n // duration of the MPD.\n isReportingPlayer = false;\n });\n });\n }\n }\n\n function initialize(entry, rc) {\n let probability;\n\n rangeController = rc;\n\n reportingUrl = entry.dvb_reportingUrl;\n\n // If a required attribute is missing, the Reporting descriptor may\n // be ignored by the Player\n if (!reportingUrl) {\n throw new Error(\n 'required parameter missing (dvb:reportingUrl)'\n );\n }\n\n // A Player's status, as a reporting Player or not, shall remain\n // static for the duration of the MPD, regardless of MPD updates.\n // (i.e. only calling reset (or failure) changes this state)\n if (!reportingPlayerStatusDecided) {\n probability = entry.dvb_probability;\n // TS 103 285 Clause 10.12.3.4\n // If the @probability attribute is set to 1000, it shall be a reporting Player.\n // If the @probability attribute is absent it will take the default value of 1000.\n // For any other value of the @probability attribute, it shall decide at random whether to be a\n // reporting Player, such that the probability of being one is @probability/1000.\n if (probability && (probability === 1000 || ((probability / 1000) >= randomNumberGenerator.random()))) {\n isReportingPlayer = true;\n }\n\n reportingPlayerStatusDecided = true;\n }\n }\n\n function resetInitialSettings() {\n reportingPlayerStatusDecided = false;\n isReportingPlayer = false;\n reportingUrl = null;\n rangeController = null;\n }\n\n function reset() {\n if (!allowPendingRequestsToCompleteOnReset) {\n pendingRequests.forEach(req => req.abort());\n pendingRequests = [];\n }\n\n resetInitialSettings();\n }\n\n instance = {\n report: report,\n initialize: initialize,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\n\nDVBReporting.__dashjs_factory_name = 'DVBReporting';\nexport default dashjs.FactoryMaker.getClassFactory(DVBReporting); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport DVBErrors from '../vo/DVBErrors';\nimport MetricsReportingEvents from '../MetricsReportingEvents';\n\nfunction DVBErrorsTranslator(config) {\n\n config = config || {};\n let instance,\n mpd;\n const eventBus = config.eventBus;\n const dashMetrics = config.dashMetrics;\n const metricsConstants = config.metricsConstants;\n //MediaPlayerEvents have been added to Events in MediaPlayer class\n const Events = config.events;\n\n function report(vo) {\n let o = new DVBErrors();\n\n if (!mpd) {\n return;\n }\n\n for (const key in vo) {\n if (vo.hasOwnProperty(key)) {\n o[key] = vo[key];\n }\n }\n\n if (!o.mpdurl) {\n o.mpdurl = mpd.originalUrl || mpd.url;\n }\n\n if (!o.terror) {\n o.terror = new Date();\n }\n\n dashMetrics.addDVBErrors(o);\n }\n\n function onManifestUpdate(e) {\n if (e.error) {\n return;\n }\n\n mpd = e.manifest;\n }\n\n function onServiceLocationChanged(e) {\n report({\n errorcode: DVBErrors.BASE_URL_CHANGED,\n servicelocation: e.entry\n });\n }\n\n function onBecameReporter() {\n report({\n errorcode: DVBErrors.BECAME_REPORTER\n });\n }\n\n function handleHttpMetric(vo) {\n if ((vo.responsecode === 0) || // connection failure - unknown\n (vo.responsecode == null) || // Generated on .catch() and when uninitialised\n (vo.responsecode >= 400) || // HTTP error status code\n (vo.responsecode < 100) || // unknown status codes\n (vo.responsecode >= 600)) { // unknown status codes\n report({\n errorcode: vo.responsecode || DVBErrors.CONNECTION_ERROR,\n url: vo.url,\n terror: vo.tresponse,\n servicelocation: vo._serviceLocation\n });\n }\n }\n\n function onMetricEvent(e) {\n switch (e.metric) {\n case metricsConstants.HTTP_REQUEST:\n handleHttpMetric(e.value);\n break;\n default:\n break;\n }\n }\n\n function onPlaybackError(e) {\n let reason = e.error ? e.error.code : 0;\n let errorcode;\n\n switch (reason) {\n case MediaError.MEDIA_ERR_NETWORK:\n errorcode = DVBErrors.CONNECTION_ERROR;\n break;\n case MediaError.MEDIA_ERR_DECODE:\n errorcode = DVBErrors.CORRUPT_MEDIA_OTHER;\n break;\n default:\n return;\n }\n\n report({\n errorcode: errorcode\n });\n }\n\n function initialise() {\n eventBus.on(Events.MANIFEST_UPDATED, onManifestUpdate, instance);\n eventBus.on(\n Events.SERVICE_LOCATION_BLACKLIST_CHANGED,\n onServiceLocationChanged,\n instance\n );\n eventBus.on(Events.METRIC_ADDED, onMetricEvent, instance);\n eventBus.on(Events.METRIC_UPDATED, onMetricEvent, instance);\n eventBus.on(Events.PLAYBACK_ERROR, onPlaybackError, instance);\n eventBus.on(\n MetricsReportingEvents.BECAME_REPORTING_PLAYER,\n onBecameReporter,\n instance\n );\n }\n\n function reset() {\n eventBus.off(Events.MANIFEST_UPDATED, onManifestUpdate, instance);\n eventBus.off(\n Events.SERVICE_LOCATION_BLACKLIST_CHANGED,\n onServiceLocationChanged,\n instance\n );\n eventBus.off(Events.METRIC_ADDED, onMetricEvent, instance);\n eventBus.off(Events.METRIC_UPDATED, onMetricEvent, instance);\n eventBus.off(Events.PLAYBACK_ERROR, onPlaybackError, instance);\n eventBus.off(\n MetricsReportingEvents.BECAME_REPORTING_PLAYER,\n onBecameReporter,\n instance\n );\n }\n\n instance = {\n initialise,\n reset\n };\n\n return instance;\n}\n\nDVBErrorsTranslator.__dashjs_factory_name = 'DVBErrorsTranslator';\nexport default dashjs.FactoryMaker.getSingletonFactory(DVBErrorsTranslator); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @ignore\n */\nfunction HandlerHelpers() {\n return {\n reconstructFullMetricName: function (key, n, type) {\n let mn = key;\n\n if (n) {\n mn += '(' + n;\n\n if (type && type.length) {\n mn += ',' + type;\n }\n\n mn += ')';\n }\n\n return mn;\n },\n\n validateN: function (n_ms) {\n if (!n_ms) {\n throw new Error('missing n');\n }\n\n if (isNaN(n_ms)) {\n throw new Error('n is NaN');\n }\n\n // n is a positive integer is defined to refer to the metric\n // in which the buffer level is recorded every n ms.\n if (n_ms < 0) {\n throw new Error('n must be positive');\n }\n\n return n_ms;\n }\n };\n}\n\nHandlerHelpers.__dashjs_factory_name = 'HandlerHelpers';\nexport default dashjs.FactoryMaker.getSingletonFactory(HandlerHelpers); /* jshint ignore:line */\n","import Metrics from '../vo/Metrics';\nimport Range from '../vo/Range';\nimport Reporting from '../vo/Reporting';\n\nfunction ManifestParsing (config) {\n config = config || {};\n let instance;\n let adapter = config.adapter;\n const constants = config.constants;\n\n function getMetricsRangeStartTime(manifest, dynamic, range) {\n let voPeriods,\n reportingStartTime;\n let presentationStartTime = 0;\n\n if (dynamic) {\n // For services with MPD@type='dynamic', the start time is\n // indicated in wall clock time by adding the value of this\n // attribute to the value of the MPD@availabilityStartTime\n // attribute.\n presentationStartTime = adapter.getAvailabilityStartTime(manifest) / 1000;\n } else {\n // For services with MPD@type='static', the start time is indicated\n // in Media Presentation time and is relative to the PeriodStart\n // time of the first Period in this MPD.\n voPeriods = adapter.getRegularPeriods(manifest);\n\n if (voPeriods.length) {\n presentationStartTime = voPeriods[0].start;\n }\n }\n\n // When not present, DASH Metrics collection is\n // requested from the beginning of content\n // consumption.\n reportingStartTime = presentationStartTime;\n\n if (range && range.hasOwnProperty(constants.START_TIME)) {\n reportingStartTime += range.starttime;\n }\n\n return reportingStartTime;\n }\n\n function getMetrics(manifest) {\n let metrics = [];\n\n if (manifest && manifest.Metrics_asArray) {\n manifest.Metrics_asArray.forEach(metric => {\n var metricEntry = new Metrics();\n var isDynamic = adapter.getIsDynamic(manifest);\n\n if (metric.hasOwnProperty('metrics')) {\n metricEntry.metrics = metric.metrics;\n } else {\n return;\n }\n\n if (metric.Range_asArray) {\n metric.Range_asArray.forEach(range => {\n var rangeEntry = new Range();\n\n rangeEntry.starttime =\n getMetricsRangeStartTime(manifest, isDynamic, range);\n\n if (range.hasOwnProperty('duration')) {\n rangeEntry.duration = range.duration;\n } else {\n // if not present, the value is identical to the\n // Media Presentation duration.\n rangeEntry.duration = adapter.getDuration(manifest);\n }\n\n rangeEntry._useWallClockTime = isDynamic;\n\n metricEntry.Range.push(rangeEntry);\n });\n }\n\n if (metric.Reporting_asArray) {\n metric.Reporting_asArray.forEach(reporting => {\n var reportingEntry = new Reporting();\n\n if (reporting.hasOwnProperty(constants.SCHEME_ID_URI)) {\n reportingEntry.schemeIdUri = reporting.schemeIdUri;\n } else {\n // Invalid Reporting. schemeIdUri must be set. Ignore.\n return;\n }\n\n if (reporting.hasOwnProperty('value')) {\n reportingEntry.value = reporting.value;\n }\n\n if (reporting.hasOwnProperty(constants.DVB_REPORTING_URL)) {\n reportingEntry.dvb_reportingUrl = reporting[constants.DVB_REPORTING_URL];\n }\n\n if (reporting.hasOwnProperty(constants.DVB_PROBABILITY)) {\n reportingEntry.dvb_probability = reporting[constants.DVB_PROBABILITY];\n }\n\n metricEntry.Reporting.push(reportingEntry);\n });\n } else {\n // Invalid Metrics. At least one reporting must be present. Ignore\n return;\n }\n\n metrics.push(metricEntry);\n });\n }\n\n return metrics;\n }\n\n instance = {\n getMetrics: getMetrics\n };\n\n return instance;\n}\n\nManifestParsing.__dashjs_factory_name = 'ManifestParsing';\nexport default dashjs.FactoryMaker.getSingletonFactory(ManifestParsing); /* jshint ignore:line */","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @ignore\n */\nfunction MetricSerialiser() {\n\n // For each entry in the top level list within the metric (in the case\n // of the DVBErrors metric each entry corresponds to an \"error event\"\n // described in clause 10.8.4) the Player shall:\n function serialise(metric) {\n let pairs = [];\n let obj = [];\n let key,\n value;\n\n // Take each (key, value) pair from the metric entry and create a\n // string consisting of the name of the key, followed by an equals\n // ('=') character, followed by the string representation of the\n // value. The string representation of the value is created based\n // on the type of the value following the instructions in Table 22.\n for (key in metric) {\n if (metric.hasOwnProperty(key) && (key.indexOf('_') !== 0)) {\n value = metric[key];\n\n // we want to ensure that keys still end up in the report\n // even if there is no value\n if ((value === undefined) || (value === null)) {\n value = '';\n }\n\n // DVB A168 10.12.4 Table 22\n if (Array.isArray(value)) {\n // if trace or similar is null, do not include in output\n if (!value.length) {\n continue;\n }\n\n obj = [];\n\n value.forEach(function (v) {\n let isBuiltIn = Object.prototype.toString.call(v).slice(8, -1) !== 'Object';\n\n obj.push(isBuiltIn ? v : serialise(v));\n });\n\n value = obj.map(encodeURIComponent).join(',');\n } else if (typeof value === 'string') {\n value = encodeURIComponent(value);\n } else if (value instanceof Date) {\n value = value.toISOString();\n } else if (typeof value === 'number') {\n value = Math.round(value);\n }\n\n pairs.push(key + '=' + value);\n }\n }\n\n // Concatenate the strings created in the previous step with an\n // ampersand ('&') character between each one.\n return pairs.join('&');\n }\n\n return {\n serialise: serialise\n };\n}\n\nMetricSerialiser.__dashjs_factory_name = 'MetricSerialiser';\nexport default dashjs.FactoryMaker.getSingletonFactory(MetricSerialiser); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @ignore\n */\nfunction RNG() {\n\n // check whether secure random numbers are available. if not, revert to\n // using Math.random\n let crypto = window.crypto || window.msCrypto;\n\n // could just as easily use any other array type by changing line below\n let ArrayType = Uint32Array;\n let MAX_VALUE = Math.pow(2, ArrayType.BYTES_PER_ELEMENT * 8) - 1;\n\n // currently there is only one client for this code, and that only uses\n // a single random number per initialisation. may want to increase this\n // number if more consumers in the future\n let NUM_RANDOM_NUMBERS = 10;\n\n let randomNumbers,\n index,\n instance;\n\n function initialise() {\n if (crypto) {\n if (!randomNumbers) {\n randomNumbers = new ArrayType(NUM_RANDOM_NUMBERS);\n }\n crypto.getRandomValues(randomNumbers);\n index = 0;\n }\n }\n\n function rand(min, max) {\n let r;\n\n if (!min) {\n min = 0;\n }\n\n if (!max) {\n max = 1;\n }\n\n if (crypto) {\n if (index === randomNumbers.length) {\n initialise();\n }\n\n r = randomNumbers[index] / MAX_VALUE;\n index += 1;\n } else {\n r = Math.random();\n }\n\n return (r * (max - min)) + min;\n }\n\n instance = {\n random: rand\n };\n\n initialise();\n\n return instance;\n}\n\nRNG.__dashjs_factory_name = 'RNG';\nexport default dashjs.FactoryMaker.getSingletonFactory(RNG); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass DVBErrors {\n constructor() {\n this.mpdurl = null;\n // String - Absolute URL from which the MPD was originally\n // retrieved (MPD updates will not change this value).\n\n this.errorcode = null;\n // String - The value of errorcode depends upon the type\n // of error being reported. For an error listed in the\n // ErrorType column below the value is as described in the\n // Value column.\n //\n // ErrorType Value\n // --------- -----\n // HTTP error status code HTTP status code\n // Unknown HTTP status code HTTP status code\n // SSL connection failed \"SSL\" followed by SSL alert value\n // DNS resolution failed \"C00\"\n // Host unreachable \"C01\"\n // Connection refused \"C02\"\n // Connection error – Not otherwise specified \"C03\"\n // Corrupt media – ISO BMFF container cannot be parsed \"M00\"\n // Corrupt media – Not otherwise specified \"M01\"\n // Changing Base URL in use due to errors \"F00\"\n // Becoming an error reporting Player \"S00\"\n\n this.terror = null;\n // Real-Time - Date and time at which error occurred in UTC,\n // formatted as a combined date and time according to ISO 8601.\n\n this.url = null;\n // String - Absolute URL from which data was being requested\n // when this error occurred. If the error report is in relation\n // to corrupt media or changing BaseURL, this may be a null\n // string if the URL from which the media was obtained or\n // which led to the change of BaseURL is no longer known.\n\n this.ipaddress = null;\n // String - IP Address which the host name in \"url\" resolved to.\n // If the error report is in relation to corrupt media or\n // changing BaseURL, this may be a null string if the URL\n // from which the media was obtained or which led to the\n // change of BaseURL is no longer known.\n\n this.servicelocation = null;\n // String - The value of the serviceLocation field in the\n // BaseURL being used. In the event of this report indicating\n // a change of BaseURL this is the value from the BaseURL\n // being moved from.\n }\n}\n\nDVBErrors.SSL_CONNECTION_FAILED_PREFIX = 'SSL';\nDVBErrors.DNS_RESOLUTION_FAILED = 'C00';\nDVBErrors.HOST_UNREACHABLE = 'C01';\nDVBErrors.CONNECTION_REFUSED = 'C02';\nDVBErrors.CONNECTION_ERROR = 'C03';\nDVBErrors.CORRUPT_MEDIA_ISOBMFF = 'M00';\nDVBErrors.CORRUPT_MEDIA_OTHER = 'M01';\nDVBErrors.BASE_URL_CHANGED = 'F00';\nDVBErrors.BECAME_REPORTER = 'S00';\n\nexport default DVBErrors;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass Metrics {\n constructor() {\n\n this.metrics = '';\n this.Range = [];\n this.Reporting = [];\n }\n}\n\nexport default Metrics;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass Range {\n constructor() {\n\n // as defined in ISO23009-1\n this.starttime = 0;\n this.duration = Infinity;\n\n // for internal use\n this._useWallClockTime = false;\n }\n}\n\nexport default Range;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\n\n// TS 103 285 Clause 10.12.3.3\nconst DEFAULT_DVB_PROBABILITY = 1000;\n\nclass Reporting {\n constructor() {\n\n this.schemeIdUri = '';\n this.value = '';\n\n // DVB Extensions\n this.dvb_reportingUrl = '';\n this.dvb_probability = DEFAULT_DVB_PROBABILITY;\n }\n}\n\nexport default Reporting;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport UTCTiming from '../../dash/vo/UTCTiming';\nimport FactoryMaker from '../../core/FactoryMaker';\nimport Settings from '../../core/Settings';\nimport {checkParameterType} from '../utils/SupervisorTools';\nimport ABRRulesCollection from '../rules/abr/ABRRulesCollection';\nimport Constants from '../constants/Constants';\n\nconst DEFAULT_XHR_WITH_CREDENTIALS = false;\n\nfunction CustomParametersModel() {\n\n let instance,\n utcTimingSources,\n xhrWithCredentials,\n licenseRequestFilters,\n licenseResponseFilters,\n customCapabilitiesFilters,\n customInitialTrackSelectionFunction,\n customAbrRules;\n\n const context = this.context;\n const settings = Settings(context).getInstance();\n\n function setup() {\n xhrWithCredentials = {\n default: DEFAULT_XHR_WITH_CREDENTIALS\n };\n _resetInitialSettings();\n }\n\n function _resetInitialSettings() {\n licenseRequestFilters = [];\n licenseResponseFilters = [];\n customCapabilitiesFilters = [];\n customAbrRules = [];\n customInitialTrackSelectionFunction = null;\n utcTimingSources = [];\n }\n\n\n function reset() {\n _resetInitialSettings();\n }\n\n function setConfig() {\n\n }\n\n /**\n * Registers a custom initial track selection function. Only one function is allowed. Calling this method will overwrite a potentially existing function.\n * @param {function} customFunc - the custom function that returns the initial track\n */\n function setCustomInitialTrackSelectionFunction(customFunc) {\n customInitialTrackSelectionFunction = customFunc;\n }\n\n /**\n * Resets the custom initial track selection\n */\n function resetCustomInitialTrackSelectionFunction() {\n customInitialTrackSelectionFunction = null;\n }\n\n /**\n * Returns the initial track selection function\n * @return {function}\n */\n function getCustomInitialTrackSelectionFunction() {\n return customInitialTrackSelectionFunction;\n }\n\n /**\n * Returns all license request filters\n * @return {array}\n */\n function getLicenseRequestFilters() {\n return licenseRequestFilters;\n }\n\n /**\n * Returns all license response filters\n * @return {array}\n */\n function getLicenseResponseFilters() {\n return licenseResponseFilters;\n }\n\n /**\n * Registers a license request filter. This enables application to manipulate/overwrite any request parameter and/or request data.\n * The provided callback function shall return a promise that shall be resolved once the filter process is completed.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the license request filter callback\n */\n function registerLicenseRequestFilter(filter) {\n licenseRequestFilters.push(filter);\n }\n\n /**\n * Registers a license response filter. This enables application to manipulate/overwrite the response data\n * The provided callback function shall return a promise that shall be resolved once the filter process is completed.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the license response filter callback\n */\n function registerLicenseResponseFilter(filter) {\n licenseResponseFilters.push(filter);\n }\n\n /**\n * Unregisters a license request filter.\n * @param {function} filter - the license request filter callback\n */\n function unregisterLicenseRequestFilter(filter) {\n _unregisterFilter(licenseRequestFilters, filter);\n }\n\n /**\n * Unregisters a license response filter.\n * @param {function} filter - the license response filter callback\n */\n function unregisterLicenseResponseFilter(filter) {\n _unregisterFilter(licenseResponseFilters, filter);\n }\n\n /**\n * Returns all custom capabilities filter\n * @return {array}\n */\n function getCustomCapabilitiesFilters() {\n return customCapabilitiesFilters;\n }\n\n /**\n * Registers a custom capabilities filter. This enables application to filter representations to use.\n * The provided callback function shall return a boolean based on whether or not to use the representation.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the custom capabilities filter callback\n */\n function registerCustomCapabilitiesFilter(filter) {\n customCapabilitiesFilters.push(filter);\n }\n\n /**\n * Unregisters a custom capabilities filter.\n * @param {function} filter - the custom capabilities filter callback\n */\n function unregisterCustomCapabilitiesFilter(filter) {\n _unregisterFilter(customCapabilitiesFilters, filter);\n }\n\n /**\n * Unregister a filter from the list of existing filers.\n * @param {array} filters\n * @param {function} filter\n * @private\n */\n function _unregisterFilter(filters, filter) {\n let index = -1;\n filters.some((item, i) => {\n if (item === filter) {\n index = i;\n return true;\n }\n });\n if (index < 0) return;\n filters.splice(index, 1);\n }\n\n /**\n * Iterate through the list of custom ABR rules and find the right rule by name\n * @param {string} rulename\n * @return {number} rule number\n */\n function _findAbrCustomRuleIndex(rulename) {\n let i;\n for (i = 0; i < customAbrRules.length; i++) {\n if (customAbrRules[i].rulename === rulename) {\n return i;\n }\n }\n return -1;\n }\n\n /**\n * Add a custom ABR Rule\n * Rule will be apply on next stream if a stream is being played\n *\n * @param {string} type - rule type (one of ['qualitySwitchRules','abandonFragmentRules'])\n * @param {string} rulename - name of rule (used to identify custom rule). If one rule of same name has been added, then existing rule will be updated\n * @param {object} rule - the rule object instance\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with invalid arguments.\n */\n function addAbrCustomRule(type, rulename, rule) {\n if (typeof type !== 'string' || (type !== ABRRulesCollection.ABANDON_FRAGMENT_RULES && type !== ABRRulesCollection.QUALITY_SWITCH_RULES) ||\n typeof rulename !== 'string') {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n let index = _findAbrCustomRuleIndex(rulename);\n if (index === -1) {\n // add rule\n customAbrRules.push({\n type: type,\n rulename: rulename,\n rule: rule\n });\n } else {\n // update rule\n customAbrRules[index].type = type;\n customAbrRules[index].rule = rule;\n }\n }\n\n /**\n * Remove a custom ABR Rule\n *\n * @param {string} rulename - name of the rule to be removed\n */\n function removeAbrCustomRule(rulename) {\n if (rulename) {\n let index = _findAbrCustomRuleIndex(rulename);\n //if no rulename custom rule has been found, do nothing\n if (index !== -1) {\n // remove rule\n customAbrRules.splice(index, 1);\n }\n } else {\n //if no rulename is defined, remove all ABR custome rules\n customAbrRules = [];\n }\n }\n\n /**\n * Remove all custom rules\n */\n function removeAllAbrCustomRule() {\n customAbrRules = [];\n }\n\n /**\n * Return all ABR custom rules\n * @return {array}\n */\n function getAbrCustomRules() {\n return customAbrRules;\n }\n\n\n /**\n * Add a UTC timing source at the top of the list\n * @param {string} schemeIdUri\n * @param {string} value\n */\n function addUTCTimingSource(schemeIdUri, value) {\n removeUTCTimingSource(schemeIdUri, value); //check if it already exists and remove if so.\n let vo = new UTCTiming();\n vo.schemeIdUri = schemeIdUri;\n vo.value = value;\n utcTimingSources.push(vo);\n }\n\n /**\n * Return all UTC timing sources\n * @return {array}\n */\n function getUTCTimingSources() {\n return utcTimingSources;\n }\n\n /**\n * Remove a specific timing source from the array\n * @param {string} schemeIdUri\n * @param {string} value\n */\n function removeUTCTimingSource(schemeIdUri, value) {\n checkParameterType(schemeIdUri, 'string');\n checkParameterType(value, 'string');\n utcTimingSources.forEach(function (obj, idx) {\n if (obj.schemeIdUri === schemeIdUri && obj.value === value) {\n utcTimingSources.splice(idx, 1);\n }\n });\n }\n\n /**\n * Remove all timing sources\n */\n function clearDefaultUTCTimingSources() {\n utcTimingSources = [];\n }\n\n /**\n * Add the default timing source to the list\n */\n function restoreDefaultUTCTimingSources() {\n let defaultUtcTimingSource = settings.get().streaming.utcSynchronization.defaultTimingSource;\n addUTCTimingSource(defaultUtcTimingSource.scheme, defaultUtcTimingSource.value);\n }\n\n function setXHRWithCredentialsForType(type, value) {\n if (!type) {\n Object.keys(xhrWithCredentials).forEach(key => {\n setXHRWithCredentialsForType(key, value);\n });\n } else {\n xhrWithCredentials[type] = !!value;\n }\n }\n\n function getXHRWithCredentialsForType(type) {\n const useCreds = xhrWithCredentials[type];\n\n return useCreds === undefined ? xhrWithCredentials.default : useCreds;\n }\n\n instance = {\n getCustomInitialTrackSelectionFunction,\n setCustomInitialTrackSelectionFunction,\n resetCustomInitialTrackSelectionFunction,\n getLicenseResponseFilters,\n getLicenseRequestFilters,\n getCustomCapabilitiesFilters,\n registerCustomCapabilitiesFilter,\n registerLicenseResponseFilter,\n registerLicenseRequestFilter,\n unregisterCustomCapabilitiesFilter,\n unregisterLicenseResponseFilter,\n unregisterLicenseRequestFilter,\n addAbrCustomRule,\n removeAllAbrCustomRule,\n removeAbrCustomRule,\n getAbrCustomRules,\n addUTCTimingSource,\n removeUTCTimingSource,\n getUTCTimingSources,\n clearDefaultUTCTimingSources,\n restoreDefaultUTCTimingSources,\n setXHRWithCredentialsForType,\n getXHRWithCredentialsForType,\n setConfig,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nCustomParametersModel.__dashjs_factory_name = 'CustomParametersModel';\nexport default FactoryMaker.getSingletonFactory(CustomParametersModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\n\nconst NO_CHANGE = -1;\nconst PRIORITY = {\n DEFAULT: 0.5,\n STRONG: 1,\n WEAK: 0\n};\n\nfunction SwitchRequest(q, r, p) {\n //TODO refactor all the calls to this to use config to be like everything else.\n let instance,\n quality,\n priority,\n reason;\n\n // check priority value\n function getPriority(p) {\n let ret = PRIORITY.DEFAULT;\n\n // check that p is one of declared priority value\n if (p === PRIORITY.DEFAULT || p === PRIORITY.STRONG || p === PRIORITY.WEAK) {\n ret = p;\n }\n return ret;\n }\n\n // init attributes\n quality = (q === undefined) ? NO_CHANGE : q;\n priority = getPriority(p);\n reason = (r === undefined) ? null : r;\n\n instance = {\n quality: quality,\n reason: reason,\n priority: priority\n };\n\n return instance;\n}\n\nSwitchRequest.__dashjs_factory_name = 'SwitchRequest';\nconst factory = FactoryMaker.getClassFactory(SwitchRequest);\nfactory.NO_CHANGE = NO_CHANGE;\nfactory.PRIORITY = PRIORITY;\nFactoryMaker.updateClassFactory(SwitchRequest.__dashjs_factory_name, factory);\n\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ThroughputRule from './ThroughputRule';\nimport InsufficientBufferRule from './InsufficientBufferRule';\nimport AbandonRequestsRule from './AbandonRequestsRule';\nimport DroppedFramesRule from './DroppedFramesRule';\nimport SwitchHistoryRule from './SwitchHistoryRule';\nimport BolaRule from './BolaRule';\nimport L2ARule from './L2ARule.js';\nimport LoLPRule from './lolp/LoLpRule.js';\nimport FactoryMaker from '../../../core/FactoryMaker';\nimport SwitchRequest from '../SwitchRequest';\nimport Constants from '../../constants/Constants';\n\nconst QUALITY_SWITCH_RULES = 'qualitySwitchRules';\nconst ABANDON_FRAGMENT_RULES = 'abandonFragmentRules';\n\n\nfunction ABRRulesCollection(config) {\n\n config = config || {};\n const context = this.context;\n\n const mediaPlayerModel = config.mediaPlayerModel;\n const customParametersModel = config.customParametersModel;\n const dashMetrics = config.dashMetrics;\n const settings = config.settings;\n\n let instance,\n qualitySwitchRules,\n abandonFragmentRules;\n\n function initialize() {\n qualitySwitchRules = [];\n abandonFragmentRules = [];\n\n if (settings.get().streaming.abr.useDefaultABRRules) {\n\n // If L2A is used we only need this one rule\n if (settings.get().streaming.abr.ABRStrategy === Constants.ABR_STRATEGY_L2A) {\n qualitySwitchRules.push(\n L2ARule(context).create({\n dashMetrics: dashMetrics,\n settings: settings\n })\n );\n }\n // If LoLP is used we only need this one rule\n else if (settings.get().streaming.abr.ABRStrategy === Constants.ABR_STRATEGY_LoLP) {\n qualitySwitchRules.push(\n LoLPRule(context).create({\n dashMetrics: dashMetrics\n })\n );\n } else {\n // Only one of BolaRule and ThroughputRule will give a switchRequest.quality !== SwitchRequest.NO_CHANGE.\n // This is controlled by useBufferOccupancyABR mechanism in AbrController.\n qualitySwitchRules.push(\n BolaRule(context).create({\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n settings: settings\n })\n );\n\n qualitySwitchRules.push(\n ThroughputRule(context).create({\n dashMetrics: dashMetrics\n })\n );\n\n if (settings.get().streaming.abr.additionalAbrRules.insufficientBufferRule) {\n qualitySwitchRules.push(\n InsufficientBufferRule(context).create({\n dashMetrics: dashMetrics,\n settings\n })\n );\n }\n\n if (settings.get().streaming.abr.additionalAbrRules.switchHistoryRule) {\n qualitySwitchRules.push(\n SwitchHistoryRule(context).create()\n );\n }\n\n if (settings.get().streaming.abr.additionalAbrRules.droppedFramesRule) {\n qualitySwitchRules.push(\n DroppedFramesRule(context).create()\n );\n }\n\n if (settings.get().streaming.abr.additionalAbrRules.abandonRequestsRule) {\n abandonFragmentRules.push(\n AbandonRequestsRule(context).create({\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n settings: settings\n })\n );\n }\n }\n }\n\n // add custom ABR rules if any\n const customRules = customParametersModel.getAbrCustomRules();\n customRules.forEach(function (rule) {\n if (rule.type === QUALITY_SWITCH_RULES) {\n qualitySwitchRules.push(rule.rule(context).create());\n }\n\n if (rule.type === ABANDON_FRAGMENT_RULES) {\n abandonFragmentRules.push(rule.rule(context).create());\n }\n });\n }\n\n function _getRulesWithChange(srArray) {\n return srArray.filter(sr => sr.quality > SwitchRequest.NO_CHANGE);\n }\n\n /**\n *\n * @param {array} srArray\n * @return {object} SwitchRequest\n */\n function getMinSwitchRequest(srArray) {\n const values = {};\n let newSwitchReq = null;\n let i,\n len,\n req,\n quality,\n reason;\n\n if (srArray.length === 0) {\n return;\n }\n\n values[SwitchRequest.PRIORITY.STRONG] = { quality: SwitchRequest.NO_CHANGE, reason: null };\n values[SwitchRequest.PRIORITY.WEAK] = { quality: SwitchRequest.NO_CHANGE, reason: null };\n values[SwitchRequest.PRIORITY.DEFAULT] = { quality: SwitchRequest.NO_CHANGE, reason: null };\n\n for (i = 0, len = srArray.length; i < len; i += 1) {\n req = srArray[i];\n if (req.quality !== SwitchRequest.NO_CHANGE) {\n // We only use the new quality in case it is lower than the already saved one or if no new quality has been selected for the respective priority\n if (values[req.priority].quality === SwitchRequest.NO_CHANGE || values[req.priority].quality > req.quality) {\n values[req.priority].quality = req.quality;\n values[req.priority].reason = req.reason || null;\n }\n }\n }\n\n if (values[SwitchRequest.PRIORITY.WEAK].quality !== SwitchRequest.NO_CHANGE) {\n newSwitchReq = values[SwitchRequest.PRIORITY.WEAK];\n }\n\n if (values[SwitchRequest.PRIORITY.DEFAULT].quality !== SwitchRequest.NO_CHANGE) {\n newSwitchReq = values[SwitchRequest.PRIORITY.DEFAULT];\n }\n\n if (values[SwitchRequest.PRIORITY.STRONG].quality !== SwitchRequest.NO_CHANGE) {\n newSwitchReq = values[SwitchRequest.PRIORITY.STRONG];\n }\n\n if (newSwitchReq) {\n quality = newSwitchReq.quality;\n reason = newSwitchReq.reason;\n }\n\n return SwitchRequest(context).create(quality, reason);\n }\n\n function getMaxQuality(rulesContext) {\n const switchRequestArray = qualitySwitchRules.map(rule => rule.getMaxIndex(rulesContext));\n const activeRules = _getRulesWithChange(switchRequestArray);\n const maxQuality = getMinSwitchRequest(activeRules);\n\n return maxQuality || SwitchRequest(context).create();\n }\n\n function shouldAbandonFragment(rulesContext, streamId) {\n const abandonRequestArray = abandonFragmentRules.map(rule => rule.shouldAbandon(rulesContext, streamId));\n const activeRules = _getRulesWithChange(abandonRequestArray);\n const shouldAbandon = getMinSwitchRequest(activeRules);\n\n return shouldAbandon || SwitchRequest(context).create();\n }\n\n function reset() {\n [qualitySwitchRules, abandonFragmentRules].forEach(rules => {\n if (rules && rules.length) {\n rules.forEach(rule => rule.reset && rule.reset());\n }\n });\n qualitySwitchRules = [];\n abandonFragmentRules = [];\n }\n\n function getQualitySwitchRules() {\n return qualitySwitchRules;\n }\n\n instance = {\n initialize,\n reset,\n getMaxQuality,\n getMinSwitchRequest,\n shouldAbandonFragment,\n getQualitySwitchRules\n };\n\n return instance;\n}\n\nABRRulesCollection.__dashjs_factory_name = 'ABRRulesCollection';\nconst factory = FactoryMaker.getClassFactory(ABRRulesCollection);\nfactory.QUALITY_SWITCH_RULES = QUALITY_SWITCH_RULES;\nfactory.ABANDON_FRAGMENT_RULES = ABANDON_FRAGMENT_RULES;\nFactoryMaker.updateSingletonFactory(ABRRulesCollection.__dashjs_factory_name, factory);\n\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport SwitchRequest from '../SwitchRequest';\nimport FactoryMaker from '../../../core/FactoryMaker';\nimport Debug from '../../../core/Debug';\n\nfunction AbandonRequestsRule(config) {\n\n config = config || {};\n const ABANDON_MULTIPLIER = 1.8;\n const GRACE_TIME_THRESHOLD = 500;\n const MIN_LENGTH_TO_AVERAGE = 5;\n\n const context = this.context;\n const mediaPlayerModel = config.mediaPlayerModel;\n const dashMetrics = config.dashMetrics;\n const settings = config.settings;\n\n let instance,\n logger,\n fragmentDict,\n abandonDict,\n throughputArray;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n reset();\n }\n\n function setFragmentRequestDict(type, id) {\n fragmentDict[type] = fragmentDict[type] || {};\n fragmentDict[type][id] = fragmentDict[type][id] || {};\n }\n\n function storeLastRequestThroughputByType(type, throughput) {\n throughputArray[type] = throughputArray[type] || [];\n throughputArray[type].push(throughput);\n }\n\n function shouldAbandon(rulesContext) {\n const switchRequest = SwitchRequest(context).create(SwitchRequest.NO_CHANGE, {name: AbandonRequestsRule.__dashjs_factory_name});\n\n if (!rulesContext || !rulesContext.hasOwnProperty('getMediaInfo') || !rulesContext.hasOwnProperty('getMediaType') || !rulesContext.hasOwnProperty('getCurrentRequest') ||\n !rulesContext.hasOwnProperty('getRepresentationInfo') || !rulesContext.hasOwnProperty('getAbrController')) {\n return switchRequest;\n }\n\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n const streamInfo = rulesContext.getStreamInfo();\n const streamId = streamInfo ? streamInfo.id : null;\n const req = rulesContext.getCurrentRequest();\n\n if (!isNaN(req.index)) {\n setFragmentRequestDict(mediaType, req.index);\n\n const stableBufferTime = mediaPlayerModel.getStableBufferTime();\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n if ( bufferLevel > stableBufferTime ) {\n return switchRequest;\n }\n\n const fragmentInfo = fragmentDict[mediaType][req.index];\n if (fragmentInfo === null || req.firstByteDate === null || abandonDict.hasOwnProperty(fragmentInfo.id)) {\n return switchRequest;\n }\n\n //setup some init info based on first progress event\n if (fragmentInfo.firstByteTime === undefined) {\n throughputArray[mediaType] = [];\n fragmentInfo.firstByteTime = req.firstByteDate.getTime();\n fragmentInfo.segmentDuration = req.duration;\n fragmentInfo.bytesTotal = req.bytesTotal;\n fragmentInfo.id = req.index;\n }\n fragmentInfo.bytesLoaded = req.bytesLoaded;\n fragmentInfo.elapsedTime = new Date().getTime() - fragmentInfo.firstByteTime;\n\n if (fragmentInfo.bytesLoaded > 0 && fragmentInfo.elapsedTime > 0) {\n storeLastRequestThroughputByType(mediaType, Math.round(fragmentInfo.bytesLoaded * 8 / fragmentInfo.elapsedTime));\n }\n\n if (throughputArray[mediaType].length >= MIN_LENGTH_TO_AVERAGE &&\n fragmentInfo.elapsedTime > GRACE_TIME_THRESHOLD &&\n fragmentInfo.bytesLoaded < fragmentInfo.bytesTotal) {\n\n const totalSampledValue = throughputArray[mediaType].reduce((a, b) => a + b, 0);\n fragmentInfo.measuredBandwidthInKbps = Math.round(totalSampledValue / throughputArray[mediaType].length);\n fragmentInfo.estimatedTimeOfDownload = +((fragmentInfo.bytesTotal * 8 / fragmentInfo.measuredBandwidthInKbps) / 1000).toFixed(2);\n\n if (fragmentInfo.estimatedTimeOfDownload < fragmentInfo.segmentDuration * ABANDON_MULTIPLIER || rulesContext.getRepresentationInfo().quality === 0 ) {\n return switchRequest;\n } else if (!abandonDict.hasOwnProperty(fragmentInfo.id)) {\n\n const abrController = rulesContext.getAbrController();\n const bytesRemaining = fragmentInfo.bytesTotal - fragmentInfo.bytesLoaded;\n const bitrateList = abrController.getBitrateList(mediaInfo);\n const quality = abrController.getQualityForBitrate(mediaInfo, fragmentInfo.measuredBandwidthInKbps * settings.get().streaming.abr.bandwidthSafetyFactor, streamId);\n const minQuality = abrController.getMinAllowedIndexFor(mediaType, streamId);\n const newQuality = (minQuality !== undefined) ? Math.max(minQuality, quality) : quality;\n const estimateOtherBytesTotal = fragmentInfo.bytesTotal * bitrateList[newQuality].bitrate / bitrateList[abrController.getQualityFor(mediaType, streamId)].bitrate;\n\n if (bytesRemaining > estimateOtherBytesTotal) {\n switchRequest.quality = newQuality;\n switchRequest.reason.throughput = fragmentInfo.measuredBandwidthInKbps;\n switchRequest.reason.fragmentID = fragmentInfo.id;\n abandonDict[fragmentInfo.id] = fragmentInfo;\n logger.debug('[' + mediaType + '] frag id',fragmentInfo.id,' is asking to abandon and switch to quality to ', newQuality, ' measured bandwidth was', fragmentInfo.measuredBandwidthInKbps);\n delete fragmentDict[mediaType][fragmentInfo.id];\n }\n }\n } else if (fragmentInfo.bytesLoaded === fragmentInfo.bytesTotal) {\n delete fragmentDict[mediaType][fragmentInfo.id];\n }\n }\n\n return switchRequest;\n }\n\n function reset() {\n fragmentDict = {};\n abandonDict = {};\n throughputArray = [];\n }\n\n instance = {\n shouldAbandon: shouldAbandon,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\n\nAbandonRequestsRule.__dashjs_factory_name = 'AbandonRequestsRule';\nexport default FactoryMaker.getClassFactory(AbandonRequestsRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2016, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n// For a description of the BOLA adaptive bitrate (ABR) algorithm, see http://arxiv.org/abs/1601.06748\n\nimport MetricsConstants from '../../constants/MetricsConstants';\nimport SwitchRequest from '../SwitchRequest';\nimport FactoryMaker from '../../../core/FactoryMaker';\nimport { HTTPRequest } from '../../vo/metrics/HTTPRequest';\nimport EventBus from '../../../core/EventBus';\nimport Events from '../../../core/events/Events';\nimport Debug from '../../../core/Debug';\nimport MediaPlayerEvents from '../../MediaPlayerEvents';\nimport Constants from '../../constants/Constants';\n\n// BOLA_STATE_ONE_BITRATE : If there is only one bitrate (or initialization failed), always return NO_CHANGE.\n// BOLA_STATE_STARTUP : Set placeholder buffer such that we download fragments at most recently measured throughput.\n// BOLA_STATE_STEADY : Buffer primed, we switch to steady operation.\n// TODO: add BOLA_STATE_SEEK and tune BOLA behavior on seeking\nconst BOLA_STATE_ONE_BITRATE = 0;\nconst BOLA_STATE_STARTUP = 1;\nconst BOLA_STATE_STEADY = 2;\n\nconst MINIMUM_BUFFER_S = 10; // BOLA should never add artificial delays if buffer is less than MINIMUM_BUFFER_S.\nconst MINIMUM_BUFFER_PER_BITRATE_LEVEL_S = 2;\n// E.g. if there are 5 bitrates, BOLA switches to top bitrate at buffer = 10 + 5 * 2 = 20s.\n// If Schedule Controller does not allow buffer to reach that level, it can be achieved through the placeholder buffer level.\n\nconst PLACEHOLDER_BUFFER_DECAY = 0.99; // Make sure placeholder buffer does not stick around too long.\n\nfunction BolaRule(config) {\n\n config = config || {};\n const context = this.context;\n\n const dashMetrics = config.dashMetrics;\n const mediaPlayerModel = config.mediaPlayerModel;\n const eventBus = EventBus(context).getInstance();\n\n let instance,\n logger,\n bolaStateDict;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n resetInitialSettings();\n\n eventBus.on(MediaPlayerEvents.BUFFER_EMPTY, onBufferEmpty, instance);\n eventBus.on(MediaPlayerEvents.PLAYBACK_SEEKING, onPlaybackSeeking, instance);\n eventBus.on(MediaPlayerEvents.METRIC_ADDED, onMetricAdded, instance);\n eventBus.on(MediaPlayerEvents.QUALITY_CHANGE_REQUESTED, onQualityChangeRequested, instance);\n eventBus.on(MediaPlayerEvents.FRAGMENT_LOADING_ABANDONED, onFragmentLoadingAbandoned, instance);\n\n eventBus.on(Events.MEDIA_FRAGMENT_LOADED, onMediaFragmentLoaded, instance);\n }\n\n function utilitiesFromBitrates(bitrates) {\n return bitrates.map(b => Math.log(b));\n // no need to worry about offset, utilities will be offset (uniformly) anyway later\n }\n\n // NOTE: in live streaming, the real buffer level can drop below minimumBufferS, but bola should not stick to lowest bitrate by using a placeholder buffer level\n function calculateBolaParameters(stableBufferTime, bitrates, utilities) {\n const highestUtilityIndex = utilities.reduce((highestIndex, u, uIndex) => (u > utilities[highestIndex] ? uIndex : highestIndex), 0);\n\n if (highestUtilityIndex === 0) {\n // if highestUtilityIndex === 0, then always use lowest bitrate\n return null;\n }\n\n const bufferTime = Math.max(stableBufferTime, MINIMUM_BUFFER_S + MINIMUM_BUFFER_PER_BITRATE_LEVEL_S * bitrates.length);\n\n // TODO: Investigate if following can be better if utilities are not the default Math.log utilities.\n // If using Math.log utilities, we can choose Vp and gp to always prefer bitrates[0] at minimumBufferS and bitrates[max] at bufferTarget.\n // (Vp * (utility + gp) - bufferLevel) / bitrate has the maxima described when:\n // Vp * (utilities[0] + gp - 1) === minimumBufferS and Vp * (utilities[max] + gp - 1) === bufferTarget\n // giving:\n const gp = (utilities[highestUtilityIndex] - 1) / (bufferTime / MINIMUM_BUFFER_S - 1);\n const Vp = MINIMUM_BUFFER_S / gp;\n // note that expressions for gp and Vp assume utilities[0] === 1, which is true because of normalization\n\n return {gp: gp, Vp: Vp};\n }\n\n function getInitialBolaState(rulesContext) {\n const initialState = {};\n const mediaInfo = rulesContext.getMediaInfo();\n const bitrates = mediaInfo.bitrateList.map(b => b.bandwidth);\n let utilities = utilitiesFromBitrates(bitrates);\n utilities = utilities.map(u => u - utilities[0] + 1); // normalize\n const stableBufferTime = mediaPlayerModel.getStableBufferTime();\n const params = calculateBolaParameters(stableBufferTime, bitrates, utilities);\n\n if (!params) {\n // only happens when there is only one bitrate level\n initialState.state = BOLA_STATE_ONE_BITRATE;\n } else {\n initialState.state = BOLA_STATE_STARTUP;\n\n initialState.bitrates = bitrates;\n initialState.utilities = utilities;\n initialState.stableBufferTime = stableBufferTime;\n initialState.Vp = params.Vp;\n initialState.gp = params.gp;\n\n initialState.lastQuality = 0;\n clearBolaStateOnSeek(initialState);\n }\n\n return initialState;\n }\n\n function clearBolaStateOnSeek(bolaState) {\n bolaState.placeholderBuffer = 0;\n bolaState.mostAdvancedSegmentStart = NaN;\n bolaState.lastSegmentWasReplacement = false;\n bolaState.lastSegmentStart = NaN;\n bolaState.lastSegmentDurationS = NaN;\n bolaState.lastSegmentRequestTimeMs = NaN;\n bolaState.lastSegmentFinishTimeMs = NaN;\n }\n\n // If the buffer target is changed (can this happen mid-stream?), then adjust BOLA parameters accordingly.\n function checkBolaStateStableBufferTime(bolaState, mediaType) {\n const stableBufferTime = mediaPlayerModel.getStableBufferTime();\n if (bolaState.stableBufferTime !== stableBufferTime) {\n const params = calculateBolaParameters(stableBufferTime, bolaState.bitrates, bolaState.utilities);\n if (params.Vp !== bolaState.Vp || params.gp !== bolaState.gp) {\n // correct placeholder buffer using two criteria:\n // 1. do not change effective buffer level at effectiveBufferLevel === MINIMUM_BUFFER_S ( === Vp * gp )\n // 2. scale placeholder buffer by Vp subject to offset indicated in 1.\n\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n let effectiveBufferLevel = bufferLevel + bolaState.placeholderBuffer;\n\n effectiveBufferLevel -= MINIMUM_BUFFER_S;\n effectiveBufferLevel *= params.Vp / bolaState.Vp;\n effectiveBufferLevel += MINIMUM_BUFFER_S;\n\n bolaState.stableBufferTime = stableBufferTime;\n bolaState.Vp = params.Vp;\n bolaState.gp = params.gp;\n bolaState.placeholderBuffer = Math.max(0, effectiveBufferLevel - bufferLevel);\n }\n }\n }\n\n function getBolaState(rulesContext) {\n const mediaType = rulesContext.getMediaType();\n let bolaState = bolaStateDict[mediaType];\n if (!bolaState) {\n bolaState = getInitialBolaState(rulesContext);\n bolaStateDict[mediaType] = bolaState;\n } else if (bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n checkBolaStateStableBufferTime(bolaState, mediaType);\n }\n return bolaState;\n }\n\n // The core idea of BOLA.\n function getQualityFromBufferLevel(bolaState, bufferLevel) {\n const bitrateCount = bolaState.bitrates.length;\n let quality = NaN;\n let score = NaN;\n for (let i = 0; i < bitrateCount; ++i) {\n let s = (bolaState.Vp * (bolaState.utilities[i] + bolaState.gp) - bufferLevel) / bolaState.bitrates[i];\n if (isNaN(score) || s >= score) {\n score = s;\n quality = i;\n }\n }\n return quality;\n }\n\n // maximum buffer level which prefers to download at quality rather than wait\n function maxBufferLevelForQuality(bolaState, quality) {\n return bolaState.Vp * (bolaState.utilities[quality] + bolaState.gp);\n }\n\n // the minimum buffer level that would cause BOLA to choose quality rather than a lower bitrate\n function minBufferLevelForQuality(bolaState, quality) {\n const qBitrate = bolaState.bitrates[quality];\n const qUtility = bolaState.utilities[quality];\n\n let min = 0;\n for (let i = quality - 1; i >= 0; --i) {\n // for each bitrate less than bitrates[quality], BOLA should prefer quality (unless other bitrate has higher utility)\n if (bolaState.utilities[i] < bolaState.utilities[quality]) {\n const iBitrate = bolaState.bitrates[i];\n const iUtility = bolaState.utilities[i];\n\n const level = bolaState.Vp * (bolaState.gp + (qBitrate * iUtility - iBitrate * qUtility) / (qBitrate - iBitrate));\n min = Math.max(min, level); // we want min to be small but at least level(i) for all i\n }\n }\n return min;\n }\n\n /*\n * The placeholder buffer increases the effective buffer that is used to calculate the bitrate.\n * There are two main reasons we might want to increase the placeholder buffer:\n *\n * 1. When a segment finishes downloading, we would expect to get a call on getMaxIndex() regarding the quality for\n * the next segment. However, there might be a delay before the next call. E.g. when streaming live content, the\n * next segment might not be available yet. If the call to getMaxIndex() does happens after a delay, we don't\n * want the delay to change the BOLA decision - we only want to factor download time to decide on bitrate level.\n *\n * 2. It is possible to get a call to getMaxIndex() without having a segment download. The buffer target in dash.js\n * is different for top-quality segments and lower-quality segments. If getMaxIndex() returns a lower-than-top\n * quality, then the buffer controller might decide not to download a segment. When dash.js is ready for the next\n * segment, getMaxIndex() will be called again. We don't want this extra delay to factor in the bitrate decision.\n */\n function updatePlaceholderBuffer(bolaState, mediaType) {\n const nowMs = Date.now();\n\n if (!isNaN(bolaState.lastSegmentFinishTimeMs)) {\n // compensate for non-bandwidth-derived delays, e.g., live streaming availability, buffer controller\n const delay = 0.001 * (nowMs - bolaState.lastSegmentFinishTimeMs);\n bolaState.placeholderBuffer += Math.max(0, delay);\n } else if (!isNaN(bolaState.lastCallTimeMs)) {\n // no download after last call, compensate for delay between calls\n const delay = 0.001 * (nowMs - bolaState.lastCallTimeMs);\n bolaState.placeholderBuffer += Math.max(0, delay);\n }\n\n bolaState.lastCallTimeMs = nowMs;\n bolaState.lastSegmentStart = NaN;\n bolaState.lastSegmentRequestTimeMs = NaN;\n bolaState.lastSegmentFinishTimeMs = NaN;\n\n checkBolaStateStableBufferTime(bolaState, mediaType);\n }\n\n function onBufferEmpty(e) {\n // if we rebuffer, we don't want the placeholder buffer to artificially raise BOLA quality\n const mediaType = e.mediaType;\n // if audio buffer runs empty (due to track switch for example) then reset placeholder buffer only for audio (to avoid decrease video BOLA quality)\n const stateDict = mediaType === Constants.AUDIO ? [Constants.AUDIO] : bolaStateDict;\n for (const mediaType in stateDict) {\n if (bolaStateDict.hasOwnProperty(mediaType) && bolaStateDict[mediaType].state === BOLA_STATE_STEADY) {\n bolaStateDict[mediaType].placeholderBuffer = 0;\n }\n }\n }\n\n function onPlaybackSeeking() {\n // TODO: 1. Verify what happens if we seek mid-fragment.\n // TODO: 2. If e.g. we have 10s fragments and seek, we might want to download the first fragment at a lower quality to restart playback quickly.\n for (const mediaType in bolaStateDict) {\n if (bolaStateDict.hasOwnProperty(mediaType)) {\n const bolaState = bolaStateDict[mediaType];\n if (bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n bolaState.state = BOLA_STATE_STARTUP; // TODO: BOLA_STATE_SEEK?\n clearBolaStateOnSeek(bolaState);\n }\n }\n }\n }\n\n function onMediaFragmentLoaded(e) {\n if (e && e.chunk && e.chunk.mediaInfo) {\n const bolaState = bolaStateDict[e.chunk.mediaInfo.type];\n if (bolaState && bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n const start = e.chunk.start;\n if (isNaN(bolaState.mostAdvancedSegmentStart) || start > bolaState.mostAdvancedSegmentStart) {\n bolaState.mostAdvancedSegmentStart = start;\n bolaState.lastSegmentWasReplacement = false;\n } else {\n bolaState.lastSegmentWasReplacement = true;\n }\n\n bolaState.lastSegmentStart = start;\n bolaState.lastSegmentDurationS = e.chunk.duration;\n bolaState.lastQuality = e.chunk.quality;\n\n checkNewSegment(bolaState, e.chunk.mediaInfo.type);\n }\n }\n }\n\n function onMetricAdded(e) {\n if (e && e.metric === MetricsConstants.HTTP_REQUEST && e.value && e.value.type === HTTPRequest.MEDIA_SEGMENT_TYPE && e.value.trace && e.value.trace.length) {\n const bolaState = bolaStateDict[e.mediaType];\n if (bolaState && bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n bolaState.lastSegmentRequestTimeMs = e.value.trequest.getTime();\n bolaState.lastSegmentFinishTimeMs = e.value._tfinish.getTime();\n\n checkNewSegment(bolaState, e.mediaType);\n }\n }\n }\n\n /*\n * When a new segment is downloaded, we get two notifications: onMediaFragmentLoaded() and onMetricAdded(). It is\n * possible that the quality for the downloaded segment was lower (not higher) than the quality indicated by BOLA.\n * This might happen because of other rules such as the DroppedFramesRule. When this happens, we trim the\n * placeholder buffer to make BOLA more stable. This mechanism also avoids inflating the buffer when BOLA itself\n * decides not to increase the quality to avoid oscillations.\n *\n * We should also check for replacement segments (fast switching). In this case, a segment is downloaded but does\n * not grow the actual buffer. Fast switching might cause the buffer to deplete, causing BOLA to drop the bitrate.\n * We avoid this by growing the placeholder buffer.\n */\n function checkNewSegment(bolaState, mediaType) {\n if (!isNaN(bolaState.lastSegmentStart) && !isNaN(bolaState.lastSegmentRequestTimeMs) && !isNaN(bolaState.placeholderBuffer)) {\n bolaState.placeholderBuffer *= PLACEHOLDER_BUFFER_DECAY;\n\n // Find what maximum buffer corresponding to last segment was, and ensure placeholder is not relatively larger.\n if (!isNaN(bolaState.lastSegmentFinishTimeMs)) {\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n const bufferAtLastSegmentRequest = bufferLevel + 0.001 * (bolaState.lastSegmentFinishTimeMs - bolaState.lastSegmentRequestTimeMs); // estimate\n const maxEffectiveBufferForLastSegment = maxBufferLevelForQuality(bolaState, bolaState.lastQuality);\n const maxPlaceholderBuffer = Math.max(0, maxEffectiveBufferForLastSegment - bufferAtLastSegmentRequest);\n bolaState.placeholderBuffer = Math.min(maxPlaceholderBuffer, bolaState.placeholderBuffer);\n }\n\n // then see if we should grow placeholder buffer\n\n if (bolaState.lastSegmentWasReplacement && !isNaN(bolaState.lastSegmentDurationS)) {\n // compensate for segments that were downloaded but did not grow the buffer\n bolaState.placeholderBuffer += bolaState.lastSegmentDurationS;\n }\n\n bolaState.lastSegmentStart = NaN;\n bolaState.lastSegmentRequestTimeMs = NaN;\n }\n }\n\n function onQualityChangeRequested(e) {\n // Useful to store change requests when abandoning a download.\n if (e) {\n const bolaState = bolaStateDict[e.mediaType];\n if (bolaState && bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n bolaState.abrQuality = e.newQuality;\n }\n }\n }\n\n function onFragmentLoadingAbandoned(e) {\n if (e) {\n const bolaState = bolaStateDict[e.mediaType];\n if (bolaState && bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n // deflate placeholderBuffer - note that we want to be conservative when abandoning\n const bufferLevel = dashMetrics.getCurrentBufferLevel(e.mediaType);\n let wantEffectiveBufferLevel;\n if (bolaState.abrQuality > 0) {\n // deflate to point where BOLA just chooses newQuality over newQuality-1\n wantEffectiveBufferLevel = minBufferLevelForQuality(bolaState, bolaState.abrQuality);\n } else {\n wantEffectiveBufferLevel = MINIMUM_BUFFER_S;\n }\n const maxPlaceholderBuffer = Math.max(0, wantEffectiveBufferLevel - bufferLevel);\n bolaState.placeholderBuffer = Math.min(bolaState.placeholderBuffer, maxPlaceholderBuffer);\n }\n }\n }\n\n function getMaxIndex(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n\n if (!rulesContext || !rulesContext.hasOwnProperty('getMediaInfo') || !rulesContext.hasOwnProperty('getMediaType') ||\n !rulesContext.hasOwnProperty('getScheduleController') || !rulesContext.hasOwnProperty('getStreamInfo') ||\n !rulesContext.hasOwnProperty('getAbrController') || !rulesContext.hasOwnProperty('useBufferOccupancyABR')) {\n return switchRequest;\n }\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n const scheduleController = rulesContext.getScheduleController();\n const streamInfo = rulesContext.getStreamInfo();\n const abrController = rulesContext.getAbrController();\n const throughputHistory = abrController.getThroughputHistory();\n const streamId = streamInfo ? streamInfo.id : null;\n const isDynamic = streamInfo && streamInfo.manifestInfo && streamInfo.manifestInfo.isDynamic;\n const useBufferOccupancyABR = rulesContext.useBufferOccupancyABR();\n switchRequest.reason = switchRequest.reason || {};\n\n if (!useBufferOccupancyABR) {\n return switchRequest;\n }\n\n scheduleController.setTimeToLoadDelay(0);\n\n const bolaState = getBolaState(rulesContext);\n\n if (bolaState.state === BOLA_STATE_ONE_BITRATE) {\n // shouldn't even have been called\n return switchRequest;\n }\n\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n const throughput = throughputHistory.getAverageThroughput(mediaType, isDynamic);\n const safeThroughput = throughputHistory.getSafeAverageThroughput(mediaType, isDynamic);\n const latency = throughputHistory.getAverageLatency(mediaType);\n let quality;\n\n switchRequest.reason.state = bolaState.state;\n switchRequest.reason.throughput = throughput;\n switchRequest.reason.latency = latency;\n\n if (isNaN(throughput)) { // isNaN(throughput) === isNaN(safeThroughput) === isNaN(latency)\n // still starting up - not enough information\n return switchRequest;\n }\n\n switch (bolaState.state) {\n case BOLA_STATE_STARTUP:\n quality = abrController.getQualityForBitrate(mediaInfo, safeThroughput, streamId, latency);\n\n switchRequest.quality = quality;\n switchRequest.reason.throughput = safeThroughput;\n\n bolaState.placeholderBuffer = Math.max(0, minBufferLevelForQuality(bolaState, quality) - bufferLevel);\n bolaState.lastQuality = quality;\n\n if (!isNaN(bolaState.lastSegmentDurationS) && bufferLevel >= bolaState.lastSegmentDurationS) {\n bolaState.state = BOLA_STATE_STEADY;\n }\n\n break; // BOLA_STATE_STARTUP\n\n case BOLA_STATE_STEADY:\n\n // NB: The placeholder buffer is added to bufferLevel to come up with a bitrate.\n // This might lead BOLA to be too optimistic and to choose a bitrate that would lead to rebuffering -\n // if the real buffer bufferLevel runs out, the placeholder buffer cannot prevent rebuffering.\n // However, the InsufficientBufferRule takes care of this scenario.\n\n updatePlaceholderBuffer(bolaState, mediaType);\n\n quality = getQualityFromBufferLevel(bolaState, bufferLevel + bolaState.placeholderBuffer);\n\n // we want to avoid oscillations\n // We implement the \"BOLA-O\" variant: when network bandwidth lies between two encoded bitrate levels, stick to the lowest level.\n const qualityForThroughput = abrController.getQualityForBitrate(mediaInfo, safeThroughput, streamId, latency);\n if (quality > bolaState.lastQuality && quality > qualityForThroughput) {\n // only intervene if we are trying to *increase* quality to an *unsustainable* level\n // we are only avoid oscillations - do not drop below last quality\n\n quality = Math.max(qualityForThroughput, bolaState.lastQuality);\n }\n\n // We do not want to overfill buffer with low quality chunks.\n // Note that there will be no delay if buffer level is below MINIMUM_BUFFER_S, probably even with some margin higher than MINIMUM_BUFFER_S.\n let delayS = Math.max(0, bufferLevel + bolaState.placeholderBuffer - maxBufferLevelForQuality(bolaState, quality));\n\n // First reduce placeholder buffer, then tell schedule controller to pause.\n if (delayS <= bolaState.placeholderBuffer) {\n bolaState.placeholderBuffer -= delayS;\n delayS = 0;\n } else {\n delayS -= bolaState.placeholderBuffer;\n bolaState.placeholderBuffer = 0;\n\n if (quality < abrController.getMaxAllowedIndexFor(mediaType, streamId)) {\n // At top quality, allow schedule controller to decide how far to fill buffer.\n scheduleController.setTimeToLoadDelay(1000 * delayS);\n } else {\n delayS = 0;\n }\n }\n\n switchRequest.quality = quality;\n switchRequest.reason.throughput = throughput;\n switchRequest.reason.latency = latency;\n switchRequest.reason.bufferLevel = bufferLevel;\n switchRequest.reason.placeholderBuffer = bolaState.placeholderBuffer;\n switchRequest.reason.delay = delayS;\n\n bolaState.lastQuality = quality;\n // keep bolaState.state === BOLA_STATE_STEADY\n\n break; // BOLA_STATE_STEADY\n\n default:\n logger.debug('BOLA ABR rule invoked in bad state.');\n // should not arrive here, try to recover\n switchRequest.quality = abrController.getQualityForBitrate(mediaInfo, safeThroughput, streamId, latency);\n switchRequest.reason.state = bolaState.state;\n switchRequest.reason.throughput = safeThroughput;\n switchRequest.reason.latency = latency;\n bolaState.state = BOLA_STATE_STARTUP;\n clearBolaStateOnSeek(bolaState);\n }\n\n return switchRequest;\n }\n\n function resetInitialSettings() {\n bolaStateDict = {};\n }\n\n function reset() {\n resetInitialSettings();\n\n eventBus.off(MediaPlayerEvents.BUFFER_EMPTY, onBufferEmpty, instance);\n eventBus.off(MediaPlayerEvents.PLAYBACK_SEEKING, onPlaybackSeeking, instance);\n eventBus.off(MediaPlayerEvents.METRIC_ADDED, onMetricAdded, instance);\n eventBus.off(MediaPlayerEvents.QUALITY_CHANGE_REQUESTED, onQualityChangeRequested, instance);\n eventBus.off(MediaPlayerEvents.FRAGMENT_LOADING_ABANDONED, onFragmentLoadingAbandoned, instance);\n\n eventBus.off(Events.MEDIA_FRAGMENT_LOADED, onMediaFragmentLoaded, instance);\n }\n\n instance = {\n getMaxIndex: getMaxIndex,\n reset: reset\n };\n\n setup();\n return instance;\n}\n\nBolaRule.__dashjs_factory_name = 'BolaRule';\nexport default FactoryMaker.getClassFactory(BolaRule);\n","import FactoryMaker from '../../../core/FactoryMaker';\nimport SwitchRequest from '../SwitchRequest';\nimport Debug from '../../../core/Debug';\n\nfunction DroppedFramesRule() {\n\n const context = this.context;\n let instance,\n logger;\n\n const DROPPED_PERCENTAGE_FORBID = 0.15;\n const GOOD_SAMPLE_SIZE = 375; //Don't apply the rule until this many frames have been rendered(and counted under those indices).\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function getMaxIndex(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n\n if (!rulesContext || !rulesContext.hasOwnProperty('getDroppedFramesHistory')) {\n return switchRequest;\n }\n\n const droppedFramesHistory = rulesContext.getDroppedFramesHistory();\n const streamId = rulesContext.getStreamInfo().id;\n\n if (droppedFramesHistory) {\n const dfh = droppedFramesHistory.getFrameHistory(streamId);\n\n if (!dfh || dfh.length === 0) {\n return switchRequest;\n }\n\n let droppedFrames = 0;\n let totalFrames = 0;\n let maxIndex = SwitchRequest.NO_CHANGE;\n\n //No point in measuring dropped frames for the zeroeth index.\n for (let i = 1; i < dfh.length; i++) {\n if (dfh[i]) {\n droppedFrames = dfh[i].droppedVideoFrames;\n totalFrames = dfh[i].totalVideoFrames;\n\n if (totalFrames > GOOD_SAMPLE_SIZE && droppedFrames / totalFrames > DROPPED_PERCENTAGE_FORBID) {\n maxIndex = i - 1;\n logger.debug('index: ' + maxIndex + ' Dropped Frames: ' + droppedFrames + ' Total Frames: ' + totalFrames);\n break;\n }\n }\n }\n return SwitchRequest(context).create(maxIndex, { droppedFrames: droppedFrames });\n }\n\n return switchRequest;\n }\n\n instance = {\n getMaxIndex\n };\n\n setup();\n\n return instance;\n}\n\nDroppedFramesRule.__dashjs_factory_name = 'DroppedFramesRule';\nexport default FactoryMaker.getClassFactory(DroppedFramesRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventBus from '../../../core/EventBus';\nimport Events from '../../../core/events/Events';\nimport FactoryMaker from '../../../core/FactoryMaker';\nimport Debug from '../../../core/Debug';\nimport SwitchRequest from '../SwitchRequest';\nimport Constants from '../../constants/Constants';\nimport MetricsConstants from '../../constants/MetricsConstants';\nimport MediaPlayerEvents from '../../MediaPlayerEvents';\n\nfunction InsufficientBufferRule(config) {\n\n config = config || {};\n const INSUFFICIENT_BUFFER_SAFETY_FACTOR = 0.5;\n const SEGMENT_IGNORE_COUNT = 2;\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n const dashMetrics = config.dashMetrics;\n\n let instance,\n logger,\n bufferStateDict;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n resetInitialSettings();\n eventBus.on(MediaPlayerEvents.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.on(Events.BYTES_APPENDED_END_FRAGMENT, _onBytesAppended, instance);\n }\n\n function checkConfig() {\n if (!dashMetrics || !dashMetrics.hasOwnProperty('getCurrentBufferLevel') || !dashMetrics.hasOwnProperty('getCurrentBufferState')) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n\n /**\n * If a BUFFER_EMPTY event happens, then InsufficientBufferRule returns switchRequest.quality=0 until BUFFER_LOADED happens.\n * Otherwise InsufficientBufferRule gives a maximum bitrate depending on throughput and bufferLevel such that\n * a whole fragment can be downloaded before the buffer runs out, subject to a conservative safety factor of 0.5.\n * If the bufferLevel is low, then InsufficientBufferRule avoids rebuffering risk.\n * If the bufferLevel is high, then InsufficientBufferRule give a high MaxIndex allowing other rules to take over.\n * @param rulesContext\n * @return {object}\n */\n function getMaxIndex(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n\n if (!rulesContext || !rulesContext.hasOwnProperty('getMediaType')) {\n return switchRequest;\n }\n\n checkConfig();\n\n const mediaType = rulesContext.getMediaType();\n const currentBufferState = dashMetrics.getCurrentBufferState(mediaType);\n const representationInfo = rulesContext.getRepresentationInfo();\n const fragmentDuration = representationInfo.fragmentDuration;\n const streamInfo = rulesContext.getStreamInfo();\n const streamId = streamInfo ? streamInfo.id : null;\n const scheduleController = rulesContext.getScheduleController();\n const isDynamic = streamInfo && streamInfo.manifestInfo && streamInfo.manifestInfo.isDynamic;\n const playbackController = scheduleController.getPlaybackController();\n\n\n // Don't ask for a bitrate change if there is not info about buffer state or if fragmentDuration is not defined\n const lowLatencyEnabled = playbackController.getLowLatencyModeEnabled();\n if (shouldIgnore(lowLatencyEnabled, mediaType) || !fragmentDuration) {\n return switchRequest;\n }\n\n if (currentBufferState && currentBufferState.state === MetricsConstants.BUFFER_EMPTY) {\n logger.debug('[' + mediaType + '] Switch to index 0; buffer is empty.');\n switchRequest.quality = 0;\n switchRequest.reason = 'InsufficientBufferRule: Buffer is empty';\n } else {\n const mediaInfo = rulesContext.getMediaInfo();\n const abrController = rulesContext.getAbrController();\n const throughputHistory = abrController.getThroughputHistory();\n\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n const throughput = throughputHistory.getAverageThroughput(mediaType, isDynamic);\n const latency = throughputHistory.getAverageLatency(mediaType);\n const bitrate = throughput * (bufferLevel / fragmentDuration) * INSUFFICIENT_BUFFER_SAFETY_FACTOR;\n\n switchRequest.quality = abrController.getQualityForBitrate(mediaInfo, bitrate, streamId, latency);\n switchRequest.reason = 'InsufficientBufferRule: being conservative to avoid immediate rebuffering';\n }\n\n return switchRequest;\n\n }\n\n function shouldIgnore(lowLatencyEnabled, mediaType) {\n return !lowLatencyEnabled && bufferStateDict[mediaType].ignoreCount > 0;\n }\n\n function resetInitialSettings() {\n bufferStateDict = {};\n bufferStateDict[Constants.VIDEO] = { ignoreCount: SEGMENT_IGNORE_COUNT };\n bufferStateDict[Constants.AUDIO] = { ignoreCount: SEGMENT_IGNORE_COUNT };\n }\n\n function _onPlaybackSeeking() {\n resetInitialSettings();\n }\n\n function _onBytesAppended(e) {\n if (!isNaN(e.startTime) && (e.mediaType === Constants.AUDIO || e.mediaType === Constants.VIDEO)) {\n if (bufferStateDict[e.mediaType].ignoreCount > 0) {\n bufferStateDict[e.mediaType].ignoreCount--;\n }\n }\n }\n\n function reset() {\n resetInitialSettings();\n eventBus.off(MediaPlayerEvents.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.off(Events.BYTES_APPENDED_END_FRAGMENT, _onBytesAppended, instance);\n }\n\n instance = {\n getMaxIndex,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nInsufficientBufferRule.__dashjs_factory_name = 'InsufficientBufferRule';\nexport default FactoryMaker.getClassFactory(InsufficientBufferRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2020, Unified Streaming.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n// For a description of the Learn2Adapt-LowLatency (L2A-LL) bitrate adaptation algorithm, see https://github.com/unifiedstreaming/Learn2Adapt-LowLatency/blob/master/Online_learning_for_bitrate_adaptation_in_low_latency_live_streaming_CR.pdf\n\nimport MetricsConstants from '../../constants/MetricsConstants';\nimport SwitchRequest from '../SwitchRequest';\nimport FactoryMaker from '../../../core/FactoryMaker';\nimport {HTTPRequest} from '../../vo/metrics/HTTPRequest';\nimport EventBus from '../../../core/EventBus';\nimport Events from '../../../core/events/Events';\nimport Debug from '../../../core/Debug';\nimport Constants from '../../constants/Constants';\n\nconst L2A_STATE_ONE_BITRATE = 0; // If there is only one bitrate (or initialization failed), always return NO_CHANGE.\nconst L2A_STATE_STARTUP = 1; // Set placeholder buffer such that we download fragments at most recently measured throughput.\nconst L2A_STATE_STEADY = 2; // Buffer primed, we switch to steady operation.\n\n\nfunction L2ARule(config) {\n config = config || {};\n const context = this.context;\n\n const dashMetrics = config.dashMetrics;\n const eventBus = EventBus(context).getInstance();\n\n let instance,\n l2AStateDict,\n l2AParameterDict,\n logger;\n\n /**\n * Setup function to initialize L2ARule\n */\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n _resetInitialSettings();\n\n eventBus.on(Events.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.on(Events.MEDIA_FRAGMENT_LOADED, _onMediaFragmentLoaded, instance);\n eventBus.on(Events.METRIC_ADDED, _onMetricAdded, instance);\n eventBus.on(Events.QUALITY_CHANGE_REQUESTED, _onQualityChangeRequested, instance);\n }\n\n /**\n * Sets the initial state of the algorithm. Calls the initialize function for the paramteters.\n * @param {object} rulesContext\n * @return {object} initialState\n * @private\n */\n function _getInitialL2AState(rulesContext) {\n const initialState = {};\n const mediaInfo = rulesContext.getMediaInfo();\n const bitrates = mediaInfo.bitrateList.map((b) => {\n return b.bandwidth / 1000;\n });\n\n initialState.state = L2A_STATE_STARTUP;\n initialState.bitrates = bitrates;\n initialState.lastQuality = 0;\n\n _initializeL2AParameters(mediaInfo);\n _clearL2AStateOnSeek(initialState);\n\n return initialState;\n }\n\n /**\n * Initializes the parameters of the algorithm. This will be done once for each media type.\n * @param {object} mediaInfo\n * @private\n */\n function _initializeL2AParameters(mediaInfo) {\n\n if (!mediaInfo || !mediaInfo.type) {\n return;\n }\n l2AParameterDict[mediaInfo.type] = {};\n l2AParameterDict[mediaInfo.type].w = []; //Vector of probabilities associated with bitrate decisions\n l2AParameterDict[mediaInfo.type].prev_w = []; //Vector of probabilities associated with bitrate decisions calculated in the previous step\n l2AParameterDict[mediaInfo.type].Q = 0; //Initialization of Lagrangian multiplier (This keeps track of the buffer displacement)\n l2AParameterDict[mediaInfo.type].segment_request_start_s = 0;\n l2AParameterDict[mediaInfo.type].segment_download_finish_s = 0;\n l2AParameterDict[mediaInfo.type].B_target = 1.5; //Target buffer level\n }\n\n\n /**\n * Clears the state object\n * @param {object} l2AState\n * @private\n */\n function _clearL2AStateOnSeek(l2AState) {\n l2AState.placeholderBuffer = 0;\n l2AState.mostAdvancedSegmentStart = NaN;\n l2AState.lastSegmentWasReplacement = false;\n l2AState.lastSegmentStart = NaN;\n l2AState.lastSegmentDurationS = NaN;\n l2AState.lastSegmentRequestTimeMs = NaN;\n l2AState.lastSegmentFinishTimeMs = NaN;\n }\n\n\n /**\n * Returns the state object for a fiven media type. If the state object is not yet defined _getInitialL2AState is called\n * @param {object} rulesContext\n * @return {object} l2AState\n * @private\n */\n function _getL2AState(rulesContext) {\n const mediaType = rulesContext.getMediaType();\n let l2AState = l2AStateDict[mediaType];\n\n if (!l2AState) {\n l2AState = _getInitialL2AState(rulesContext);\n l2AStateDict[mediaType] = l2AState;\n }\n\n return l2AState;\n }\n\n /**\n * Event handler for the seeking event.\n * @private\n */\n function _onPlaybackSeeking() {\n for (const mediaType in l2AStateDict) {\n if (l2AStateDict.hasOwnProperty(mediaType)) {\n const l2aState = l2AStateDict[mediaType];\n if (l2aState.state !== L2A_STATE_ONE_BITRATE) {\n l2aState.state = L2A_STATE_STARTUP;\n _clearL2AStateOnSeek(l2aState);\n }\n }\n }\n }\n\n /**\n * Event handler for the mediaFragmentLoaded event\n * @param {object} e\n * @private\n */\n function _onMediaFragmentLoaded(e) {\n if (e && e.chunk && e.chunk.mediaInfo) {\n const l2AState = l2AStateDict[e.chunk.mediaInfo.type];\n const l2AParameters = l2AParameterDict[e.chunk.mediaInfo.type];\n\n if (l2AState && l2AState.state !== L2A_STATE_ONE_BITRATE) {\n const start = e.chunk.start;\n if (isNaN(l2AState.mostAdvancedSegmentStart) || start > l2AState.mostAdvancedSegmentStart) {\n l2AState.mostAdvancedSegmentStart = start;\n l2AState.lastSegmentWasReplacement = false;\n } else {\n l2AState.lastSegmentWasReplacement = true;\n }\n\n l2AState.lastSegmentStart = start;\n l2AState.lastSegmentDurationS = e.chunk.duration;\n l2AState.lastQuality = e.chunk.quality;\n\n _checkNewSegment(l2AState, l2AParameters);\n }\n }\n }\n\n /**\n * Event handler for the metricAdded event\n * @param {object} e\n * @private\n */\n function _onMetricAdded(e) {\n if (e && e.metric === MetricsConstants.HTTP_REQUEST && e.value && e.value.type === HTTPRequest.MEDIA_SEGMENT_TYPE && e.value.trace && e.value.trace.length) {\n const l2AState = l2AStateDict[e.mediaType];\n const l2AParameters = l2AParameterDict[e.mediaType];\n\n if (l2AState && l2AState.state !== L2A_STATE_ONE_BITRATE) {\n l2AState.lastSegmentRequestTimeMs = e.value.trequest.getTime();\n l2AState.lastSegmentFinishTimeMs = e.value._tfinish.getTime();\n _checkNewSegment(l2AState, l2AParameters);\n }\n }\n }\n\n /**\n * When a new metric has been added or a media fragment has been loaded the state is adjusted accordingly\n * @param {object} L2AState\n * @param {object} l2AParameters\n * @private\n */\n function _checkNewSegment(L2AState, l2AParameters) {\n if (!isNaN(L2AState.lastSegmentStart) && !isNaN(L2AState.lastSegmentRequestTimeMs)) {\n l2AParameters.segment_request_start_s = 0.001 * L2AState.lastSegmentRequestTimeMs;\n l2AParameters.segment_download_finish_s = 0.001 * L2AState.lastSegmentFinishTimeMs;\n L2AState.lastSegmentStart = NaN;\n L2AState.lastSegmentRequestTimeMs = NaN;\n }\n }\n\n /**\n * Event handler for the qualityChangeRequested event\n * @param {object} e\n * @private\n */\n function _onQualityChangeRequested(e) {\n // Useful to store change requests when abandoning a download.\n if (e && e.mediaType) {\n const L2AState = l2AStateDict[e.mediaType];\n if (L2AState && L2AState.state !== L2A_STATE_ONE_BITRATE) {\n L2AState.abrQuality = e.newQuality;\n }\n }\n }\n\n /**\n * Dot multiplication of two arrays\n * @param {array} arr1\n * @param {array} arr2\n * @return {number} sumdot\n * @private\n */\n\n function _dotmultiplication(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return -1;\n }\n let sumdot = 0;\n for (let i = 0; i < arr1.length; i++) {\n sumdot = sumdot + arr1[i] * arr2[i];\n }\n return sumdot;\n }\n\n /**\n * Project an n-dim vector y to the simplex Dn\n * Dn = { x : x n-dim, 1 >= x >= 0, sum(x) = 1}\n * Algorithm is explained at http://arxiv.org/abs/1101.6081\n * @param {array} arr\n * @return {array}\n */\n function euclideanProjection(arr) {\n const m = arr.length;\n let bget = false;\n let arr2 = [];\n for (let ii = 0; ii < m; ++ii) {\n arr2[ii] = arr[ii];\n }\n let s = arr.sort(function (a, b) {\n return b - a;\n });\n let tmpsum = 0;\n let tmax = 0;\n let x = [];\n for (let ii = 0; ii < m - 1; ++ii) {\n tmpsum = tmpsum + s[ii];\n tmax = (tmpsum - 1) / (ii + 1);\n if (tmax >= s[ii + 1]) {\n bget = true;\n break;\n }\n }\n if (!bget) {\n tmax = (tmpsum + s[m - 1] - 1) / m;\n }\n for (let ii = 0; ii < m; ++ii) {\n x[ii] = Math.max(arr2[ii] - tmax, 0);\n }\n return x;\n }\n\n /**\n * Returns a switch request object indicating which quality is to be played\n * @param {object} rulesContext\n * @return {object}\n */\n function getMaxIndex(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n const horizon = 4; // Optimization horizon (The amount of steps required to achieve convergence)\n const vl = Math.pow(horizon, 0.99);// Cautiousness parameter, used to control aggressiveness of the bitrate decision process.\n const alpha = Math.max(Math.pow(horizon, 1), vl * Math.sqrt(horizon));// Step size, used for gradient descent exploration granularity\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n const bitrates = mediaInfo.bitrateList.map(b => b.bandwidth);\n const bitrateCount = bitrates.length;\n const scheduleController = rulesContext.getScheduleController();\n const streamInfo = rulesContext.getStreamInfo();\n const abrController = rulesContext.getAbrController();\n const throughputHistory = abrController.getThroughputHistory();\n const isDynamic = streamInfo && streamInfo.manifestInfo && streamInfo.manifestInfo.isDynamic;\n const useL2AABR = rulesContext.useL2AABR();\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType, true);\n const safeThroughput = throughputHistory.getSafeAverageThroughput(mediaType, isDynamic);\n const throughput = throughputHistory.getAverageThroughput(mediaType, isDynamic); // In kbits/s\n const react = 2; // Reactiveness to volatility (abrupt throughput drops), used to re-calibrate Lagrangian multiplier Q\n const latency = throughputHistory.getAverageLatency(mediaType);\n const videoModel = rulesContext.getVideoModel();\n let quality;\n let currentPlaybackRate = videoModel.getPlaybackRate();\n\n if (!rulesContext || !rulesContext.hasOwnProperty('getMediaInfo') || !rulesContext.hasOwnProperty('getMediaType') ||\n !rulesContext.hasOwnProperty('getScheduleController') || !rulesContext.hasOwnProperty('getStreamInfo') ||\n !rulesContext.hasOwnProperty('getAbrController') || !rulesContext.hasOwnProperty('useL2AABR')) {\n return switchRequest;\n }\n\n switchRequest.reason = switchRequest.reason || {};\n\n if ((!useL2AABR) || (mediaType === Constants.AUDIO)) {// L2A decides bitrate only for video. Audio to be included in decision process in a later stage\n return switchRequest;\n }\n\n scheduleController.setTimeToLoadDelay(0);\n\n const l2AState = _getL2AState(rulesContext);\n\n if (l2AState.state === L2A_STATE_ONE_BITRATE) {\n // shouldn't even have been called\n return switchRequest;\n }\n\n const l2AParameter = l2AParameterDict[mediaType];\n\n if (!l2AParameter) {\n return switchRequest;\n }\n\n switchRequest.reason.state = l2AState.state;\n switchRequest.reason.throughput = throughput;\n switchRequest.reason.latency = latency;\n\n if (isNaN(throughput)) {\n // still starting up - not enough information\n return switchRequest;\n }\n\n switch (l2AState.state) {\n case L2A_STATE_STARTUP:\n quality = abrController.getQualityForBitrate(mediaInfo, safeThroughput, streamInfo.id, latency);//During strat-up phase abr.controller is responsible for bitrate decisions.\n switchRequest.quality = quality;\n switchRequest.reason.throughput = safeThroughput;\n l2AState.lastQuality = quality;\n\n if (!isNaN(l2AState.lastSegmentDurationS) && bufferLevel >= l2AParameter.B_target) {\n l2AState.state = L2A_STATE_STEADY;\n l2AParameter.Q = vl;// Initialization of Q langrangian multiplier\n // Update of probability vector w, to be used in main adaptation logic of L2A below (steady state)\n for (let i = 0; i < bitrateCount; ++i) {\n if (i === l2AState.lastQuality) {\n l2AParameter.prev_w[i] = 1;\n } else {\n l2AParameter.prev_w[i] = 0;\n }\n }\n }\n\n break; // L2A_STATE_STARTUP\n case L2A_STATE_STEADY:\n let diff1 = [];//Used to calculate the difference between consecutive decisions (w-w_prev)\n\n // Manual calculation of latency and throughput during previous request\n let throughputMeasureTime = dashMetrics.getCurrentHttpRequest(mediaType).trace.reduce((a, b) => a + b.d, 0);\n const downloadBytes = dashMetrics.getCurrentHttpRequest(mediaType).trace.reduce((a, b) => a + b.b[0], 0);\n let lastthroughput = Math.round((8 * downloadBytes) / throughputMeasureTime); // bits/ms = kbits/s\n\n if (lastthroughput < 1) {\n lastthroughput = 1;\n }//To avoid division with 0 (avoid infinity) in case of an absolute network outage\n\n let V = l2AState.lastSegmentDurationS;\n let sign = 1;\n\n //Main adaptation logic of L2A-LL\n for (let i = 0; i < bitrateCount; ++i) {\n bitrates[i] = bitrates[i] / 1000; // Originally in bps, now in Kbps\n if (currentPlaybackRate * bitrates[i] > lastthroughput) {// In this case buffer would deplete, leading to a stall, which increases latency and thus the particular probability of selsection of bitrate[i] should be decreased.\n sign = -1;\n }\n // The objective of L2A is to minimize the overall latency=request-response time + buffer length after download+ potential stalling (if buffer less than chunk downlad time)\n l2AParameter.w[i] = l2AParameter.prev_w[i] + sign * (V / (2 * alpha)) * ((l2AParameter.Q + vl) * (currentPlaybackRate * bitrates[i] / lastthroughput));//Lagrangian descent\n }\n\n // Apply euclidean projection on w to ensure w expresses a probability distribution\n l2AParameter.w = euclideanProjection(l2AParameter.w);\n\n for (let i = 0; i < bitrateCount; ++i) {\n diff1[i] = l2AParameter.w[i] - l2AParameter.prev_w[i];\n l2AParameter.prev_w[i] = l2AParameter.w[i];\n }\n\n // Lagrangian multiplier Q calculation:\n l2AParameter.Q = Math.max(0, l2AParameter.Q - V + V * currentPlaybackRate * ((_dotmultiplication(bitrates, l2AParameter.prev_w) + _dotmultiplication(bitrates, diff1)) / lastthroughput));\n\n // Quality is calculated as argmin of the absolute difference between available bitrates (bitrates[i]) and bitrate estimation (dotmultiplication(w,bitrates)).\n let temp = [];\n for (let i = 0; i < bitrateCount; ++i) {\n temp[i] = Math.abs(bitrates[i] - _dotmultiplication(l2AParameter.w, bitrates));\n }\n\n // Quality is calculated based on the probability distribution w (the output of L2A)\n quality = temp.indexOf(Math.min(...temp));\n\n // We employ a cautious -stepwise- ascent\n if (quality > l2AState.lastQuality) {\n if (bitrates[l2AState.lastQuality + 1] <= lastthroughput) {\n quality = l2AState.lastQuality + 1;\n }\n }\n\n // Provision against bitrate over-estimation, by re-calibrating the Lagrangian multiplier Q, to be taken into account for the next chunk\n if (bitrates[quality] >= lastthroughput) {\n l2AParameter.Q = react * Math.max(vl, l2AParameter.Q);\n }\n\n switchRequest.quality = quality;\n switchRequest.reason.throughput = throughput;\n switchRequest.reason.latency = latency;\n switchRequest.reason.bufferLevel = bufferLevel;\n l2AState.lastQuality = switchRequest.quality;\n break;\n default:\n // should not arrive here, try to recover\n logger.debug('L2A ABR rule invoked in bad state.');\n switchRequest.quality = abrController.getQualityForBitrate(mediaInfo, safeThroughput, streamInfo.id, latency);\n switchRequest.reason.state = l2AState.state;\n switchRequest.reason.throughput = safeThroughput;\n switchRequest.reason.latency = latency;\n l2AState.state = L2A_STATE_STARTUP;\n _clearL2AStateOnSeek(l2AState);\n }\n return switchRequest;\n }\n\n /**\n * Reset objects to their initial state\n * @private\n */\n function _resetInitialSettings() {\n l2AStateDict = {};\n l2AParameterDict = {};\n }\n\n /**\n * Reset the rule\n */\n function reset() {\n _resetInitialSettings();\n eventBus.off(Events.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.off(Events.MEDIA_FRAGMENT_LOADED, _onMediaFragmentLoaded, instance);\n eventBus.off(Events.METRIC_ADDED, _onMetricAdded, instance);\n eventBus.off(Events.QUALITY_CHANGE_REQUESTED, _onQualityChangeRequested, instance);\n }\n\n instance = {\n getMaxIndex: getMaxIndex,\n reset: reset\n };\n\n setup();\n return instance;\n}\n\nL2ARule.__dashjs_factory_name = 'L2ARule';\nexport default FactoryMaker.getClassFactory(L2ARule);\n","\nimport FactoryMaker from '../../../core/FactoryMaker';\nimport Debug from '../../../core/Debug';\nimport SwitchRequest from '../SwitchRequest';\n\nfunction SwitchHistoryRule() {\n\n const context = this.context;\n\n let instance,\n logger;\n\n //MAX_SWITCH is the number of drops made. It doesn't consider the size of the drop.\n const MAX_SWITCH = 0.075;\n\n //Before this number of switch requests(no switch or actual), don't apply the rule.\n //must be < SwitchRequestHistory SWITCH_REQUEST_HISTORY_DEPTH to enable rule\n const SAMPLE_SIZE = 6;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function getMaxIndex(rulesContext) {\n const switchRequestHistory = rulesContext ? rulesContext.getSwitchHistory() : null;\n const switchRequests = switchRequestHistory ? switchRequestHistory.getSwitchRequests() : [];\n let drops = 0;\n let noDrops = 0;\n let dropSize = 0;\n const switchRequest = SwitchRequest(context).create();\n\n for (let i = 0; i < switchRequests.length; i++) {\n if (switchRequests[i] !== undefined) {\n drops += switchRequests[i].drops;\n noDrops += switchRequests[i].noDrops;\n dropSize += switchRequests[i].dropSize;\n\n if (drops + noDrops >= SAMPLE_SIZE && (drops / noDrops > MAX_SWITCH)) {\n switchRequest.quality = (i > 0 && switchRequests[i].drops > 0) ? i - 1 : i;\n switchRequest.reason = {index: switchRequest.quality, drops: drops, noDrops: noDrops, dropSize: dropSize};\n logger.debug('Switch history rule index: ' + switchRequest.quality + ' samples: ' + (drops + noDrops) + ' drops: ' + drops);\n break;\n }\n }\n }\n\n return switchRequest;\n }\n\n instance = {\n getMaxIndex: getMaxIndex\n };\n\n setup();\n\n return instance;\n}\n\n\nSwitchHistoryRule.__dashjs_factory_name = 'SwitchHistoryRule';\nexport default FactoryMaker.getClassFactory(SwitchHistoryRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../../core/FactoryMaker';\nimport SwitchRequest from '../SwitchRequest';\nimport Constants from '../../constants/Constants';\nimport MetricsConstants from '../../constants/MetricsConstants';\n\nfunction ThroughputRule(config) {\n\n config = config || {};\n const context = this.context;\n const dashMetrics = config.dashMetrics;\n\n let instance;\n\n function setup() {\n }\n\n function checkConfig() {\n if (!dashMetrics || !dashMetrics.hasOwnProperty('getCurrentBufferState')) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n function getMaxIndex(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n\n if (!rulesContext || !rulesContext.hasOwnProperty('getMediaInfo') || !rulesContext.hasOwnProperty('getMediaType') || !rulesContext.hasOwnProperty('useBufferOccupancyABR') ||\n !rulesContext.hasOwnProperty('getAbrController') || !rulesContext.hasOwnProperty('getScheduleController')) {\n return switchRequest;\n }\n\n checkConfig();\n\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n const currentBufferState = dashMetrics.getCurrentBufferState(mediaType);\n const scheduleController = rulesContext.getScheduleController();\n const abrController = rulesContext.getAbrController();\n const streamInfo = rulesContext.getStreamInfo();\n const streamId = streamInfo ? streamInfo.id : null;\n const isDynamic = streamInfo && streamInfo.manifestInfo ? streamInfo.manifestInfo.isDynamic : null;\n const throughputHistory = abrController.getThroughputHistory();\n const throughput = throughputHistory.getSafeAverageThroughput(mediaType, isDynamic);\n const latency = throughputHistory.getAverageLatency(mediaType);\n const useBufferOccupancyABR = rulesContext.useBufferOccupancyABR();\n\n if (isNaN(throughput) || !currentBufferState || useBufferOccupancyABR) {\n return switchRequest;\n }\n\n if (abrController.getAbandonmentStateFor(streamId, mediaType) !== MetricsConstants.ABANDON_LOAD) {\n if (currentBufferState.state === MetricsConstants.BUFFER_LOADED || isDynamic) {\n switchRequest.quality = abrController.getQualityForBitrate(mediaInfo, throughput, streamId, latency);\n scheduleController.setTimeToLoadDelay(0);\n switchRequest.reason = {throughput: throughput, latency: latency};\n }\n }\n\n return switchRequest;\n }\n\n function reset() {\n // no persistent information to reset\n }\n\n instance = {\n getMaxIndex,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nThroughputRule.__dashjs_factory_name = 'ThroughputRule';\nexport default FactoryMaker.getClassFactory(ThroughputRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Authors:\n * Abdelhak Bentaleb | National University of Singapore | bentaleb@comp.nus.edu.sg\n * Mehmet N. Akcay | Ozyegin University | necmettin.akcay@ozu.edu.tr\n * May Lim | National University of Singapore | maylim@comp.nus.edu.sg\n */\n\nimport FactoryMaker from '../../../../core/FactoryMaker';\nimport Debug from '../../../../core/Debug';\n\nconst WEIGHT_SELECTION_MODES = {\n MANUAL: 'manual_weight_selection',\n RANDOM: 'random_weight_selection',\n DYNAMIC: 'dynamic_weight_selection'\n};\n\nfunction LearningAbrController() {\n const context = this.context;\n\n let instance,\n logger,\n somBitrateNeurons,\n bitrateNormalizationFactor,\n latencyNormalizationFactor,\n minBitrate,\n weights,\n sortedCenters,\n weightSelectionMode;\n\n /**\n * Setup the class\n */\n function _setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n _resetInitialSettings();\n }\n\n /**\n * Reset all values\n */\n function reset() {\n _resetInitialSettings();\n }\n\n /**\n * Reset to initial settings\n * @private\n */\n function _resetInitialSettings() {\n somBitrateNeurons = null;\n bitrateNormalizationFactor = 1;\n latencyNormalizationFactor = 100;\n minBitrate = 0;\n weights = null;\n sortedCenters = null;\n weightSelectionMode = WEIGHT_SELECTION_MODES.DYNAMIC;\n }\n\n /**\n * Returns the maximum throughput\n * @return {number}\n * @private\n */\n function _getMaxThroughput() {\n let maxThroughput = 0;\n\n if (somBitrateNeurons) {\n for (let i = 0; i < somBitrateNeurons.length; i++) {\n let neuron = somBitrateNeurons[i];\n if (neuron.state.throughput > maxThroughput) {\n maxThroughput = neuron.state.throughput;\n }\n }\n }\n\n return maxThroughput;\n }\n\n /**\n *\n * @param {array} w\n * @return {number}\n * @private\n */\n function _getMagnitude(w) {\n const magnitude = w.map((x) => (Math.pow(x, 2))).reduce((sum, now) => sum + now);\n\n return Math.sqrt(magnitude);\n }\n\n /**\n *\n * @param {array} a\n * @param {array} b\n * @param {array} w\n * @return {number}\n * @private\n */\n function _getDistance(a, b, w) {\n let sum = a\n .map((x, i) => (w[i] * (Math.pow(x - b[i], 2)))) // square the difference*w\n .reduce((sum, now) => sum + now); // sum\n let sign = (sum < 0) ? -1 : 1;\n\n return sign * Math.sqrt(Math.abs(sum));\n }\n\n /**\n *\n * @param {object} a\n * @param {object} b\n * @return {number}\n * @private\n */\n function _getNeuronDistance(a, b) {\n let aState = [a.state.throughput, a.state.latency, a.state.rebuffer, a.state.switch];\n let bState = [b.state.throughput, b.state.latency, b.state.rebuffer, b.state.switch];\n\n return _getDistance(aState, bState, [1, 1, 1, 1]);\n }\n\n /**\n *\n * @param {object} winnerNeuron\n * @param {array} somElements\n * @param {array} x\n * @private\n */\n function _updateNeurons(winnerNeuron, somElements, x) {\n for (let i = 0; i < somElements.length; i++) {\n let somNeuron = somElements[i];\n let sigma = 0.1;\n const neuronDistance = _getNeuronDistance(somNeuron, winnerNeuron);\n let neighbourHood = Math.exp(-1 * Math.pow(neuronDistance, 2) / (2 * Math.pow(sigma, 2)));\n _updateNeuronState(somNeuron, x, neighbourHood);\n }\n }\n\n /**\n *\n * @param {object} neuron\n * @param {array} x\n * @param {object} neighbourHood\n * @private\n */\n function _updateNeuronState(neuron, x, neighbourHood) {\n let state = neuron.state;\n let w = [0.01, 0.01, 0.01, 0.01]; // learning rate\n\n state.throughput = state.throughput + (x[0] - state.throughput) * w[0] * neighbourHood;\n state.latency = state.latency + (x[1] - state.latency) * w[1] * neighbourHood;\n state.rebuffer = state.rebuffer + (x[2] - state.rebuffer) * w[2] * neighbourHood;\n state.switch = state.switch + (x[3] - state.switch) * w[3] * neighbourHood;\n }\n\n /**\n *\n * @param {object} currentNeuron\n * @param {number} currentThroughput\n * @return {object}\n * @private\n */\n function _getDownShiftNeuron(currentNeuron, currentThroughput) {\n let maxSuitableBitrate = 0;\n let result = currentNeuron;\n\n if (somBitrateNeurons) {\n for (let i = 0; i < somBitrateNeurons.length; i++) {\n let n = somBitrateNeurons[i];\n if (n.bitrate < currentNeuron.bitrate && n.bitrate > maxSuitableBitrate && currentThroughput > n.bitrate) {\n // possible downshiftable neuron\n maxSuitableBitrate = n.bitrate;\n result = n;\n }\n }\n }\n\n return result;\n }\n\n /**\n *\n * @param {object} mediaInfo\n * @param {number} throughput\n * @param {number} latency\n * @param {number} bufferSize\n * @param {number} playbackRate\n * @param {number} currentQualityIndex\n * @param {object} dynamicWeightsSelector\n * @return {null|*}\n */\n function getNextQuality(mediaInfo, throughput, latency, bufferSize, playbackRate, currentQualityIndex, dynamicWeightsSelector) {\n // For Dynamic Weights Selector\n let currentLatency = latency;\n let currentBuffer = bufferSize;\n let currentThroughput = throughput;\n\n let somElements = _getSomBitrateNeurons(mediaInfo);\n // normalize throughput\n let throughputNormalized = throughput / bitrateNormalizationFactor;\n // saturate values higher than 1\n if (throughputNormalized > 1) {\n throughputNormalized = _getMaxThroughput();\n }\n // normalize latency\n latency = latency / latencyNormalizationFactor;\n\n const targetLatency = 0;\n const targetRebufferLevel = 0;\n const targetSwitch = 0;\n // 10K + video encoding is the recommended throughput\n const throughputDelta = 10000;\n\n logger.debug(`getNextQuality called throughput:${throughputNormalized} latency:${latency} bufferSize:${bufferSize} currentQualityIndex:${currentQualityIndex} playbackRate:${playbackRate}`);\n\n let currentNeuron = somElements[currentQualityIndex];\n let downloadTime = (currentNeuron.bitrate * dynamicWeightsSelector.getSegmentDuration()) / currentThroughput;\n let rebuffer = Math.max(0, (downloadTime - currentBuffer));\n\n // check buffer for possible stall\n if (currentBuffer - downloadTime < dynamicWeightsSelector.getMinBuffer()) {\n logger.debug(`Buffer is low for bitrate= ${currentNeuron.bitrate} downloadTime=${downloadTime} currentBuffer=${currentBuffer} rebuffer=${rebuffer}`);\n return _getDownShiftNeuron(currentNeuron, currentThroughput).qualityIndex;\n }\n\n switch (weightSelectionMode) {\n case WEIGHT_SELECTION_MODES.MANUAL:\n _manualWeightSelection();\n break;\n case WEIGHT_SELECTION_MODES.RANDOM:\n _randomWeightSelection(somElements);\n break;\n case WEIGHT_SELECTION_MODES.DYNAMIC:\n _dynamicWeightSelection(dynamicWeightsSelector, somElements, currentLatency, currentBuffer, rebuffer, currentThroughput, playbackRate);\n break;\n default:\n _dynamicWeightSelection(dynamicWeightsSelector, somElements, currentLatency, currentBuffer, rebuffer, currentThroughput, playbackRate);\n\n }\n\n let minDistance = null;\n let minIndex = null;\n let winnerNeuron = null;\n\n for (let i = 0; i < somElements.length; i++) {\n let somNeuron = somElements[i];\n let somNeuronState = somNeuron.state;\n let somData = [somNeuronState.throughput,\n somNeuronState.latency,\n somNeuronState.rebuffer,\n somNeuronState.switch];\n\n let distanceWeights = weights.slice();\n let nextBuffer = dynamicWeightsSelector.getNextBufferWithBitrate(somNeuron.bitrate, currentBuffer, currentThroughput);\n let isBufferLow = nextBuffer < dynamicWeightsSelector.getMinBuffer();\n if (isBufferLow) {\n logger.debug(`Buffer is low for bitrate=${somNeuron.bitrate} downloadTime=${downloadTime} currentBuffer=${currentBuffer} nextBuffer=${nextBuffer}`);\n }\n // special condition downshift immediately\n if (somNeuron.bitrate > throughput - throughputDelta || isBufferLow) {\n if (somNeuron.bitrate !== minBitrate) {\n // encourage to pick smaller bitrates throughputWeight=100\n distanceWeights[0] = 100;\n }\n }\n\n // calculate the distance with the target\n let distance = _getDistance(somData, [throughputNormalized, targetLatency, targetRebufferLevel, targetSwitch], distanceWeights);\n if (minDistance === null || distance < minDistance) {\n minDistance = distance;\n minIndex = somNeuron.qualityIndex;\n winnerNeuron = somNeuron;\n }\n }\n\n // update current neuron and the neighbourhood with the calculated QoE\n // will punish current if it is not picked\n let bitrateSwitch = Math.abs(currentNeuron.bitrate - winnerNeuron.bitrate) / bitrateNormalizationFactor;\n _updateNeurons(currentNeuron, somElements, [throughputNormalized, latency, rebuffer, bitrateSwitch]);\n\n // update bmu and neighbours with targetQoE=1, targetLatency=0\n _updateNeurons(winnerNeuron, somElements, [throughputNormalized, targetLatency, targetRebufferLevel, bitrateSwitch]);\n\n return minIndex;\n }\n\n /**\n * Option 1: Manual weights\n * @private\n */\n function _manualWeightSelection() {\n let throughputWeight = 0.4;\n let latencyWeight = 0.4;\n let bufferWeight = 0.4;\n let switchWeight = 0.4;\n\n weights = [throughputWeight, latencyWeight, bufferWeight, switchWeight]; // throughput, latency, buffer, switch\n }\n\n /**\n * Option 2: Random (Xavier) weights\n * @param {array} somElements\n * @private\n */\n function _randomWeightSelection(somElements) {\n weights = _getXavierWeights(somElements.length, 4);\n }\n\n /**\n * Dynamic Weight Selector weights\n * @param {object} dynamicWeightsSelector\n * @param {array} somElements\n * @param {number} currentLatency\n * @param {number} currentBuffer\n * @param {number} rebuffer\n * @param {number} currentThroughput\n * @param {number} playbackRate\n * @private\n */\n function _dynamicWeightSelection(dynamicWeightsSelector, somElements, currentLatency, currentBuffer, rebuffer, currentThroughput, playbackRate) {\n if (!weights) {\n weights = sortedCenters[sortedCenters.length - 1];\n }\n // Dynamic Weights Selector (step 2/2: find weights)\n let weightVector = dynamicWeightsSelector.findWeightVector(somElements, currentLatency, currentBuffer, rebuffer, currentThroughput, playbackRate);\n if (weightVector !== null && weightVector !== -1) { // null: something went wrong, -1: constraints not met\n weights = weightVector;\n }\n }\n\n /**\n *\n * @param {number }neuronCount\n * @param {number }weightCount\n * @return {array}\n * @private\n */\n function _getXavierWeights(neuronCount, weightCount) {\n let W = [];\n let upperBound = Math.sqrt((2 / neuronCount));\n\n for (let i = 0; i < weightCount; i++) {\n W.push(Math.random() * upperBound);\n }\n\n weights = W;\n\n return weights;\n }\n\n /**\n *\n * @param {object} mediaInfo\n * @return {array}\n * @private\n */\n function _getSomBitrateNeurons(mediaInfo) {\n if (!somBitrateNeurons) {\n somBitrateNeurons = [];\n const bitrateList = mediaInfo.bitrateList;\n let bitrateVector = [];\n minBitrate = bitrateList[0].bandwidth;\n\n bitrateList.forEach(element => {\n bitrateVector.push(element.bandwidth);\n if (element.bandwidth < minBitrate) {\n minBitrate = element.bandwidth;\n }\n });\n bitrateNormalizationFactor = _getMagnitude(bitrateVector);\n\n for (let i = 0; i < bitrateList.length; i++) {\n let neuron = {\n qualityIndex: i,\n bitrate: bitrateList[i].bandwidth,\n state: {\n // normalize throughputs\n throughput: bitrateList[i].bandwidth / bitrateNormalizationFactor,\n latency: 0,\n rebuffer: 0,\n switch: 0\n }\n };\n somBitrateNeurons.push(neuron);\n }\n\n sortedCenters = _getInitialKmeansPlusPlusCenters(somBitrateNeurons);\n }\n\n return somBitrateNeurons;\n }\n\n /**\n *\n * @param {number} size\n * @return {array}\n * @private\n */\n function _getRandomData(size) {\n let dataArray = [];\n\n for (let i = 0; i < size; i++) {\n let data = [\n Math.random() * _getMaxThroughput(), //throughput\n Math.random(), //latency\n Math.random(), //buffersize\n Math.random() //switch\n ];\n dataArray.push(data);\n }\n\n return dataArray;\n }\n\n /**\n *\n * @param {array} somElements\n * @return {array}\n * @private\n */\n function _getInitialKmeansPlusPlusCenters(somElements) {\n let centers = [];\n let randomDataSet = _getRandomData(Math.pow(somElements.length, 2));\n centers.push(randomDataSet[0]);\n let distanceWeights = [1, 1, 1, 1];\n\n for (let k = 1; k < somElements.length; k++) {\n let nextPoint = null;\n let maxDistance = null;\n for (let i = 0; i < randomDataSet.length; i++) {\n let currentPoint = randomDataSet[i];\n let minDistance = null;\n for (let j = 0; j < centers.length; j++) {\n let distance = _getDistance(currentPoint, centers[j], distanceWeights);\n if (minDistance === null || distance < minDistance) {\n minDistance = distance;\n }\n }\n if (maxDistance === null || minDistance > maxDistance) {\n nextPoint = currentPoint;\n maxDistance = minDistance;\n }\n }\n centers.push(nextPoint);\n }\n\n // find the least similar center\n let maxDistance = null;\n let leastSimilarIndex = null;\n for (let i = 0; i < centers.length; i++) {\n let distance = 0;\n for (let j = 0; j < centers.length; j++) {\n if (i === j) continue;\n distance += _getDistance(centers[i], centers[j], distanceWeights);\n }\n if (maxDistance === null || distance > maxDistance) {\n maxDistance = distance;\n leastSimilarIndex = i;\n }\n }\n\n // move centers to sortedCenters\n let sortedCenters = [];\n sortedCenters.push(centers[leastSimilarIndex]);\n centers.splice(leastSimilarIndex, 1);\n while (centers.length > 0) {\n let minDistance = null;\n let minIndex = null;\n for (let i = 0; i < centers.length; i++) {\n let distance = _getDistance(sortedCenters[0], centers[i], distanceWeights);\n if (minDistance === null || distance < minDistance) {\n minDistance = distance;\n minIndex = i;\n }\n }\n sortedCenters.push(centers[minIndex]);\n centers.splice(minIndex, 1);\n }\n\n return sortedCenters;\n }\n\n instance = {\n getNextQuality,\n reset\n };\n\n _setup();\n return instance;\n}\n\nLearningAbrController.__dashjs_factory_name = 'LearningAbrController';\nexport default FactoryMaker.getClassFactory(LearningAbrController);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Authors:\n * Abdelhak Bentaleb | National University of Singapore | bentaleb@comp.nus.edu.sg\n * Mehmet N. Akcay | Ozyegin University | necmettin.akcay@ozu.edu.tr\n * May Lim | National University of Singapore | maylim@comp.nus.edu.sg\n */\nimport FactoryMaker from '../../../../core/FactoryMaker';\nimport QoeInfo from './QoeInfo';\n\nfunction LoLpQoeEvaluator() {\n\n let instance,\n voPerSegmentQoeInfo,\n segmentDuration,\n maxBitrateKbps,\n minBitrateKbps;\n\n function _setup() {\n _resetInitialSettings();\n }\n\n function _resetInitialSettings() {\n voPerSegmentQoeInfo = null;\n segmentDuration = null;\n maxBitrateKbps = null;\n minBitrateKbps = null;\n }\n\n function setupPerSegmentQoe(sDuration, maxBrKbps, minBrKbps) {\n // Set up Per Segment QoeInfo\n voPerSegmentQoeInfo = _createQoeInfo('segment', sDuration, maxBrKbps, minBrKbps);\n segmentDuration = sDuration;\n maxBitrateKbps = maxBrKbps;\n minBitrateKbps = minBrKbps;\n }\n\n function _createQoeInfo(fragmentType, fragmentDuration, maxBitrateKbps, minBitrateKbps) {\n /*\n * [Weights][Source: Abdelhak Bentaleb, 2020 (last updated: 30 Mar 2020)]\n * bitrateReward: segment duration, e.g. 0.5s\n * bitrateSwitchPenalty: 0.02s or 1s if the bitrate switch is too important\n * rebufferPenalty: max encoding bitrate, e.g. 1000kbps\n * latencyPenalty: if L ≤ 1.1 seconds then = min encoding bitrate * 0.05, otherwise = max encoding bitrate * 0.1\n * playbackSpeedPenalty: min encoding bitrate, e.g. 200kbps\n */\n\n // Create new QoeInfo object\n let qoeInfo = new QoeInfo();\n qoeInfo.type = fragmentType;\n\n // Set weight: bitrateReward\n // set some safe value, else consider throwing error\n if (!fragmentDuration) {\n qoeInfo.weights.bitrateReward = 1;\n }\n else {\n qoeInfo.weights.bitrateReward = fragmentDuration;\n }\n\n // Set weight: bitrateSwitchPenalty\n // qoeInfo.weights.bitrateSwitchPenalty = 0.02;\n qoeInfo.weights.bitrateSwitchPenalty = 1;\n\n // Set weight: rebufferPenalty\n // set some safe value, else consider throwing error\n if (!maxBitrateKbps) {\n qoeInfo.weights.rebufferPenalty = 1000;\n }\n else {\n qoeInfo.weights.rebufferPenalty = maxBitrateKbps;\n }\n\n // Set weight: latencyPenalty\n qoeInfo.weights.latencyPenalty = [];\n qoeInfo.weights.latencyPenalty.push({ threshold: 1.1, penalty: (minBitrateKbps * 0.05) });\n qoeInfo.weights.latencyPenalty.push({ threshold: 100000000, penalty: (maxBitrateKbps * 0.1) });\n\n // Set weight: playbackSpeedPenalty\n if (!minBitrateKbps) qoeInfo.weights.playbackSpeedPenalty = 200; // set some safe value, else consider throwing error\n else qoeInfo.weights.playbackSpeedPenalty = minBitrateKbps;\n\n return qoeInfo;\n }\n\n function logSegmentMetrics(segmentBitrate, segmentRebufferTime, currentLatency, currentPlaybackSpeed) {\n if (voPerSegmentQoeInfo) {\n _logMetricsInQoeInfo(segmentBitrate, segmentRebufferTime, currentLatency, currentPlaybackSpeed, voPerSegmentQoeInfo);\n }\n }\n\n function _logMetricsInQoeInfo(bitrate, rebufferTime, latency, playbackSpeed, qoeInfo) {\n // Update: bitrate Weighted Sum value\n qoeInfo.bitrateWSum += (qoeInfo.weights.bitrateReward * bitrate);\n\n // Update: bitrateSwitch Weighted Sum value\n if (qoeInfo.lastBitrate) {\n qoeInfo.bitrateSwitchWSum += (qoeInfo.weights.bitrateSwitchPenalty * Math.abs(bitrate - qoeInfo.lastBitrate));\n }\n qoeInfo.lastBitrate = bitrate;\n\n // Update: rebuffer Weighted Sum value\n qoeInfo.rebufferWSum += (qoeInfo.weights.rebufferPenalty * rebufferTime);\n\n // Update: latency Weighted Sum value\n for (let i = 0; i < qoeInfo.weights.latencyPenalty.length; i++) {\n let latencyRange = qoeInfo.weights.latencyPenalty[i];\n if (latency <= latencyRange.threshold) {\n qoeInfo.latencyWSum += (latencyRange.penalty * latency);\n break;\n }\n }\n\n // Update: playbackSpeed Weighted Sum value\n qoeInfo.playbackSpeedWSum += (qoeInfo.weights.playbackSpeedPenalty * Math.abs(1 - playbackSpeed));\n\n // Update: Total Qoe value\n qoeInfo.totalQoe = qoeInfo.bitrateWSum - qoeInfo.bitrateSwitchWSum - qoeInfo.rebufferWSum - qoeInfo.latencyWSum - qoeInfo.playbackSpeedWSum;\n }\n\n // Returns current Per Segment QoeInfo\n function getPerSegmentQoe() {\n return voPerSegmentQoeInfo;\n }\n\n // For one-time use only\n // Returns totalQoe based on a single set of metrics.\n function calculateSingleUseQoe(segmentBitrate, segmentRebufferTime, currentLatency, currentPlaybackSpeed) {\n let singleUseQoeInfo = null;\n\n if (segmentDuration && maxBitrateKbps && minBitrateKbps) {\n singleUseQoeInfo = _createQoeInfo('segment', segmentDuration, maxBitrateKbps, minBitrateKbps);\n }\n\n if (singleUseQoeInfo) {\n _logMetricsInQoeInfo(segmentBitrate, segmentRebufferTime, currentLatency, currentPlaybackSpeed, singleUseQoeInfo);\n return singleUseQoeInfo.totalQoe;\n } else {\n // Something went wrong..\n return 0;\n }\n }\n\n function reset() {\n _resetInitialSettings();\n }\n\n instance = {\n setupPerSegmentQoe,\n logSegmentMetrics,\n getPerSegmentQoe,\n calculateSingleUseQoe,\n reset\n };\n\n _setup();\n\n return instance;\n}\n\nLoLpQoeEvaluator.__dashjs_factory_name = 'LoLpQoeEvaluator';\nexport default FactoryMaker.getClassFactory(LoLpQoeEvaluator);\n\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Authors:\n * Abdelhak Bentaleb | National University of Singapore | bentaleb@comp.nus.edu.sg\n * Mehmet N. Akcay | Ozyegin University | necmettin.akcay@ozu.edu.tr\n * May Lim | National University of Singapore | maylim@comp.nus.edu.sg\n */\n\nimport Debug from '../../../../core/Debug';\nimport FactoryMaker from '../../../../core/FactoryMaker';\nimport LearningAbrController from './LearningAbrController';\nimport LoLpQoeEvaluator from './LoLpQoEEvaluator';\nimport SwitchRequest from '../../SwitchRequest';\nimport MetricsConstants from '../../../constants/MetricsConstants';\nimport LoLpWeightSelector from './LoLpWeightSelector';\nimport Constants from '../../../constants/Constants';\n\nconst DWS_TARGET_LATENCY = 1.5;\nconst DWS_BUFFER_MIN = 0.3;\n\nfunction LoLPRule(config) {\n\n config = config || {};\n\n let dashMetrics = config.dashMetrics;\n let context = this.context;\n\n let logger,\n instance,\n learningController,\n qoeEvaluator;\n\n function _setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n learningController = LearningAbrController(context).create();\n qoeEvaluator = LoLpQoeEvaluator(context).create();\n }\n\n function getMaxIndex(rulesContext) {\n try {\n let switchRequest = SwitchRequest(context).create();\n let mediaType = rulesContext.getMediaInfo().type;\n let abrController = rulesContext.getAbrController();\n const streamInfo = rulesContext.getStreamInfo();\n let currentQuality = abrController.getQualityFor(mediaType, streamInfo.id);\n const mediaInfo = rulesContext.getMediaInfo();\n const bufferStateVO = dashMetrics.getCurrentBufferState(mediaType);\n const scheduleController = rulesContext.getScheduleController();\n const currentBufferLevel = dashMetrics.getCurrentBufferLevel(mediaType, true);\n const isDynamic = streamInfo && streamInfo.manifestInfo ? streamInfo.manifestInfo.isDynamic : null;\n const playbackController = scheduleController.getPlaybackController();\n let latency = playbackController.getCurrentLiveLatency();\n\n if (!rulesContext.useLoLPABR() || (mediaType === Constants.AUDIO)) {\n return switchRequest;\n }\n\n if (!latency) {\n latency = 0;\n }\n\n const playbackRate = playbackController.getPlaybackRate();\n const throughputHistory = abrController.getThroughputHistory();\n const throughput = throughputHistory.getSafeAverageThroughput(mediaType, isDynamic);\n logger.debug(`Throughput ${Math.round(throughput)} kbps`);\n\n if (isNaN(throughput) || !bufferStateVO) {\n return switchRequest;\n }\n\n if (abrController.getAbandonmentStateFor(streamInfo.id, mediaType) === MetricsConstants.ABANDON_LOAD) {\n return switchRequest;\n }\n\n // QoE parameters\n let bitrateList = mediaInfo.bitrateList; // [{bandwidth: 200000, width: 640, height: 360}, ...]\n let segmentDuration = rulesContext.getRepresentationInfo().fragmentDuration;\n let minBitrateKbps = bitrateList[0].bandwidth / 1000.0; // min bitrate level\n let maxBitrateKbps = bitrateList[bitrateList.length - 1].bandwidth / 1000.0; // max bitrate level\n for (let i = 0; i < bitrateList.length; i++) { // in case bitrateList is not sorted as expected\n let b = bitrateList[i].bandwidth / 1000.0;\n if (b > maxBitrateKbps)\n maxBitrateKbps = b;\n else if (b < minBitrateKbps) {\n minBitrateKbps = b;\n }\n }\n\n // Learning rule pre-calculations\n let currentBitrate = bitrateList[currentQuality].bandwidth;\n let currentBitrateKbps = currentBitrate / 1000.0;\n let httpRequest = dashMetrics.getCurrentHttpRequest(mediaType, true);\n let lastFragmentDownloadTime = (httpRequest.tresponse.getTime() - httpRequest.trequest.getTime()) / 1000;\n let segmentRebufferTime = lastFragmentDownloadTime > segmentDuration ? lastFragmentDownloadTime - segmentDuration : 0;\n qoeEvaluator.setupPerSegmentQoe(segmentDuration, maxBitrateKbps, minBitrateKbps);\n qoeEvaluator.logSegmentMetrics(currentBitrateKbps, segmentRebufferTime, latency, playbackRate);\n\n /*\n * Dynamic Weights Selector (step 1/2: initialization)\n */\n let dynamicWeightsSelector = LoLpWeightSelector(context).create({\n targetLatency: DWS_TARGET_LATENCY,\n bufferMin: DWS_BUFFER_MIN,\n segmentDuration,\n qoeEvaluator\n });\n\n /*\n * Select next quality\n */\n switchRequest.quality = learningController.getNextQuality(mediaInfo, throughput * 1000, latency, currentBufferLevel, playbackRate, currentQuality, dynamicWeightsSelector);\n switchRequest.reason = { throughput: throughput, latency: latency };\n switchRequest.priority = SwitchRequest.PRIORITY.STRONG;\n\n scheduleController.setTimeToLoadDelay(0);\n\n if (switchRequest.quality !== currentQuality) {\n console.log('[TgcLearningRule][' + mediaType + '] requesting switch to index: ', switchRequest.quality, 'Average throughput', Math.round(throughput), 'kbps');\n }\n\n return switchRequest;\n } catch (e) {\n throw e;\n }\n }\n\n /**\n * Reset objects to their initial state\n * @private\n */\n function _resetInitialSettings() {\n learningController.reset();\n qoeEvaluator.reset();\n }\n\n /**\n * Reset the rule\n */\n function reset() {\n _resetInitialSettings();\n }\n\n instance = {\n getMaxIndex,\n reset\n };\n\n _setup();\n\n return instance;\n}\n\nLoLPRule.__dashjs_factory_name = 'LoLPRule';\nexport default FactoryMaker.getClassFactory(LoLPRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Authors:\n * Abdelhak Bentaleb | National University of Singapore | bentaleb@comp.nus.edu.sg\n * Mehmet N. Akcay | Ozyegin University | necmettin.akcay@ozu.edu.tr\n * May Lim | National University of Singapore | maylim@comp.nus.edu.sg\n */\n\nimport FactoryMaker from '../../../../core/FactoryMaker';\n\nfunction LoLpWeightSelector(config) {\n let targetLatency = config.targetLatency;\n let bufferMin = config.bufferMin;\n let segmentDuration = config.segmentDuration;\n let qoeEvaluator = config.qoeEvaluator;\n let instance,\n valueList,\n weightTypeCount,\n weightOptions,\n previousLatency;\n\n /**\n *\n * @private\n */\n function _setup() {\n _resetInitialSettings();\n }\n\n /**\n *\n * @private\n */\n function _resetInitialSettings() {\n valueList = [0.2, 0.4, 0.6, 0.8, 1];\n weightTypeCount = 4;\n weightOptions = _getPermutations(valueList, weightTypeCount);\n previousLatency = 0;\n }\n\n /**\n * Next, at each segment boundary, ABR to input current neurons and target state (only used in Method II) to find the desired weight vector\n * @param {array} neurons\n * @param {number} currentLatency\n * @param {number} currentBuffer\n * @param {number} currentRebuffer\n * @param {number} currentThroughput\n * @param {number} playbackRate\n * @return {null}\n * @private\n */\n function findWeightVector(neurons, currentLatency, currentBuffer, currentRebuffer, currentThroughput, playbackRate) {\n let maxQoE = null;\n let winnerWeights = null;\n let winnerBitrate = null;\n let deltaLatency = Math.abs(currentLatency - previousLatency);\n\n // For each neuron, m\n neurons.forEach((neuron) => {\n\n // For each possible weight vector, z\n // E.g. For [ throughput, latency, buffer, playbackRate, QoE ]\n // Possible weightVector = [ 0.2, 0.4, 0.2, 0, 0.2 ]\n weightOptions.forEach((weightVector) => {\n\n // Apply weightVector to neuron, compute utility and determine winnerWeights\n // Method I: Utility based on QoE given current state\n\n let weightsObj = {\n throughput: weightVector[0],\n latency: weightVector[1],\n buffer: weightVector[2],\n switch: weightVector[3]\n };\n\n let downloadTime = (neuron.bitrate * segmentDuration) / currentThroughput;\n let nextBuffer = getNextBuffer(currentBuffer, downloadTime);\n let rebuffer = Math.max(0.00001, (downloadTime - nextBuffer));\n let wt;\n if (weightsObj.buffer === 0) {\n wt = 10;\n } else {\n wt = (1 / weightsObj.buffer);\n }\n let weightedRebuffer = wt * rebuffer;\n\n if (weightsObj.latency === 0) {\n wt = 10;\n } else {\n wt = (1 / weightsObj.latency); // inverse the weight because wt and latency should have positive relationship, i.e., higher latency = higher wt\n }\n let weightedLatency = wt * neuron.state.latency;\n\n let totalQoE = qoeEvaluator.calculateSingleUseQoe(neuron.bitrate, weightedRebuffer, weightedLatency, playbackRate);\n if ((maxQoE === null || totalQoE > maxQoE) && _checkConstraints(currentLatency, nextBuffer, deltaLatency)) {\n maxQoE = totalQoE;\n winnerWeights = weightVector;\n winnerBitrate = neuron.bitrate;\n }\n });\n });\n\n // winnerWeights was found, check if constraints are satisfied\n if (winnerWeights === null && winnerBitrate === null) {\n winnerWeights = -1;\n }\n\n previousLatency = currentLatency;\n return winnerWeights;\n }\n\n /**\n *\n * @param {number} nextLatency\n * @param {number} nextBuffer\n * @param {number} deltaLatency\n * @return {boolean}\n * @private\n */\n function _checkConstraints(nextLatency, nextBuffer, deltaLatency) {\n // A1\n // disabled till we find a better way of estimating latency\n // fails for all with current value\n if (nextLatency > targetLatency + deltaLatency) {\n return false;\n }\n\n return nextBuffer >= bufferMin;\n }\n\n /**\n *\n * @param {array} list\n * @param {number} length\n * @return {*}\n * @private\n */\n function _getPermutations(list, length) {\n // Copy initial values as arrays\n let perm = list.map(function (val) {\n return [val];\n });\n // Our permutation generator\n let generate = function (perm, length, currLen) {\n // Reached desired length\n if (currLen === length) {\n return perm;\n }\n // For each existing permutation\n let len = perm.length;\n for (let i = 0; i < len; i++) {\n let currPerm = perm.shift();\n // Create new permutation\n for (let k = 0; k < list.length; k++) {\n perm.push(currPerm.concat(list[k]));\n }\n }\n // Recurse\n return generate(perm, length, currLen + 1);\n };\n // Start with size 1 because of initial values\n return generate(perm, length, 1);\n }\n\n /**\n *\n * @return {number}\n */\n function getMinBuffer() {\n return bufferMin;\n }\n\n /**\n *\n * @return {number}\n */\n function getSegmentDuration() {\n return segmentDuration;\n }\n\n /**\n *\n * @param {number} bitrateToDownload\n * @param {number} currentBuffer\n * @param {number} currentThroughput\n * @return {number}\n */\n function getNextBufferWithBitrate(bitrateToDownload, currentBuffer, currentThroughput) {\n let downloadTime = (bitrateToDownload * segmentDuration) / currentThroughput;\n return getNextBuffer(currentBuffer, downloadTime);\n }\n\n /**\n *\n * @param {number} currentBuffer\n * @param {number} downloadTime\n * @return {number}\n */\n function getNextBuffer(currentBuffer, downloadTime) {\n const segmentDuration = getSegmentDuration();\n let nextBuffer;\n if (downloadTime > segmentDuration) {\n nextBuffer = currentBuffer - segmentDuration;\n } else {\n nextBuffer = currentBuffer + segmentDuration - downloadTime;\n }\n return nextBuffer;\n }\n\n instance = {\n getMinBuffer,\n getSegmentDuration,\n getNextBufferWithBitrate,\n getNextBuffer,\n findWeightVector\n };\n\n _setup();\n\n return instance;\n}\n\nLoLpWeightSelector.__dashjs_factory_name = 'LoLpWeightSelector';\nexport default FactoryMaker.getClassFactory(LoLpWeightSelector);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @class\n * @ignore\n */\nclass QoeInfo {\n\n constructor() {\n // Type e.g. 'segment'\n this.type = null;\n\n // Store lastBitrate for calculation of bitrateSwitchWSum\n this.lastBitrate = null;\n\n // Weights for each Qoe factor\n this.weights = {};\n this.weights.bitrateReward = null;\n this.weights.bitrateSwitchPenalty = null;\n this.weights.rebufferPenalty = null;\n this.weights.latencyPenalty = null;\n this.weights.playbackSpeedPenalty = null;\n\n // Weighted Sum for each Qoe factor\n this.bitrateWSum = 0; // kbps\n this.bitrateSwitchWSum = 0; // kbps\n this.rebufferWSum = 0; // seconds\n this.latencyWSum = 0; // seconds\n this.playbackSpeedWSum = 0; // e.g. 0.95, 1.0, 1.05\n\n // Store total Qoe value based on current Weighted Sum values\n this.totalQoe = 0;\n }\n}\n\nexport default QoeInfo;\n","/**\n* The copyright in this software is being made available under the BSD License,\n* included below. This software may be subject to other third party and contributor\n* rights, including patent rights, and no such rights are granted under this license.\n*\n* Copyright (c) 2013, Dash Industry Forum.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n* * Redistributions of source code must retain the above copyright notice, this\n* list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation and/or\n* other materials provided with the distribution.\n* * Neither the name of Dash Industry Forum nor the names of its\n* contributors may be used to endorse or promote products derived from this software\n* without specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n* POSSIBILITY OF SUCH DAMAGE.\n*/\nimport FactoryMaker from '../../core/FactoryMaker';\nimport { checkInteger } from '../utils/SupervisorTools';\n\nfunction CustomTimeRanges(/*config*/) {\n let customTimeRangeArray = [];\n let length = 0;\n\n function add(start, end) {\n let i = 0;\n\n for (i = 0; (i < this.customTimeRangeArray.length) && (start > this.customTimeRangeArray[i].start); i++);\n\n this.customTimeRangeArray.splice(i, 0, {start: start,end: end});\n\n for (i = 0; i < this.customTimeRangeArray.length - 1; i++) {\n if (this.mergeRanges(i,i + 1)) {\n i--;\n }\n }\n this.length = this.customTimeRangeArray.length;\n }\n\n function clear() {\n this.customTimeRangeArray = [];\n this.length = 0;\n }\n\n function remove(start, end) {\n for (let i = 0; i < this.customTimeRangeArray.length; i++) {\n if (start <= this.customTimeRangeArray[i].start && end >= this.customTimeRangeArray[i].end) {\n // |--------------Range i-------|\n //|---------------Range to remove ---------------|\n // or\n //|--------------Range i-------|\n //|--------------Range to remove ---------------|\n // or\n // |--------------Range i-------|\n //|--------------Range to remove ---------------|\n this.customTimeRangeArray.splice(i,1);\n i--;\n\n } else if (start > this.customTimeRangeArray[i].start && end < this.customTimeRangeArray[i].end) {\n //|-----------------Range i----------------|\n // |-------Range to remove -----|\n this.customTimeRangeArray.splice(i + 1, 0, {start: end,end: this.customTimeRangeArray[i].end});\n this.customTimeRangeArray[i].end = start;\n break;\n } else if ( start > this.customTimeRangeArray[i].start && start < this.customTimeRangeArray[i].end) {\n //|-----------Range i----------|\n // |---------Range to remove --------|\n // or\n //|-----------------Range i----------------|\n // |-------Range to remove -----|\n this.customTimeRangeArray[i].end = start;\n } else if ( end > this.customTimeRangeArray[i].start && end < this.customTimeRangeArray[i].end) {\n // |-----------Range i----------|\n //|---------Range to remove --------|\n // or\n //|-----------------Range i----------------|\n //|-------Range to remove -----|\n this.customTimeRangeArray[i].start = end;\n }\n }\n\n this.length = this.customTimeRangeArray.length;\n }\n\n function mergeRanges(rangeIndex1, rangeIndex2) {\n let range1 = this.customTimeRangeArray[rangeIndex1];\n let range2 = this.customTimeRangeArray[rangeIndex2];\n\n if (range1.start <= range2.start && range2.start <= range1.end && range1.end <= range2.end) {\n //|-----------Range1----------|\n // |-----------Range2----------|\n range1.end = range2.end;\n this.customTimeRangeArray.splice(rangeIndex2,1);\n return true;\n\n } else if (range2.start <= range1.start && range1.start <= range2.end && range2.end <= range1.end) {\n // |-----------Range1----------|\n //|-----------Range2----------|\n range1.start = range2.start;\n this.customTimeRangeArray.splice(rangeIndex2,1);\n return true;\n } else if (range2.start <= range1.start && range1.start <= range2.end && range1.end <= range2.end) {\n // |--------Range1-------|\n //|---------------Range2--------------|\n this.customTimeRangeArray.splice(rangeIndex1,1);\n return true;\n } else if (range1.start <= range2.start && range2.start <= range1.end && range2.end <= range1.end) {\n //|-----------------Range1--------------|\n // |-----------Range2----------|\n this.customTimeRangeArray.splice(rangeIndex2,1);\n return true;\n }\n return false;\n }\n\n function start(index) {\n checkInteger(index);\n\n if (index >= this.customTimeRangeArray.length || index < 0) {\n return NaN;\n }\n\n return this.customTimeRangeArray[index].start;\n }\n\n function end(index) {\n checkInteger(index);\n\n if (index >= this.customTimeRangeArray.length || index < 0) {\n return NaN;\n }\n\n return this.customTimeRangeArray[index].end;\n }\n\n return {\n customTimeRangeArray: customTimeRangeArray,\n length: length,\n add: add,\n clear: clear,\n remove: remove,\n mergeRanges: mergeRanges,\n start: start,\n end: end\n };\n}\nCustomTimeRanges.__dashjs_factory_name = 'CustomTimeRanges';\nexport default FactoryMaker.getClassFactory(CustomTimeRanges);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../constants/Constants';\n\nexport function checkParameterType(parameter, type) {\n if (typeof parameter !== type) {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n}\n\nexport function checkInteger(parameter) {\n const isInt = parameter !== null && !isNaN(parameter) && (parameter % 1 === 0);\n\n if (!isInt) {\n throw Constants.BAD_ARGUMENT_ERROR + ' : argument is not an integer';\n }\n}\n\nexport function checkRange(parameter, min, max) {\n if (parameter < min || parameter > max) {\n throw Constants.BAD_ARGUMENT_ERROR + ' : argument out of range';\n }\n}\n\nexport function checkIsVideoOrAudioType(type) {\n if (typeof type !== 'string' || (type !== Constants.AUDIO && type !== Constants.VIDEO)) {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n}","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc This Object holds reference to the HTTPRequest for manifest, fragment and xlink loading.\n * Members which are not defined in ISO23009-1 Annex D should be prefixed by a _ so that they are ignored\n * by Metrics Reporting code.\n * @ignore\n */\nclass HTTPRequest {\n /**\n * @class\n */\n constructor() {\n /**\n * Identifier of the TCP connection on which the HTTP request was sent.\n * @public\n */\n this.tcpid = null;\n /**\n * This is an optional parameter and should not be included in HTTP request/response transactions for progressive download.\n * The type of the request:\n * - MPD\n * - XLink expansion\n * - Initialization Fragment\n * - Index Fragment\n * - Media Fragment\n * - Bitstream Switching Fragment\n * - other\n * @public\n */\n this.type = null;\n /**\n * The original URL (before any redirects or failures)\n * @public\n */\n this.url = null;\n /**\n * The actual URL requested, if different from above\n * @public\n */\n this.actualurl = null;\n /**\n * The contents of the byte-range-spec part of the HTTP Range header.\n * @public\n */\n this.range = null;\n /**\n * Real-Time | The real time at which the request was sent.\n * @public\n */\n this.trequest = null;\n /**\n * Real-Time | The real time at which the first byte of the response was received.\n * @public\n */\n this.tresponse = null;\n /**\n * The HTTP response code.\n * @public\n */\n this.responsecode = null;\n /**\n * The duration of the throughput trace intervals (ms), for successful requests only.\n * @public\n */\n this.interval = null;\n /**\n * Throughput traces, for successful requests only.\n * @public\n */\n this.trace = [];\n\n /**\n * Type of stream (\"audio\" | \"video\" etc..)\n * @public\n */\n this._stream = null;\n /**\n * Real-Time | The real time at which the request finished.\n * @public\n */\n this._tfinish = null;\n /**\n * The duration of the media requests, if available, in seconds.\n * @public\n */\n this._mediaduration = null;\n /**\n * The media segment quality\n * @public\n */\n this._quality = null;\n /**\n * all the response headers from request.\n * @public\n */\n this._responseHeaders = null;\n /**\n * The selected service location for the request. string.\n * @public\n */\n this._serviceLocation = null;\n /**\n * The type of the loader that was used. Distinguish between fetch loader and xhr loader\n */\n this._fileLoaderType = null;\n }\n}\n\n/**\n * @classdesc This Object holds reference to the progress of the HTTPRequest.\n * @ignore\n */\nclass HTTPRequestTrace {\n /**\n * @class\n */\n constructor() {\n /**\n * Real-Time | Measurement stream start.\n * @public\n */\n this.s = null;\n /**\n * Measurement stream duration (ms).\n * @public\n */\n this.d = null;\n /**\n * List of integers counting the bytes received in each trace interval within the measurement stream.\n * @public\n */\n this.b = [];\n }\n}\n\nHTTPRequest.GET = 'GET';\nHTTPRequest.HEAD = 'HEAD';\nHTTPRequest.MPD_TYPE = 'MPD';\nHTTPRequest.XLINK_EXPANSION_TYPE = 'XLinkExpansion';\nHTTPRequest.INIT_SEGMENT_TYPE = 'InitializationSegment';\nHTTPRequest.INDEX_SEGMENT_TYPE = 'IndexSegment';\nHTTPRequest.MEDIA_SEGMENT_TYPE = 'MediaSegment';\nHTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE = 'BitstreamSwitchingSegment';\nHTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE = 'FragmentInfoSegment';\nHTTPRequest.DVB_REPORTING_TYPE = 'DVBReporting';\nHTTPRequest.LICENSE = 'license';\nHTTPRequest.CONTENT_STEERING_TYPE = 'ContentSteering';\nHTTPRequest.OTHER_TYPE = 'other';\n\nexport {HTTPRequest, HTTPRequestTrace};\n"],"sourceRoot":""}