{"version":3,"sources":["webpack:///./node_modules/_global@4.3.2@global/document.js","webpack:///./node_modules/_safe-json-parse@4.0.0@safe-json-parse/tuple.js","webpack:///./node_modules/_keycode@2.2.1@keycode/index.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/mp4/index.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/playlist-selectors.js","webpack:///./node_modules/_@xmldom_xmldom@0.7.9@@xmldom/xmldom/lib/index.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/decode-b64-to-uint8-array.js","webpack:///./node_modules/_m3u8-parser@2.1.0@m3u8-parser/es5/parser.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/add-text-track-data.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/codecs.js","webpack:///./node_modules/_@babel_runtime@7.20.6@@babel/runtime/helpers/inherits.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/resolve-url.js","webpack:///./node_modules/_@babel_runtime@7.20.6@@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/_videojs-vtt.js@0.15.4@videojs-vtt.js/lib/vtt.js","webpack:///./node_modules/_webwackify@0.1.6@webwackify/index.js","webpack:///./node_modules/_xtend@4.0.2@xtend/immutable.js","webpack:///./node_modules/_tsml@1.0.1@tsml/tsml.js","webpack:///./node_modules/_m3u8-parser@2.1.0@m3u8-parser/es5/index.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/classof.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/playback-watcher.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/flash-transmuxer-worker.js","webpack:///./node_modules/_@xmldom_xmldom@0.7.9@@xmldom/xmldom/lib/conventions.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/playlist-loader.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/utils/exp-golomb.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/flash-source-buffer.js","webpack:///./node_modules/_base64-js@1.5.1@base64-js/index.js","webpack:///./node_modules/_aes-decrypter@1.0.3@aes-decrypter/es5/stream.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/ad-cue-tags.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/mp4-helpers.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/opus-helpers.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/ebml-helpers.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/nal-helpers.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/containers.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/media-types.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/sync-controller.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/m2ts/caption-stream.js","webpack:///./node_modules/_videojs-vtt.js@0.12.6@videojs-vtt.js/lib/vttregion.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/a-possible-prototype.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/flash-constants.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/byte-helpers.js","webpack:///./node_modules/_@xmldom_xmldom@0.7.9@@xmldom/xmldom/lib/sax.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/resolve-url.js","webpack:///./node_modules/_mux.js@6.0.1@mux.js/lib/utils/numbers.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/data/silence.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/utils/clock.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/codecs/adts.js","webpack:///./node_modules/_isarray@1.0.0@isarray/index.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/flash-media-source.js","webpack:///./node_modules/_@videojs_xhr@2.6.0@@videojs/xhr/lib/http-handler.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/install-error-cause.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/decrypter-worker.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/bin-utils.js","webpack:///./node_modules/_@xmldom_xmldom@0.7.9@@xmldom/xmldom/lib/entities.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/master-playlist-controller.js","webpack:///./node_modules/_video.js@6.12.1@video.js/dist/video.cjs.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/wrap-error-constructor-with-cause.js","webpack:///./node_modules/_@xmldom_xmldom@0.7.9@@xmldom/xmldom/lib/dom-parser.js","webpack:///./node_modules/_global@4.4.0@global/window.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/mp4/mp4-generator.js","webpack:///./node_modules/_core-js@3.26.1@core-js/modules/es.error.cause.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/aac/index.js","webpack:///./node_modules/_videojs-vtt.js@0.12.6@videojs-vtt.js/lib/vtt.js","webpack:///./node_modules/_@babel_runtime@7.20.6@@babel/runtime/helpers/assertThisInitialized.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/m2ts/m2ts.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/m2ts/stream-types.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/function-apply.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/vtt-segment-loader.js","webpack:///./node_modules/_m3u8-parser@2.1.0@m3u8-parser/es5/stream.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/error-stack-installable.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/tools/ts-inspector.js","webpack:///./node_modules/_pkcs7@0.2.3@pkcs7/lib/pad.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/source-updater.js","webpack:///./node_modules/_videojs-vtt.js@0.12.6@videojs-vtt.js/lib/vttcue.js","webpack:///./node_modules/_@babel_runtime@7.20.6@@babel/runtime/helpers/construct.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/media-segment-request.js","webpack:///./node_modules/_url-toolkit@2.2.5@url-toolkit/src/url-toolkit.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/utils/stream.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/m2ts/metadata-stream.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/to-string-tag-support.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/reload-source-on-error.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/transmuxer-worker.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/m2ts/timestamp-rollover-stream.js","webpack:///./node_modules/_m3u8-parser@2.1.0@m3u8-parser/es5/line-stream.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/mp4/probe.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/proxy-accessor.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/config.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/flv/coalesce-stream.js","webpack:///./node_modules/_videojs-vtt.js@0.15.4@videojs-vtt.js/lib/browser-index.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/to-string.js","webpack:///./node_modules/_@videojs_xhr@2.6.0@@videojs/xhr/lib/index.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/create-text-tracks-if-necessary.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/id3-helpers.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/codecs/h264.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/ranges.js","webpack:///./node_modules/_videojs-vtt.js@0.15.4@videojs-vtt.js/lib/vttcue.js","webpack:///./node_modules/_pkcs7@0.2.3@pkcs7/lib/unpad.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/flv/tag-list.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/stream.js","webpack:///./node_modules/_m3u8-parser@4.7.1@m3u8-parser/dist/m3u8-parser.es.js","webpack:///./node_modules/_m3u8-parser@2.1.0@m3u8-parser/es5/parse-stream.js","webpack:///./node_modules/_parse-headers@2.0.5@parse-headers/parse-headers.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/flv/flv-header.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/virtual-source-buffer.js","webpack:///./node_modules/_@xmldom_xmldom@0.7.9@@xmldom/xmldom/lib/dom.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/xhr.js","webpack:///./node_modules/_aes-decrypter@1.0.3@aes-decrypter/es5/aes.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/normalize-string-argument.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/inherit-if-required.js","webpack:///./node_modules/_@babel_runtime@7.20.6@@babel/runtime/helpers/extends.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/html-media-source.js","webpack:///./node_modules/_@babel_runtime@7.20.6@@babel/runtime/helpers/inheritsLoose.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/remove-cues-from-track.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/media-groups.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/flv/index.js","webpack:///./node_modules/_is-function@1.0.2@is-function/index.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/segment-loader.js","webpack:///./node_modules/_global@4.4.0@global/document.js","webpack:///./node_modules/_aes-decrypter@1.0.3@aes-decrypter/es5/decrypter.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/mp4/transmuxer.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/rendition-mixin.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/flv/transmuxer.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/playlist.js","webpack:///./node_modules/_pkcs7@0.2.3@pkcs7/lib/pkcs7.js","webpack:///./node_modules/_@videojs_vhs-utils@3.0.5@@videojs/vhs-utils/es/media-groups.js","webpack:///./node_modules/_mpd-parser@0.21.1@mpd-parser/dist/mpd-parser.es.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/m2ts/probe.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/videojs-contrib-hls.js","webpack:///./node_modules/_ieee754@1.2.1@ieee754/index.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/videojs-contrib-media-sources.js","webpack:///./node_modules/_@babel_runtime@7.20.6@@babel/runtime/helpers/isNativeReflectConstruct.js","webpack:///./node_modules/_videojs-contrib-hls@5.15.0@videojs-contrib-hls/es5/util/codecs.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/flv/flv-tag.js","webpack:///./node_modules/_xhr@2.4.0@xhr/index.js","webpack:///./node_modules/_mux.js@4.3.2@mux.js/lib/aac/probe.js","webpack:///./node_modules/_video.js@7.20.3@video.js/dist/video.es.js","webpack:///./node_modules/_aes-decrypter@1.0.3@aes-decrypter/es5/index.js","webpack:///./node_modules/_aes-decrypter@1.0.3@aes-decrypter/es5/async-stream.js","webpack:///./node_modules/_global@4.3.2@global/window.js","webpack:///./node_modules/_videojs-vtt.js@0.12.6@videojs-vtt.js/lib/browser-index.js","webpack:///./node_modules/_mux.js@6.0.1@mux.js/lib/tools/parse-sidx.js","webpack:///./node_modules/_videojs-vtt.js@0.15.4@videojs-vtt.js/lib/vttregion.js","webpack:///./node_modules/_core-js@3.26.1@core-js/internals/error-stack-clear.js","webpack:///./node_modules/_mux.js@6.0.1@mux.js/lib/utils/clock.js","webpack:///./node_modules/_buffer@4.9.2@buffer/index.js","webpack:///./node_modules/_videojs-contrib-media-sources@4.7.2@videojs-contrib-media-sources/es5/codec-utils.js"],"names":["doccy","window","minDoc","document","topLevel","module","exports","SafeParseTuple","obj","reviver","json","error","JSON","parse","err","keyCode","searchInput","hasKeyCode","which","charCode","names","search","String","foundNamedKey","codes","toLowerCase","aliases","length","charCodeAt","isEventKey","event","nameOrCode","undefined","code","i","fromCharCode","title","alias","generator","Transmuxer","AudioSegmentStream","VideoSegmentStream","_interopRequireDefault","__esModule","Object","defineProperty","value","_config","_config2","_playlist","_playlist2","_utilCodecsJs","safeGetComputedStyle","el","property","result","getComputedStyle","stableSort","array","sortFn","newArray","slice","sort","left","right","cmp","indexOf","comparePlaylistBandwidth","leftBandwidth","rightBandwidth","attributes","BANDWIDTH","Number","MAX_VALUE","comparePlaylistResolution","leftWidth","rightWidth","RESOLUTION","width","simpleSelector","master","playerBandwidth","playerWidth","playerHeight","sortedPlaylistReps","playlists","map","playlist","height","bandwidth","filter","rep","isIncompatible","enabledPlaylistReps","isEnabled","isDisabled","bandwidthPlaylistReps","BANDWIDTH_VARIANCE","highestRemainingBandwidthRep","bandwidthBestRep","haveResolution","resolutionBestRepList","resolutionBestRep","resolutionPlusOneList","resolutionPlusOneSmallest","resolutionPlusOneRep","chosenRep","lastBandwidthSelector","this","systemBandwidth","parseInt","tech_","movingAverageBandwidthSelector","decay","average","Error","minRebufferMaxBandwidthSelector","settings","currentTime","duration","segmentDuration","timeUntilRebuffer","currentTimeline","syncController","compatiblePlaylists","enabledPlaylists","bandwidthPlaylists","hasAttribute","bind","rebufferingEstimates","syncPoint","getSyncPoint","numRequests","requestTimeEstimate","estimateSegmentRequestTime","rebufferingImpact","noRebufferingPlaylists","estimate","a","b","lowestBitrateCompatibleVariantSelector","playlistsWithVideo","parseCodecs","CODECS","videoCodec","dom","DOMImplementation","XMLSerializer","DOMParser","atob","s","Buffer","from","toString","decodeB64ToUint8Array","b64Text","decodedString","Uint8Array","_extends","assign","target","arguments","source","key","prototype","hasOwnProperty","call","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","Constructor","protoProps","staticProps","_stream","_stream2","_lineStream","_lineStream2","_parseStream","_parseStream2","_classCallCheck","instance","TypeError","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","Parser","_Stream","_this","getPrototypeOf","lineStream","parseStream","pipe","uris","currentUri","currentMap","_key","noop","defaultMediaGroups","manifest","allowCache","discontinuityStarts","segments","on","entry","mediaGroup","rendition","tag","allowed","trigger","message","byterange","offset","endlist","endList","inf","mediaSequence","discontinuitySequence","METHOD","URI","method","uri","IV","iv","isFinite","number","test","playlistType","mediaGroups","media","TYPE","NAME","mediaGroupType","DEFAULT","autoselect","AUTOSELECT","LANGUAGE","language","instreamId","CHARACTERISTICS","characteristics","FORCED","forced","discontinuity","push","dateTimeString","dateTimeObject","targetduration","targetDuration","totalduration","totalDuration","cueOut","data","cueOutCont","cueIn","tagType","timeline","comment","type","chunk","_globalWindow","_globalWindow2","_videoJs","_videoJs2","deprecateOldCue","cue","frame","id","get","log","warn","privateData","durationOfVideo","dur","isNaN","Math","abs","Infinity","addTextTrackData","sourceHandler","captionArray","metadataArray","Cue","WebKitDataCue","VTTCue","forEach","caption","track","stream","inbandTextTracks_","addCue","startTime","timestampOffset","endTime","text","videoDuration","mediaSource_","metadata","time","cueTime","frames","url","metadataTrack_","cues","cuesArray","cuesGroupedByStartTime","reduce","timeSlot","sortedStartTimes","keys","idx","cueGroup","nextTime","regexs","mp4","webm","ogg","video","audio","muxerVideo","muxerAudio","muxerText","mediaTypes","upperMediaTypes","translateLegacyCodec","codec","replace","orig","profile","avcLevel","profileHex","avcLevelHex","codecString","codecs","split","codecType","trim","name","match","exec","substring","details","mediaType","codecsFromDefault","audioGroupId","AUDIO","audioGroup","audioType","default","isAudioCodec","isTextCodec","getMimeForCodec","c","container","every","browserSupportsCodec","MediaSource","isTypeSupported","muxerSupportsCodec","DEFAULT_AUDIO_CODEC","DEFAULT_VIDEO_CODEC","require","DEFAULT_LOCATION","resolveUrl","baseUrl","relativeUrl","location","href","nativeURL","URL","protocolLess","removeLocation","buildAbsoluteURL","newUrl","protocol","_setPrototypeOf","o","p","_objCreate","F","ParsingError","errorData","parseTimeStamp","input","computeSeconds","h","m","f","Settings","values","parseOptions","callback","keyValueDelim","groupDelim","groups","kv","k","v","parseCue","regionList","oInput","consumeTimeStamp","ts","Errors","BadTimeStamp","consumeCueSettings","set","region","alt","vals","vals0","integer","percent","vertical","line","e","lineAlign","snapToLines","size","align","position","start","center","middle","end","positionAlign","skipWhitespace","substr","BadSignature","dflt","defaultKey","has","n","parseFloat","TEXTAREA_ELEMENT","createElement","TAG_NAME","u","ruby","rt","lang","DEFAULT_COLOR_CLASS","white","lime","cyan","red","yellow","magenta","blue","black","TAG_ANNOTATION","NEEDS_PARENT","parseContent","nextToken","consume","unescape","innerHTML","textContent","shouldAdd","current","element","localName","annotation","tagName","t","rootDiv","tagStack","appendChild","createTextNode","pop","parentNode","node","createProcessingInstruction","classes","cl","bgColor","colorName","propName","propValue","style","className","join","strongRTLRanges","isStrongRTLChar","currentRange","determineBidi","cueDiv","nodeStack","childNodes","pushNodes","nextTextNode","innerText","computeLinePos","textTrackList","mediaElement","trackList","count","mode","StyleBox","CueStyleBox","styleOptions","styles","color","backgroundColor","top","bottom","display","writingMode","unicodeBidi","applyStyles","div","direction","textAlign","font","whiteSpace","textPos","formatStyle","move","box","BoxPosition","lh","offsetHeight","offsetWidth","offsetTop","rects","getClientRects","getBoundingClientRect","max","lineHeight","moveBoxToLinePosition","styleBox","containerBox","boxPositions","findBestPosition","axis","bestPosition","specifiedPosition","percentage","overlapsOppositeAxis","within","overlapsAny","intersectPercentage","boxPosition","linePos","step","round","maxPosition","initialAxis","ceil","reverse","calculatedPercentage","toCSSCompatValues","WebVTT","prop","val","unit","toMove","overlaps","b2","boxes","x","min","y","intersectArea","reference","getSimpleBoxPosition","ret","StringDecoder","decode","decodeURIComponent","encodeURIComponent","convertCueToDOMTree","cuetext","FONT_SIZE_PERCENT","FONT_STYLE","CUE_BACKGROUND_PADDING","processCues","overlay","firstChild","removeChild","paddedOverlay","shouldCompute","hasBeenReset","displayState","margin","fontSize","vttjs","decoder","state","buffer","TextDecoder","reportOrThrowError","onparsingerror","collectNextLine","pos","parseRegion","xy","anchor","VTTRegion","lines","regionAnchorX","regionAnchorY","viewportAnchorX","viewportAnchorY","scroll","onregion","parseTimestampMap","ontimestampmap","parseHeader","alreadyCollectedLine","hasSubstring","oncue","flush","onflush","bundleFn","sources","cache","stringify","webpack","webpackBootstrapFn","modules","installedModules","__webpack_require__","moduleId","l","d","getter","object","entryModule","bundleWithBrowserify","fn","fnModuleKey","cacheKeys","cacheKey","cacheExports","floor","pow","random","fnModuleCache","entryKey","entryCache","bundleWithWebpack","fnModuleId","sourceStrings","devMode","sKey","modulesString","fnModuleExports","fnSourceString","mappedSourceStrings","src","blob","Blob","webkitURL","mozURL","msURL","workerUrl","createObjectURL","worker","Worker","objectURL","extend","clean","sa","_parser","_parser2","LineStream","ParseStream","TO_STRING_TAG_SUPPORT","isCallable","classofRaw","wellKnownSymbol","TO_STRING_TAG","$Object","CORRECT_ARGUMENTS","tryGet","it","O","callee","_ranges","_ranges2","timerCancelEvents","PlaybackWatcher","options","tech","seekable","consecutiveUpdates","lastRecordedTime","timer_","checkCurrentTimeTimeout_","debug","logger_","canPlayHandler","monitorCurrentTime_","waitingHandler","techWaiting_","cancelTimerHandler","cancelTimer_","fixesBadSeeksHandler","fixesBadSeeks_","dispose","off","clearTimeout","checkCurrentTime_","setTimeout","seeking","paused","buffered","SAFE_TIME_DELTA","waiting_","seekTo","afterSeekableWindow_","seekableEnd","beforeSeekableWindow_","seekableStart","printableRange","setCurrentTime","findRange","livePoint","nextRange","findNextRange","videoUnderflow_","difference","skipTheGap_","gap","gapFromVideoUnderflow_","scheduledCurrentTime","TIME_FUDGE_FACTOR","gaps","findGaps","_muxJsLibFlv","_muxJsLibFlv2","wireTransmuxerEvents","transmuxer","segment","postMessage","action","MessageHandlers","init","byteOffset","byteLength","resetCaptions","FlashTransmuxerWorker","onmessage","messageHandlers","find","list","predicate","ac","Array","item","freeze","oc","MIME_TYPE","HTML","isHTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","NAMESPACE","SVG","XML","XMLNS","_get","_x","_x2","_x3","_again","receiver","Function","desc","getOwnPropertyDescriptor","parent","_resolveUrl","_resolveUrl2","_m3u8Parser","_m3u8Parser2","updateSegments","original","update","mergeOptions","resolveSegmentUris","baseUri","resolvedUri","updateMaster","mergedPlaylist","setupMediaPlaylists","resolveMediaGroupUris","groupKey","labelKey","mediaProperties","refreshDelay","lastSegment","delay","PlaylistLoader","_EventTarget","srcUrl","hls","hls_","withCredentials","handleManifestRedirects","request","xhr","req","playlistRequestError","haveMetadata","startingState","status","responseText","_this2","parser","media_","mediaUpdateTimeout","stopRequest","oldRequest","onreadystatechange","abort","_this3","mediaChange","resolveManifestRedirect","responseURL","started","isFinalRendition","_this4","load","_this5","EventTarget","ExpGolomb","workingData","workingBytesAvailable","workingWord","workingBitsAvailable","bitsAvailable","loadWord","workingBytes","availableBytes","subarray","DataView","getUint32","skipBits","skipBytes","readBits","bits","valu","skipLeadingZeros","leadingZeroCount","skipUnsignedExpGolomb","skipExpGolomb","readUnsignedExpGolomb","clz","readExpGolomb","readBoolean","readUnsignedByte","_removeCuesFromTrack","_removeCuesFromTrack2","_createTextTracksIfNecessary","_createTextTracksIfNecessary2","_addTextTrackData","_flashTransmuxerWorker","_flashTransmuxerWorker2","_webwackify","_webwackify2","_flashConstants","_flashConstants2","resolveFlashTransmuxWorker","scheduleTick","func","TIME_BETWEEN_CHUNKS","generateRandomString","toDecimalPlaces","num","places","scale","FlashSourceBuffer","_videojs$EventTarget","mediaSource","encodedHeader","chunkSize_","BYTES_PER_CHUNK","buffer_","bufferSize_","basePtsOffset_","NaN","audioBufferEnd_","videoBufferEnd_","updating","timestampOffset_","btoa","apply","getFlvHeader","safePlayerId","player_","flashEncodedHeaderName_","flashEncodedDataName_","swfObj","vjs_appendChunkReady","transmuxer_","receiveBuffer_","one","vjs_discontinuity","createTimeRange","vjs_getProperty","createTimeRanges","onHlsReset","onHlsReset_","terminate","bytes","readyState","vjs_abort","captions","flvBytes","convertTagsToData_","processBuffer_","chunkSize","shift","binary","b64str","segmentData","segmentByteLength","videoTargetPts","videoTags","tags","audioTags","firstVideoTag","pts","firstAudioTag","currentIndex","currentTag","keyFrame","metaDataTag","nextTag","filteredVideoTags","audioTargetPts","filteredAudioTags","getOrderedTags_","fudgeFactor","diff","adjustedTime","vjs_adjustCurrentTime","j","dts","toByteArray","fromByteArray","lookup","revLookup","Arr","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","encodeChunk","uint8","output","extraBytes","parts","maxChunkLength","len2","Stream","listeners","listener","index","splice","callbacks","args","destination","_slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","done","isArray","findAdCue","mediaTime","adStartTime","adEndTime","updateAdCues","adOffset","adTotal","_segment$cueOutCont$split$map","_segment$cueOutCont$split$map2","DESCRIPTORS","path","normalizePaths","paths","results","headerSize","byte","z","_DESCRIPTORS$z","flags","dependsOnEsId","ocrEsId","descriptors","oti","streamType","bufferSize","maxBitrate","avgBitrate","findBox","complete","EBML_TAGS","EBML","DocType","Segment","SegmentInfo","Tracks","Track","TrackNumber","DefaultDuration","TrackEntry","TrackType","FlagDefault","CodecID","CodecPrivate","VideoTrack","AudioTrack","Cluster","Timestamp","TimestampScale","BlockGroup","BlockDuration","Block","SimpleBlock","LENGTH_TABLE","getLength","removeLength","signed","valueBytes","normalizePath","getInfinityDataSize","innerid","dataHeader","findEbml","dataStart","dataEnd","concat","totalLength","NAL_TYPE_ONE","NAL_TYPE_TWO","EMULATION_PREVENTION","positions","newLength","newData","sourceIndex","dataType","types","nalLimit","nalStart","nalsFound","nalOffset","nalType","findH264Nal","findH265Nal","CONSTANTS","_isLikely","aac","mask","mp3","docType","mkv","matroska","mov","fmp4","moof","moov","ac3","flac","avi","riff","wav","isLikelyTypes","isLikelyFn","isLikely","MPEGURL_REGEX","DASH_REGEX","simpleTypeFromSourceType","_x4","_muxJsLibMp4Probe","_muxJsLibMp4Probe2","_muxJsLibToolsTsInspectorJs","syncPointStrategies","run","segmentIndex","datetimeToDisplayTime","playlistTime","getTime","playlistStart","lastDistance","distance","discontinuitySync","discontinuities","syncInfo","SyncController","inspectCache_","timelines","syncPoints","runStrategies_","selectSyncPoint_","sumDurations","strategy","bestSyncPoint","bestDistance","bestStrategy","newDistance","oldPlaylist","newPlaylist","mediaSequenceDiff","lastRemovedSegment","playlistTimestamp","segmentInfo","timingInfo","probeMp4Segment_","probeTsSegment_","calculateSegmentTimeMapping_","saveDiscontinuitySyncInfo_","mediaIndex","timescales","timescale","timeInfo","inspect","segmentStartTime","segmentEndTime","dtsTime","containsVideo","containsAudio","mapping","mappingObj","startOfSegment","accuracy","mediaIndexDiff","USER_DATA_REGISTERED_ITU_T_T35","RBSP_TRAILING_BITS","parseSei","payloadType","payloadSize","payload","parseUserData","sei","parseCaptionPackets","userData","ccData","CaptionStream","captionPackets_","ccStreams_","Cea608Stream","reset","cc","nalUnitType","escapedRBSP","latestDts_","ignoreNextEqualDts_","elem","presortIndex","packet","dispatchCea608Packet","activeCea608Channel_","ccStream","setsChannel1Active","setsChannel2Active","CHARACTER_TRANSLATION","getCharFromCode","BOTTOM_ROW","ROWS","createDisplayBuffer","field","dataChannel","field_","dataChannel_","name_","setConstants","swap","char0","char1","lastControlCode_","PADDING_","RESUME_CAPTION_LOADING_","mode_","END_OF_CAPTION_","clearFormatting","flushDisplayed","displayed_","nonDisplayed_","startPts_","ROLL_UP_2_ROWS_","topRow_","ROLL_UP_3_ROWS_","ROLL_UP_4_ROWS_","CARRIAGE_RETURN_","shiftRowsUp_","BACKSPACE_","ERASE_DISPLAYED_MEMORY_","ERASE_NON_DISPLAYED_MEMORY_","RESUME_DIRECT_CAPTIONING_","isSpecialCharacter","column_","isExtCharacter","row_","isMidRowCode","addFormatting","isOffsetControlCode","isPAC","row","formatting_","isColorPAC","isNormalChar","content","startPts","endPts","BASE_","EXT_","CONTROL_","OFFSET_","char","format","popOn","baseRow","rollUp","paintOn","scrollSetting","findScrollSetting","isValidPercentValue","_width","_lines","_regionAnchorX","_regionAnchorY","_viewportAnchorX","_viewportAnchorY","_scroll","setting","SyntaxError","$String","$TypeError","argument","flashConstants","uncurryThis","anObject","aPossiblePrototype","setter","CORRECT_SETTER","proto","repeat","str","acc","countBits","countBytes","padStart","isArrayBufferView","ArrayBuffer","isView","isTypedArray","toUint8","toHexString","toBinaryString","BigInt","BYTE_TABLE","bytesToNumber","Uint16Array","_temp","_ref","_ref$signed","_ref$le","le","total","exponent","numberToBytes","_temp2","_ref2","_ref2$le","byteCount","byteIndex","bytesToString","string","escape","stringToBytes","stringIsBytes","view","concatTypedArrays","_len","buffers","totalLen","buf","tempBuffer","bytesMatch","_temp3","_ref3","_ref3$offset","_ref3$mask","bByte","aByte","nameStartChar","nameChar","RegExp","tagNamePattern","S_TAG","S_ATTR","S_ATTR_SPACE","S_EQ","S_ATTR_NOQUOT_VALUE","S_ATTR_END","S_TAG_SPACE","S_TAG_CLOSE","ParseError","locator","captureStackTrace","XMLReader","defaultNSMapCopy","entityMap","domBuilder","errorHandler","fixedFromCharCode","surrogate1","surrogate2","entityReplacer","charAt","appendText","xt","characters","lineEnd","linePattern","lineStart","lineNumber","columnNumber","parseStack","currentNSMap","closeMap","tagStart","doc","currentElement","config","localNSMap","endMatch","endIgnoreCaseMach","endElement","prefix","endPrefixMapping","fatalError","parseInstruction","parseDCC","ElementAttributes","parseElementStartPart","closed","fixSelfClosed","nbsp","warning","locator2","copyLocator","appendElement","parseHtmlSpecialContent","addAttribute","qname","startIndex","attributeNames","addValue","attrName","setTagName","qName","nsp","nsPrefix","_copy","startPrefixMapping","ns","startElement","elStartEnd","elEndStart","lastIndexOf","startCDATA","endCDATA","matchs","pubid","sysid","lastMatch","startDTD","endDTD","processingInstruction","reg","lastIndex","defaultNSMap","startDocument","endDocument","getLocalName","getLocator","getQName","getURI","getValue","_urlToolkit","_urlToolkit2","baseURL","relativeURL","MAX_UINT32","getUint64","dv","getBigUint64","MAX_SAFE_INTEGER","highPrefix","lowPrefix","zeroFill","makeTable","metaTable","part","coneOfSilence","96000","88200","64000","48000","44100","32000","24000","16000","12000","11025","8000","secondsToVideoTs","secondsToAudioTs","videoTsToSeconds","audioTsToSeconds","audioTsToVideoTs","videoTsToAudioTs","ONE_SECOND_IN_TS","seconds","sampleRate","timestamp","AdtsStream","ADTS_SAMPLING_FREQUENCIES","frameLength","protectionSkipBytes","frameEnd","oldBuffer","sampleCount","adtsFrameDuration","frameNum","audioobjecttype","channelcount","samplerate","samplingfrequencyindex","samplesize","_globalDocument","_globalDocument2","_flashSourceBuffer","_flashSourceBuffer2","_codecUtils","FlashMediaSource","sourceBuffers","getElementById","swfId","vjs_load","parsedType","parseContentType","sourceBuffer","vjs_endOfStream","oldDuration","vjs_setProperty","remove","httpResponseHandler","decodeResponseBody","response","responseBody","statusCode","cause","charset","getCharset","headers","contentTypeHeader","contentType","_contentType$split","isObject","createNonEnumerableProperty","_aesDecrypter","_binUtils","DecrypterWorker","encrypted","Uint32Array","Decrypter","createTransferableMessage","decrypted","textRange","range","formatHexString","formatAsciiString","transferable","initSegmentId","initSegment","utils","hexDump","hex","ascii","tagDump","textRanges","ranges","XML_ENTITIES","amp","apos","gt","lt","quot","HTML_ENTITIES","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","iexcl","cent","pound","curren","yen","brvbar","sect","uml","copy","ordf","laquo","not","shy","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","times","divide","forall","exist","empty","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","infin","ang","and","or","cap","cup","there4","sim","cong","asymp","ne","equiv","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","tilde","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","euro","trade","larr","uarr","rarr","darr","harr","crarr","lceil","rceil","lfloor","rfloor","loz","spades","clubs","hearts","diams","_playlistLoader","_playlistLoader2","_playlistJs","_segmentLoader","_segmentLoader2","_vttSegmentLoader","_vttSegmentLoader2","_adCueTags","_adCueTags2","_syncController","_syncController2","_videojsContribMediaSourcesEs5CodecUtils","_decrypterWorker","_decrypterWorker2","_mediaGroups","ABORT_EARLY_BLACKLIST_SECONDS","Hls","defaultCodecs","videoObjectTypeIndicator","audioProfile","loaderStats","sumLoaderStat","stat","audioSegmentLoader_","mainSegmentLoader_","resolveDecrypterWorker","mapLegacyAvcCodecs_","translateLegacyCodecs","makeMimeTypeString","getContainerType","getCodecs","mediaAttributes","mimeTypesForPlaylist_","containerType","codecInfo","isMuxed","isMaat","groupId","codecStrings","justAudio","justVideo","bothVideoAudio","MasterPlaylistController","externHls","useCueTags","blacklistDuration","enableLowInitialPlaylist","useCueTags_","cueTagsTrack_","addTextTrack","inBandMetadataTrackDispatchType","requestOptions_","timeout","mediaTypes_","createMediaTypes","addEventListener","handleSourceOpen_","seekable_","hasPlayed_","syncController_","segmentMetadataTrack_","addRemoteTextTrack","kind","label","decrypter_","segmentLoaderSettings","hasPlayed","goalBufferLength","decrypter","masterPlaylistLoader_","setupMasterPlaylistLoaderListeners_","segmentMetadataTrack","loaderType","subtitleSegmentLoader_","setupSegmentLoaderListeners_","requestTimeout","isLowestEnabledRendition","preload","setupMediaGroups","segmentLoaders","SUBTITLES","main","requestOptions","masterPlaylistLoader","blacklistCurrentPlaylist","triggerPresenceUsage_","setupSourceBuffers_","endOfStream","setupFirstPlay","updatedPlaylist","selectedMedia","selectInitialPlaylist","selectPlaylist","initialMedia_","updateAdCues_","updateDuration","addSeekableRange","addSeekableRange_","onDurationchange","pause","bubbles","playlistOutdated","stuckAtPlaylistEnd_","defaultDemuxed","audioGroupKeys","properties","Playlist","isAes","isFmp4","nextPlaylist","currentPlaylist","forwardBuffer","bufferLowWaterLine","MAX_BUFFER_LOW_WATER_LINE","onSyncInfoUpdate_","onEndOfStream","mediaSecondsLoaded","activePlaylistLoader","resetLoader","ended","_ret3","browser","IE_VERSION","autoplay","playPromise","play","then","isEndOfStream","ended_","expired","getExpiredTime","absolutePlaylistEnd","playlistEnd","bufferedEnd","excludeUntil","Date","now","resetEverything","mainSeekable","audioSeekable","newDuration","setDuration","removeEventListener","_this6","group","playlistLoader","mimeTypes","mimeType","excludeIncompatibleVariants_","codecCount","variant","variantCodecs","initial","GOAL_BUFFER_LENGTH","rate","GOAL_BUFFER_LENGTH_RATE","MAX_GOAL_BUFFER_LENGTH","BUFFER_LOW_WATER_LINE","BUFFER_LOW_WATER_LINE_RATE","_interopDefault","ex","tsml","safeParseTuple","vtt","version","USER_AGENT","navigator","userAgent","webkitVersionMap","appleWebkitVersion","IS_IPAD","IS_IPHONE","IS_IPOD","IS_IOS","IOS_VERSION","IS_ANDROID","ANDROID_VERSION","major","minor","IS_OLD_ANDROID","IS_NATIVE_ANDROID","IS_FIREFOX","IS_EDGE","IS_CHROME","CHROME_VERSION","IS_IE8","IS_SAFARI","IS_ANY_SAFARI","TOUCH_ENABLED","isReal","maxTouchPoints","DocumentTouch","BACKGROUND_SIZE_SUPPORTED","_typeof","classCallCheck","inherits","possibleConstructorReturn","taggedTemplateLiteralLoose","strings","raw","each","accum","isPlain","level","history","logByType","lvl","levels","lvlRegExp","unshift","toUpperCase","console","info","all","clear","disable","enable","_len2","_key2","_len3","_key3","_len4","_key4","log$1","computedStyle","cs","currentStyle","_templateObject","isNonBlankString","throwIfWhitespace","classRegExp","isEl","nodeType","isInFrame","createQuerier","selector","context","querySelector","ctx","createEl","getOwnPropertyNames","setAttribute","appendContent","prependTo","child","insertBefore","hasClass","classToCheck","classList","contains","addClass","classToAdd","add","removeClass","classToRemove","toggleClass","classToToggle","setAttributes","attrValue","removeAttribute","getAttributes","knownBooleans","attrs","attrVal","getAttribute","attribute","blockTextSelection","body","focus","onselectstart","unblockTextSelection","rect","findPosition","docEl","documentElement","clientLeft","scrollLeft","pageXOffset","clientTop","scrollTop","pageYOffset","getPointerPosition","boxW","boxH","boxY","boxX","pageY","pageX","changedTouches","isTextNode","emptyEl","normalizeContent","insertContent","isSingleLeftClick","button","buttons","$","$$","Dom","_guid","newGUID","elData","elIdAttr","getData","hasData","removeData","_cleanUpEvents","handlers","dispatcher","detachEvent","disabled","_handleMultipleEvents","fixEvent","returnTrue","returnFalse","isPropagationStopped","old","preventDefault","srcElement","relatedTarget","fromElement","toElement","returnValue","defaultPrevented","stopPropagation","cancelBubble","stopImmediatePropagation","isImmediatePropagationStopped","clientX","clientY","_supportsPassive","opts","passiveEvents","guid","hash","handlersCopy","passive","attachEvent","removeType","elemData","ownerDocument","targetData","Events","_windowLoaded","videojs$2","autoSetup","vids","getElementsByTagName","audios","divs","mediaEls","_i2","_e2","_i3","_e3","mediaEl","autoSetupTimeout","player","wait","vjs","createStyleElement","setTextContent","styleSheet","cssText","uid","bound","throttle","last","throttled","debounce","immediate","_later","allowedEvents_","ael","dispatchEvent","isEvented","eventBusEl_","isValidEventType","validateTarget","nodeName","validateEventType","validateListener","normalizeListenArgs","isTargetingSelf","listen","EventedMixin","_normalizeListenArgs","removeListenerOnDispose","removeRemoverOnTargetDispose","_normalizeListenArgs2","wrapper","largs","targetOrType","typeOrListener","evented","eventBusKey","StatefulMixin","setState","stateUpdates","changes","to","stateful","defaultState","handleStateChanged","toTitleCase","titleCaseEquals","str1","str2","Component","ready","options_","id_","el_","children_","childIndex_","childNameIndex_","initChildren","reportTouchActivity","enableTouchActivity","localize","tokens","defaultValue","languages","primaryCode","primaryLang","localizedString","contentEl","contentEl_","children","getChildById","getChild","addChild","component","componentName","componentClassName","componentClass","ComponentClass","getComponent","refNode","childFound","compEl","parentOptions","handleAdd","playerOptions","newChild","workingChildren","Tech","some","wchild","isTech","buildCSSClass","sync","isReady_","readyQueue_","triggerReady","readyQueue","show","hide","lockShowing","unlockShowing","skipListeners","dimension","dimensions","widthOrHeight","pxIndex","currentDimension","computedWidthOrHeight","getPropertyValue","rule","currentDimensions","currentWidth","currentHeight","blur","emitTapEvents","touchStart","firstTouch","tapMovementThreshold","touchTimeThreshold","couldBeTap","touches","xdiff","ydiff","touchDistance","sqrt","noTap","touchTime","reportUserActivity","report","touchHolding","clearInterval","setInterval","touchEnd","timeoutId","disposeFn","interval","intervalId","requestAnimationFrame","supportsRaf_","cancelAnimationFrame","registerComponent","ComponentToRegister","isComp","isPrototypeOf","reason","components_","Player","players","playerNames","pname","Boolean","rangeCheck","fnName","maxIndex","getRange","valueIndex","rangeIndex","createTimeRangesObj","bufferedPercent","bufferedDuration","FullscreenApi","apiMap","specApi","browserApi","MediaError","defaultMessages","errorTypes","1","2","3","4","5","errNum","isPromise","silencePromise","trackToJson_","textTracksToJson","trackEls","trackObjs","tracks","trackEl","textTracks","jsonToTextTracks","addedTrack","textTrackConverter","MODAL_CLASS_NAME","ESC","ModalDialog","_Component","opened_","hasBeenOpened_","hasBeenFilled_","closeable","uncloseable","role","descEl_","description","tabIndex","previouslyActiveEl_","handleKeyPress","close","open","fillAlways","fill","wasPlaying_","pauseOnOpen","hadControls_","controls","conditionalFocus_","opened","conditionalBlur_","temporary","closeable_","temp","controlText","fillWith","parentEl","nextSiblingEl","nextSibling","closeButton","content_","activeEl","activeElement","playerEl","handleKeyDown","focusableEls","focusableEls_","focusIndex","shiftKey","allChildren","querySelectorAll","HTMLAnchorElement","HTMLAreaElement","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","HTMLButtonElement","HTMLIFrameElement","HTMLObjectElement","HTMLEmbedElement","TrackList","_ret","tracks_","addTrack","removeTrack","rtrack","getTrackById","change","addtrack","removetrack","disableOthers","enabled","AudioTrackList","_TrackList","_prop","changing_","disableOthers$1","selected","VideoTrackList","TextTrackList","nonLanguageTextTrackKind","HtmlTrackElementList","trackElements","trackElements_","addTrackElement_","trackElement","getTrackElementByTrack_","trackElement_","removeTrackElement_","TextTrackCueList","setCues_","length_","oldLength","cues_","defineProp","getCueById","VideoTrackKind","alternative","sign","subtitles","commentary","AudioTrackKind","TextTrackKind","descriptions","chapters","TextTrackMode","hidden","showing","trackProps","_loop","parseUrl","addToBody","host","getAbsoluteURL","getFileExtension","splitPathRe","pathParts","isCrossOrigin","winLoc","urlInfo","srcProtocol","crossOrigin","Url","parseCues","srcContent","errors","groupCollapsed","groupEnd","loadTrack","cors","loaded_","loadHandler","TextTrack","_Track","srclang","default_","tt","activeCues_","activeCues","changed","timeupdateHandler","newMode","ct","active","originalCue","originalCue_","removeCue","_removeCue","cuechange","newEnabled","newSelected","NONE","LOADING","LOADED","ERROR","HTMLTrackElement","NORMAL","ListClass","TrackClass","capitalName","getterName","privateName","REMOTE","remoteText","remoteTextEl","ALL","createTrackHelper","hasStarted_","featuresProgressEvents","manualProgressOn","featuresTimeupdateEvents","manualTimeUpdatesOn","nativeCaptions","nativeTextTracks","featuresNativeTextTracks","emulateTextTracks","autoRemoteTextTracks_","initTrackListeners","nativeControlsForTouch","triggerSourceset","onDurationChange","manualProgress","trackProgress","manualProgressOff","stopTrackingProgress","progressInterval","numBufferedPercent","bufferedPercent_","duration_","manualTimeUpdates","trackCurrentTime","stopTrackingCurrentTime","manualTimeUpdatesOff","currentTimeInterval","manuallyTriggered","clearTracks","removeRemoteTextTrack","cleanupAutoTextTracks","error_","played","trackListChanges","addWebVttScript_","script","onload","onerror","remoteTracks","remoteTextTracks","handleAddTrack","handleRemoveTrack","updateDisplay","textTracksChanges","createRemoteTextTrack","_this7","manualCleanup","htmlTrackElement","remoteTextTrackEls","getVideoPlaybackQuality","setPoster","playsinline","setPlaysinline","canPlayType","canPlaySource","srcObj","registerTech","techs_","defaultTechOrder_","getTech","videojs","featuresVolumeControl","featuresMuteControl","featuresFullscreenResize","featuresPlaybackRate","featuresSourceset","withSourceHandlers","_Tech","registerSourceHandler","handler","sourceHandlers","can","selectSourceHandler","canHandleSource","sh","deferrable","originalFn","sourceHandler_","setSource","nativeSourceHandler","disposeSourceHandler","currentSource_","handleSource","middlewares","middlewareInstances","TERMINATOR","use","middleware","setSourceHelper","setTech","mw","get$1","reduceRight","middlewareIterator","set$1","arg","mediate","callMethod","middlewareValue","terminated","executeRight","allowedGetters","allowedSetters","allowedMediators","mws","clearCacheForPlayer","getOrCreateFactory","mwFactory","_mws$i","mwf","mwi","lastRun","mwrest","_src","MimetypesKind","opus","ogv","m4v","oga","m3u8","getMimetype","ext","mimetype","findMimetype","cache_","matchingSources","filterSource","newsrc","srcobj","fixSource","MediaLoader","techOrder","techName","isSupported","loadTech_","ClickableComponent","tabIndex_","createControlTextEl","controlTextEl_","controlText_","localizedText","nonIconControl","enabled_","handleClick","handleFocus","handleBlur","PosterImage","_ClickableComponent","fallbackImg_","poster","setSrc","backgroundImage","darkGray","lightGray","fontMap","monospace","sansSerif","serif","monospaceSansSerif","monospaceSerif","proportionalSansSerif","proportionalSerif","casual","smallcaps","constructColor","opacity","tryUpdateStyle","TextTrackDisplay","toggleDisplay","preselectTrack","modes","userPref","selectedLanguage","firstDesc","firstCaptions","preferredTrack","clearDisplay","descriptionsTrack","captionsSubtitlesTrack","updateForTrack","textTrackSettings","overrides","getValues","textOpacity","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontFamily","fontVariant","LoadingSpinner","isAudio","playerType","dir","Button","BigPlayButton","_Button","mouseused_","handleMouseDown","cb","playToggle","playFocus","CloseButton","PlayToggle","handlePlay","handlePause","handleEnded","handleSeeked","defaultImplementation","guide","gm","gh","implementation","setFormatTime","customImplementation","resetFormatTime","formatTime","TimeDisplay","throttledUpdateContent","updateContent","plainName","labelText_","updateTextNode_","textNode_","formattedTime_","formatTime_","updateFormattedTime_","formattedTime","CurrentTimeDisplay","_TimeDisplay","scrubbing","getCache","DurationDisplay","TimeDivider","RemainingTimeDisplay","remainingTimeDisplay","remainingTime","LiveDisplay","updateShowing","Slider","bar","barName","playerEvent","handleMouseMove","handleMouseUp","progress","getPercent","toFixed","calculateDistance","stepBack","stepForward","bool","vertical_","LoadProgressBar","partEls_","percentify","TimeTooltip","seekBarRect","seekBarPoint","tooltipRect","playerRect","seekBarPointPx","spaceLeftOfPoint","spaceRightOfPoint","pullTooltipBy","PlayProgressBar","rafId_","timeTooltip","MouseTimeDisplay","STEP_SECONDS","UPDATE_REFRESH_INTERVAL","SeekBar","_Slider","setEventHandlers_","updateInterval","update_","getCurrentTime_","videoWasPlaying","newTime","mouseTimeDisplay","handleAction","ProgressControl","throttledHandleMouseSeek","handleMouseSeek","seekBar","seekBarEl","FullscreenToggle","handleFullscreenChange","fullscreenEnabled","isFullscreen","exitFullscreen","requestFullscreen","checkVolumeSupport","VolumeLevel","VolumeBar","updateLastVolume_","updateARIAAttributes","checkMuted","volume","muted","ariaValue","volumeAsPercentage_","volumeBeforeDrag","lastVolume_","VolumeControl","volumeBar","throttledHandleMouseMove","orientationClass","checkMuteSupport","MuteToggle","vol","lastVolume","volumeToSet","updateIcon_","updateControlText_","soundOff","VolumePanel","inline","volumeControl","volumePanelState_","sliderActive_","sliderInactive_","muteToggle","Menu","menuButton_","menuButton","focusedChild_","addItem","unpressButton","contentElType","append","stepChild","haveTitle","MenuButton","buttonClass","handleSubmenuKeyPress","menu","createMenu","buttonPressed_","items","hideThreshold_","createItems","buildWrapperCSSClass","menuButtonClass","pressButton","TrackButton","_MenuButton","updateHandler","MenuItem","selectable","isSelected_","multiSelectable","_selected","TextTrackMenuItem","_MenuItem","changeHandler","handleTracksChange","selectedLanguageChangeHandler","handleSelectedLanguageChange","onchange","Event","createEvent","initEvent","kinds","shouldBeSelected","OffTextTrackMenuItem","_TextTrackMenuItem","allHidden","TextTrackButton","_TrackButton","TrackMenuItem","label_","kinds_","kind_","ChaptersTrackMenuItem","ChaptersButton","_TextTrackButton","track_","setTrack","findChaptersTrack","updateHandler_","remoteTextTrackEl","_remoteTextTrackEl","getMenuCaption","mi","DescriptionsButton","SubtitlesButton","CaptionSettingsMenuItem","CaptionsButton","SubsCapsMenuItem","SubsCapsButton","language_","AudioTrackMenuItem","audioTracks","AudioTrackButton","PlaybackRateMenuItem","playbackRate","PlaybackRateMenuButton","updateVisibility","updateLabel","labelEl_","rates","playbackRates","currentRate","newRate","playbackRateSupported","Spacer","CustomControlSpacer","_Spacer","ControlBar","ErrorDisplay","_ModalDialog","LOCAL_STORAGE_KEY","COLOR_BLACK","COLOR_BLUE","COLOR_CYAN","COLOR_GREEN","COLOR_MAGENTA","COLOR_RED","COLOR_WHITE","COLOR_YELLOW","OPACITY_OPAQUE","OPACITY_SEMI","OPACITY_TRANS","selectConfigs","parseOptionValue","getSelectedOptionValue","selectedIndex","setSelectedOption","TextTrackSettings","endDialog","setDefaults","persistTextTrackSettings","saveSettings","restoreSettings","createElSelect_","legendId","selectLabelledbyIds","optionId","createElFgColor_","createElBgColor_","createElWinColor_","createElColors_","createElFont_","createElControls_","defaultsDescription","setValues","localStorage","getItem","setItem","removeItem","ttDisplay","controlBar","subsCapsBtn","subsCapsButton","ccBtn","captionsButton","ResizeManager","RESIZE_OBSERVER_AVAILABLE","ResizeObserver","loadListener_","resizeObserver_","debouncedHandler_","resizeHandler","observe","contentWindow","unobserve","disconnect","resizeObserver","sourcesetLoad","srcUrls","innerHTMLDescriptorPolyfill","cloneNode","dummy","docFrag","createDocumentFragment","Element","getDescriptor","priority","getInnerHTMLDescriptor","HTMLMediaElement","firstSourceWatch","resetSourceWatch_","innerDescriptor","appendWrapper","appendFn","retval","srcDescriptorPolyfill","getSrcDescriptor","setupSourceset","resetSourceset_","srcDescriptor","oldSetAttribute","oldLoad","currentSrc","_templateObject$2","Html5","crossoriginTracks","initNetworkState_","handleLateInit_","enableSourceset","setupSourcesetHandling_","hasChildNodes","nodes","nodesLength","removeNodes","proxyNativeTracks_","restoreMetadataTracksInIOSNativePlayer_","setControls","proxyWebkitFullscreen_","disposeMediaElement","metadataTracksPreFullscreenState","takeMetadataTrackSnapshot","storedMode","restoreTrackMode","storedTrack","elTracks","techTracks","currentTarget","removeOldTracks","removeTracks","found","eventName","playerElIngest","movingMediaElementInDOM","clone","tagAttributes","techId","playerId","settingsAttrs","attr","networkState","loadstartFired","setLoadstartFired","triggerLoadstart","eventsToTrigger","checkProgress","endFn","beginFn","webkitPresentationMode","supportsFullScreen","webkitEnterFullScreen","enterFullScreen","HAVE_METADATA","exitFullScreen","webkitExitFullScreen","resetMediaElement","videoPlaybackQuality","webkitDroppedFrameCount","webkitDecodedFrameCount","droppedVideoFrames","totalVideoFrames","performance","creationTime","timing","navigationStart","TEST_VID","canControlVolume","canMuteVolume","canControlPlaybackRate","canOverrideAttributes","supportsNativeTextTracks","supportsNativeVideoTracks","videoTracks","supportsNativeAudioTracks","featuresNativeVideoTracks","featuresNativeAudioTracks","mpegurlRE","mp4RE","patchCanPlayType","unpatchCanPlayType","r","_templateObject$1","TECH_EVENTS_RETRIGGER","TECH_EVENTS_QUEUE","canplay","canplaythrough","playing","seeked","getTagSettings","closest","isPosterFromTech_","queuedCallbacks_","userActive_","languagesToLower","name$$1","languages_","poster_","controls_","scrubbing_","lastPlaybackRate","defaultPlaybackRate","playerOptionsCopy","plugins","middleware_","flexNotSupported_","majorVersion","userActive","listenForUserActivity_","handleFullscreenChange_","handleStageClick_","changingSrc_","playWaitingForReady_","playOnLoadstart_","styleEl_","playerElIngest_","divEmbed","VIDEOJS_NO_DYNAMIC_STYLE","defaultsStyleEl","head","fluid","aspectRatio","links","linkEl","_dimension","privDimension","updateStyleEl_","parsedVal","fluid_","ratio","aspectRatio_","idClass","videoWidth","videoHeight","ratioParts","ratioMultiplier","width_","height_","_height","techEl","unloadTech_","titleTechName","camelTechName","techName_","techOptions","loop","techCanOverridePoster","TechClass","handleTechReady_","textTracksJson_","eventObj","handleTechLoadStart_","handleTechSourceset_","handleTechWaiting_","handleTechEnded_","handleTechSeeking_","handleTechPlay_","handleTechFirstPlay_","handleTechPause_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechError_","handleTechPosterChange_","handleTechTextData_","handleTechRateChange_","usingNativeControls","techGet_","addTechControlsListeners_","safety","removeTechControlsListeners_","handleTechClick_","handleTechTouchStart_","handleTechTouchMove_","handleTechTouchEnd_","handleTechTap_","techCall_","hasStarted","manualAutoplay_","previouslyMuted","promise","updateSourceCaches_","sourceElSources","sourceEls","matchingSourceEls","sourceObj","updateCache","queued","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechSeeked_","starttime","userWasActive","PromiseClass","Promise","resolve","play_","_this8","isScrubbing","percentAsDecimal","_muted","defaultMuted","_defaultMuted","isFS","isFullscreen_","fsApi","fullscreenchange","documentFullscreenChange","fullscreenElement","enterFullWindow","exitFullWindow","isFullWindow","docOrigOverflow","overflow","fullWindowOnEscKey","selectSource","_this9","techs","findFirstPassingTechSourcePair","outerArray","innerArray","tester","outerChoice","innerChoice","foundSourceAndTech","flip","finder","sourceOrder","_this10","middlewareSource","src_","notSupportedMessage","_this11","sourceTech","currentSources","currentSource","currentType","techAutoplay","newPoster","usingNativeControls_","errorDisplay","userActivity_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","inactivityTimeout","isAudio_","_ref3$track","toJSON","createModal","_this12","modal","baseOptions","tagOptions","dataSetup","_safeParseTuple","childName","html5","flash","userLanguage","BASE_PLUGIN_NAME","PLUGIN_CACHE_KEY","pluginStorage","pluginExists","getPlugin","markPluginAsActive","triggerSetupEvent","before","createBasicPlugin","plugin","basicPluginWrapper","createPluginFactory","PluginSubClass","getEventHash","Plugin","VERSION","isBasic","registerPlugin","deregisterPlugin","getPlugins","getPluginVersion","usingPlugin","hasPlugin","super_","extendFn","subClassMethods","methods","HTMLVideoElement","normalizeId","getPlayer","hooks","hookFunction","PlayerComponent","hooks_","hook","hookOnce","removeHook","getPlayers","nId","_tag","_player","getAllPlayers","comp","writeable","addLanguage","_mergeOptions","getBuiltIn","hasOwn","copyConstructorProperties","proxyAccessor","inheritIfRequired","normalizeStringArgument","installErrorCause","clearErrorStack","ERROR_STACK_INSTALLABLE","IS_PURE","FULL_NAME","IS_AGGREGATE_ERROR","STACK_TRACE_LIMIT","OPTIONS_POSITION","ERROR_NAME","OriginalError","OriginalErrorPrototype","BaseError","WrappedError","stack","conventions","entities","sax","buildErrorHandler","errorImpl","DOMHandler","isCallback","build","msg","_locator","cdata","systemId","_toString","chars","java","hander","parseFromString","xmlns","setDocumentLocator","xml","createDocument","documentURI","namespaceURI","createElementNS","createAttributeNS","nodeValue","setAttributeNode","ins","ignorableWhitespace","ch","charNode","createCDATASection","skippedEntity","normalize","comm","createComment","publicId","impl","createDocumentType","dt","doctype","__DOMHandler","win","global","dinf","esds","ftyp","mdat","mfhd","minf","mvex","mvhd","trak","tkhd","mdia","mdhd","hdlr","sdtp","stbl","stsd","traf","trex","trun","MAJOR_BRAND","MINOR_VERSION","AVC1_BRAND","VIDEO_HDLR","AUDIO_HDLR","HDLR_TYPES","VMHD","SMHD","DREF","STCO","STSC","STSZ","STTS","UINT32_MAX","avc1","avcC","btrt","dref","mp4a","smhd","stco","stsc","stsz","stts","styp","tfdt","tfhd","vmhd","setUint32","sequenceNumber","trackFragments","samples","dependsOn","isDependedOn","videoSample","audioSample","sps","pps","sequenceParameterSets","pictureParameterSets","profileIdc","profileCompatibility","levelIdc","trackFragmentHeader","trackFragmentDecodeTime","trackFragmentRun","sampleDependencyTable","dataOffset","upperWordBaseMediaDecodeTime","lowerWordBaseMediaDecodeTime","baseMediaDecodeTime","audioTrun","videoTrun","trunHeader","durationPresent","sizePresent","flagsPresent","compositionTimeOffset","sample","isLeading","hasRedundancy","paddingValue","isNonSyncSample","degradationPriority","fileType","movie","wrapErrorConstructorWithCause","WEB_ASSEMBLY","WebAssembly","exportGlobalErrorCauseWrapper","arity","exportWebAssemblyErrorCauseWrapper","AacStream","everything","timeStamp","setTimestamp","parseId3TagSize","header","returnSize","footerPresent","parseAdtsSize","lowThree","highTwo","bytesLeft","tempLength","frameSize","ESCAPE","unescape1","isIE8","stylesunicodeBidi","_assertThisInitialized","TransportPacketStream","TransportParseStream","ElementaryStream","StreamTypes","TimestampRolloverStream","m2tsStreamTypes","MP2T_PACKET_LENGTH","SYNC_BYTE","bytesInBuffer","endIndex","parsePsi","parsePat","parsePmt","packetsWaitingForPmt","programMapTable","payloadUnitStartIndicator","pat","section_number","last_section_number","pmtPid","pmt","sectionLength","tableEnd","programInfoLength","pid","H264_STREAM_TYPE","ADTS_STREAM_TYPE","METADATA_STREAM_TYPE","processPes_","STREAM_TYPES","h264","adts","timedMetadata","parsePes","pes","ptsDtsFlags","packetLength","dataAlignmentIndicator","flushStream","forceFlush","fragment","packetData","packetFlushable","trackId","timelineStartInfo","m2ts","PAT_PID","MetadataStream","NATIVE_BIND","FunctionPrototype","Reflect","_x5","_videojsContribMediaSourcesEs5RemoveCuesFromTrackJs","_videojsContribMediaSourcesEs5RemoveCuesFromTrackJs2","VTT_LINE_TERMINATORS","uintToString","uintArray","VTTSegmentLoader","_SegmentLoader","subtitlesTrack_","storedMap","initSegments_","combinedByteLength","combinedSegment","playlist_","monitorBuffer_","_track","couldBeginLoading_","init_","syncPoint_","currentTimeline_","currentTime_","checkBuffer_","buffered_","skipEmptySegments_","timestampOffsetForTimeline","checkTimestampOffset","loadSegment_","generateSegmentInfo_","isSyncRequest","pendingSegment_","handleSegment_","requested","parseVTTCues_","updateTimeMapping_","handleUpdateEnd_","decodeBytesToString","timestampmap","MPEGTS","LOCAL","mapData","firstStart","lastStart","fails","createPropertyDescriptor","handleRollover","probe","PES_TIMESCALE","isLikelyAacData","parsePsi_","parseType","table","parseAudioPes_","pesType","pusi","parsed","endLoop","parsePesType","parsePayloadUnitStartIndicator","parsePesTime","parseVideoPes_","currentFrame","firstKeyFrame","videoPacketContainsKeyFrame","adjustTimestamp_","baseTimestamp","audioBaseTimestamp","ptsTime","videoBaseTimestamp","inspectAac_","audioCount","parseAacTimestamp","parseSampleRate","audioTimescale","inspectTs_","isAacData","PADDING","plaintext","padding","SourceUpdater","createSourceBuffer","sourceBuffer_","addSourceBuffer","onUpdateendCallback_","pendingCallback","pendingCallback_","runCallback_","callbacks_","processedAppend_","queueCallback_","appendBuffer","autoKeyword","directionSetting","alignSetting","findDirectionSetting","findAlignSetting","cobj","baseObj","_id","_pauseOnExit","_startTime","_endTime","_text","_region","_vertical","_snapToLines","_line","_lineAlign","_position","_positionAlign","_size","_align","getCueAsHTML","isNativeReflectConstruct","_construct","Parent","Class","construct","REQUEST_ERRORS","FAILURE","TIMEOUT","ABORTED","byterangeStr","byterangeStart","byterangeEnd","segmentXhrHeaders","Range","abortAll","activeXhrs","getRequestStats","bytesReceived","roundTripTime","getProgressStats","progressEvent","requestTime","stats","loaded","handleErrors","timedout","aborted","handleKeyResponse","finishProcessingFn","errorObj","handleInitSegmentResponse","handleSegmentResponse","encryptedBytes","decryptSegment","doneFn","decryptionHandler","requestId","getMostImportantError","prev","waitForCompletion","endOfAllRequests","worstError","handleProgress","progressFn","firstBytesReceivedAt","mediaSegmentRequest","xhrOptions","decryptionWorker","keyRequestOptions","responseType","keyRequestCallback","keyXhr","initSegmentOptions","initSegmentRequestCallback","initSegmentXhr","segmentRequestOptions","segmentRequestCallback","segmentXhr","root","URL_REGEX","FIRST_SEGMENT_REGEX","SLASH_DOT_REGEX","SLASH_DOT_DOT_REGEX","URLToolkit","alwaysNormalize","basePartsForNormalise","parseURL","buildURLFromParts","relativeParts","scheme","baseParts","netLoc","builtParts","params","query","baseURLPath","newPath","flushSource","percentEncode","parseUtf8","parseIso88591","parseSyncSafeInteger","tagParsers","TXXX","WXXX","PRIV","owner","tagSize","dispatchType","frameStart","frameHeader","defaultOptions","errorInterval","getSource","IWillNotUseThisInPlugins","initPlugin","lastCalled","localOptions","loadedMetadataHandler","cleanupEvents","reinitPlugin","newOptions","reloadSourceOnError","_muxJsLibMp4","_muxJsLibMp42","initArray","typedArray","captionStream","gopInfo","setBaseMediaDecodeTime","setAudioAppendStart","appendStart","alignGopsWith","gopsToAlignWith","TransmuxerWorker","MAX_TS","RO_THRESH","lastDTS","referenceDTS","type_","nextNewline","subresults","traks","trafs","baseTimes","baseTime","Target","Source","CoalesceStream","numberOfTracks","metadataStream","videoTrack","audioTrack","pendingCaptions","pendingMetadata","pendingTracks","processedTracks","id3","timelineStartPts","captionStreams","cueShim","regionShim","nativeVTTCue","nativeVTTRegion","shim","restore","classof","isFunction","createXHR","httpHandler","parseHeaders","forEachArray","isEmpty","initParams","_createXHR","called","readystatechange","loadFunc","getBody","getXml","isJson","errorFunc","evt","timeoutTimer","failureResponse","useXDR","rawRequest","getAllResponseHeaders","XDomainRequest","XMLHttpRequest","onprogress","onabort","ontimeout","username","password","setRequestHeader","beforeSend","send","responseXML","firefoxBugTakenEffect","createTextTracksIfNecessary","ID3","getId3Size","getId3Offset","H264Stream","NalByteStream","PROFILES_WITH_OPTIONAL_SPS_DATA","swapBuffer","100","110","122","244","44","83","86","118","128","138","139","134","currentPts","currentDts","discardEmulationPreventionBytes","readSequenceParameterSet","skipScalingList","nalByteStream","expGolombDecoder","deltaScale","lastScale","nextScale","emulationPreventionBytesPositions","chromaFormatIdc","picOrderCntType","numRefFramesInPicOrderCntCycle","picWidthInMbsMinus1","picHeightInMapUnitsMinus1","frameMbsOnlyFlag","scalingListCount","sarRatio","aspectRatioIdc","frameCropLeftOffset","frameCropRightOffset","frameCropTopOffset","frameCropBottomOffset","sarScale","clamp","filterRanges","timeRanges","findSoleUncommonTimeRangesEnd","edges","overlapsCurrentEnd","span","bufferIntersection","bufferA","bufferB","extents","calculateBufferedPercent","adjustedRange","referenceRange","referenceDuration","adjustedDuration","bufferMissingFromAdjusted","adjustedIntersection","referenceIntersection","adjustedOverlap","referenceOverlap","getSegmentBufferedPercent","endOfSegment","originalSegmentRange","adjustedSegmentRange","strArr","padded","TagList","_proto","_length","TAB","parseByterange","byterangeString","attributeSeparator","keyvalue","parseAttributes","customParsers","tagMappers","newLines","mapper","mappedLine","newLine","BYTERANGE","resolution","PRECISE","subkey","addParser","expression","customType","dataParser","addTagMapper","mapFn","camelCase","camelCaseKeys","setHoldBack","serverControl","partTargetDuration","hb","phb","minTargetDuration","minPartDuration","hasParts","widevineUuid","lastByterangeEnd","lastPartByterangeEnd","preloadHints","preloadSegment","KEYFORMAT","contentProtection","VALID_METHODS","KEYID","schemeIdUri","keyId","pssh","timeOffset","precise","skip","warnOnMissingAttributes_","partIndex","renditionReports","canBlockReload","canSkipDateranges","hint","isPart","otherHint","required","partInf","partTarget","custom","identifier","missing","_attributes$BYTERANGE","_attributes$BYTERANGE2","headersArr","FlvTag","metadataLength","headBytes","setUint8","METADATA_TAG","writeMetaDataDouble","finalize","_transmuxerWorker","_transmuxerWorker2","resolveTransmuxWorker","makeWrappedSourceBuffer","realBuffer_","gopsSafeToAlignWith","currentTimePts","updateGopBuffer","gops","removeGopBuffer","updatedBuffer","VirtualSourceBuffer","pendingBuffers_","bufferUpdating_","codecs_","audioCodec_","videoCodec_","audioDisabled_","appendAudioInitSegment_","gopBuffer_","timeMapping_","safeAppend_","remux","alignGopsAtEnd","isVideoCodec","data_","done_","appendGopInfo_","videoBuffer_","audioBuffer_","appendWindowStart","videoBuffered","audioBuffered","processPendingSegments_","codecProperty","nativeMediaSource_","shouldTrigger","sortedSegments","segmentObj","createRealSourceBuffers_","triggerUpdateend","concatAndAppendSegments_","destinationBuffer","originalError","notEmptyString","splitOnASCIIWhitespace","orderedSetReducer","toOrderedSet","arrayIncludes","dest","Super","pt","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","ExceptionCode","ExceptionMessage","HIERARCHY_REQUEST_ERR","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","NOT_FOUND_ERR","WRONG_DOCUMENT_ERR","INVALID_CHARACTER_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","INUSE_ATTRIBUTE_ERR","NOT_SUPPORTED_ERR","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","NAMESPACE_ERR","INVALID_ACCESS_ERR","DOMException","NodeList","LiveNodeList","refresh","_node","_refresh","_updateLiveList","inc","_inc","ls","__set__","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","ownerElement","_onRemoveAttribute","_onAddAttribute","_removeNamedNode","Node","_xmlEncoder","_visitNode","Document","_nsMap","_onUpdateChild","_removeChild","previous","previousSibling","lastChild","hasValidParentNodeType","hasInsertableNodeType","isElementNode","isDocTypeNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","hasElementChildThatIsNotChild","assertPreInsertionValidity1to5","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","hasDoctypeChildThatIsNotChild","_insertBefore","_inDocumentAssertion","cp","newFirst","newLast","pre","_appendSingleChild","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","nodeSerializeToString","isHtml","nodeFilter","lookupPrefix","visibleNamespaces","namespace","serializeToString","needNamespaceDefine","addSerializedAttribute","qualifiedName","prefixedNodeName","defaultNS","ai","nsi","internalSubset","importNode","deep","node2","attrs2","_ownerElement","getNamedItem","setNamedItem","setNamedItemNS","getNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","feature","refChild","replaceChild","oldChild","appendData","hasAttributes","lookupNamespaceURI","isDefaultNamespace","importedNode","rtv","getElementsByClassName","classNames","classNamesSet","base","nodeClassNames","matches","nodeClassNamesSet","createAttribute","specified","createEntityReference","pl","getAttributeNode","removeAttributeNode","setAttributeNodeNS","removeAttributeNS","getAttributeNodeNS","hasAttributeNS","getAttributeNS","setAttributeNS","getElementsByTagNameNS","substringData","insertData","replaceData","deleteData","splitText","newText","newNode","getTextContent","$$length","xhrFactory","XhrFunction","beforeRequest","reqResponse","responseTime","originalAbort","precompute","tables","encTable","decTable","sbox","sboxInv","xInv","th","x2","x4","x8","tEnc","tDec","aesTables","AES","_tables","encKey","decKey","keyLen","rcon","encrypted0","encrypted1","encrypted2","encrypted3","out","a2","c2","nInnerRounds","kIndex","table0","table1","table2","table3","$default","$this","Wrapper","NewTarget","NewTargetPrototype","_virtualSourceBuffer","_virtualSourceBuffer2","HtmlMediaSource","activeSourceBuffers_","updateActiveSourceBuffers_","disableCombined","disableAudioOnly","onPlayerMediachange_","onHlsSegmentTimeMapping_","url_","sourcebuffer","parameters","_inheritsLoose","removeCuesFromTrack","audioTrackKind_","stopLoaders","segmentLoader","startLoaders","onGroupChanged","_settings$segmentLoaders","mainSegmentLoader","activeTrack","activeGroup","previousActiveLoader","resyncLoader","onTrackChanged","_settings$segmentLoaders2","onError","defaultTrack","setupListeners","initialize","_settings$mediaTypes$type","variantLabel","_settings$mediaTypes$type2","_settings$mediaTypes$type3","variants","onAudioTrackChanged","alert","confirm","prompt","_x6","_sourceUpdater","_sourceUpdater2","_mediaSegmentRequest","_playlistSelectors","CHECK_BUFFER_DELAY","detectEndOfStream","appendedLastSegment","finite","illegalMediaSwitch","startingMedia","newSegmentMedia","safeBackBufferTrimTime","removeToTime","SegmentLoader","throughput","roundTrip","resetStats_","seeking_","loaderType_","startingMedia_","goalBufferLength_","checkBufferTimeout_","mimeType_","sourceUpdater_","xhrOptions_","activeInitSegmentId_","fetchAtBuffer_","mediaBytesTransferred","mediaRequests","mediaRequestsAborted","mediaRequestsTimedout","mediaRequestsErrored","mediaTransferDuration","abort_","abortRequests","_error","setDateTimeMapping","saveExpiredSegmentInfo","_mimeType","monitorBufferTick_","fillBuffer_","lastBufferedEnd","bufferedTime","getSyncSegmentCandidate_","mediaSourceInfo","getMediaInfoForTime","segmentIndexArray","measuredBandwidth","requestTimeRemaining","switchCandidate","timeSavedBySwitching","minimumTimeSaving","simpleSegment","abortRequestEarly_","trimBackBuffer_","createSimplifiedSegmentObj_","handleProgress_","segmentRequestFinished_","processSegmentResponse_","probeSegmentInfo","illegalMediaSwitchError","timelineMapping","mappingForTimeline","initId","isWalkingForward","recordThroughput_","addSegmentMetadataCue_","segmentProcessingTime","segmentProcessingThroughput","_aes","_aes2","_asyncStream","_asyncStream2","_pkcs7","ntoh","word","decrypt","initVector","encrypted32","Int32Array","decipher","decrypted32","init0","init1","init2","init3","wordIx","STEP","asyncStream_","decryptChunk_","unpad","createDefaultSample","collectDtsInfo","clearDtsInfo","calculateTrackBaseMediaDecodeTime","arrayEquals","sumFrameByteLengths","clock","AUDIO_PROPERTIES","VIDEO_PROPERTIES","currentObj","adtsFrames","earliestAllowedDts","audioAppendStartTs","videoBaseMediaDecodeTime","setEarliestDts","earliestDts","setVideoBaseMediaDecodeTime","trimAdtsFramesByEarliestDts_","prefixWithSilence_","generateSampleTable_","concatenateFrameData_","baseMediaDecodeTimeTs","silentFrame","frameDuration","audioGapDuration","audioFillFrameCount","audioFillDuration","minSegmentDts","minSegmentPts","nalUnits","minPTS","gopCache_","nalUnit","gopForFusion","resetStream_","groupNalsIntoFrames_","groupFramesIntoGops_","getGopForFusion_","nalCount","extendFirstKeyFrame_","alignedGops","alignGopsAtEnd_","alignGopsAtStart_","gop","concatenateNalData_","dtsDistance","nearestGopObj","currentGop","currentGopObj","halfSecond","allowableOverlap","nearestDistance","currentNal","baseDataOffset","nalsByteLength","numberOfNals","totalByteLength","alignIndex","gopIndex","alignEndIndex","matchFound","trimIndex","newGopsToAlignWith","maxSegmentPts","maxSegmentDts","timeSinceStartOfTimeline","remuxTracks","pendingBoxes","pendingBytes","emittedTracks","hasFlushed","transmuxPipeline_","setupAacPipeline","pipeline","aacStream","audioTimestampRolloverStream","timedMetadataTimestampRolloverStream","adtsStream","coalesceStream","headOfPipeline","audioSegmentStream","setupTsPipeline","packetStream","elementaryStream","videoTimestampRolloverStream","h264Stream","videoSegmentStream","isAac","enableFunction","loader","playlistUri","changePlaylistFn","incompatible","currentlyEnabled","Representation","hlsHandler","fastChangeFunction","masterPlaylistController_","fastQualityChange_","renditionSelectionMixin","representations","collectTimelineInfo","extraDataTag","VIDEO_TAG","writeByte","writeShort","writeBytes","oldExtraData","videoKeyFrames","extraData","adtsFrame","lastMetaPts","writeMetaDataTags","AUDIO_TAG","writeMetaDataBoolean","setUint16","onVideoKeyFrame","h264Frame","finishFrame","newMetadata","metaTag","extraTag","endNalUnit","startNalUnit","backwardDuration","endSequence","forwardDuration","intervalDuration","backward","forward","durations","safeLiveIndex","distanceFromEnd","safeDistance","useSafeLiveEnd","isWholeNumber","roundSignificantDigit","increment","numDecimalDigits","ceilLeastSignificantDigit","floorLeastSignificantDigit","numSegments","isBlacklisted","blacklisted","currentBandwidth","pad","forEachMediaGroup","merge","objects","flatten","lists","findIndexes","findIndex","matchingFunction","union","keyFunction","INVALID_NUMBER_OF_PERIOD","DASH_EMPTY_MANIFEST","DASH_INVALID_XML","NO_BASE_URL","MISSING_SEGMENT_INFORMATION","SEGMENT_TIME_UNSPECIFIED","UNSUPPORTED_UTC_TIMING_SCHEME","_ref$baseUrl","_ref$source","_ref$range","_ref$indexRange","indexRange","rangeStr","startRange","endRange","parseEndNumber","endNumber","segmentRange","static","_attributes$timescale","sourceDuration","periodDuration","dynamic","NOW","clientOffset","availabilityStartTime","_attributes$timescale2","_attributes$periodSta","periodStart","_attributes$minimumUp","minimumUpdatePeriod","_attributes$timeShift","timeShiftBufferDepth","periodStartWC","periodEndWC","segmentCount","availableStart","availableEnd","toSegments","_attributes$timescale3","_attributes$startNumb","startNumber","parseByDuration","_attributes$timescale4","_segmentRange$type","sectionDuration","segmentsFromBase","_attributes$initializ","initialization","_attributes$indexRang","presentationTime","_attributes$number","sourceURL","segmentTimeInfo","addSidxSegmentsToPlaylist$1","sidx","sidxByteRange","sidxEnd","mediaReferences","references","referenceType","firstOffset","referencedSize","subsegmentDuration","SUPPORTED_MEDIA_TYPES","TIME_FUDGE","getUniqueTimelineStarts","timelineStarts","findPlaylistWithName","mediaGroupPlaylists","updateMediaSequenceForPlaylist","updateSequenceNumbers","oldPlaylists","newPlaylists","_ref4","firstNewSegment","oldMatchingSegmentIndex","oldSegment","oldMatchingSegment","positionManifestOnTimeline","_ref5","oldManifest","newManifest","generateSidxKey","mergeDiscontiguousPlaylists","mergedPlaylists","_acc$name$segments","sidxMapping","sidxKey","sidxMatch","addSidxSegmentsToPlaylists","formatAudioPlaylist","isAudioOnly","_attributes","formatVttPlaylist","_m3u8Attributes","m3u8Attributes","organizeAudioPlaylists","mainPlaylist","formattedPlaylists","roleLabel","formatted","firstLabel","organizeVttPlaylists","organizeCaptionServices","captionServices","svcObj","svc","service","channel","easyReader","formatVideoPlaylist","_attributes2","videoOnly","audioOnly","vttOnly","_ref6","addMediaSequenceValues","_ref7","flattenMediaGroupPlaylists","mediaGroupObject","labelContents","toM3u8","_ref8","dashPlaylists","locations","_ref8$sidxMapping","previousManifest","_dashPlaylists$0$attr","suggestedPresentationDelay","videoPlaylists","audioPlaylists","vttPlaylists","VIDEO","organizedAudioGroup","organizedVttGroup","playlistTimelineStarts","_ref9","subs","getLiveRValue","parseByTimeline","segmentTimeline","_attributes$minimumUp2","_attributes$media","sIndex","S","segmentTime","nextS","identifierPattern","identifierReplacement","constructTemplateUrl","parseTemplateInfo","templateValues","RepresentationID","Bandwidth","mapSegment","Time","presentationTimeOffset","SegmentURLToSegmentObject","segmentUrl","mediaRange","segmentsFromList","_attributes$segmentUr","segmentUrls","segmentUrlMap","segmentUrlObject","generateSegments","segmentAttributes","segmentsFn","template","segmentsInfo","_segmentAttributes","_segmentAttributes$ti","toPlaylists","findChildren","getContent","parseDuration","SECONDS_IN_YEAR","SECONDS_IN_MONTH","SECONDS_IN_DAY","SECONDS_IN_HOUR","SECONDS_IN_MIN","durationRegex","_match$slice","year","month","day","hour","minute","second","parseDate","dateRegex","parsers","mediaPresentationDuration","parsedValue","parseFn","keySystemsMap","referenceUrls","baseUrlElements","baseUrlElement","getSegmentInformation","adaptationSet","segmentTemplate","segmentList","segmentBase","segmentTimelineParentNode","segmentInitializationParentNode","segmentInitialization","inheritBaseUrls","adaptationSetAttributes","adaptationSetBaseUrls","adaptationSetSegmentInfo","representation","repBaseUrlElements","repBaseUrls","representationSegmentInfo","contentProtectionNodes","keySystem","psshNode","parseCaptionServiceMetadata","_value$split","_values","_value$split2","_value$split2$","opt","_opt$split","toRepresentations","periodAttributes","periodBaseUrls","periodSegmentInfo","roleAttributes","accessibility","labelVal","toAdaptationSets","mpdAttributes","mpdBaseUrls","period","adaptationSets","getPeriodStart","priorPeriodAttributes","mpdType","inheritAttributes","mpd","_options","_options$manifestUri","manifestUri","_options$NOW","_options$clientOffset","periodNodes","periods","priorPeriod","representationInfo","manifestString","parseUTCTimingScheme","UTCTimingNode","parsedManifestInfo","parseUTCTiming","parsePid","parseAdaptionField","payloadOffset","parseNalUnitType","frameBuffer","frameI","frameSyncPoint","foundKeyFrame","_xhr","_xhr2","_binUtils2","_videojsContribMediaSources","_masterPlaylistController","_renditionMixin","_renditionMixin2","_playbackWatcher","_playbackWatcher2","_reloadSourceOnError","_reloadSourceOnError2","_playlistSelectorsJs","AsyncStream","STANDARD_PLAYLIST_SELECTOR","INITIAL_PLAYLIST_SELECTOR","INITIAL_BANDWIDTH","handleHlsMediaChange","qualityLevels","selectedIndex_","handleHlsLoadedMetadata","addQualityLevel","supportsNativeHls","canPlay","canItPlay","HlsHandler","source_","ignoreNextSeekingEvent_","setOptions_","overrideNative","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","pauseLoading","option","playbackWatcher_","invBandwidth","invThroughput","systemBitrate","mediaRequests_","mediaRequestsAborted_","mediaRequestsTimedout_","mediaRequestsErrored_","mediaTransferDuration_","mediaBytesTransferred_","mediaSecondsLoaded_","setupQualityLevels_","qualityLevels_","HlsSourceHandler","flashTech","supportsNativeMediaSources","read","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","write","LN2","_flashMediaSource","_flashMediaSource2","_htmlMediaSource","_htmlMediaSource2","urlCount","defaults","mediaSources","msObjectURL","objectUrlPrefix","_isNativeReflectConstruct","sham","Proxy","valueOf","adHoc","bufferStartSize","prepareWrite","flv","minLength","widthBytes","heightBytes","videocodecidBytes","short","negIndex","nalUnitSize","nalContainer","nalLength","setFloat64","dtsDelta","frameTime","isAudioFrame","isVideoFrame","isMetaData","isKeyFrame","xtend","version$5","prefixed","LogByTypeFactory","createLogger$1","createLogger","subname","fname","historyItem","computedStyleValue","IS_WINDOWS","offsetParent","offsetLeft","translated","transform","boxTarget","offsetY","offsetX","videojs$1","setWindowLoaded","FakeWeakMap","_initialGuid","WeakMap","vdata","access","DomData","fixed_","supportsPassive","any","EVENT_MAP","cancel","debounced","EventTarget$2","queueTrigger","Map","oldTimeout","objName","addEventedCallback","eventedCallbacks","_normalizeListenArgs3","_len5","_key5","w","toTitleCase$1","mergeOptions$3","MapSham","map_","thisArg","Map$1","SetSham","set_","Set$1","Set","Component$1","isDisposed_","parentComponent_","handleLanguagechange","setTimeoutIds_","setIntervalIds_","rafIds_","namedRafs_","clearingTimersOnDispose_","restoreEl","isDisposed","getDescendant","currentChild","clearTimersOnDispose_","requestNamedAnimationFrame","cancelNamedAnimationFrame","idName","cancelName","timeRangesObj","handleKeyDown_","close_","labelchange_","labelchange","enabledChange_","selectedChange_","queueChange_","triggerSelectedlanguagechange","triggerSelectedlanguagechange_","selectedlanguagechange_","newLabel","preload_","preloadTextTracks","rvf_","requestVideoFrameCallback","disposeHandler","stopTracking","startTracking","cancelVideoFrameCallback","onDurationChange_","trackProgress_","trackCurrentTime_","stopTrackingCurrentTime_","disposeSourceHandler_","queuedHanders_","setCrossOrigin","setScrubbing","requestPictureInPicture","reject","disablePictureInPicture","setDisablePictureInPicture","overrideNativeAudioTracks","overrideNativeVideoTracks","featuresVideoFrameCallback","setMuted","setVolume","_middleware","m4a","caf","jpg","jpeg","gif","png","svg","webp","handleMouseOver_","handleMouseOver","handleMouseOut_","handleMouseOut","handleClick_","noUITitleAttributes","clickHandler","sourceIsEncrypted","eme","sessions","updateDisplayHandler","allowMultipleShowingTracks","showingTracks","updateDisplayState","_track2","_j","cueEl","replay","oldNode","displayNegative","SeekToLive","updateLiveEdgeStatus","liveTracker","updateLiveEdgeStatusHandler_","textEl_","atLiveEdge","seekToLiveEdge","handleMouseDown_","handleMouseUp_","handleMouseMove_","getProgress","progress_","sizeKey","loadedText","separator","percentageEl_","isLive","percent_","dataset","updateTime","liveWindow","secondsBehind","PAGE_KEY_MULTIPLIER","enableIntervalHandler_","enableInterval_","disableIntervalHandler_","disableInterval_","toggleVisibility_","visibilityState","liveCurrentTime","userSeek_","nextSeekedFromUser","mouseDown","gotoFraction","handleMouseUpHandler_","handleMouseDownHandler_","playProgressBar","removeListenersAddedOnMousedownAndTouchstart","PictureInPictureToggle","handlePictureInPictureChange","handlePictureInPictureEnabledChange","isSourceAudio","audioPosterMode","audioOnlyMode","isInPictureInPicture","exitPictureInPicture","pictureInPictureEnabled","fsApi_","VolumeLevelTooltip","rangeBarRect","rangeBarPoint","volumeBarPointPx","updateVolume","MouseVolumeLevelDisplay","mouseVolumeLevelDisplay","volumeBarEl","volumeBarRect","volumeBarPoint","handleKeyPressHandler_","handleVolumeControlKeyUp","boundHandleBlur_","boundHandleTapClick_","handleTapClick","addEventListenerForItem","removeEventListenerForItem","childComponent","btn","childComponents","foundComponent","handleMenuKeyUp_","handleMenuKeyUp","handleMouseLeave","handleSubmenuKeyDown","titleEl","titleComponent","MenuKeys","referenceTrack","selectCurrentItem_","parentSpan","labelElId_","handlePlaybackRateschange","newIndex","LOCAL_STORAGE_KEY$1","unloadListener_","trackingThreshold","liveTolerance","LiveTracker","handleVisibilityChange_","handleVisibilityChange","trackLiveHandler_","trackLive_","handlePlay_","handleFirstTimeupdate_","handleFirstTimeupdate","handleSeeked_","seekToLiveEdge_","reset_","handleDurationchange","toggleTracking","deltaTime","lastTime_","pastSeekEnd_","pastSeekEnd","isBehind","seekedBehindLive_","timeupdateSeen_","behindLiveEdge_","liveui","isTracking","trackingInterval_","timeDiff","nextSeekedFromUser_","lastSeekEnd_","seekableEnds","seekableStarts","behindLiveEdge","defineLazyProperty","isScrubbing_","overrideNative_","override","lowerCaseType","proxyNativeTracksForType_","fastSeek","nativeIOSFullscreen","webkitDisplayingFullscreen","webkitKeys","canControl","BREAKPOINT_ORDER","BREAKPOINT_CLASSES","DEFAULT_BREAKPOINTS","tiny","xsmall","small","medium","large","xlarge","huge","boundDocumentFullscreenChange_","documentFullscreenChange_","boundFullWindowOnEscKey_","boundUpdateStyleEl_","boundApplyInitTime_","applyInitTime_","boundUpdateCurrentBreakpoint_","updateCurrentBreakpoint_","boundHandleTechClick_","boundHandleTechDoubleClick_","handleTechDoubleClick_","boundHandleTechTouchStart_","boundHandleTechTouchMove_","boundHandleTechTouchEnd_","boundHandleTechTap_","debugEnabled_","audioOnlyMode_","audioPosterMode_","audioOnlyCache_","hiddenChildren","resetCache_","playCallbacks_","playTerminatedQueue_","breakpoints","responsive","tabindex","fill_","crossorigin","normalizeAutoplay","handleTechFullscreenError_","handleTechEnterPictureInPicture_","handleTechLeavePictureInPicture_","resolveMuted","restoreMuted","mutedPromise","updateSourceCaches","playerSrc","eventSrc","lastSource_","techSrc","techGet","timeWhenWaiting","timeUpdateListener","userActions","click","inAllowedEls","doubleClick","cancelable","toggleFullscreenClass_","targetPlayer","isFs","fullscreen","msMatchesSelector","togglePictureInPictureClass_","initTime","isSrcReady","waitToPlay_","runPlayTerminatedQueue_","runPlayCallbacks_","queue","q","oldValue","fullscreenOptions","offHandler","requestFullscreenHelper_","fsOptions","preferFullWindow","exitFullscreenHelper_","_this13","isPiP","isInPictureInPicture_","hotkeys","excludeElement","isContentEditable","allowedInputTypes","excludedTags","handleHotkeys","_hotkeys$fullscreenKe","fullscreenKey","keydownEvent","_hotkeys$muteKey","muteKey","_hotkeys$playPauseKey","playPauseKey","FSToggle","_this14","handleSrc_","isRetry","_this15","resetRetryOnError_","retryOnError","retry","stopListeningForErrors","_this16","_this17","doReset_","resetControlBarUI_","resetProgressBar_","resetPlaybackRate_","resetVolumeBar_","durationDisplay","_this18","newErr","suppressNotSupportedError","triggerSuppressedError","handleMouseUpAndMouseLeave","enableAudioOnlyUI_","_this19","playerChildren","controlBarHeight","disableAudioOnlyUI_","_this20","exitPromises","enablePosterModeUI_","disablePosterModeUI_","_this21","audioOnlyModePromise","_obj","_this22","currentBreakpoint","candidateBreakpoint","maxWidth","breakpoints_","breakpoint_","removeCurrentBreakpoint_","currentBreakpointClass","_breakpoints","responsive_","loadMedia","_this23","_this$cache_$media","artwork","getMedia","previousLogLevel_","newRates","navigationUI","defaultView","handleManifestRedirect","logger","timeRangesToArray","timeRangesList","isRangeDifferent","timeAheadOf","segmentDurationWithParts","getPartsAndSegments","si","getLastParts","getKnownPartCount","partCount","liveEdgeDelay","partHoldBack","holdBack","defaultDuration","durationList","liveEdgePadding","lastSegmentEndTime","startingSegmentIndex","startingPartIndex","experimentalExactManifestTimings","partsAndSegments","partAndSegment","_partAndSegment","_i4","_partAndSegment2","playlistMatch","someAudioVariant","groupName","createPlaylistID","parseManifest","onwarn","oninfo","_ref$customTagParsers","customTagParsers","_ref$customTagMappers","customTagMappers","experimentalLLHLS","customParser","setupMediaPlaylist","playlistErrors_","masterForMedia","addPropertiesToMaster","phonyUri","audioOnlyMaster","mergeOptions$2","EventTarget$1","addLLHLSQueryDirectives","nextMSN","nextPart","_HLS_part","_HLS_msn","canSkipUntil","_HLS_skip","parsedUri","searchParams","updateSegment","skipped","oldSegments","newSegments","newSegment","getAllSegments","isPlaylistUnchanged","updateMaster$1","newMedia","unchangedCheck","oldMedia","skippedSegments","lastPart","lastDuration","vhs","_options$withCredenti","_options$handleManife","vhs_","vhsOptions","handleMediaupdatetimeout_","playlistString","parseManifest_","playlistObject","lastRequest","pendingMedia_","updateMediaUpdateTimeout_","finalRenditionTimeout","shouldDelay","masterPlaylistRef","setupInitialPlaylist","srcUri","videojsXHR","mergeOptions$1","callbackWrapper","responseHeaders","Vhs","xhrMethod","segmentKeyId","SEGMENT_END_FUDGE_PERCENT","playerTimeToProgramTime","playerTime","transmuxerPrependedSeconds","videoTimingInfo","transmuxedStart","transmuxedPresentationStart","offsetFromSegmentStart","originalSegmentVideoDuration","transmuxedPresentationEnd","findSegmentForProgramTime","programTime","nextSegmentStart","lastSegmentStart","lastSegmentDuration","lastSegmentEnd","estimatedStart","findSegmentForPlayerTime","segmentEnd","getOffsetFromTimestamp","comparisonTimeStamp","segmentDateTime","programDateTime","segmentTimeEpoch","programTimeEpoch","verifyProgramDateTimeTags","getProgramTime","_ref$time","matchedSegment","seekTime","programTimeObject","mediaSeconds","toISOString","seekToProgramTime","_ref2$retryCount","retryCount","_ref2$pauseAfterSeek","pauseAfterSeek","mediaOffset","seekToTime","seekedCallback","callbackOnCompleted","containerRequest","id3Offset","finished","endRequestAndCallback","_bytes","progressListener","newPart","overrideMimeType","dashPlaylistUnchanged","aSegment","bSegment","aByterange","bByterange","parseMasterXml","masterXml","oldMaster","newMaster","noChanges","playlistUpdate","_playlistUpdate","equivalentSidx","neitherMap","equivalentMap","compareSidxEntry","oldSidxMapping","newSidxMapping","currentSidxInfo","savedSidxInfo","sidxInfo","filterChangedSidxMappings","videoSidx","mediaGroupSidx","DashPlaylistLoader","srcUrlOrPlaylist","isMaster_","refreshXml_","refreshMedia_","loadedPlaylists_","sidxMapping_","childPlaylist_","requestErrored_","addSidxSegments_","fin","internal","_playlist$sidx$bytera","mediaRequest_","minimumUpdatePeriodTimeout_","createMupOnMedia_","hasPendingRequest","sidxChanged","updateMinimumUpdatePeriodTimeout_","requestMaster_","masterChanged","haveMaster_","masterXml_","date","masterLoaded_","handleMaster_","syncClientServerClock_","utcTiming","clientOffset_","serverTime","mpl","mup","createMUPTimeout_","mediaID","mediaChanged","createMediaUpdateTimeout","Config","BACK_BUFFER_LENGTH","EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE","BUFFER_HIGH_WATER_LINE","stringToArrayBuffer","browserWorkerPolyFill","workerObj","BlobBuilder","getBlob","factory","objectUrl","objURL","revokeObjectURL","getWorkerString","workerCode$1","partialFlush","endTimeline","trun$1","MAX_UINT32$1","getUint64$2","numbers","pasp","avc1Box","hSpacing","vSpacing","bytesOffest","silence","metadataTsToSeconds","mp4Generator","groupNalsIntoFrames","groupFramesIntoGops","extendFirstKeyFrame","sampleForFrame","generateSampleTable$1","concatenateNalData","generateSampleTableForFrame","concatenateNalDataForFrame","frameUtils","generateSampleTable","silence_1","ONE_SECOND_IN_TS$4","keepOriginalTimestamps","prefixWithSilence","firstFrame","trimAdtsFramesByEarliestDts","concatenateFrameData","audioFrameUtils","ONE_SECOND_IN_TS$3","trackDecodeInfo","userIdentifier","discardEmulationPreventionBytes$1","captionPacketParser","CaptionStream$1","parse708captions_","parse708captions","cc708Stream_","Cea708Stream","newCaptionPackets","numSameDts_","flushCCStreams","flushType","dispatchCea708Packet","setsTextOrXDSActive","CHARACTER_TRANSLATION_708","get708CharFromCode","newCode","within708TextBlock","Cea708Window","windowNum","clearText","pendingNewLine","winAttr","penAttr","penLoc","penColor","visible","rowLock","columnLock","relativePositioning","anchorVertical","anchorHorizontal","anchorPoint","rowCount","virtualRowCount","columnCount","windowStyle","penStyle","getText","rows","rowIdx","beforeRowOverflow","addText","backspace","Cea708Service","serviceNum","encoding","currentWindow","windows","createTextDecoder","setCurrentWindow","textDecoder_","serviceProps","captionServiceEncodings","serviceName","serviceEncodings","current708Packet","services","new708Packet","add708Bytes","push708Packet","ptsVals","byte0","byte1","packet708","blockSize","seq","sizeCode","pushServiceBlock","initService","handleText","multiByteCharacter","extendedCommands","defineWindow","clearWindows","deleteWindows","displayWindows","hideWindows","toggleWindows","setWindowAttributes","setPenAttributes","setPenColor","setPenLocation","isExtended","getPts","_char","charCodeArray","isMultiByte","extended","currentByte","nextByte","firstByte","secondByte","fillOpacity","fillRed","fillGreen","fillBlue","borderType","borderRed","borderGreen","borderBlue","wordWrap","printDirection","scrollDirection","justify","effectSpeed","effectDirection","displayEffect","displayedText","winId","pushCaption","textTag","penSize","italics","underline","edgeType","fontStyle","fgOpacity","fgRed","fgGreen","fgBlue","bgOpacity","bgRed","bgGreen","bgBlue","edgeRed","edgeGreen","edgeBlue","column","rollUpRows_","setRollUp","_char2","newBaseRow","streamTypes","TYPE_SHARED","handleRollover$1","TimestampRolloverStream$1","_MetadataStream","timestampRolloverStream","percentEncode$1","parseIso88591$1","parseSyncSafeInteger$1","_TransportPacketStream","_TransportParseStream","_ElementaryStream","MP2T_PACKET_LENGTH$1","SYNC_BYTE$1","segmentHadPmt","startPrefix","flushStreams_","_AdtsStream","m2ts_1","ONE_SECOND_IN_TS$2","ADTS_SAMPLING_FREQUENCIES$1","handlePartialSegments","skipWarn_","_H264Stream","_NalByteStream","expGolomb","nalUnitTypeCode","_AacStream","isLikelyAacData$1","parseType$2","_VideoSegmentStream","_AudioSegmentStream","_Transmuxer","_CoalesceStream","audioProperties","videoProperties","ONE_SECOND_IN_TS$1","retriggerForStream","addPipelineLogRetriggers","generateSegmentTimingInfo","startDts","endDts","prependedContentDuration","ptsOffsetFromDts","decodeDuration","presentationDuration","firstSequenceNumber","videoClockCyclesOfSilencePrefixed","firstGop","lastGop","setRemux","getLogTrigger_","hasAudio","hasVideo","id3Frame","toUnsigned$3","toHexString$1","bin","toUnsigned","parseType$1","parseType_1","toUnsigned$2","findBox_1","toUnsigned$1","getUint64$1","parseTfdt","parseSampleFlags","parseSampleFlags_1","dataOffsetPresent","firstSampleFlagsPresent","sampleDurationPresent","sampleSizePresent","sampleFlagsPresent","sampleCompositionTimeOffsetPresent","getInt32","parseTrun","baseDataOffsetPresent","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","durationIsEmpty","defaultBaseIsMoof","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","baseDataOffsetIsMoof","parseTfhd","commonjsGlobal","globalThis","compositionStartTime","getVideoTrackIds","getTracks","getTimescaleFromMediaHeader","window_1","mapToSample","approximateOffset","findSeiNals","avcStream","seiNal","lastMatchedSample","avcView","logs","seiNals","matchingSample","parseSamples","truns","allSamples","trackRun","parseCaptionNals","videoTrackId","mdats","captionNals","mdatTrafPairs","matchingTraf","pair","headerInfo","parseEmbeddedCaptions","trackNals","CaptionParser","segmentCache","parsedCaptions","parsingPartial","isInitialized","isPartial","isNewInit","videoTrackIds","parsedData","cachedSegment","pushNals","nals","nal","clearParsedCaptions","resetCaptionStream","clearAllCaptions","captionParser","lowestTime","trafBoxes","parsedTfhd","parsedTfdt","parsedTrun","hdlrs","tkhds","handlerType","getUint8","tkhdVersion","sampleDescriptions","codecConfig","codecConfigType","codecBox","probe$2","probe$1","tsInspector","videoSegmentTimingInfo","presentation","audioSegmentTimingInfo","trackInfo","audioTimingInfo","pushMp4Captions","trackIds","probeMp4StartTime","probeMp4Tracks","probeTs","baseStartTime","tsStartTime","videoStart","audioStart","clearAllMp4Captions","clearParsedMp4Captions","setTimestampOffset","TransmuxWorker","handleData_","transmuxedData","_event$data$segment","videoFrameDtsTime","videoFramePtsTime","handleDone_","handleGopInfo_","processTransmux","audioAppendStart","onData","onTrackInfo","onAudioTimingInfo","onVideoTimingInfo","onVideoSegmentTimingInfo","onAudioSegmentTimingInfo","onId3","onCaptions","onDone","onEndedTimeline","onTransmuxerLog","isEndOfTimeline","waitForEndedTimelineEvent","handleMessage","currentTransmux","dequeue","transmuxQueue","processAction","enqueueAction","transmux","createTransmuxer","term","segmentTransmuxer","workerCallback","endAction","listenForEndEvent","isArrayBuffer","transfers","parseInitSegment","_callback","parseError","newBytes","lastReachedChar","transmuxAndNotify","trackInfoFn","timingInfoFn","videoSegmentTimingInfoFn","audioSegmentTimingInfoFn","id3Fn","captionsFn","endedTimelineFn","dataFn","fmp4Tracks","audioStartFn","audioEndFn","videoStartFn","videoEndFn","finish","id3Frames","probeResult","handleSegmentBytes","bytesAsUint8Array","audioCodec","finishLoading","keyBytes","decryptedBytes","didError","segmentFinish","handleLoadEnd","_ref10","loadendState","abortFn","calledAbortFn","_ref11","_ref12","differentMapKey","mapKeyRequestOptions","mapKeyRequestCallback","mapKeyXhr","activeXhr","logFn$1","unwrapCodecList","codecList","codecObj","codecsForPlaylist","logFn","representationToString","limitRenditionByPlayerDimensions","masterPlaylistController","getAudioTrackPlaylists_","_chosenRep","leastPixelDiffRep","experimentalLeastPixelDiffSelector","leastPixelDiffList","pixelDiff","_type","pixelRatio","useDevicePixelRatio","devicePixelRatio","lastSystemBandwidth","concatSegments","createCaptionsTrackIfNotExists","inbandTextTracks","def","captionService","addCaptionData","addMetadata","metadataTrack","createMetadataTrackIfNotExists","removeDuplicateCuesFromTrack","duplicates","occurrences","dupe","shallowEqual","akeys","bkeys","QUOTA_EXCEEDED_ERR","getSyncSegmentCandidate","targetTime","timelineSegments","MIN_BACK_BUFFER","MIN_SEGMENT_DURATION_TO_SAVE_STATS","trimTime","maxTrimTime","segmentInfoString","_segmentInfo$playlist","_segmentInfo$playlist2","segmentLen","selection","independent","hasPartIndex","zeroBasedPartCount","timingInfoPropertyForMedia","timestampOffsetForSegment","overrideCheck","shouldWaitForTimelineChange","timelineChangeController","audioDisabled","lastMainTimelineChange","lastTimelineChange","pendingAudioTimelineChange","pendingTimelineChange","mediaDuration","timingInfos","maxDuration","typeTimingInfo","segmentTooLong","getTroublesomeSegmentDurationMessage","sourceType","isSegmentWayTooLong","isSegmentSlightlyTooLong","segmentTooLongMessage","severity","currentMediaInfo_","startingMediaInfo_","sourceType_","sourceUpdater","state_","timelineChangeController_","shouldSaveSegmentTimingInfo_","useDtsForTimestampOffset_","useDtsForTimestampOffset","captionServices_","pendingSegments_","isPendingTimestampOffset_","appendInitSegment_","playlistOfLastInitSegment_","callQueue_","loadQueue_","metadataQueue_","waitingOnRemove_","quotaExceededErrorRetryTimeout_","cacheEncryptionKeys_","cacheEncryptionKeys","keyCache_","createTransmuxer_","triggerSyncInfoUpdate_","isEndOfStream_","newState","hasEnoughInfoToAppend_","processCallQueue_","hasEnoughInfoToLoad_","processLoadQueue_","mediaAppends","setAudio","removeAudio","clearPendingTimelineChange","checkForAbort_","getMediaInfo_","initSegmentForMap","segmentKey","storedKey","setDateTimeMappingForStart","oldId","force","removesRemaining","removeFinished","removeVideo","chooseNextRequest_","appendedLastPart","preloaded","haveEnoughBuffer","_Playlist$getMediaInf","_partIndex","nextSegment","lastSegmentLastPart","forceTimestampOffset","timestampOffsetForSegment_","audioBufferedEnd","audioTimestampOffset","videoTimestampOffset","earlyAbortWhenNeeded_","timeUntilRebuffer$1","handleAbort_","handleTrackInfo_","checkForIllegalMediaSwitch","handleTimingInfo_","timeType","timingInfoProperty","handleCaptions_","captionData","hasAppendedData_","captionTracks","captionTrack","trackName","_captionTracks$trackN","handleId3_","processMetadataQueue_","callQueue","fun","loadQueue","getCurrentMediaInfo_","setTimeMapping_","updateMediaSecondsLoaded_","firstVideoFrameTimeForData","useVideoTimingInfo","trueSegmentStart_","currentStart","currentVideoTimestampOffset","updateAppendInitSegmentStatus","updateSourceBufferTimestampOffset_","updateTimingInfoEnd_","saveSegmentTimingInfo","shouldSaveTimelineMapping","appendData_","changedTimestampOffset","getInitSegmentAndUpdateState_","handleQuotaExceededError_","audioBufferStart","audioBufferEnd","videoBufferStart","videoBufferEnd","appendToSourceBuffer_","timeToRemoveUntil","handleAppendError_","handleSegmentTimingInfo_","segmentTimingInfo","transmuxedDecodeStart","transmuxedDecodeEnd","updateTransmuxerAndRequestSegment_","shouldUpdateTransmuxerTimestampOffset_","isDiscontinuity","previousSegment","saveTransferStats_","saveBandwidthRelatedStats_","handleTimeout_","waitForAppendsToComplete_","waitForVideo","waitForAudio","waitingOnAppends","checkAppendsDone_","videoQueueCallback","audioQueueCallback","handleAppendsDone_","didChange","getSegmentStartTimeForTimestampOffsetCalculation_","prioritizedTimingInfo","segmentDurationMessage","badSegmentGuess","badPartGuess","Vhs$1","bufferTypes","_updating","queuePending","nextQueueIndexOfType","queueEntry","shiftQueue","queueIndex","cleanupBuffer","titleType","inSourceBuffers","actions","_duration","mime","removeSourceBuffer","changeType","pushQueue","onUpdateend","sourceopenListener_","audioTimestampOffset_","videoTimestampOffset_","delayedAudioAppendQueue_","videoAppendQueued_","onVideoUpdateEnd_","onAudioUpdateEnd_","onVideoError_","videoError_","onAudioError_","audioError_","createdSourceBuffers_","initializedEme_","triggeredReady_","initializedEme","hasCreatedSourceBuffers","hasInitializedAnyEme","createSourceBuffers","addOrChangeSourceBuffers","canRemoveSourceBuffer","canChangeType","SourceBuffer","videoBuffer","que","audioBuffer","uint8ToUtf8","_char3","featuresNativeTextTracks_","stopForError","_segment$cueOutCont$s","MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC","timelineToDatetimeMappings","datetimeMapping","firstSegment","didCalculateSegmentTimeMapping","dateTime","TimelineChangeController","pendingTimelineChanges_","lastTimelineChanges_","workerCode","createCommonjsModule","basedir","commonjsRequire","createClass","_defineProperties","inheritsLoose","jobs","timeout_","processJob_","job","_settings$segmentLoad","getActiveGroup","lastGroup","lastGroup_","lastTrack_","isMasterPlaylist","onGroupChanging","_settings$segmentLoad2","lastTrack","mpc","_settings$mediaTypes$","_settings$mediaTypes$2","_settings$mediaTypes$3","newProps","groupMatch","groupKeys","groupPropertyList","activeTrack_","_settings$segmentLoad3","audioSegmentLoader","activeAudioGroup","shouldSwitchToMedia","bufferHighWaterLine","experimentalBufferBasedABR","sharedLogLine","isBuffered","maxBufferLowWaterLine","nextBandwidth","currBandwidth","logLine","_logLine","externVhs","maxPlaylistRetries","handleDurationChange_","handleSourceEnded_","startABRTimer_","stopABRTimer_","triggeredFmp4Usage","loadOnPlay_","timeToLoadedData__","mainAppendsToLoadedData__","audioAppendsToLoadedData__","timeToLoadedDataStart","mainAppendsToLoadedData_","audioAppendsToLoadedData_","appendsToLoadedData_","timeToLoadedData_","checkABR_","shouldSwitchToMedia_","switchMedia_","newId","abrTimer_","defaultPlaylists","defaultGroup","excludeUnsupportedVariants_","haveJsonSource","handleUpdatedMediaPlaylist","lastExcludeReason_","delegateLoaders_","updateCodecs","tryToCreateSourceBuffers_","getCodecsOrExclude_","smoothQualityChange_","mainMediaInfo","reincluded","errorMessage","delayDuration","fnNames","loaders","dontFilterPlaylist","oldEnd","oldStart","updateDuration_","areMediaTypesKnown_","usingAudioLoader","hasMainMediaInfo","hasAudioMediaInfo","playlistCodecs","unsupportedAudio","supportFunction","unsupportedCodecs","supporter","variantAudioGroup","switchMessages","newCodec","oldCodec","ids","unsupported","codecCount_","videoDetails","audioDetails","blacklistReasons","variantCodecCount","variantVideoDetails","variantAudioDetails","newMax","playlistID","vhsHandler","smoothQualityChange","qualityChangeFunction","allowSeeksWithinUnsafeLiveWindow","liveRangeSafeTimeDelta","playHandler","loaderTypes","loaderChecks","resetSegmentDownloads_","updateend","checkSegmentDownloads_","setSeekingHandlers","seekingAppendCheck_","clearSeekingAppendCheck_","watchForBadSeeking_","isBufferedDifferent","playlistId","isAfterSeekableRange","minAppendedDuration","bufferedToCheck","timeAhead","videoUnderflow","allowedEnd","lastVideoRange","videoRange","audioRange","version$4","version$3","version$2","version$1","handleVhsMediaChange","handleVhsLoadedMetadata","emeKeySystems","keySystemOptions","audioPlaylist","videoContentType","audioContentType","keySystemContentTypes","getAllPsshKeySystemsOptions","keySystems","keySystemsArr","keySystemsOptions","keySystemsObj","waitForKeySessionCreation","sourceKeySystems","audioMedia","mainPlaylists","initializeMediaKeys","keySystemsOptionsArr","initializationFinishedPromises","keySessionCreatedPromises","race","setupEmeOptions","sourceOptions","getVhsLocalStorage","storedObject","updateVhsLocalStorage","objectToStore","expandDataUri","dataUri","supportsNativeDash","supportsTypeNatively","VhsHandler","initialBandwidth","useBandwidthFromLocalStorage","useNetworkInformationApi","playbackWatcherOptions","defaultSelector","playerBandwidthEst","networkInformation","connection","mozConnection","webkitConnection","tenMbpsAsBitsPerSecond","networkInfoBandwidthEstBitsPerSec","downlink","mediaAppends_","mainAppendsToLoadedData","audioAppendsToLoadedData","appendsToLoadedData","timeToLoadedData","currentTech","playerDimensions","setupEme_","mediaSourceUrl_","createKeySessions_","audioPlaylistLoader","handleWaitingForKey_","didSetupEmeOptions","masterPlaylist","_videojs$log","excludedHDPlaylists","dash","convertToProgramTime","VhsSourceHandler","_videojs$mergeOptions","_videojs$mergeOptions2","_videojs$mergeOptions3","_videojs$mergeOptions4","_videojs$mergeOptions5","legacyOverrideNative","supportedType","canUseMsePlayback","_decrypter","parseSidx","referenceId","earliestPresentationTime","referenceCount","getUint16","startsWithSap","sapType","sapDeltaTime","$Error","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","dropEntries","prepareStackTrace","base64","ieee754","typedArraySupport","foo","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","encodingOrOffset","allocUnsafe","fromArrayBuffer","fromString","fromObject","assertSize","alloc","checked","isEncoding","actual","fromArrayLike","isBuffer","isnan","SlowBuffer","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","res","thirdByte","fourthByte","tempCodePoint","codePoint","bytesPerSequence","decodeCodePointsArray","INSPECT_MAX_BYTES","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","equals","thisStart","thisEnd","thisCopy","targetCopy","includes","MAX_ARGUMENTS_LENGTH","codePoints","toHex","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","units","leadSurrogate","byteArray","hi","lo","dst","parameter","_name"],"mappings":"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","file":"static/js/chunk-4fbd29b5.a3550189.js","sourcesContent":["var topLevel = typeof global !== 'undefined' ? global :\n typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n doccy = document;\n} else {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n}\n\nmodule.exports = doccy;\n","module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n","// Source: http://jsfiddle.net/vWx8V/\n// http://stackoverflow.com/questions/5603195/full-list-of-javascript-keycodes\n\n/**\n * Conenience method returns corresponding value for given keyName or keyCode.\n *\n * @param {Mixed} keyCode {Number} or keyName {String}\n * @return {Mixed}\n * @api public\n */\n\nfunction keyCode(searchInput) {\n // Keyboard Events\n if (searchInput && 'object' === typeof searchInput) {\n var hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode\n if (hasKeyCode) searchInput = hasKeyCode\n }\n\n // Numbers\n if ('number' === typeof searchInput) return names[searchInput]\n\n // Everything else (cast to string)\n var search = String(searchInput)\n\n // check codes\n var foundNamedKey = codes[search.toLowerCase()]\n if (foundNamedKey) return foundNamedKey\n\n // check aliases\n var foundNamedKey = aliases[search.toLowerCase()]\n if (foundNamedKey) return foundNamedKey\n\n // weird character?\n if (search.length === 1) return search.charCodeAt(0)\n\n return undefined\n}\n\n/**\n * Compares a keyboard event with a given keyCode or keyName.\n *\n * @param {Event} event Keyboard event that should be tested\n * @param {Mixed} keyCode {Number} or keyName {String}\n * @return {Boolean}\n * @api public\n */\nkeyCode.isEventKey = function isEventKey(event, nameOrCode) {\n if (event && 'object' === typeof event) {\n var keyCode = event.which || event.keyCode || event.charCode\n if (keyCode === null || keyCode === undefined) { return false; }\n if (typeof nameOrCode === 'string') {\n // check codes\n var foundNamedKey = codes[nameOrCode.toLowerCase()]\n if (foundNamedKey) { return foundNamedKey === keyCode; }\n \n // check aliases\n var foundNamedKey = aliases[nameOrCode.toLowerCase()]\n if (foundNamedKey) { return foundNamedKey === keyCode; }\n } else if (typeof nameOrCode === 'number') {\n return nameOrCode === keyCode;\n }\n return false;\n }\n}\n\nexports = module.exports = keyCode;\n\n/**\n * Get by name\n *\n * exports.code['enter'] // => 13\n */\n\nvar codes = exports.code = exports.codes = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'ctrl': 17,\n 'alt': 18,\n 'pause/break': 19,\n 'caps lock': 20,\n 'esc': 27,\n 'space': 32,\n 'page up': 33,\n 'page down': 34,\n 'end': 35,\n 'home': 36,\n 'left': 37,\n 'up': 38,\n 'right': 39,\n 'down': 40,\n 'insert': 45,\n 'delete': 46,\n 'command': 91,\n 'left command': 91,\n 'right command': 93,\n 'numpad *': 106,\n 'numpad +': 107,\n 'numpad -': 109,\n 'numpad .': 110,\n 'numpad /': 111,\n 'num lock': 144,\n 'scroll lock': 145,\n 'my computer': 182,\n 'my calculator': 183,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222\n}\n\n// Helper aliases\n\nvar aliases = exports.aliases = {\n 'windows': 91,\n '⇧': 16,\n '⌥': 18,\n '⌃': 17,\n '⌘': 91,\n 'ctl': 17,\n 'control': 17,\n 'option': 18,\n 'pause': 19,\n 'break': 19,\n 'caps': 20,\n 'return': 13,\n 'escape': 27,\n 'spc': 32,\n 'spacebar': 32,\n 'pgup': 33,\n 'pgdn': 34,\n 'ins': 45,\n 'del': 46,\n 'cmd': 91\n}\n\n/*!\n * Programatically add the following\n */\n\n// lower case chars\nfor (i = 97; i < 123; i++) codes[String.fromCharCode(i)] = i - 32\n\n// numbers\nfor (var i = 48; i < 58; i++) codes[i - 48] = i\n\n// function keys\nfor (i = 1; i < 13; i++) codes['f'+i] = i + 111\n\n// numpad keys\nfor (i = 0; i < 10; i++) codes['numpad '+i] = i + 96\n\n/**\n * Get by code\n *\n * exports.name[13] // => 'Enter'\n */\n\nvar names = exports.names = exports.title = {} // title for backward compat\n\n// Create reverse mapping\nfor (i in codes) names[codes[i]] = i\n\n// Add aliases\nfor (var alias in aliases) {\n codes[alias] = aliases[alias]\n}\n","module.exports = {\n generator: require('./mp4-generator'),\n Transmuxer: require('./transmuxer').Transmuxer,\n AudioSegmentStream: require('./transmuxer').AudioSegmentStream,\n VideoSegmentStream: require('./transmuxer').VideoSegmentStream\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _playlist = require('./playlist');\n\nvar _playlist2 = _interopRequireDefault(_playlist);\n\nvar _utilCodecsJs = require('./util/codecs.js');\n\n// Utilities\n\n/**\n * Returns the CSS value for the specified property on an element\n * using `getComputedStyle`. Firefox has a long-standing issue where\n * getComputedStyle() may return null when running in an iframe with\n * `display: none`.\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n * @param {HTMLElement} el the htmlelement to work on\n * @param {string} the proprety to get the style for\n */\nvar safeGetComputedStyle = function safeGetComputedStyle(el, property) {\n var result = undefined;\n\n if (!el) {\n return '';\n }\n\n result = window.getComputedStyle(el);\n if (!result) {\n return '';\n }\n\n return result[property];\n};\n\n/**\n * Resuable stable sort function\n *\n * @param {Playlists} array\n * @param {Function} sortFn Different comparators\n * @function stableSort\n */\nvar stableSort = function stableSort(array, sortFn) {\n var newArray = array.slice();\n\n array.sort(function (left, right) {\n var cmp = sortFn(left, right);\n\n if (cmp === 0) {\n return newArray.indexOf(left) - newArray.indexOf(right);\n }\n return cmp;\n });\n};\n\n/**\n * A comparator function to sort two playlist object by bandwidth.\n *\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {Number} Greater than zero if the bandwidth attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the bandwidth of right is greater than left and\n * exactly zero if the two are equal.\n */\nvar comparePlaylistBandwidth = function comparePlaylistBandwidth(left, right) {\n var leftBandwidth = undefined;\n var rightBandwidth = undefined;\n\n if (left.attributes.BANDWIDTH) {\n leftBandwidth = left.attributes.BANDWIDTH;\n }\n leftBandwidth = leftBandwidth || window.Number.MAX_VALUE;\n if (right.attributes.BANDWIDTH) {\n rightBandwidth = right.attributes.BANDWIDTH;\n }\n rightBandwidth = rightBandwidth || window.Number.MAX_VALUE;\n\n return leftBandwidth - rightBandwidth;\n};\n\nexports.comparePlaylistBandwidth = comparePlaylistBandwidth;\n/**\n * A comparator function to sort two playlist object by resolution (width).\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {Number} Greater than zero if the resolution.width attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the resolution.width of right is greater than left and\n * exactly zero if the two are equal.\n */\nvar comparePlaylistResolution = function comparePlaylistResolution(left, right) {\n var leftWidth = undefined;\n var rightWidth = undefined;\n\n if (left.attributes.RESOLUTION && left.attributes.RESOLUTION.width) {\n leftWidth = left.attributes.RESOLUTION.width;\n }\n\n leftWidth = leftWidth || window.Number.MAX_VALUE;\n\n if (right.attributes.RESOLUTION && right.attributes.RESOLUTION.width) {\n rightWidth = right.attributes.RESOLUTION.width;\n }\n\n rightWidth = rightWidth || window.Number.MAX_VALUE;\n\n // NOTE - Fallback to bandwidth sort as appropriate in cases where multiple renditions\n // have the same media dimensions/ resolution\n if (leftWidth === rightWidth && left.attributes.BANDWIDTH && right.attributes.BANDWIDTH) {\n return left.attributes.BANDWIDTH - right.attributes.BANDWIDTH;\n }\n return leftWidth - rightWidth;\n};\n\nexports.comparePlaylistResolution = comparePlaylistResolution;\n/**\n * Chooses the appropriate media playlist based on bandwidth and player size\n *\n * @param {Object} master\n * Object representation of the master manifest\n * @param {Number} playerBandwidth\n * Current calculated bandwidth of the player\n * @param {Number} playerWidth\n * Current width of the player element\n * @param {Number} playerHeight\n * Current height of the player element\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */\nvar simpleSelector = function simpleSelector(master, playerBandwidth, playerWidth, playerHeight) {\n // convert the playlists to an intermediary representation to make comparisons easier\n var sortedPlaylistReps = master.playlists.map(function (playlist) {\n var width = undefined;\n var height = undefined;\n var bandwidth = undefined;\n\n width = playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.width;\n height = playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height;\n bandwidth = playlist.attributes.BANDWIDTH;\n\n bandwidth = bandwidth || window.Number.MAX_VALUE;\n\n return {\n bandwidth: bandwidth,\n width: width,\n height: height,\n playlist: playlist\n };\n });\n\n stableSort(sortedPlaylistReps, function (left, right) {\n return left.bandwidth - right.bandwidth;\n });\n\n // filter out any playlists that have been excluded due to\n // incompatible configurations\n sortedPlaylistReps = sortedPlaylistReps.filter(function (rep) {\n return !_playlist2['default'].isIncompatible(rep.playlist);\n });\n\n // filter out any playlists that have been disabled manually through the representations\n // api or blacklisted temporarily due to playback errors.\n var enabledPlaylistReps = sortedPlaylistReps.filter(function (rep) {\n return _playlist2['default'].isEnabled(rep.playlist);\n });\n\n if (!enabledPlaylistReps.length) {\n // if there are no enabled playlists, then they have all been blacklisted or disabled\n // by the user through the representations api. In this case, ignore blacklisting and\n // fallback to what the user wants by using playlists the user has not disabled.\n enabledPlaylistReps = sortedPlaylistReps.filter(function (rep) {\n return !_playlist2['default'].isDisabled(rep.playlist);\n });\n }\n\n // filter out any variant that has greater effective bitrate\n // than the current estimated bandwidth\n var bandwidthPlaylistReps = enabledPlaylistReps.filter(function (rep) {\n return rep.bandwidth * _config2['default'].BANDWIDTH_VARIANCE < playerBandwidth;\n });\n\n var highestRemainingBandwidthRep = bandwidthPlaylistReps[bandwidthPlaylistReps.length - 1];\n\n // get all of the renditions with the same (highest) bandwidth\n // and then taking the very first element\n var bandwidthBestRep = bandwidthPlaylistReps.filter(function (rep) {\n return rep.bandwidth === highestRemainingBandwidthRep.bandwidth;\n })[0];\n\n // filter out playlists without resolution information\n var haveResolution = bandwidthPlaylistReps.filter(function (rep) {\n return rep.width && rep.height;\n });\n\n // sort variants by resolution\n stableSort(haveResolution, function (left, right) {\n return left.width - right.width;\n });\n\n // if we have the exact resolution as the player use it\n var resolutionBestRepList = haveResolution.filter(function (rep) {\n return rep.width === playerWidth && rep.height === playerHeight;\n });\n\n highestRemainingBandwidthRep = resolutionBestRepList[resolutionBestRepList.length - 1];\n // ensure that we pick the highest bandwidth variant that have exact resolution\n var resolutionBestRep = resolutionBestRepList.filter(function (rep) {\n return rep.bandwidth === highestRemainingBandwidthRep.bandwidth;\n })[0];\n\n var resolutionPlusOneList = undefined;\n var resolutionPlusOneSmallest = undefined;\n var resolutionPlusOneRep = undefined;\n\n // find the smallest variant that is larger than the player\n // if there is no match of exact resolution\n if (!resolutionBestRep) {\n resolutionPlusOneList = haveResolution.filter(function (rep) {\n return rep.width > playerWidth || rep.height > playerHeight;\n });\n\n // find all the variants have the same smallest resolution\n resolutionPlusOneSmallest = resolutionPlusOneList.filter(function (rep) {\n return rep.width === resolutionPlusOneList[0].width && rep.height === resolutionPlusOneList[0].height;\n });\n\n // ensure that we also pick the highest bandwidth variant that\n // is just-larger-than the video player\n highestRemainingBandwidthRep = resolutionPlusOneSmallest[resolutionPlusOneSmallest.length - 1];\n resolutionPlusOneRep = resolutionPlusOneSmallest.filter(function (rep) {\n return rep.bandwidth === highestRemainingBandwidthRep.bandwidth;\n })[0];\n }\n\n // fallback chain of variants\n var chosenRep = resolutionPlusOneRep || resolutionBestRep || bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0];\n\n return chosenRep ? chosenRep.playlist : null;\n};\n\nexports.simpleSelector = simpleSelector;\n// Playlist Selectors\n\n/**\n * Chooses the appropriate media playlist based on the most recent\n * bandwidth estimate and the player size.\n *\n * Expects to be called within the context of an instance of HlsHandler\n *\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */\nvar lastBandwidthSelector = function lastBandwidthSelector() {\n return simpleSelector(this.playlists.master, this.systemBandwidth, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10), parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10));\n};\n\nexports.lastBandwidthSelector = lastBandwidthSelector;\n/**\n * Chooses the appropriate media playlist based on an\n * exponential-weighted moving average of the bandwidth after\n * filtering for player size.\n *\n * Expects to be called within the context of an instance of HlsHandler\n *\n * @param {Number} decay - a number between 0 and 1. Higher values of\n * this parameter will cause previous bandwidth estimates to lose\n * significance more quickly.\n * @return {Function} a function which can be invoked to create a new\n * playlist selector function.\n * @see https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n */\nvar movingAverageBandwidthSelector = function movingAverageBandwidthSelector(decay) {\n var average = -1;\n\n if (decay < 0 || decay > 1) {\n throw new Error('Moving average bandwidth decay must be between 0 and 1.');\n }\n\n return function () {\n if (average < 0) {\n average = this.systemBandwidth;\n }\n\n average = decay * this.systemBandwidth + (1 - decay) * average;\n return simpleSelector(this.playlists.master, average, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10), parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10));\n };\n};\n\nexports.movingAverageBandwidthSelector = movingAverageBandwidthSelector;\n/**\n * Chooses the appropriate media playlist based on the potential to rebuffer\n *\n * @param {Object} settings\n * Object of information required to use this selector\n * @param {Object} settings.master\n * Object representation of the master manifest\n * @param {Number} settings.currentTime\n * The current time of the player\n * @param {Number} settings.bandwidth\n * Current measured bandwidth\n * @param {Number} settings.duration\n * Duration of the media\n * @param {Number} settings.segmentDuration\n * Segment duration to be used in round trip time calculations\n * @param {Number} settings.timeUntilRebuffer\n * Time left in seconds until the player has to rebuffer\n * @param {Number} settings.currentTimeline\n * The current timeline segments are being loaded from\n * @param {SyncController} settings.syncController\n * SyncController for determining if we have a sync point for a given playlist\n * @return {Object|null}\n * {Object} return.playlist\n * The highest bandwidth playlist with the least amount of rebuffering\n * {Number} return.rebufferingImpact\n * The amount of time in seconds switching to this playlist will rebuffer. A\n * negative value means that switching will cause zero rebuffering.\n */\nvar minRebufferMaxBandwidthSelector = function minRebufferMaxBandwidthSelector(settings) {\n var master = settings.master;\n var currentTime = settings.currentTime;\n var bandwidth = settings.bandwidth;\n var duration = settings.duration;\n var segmentDuration = settings.segmentDuration;\n var timeUntilRebuffer = settings.timeUntilRebuffer;\n var currentTimeline = settings.currentTimeline;\n var syncController = settings.syncController;\n\n // filter out any playlists that have been excluded due to\n // incompatible configurations\n var compatiblePlaylists = master.playlists.filter(function (playlist) {\n return !_playlist2['default'].isIncompatible(playlist);\n });\n\n // filter out any playlists that have been disabled manually through the representations\n // api or blacklisted temporarily due to playback errors.\n var enabledPlaylists = compatiblePlaylists.filter(_playlist2['default'].isEnabled);\n\n if (!enabledPlaylists.length) {\n // if there are no enabled playlists, then they have all been blacklisted or disabled\n // by the user through the representations api. In this case, ignore blacklisting and\n // fallback to what the user wants by using playlists the user has not disabled.\n enabledPlaylists = compatiblePlaylists.filter(function (playlist) {\n return !_playlist2['default'].isDisabled(playlist);\n });\n }\n\n var bandwidthPlaylists = enabledPlaylists.filter(_playlist2['default'].hasAttribute.bind(null, 'BANDWIDTH'));\n\n var rebufferingEstimates = bandwidthPlaylists.map(function (playlist) {\n var syncPoint = syncController.getSyncPoint(playlist, duration, currentTimeline, currentTime);\n // If there is no sync point for this playlist, switching to it will require a\n // sync request first. This will double the request time\n var numRequests = syncPoint ? 1 : 2;\n var requestTimeEstimate = _playlist2['default'].estimateSegmentRequestTime(segmentDuration, bandwidth, playlist);\n var rebufferingImpact = requestTimeEstimate * numRequests - timeUntilRebuffer;\n\n return {\n playlist: playlist,\n rebufferingImpact: rebufferingImpact\n };\n });\n\n var noRebufferingPlaylists = rebufferingEstimates.filter(function (estimate) {\n return estimate.rebufferingImpact <= 0;\n });\n\n // Sort by bandwidth DESC\n stableSort(noRebufferingPlaylists, function (a, b) {\n return comparePlaylistBandwidth(b.playlist, a.playlist);\n });\n\n if (noRebufferingPlaylists.length) {\n return noRebufferingPlaylists[0];\n }\n\n stableSort(rebufferingEstimates, function (a, b) {\n return a.rebufferingImpact - b.rebufferingImpact;\n });\n\n return rebufferingEstimates[0] || null;\n};\n\nexports.minRebufferMaxBandwidthSelector = minRebufferMaxBandwidthSelector;\n/**\n * Chooses the appropriate media playlist, which in this case is the lowest bitrate\n * one with video. If no renditions with video exist, return the lowest audio rendition.\n *\n * Expects to be called within the context of an instance of HlsHandler\n *\n * @return {Object|null}\n * {Object} return.playlist\n * The lowest bitrate playlist that contains a video codec. If no such rendition\n * exists pick the lowest audio rendition.\n */\nvar lowestBitrateCompatibleVariantSelector = function lowestBitrateCompatibleVariantSelector() {\n // filter out any playlists that have been excluded due to\n // incompatible configurations or playback errors\n var playlists = this.playlists.master.playlists.filter(_playlist2['default'].isEnabled);\n\n // Sort ascending by bitrate\n stableSort(playlists, function (a, b) {\n return comparePlaylistBandwidth(a, b);\n });\n\n // Parse and assume that playlists with no video codec have no video\n // (this is not necessarily true, although it is generally true).\n //\n // If an entire manifest has no valid videos everything will get filtered\n // out.\n var playlistsWithVideo = playlists.filter(function (playlist) {\n return (0, _utilCodecsJs.parseCodecs)(playlist.attributes.CODECS).videoCodec;\n });\n\n return playlistsWithVideo[0] || null;\n};\nexports.lowestBitrateCompatibleVariantSelector = lowestBitrateCompatibleVariantSelector;","var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n","import window from 'global/window';\n\nvar atob = function atob(s) {\n return window.atob ? window.atob(s) : Buffer.from(s, 'base64').toString('binary');\n};\n\nexport default function decodeB64ToUint8Array(b64Text) {\n var decodedString = atob(b64Text);\n var array = new Uint8Array(decodedString.length);\n\n for (var i = 0; i < decodedString.length; i++) {\n array[i] = decodedString.charCodeAt(i);\n }\n\n return array;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _stream = require('./stream');\n\nvar _stream2 = _interopRequireDefault(_stream);\n\nvar _lineStream = require('./line-stream');\n\nvar _lineStream2 = _interopRequireDefault(_lineStream);\n\nvar _parseStream = require('./parse-stream');\n\nvar _parseStream2 = _interopRequireDefault(_parseStream);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * @file m3u8/parser.js\n */\n\n\n/**\n * A parser for M3U8 files. The current interpretation of the input is\n * exposed as a property `manifest` on parser objects. It's just two lines to\n * create and parse a manifest once you have the contents available as a string:\n *\n * ```js\n * var parser = new m3u8.Parser();\n * parser.push(xhr.responseText);\n * ```\n *\n * New input can later be applied to update the manifest object by calling\n * `push` again.\n *\n * The parser attempts to create a usable manifest object even if the\n * underlying input is somewhat nonsensical. It emits `info` and `warning`\n * events during the parse if it encounters input that seems invalid or\n * requires some property of the manifest object to be defaulted.\n *\n * @class Parser\n * @extends Stream\n */\nvar Parser = function (_Stream) {\n _inherits(Parser, _Stream);\n\n function Parser() {\n _classCallCheck(this, Parser);\n\n var _this = _possibleConstructorReturn(this, (Parser.__proto__ || Object.getPrototypeOf(Parser)).call(this));\n\n _this.lineStream = new _lineStream2['default']();\n _this.parseStream = new _parseStream2['default']();\n _this.lineStream.pipe(_this.parseStream);\n /* eslint-disable consistent-this */\n var self = _this;\n /* eslint-enable consistent-this */\n var uris = [];\n var currentUri = {};\n // if specified, the active EXT-X-MAP definition\n var currentMap = void 0;\n // if specified, the active decryption key\n var _key = void 0;\n var noop = function noop() {};\n var defaultMediaGroups = {\n 'AUDIO': {},\n 'VIDEO': {},\n 'CLOSED-CAPTIONS': {},\n 'SUBTITLES': {}\n };\n // group segments into numbered timelines delineated by discontinuities\n var currentTimeline = 0;\n\n // the manifest is empty until the parse stream begins delivering data\n _this.manifest = {\n allowCache: true,\n discontinuityStarts: [],\n segments: []\n };\n\n // update the manifest with the m3u8 entry from the parse stream\n _this.parseStream.on('data', function (entry) {\n var mediaGroup = void 0;\n var rendition = void 0;\n\n ({\n tag: function tag() {\n // switch based on the tag type\n (({\n 'allow-cache': function allowCache() {\n this.manifest.allowCache = entry.allowed;\n if (!('allowed' in entry)) {\n this.trigger('info', {\n message: 'defaulting allowCache to YES'\n });\n this.manifest.allowCache = true;\n }\n },\n byterange: function byterange() {\n var byterange = {};\n\n if ('length' in entry) {\n currentUri.byterange = byterange;\n byterange.length = entry.length;\n\n if (!('offset' in entry)) {\n this.trigger('info', {\n message: 'defaulting offset to zero'\n });\n entry.offset = 0;\n }\n }\n if ('offset' in entry) {\n currentUri.byterange = byterange;\n byterange.offset = entry.offset;\n }\n },\n endlist: function endlist() {\n this.manifest.endList = true;\n },\n inf: function inf() {\n if (!('mediaSequence' in this.manifest)) {\n this.manifest.mediaSequence = 0;\n this.trigger('info', {\n message: 'defaulting media sequence to zero'\n });\n }\n if (!('discontinuitySequence' in this.manifest)) {\n this.manifest.discontinuitySequence = 0;\n this.trigger('info', {\n message: 'defaulting discontinuity sequence to zero'\n });\n }\n if (entry.duration > 0) {\n currentUri.duration = entry.duration;\n }\n\n if (entry.duration === 0) {\n currentUri.duration = 0.01;\n this.trigger('info', {\n message: 'updating zero segment duration to a small value'\n });\n }\n\n this.manifest.segments = uris;\n },\n key: function key() {\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring key declaration without attribute list'\n });\n return;\n }\n // clear the active encryption key\n if (entry.attributes.METHOD === 'NONE') {\n _key = null;\n return;\n }\n if (!entry.attributes.URI) {\n this.trigger('warn', {\n message: 'ignoring key declaration without URI'\n });\n return;\n }\n if (!entry.attributes.METHOD) {\n this.trigger('warn', {\n message: 'defaulting key method to AES-128'\n });\n }\n\n // setup an encryption key for upcoming segments\n _key = {\n method: entry.attributes.METHOD || 'AES-128',\n uri: entry.attributes.URI\n };\n\n if (typeof entry.attributes.IV !== 'undefined') {\n _key.iv = entry.attributes.IV;\n }\n },\n 'media-sequence': function mediaSequence() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid media sequence: ' + entry.number\n });\n return;\n }\n this.manifest.mediaSequence = entry.number;\n },\n 'discontinuity-sequence': function discontinuitySequence() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid discontinuity sequence: ' + entry.number\n });\n return;\n }\n this.manifest.discontinuitySequence = entry.number;\n currentTimeline = entry.number;\n },\n 'playlist-type': function playlistType() {\n if (!/VOD|EVENT/.test(entry.playlistType)) {\n this.trigger('warn', {\n message: 'ignoring unknown playlist type: ' + entry.playlist\n });\n return;\n }\n this.manifest.playlistType = entry.playlistType;\n },\n map: function map() {\n currentMap = {};\n if (entry.uri) {\n currentMap.uri = entry.uri;\n }\n if (entry.byterange) {\n currentMap.byterange = entry.byterange;\n }\n },\n 'stream-inf': function streamInf() {\n this.manifest.playlists = uris;\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring empty stream-inf attributes'\n });\n return;\n }\n\n if (!currentUri.attributes) {\n currentUri.attributes = {};\n }\n _extends(currentUri.attributes, entry.attributes);\n },\n media: function media() {\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!(entry.attributes && entry.attributes.TYPE && entry.attributes['GROUP-ID'] && entry.attributes.NAME)) {\n this.trigger('warn', {\n message: 'ignoring incomplete or missing media group'\n });\n return;\n }\n\n // find the media group, creating defaults as necessary\n var mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE];\n\n mediaGroupType[entry.attributes['GROUP-ID']] = mediaGroupType[entry.attributes['GROUP-ID']] || {};\n mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']];\n\n // collect the rendition metadata\n rendition = {\n 'default': /yes/i.test(entry.attributes.DEFAULT)\n };\n if (rendition['default']) {\n rendition.autoselect = true;\n } else {\n rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT);\n }\n if (entry.attributes.LANGUAGE) {\n rendition.language = entry.attributes.LANGUAGE;\n }\n if (entry.attributes.URI) {\n rendition.uri = entry.attributes.URI;\n }\n if (entry.attributes['INSTREAM-ID']) {\n rendition.instreamId = entry.attributes['INSTREAM-ID'];\n }\n if (entry.attributes.CHARACTERISTICS) {\n rendition.characteristics = entry.attributes.CHARACTERISTICS;\n }\n if (entry.attributes.FORCED) {\n rendition.forced = /yes/i.test(entry.attributes.FORCED);\n }\n\n // insert the new rendition\n mediaGroup[entry.attributes.NAME] = rendition;\n },\n discontinuity: function discontinuity() {\n currentTimeline += 1;\n currentUri.discontinuity = true;\n this.manifest.discontinuityStarts.push(uris.length);\n },\n 'program-date-time': function programDateTime() {\n this.manifest.dateTimeString = entry.dateTimeString;\n this.manifest.dateTimeObject = entry.dateTimeObject;\n },\n targetduration: function targetduration() {\n if (!isFinite(entry.duration) || entry.duration < 0) {\n this.trigger('warn', {\n message: 'ignoring invalid target duration: ' + entry.duration\n });\n return;\n }\n this.manifest.targetDuration = entry.duration;\n },\n totalduration: function totalduration() {\n if (!isFinite(entry.duration) || entry.duration < 0) {\n this.trigger('warn', {\n message: 'ignoring invalid total duration: ' + entry.duration\n });\n return;\n }\n this.manifest.totalDuration = entry.duration;\n },\n 'cue-out': function cueOut() {\n currentUri.cueOut = entry.data;\n },\n 'cue-out-cont': function cueOutCont() {\n currentUri.cueOutCont = entry.data;\n },\n 'cue-in': function cueIn() {\n currentUri.cueIn = entry.data;\n }\n })[entry.tagType] || noop).call(self);\n },\n uri: function uri() {\n currentUri.uri = entry.uri;\n uris.push(currentUri);\n\n // if no explicit duration was declared, use the target duration\n if (this.manifest.targetDuration && !('duration' in currentUri)) {\n this.trigger('warn', {\n message: 'defaulting segment duration to the target duration'\n });\n currentUri.duration = this.manifest.targetDuration;\n }\n // annotate with encryption information, if necessary\n if (_key) {\n currentUri.key = _key;\n }\n currentUri.timeline = currentTimeline;\n // annotate with initialization segment information, if necessary\n if (currentMap) {\n currentUri.map = currentMap;\n }\n\n // prepare for the next URI\n currentUri = {};\n },\n comment: function comment() {\n // comments are not important for playback\n }\n })[entry.type].call(self);\n });\n\n return _this;\n }\n\n /**\n * Parse the input string and update the manifest object.\n *\n * @param {String} chunk a potentially incomplete portion of the manifest\n */\n\n\n _createClass(Parser, [{\n key: 'push',\n value: function push(chunk) {\n this.lineStream.push(chunk);\n }\n\n /**\n * Flush any remaining input. This can be handy if the last line of an M3U8\n * manifest did not contain a trailing newline but the file has been\n * completely received.\n */\n\n }, {\n key: 'end',\n value: function end() {\n // flush any buffered input\n this.lineStream.push('\\n');\n }\n }]);\n\n return Parser;\n}(_stream2['default']);\n\nexports['default'] = Parser;","/**\n * @file add-text-track-data.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\n/**\n * Define properties on a cue for backwards compatability,\n * but warn the user that the way that they are using it\n * is depricated and will be removed at a later date.\n *\n * @param {Cue} cue the cue to add the properties on\n * @private\n */\nvar deprecateOldCue = function deprecateOldCue(cue) {\n Object.defineProperties(cue.frame, {\n id: {\n get: function get() {\n _videoJs2['default'].log.warn('cue.frame.id is deprecated. Use cue.value.key instead.');\n return cue.value.key;\n }\n },\n value: {\n get: function get() {\n _videoJs2['default'].log.warn('cue.frame.value is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n },\n privateData: {\n get: function get() {\n _videoJs2['default'].log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n }\n });\n};\n\nvar durationOfVideo = function durationOfVideo(duration) {\n var dur = undefined;\n\n if (isNaN(duration) || Math.abs(duration) === Infinity) {\n dur = Number.MAX_VALUE;\n } else {\n dur = duration;\n }\n return dur;\n};\n/**\n * Add text track data to a source handler given the captions and\n * metadata from the buffer.\n *\n * @param {Object} sourceHandler the flash or virtual source buffer\n * @param {Array} captionArray an array of caption data\n * @param {Array} metadataArray an array of meta data\n * @private\n */\nvar addTextTrackData = function addTextTrackData(sourceHandler, captionArray, metadataArray) {\n var Cue = _globalWindow2['default'].WebKitDataCue || _globalWindow2['default'].VTTCue;\n\n if (captionArray) {\n captionArray.forEach(function (caption) {\n var track = caption.stream;\n\n this.inbandTextTracks_[track].addCue(new Cue(caption.startTime + this.timestampOffset, caption.endTime + this.timestampOffset, caption.text));\n }, sourceHandler);\n }\n\n if (metadataArray) {\n (function () {\n var videoDuration = durationOfVideo(sourceHandler.mediaSource_.duration);\n\n metadataArray.forEach(function (metadata) {\n var time = metadata.cueTime + this.timestampOffset;\n\n metadata.frames.forEach(function (frame) {\n var cue = new Cue(time, time, frame.value || frame.url || frame.data || '');\n\n cue.frame = frame;\n cue.value = frame;\n deprecateOldCue(cue);\n\n this.metadataTrack_.addCue(cue);\n }, this);\n }, sourceHandler);\n\n // Updating the metadeta cues so that\n // the endTime of each cue is the startTime of the next cue\n // the endTime of last cue is the duration of the video\n if (sourceHandler.metadataTrack_ && sourceHandler.metadataTrack_.cues && sourceHandler.metadataTrack_.cues.length) {\n (function () {\n var cues = sourceHandler.metadataTrack_.cues;\n var cuesArray = [];\n\n // Create a copy of the TextTrackCueList...\n // ...disregarding cues with a falsey value\n for (var i = 0; i < cues.length; i++) {\n if (cues[i]) {\n cuesArray.push(cues[i]);\n }\n }\n\n // Group cues by their startTime value\n var cuesGroupedByStartTime = cuesArray.reduce(function (obj, cue) {\n var timeSlot = obj[cue.startTime] || [];\n\n timeSlot.push(cue);\n obj[cue.startTime] = timeSlot;\n\n return obj;\n }, {});\n\n // Sort startTimes by ascending order\n var sortedStartTimes = Object.keys(cuesGroupedByStartTime).sort(function (a, b) {\n return Number(a) - Number(b);\n });\n\n // Map each cue group's endTime to the next group's startTime\n sortedStartTimes.forEach(function (startTime, idx) {\n var cueGroup = cuesGroupedByStartTime[startTime];\n var nextTime = Number(sortedStartTimes[idx + 1]) || videoDuration;\n\n // Map each cue's endTime the next group's startTime\n cueGroup.forEach(function (cue) {\n cue.endTime = nextTime;\n });\n });\n })();\n }\n })();\n }\n};\n\nexports['default'] = {\n addTextTrackData: addTextTrackData,\n durationOfVideo: durationOfVideo\n};\nmodule.exports = exports['default'];","import window from 'global/window';\nvar regexs = {\n // to determine mime types\n mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v|stpp.ttml.im1t)/,\n webm: /^(vp0?[89]|av0?1|opus|vorbis)/,\n ogg: /^(vp0?[89]|theora|flac|opus|vorbis)/,\n // to determine if a codec is audio or video\n video: /^(av0?1|avc0?[1234]|vp0?[89]|hvc1|hev1|theora|mp4v)/,\n audio: /^(mp4a|flac|vorbis|opus|ac-[34]|ec-3|alac|mp3|speex|aac)/,\n text: /^(stpp.ttml.im1t)/,\n // mux.js support regex\n muxerVideo: /^(avc0?1)/,\n muxerAudio: /^(mp4a)/,\n // match nothing as muxer does not support text right now.\n // there cannot never be a character before the start of a string\n // so this matches nothing.\n muxerText: /a^/\n};\nvar mediaTypes = ['video', 'audio', 'text'];\nvar upperMediaTypes = ['Video', 'Audio', 'Text'];\n/**\n * Replace the old apple-style `avc1.
.
` codec string with the standard\n * `avc1.`\n *\n * @param {string} codec\n * Codec string to translate\n * @return {string}\n * The translated codec string\n */\n\nexport var translateLegacyCodec = function translateLegacyCodec(codec) {\n if (!codec) {\n return codec;\n }\n\n return codec.replace(/avc1\\.(\\d+)\\.(\\d+)/i, function (orig, profile, avcLevel) {\n var profileHex = ('00' + Number(profile).toString(16)).slice(-2);\n var avcLevelHex = ('00' + Number(avcLevel).toString(16)).slice(-2);\n return 'avc1.' + profileHex + '00' + avcLevelHex;\n });\n};\n/**\n * Replace the old apple-style `avc1.
.
` codec strings with the standard\n * `avc1.`\n *\n * @param {string[]} codecs\n * An array of codec strings to translate\n * @return {string[]}\n * The translated array of codec strings\n */\n\nexport var translateLegacyCodecs = function translateLegacyCodecs(codecs) {\n return codecs.map(translateLegacyCodec);\n};\n/**\n * Replace codecs in the codec string with the old apple-style `avc1.
.
` to the\n * standard `avc1.`.\n *\n * @param {string} codecString\n * The codec string\n * @return {string}\n * The codec string with old apple-style codecs replaced\n *\n * @private\n */\n\nexport var mapLegacyAvcCodecs = function mapLegacyAvcCodecs(codecString) {\n return codecString.replace(/avc1\\.(\\d+)\\.(\\d+)/i, function (match) {\n return translateLegacyCodecs([match])[0];\n });\n};\n/**\n * @typedef {Object} ParsedCodecInfo\n * @property {number} codecCount\n * Number of codecs parsed\n * @property {string} [videoCodec]\n * Parsed video codec (if found)\n * @property {string} [videoObjectTypeIndicator]\n * Video object type indicator (if found)\n * @property {string|null} audioProfile\n * Audio profile\n */\n\n/**\n * Parses a codec string to retrieve the number of codecs specified, the video codec and\n * object type indicator, and the audio profile.\n *\n * @param {string} [codecString]\n * The codec string to parse\n * @return {ParsedCodecInfo}\n * Parsed codec info\n */\n\nexport var parseCodecs = function parseCodecs(codecString) {\n if (codecString === void 0) {\n codecString = '';\n }\n\n var codecs = codecString.split(',');\n var result = [];\n codecs.forEach(function (codec) {\n codec = codec.trim();\n var codecType;\n mediaTypes.forEach(function (name) {\n var match = regexs[name].exec(codec.toLowerCase());\n\n if (!match || match.length <= 1) {\n return;\n }\n\n codecType = name; // maintain codec case\n\n var type = codec.substring(0, match[1].length);\n var details = codec.replace(type, '');\n result.push({\n type: type,\n details: details,\n mediaType: name\n });\n });\n\n if (!codecType) {\n result.push({\n type: codec,\n details: '',\n mediaType: 'unknown'\n });\n }\n });\n return result;\n};\n/**\n * Returns a ParsedCodecInfo object for the default alternate audio playlist if there is\n * a default alternate audio playlist for the provided audio group.\n *\n * @param {Object} master\n * The master playlist\n * @param {string} audioGroupId\n * ID of the audio group for which to find the default codec info\n * @return {ParsedCodecInfo}\n * Parsed codec info\n */\n\nexport var codecsFromDefault = function codecsFromDefault(master, audioGroupId) {\n if (!master.mediaGroups.AUDIO || !audioGroupId) {\n return null;\n }\n\n var audioGroup = master.mediaGroups.AUDIO[audioGroupId];\n\n if (!audioGroup) {\n return null;\n }\n\n for (var name in audioGroup) {\n var audioType = audioGroup[name];\n\n if (audioType.default && audioType.playlists) {\n // codec should be the same for all playlists within the audio type\n return parseCodecs(audioType.playlists[0].attributes.CODECS);\n }\n }\n\n return null;\n};\nexport var isVideoCodec = function isVideoCodec(codec) {\n if (codec === void 0) {\n codec = '';\n }\n\n return regexs.video.test(codec.trim().toLowerCase());\n};\nexport var isAudioCodec = function isAudioCodec(codec) {\n if (codec === void 0) {\n codec = '';\n }\n\n return regexs.audio.test(codec.trim().toLowerCase());\n};\nexport var isTextCodec = function isTextCodec(codec) {\n if (codec === void 0) {\n codec = '';\n }\n\n return regexs.text.test(codec.trim().toLowerCase());\n};\nexport var getMimeForCodec = function getMimeForCodec(codecString) {\n if (!codecString || typeof codecString !== 'string') {\n return;\n }\n\n var codecs = codecString.toLowerCase().split(',').map(function (c) {\n return translateLegacyCodec(c.trim());\n }); // default to video type\n\n var type = 'video'; // only change to audio type if the only codec we have is\n // audio\n\n if (codecs.length === 1 && isAudioCodec(codecs[0])) {\n type = 'audio';\n } else if (codecs.length === 1 && isTextCodec(codecs[0])) {\n // text uses application/ for now\n type = 'application';\n } // default the container to mp4\n\n\n var container = 'mp4'; // every codec must be able to go into the container\n // for that container to be the correct one\n\n if (codecs.every(function (c) {\n return regexs.mp4.test(c);\n })) {\n container = 'mp4';\n } else if (codecs.every(function (c) {\n return regexs.webm.test(c);\n })) {\n container = 'webm';\n } else if (codecs.every(function (c) {\n return regexs.ogg.test(c);\n })) {\n container = 'ogg';\n }\n\n return type + \"/\" + container + \";codecs=\\\"\" + codecString + \"\\\"\";\n};\nexport var browserSupportsCodec = function browserSupportsCodec(codecString) {\n if (codecString === void 0) {\n codecString = '';\n }\n\n return window.MediaSource && window.MediaSource.isTypeSupported && window.MediaSource.isTypeSupported(getMimeForCodec(codecString)) || false;\n};\nexport var muxerSupportsCodec = function muxerSupportsCodec(codecString) {\n if (codecString === void 0) {\n codecString = '';\n }\n\n return codecString.toLowerCase().split(',').every(function (codec) {\n codec = codec.trim(); // any match is supported.\n\n for (var i = 0; i < upperMediaTypes.length; i++) {\n var type = upperMediaTypes[i];\n\n if (regexs[\"muxer\" + type].test(codec)) {\n return true;\n }\n }\n\n return false;\n });\n};\nexport var DEFAULT_AUDIO_CODEC = 'mp4a.40.2';\nexport var DEFAULT_VIDEO_CODEC = 'avc1.4d400d';","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import URLToolkit from 'url-toolkit';\nimport window from 'global/window';\nvar DEFAULT_LOCATION = 'http://example.com';\n\nvar resolveUrl = function resolveUrl(baseUrl, relativeUrl) {\n // return early if we don't need to resolve\n if (/^[a-z]+:/i.test(relativeUrl)) {\n return relativeUrl;\n } // if baseUrl is a data URI, ignore it and resolve everything relative to window.location\n\n\n if (/^data:/.test(baseUrl)) {\n baseUrl = window.location && window.location.href || '';\n } // IE11 supports URL but not the URL constructor\n // feature detect the behavior we want\n\n\n var nativeURL = typeof window.URL === 'function';\n var protocolLess = /^\\/\\//.test(baseUrl); // remove location if window.location isn't available (i.e. we're in node)\n // and if baseUrl isn't an absolute url\n\n var removeLocation = !window.location && !/\\/\\//i.test(baseUrl); // if the base URL is relative then combine with the current location\n\n if (nativeURL) {\n baseUrl = new window.URL(baseUrl, window.location || DEFAULT_LOCATION);\n } else if (!/\\/\\//i.test(baseUrl)) {\n baseUrl = URLToolkit.buildAbsoluteURL(window.location && window.location.href || '', baseUrl);\n }\n\n if (nativeURL) {\n var newUrl = new URL(relativeUrl, baseUrl); // if we're a protocol-less url, remove the protocol\n // and if we're location-less, remove the location\n // otherwise, return the url unmodified\n\n if (removeLocation) {\n return newUrl.href.slice(DEFAULT_LOCATION.length);\n } else if (protocolLess) {\n return newUrl.href.slice(newUrl.protocol.length);\n }\n\n return newUrl.href;\n }\n\n return URLToolkit.buildAbsoluteURL(baseUrl, relativeUrl);\n};\n\nexport default resolveUrl;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\nvar document = require('global/document');\n\nvar _objCreate = Object.create || (function() {\n function F() {}\n return function(o) {\n if (arguments.length !== 1) {\n throw new Error('Object.create shim only accepts one parameter.');\n }\n F.prototype = o;\n return new F();\n };\n})();\n\n// Creates a new ParserError object from an errorData object. The errorData\n// object should have default code and message properties. The default message\n// property can be overriden by passing in a message parameter.\n// See ParsingError.Errors below for acceptable errors.\nfunction ParsingError(errorData, message) {\n this.name = \"ParsingError\";\n this.code = errorData.code;\n this.message = message || errorData.message;\n}\nParsingError.prototype = _objCreate(Error.prototype);\nParsingError.prototype.constructor = ParsingError;\n\n// ParsingError metadata for acceptable ParsingErrors.\nParsingError.Errors = {\n BadSignature: {\n code: 0,\n message: \"Malformed WebVTT signature.\"\n },\n BadTimeStamp: {\n code: 1,\n message: \"Malformed time stamp.\"\n }\n};\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;\n }\n\n var m = input.match(/^(\\d+):(\\d{1,2})(:\\d{1,2})?\\.(\\d{3})/);\n if (!m) {\n return null;\n }\n\n if (m[3]) {\n // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3].replace(\":\", \"\"), m[4]);\n } else if (m[1] > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[1], m[2], 0, m[4]);\n } else {\n // Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n return computeSeconds(0, m[1], m[2], m[4]);\n }\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nfunction Settings() {\n this.values = _objCreate(null);\n}\n\nSettings.prototype = {\n // Only accept the first assignment to any key.\n set: function(k, v) {\n if (!this.get(k) && v !== \"\") {\n this.values[k] = v;\n }\n },\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get: function(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n },\n // Check whether we have a value for a key.\n has: function(k) {\n return k in this.values;\n },\n // Accept a setting if its one of the given alternatives.\n alt: function(k, v, a) {\n for (var n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n },\n // Accept a setting if its a valid (signed) integer.\n integer: function(k, v) {\n if (/^-?\\d+$/.test(v)) { // integer\n this.set(k, parseInt(v, 10));\n }\n },\n // Accept a setting if its a valid percentage.\n percent: function(k, v) {\n var m;\n if ((m = v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/))) {\n v = parseFloat(v);\n if (v >= 0 && v <= 100) {\n this.set(k, v);\n return true;\n }\n }\n return false;\n }\n};\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interprete each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n var groups = groupDelim ? input.split(groupDelim) : [input];\n for (var i in groups) {\n if (typeof groups[i] !== \"string\") {\n continue;\n }\n var kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n var k = kv[0].trim();\n var v = kv[1].trim();\n callback(k, v);\n }\n}\n\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n var oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n var ts = parseTimeStamp(input);\n if (ts === null) {\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed timestamp: \" + oInput);\n }\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"region\":\n // Find the last region we parsed with the same region id.\n for (var i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case \"vertical\":\n settings.alt(k, v, [\"rl\", \"lr\"]);\n break;\n case \"line\":\n var vals = v.split(\",\"),\n vals0 = vals[0];\n settings.integer(k, vals0);\n settings.percent(k, vals0) ? settings.set(\"snapToLines\", false) : null;\n settings.alt(k, vals0, [\"auto\"]);\n if (vals.length === 2) {\n settings.alt(\"lineAlign\", vals[1], [\"start\", \"center\", \"end\"]);\n }\n break;\n case \"position\":\n vals = v.split(\",\");\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt(\"positionAlign\", vals[1], [\"start\", \"center\", \"end\"]);\n }\n break;\n case \"size\":\n settings.percent(k, v);\n break;\n case \"align\":\n settings.alt(k, v, [\"start\", \"center\", \"end\", \"left\", \"right\"]);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get(\"region\", null);\n cue.vertical = settings.get(\"vertical\", \"\");\n try {\n cue.line = settings.get(\"line\", \"auto\");\n } catch (e) {}\n cue.lineAlign = settings.get(\"lineAlign\", \"start\");\n cue.snapToLines = settings.get(\"snapToLines\", true);\n cue.size = settings.get(\"size\", 100);\n // Safari still uses the old middle value and won't accept center\n try {\n cue.align = settings.get(\"align\", \"center\");\n } catch (e) {\n cue.align = settings.get(\"align\", \"middle\");\n }\n try {\n cue.position = settings.get(\"position\", \"auto\");\n } catch (e) {\n cue.position = settings.get(\"position\", {\n start: 0,\n left: 0,\n center: 50,\n middle: 50,\n end: 100,\n right: 100\n }, cue.align);\n }\n\n\n cue.positionAlign = settings.get(\"positionAlign\", {\n start: \"start\",\n left: \"start\",\n center: \"center\",\n middle: \"center\",\n end: \"end\",\n right: \"end\"\n }, cue.align);\n }\n\n function skipWhitespace() {\n input = input.replace(/^\\s+/, \"\");\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.substr(0, 3) !== \"-->\") { // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed time stamp (time stamps must be separated by '-->'): \" +\n oInput);\n }\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\n\n// When evaluating this file as part of a Webpack bundle for server\n// side rendering, `document` is an empty object.\nvar TEXTAREA_ELEMENT = document.createElement && document.createElement(\"textarea\");\n\nvar TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n};\n\n// 5.1 default text color\n// 5.2 default text background color is equivalent to text color with bg_ prefix\nvar DEFAULT_COLOR_CLASS = {\n white: 'rgba(255,255,255,1)',\n lime: 'rgba(0,255,0,1)',\n cyan: 'rgba(0,255,255,1)',\n red: 'rgba(255,0,0,1)',\n yellow: 'rgba(255,255,0,1)',\n magenta: 'rgba(255,0,255,1)',\n blue: 'rgba(0,0,255,1)',\n black: 'rgba(0,0,0,1)'\n};\n\nvar TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n};\n\nvar NEEDS_PARENT = {\n rt: \"ruby\"\n};\n\n// Parse content into a document fragment.\nfunction parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n }\n\n // Consume 'n' characters from the input.\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]*>?)?/);\n // If there is some text before the next tag, return it, otherwise return\n // the tag.\n return consume(m[1] ? m[1] : m[2]);\n }\n\n function unescape(s) {\n TEXTAREA_ELEMENT.innerHTML = s;\n s = TEXTAREA_ELEMENT.textContent;\n TEXTAREA_ELEMENT.textContent = \"\";\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] ||\n NEEDS_PARENT[element.localName] === current.localName;\n }\n\n // Create an element for this tag.\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n if (!tagName) {\n return null;\n }\n var element = window.document.createElement(tagName);\n var name = TAG_ANNOTATION[type];\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length &&\n tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n }\n // Otherwise just ignore the end tag.\n continue;\n }\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/);\n // If we can't parse the tag, skip to the next tag.\n if (!m) {\n continue;\n }\n // Try to construct an element, and ignore the tag if we couldn't.\n node = createElement(m[1], m[3]);\n if (!node) {\n continue;\n }\n // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n if (!shouldAdd(current, node)) {\n continue;\n }\n // Set the class list (as a list of classes, separated by space).\n if (m[2]) {\n var classes = m[2].split('.');\n\n classes.forEach(function(cl) {\n var bgColor = /^bg_/.test(cl);\n // slice out `bg_` if it's a background color\n var colorName = bgColor ? cl.slice(3) : cl;\n\n if (DEFAULT_COLOR_CLASS.hasOwnProperty(colorName)) {\n var propName = bgColor ? 'background-color' : 'color';\n var propValue = DEFAULT_COLOR_CLASS[colorName];\n\n node.style[propName] = propValue;\n }\n });\n\n node.className = classes.join(' ');\n }\n // Append the node to the current node, and enter the scope of the new\n // node.\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n }\n\n // Text nodes are leaf nodes.\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n}\n\n// This is a list of all the Unicode characters that have a strong\n// right-to-left category. What this means is that these characters are\n// written right-to-left for sure. It was generated by pulling all the strong\n// right-to-left characters out of the Unicode data table. That table can\n// found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\nvar strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6],\n [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d],\n [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6],\n [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5],\n [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815],\n [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858],\n [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f],\n [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c],\n [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1],\n [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc],\n [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808],\n [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855],\n [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f],\n [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13],\n [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58],\n [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72],\n [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f],\n [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32],\n [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42],\n [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f],\n [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59],\n [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62],\n [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77],\n [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b],\n [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\nfunction isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n return text;\n }\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n while ((text = nextTextNode(nodeStack))) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n return \"ltr\";\n}\n\nfunction computeLinePos(cue) {\n if (typeof cue.line === \"number\" &&\n (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {\n return cue.line;\n }\n if (!cue.track || !cue.track.textTrackList ||\n !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n return ++count * -1;\n}\n\nfunction StyleBox() {\n}\n\n// Apply styles to a div. If there is no div passed then it defaults to the\n// div on 'this'.\nStyleBox.prototype.applyStyles = function(styles, div) {\n div = div || this.div;\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n};\n\nStyleBox.prototype.formatStyle = function(val, unit) {\n return val === 0 ? 0 : val + unit;\n};\n\n// Constructs the computed display state of the cue (a div). Places the div\n// into the overlay which should be a block level element (usually a div).\nfunction CueStyleBox(window, cue, styleOptions) {\n StyleBox.call(this);\n this.cue = cue;\n\n // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: \"rgba(255, 255, 255, 1)\",\n backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\",\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\",\n unicodeBidi: \"plaintext\"\n };\n\n this.applyStyles(styles, this.cueDiv);\n\n // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except middle instead of center on Safari.\n this.div = window.document.createElement(\"div\");\n styles = {\n direction: determineBidi(this.cueDiv),\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\",\n unicodeBidi: \"plaintext\",\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n\n this.applyStyles(styles);\n this.div.appendChild(this.cueDiv);\n\n // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n var textPos = 0;\n switch (cue.positionAlign) {\n case \"start\":\n textPos = cue.position;\n break;\n case \"center\":\n textPos = cue.position - (cue.size / 2);\n break;\n case \"end\":\n textPos = cue.position - cue.size;\n break;\n }\n\n // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n });\n // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function(box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n}\nCueStyleBox.prototype = _objCreate(StyleBox.prototype);\nCueStyleBox.prototype.constructor = CueStyleBox;\n\n// Represents the co-ordinates of an Element in a way that we can easily\n// compute things with such as if it overlaps or intersects with another Element.\n// Can initialize it with either a StyleBox or another BoxPosition.\nfunction BoxPosition(obj) {\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&\n rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect();\n // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)\n : 0;\n\n }\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || (top + (obj.height || height));\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n}\n\n// Move the box along a particular axis. Optionally pass in an amount to move\n// the box. If no amount is passed then the default is the line height of the\n// box.\nBoxPosition.prototype.move = function(axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n};\n\n// Check if this box overlaps another box, b2.\nBoxPosition.prototype.overlaps = function(b2) {\n return this.left < b2.right &&\n this.right > b2.left &&\n this.top < b2.bottom &&\n this.bottom > b2.top;\n};\n\n// Check if this box overlaps any other boxes in boxes.\nBoxPosition.prototype.overlapsAny = function(boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n return false;\n};\n\n// Check if this box is within another box.\nBoxPosition.prototype.within = function(container) {\n return this.top >= container.top &&\n this.bottom <= container.bottom &&\n this.left >= container.left &&\n this.right <= container.right;\n};\n\n// Check if this box is entirely within the container or it is overlapping\n// on the edge opposite of the axis direction passed. For example, if \"+x\" is\n// passed and the box is overlapping on the left edge of the container, then\n// return true.\nBoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n case \"-x\":\n return this.right > container.right;\n case \"+y\":\n return this.top < container.top;\n case \"-y\":\n return this.bottom > container.bottom;\n }\n};\n\n// Find the percentage of the area that this box is overlapping with another\n// box.\nBoxPosition.prototype.intersectPercentage = function(b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n};\n\n// Convert the positions from this box to CSS compatible positions using\n// the reference container's positions. This has to be done because this\n// box's positions are in reference to the viewport origin, whereas, CSS\n// values are in referecne to their respective edges.\nBoxPosition.prototype.toCSSCompatValues = function(reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n};\n\n// Get an object that represents the box's position without anything extra.\n// Can pass a StyleBox, HTMLElement, or another BoxPositon.\nBoxPosition.getSimpleBoxPosition = function(obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n\n obj = obj.div ? obj.div.getBoundingClientRect() :\n obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || (top + (obj.height || height)),\n width: obj.width || width\n };\n return ret;\n};\n\n// Move a StyleBox to its specified, or next best, position. The containerBox\n// is the box that contains the StyleBox, such as a div. boxPositions are\n// a list of other boxes that the styleBox can't overlap with.\nfunction moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) ||\n (b.within(containerBox) && b.overlapsAny(boxPositions))) {\n b.move(axis[i]);\n }\n // We found a spot where we aren't overlapping anything. This is our\n // best position.\n if (b.within(containerBox)) {\n return b;\n }\n var p = b.intersectPercentage(containerBox);\n // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n }\n // Reset the box position to the specified position.\n b = new BoxPosition(specifiedPosition);\n }\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = [];\n\n // If we have a line number to align the cue to.\n if (cue.snapToLines) {\n var size;\n switch (cue.vertical) {\n case \"\":\n axis = [ \"+y\", \"-y\" ];\n size = \"height\";\n break;\n case \"rl\":\n axis = [ \"+x\", \"-x\" ];\n size = \"width\";\n break;\n case \"lr\":\n axis = [ \"-x\", \"+x\" ];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0];\n\n // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n\n // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n }\n\n // Move the box to the specified position. This may not be its best\n // position.\n boxPosition.move(initialAxis, position);\n\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;\n\n switch (cue.lineAlign) {\n case \"center\":\n linePos -= (calculatedPercentage / 2);\n break;\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n }\n\n // Apply initial line position to the cue box.\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [ \"+y\", \"-x\", \"+x\", \"-y\" ];\n\n // Get the box position again after we've applied the specified positioning\n // to it.\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n}\n\nfunction WebVTT() {\n // Nothing\n}\n\n// Helper to allow strings to be decoded instead of the default binary utf8 data.\nWebVTT.StringDecoder = function() {\n return {\n decode: function(data) {\n if (!data) {\n return \"\";\n }\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n};\n\nWebVTT.convertCueToDOMTree = function(window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n return parseContent(window, cuetext);\n};\n\nvar FONT_SIZE_PERCENT = 0.05;\nvar FONT_STYLE = \"sans-serif\";\nvar CUE_BACKGROUND_PADDING = \"1.5%\";\n\n// Runs the processing model over the cues and regions passed to it.\n// @param overlay A block level element (usually a div) that the computed cues\n// and regions will be placed into.\nWebVTT.processCues = function(window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n }\n\n // Remove all previous children.\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay);\n\n // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n return false;\n }\n\n // We don't need to recompute the cues' display states. Just reuse them.\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function() {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i];\n\n // Compute the intial position and styles of the cue div.\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div);\n\n // Move the cue div to it's correct line position.\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);\n\n // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n cue.displayState = styleBox.div;\n\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n};\n\nWebVTT.Parser = function(window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n};\n\nWebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function (data) {\n var self = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {stream: true});\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n var line = buffer.substr(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n self.buffer = buffer.substr(pos);\n return line;\n }\n\n // 3.4 WebVTT region and WebVTT region settings syntax\n function parseRegion(input) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n case \"width\":\n settings.percent(k, v);\n break;\n case \"lines\":\n settings.integer(k, v);\n break;\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n if (xy.length !== 2) {\n break;\n }\n // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/);\n\n // Create the region, using default values for any values that were not\n // specified.\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\");\n // Register the region.\n self.onregion && self.onregion(region);\n // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n }\n\n // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n function parseTimestampMap(input) {\n var settings = new Settings();\n\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n\n }\n\n // 5.1 WebVTT file parsing.\n try {\n var line;\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n continue;\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n // Safari still uses the old middle value and won't accept center\n try {\n self.cue.align = \"center\";\n } catch (e) {\n self.cue.align = \"middle\";\n }\n self.state = \"CUE\";\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /*falls through*/\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e);\n // In case of an error ignore rest of the cue.\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n self.state = \"CUETEXT\";\n continue;\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n self.cue.text += line.replace(/\\u2028/g, '\\n').replace(/u2029/g, '\\n');\n continue;\n case \"BADCUE\": // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e);\n\n // If we are currently parsing a cue, report what we have.\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n self.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n return this;\n },\n flush: function () {\n var self = this;\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch(e) {\n self.reportOrThrowError(e);\n }\n self.onflush && self.onflush();\n return this;\n }\n};\n\nmodule.exports = WebVTT;\n","// By default assume browserify was used to bundle app. These arguments are passed to\n// the module by browserify.\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\nvar stringify = JSON.stringify;\nvar webpack = false;\n\n// webpackBootstrap\nvar webpackBootstrapFn = function(modules) {\n // The module cache\n var installedModules = {};\n\n // The require function\n function __webpack_require__(moduleId) {\n\n // Check if module is in cache\n if(installedModules[moduleId]) {\n return installedModules[moduleId].exports;\n }\n // Create a new module (and put it into the cache)\n var module = installedModules[moduleId] = {\n i: moduleId,\n l: false,\n exports: {}\n };\n\n // Execute the module function\n modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n // Flag the module as loaded\n module.l = true;\n\n // Return the exports of the module\n return module.exports;\n }\n\n\n // expose the modules object (__webpack_modules__)\n __webpack_require__.m = modules;\n\n // expose the module cache\n __webpack_require__.c = installedModules;\n\n // define getter function for harmony exports\n __webpack_require__.d = function(exports, name, getter) {\n if(!__webpack_require__.o(exports, name)) {\n Object.defineProperty(exports, name, {\n configurable: false,\n enumerable: true,\n get: getter\n });\n }\n };\n\n // getDefaultExport function for compatibility with non-harmony modules\n __webpack_require__.n = function(module) {\n var getter = module && module.__esModule ?\n function getDefault() { return module['default']; } :\n function getModuleExports() { return module; };\n\n __webpack_require__.d(getter, 'a', getter);\n return getter;\n };\n\n // Object.prototype.hasOwnProperty.call\n __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n // __webpack_public_path__\n __webpack_require__.p = \"\";\n\n // Load entry module and return exports\n return __webpack_require__(__webpack_require__.s = entryModule);\n}\n\nif (typeof bundleFn === 'undefined') {\n // Assume this was bundled with webpack and not browserify\n webpack = true;\n bundleFn = webpackBootstrapFn;\n sources = __webpack_modules__;\n}\n\nvar bundleWithBrowserify = function(fn) {\n // with browserify we must find the module key ourselves\n var cacheKeys = Object.keys(cache);\n var fnModuleKey;\n\n for (var i = 0; i < cacheKeys.length; i++) {\n var cacheKey = cacheKeys[i];\n var cacheExports = cache[cacheKey].exports;\n\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (cacheExports === fn || cacheExports && cacheExports.default === fn) {\n fnModuleKey = cacheKey;\n break;\n }\n }\n\n // if we couldn't find one, lets make one\n if (!fnModuleKey) {\n fnModuleKey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var fnModuleCache = {};\n\n for (var i = 0; i < cacheKeys.length; i++) {\n var cacheKey = cacheKeys[i];\n\n fnModuleCache[cacheKey] = cacheKey;\n }\n\n sources[fnModuleKey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n fnModuleCache\n ];\n }\n\n var entryKey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var entryCache = {};\n\n entryCache[fnModuleKey] = fnModuleKey;\n sources[entryKey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(fnModuleKey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n entryCache\n ];\n\n return '(' + bundleFn + ')({'\n + Object.keys(sources).map(function(key) {\n return stringify(key) + ':['\n + sources[key][0] + ','\n + stringify(sources[key][1]) + ']';\n }).join(',')\n + '},{},[' + stringify(entryKey) + '])';\n};\n\nvar bundleWithWebpack = function(fn, fnModuleId) {\n var devMode = typeof fnModuleId === 'string';\n var sourceStrings;\n\n if (devMode) {\n sourceStrings = {};\n } else {\n sourceStrings = [];\n }\n\n Object.keys(sources).forEach(function(sKey) {\n if (!sources[sKey]) {\n return;\n }\n sourceStrings[sKey] = sources[sKey].toString();\n });\n\n var fnModuleExports = __webpack_require__(fnModuleId);\n\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (!(fnModuleExports && (fnModuleExports === fn || fnModuleExports.default === fn))) {\n var fnSourceString = sourceStrings[fnModuleId];\n\n sourceStrings[fnModuleId] = fnSourceString.substring(0, fnSourceString.length - 1) +\n '\\n' + fn.name + '();\\n}';\n }\n\n var modulesString;\n\n if (devMode) {\n // must escape quotes to support webpack loader options\n fnModuleId = stringify(fnModuleId);\n // dev mode in webpack4, modules are passed as an object\n var mappedSourceStrings = Object.keys(sourceStrings).map(function(sKey) {\n return stringify(sKey) + ':' + sourceStrings[sKey];\n });\n\n modulesString = '{' + mappedSourceStrings.join(',') + '}';\n } else {\n modulesString = '[' + sourceStrings.join(',') + ']';\n }\n\n return 'var fn = (' + bundleFn.toString().replace('entryModule', fnModuleId) + ')('\n + modulesString\n + ');\\n'\n // not a function when calling a function from the current scope\n + '(typeof fn === \"function\") && fn(self);';\n\n};\n\nmodule.exports = function webwackify(fn, fnModuleId) {\n var src;\n\n if (webpack) {\n src = bundleWithWebpack(fn, fnModuleId);\n } else {\n src = bundleWithBrowserify(fn);\n }\n\n var blob = new Blob([src], { type: 'text/javascript' });\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","function clean (s) {\n return s.replace(/\\n\\r?\\s*/g, '')\n}\n\n\nmodule.exports = function tsml (sa) {\n var s = ''\n , i = 0\n\n for (; i < arguments.length; i++)\n s += clean(sa[i]) + (arguments[i + 1] || '')\n\n return s\n}","'use strict';\n\nvar _lineStream = require('./line-stream');\n\nvar _lineStream2 = _interopRequireDefault(_lineStream);\n\nvar _parseStream = require('./parse-stream');\n\nvar _parseStream2 = _interopRequireDefault(_parseStream);\n\nvar _parser = require('./parser');\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nmodule.exports = {\n LineStream: _lineStream2['default'],\n ParseStream: _parseStream2['default'],\n Parser: _parser2['default']\n}; /**\n * @file m3u8/index.js\n *\n * Utilities for parsing M3U8 files. If the entire manifest is available,\n * `Parser` will create an object representation with enough detail for managing\n * playback. `ParseStream` and `LineStream` are lower-level parsing primitives\n * that do not assume the entirety of the manifest is ready and expose a\n * ReadableStream-like interface.\n */","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","/**\n * @file playback-watcher.js\n *\n * Playback starts, and now my watch begins. It shall not end until my death. I shall\n * take no wait, hold no uncleared timeouts, father no bad seeks. I shall wear no crowns\n * and win no glory. I shall live and die at my post. I am the corrector of the underflow.\n * I am the watcher of gaps. I am the shield that guards the realms of seekable. I pledge\n * my life and honor to the Playback Watch, for this Player and all the Players to come.\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _ranges = require('./ranges');\n\nvar _ranges2 = _interopRequireDefault(_ranges);\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\n// Set of events that reset the playback-watcher time check logic and clear the timeout\nvar timerCancelEvents = ['seeking', 'seeked', 'pause', 'playing', 'error'];\n\n/**\n * @class PlaybackWatcher\n */\n\nvar PlaybackWatcher = (function () {\n /**\n * Represents an PlaybackWatcher object.\n * @constructor\n * @param {object} options an object that includes the tech and settings\n */\n\n function PlaybackWatcher(options) {\n var _this = this;\n\n _classCallCheck(this, PlaybackWatcher);\n\n this.tech_ = options.tech;\n this.seekable = options.seekable;\n\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = null;\n this.timer_ = null;\n this.checkCurrentTimeTimeout_ = null;\n\n if (options.debug) {\n this.logger_ = _videoJs2['default'].log.bind(_videoJs2['default'], 'playback-watcher ->');\n }\n this.logger_('initialize');\n\n var canPlayHandler = function canPlayHandler() {\n return _this.monitorCurrentTime_();\n };\n var waitingHandler = function waitingHandler() {\n return _this.techWaiting_();\n };\n var cancelTimerHandler = function cancelTimerHandler() {\n return _this.cancelTimer_();\n };\n var fixesBadSeeksHandler = function fixesBadSeeksHandler() {\n return _this.fixesBadSeeks_();\n };\n\n this.tech_.on('seekablechanged', fixesBadSeeksHandler);\n this.tech_.on('waiting', waitingHandler);\n this.tech_.on(timerCancelEvents, cancelTimerHandler);\n this.tech_.on('canplay', canPlayHandler);\n\n // Define the dispose function to clean up our events\n this.dispose = function () {\n _this.logger_('dispose');\n _this.tech_.off('seekablechanged', fixesBadSeeksHandler);\n _this.tech_.off('waiting', waitingHandler);\n _this.tech_.off(timerCancelEvents, cancelTimerHandler);\n _this.tech_.off('canplay', canPlayHandler);\n if (_this.checkCurrentTimeTimeout_) {\n _globalWindow2['default'].clearTimeout(_this.checkCurrentTimeTimeout_);\n }\n _this.cancelTimer_();\n };\n }\n\n /**\n * Periodically check current time to see if playback stopped\n *\n * @private\n */\n\n _createClass(PlaybackWatcher, [{\n key: 'monitorCurrentTime_',\n value: function monitorCurrentTime_() {\n this.checkCurrentTime_();\n\n if (this.checkCurrentTimeTimeout_) {\n _globalWindow2['default'].clearTimeout(this.checkCurrentTimeTimeout_);\n }\n\n // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n this.checkCurrentTimeTimeout_ = _globalWindow2['default'].setTimeout(this.monitorCurrentTime_.bind(this), 250);\n }\n\n /**\n * The purpose of this function is to emulate the \"waiting\" event on\n * browsers that do not emit it when they are waiting for more\n * data to continue playback\n *\n * @private\n */\n }, {\n key: 'checkCurrentTime_',\n value: function checkCurrentTime_() {\n if (this.tech_.seeking() && this.fixesBadSeeks_()) {\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = this.tech_.currentTime();\n return;\n }\n\n if (this.tech_.paused() || this.tech_.seeking()) {\n return;\n }\n\n var currentTime = this.tech_.currentTime();\n var buffered = this.tech_.buffered();\n\n if (this.lastRecordedTime === currentTime && (!buffered.length || currentTime + _ranges2['default'].SAFE_TIME_DELTA >= buffered.end(buffered.length - 1))) {\n // If current time is at the end of the final buffered region, then any playback\n // stall is most likely caused by buffering in a low bandwidth environment. The tech\n // should fire a `waiting` event in this scenario, but due to browser and tech\n // inconsistencies (e.g. The Flash tech does not fire a `waiting` event when the end\n // of the buffer is reached and has fallen off the live window). Calling\n // `techWaiting_` here allows us to simulate responding to a native `waiting` event\n // when the tech fails to emit one.\n return this.techWaiting_();\n }\n\n if (this.consecutiveUpdates >= 5 && currentTime === this.lastRecordedTime) {\n this.consecutiveUpdates++;\n this.waiting_();\n } else if (currentTime === this.lastRecordedTime) {\n this.consecutiveUpdates++;\n } else {\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = currentTime;\n }\n }\n\n /**\n * Cancels any pending timers and resets the 'timeupdate' mechanism\n * designed to detect that we are stalled\n *\n * @private\n */\n }, {\n key: 'cancelTimer_',\n value: function cancelTimer_() {\n this.consecutiveUpdates = 0;\n\n if (this.timer_) {\n this.logger_('cancelTimer_');\n clearTimeout(this.timer_);\n }\n\n this.timer_ = null;\n }\n\n /**\n * Fixes situations where there's a bad seek\n *\n * @return {Boolean} whether an action was taken to fix the seek\n * @private\n */\n }, {\n key: 'fixesBadSeeks_',\n value: function fixesBadSeeks_() {\n var seeking = this.tech_.seeking();\n var seekable = this.seekable();\n var currentTime = this.tech_.currentTime();\n var seekTo = undefined;\n\n if (seeking && this.afterSeekableWindow_(seekable, currentTime)) {\n var seekableEnd = seekable.end(seekable.length - 1);\n\n // sync to live point (if VOD, our seekable was updated and we're simply adjusting)\n seekTo = seekableEnd;\n }\n\n if (seeking && this.beforeSeekableWindow_(seekable, currentTime)) {\n var seekableStart = seekable.start(0);\n\n // sync to the beginning of the live window\n // provide a buffer of .1 seconds to handle rounding/imprecise numbers\n seekTo = seekableStart + _ranges2['default'].SAFE_TIME_DELTA;\n }\n\n if (typeof seekTo !== 'undefined') {\n this.logger_('Trying to seek outside of seekable at time ' + currentTime + ' with ' + ('seekable range ' + _ranges2['default'].printableRange(seekable) + '. Seeking to ') + (seekTo + '.'));\n\n this.tech_.setCurrentTime(seekTo);\n return true;\n }\n\n return false;\n }\n\n /**\n * Handler for situations when we determine the player is waiting.\n *\n * @private\n */\n }, {\n key: 'waiting_',\n value: function waiting_() {\n if (this.techWaiting_()) {\n return;\n }\n\n // All tech waiting checks failed. Use last resort correction\n var currentTime = this.tech_.currentTime();\n var buffered = this.tech_.buffered();\n var currentRange = _ranges2['default'].findRange(buffered, currentTime);\n\n // Sometimes the player can stall for unknown reasons within a contiguous buffered\n // region with no indication that anything is amiss (seen in Firefox). Seeking to\n // currentTime is usually enough to kickstart the player. This checks that the player\n // is currently within a buffered region before attempting a corrective seek.\n // Chrome does not appear to continue `timeupdate` events after a `waiting` event\n // until there is ~ 3 seconds of forward buffer available. PlaybackWatcher should also\n // make sure there is ~3 seconds of forward buffer before taking any corrective action\n // to avoid triggering an `unknownwaiting` event when the network is slow.\n if (currentRange.length && currentTime + 3 <= currentRange.end(0)) {\n this.cancelTimer_();\n this.tech_.setCurrentTime(currentTime);\n\n this.logger_('Stopped at ' + currentTime + ' while inside a buffered region ' + ('[' + currentRange.start(0) + ' -> ' + currentRange.end(0) + ']. Attempting to resume ') + 'playback by seeking to the current time.');\n\n // unknown waiting corrections may be useful for monitoring QoS\n this.tech_.trigger({ type: 'usage', name: 'hls-unknown-waiting' });\n return;\n }\n }\n\n /**\n * Handler for situations when the tech fires a `waiting` event\n *\n * @return {Boolean}\n * True if an action (or none) was needed to correct the waiting. False if no\n * checks passed\n * @private\n */\n }, {\n key: 'techWaiting_',\n value: function techWaiting_() {\n var seekable = this.seekable();\n var currentTime = this.tech_.currentTime();\n\n if (this.tech_.seeking() && this.fixesBadSeeks_()) {\n // Tech is seeking or bad seek fixed, no action needed\n return true;\n }\n\n if (this.tech_.seeking() || this.timer_ !== null) {\n // Tech is seeking or already waiting on another action, no action needed\n return true;\n }\n\n if (this.beforeSeekableWindow_(seekable, currentTime)) {\n var livePoint = seekable.end(seekable.length - 1);\n\n this.logger_('Fell out of live window at time ' + currentTime + '. Seeking to ' + ('live point (seekable end) ' + livePoint));\n this.cancelTimer_();\n this.tech_.setCurrentTime(livePoint);\n\n // live window resyncs may be useful for monitoring QoS\n this.tech_.trigger({ type: 'usage', name: 'hls-live-resync' });\n return true;\n }\n\n var buffered = this.tech_.buffered();\n var nextRange = _ranges2['default'].findNextRange(buffered, currentTime);\n\n if (this.videoUnderflow_(nextRange, buffered, currentTime)) {\n // Even though the video underflowed and was stuck in a gap, the audio overplayed\n // the gap, leading currentTime into a buffered range. Seeking to currentTime\n // allows the video to catch up to the audio position without losing any audio\n // (only suffering ~3 seconds of frozen video and a pause in audio playback).\n this.cancelTimer_();\n this.tech_.setCurrentTime(currentTime);\n\n // video underflow may be useful for monitoring QoS\n this.tech_.trigger({ type: 'usage', name: 'hls-video-underflow' });\n return true;\n }\n\n // check for gap\n if (nextRange.length > 0) {\n var difference = nextRange.start(0) - currentTime;\n\n this.logger_('Stopped at ' + currentTime + ', setting timer for ' + difference + ', seeking ' + ('to ' + nextRange.start(0)));\n\n this.timer_ = setTimeout(this.skipTheGap_.bind(this), difference * 1000, currentTime);\n return true;\n }\n\n // All checks failed. Returning false to indicate failure to correct waiting\n return false;\n }\n }, {\n key: 'afterSeekableWindow_',\n value: function afterSeekableWindow_(seekable, currentTime) {\n if (!seekable.length) {\n // we can't make a solid case if there's no seekable, default to false\n return false;\n }\n\n if (currentTime > seekable.end(seekable.length - 1) + _ranges2['default'].SAFE_TIME_DELTA) {\n return true;\n }\n\n return false;\n }\n }, {\n key: 'beforeSeekableWindow_',\n value: function beforeSeekableWindow_(seekable, currentTime) {\n if (seekable.length &&\n // can't fall before 0 and 0 seekable start identifies VOD stream\n seekable.start(0) > 0 && currentTime < seekable.start(0) - _ranges2['default'].SAFE_TIME_DELTA) {\n return true;\n }\n\n return false;\n }\n }, {\n key: 'videoUnderflow_',\n value: function videoUnderflow_(nextRange, buffered, currentTime) {\n if (nextRange.length === 0) {\n // Even if there is no available next range, there is still a possibility we are\n // stuck in a gap due to video underflow.\n var gap = this.gapFromVideoUnderflow_(buffered, currentTime);\n\n if (gap) {\n this.logger_('Encountered a gap in video from ' + gap.start + ' to ' + gap.end + '. ' + ('Seeking to current time ' + currentTime));\n\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Timer callback. If playback still has not proceeded, then we seek\n * to the start of the next buffered region.\n *\n * @private\n */\n }, {\n key: 'skipTheGap_',\n value: function skipTheGap_(scheduledCurrentTime) {\n var buffered = this.tech_.buffered();\n var currentTime = this.tech_.currentTime();\n var nextRange = _ranges2['default'].findNextRange(buffered, currentTime);\n\n this.cancelTimer_();\n\n if (nextRange.length === 0 || currentTime !== scheduledCurrentTime) {\n return;\n }\n\n this.logger_('skipTheGap_:', 'currentTime:', currentTime, 'scheduled currentTime:', scheduledCurrentTime, 'nextRange start:', nextRange.start(0));\n\n // only seek if we still have not played\n this.tech_.setCurrentTime(nextRange.start(0) + _ranges2['default'].TIME_FUDGE_FACTOR);\n\n this.tech_.trigger({ type: 'usage', name: 'hls-gap-skip' });\n }\n }, {\n key: 'gapFromVideoUnderflow_',\n value: function gapFromVideoUnderflow_(buffered, currentTime) {\n // At least in Chrome, if there is a gap in the video buffer, the audio will continue\n // playing for ~3 seconds after the video gap starts. This is done to account for\n // video buffer underflow/underrun (note that this is not done when there is audio\n // buffer underflow/underrun -- in that case the video will stop as soon as it\n // encounters the gap, as audio stalls are more noticeable/jarring to a user than\n // video stalls). The player's time will reflect the playthrough of audio, so the\n // time will appear as if we are in a buffered region, even if we are stuck in a\n // \"gap.\"\n //\n // Example:\n // video buffer: 0 => 10.1, 10.2 => 20\n // audio buffer: 0 => 20\n // overall buffer: 0 => 10.1, 10.2 => 20\n // current time: 13\n //\n // Chrome's video froze at 10 seconds, where the video buffer encountered the gap,\n // however, the audio continued playing until it reached ~3 seconds past the gap\n // (13 seconds), at which point it stops as well. Since current time is past the\n // gap, findNextRange will return no ranges.\n //\n // To check for this issue, we see if there is a gap that starts somewhere within\n // a 3 second range (3 seconds +/- 1 second) back from our current time.\n var gaps = _ranges2['default'].findGaps(buffered);\n\n for (var i = 0; i < gaps.length; i++) {\n var start = gaps.start(i);\n var end = gaps.end(i);\n\n // gap is starts no more than 4 seconds back\n if (currentTime - start < 4 && currentTime - start > 2) {\n return {\n start: start,\n end: end\n };\n }\n }\n\n return null;\n }\n\n /**\n * A debugging logger noop that is set to console.log only if debugging\n * is enabled globally\n *\n * @private\n */\n }, {\n key: 'logger_',\n value: function logger_() {}\n }]);\n\n return PlaybackWatcher;\n})();\n\nexports['default'] = PlaybackWatcher;\nmodule.exports = exports['default'];","/**\n * @file flash-transmuxer-worker.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _muxJsLibFlv = require('mux.js/lib/flv');\n\nvar _muxJsLibFlv2 = _interopRequireDefault(_muxJsLibFlv);\n\n/**\n * Re-emits transmuxer events by converting them into messages to the\n * world outside the worker.\n *\n * @param {Object} transmuxer the transmuxer to wire events on\n * @private\n */\nvar wireTransmuxerEvents = function wireTransmuxerEvents(transmuxer) {\n transmuxer.on('data', function (segment) {\n _globalWindow2['default'].postMessage({\n action: 'data',\n segment: segment\n });\n });\n\n transmuxer.on('done', function (data) {\n _globalWindow2['default'].postMessage({ action: 'done' });\n });\n};\n\n/**\n * All incoming messages route through this hash. If no function exists\n * to handle an incoming message, then we ignore the message.\n *\n * @class MessageHandlers\n * @param {Object} options the options to initialize with\n */\n\nvar MessageHandlers = (function () {\n function MessageHandlers(options) {\n _classCallCheck(this, MessageHandlers);\n\n this.options = options || {};\n this.init();\n }\n\n /**\n * Our web wroker interface so that things can talk to mux.js\n * that will be running in a web worker. The scope is passed to this by\n * webworkify.\n *\n * @param {Object} self the scope for the web worker\n */\n\n /**\n * initialize our web worker and wire all the events.\n */\n\n _createClass(MessageHandlers, [{\n key: 'init',\n value: function init() {\n if (this.transmuxer) {\n this.transmuxer.dispose();\n }\n this.transmuxer = new _muxJsLibFlv2['default'].Transmuxer(this.options);\n wireTransmuxerEvents(this.transmuxer);\n }\n\n /**\n * Adds data (a ts segment) to the start of the transmuxer pipeline for\n * processing.\n *\n * @param {ArrayBuffer} data data to push into the muxer\n */\n }, {\n key: 'push',\n value: function push(data) {\n // Cast array buffer to correct type for transmuxer\n var segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n\n this.transmuxer.push(segment);\n }\n\n /**\n * Recreate the transmuxer so that the next segment added via `push`\n * start with a fresh transmuxer.\n */\n }, {\n key: 'reset',\n value: function reset() {\n this.init();\n }\n\n /**\n * Forces the pipeline to finish processing the last segment and emit its\n * results.\n */\n }, {\n key: 'flush',\n value: function flush() {\n this.transmuxer.flush();\n }\n }, {\n key: 'resetCaptions',\n value: function resetCaptions() {\n this.transmuxer.resetCaptions();\n }\n }]);\n\n return MessageHandlers;\n})();\n\nvar FlashTransmuxerWorker = function FlashTransmuxerWorker(self) {\n self.onmessage = function (event) {\n if (event.data.action === 'init' && event.data.options) {\n this.messageHandlers = new MessageHandlers(event.data.options);\n return;\n }\n\n if (!this.messageHandlers) {\n this.messageHandlers = new MessageHandlers();\n }\n\n if (event.data && event.data.action && event.data.action !== 'init') {\n if (this.messageHandlers[event.data.action]) {\n this.messageHandlers[event.data.action](event.data);\n }\n }\n };\n};\n\nexports['default'] = function (self) {\n return new FlashTransmuxerWorker(self);\n};\n\nmodule.exports = exports['default'];","'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","/**\n * @module playlist-loader\n *\n * @file A state machine that manages the loading, caching, and updating of\n * M3U8 playlists.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _resolveUrl = require('./resolve-url');\n\nvar _resolveUrl2 = _interopRequireDefault(_resolveUrl);\n\nvar _videoJs = require('video.js');\n\nvar _m3u8Parser = require('m3u8-parser');\n\nvar _m3u8Parser2 = _interopRequireDefault(_m3u8Parser);\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\n/**\n * Returns a new array of segments that is the result of merging\n * properties from an older list of segments onto an updated\n * list. No properties on the updated playlist will be overridden.\n *\n * @param {Array} original the outdated list of segments\n * @param {Array} update the updated list of segments\n * @param {Number=} offset the index of the first update\n * segment in the original segment list. For non-live playlists,\n * this should always be zero and does not need to be\n * specified. For live playlists, it should be the difference\n * between the media sequence numbers in the original and updated\n * playlists.\n * @return a list of merged segment objects\n */\nvar updateSegments = function updateSegments(original, update, offset) {\n var result = update.slice();\n\n offset = offset || 0;\n var length = Math.min(original.length, update.length + offset);\n\n for (var i = offset; i < length; i++) {\n result[i - offset] = (0, _videoJs.mergeOptions)(original[i], result[i - offset]);\n }\n return result;\n};\n\nexports.updateSegments = updateSegments;\nvar resolveSegmentUris = function resolveSegmentUris(segment, baseUri) {\n if (!segment.resolvedUri) {\n segment.resolvedUri = (0, _resolveUrl2['default'])(baseUri, segment.uri);\n }\n if (segment.key && !segment.key.resolvedUri) {\n segment.key.resolvedUri = (0, _resolveUrl2['default'])(baseUri, segment.key.uri);\n }\n if (segment.map && !segment.map.resolvedUri) {\n segment.map.resolvedUri = (0, _resolveUrl2['default'])(baseUri, segment.map.uri);\n }\n};\n\nexports.resolveSegmentUris = resolveSegmentUris;\n/**\n * Returns a new master playlist that is the result of merging an\n * updated media playlist into the original version. If the\n * updated media playlist does not match any of the playlist\n * entries in the original master playlist, null is returned.\n *\n * @param {Object} master a parsed master M3U8 object\n * @param {Object} media a parsed media M3U8 object\n * @return {Object} a new object that represents the original\n * master playlist with the updated media playlist merged in, or\n * null if the merge produced no change.\n */\nvar updateMaster = function updateMaster(master, media) {\n var result = (0, _videoJs.mergeOptions)(master, {});\n var playlist = result.playlists.filter(function (p) {\n return p.uri === media.uri;\n })[0];\n\n if (!playlist) {\n return null;\n }\n\n // consider the playlist unchanged if the number of segments is equal and the media\n // sequence number is unchanged\n if (playlist.segments && media.segments && playlist.segments.length === media.segments.length && playlist.mediaSequence === media.mediaSequence) {\n return null;\n }\n\n var mergedPlaylist = (0, _videoJs.mergeOptions)(playlist, media);\n\n // if the update could overlap existing segment information, merge the two segment lists\n if (playlist.segments) {\n mergedPlaylist.segments = updateSegments(playlist.segments, media.segments, media.mediaSequence - playlist.mediaSequence);\n }\n\n // resolve any segment URIs to prevent us from having to do it later\n mergedPlaylist.segments.forEach(function (segment) {\n resolveSegmentUris(segment, mergedPlaylist.resolvedUri);\n });\n\n // TODO Right now in the playlists array there are two references to each playlist, one\n // that is referenced by index, and one by URI. The index reference may no longer be\n // necessary.\n for (var i = 0; i < result.playlists.length; i++) {\n if (result.playlists[i].uri === media.uri) {\n result.playlists[i] = mergedPlaylist;\n }\n }\n result.playlists[media.uri] = mergedPlaylist;\n\n return result;\n};\n\nexports.updateMaster = updateMaster;\nvar setupMediaPlaylists = function setupMediaPlaylists(master) {\n // setup by-URI lookups and resolve media playlist URIs\n var i = master.playlists.length;\n\n while (i--) {\n var playlist = master.playlists[i];\n\n master.playlists[playlist.uri] = playlist;\n playlist.resolvedUri = (0, _resolveUrl2['default'])(master.uri, playlist.uri);\n\n if (!playlist.attributes) {\n // Although the spec states an #EXT-X-STREAM-INF tag MUST have a\n // BANDWIDTH attribute, we can play the stream without it. This means a poorly\n // formatted master playlist may not have an attribute list. An attributes\n // property is added here to prevent undefined references when we encounter\n // this scenario.\n playlist.attributes = {};\n\n _videoJs.log.warn('Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.');\n }\n }\n};\n\nexports.setupMediaPlaylists = setupMediaPlaylists;\nvar resolveMediaGroupUris = function resolveMediaGroupUris(master) {\n ['AUDIO', 'SUBTITLES'].forEach(function (mediaType) {\n for (var groupKey in master.mediaGroups[mediaType]) {\n for (var labelKey in master.mediaGroups[mediaType][groupKey]) {\n var mediaProperties = master.mediaGroups[mediaType][groupKey][labelKey];\n\n if (mediaProperties.uri) {\n mediaProperties.resolvedUri = (0, _resolveUrl2['default'])(master.uri, mediaProperties.uri);\n }\n }\n }\n });\n};\n\nexports.resolveMediaGroupUris = resolveMediaGroupUris;\n/**\n * Calculates the time to wait before refreshing a live playlist\n *\n * @param {Object} media\n * The current media\n * @param {Boolean} update\n * True if there were any updates from the last refresh, false otherwise\n * @return {Number}\n * The time in ms to wait before refreshing the live playlist\n */\nvar refreshDelay = function refreshDelay(media, update) {\n var lastSegment = media.segments[media.segments.length - 1];\n var delay = undefined;\n\n if (update && lastSegment && lastSegment.duration) {\n delay = lastSegment.duration * 1000;\n } else {\n // if the playlist is unchanged since the last reload or last segment duration\n // cannot be determined, try again after half the target duration\n delay = (media.targetDuration || 10) * 500;\n }\n return delay;\n};\n\nexports.refreshDelay = refreshDelay;\n/**\n * Load a playlist from a remote location\n *\n * @class PlaylistLoader\n * @extends videojs.EventTarget\n * @param {String} srcUrl the url to start with\n * @param {Object} hls\n * @param {Object} [options]\n * @param {Boolean} [options.withCredentials=false] the withCredentials xhr option\n * @param {Boolean} [options.handleManifestRedirects=false] whether to follow redirects, when any\n * playlist request was redirected\n */\n\nvar PlaylistLoader = (function (_EventTarget) {\n _inherits(PlaylistLoader, _EventTarget);\n\n function PlaylistLoader(srcUrl, hls, options) {\n var _this = this;\n\n _classCallCheck(this, PlaylistLoader);\n\n _get(Object.getPrototypeOf(PlaylistLoader.prototype), 'constructor', this).call(this);\n\n options = options || {};\n\n this.srcUrl = srcUrl;\n this.hls_ = hls;\n this.withCredentials = !!options.withCredentials;\n this.handleManifestRedirects = !!options.handleManifestRedirects;\n\n if (!this.srcUrl) {\n throw new Error('A non-empty playlist URL is required');\n }\n\n // initialize the loader state\n this.state = 'HAVE_NOTHING';\n\n // live playlist staleness timeout\n this.on('mediaupdatetimeout', function () {\n if (_this.state !== 'HAVE_METADATA') {\n // only refresh the media playlist if no other activity is going on\n return;\n }\n\n _this.state = 'HAVE_CURRENT_METADATA';\n\n _this.request = _this.hls_.xhr({\n uri: (0, _resolveUrl2['default'])(_this.master.uri, _this.media().uri),\n withCredentials: _this.withCredentials\n }, function (error, req) {\n // disposed\n if (!_this.request) {\n return;\n }\n\n if (error) {\n return _this.playlistRequestError(_this.request, _this.media().uri, 'HAVE_METADATA');\n }\n\n _this.haveMetadata(_this.request, _this.media().uri);\n });\n });\n }\n\n _createClass(PlaylistLoader, [{\n key: 'playlistRequestError',\n value: function playlistRequestError(xhr, url, startingState) {\n // any in-flight request is now finished\n this.request = null;\n\n if (startingState) {\n this.state = startingState;\n }\n\n this.error = {\n playlist: this.master.playlists[url],\n status: xhr.status,\n message: 'HLS playlist request error at URL: ' + url,\n responseText: xhr.responseText,\n code: xhr.status >= 500 ? 4 : 2\n };\n\n this.trigger('error');\n }\n\n // update the playlist loader's state in response to a new or\n // updated playlist.\n }, {\n key: 'haveMetadata',\n value: function haveMetadata(xhr, url) {\n var _this2 = this;\n\n // any in-flight request is now finished\n this.request = null;\n this.state = 'HAVE_METADATA';\n\n var parser = new _m3u8Parser2['default'].Parser();\n\n parser.push(xhr.responseText);\n parser.end();\n parser.manifest.uri = url;\n // m3u8-parser does not attach an attributes property to media playlists so make\n // sure that the property is attached to avoid undefined reference errors\n parser.manifest.attributes = parser.manifest.attributes || {};\n\n // merge this playlist into the master\n var update = updateMaster(this.master, parser.manifest);\n\n this.targetDuration = parser.manifest.targetDuration;\n\n if (update) {\n this.master = update;\n this.media_ = this.master.playlists[parser.manifest.uri];\n } else {\n this.trigger('playlistunchanged');\n }\n\n // refresh live playlists after a target duration passes\n if (!this.media().endList) {\n _globalWindow2['default'].clearTimeout(this.mediaUpdateTimeout);\n this.mediaUpdateTimeout = _globalWindow2['default'].setTimeout(function () {\n _this2.trigger('mediaupdatetimeout');\n }, refreshDelay(this.media(), !!update));\n }\n\n this.trigger('loadedplaylist');\n }\n\n /**\n * Abort any outstanding work and clean up.\n */\n }, {\n key: 'dispose',\n value: function dispose() {\n this.stopRequest();\n _globalWindow2['default'].clearTimeout(this.mediaUpdateTimeout);\n }\n }, {\n key: 'stopRequest',\n value: function stopRequest() {\n if (this.request) {\n var oldRequest = this.request;\n\n this.request = null;\n oldRequest.onreadystatechange = null;\n oldRequest.abort();\n }\n }\n\n /**\n * When called without any arguments, returns the currently\n * active media playlist. When called with a single argument,\n * triggers the playlist loader to asynchronously switch to the\n * specified media playlist. Calling this method while the\n * loader is in the HAVE_NOTHING causes an error to be emitted\n * but otherwise has no effect.\n *\n * @param {Object=} playlist the parsed media playlist\n * object to switch to\n * @return {Playlist} the current loaded media\n */\n }, {\n key: 'media',\n value: function media(playlist) {\n var _this3 = this;\n\n // getter\n if (!playlist) {\n return this.media_;\n }\n\n // setter\n if (this.state === 'HAVE_NOTHING') {\n throw new Error('Cannot switch media playlist from ' + this.state);\n }\n\n var startingState = this.state;\n\n // find the playlist object if the target playlist has been\n // specified by URI\n if (typeof playlist === 'string') {\n if (!this.master.playlists[playlist]) {\n throw new Error('Unknown playlist URI: ' + playlist);\n }\n playlist = this.master.playlists[playlist];\n }\n\n var mediaChange = !this.media_ || playlist.uri !== this.media_.uri;\n\n // switch to fully loaded playlists immediately\n if (this.master.playlists[playlist.uri].endList) {\n // abort outstanding playlist requests\n if (this.request) {\n this.request.onreadystatechange = null;\n this.request.abort();\n this.request = null;\n }\n this.state = 'HAVE_METADATA';\n this.media_ = playlist;\n\n // trigger media change if the active media has been updated\n if (mediaChange) {\n this.trigger('mediachanging');\n this.trigger('mediachange');\n }\n return;\n }\n\n // switching to the active playlist is a no-op\n if (!mediaChange) {\n return;\n }\n\n this.state = 'SWITCHING_MEDIA';\n\n // there is already an outstanding playlist request\n if (this.request) {\n if (playlist.resolvedUri === this.request.url) {\n // requesting to switch to the same playlist multiple times\n // has no effect after the first\n return;\n }\n this.request.onreadystatechange = null;\n this.request.abort();\n this.request = null;\n }\n\n // request the new playlist\n if (this.media_) {\n this.trigger('mediachanging');\n }\n\n this.request = this.hls_.xhr({\n uri: playlist.resolvedUri,\n withCredentials: this.withCredentials\n }, function (error, req) {\n // disposed\n if (!_this3.request) {\n return;\n }\n\n playlist.resolvedUri = _this3.resolveManifestRedirect(playlist.resolvedUri, req);\n\n if (error) {\n return _this3.playlistRequestError(_this3.request, playlist.uri, startingState);\n }\n\n _this3.haveMetadata(req, playlist.uri);\n\n // fire loadedmetadata the first time a media playlist is loaded\n if (startingState === 'HAVE_MASTER') {\n _this3.trigger('loadedmetadata');\n } else {\n _this3.trigger('mediachange');\n }\n });\n }\n\n /**\n * Checks whether xhr request was redirected and returns correct url depending\n * on `handleManifestRedirects` option\n *\n * @api private\n *\n * @param {String} url - an url being requested\n * @param {XMLHttpRequest} req - xhr request result\n *\n * @return {String}\n */\n }, {\n key: 'resolveManifestRedirect',\n value: function resolveManifestRedirect(url, req) {\n if (this.handleManifestRedirects && req.responseURL && url !== req.responseURL) {\n return req.responseURL;\n }\n\n return url;\n }\n\n /**\n * pause loading of the playlist\n */\n }, {\n key: 'pause',\n value: function pause() {\n this.stopRequest();\n _globalWindow2['default'].clearTimeout(this.mediaUpdateTimeout);\n if (this.state === 'HAVE_NOTHING') {\n // If we pause the loader before any data has been retrieved, its as if we never\n // started, so reset to an unstarted state.\n this.started = false;\n }\n // Need to restore state now that no activity is happening\n if (this.state === 'SWITCHING_MEDIA') {\n // if the loader was in the process of switching media, it should either return to\n // HAVE_MASTER or HAVE_METADATA depending on if the loader has loaded a media\n // playlist yet. This is determined by the existence of loader.media_\n if (this.media_) {\n this.state = 'HAVE_METADATA';\n } else {\n this.state = 'HAVE_MASTER';\n }\n } else if (this.state === 'HAVE_CURRENT_METADATA') {\n this.state = 'HAVE_METADATA';\n }\n }\n\n /**\n * start loading of the playlist\n */\n }, {\n key: 'load',\n value: function load(isFinalRendition) {\n var _this4 = this;\n\n _globalWindow2['default'].clearTimeout(this.mediaUpdateTimeout);\n\n var media = this.media();\n\n if (isFinalRendition) {\n var delay = media ? media.targetDuration / 2 * 1000 : 5 * 1000;\n\n this.mediaUpdateTimeout = _globalWindow2['default'].setTimeout(function () {\n return _this4.load();\n }, delay);\n return;\n }\n\n if (!this.started) {\n this.start();\n return;\n }\n\n if (media && !media.endList) {\n this.trigger('mediaupdatetimeout');\n } else {\n this.trigger('loadedplaylist');\n }\n }\n\n /**\n * start loading of the playlist\n */\n }, {\n key: 'start',\n value: function start() {\n var _this5 = this;\n\n this.started = true;\n\n // request the specified URL\n this.request = this.hls_.xhr({\n uri: this.srcUrl,\n withCredentials: this.withCredentials\n }, function (error, req) {\n // disposed\n if (!_this5.request) {\n return;\n }\n\n // clear the loader's request reference\n _this5.request = null;\n\n if (error) {\n _this5.error = {\n status: req.status,\n message: 'HLS playlist request error at URL: ' + _this5.srcUrl,\n responseText: req.responseText,\n // MEDIA_ERR_NETWORK\n code: 2\n };\n if (_this5.state === 'HAVE_NOTHING') {\n _this5.started = false;\n }\n return _this5.trigger('error');\n }\n\n var parser = new _m3u8Parser2['default'].Parser();\n\n parser.push(req.responseText);\n parser.end();\n\n _this5.state = 'HAVE_MASTER';\n\n _this5.srcUrl = _this5.resolveManifestRedirect(_this5.srcUrl, req);\n\n parser.manifest.uri = _this5.srcUrl;\n\n // loaded a master playlist\n if (parser.manifest.playlists) {\n _this5.master = parser.manifest;\n\n setupMediaPlaylists(_this5.master);\n resolveMediaGroupUris(_this5.master);\n\n _this5.trigger('loadedplaylist');\n if (!_this5.request) {\n // no media playlist was specifically selected so start\n // from the first listed one\n _this5.media(parser.manifest.playlists[0]);\n }\n return;\n }\n\n // loaded a media playlist\n // infer a master playlist if none was previously requested\n _this5.master = {\n mediaGroups: {\n 'AUDIO': {},\n 'VIDEO': {},\n 'CLOSED-CAPTIONS': {},\n 'SUBTITLES': {}\n },\n uri: _globalWindow2['default'].location.href,\n playlists: [{\n uri: _this5.srcUrl,\n resolvedUri: _this5.srcUrl,\n // m3u8-parser does not attach an attributes property to media playlists so make\n // sure that the property is attached to avoid undefined reference errors\n attributes: {}\n }]\n };\n _this5.master.playlists[_this5.srcUrl] = _this5.master.playlists[0];\n _this5.haveMetadata(req, _this5.srcUrl);\n return _this5.trigger('loadedmetadata');\n });\n }\n }]);\n\n return PlaylistLoader;\n})(_videoJs.EventTarget);\n\nexports['default'] = PlaylistLoader;","'use strict';\n\nvar ExpGolomb;\n\n/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding\n * scheme used by h264.\n */\nExpGolomb = function(workingData) {\n var\n // the number of bytes left to examine in workingData\n workingBytesAvailable = workingData.byteLength,\n\n // the current word being examined\n workingWord = 0, // :uint\n\n // the number of bits left to examine in the current word\n workingBitsAvailable = 0; // :uint;\n\n // ():uint\n this.length = function() {\n return (8 * workingBytesAvailable);\n };\n\n // ():uint\n this.bitsAvailable = function() {\n return (8 * workingBytesAvailable) + workingBitsAvailable;\n };\n\n // ():void\n this.loadWord = function() {\n var\n position = workingData.byteLength - workingBytesAvailable,\n workingBytes = new Uint8Array(4),\n availableBytes = Math.min(4, workingBytesAvailable);\n\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n\n workingBytes.set(workingData.subarray(position,\n position + availableBytes));\n workingWord = new DataView(workingBytes.buffer).getUint32(0);\n\n // track the amount of workingData that has been processed\n workingBitsAvailable = availableBytes * 8;\n workingBytesAvailable -= availableBytes;\n };\n\n // (count:int):void\n this.skipBits = function(count) {\n var skipBytes; // :int\n if (workingBitsAvailable > count) {\n workingWord <<= count;\n workingBitsAvailable -= count;\n } else {\n count -= workingBitsAvailable;\n skipBytes = Math.floor(count / 8);\n\n count -= (skipBytes * 8);\n workingBytesAvailable -= skipBytes;\n\n this.loadWord();\n\n workingWord <<= count;\n workingBitsAvailable -= count;\n }\n };\n\n // (size:int):uint\n this.readBits = function(size) {\n var\n bits = Math.min(workingBitsAvailable, size), // :uint\n valu = workingWord >>> (32 - bits); // :uint\n // if size > 31, handle error\n workingBitsAvailable -= bits;\n if (workingBitsAvailable > 0) {\n workingWord <<= bits;\n } else if (workingBytesAvailable > 0) {\n this.loadWord();\n }\n\n bits = size - bits;\n if (bits > 0) {\n return valu << bits | this.readBits(bits);\n }\n return valu;\n };\n\n // ():uint\n this.skipLeadingZeros = function() {\n var leadingZeroCount; // :uint\n for (leadingZeroCount = 0; leadingZeroCount < workingBitsAvailable; ++leadingZeroCount) {\n if ((workingWord & (0x80000000 >>> leadingZeroCount)) !== 0) {\n // the first bit of working word is 1\n workingWord <<= leadingZeroCount;\n workingBitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n }\n\n // we exhausted workingWord and still have not found a 1\n this.loadWord();\n return leadingZeroCount + this.skipLeadingZeros();\n };\n\n // ():void\n this.skipUnsignedExpGolomb = function() {\n this.skipBits(1 + this.skipLeadingZeros());\n };\n\n // ():void\n this.skipExpGolomb = function() {\n this.skipBits(1 + this.skipLeadingZeros());\n };\n\n // ():uint\n this.readUnsignedExpGolomb = function() {\n var clz = this.skipLeadingZeros(); // :uint\n return this.readBits(clz + 1) - 1;\n };\n\n // ():int\n this.readExpGolomb = function() {\n var valu = this.readUnsignedExpGolomb(); // :int\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return (1 + valu) >>> 1; // add 1 to make it even, and divide by 2\n }\n return -1 * (valu >>> 1); // divide by two then make it negative\n };\n\n // Some convenience functions\n // :Boolean\n this.readBoolean = function() {\n return this.readBits(1) === 1;\n };\n\n // ():int\n this.readUnsignedByte = function() {\n return this.readBits(8);\n };\n\n this.loadWord();\n};\n\nmodule.exports = ExpGolomb;\n","/**\n * @file flash-source-buffer.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar _muxJsLibFlv = require('mux.js/lib/flv');\n\nvar _muxJsLibFlv2 = _interopRequireDefault(_muxJsLibFlv);\n\nvar _removeCuesFromTrack = require('./remove-cues-from-track');\n\nvar _removeCuesFromTrack2 = _interopRequireDefault(_removeCuesFromTrack);\n\nvar _createTextTracksIfNecessary = require('./create-text-tracks-if-necessary');\n\nvar _createTextTracksIfNecessary2 = _interopRequireDefault(_createTextTracksIfNecessary);\n\nvar _addTextTrackData = require('./add-text-track-data');\n\nvar _flashTransmuxerWorker = require('./flash-transmuxer-worker');\n\nvar _flashTransmuxerWorker2 = _interopRequireDefault(_flashTransmuxerWorker);\n\nvar _webwackify = require('webwackify');\n\nvar _webwackify2 = _interopRequireDefault(_webwackify);\n\nvar _flashConstants = require('./flash-constants');\n\nvar _flashConstants2 = _interopRequireDefault(_flashConstants);\n\nvar resolveFlashTransmuxWorker = function resolveFlashTransmuxWorker() {\n var result = undefined;\n\n try {\n result = require.resolve('./flash-transmuxer-worker');\n } catch (e) {\n // no result\n }\n\n return result;\n};\n\n/**\n * A wrapper around the setTimeout function that uses\n * the flash constant time between ticks value.\n *\n * @param {Function} func the function callback to run\n * @private\n */\nvar scheduleTick = function scheduleTick(func) {\n // Chrome doesn't invoke requestAnimationFrame callbacks\n // in background tabs, so use setTimeout.\n _globalWindow2['default'].setTimeout(func, _flashConstants2['default'].TIME_BETWEEN_CHUNKS);\n};\n\n/**\n * Generates a random string of max length 6\n *\n * @return {String} the randomly generated string\n * @function generateRandomString\n * @private\n */\nvar generateRandomString = function generateRandomString() {\n return Math.random().toString(36).slice(2, 8);\n};\n\n/**\n * Round a number to a specified number of places much like\n * toFixed but return a number instead of a string representation.\n *\n * @param {Number} num A number\n * @param {Number} places The number of decimal places which to\n * round\n * @private\n */\nvar toDecimalPlaces = function toDecimalPlaces(num, places) {\n if (typeof places !== 'number' || places < 0) {\n places = 0;\n }\n\n var scale = Math.pow(10, places);\n\n return Math.round(num * scale) / scale;\n};\n\n/**\n * A SourceBuffer implementation for Flash rather than HTML.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource\n * @param {Object} mediaSource the flash media source\n * @class FlashSourceBuffer\n * @extends videojs.EventTarget\n */\n\nvar FlashSourceBuffer = (function (_videojs$EventTarget) {\n _inherits(FlashSourceBuffer, _videojs$EventTarget);\n\n function FlashSourceBuffer(mediaSource) {\n var _this = this;\n\n _classCallCheck(this, FlashSourceBuffer);\n\n _get(Object.getPrototypeOf(FlashSourceBuffer.prototype), 'constructor', this).call(this);\n var encodedHeader = undefined;\n\n // Start off using the globally defined value but refine\n // as we append data into flash\n this.chunkSize_ = _flashConstants2['default'].BYTES_PER_CHUNK;\n\n // byte arrays queued to be appended\n this.buffer_ = [];\n\n // the total number of queued bytes\n this.bufferSize_ = 0;\n\n // to be able to determine the correct position to seek to, we\n // need to retain information about the mapping between the\n // media timeline and PTS values\n this.basePtsOffset_ = NaN;\n\n this.mediaSource_ = mediaSource;\n\n this.audioBufferEnd_ = NaN;\n this.videoBufferEnd_ = NaN;\n\n // indicates whether the asynchronous continuation of an operation\n // is still being processed\n // see https://w3c.github.io/media-source/#widl-SourceBuffer-updating\n this.updating = false;\n this.timestampOffset_ = 0;\n\n encodedHeader = _globalWindow2['default'].btoa(String.fromCharCode.apply(null, Array.prototype.slice.call(_muxJsLibFlv2['default'].getFlvHeader())));\n\n // create function names with added randomness for the global callbacks flash will use\n // to get data from javascript into the swf. Random strings are added as a safety\n // measure for pages with multiple players since these functions will be global\n // instead of per instance. When making a call to the swf, the browser generates a\n // try catch code snippet, but just takes the function name and writes out an unquoted\n // call to that function. If the player id has any special characters, this will result\n // in an error, so safePlayerId replaces all special characters to '_'\n var safePlayerId = this.mediaSource_.player_.id().replace(/[^a-zA-Z0-9]/g, '_');\n\n this.flashEncodedHeaderName_ = 'vjs_flashEncodedHeader_' + safePlayerId + generateRandomString();\n this.flashEncodedDataName_ = 'vjs_flashEncodedData_' + safePlayerId + generateRandomString();\n\n _globalWindow2['default'][this.flashEncodedHeaderName_] = function () {\n delete _globalWindow2['default'][_this.flashEncodedHeaderName_];\n return encodedHeader;\n };\n\n this.mediaSource_.swfObj.vjs_appendChunkReady(this.flashEncodedHeaderName_);\n\n this.transmuxer_ = (0, _webwackify2['default'])(_flashTransmuxerWorker2['default'], resolveFlashTransmuxWorker());\n this.transmuxer_.postMessage({ action: 'init', options: {} });\n this.transmuxer_.onmessage = function (event) {\n if (event.data.action === 'data') {\n _this.receiveBuffer_(event.data.segment);\n }\n };\n\n this.one('updateend', function () {\n _this.mediaSource_.tech_.trigger('loadedmetadata');\n });\n\n Object.defineProperty(this, 'timestampOffset', {\n get: function get() {\n return this.timestampOffset_;\n },\n set: function set(val) {\n if (typeof val === 'number' && val >= 0) {\n this.timestampOffset_ = val;\n // We have to tell flash to expect a discontinuity\n this.mediaSource_.swfObj.vjs_discontinuity();\n // the media <-> PTS mapping must be re-established after\n // the discontinuity\n this.basePtsOffset_ = NaN;\n this.audioBufferEnd_ = NaN;\n this.videoBufferEnd_ = NaN;\n\n this.transmuxer_.postMessage({ action: 'reset' });\n }\n }\n });\n\n Object.defineProperty(this, 'buffered', {\n get: function get() {\n if (!this.mediaSource_ || !this.mediaSource_.swfObj || !('vjs_getProperty' in this.mediaSource_.swfObj)) {\n return _videoJs2['default'].createTimeRange();\n }\n\n var buffered = this.mediaSource_.swfObj.vjs_getProperty('buffered');\n\n if (buffered && buffered.length) {\n buffered[0][0] = toDecimalPlaces(buffered[0][0], 3);\n buffered[0][1] = toDecimalPlaces(buffered[0][1], 3);\n }\n return _videoJs2['default'].createTimeRanges(buffered);\n }\n });\n\n // On a seek we remove all text track data since flash has no concept\n // of a buffered-range and everything else is reset on seek\n this.mediaSource_.player_.on('seeked', function () {\n (0, _removeCuesFromTrack2['default'])(0, Infinity, _this.metadataTrack_);\n if (_this.inbandTextTracks_) {\n for (var track in _this.inbandTextTracks_) {\n (0, _removeCuesFromTrack2['default'])(0, Infinity, _this.inbandTextTracks_[track]);\n }\n }\n });\n\n var onHlsReset = this.onHlsReset_.bind(this);\n\n // hls-reset is fired by videojs.Hls on to the tech after the main SegmentLoader\n // resets its state and flushes the buffer\n this.mediaSource_.player_.tech_.on('hls-reset', onHlsReset);\n\n this.mediaSource_.player_.tech_.hls.on('dispose', function () {\n _this.transmuxer_.terminate();\n _this.mediaSource_.player_.tech_.off('hls-reset', onHlsReset);\n });\n }\n\n /**\n * Append bytes to the sourcebuffers buffer, in this case we\n * have to append it to swf object.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/appendBuffer\n * @param {Array} bytes\n */\n\n _createClass(FlashSourceBuffer, [{\n key: 'appendBuffer',\n value: function appendBuffer(bytes) {\n var error = undefined;\n\n if (this.updating) {\n error = new Error('SourceBuffer.append() cannot be called ' + 'while an update is in progress');\n error.name = 'InvalidStateError';\n error.code = 11;\n throw error;\n }\n this.updating = true;\n this.mediaSource_.readyState = 'open';\n this.trigger({ type: 'update' });\n\n this.transmuxer_.postMessage({\n action: 'push',\n data: bytes.buffer,\n byteOffset: bytes.byteOffset,\n byteLength: bytes.byteLength\n }, [bytes.buffer]);\n this.transmuxer_.postMessage({ action: 'flush' });\n }\n\n /**\n * Reset the parser and remove any data queued to be sent to the SWF.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/abort\n */\n }, {\n key: 'abort',\n value: function abort() {\n this.buffer_ = [];\n this.bufferSize_ = 0;\n this.mediaSource_.swfObj.vjs_abort();\n\n // report any outstanding updates have ended\n if (this.updating) {\n this.updating = false;\n this.trigger({ type: 'updateend' });\n }\n }\n\n /**\n * Flash cannot remove ranges already buffered in the NetStream\n * but seeking clears the buffer entirely. For most purposes,\n * having this operation act as a no-op is acceptable.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/remove\n * @param {Double} start start of the section to remove\n * @param {Double} end end of the section to remove\n */\n }, {\n key: 'remove',\n value: function remove(start, end) {\n (0, _removeCuesFromTrack2['default'])(start, end, this.metadataTrack_);\n if (this.inbandTextTracks_) {\n for (var track in this.inbandTextTracks_) {\n (0, _removeCuesFromTrack2['default'])(start, end, this.inbandTextTracks_[track]);\n }\n }\n this.trigger({ type: 'update' });\n this.trigger({ type: 'updateend' });\n }\n\n /**\n * Receive a buffer from the flv.\n *\n * @param {Object} segment\n * @private\n */\n }, {\n key: 'receiveBuffer_',\n value: function receiveBuffer_(segment) {\n var _this2 = this;\n\n // create an in-band caption track if one is present in the segment\n (0, _createTextTracksIfNecessary2['default'])(this, this.mediaSource_, segment);\n (0, _addTextTrackData.addTextTrackData)(this, segment.captions, segment.metadata);\n\n // Do this asynchronously since convertTagsToData_ can be time consuming\n scheduleTick(function () {\n var flvBytes = _this2.convertTagsToData_(segment);\n\n if (_this2.buffer_.length === 0) {\n scheduleTick(_this2.processBuffer_.bind(_this2));\n }\n\n if (flvBytes) {\n _this2.buffer_.push(flvBytes);\n _this2.bufferSize_ += flvBytes.byteLength;\n }\n });\n }\n\n /**\n * Append a portion of the current buffer to the SWF.\n *\n * @private\n */\n }, {\n key: 'processBuffer_',\n value: function processBuffer_() {\n var _this3 = this;\n\n var chunkSize = _flashConstants2['default'].BYTES_PER_CHUNK;\n\n if (!this.buffer_.length) {\n if (this.updating !== false) {\n this.updating = false;\n this.trigger({ type: 'updateend' });\n }\n // do nothing if the buffer is empty\n return;\n }\n\n // concatenate appends up to the max append size\n var chunk = this.buffer_[0].subarray(0, chunkSize);\n\n // requeue any bytes that won't make it this round\n if (chunk.byteLength < chunkSize || this.buffer_[0].byteLength === chunkSize) {\n this.buffer_.shift();\n } else {\n this.buffer_[0] = this.buffer_[0].subarray(chunkSize);\n }\n\n this.bufferSize_ -= chunk.byteLength;\n\n // base64 encode the bytes\n var binary = [];\n var length = chunk.byteLength;\n\n for (var i = 0; i < length; i++) {\n binary.push(String.fromCharCode(chunk[i]));\n }\n var b64str = _globalWindow2['default'].btoa(binary.join(''));\n\n _globalWindow2['default'][this.flashEncodedDataName_] = function () {\n // schedule another processBuffer to process any left over data or to\n // trigger updateend\n scheduleTick(_this3.processBuffer_.bind(_this3));\n delete _globalWindow2['default'][_this3.flashEncodedDataName_];\n return b64str;\n };\n\n // Notify the swf that segment data is ready to be appended\n this.mediaSource_.swfObj.vjs_appendChunkReady(this.flashEncodedDataName_);\n }\n\n /**\n * Turns an array of flv tags into a Uint8Array representing the\n * flv data. Also removes any tags that are before the current\n * time so that playback begins at or slightly after the right\n * place on a seek\n *\n * @private\n * @param {Object} segmentData object of segment data\n */\n }, {\n key: 'convertTagsToData_',\n value: function convertTagsToData_(segmentData) {\n var segmentByteLength = 0;\n var tech = this.mediaSource_.tech_;\n var videoTargetPts = 0;\n var segment = undefined;\n var videoTags = segmentData.tags.videoTags;\n var audioTags = segmentData.tags.audioTags;\n\n // Establish the media timeline to PTS translation if we don't\n // have one already\n if (isNaN(this.basePtsOffset_) && (videoTags.length || audioTags.length)) {\n // We know there is at least one video or audio tag, but since we may not have both,\n // we use pts: Infinity for the missing tag. The will force the following Math.min\n // call will to use the proper pts value since it will always be less than Infinity\n var firstVideoTag = videoTags[0] || { pts: Infinity };\n var firstAudioTag = audioTags[0] || { pts: Infinity };\n\n this.basePtsOffset_ = Math.min(firstAudioTag.pts, firstVideoTag.pts);\n }\n\n if (tech.seeking()) {\n // Do not use previously saved buffer end values while seeking since buffer\n // is cleared on all seeks\n this.videoBufferEnd_ = NaN;\n this.audioBufferEnd_ = NaN;\n }\n\n if (isNaN(this.videoBufferEnd_)) {\n if (tech.buffered().length) {\n videoTargetPts = tech.buffered().end(0) - this.timestampOffset;\n }\n\n // Trim to currentTime if seeking\n if (tech.seeking()) {\n videoTargetPts = Math.max(videoTargetPts, tech.currentTime() - this.timestampOffset);\n }\n\n // PTS values are represented in milliseconds\n videoTargetPts *= 1e3;\n videoTargetPts += this.basePtsOffset_;\n } else {\n // Add a fudge factor of 0.1 to the last video pts appended since a rendition change\n // could append an overlapping segment, in which case there is a high likelyhood\n // a tag could have a matching pts to videoBufferEnd_, which would cause\n // that tag to get appended by the tag.pts >= targetPts check below even though it\n // is a duplicate of what was previously appended\n videoTargetPts = this.videoBufferEnd_ + 0.1;\n }\n\n // filter complete GOPs with a presentation time less than the seek target/end of buffer\n var currentIndex = videoTags.length;\n\n // if the last tag is beyond videoTargetPts, then do not search the list for a GOP\n // since our videoTargetPts lies in a future segment\n if (currentIndex && videoTags[currentIndex - 1].pts >= videoTargetPts) {\n // Start by walking backwards from the end of the list until we reach a tag that\n // is equal to or less than videoTargetPts\n while (--currentIndex) {\n var currentTag = videoTags[currentIndex];\n\n if (currentTag.pts > videoTargetPts) {\n continue;\n }\n\n // if we see a keyFrame or metadata tag once we've gone below videoTargetPts,\n // exit the loop as this is the start of the GOP that we want to append\n if (currentTag.keyFrame || currentTag.metaDataTag) {\n break;\n }\n }\n\n // We need to check if there are any metadata tags that come before currentIndex\n // as those will be metadata tags associated with the GOP we are appending\n // There could be 0 to 2 metadata tags that come before the currentIndex depending\n // on what videoTargetPts is and whether the transmuxer prepended metadata tags to this\n // key frame\n while (currentIndex) {\n var nextTag = videoTags[currentIndex - 1];\n\n if (!nextTag.metaDataTag) {\n break;\n }\n\n currentIndex--;\n }\n }\n\n var filteredVideoTags = videoTags.slice(currentIndex);\n\n var audioTargetPts = undefined;\n\n if (isNaN(this.audioBufferEnd_)) {\n audioTargetPts = videoTargetPts;\n } else {\n // Add a fudge factor of 0.1 to the last video pts appended since a rendition change\n // could append an overlapping segment, in which case there is a high likelyhood\n // a tag could have a matching pts to videoBufferEnd_, which would cause\n // that tag to get appended by the tag.pts >= targetPts check below even though it\n // is a duplicate of what was previously appended\n audioTargetPts = this.audioBufferEnd_ + 0.1;\n }\n\n if (filteredVideoTags.length) {\n // If targetPts intersects a GOP and we appended the tags for the GOP that came\n // before targetPts, we want to make sure to trim audio tags at the pts\n // of the first video tag to avoid brief moments of silence\n audioTargetPts = Math.min(audioTargetPts, filteredVideoTags[0].pts);\n }\n\n // skip tags with a presentation time less than the seek target/end of buffer\n currentIndex = 0;\n\n while (currentIndex < audioTags.length) {\n if (audioTags[currentIndex].pts >= audioTargetPts) {\n break;\n }\n\n currentIndex++;\n }\n\n var filteredAudioTags = audioTags.slice(currentIndex);\n\n // update the audio and video buffer ends\n if (filteredAudioTags.length) {\n this.audioBufferEnd_ = filteredAudioTags[filteredAudioTags.length - 1].pts;\n }\n if (filteredVideoTags.length) {\n this.videoBufferEnd_ = filteredVideoTags[filteredVideoTags.length - 1].pts;\n }\n\n var tags = this.getOrderedTags_(filteredVideoTags, filteredAudioTags);\n\n if (tags.length === 0) {\n return;\n }\n\n // If we are appending data that comes before our target pts, we want to tell\n // the swf to adjust its notion of current time to account for the extra tags\n // we are appending to complete the GOP that intersects with targetPts\n if (tags[0].pts < videoTargetPts && tech.seeking()) {\n var fudgeFactor = 1 / 30;\n var currentTime = tech.currentTime();\n var diff = (videoTargetPts - tags[0].pts) / 1e3;\n var adjustedTime = currentTime - diff;\n\n if (adjustedTime < fudgeFactor) {\n adjustedTime = 0;\n }\n\n try {\n this.mediaSource_.swfObj.vjs_adjustCurrentTime(adjustedTime);\n } catch (e) {\n // no-op for backwards compatability of swf. If adjustCurrentTime fails,\n // the swf may incorrectly report currentTime and buffered ranges\n // but should not affect playback over than the time displayed on the\n // progress bar is inaccurate\n }\n }\n\n // concatenate the bytes into a single segment\n for (var i = 0; i < tags.length; i++) {\n segmentByteLength += tags[i].bytes.byteLength;\n }\n segment = new Uint8Array(segmentByteLength);\n for (var i = 0, j = 0; i < tags.length; i++) {\n segment.set(tags[i].bytes, j);\n j += tags[i].bytes.byteLength;\n }\n\n return segment;\n }\n\n /**\n * Assemble the FLV tags in decoder order.\n *\n * @private\n * @param {Array} videoTags list of video tags\n * @param {Array} audioTags list of audio tags\n */\n }, {\n key: 'getOrderedTags_',\n value: function getOrderedTags_(videoTags, audioTags) {\n var tag = undefined;\n var tags = [];\n\n while (videoTags.length || audioTags.length) {\n if (!videoTags.length) {\n // only audio tags remain\n tag = audioTags.shift();\n } else if (!audioTags.length) {\n // only video tags remain\n tag = videoTags.shift();\n } else if (audioTags[0].dts < videoTags[0].dts) {\n // audio should be decoded next\n tag = audioTags.shift();\n } else {\n // video should be decoded next\n tag = videoTags.shift();\n }\n\n tags.push(tag);\n }\n\n return tags;\n }\n }, {\n key: 'onHlsReset_',\n value: function onHlsReset_() {\n this.transmuxer_.postMessage({ action: 'resetCaptions' });\n }\n }]);\n\n return FlashSourceBuffer;\n})(_videoJs2['default'].EventTarget);\n\nexports['default'] = FlashSourceBuffer;\nmodule.exports = exports['default'];","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/**\n * @file stream.js\n */\n/**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Stream = (function () {\n function Stream() {\n _classCallCheck(this, Stream);\n\n this.listeners = {};\n }\n\n /**\n * Add a listener for a specified event type.\n *\n * @param {String} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n _createClass(Stream, [{\n key: 'on',\n value: function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n this.listeners[type].push(listener);\n }\n\n /**\n * Remove a listener for a specified event type.\n *\n * @param {String} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {Boolean} if we could turn it off or not\n */\n }, {\n key: 'off',\n value: function off(type, listener) {\n var index = undefined;\n\n if (!this.listeners[type]) {\n return false;\n }\n index = this.listeners[type].indexOf(listener);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {String} type the event name\n */\n }, {\n key: 'trigger',\n value: function trigger(type) {\n var callbacks = undefined;\n var i = undefined;\n var length = undefined;\n var args = undefined;\n\n callbacks = this.listeners[type];\n if (!callbacks) {\n return;\n }\n // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n if (arguments.length === 2) {\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n args = Array.prototype.slice.call(arguments, 1);\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n }\n\n /**\n * Destroys the stream and cleans up.\n */\n }, {\n key: 'dispose',\n value: function dispose() {\n this.listeners = {};\n }\n\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n }, {\n key: 'pipe',\n value: function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n }\n }]);\n\n return Stream;\n})();\n\nexports['default'] = Stream;\nmodule.exports = exports['default'];","/**\n * @file ad-cue-tags.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\n/**\n * Searches for an ad cue that overlaps with the given mediaTime\n */\nvar findAdCue = function findAdCue(track, mediaTime) {\n var cues = track.cues;\n\n for (var i = 0; i < cues.length; i++) {\n var cue = cues[i];\n\n if (mediaTime >= cue.adStartTime && mediaTime <= cue.adEndTime) {\n return cue;\n }\n }\n return null;\n};\n\nvar updateAdCues = function updateAdCues(media, track) {\n var offset = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2];\n\n if (!media.segments) {\n return;\n }\n\n var mediaTime = offset;\n var cue = undefined;\n\n for (var i = 0; i < media.segments.length; i++) {\n var segment = media.segments[i];\n\n if (!cue) {\n // Since the cues will span for at least the segment duration, adding a fudge\n // factor of half segment duration will prevent duplicate cues from being\n // created when timing info is not exact (e.g. cue start time initialized\n // at 10.006677, but next call mediaTime is 10.003332 )\n cue = findAdCue(track, mediaTime + segment.duration / 2);\n }\n\n if (cue) {\n if ('cueIn' in segment) {\n // Found a CUE-IN so end the cue\n cue.endTime = mediaTime;\n cue.adEndTime = mediaTime;\n mediaTime += segment.duration;\n cue = null;\n continue;\n }\n\n if (mediaTime < cue.endTime) {\n // Already processed this mediaTime for this cue\n mediaTime += segment.duration;\n continue;\n }\n\n // otherwise extend cue until a CUE-IN is found\n cue.endTime += segment.duration;\n } else {\n if ('cueOut' in segment) {\n cue = new _globalWindow2['default'].VTTCue(mediaTime, mediaTime + segment.duration, segment.cueOut);\n cue.adStartTime = mediaTime;\n // Assumes tag format to be\n // #EXT-X-CUE-OUT:30\n cue.adEndTime = mediaTime + parseFloat(segment.cueOut);\n track.addCue(cue);\n }\n\n if ('cueOutCont' in segment) {\n // Entered into the middle of an ad cue\n var adOffset = undefined;\n var adTotal = undefined;\n\n // Assumes tag formate to be\n // #EXT-X-CUE-OUT-CONT:10/30\n\n var _segment$cueOutCont$split$map = segment.cueOutCont.split('/').map(parseFloat);\n\n var _segment$cueOutCont$split$map2 = _slicedToArray(_segment$cueOutCont$split$map, 2);\n\n adOffset = _segment$cueOutCont$split$map2[0];\n adTotal = _segment$cueOutCont$split$map2[1];\n\n cue = new _globalWindow2['default'].VTTCue(mediaTime, mediaTime + segment.duration, '');\n cue.adStartTime = mediaTime - adOffset;\n cue.adEndTime = cue.adStartTime + adTotal;\n track.addCue(cue);\n }\n }\n mediaTime += segment.duration;\n }\n};\n\nexports['default'] = {\n updateAdCues: updateAdCues,\n findAdCue: findAdCue\n};\nmodule.exports = exports['default'];","import { stringToBytes, toUint8, bytesMatch, bytesToString, toHexString, padStart, bytesToNumber } from './byte-helpers.js';\nimport { getAvcCodec, getHvcCodec, getAv1Codec } from './codec-helpers.js';\nimport { parseOpusHead } from './opus-helpers.js';\n\nvar normalizePath = function normalizePath(path) {\n if (typeof path === 'string') {\n return stringToBytes(path);\n }\n\n if (typeof path === 'number') {\n return path;\n }\n\n return path;\n};\n\nvar normalizePaths = function normalizePaths(paths) {\n if (!Array.isArray(paths)) {\n return [normalizePath(paths)];\n }\n\n return paths.map(function (p) {\n return normalizePath(p);\n });\n};\n\nvar DESCRIPTORS;\nexport var parseDescriptors = function parseDescriptors(bytes) {\n bytes = toUint8(bytes);\n var results = [];\n var i = 0;\n\n while (bytes.length > i) {\n var tag = bytes[i];\n var size = 0;\n var headerSize = 0; // tag\n\n headerSize++;\n var byte = bytes[headerSize]; // first byte\n\n headerSize++;\n\n while (byte & 0x80) {\n size = (byte & 0x7F) << 7;\n byte = bytes[headerSize];\n headerSize++;\n }\n\n size += byte & 0x7F;\n\n for (var z = 0; z < DESCRIPTORS.length; z++) {\n var _DESCRIPTORS$z = DESCRIPTORS[z],\n id = _DESCRIPTORS$z.id,\n parser = _DESCRIPTORS$z.parser;\n\n if (tag === id) {\n results.push(parser(bytes.subarray(headerSize, headerSize + size)));\n break;\n }\n }\n\n i += size + headerSize;\n }\n\n return results;\n};\nDESCRIPTORS = [{\n id: 0x03,\n parser: function parser(bytes) {\n var desc = {\n tag: 0x03,\n id: bytes[0] << 8 | bytes[1],\n flags: bytes[2],\n size: 3,\n dependsOnEsId: 0,\n ocrEsId: 0,\n descriptors: [],\n url: ''\n }; // depends on es id\n\n if (desc.flags & 0x80) {\n desc.dependsOnEsId = bytes[desc.size] << 8 | bytes[desc.size + 1];\n desc.size += 2;\n } // url\n\n\n if (desc.flags & 0x40) {\n var len = bytes[desc.size];\n desc.url = bytesToString(bytes.subarray(desc.size + 1, desc.size + 1 + len));\n desc.size += len;\n } // ocr es id\n\n\n if (desc.flags & 0x20) {\n desc.ocrEsId = bytes[desc.size] << 8 | bytes[desc.size + 1];\n desc.size += 2;\n }\n\n desc.descriptors = parseDescriptors(bytes.subarray(desc.size)) || [];\n return desc;\n }\n}, {\n id: 0x04,\n parser: function parser(bytes) {\n // DecoderConfigDescriptor\n var desc = {\n tag: 0x04,\n oti: bytes[0],\n streamType: bytes[1],\n bufferSize: bytes[2] << 16 | bytes[3] << 8 | bytes[4],\n maxBitrate: bytes[5] << 24 | bytes[6] << 16 | bytes[7] << 8 | bytes[8],\n avgBitrate: bytes[9] << 24 | bytes[10] << 16 | bytes[11] << 8 | bytes[12],\n descriptors: parseDescriptors(bytes.subarray(13))\n };\n return desc;\n }\n}, {\n id: 0x05,\n parser: function parser(bytes) {\n // DecoderSpecificInfo\n return {\n tag: 0x05,\n bytes: bytes\n };\n }\n}, {\n id: 0x06,\n parser: function parser(bytes) {\n // SLConfigDescriptor\n return {\n tag: 0x06,\n bytes: bytes\n };\n }\n}];\n/**\n * find any number of boxes by name given a path to it in an iso bmff\n * such as mp4.\n *\n * @param {TypedArray} bytes\n * bytes for the iso bmff to search for boxes in\n *\n * @param {Uint8Array[]|string[]|string|Uint8Array} name\n * An array of paths or a single path representing the name\n * of boxes to search through in bytes. Paths may be\n * uint8 (character codes) or strings.\n *\n * @param {boolean} [complete=false]\n * Should we search only for complete boxes on the final path.\n * This is very useful when you do not want to get back partial boxes\n * in the case of streaming files.\n *\n * @return {Uint8Array[]}\n * An array of the end paths that we found.\n */\n\nexport var findBox = function findBox(bytes, paths, complete) {\n if (complete === void 0) {\n complete = false;\n }\n\n paths = normalizePaths(paths);\n bytes = toUint8(bytes);\n var results = [];\n\n if (!paths.length) {\n // short-circuit the search for empty paths\n return results;\n }\n\n var i = 0;\n\n while (i < bytes.length) {\n var size = (bytes[i] << 24 | bytes[i + 1] << 16 | bytes[i + 2] << 8 | bytes[i + 3]) >>> 0;\n var type = bytes.subarray(i + 4, i + 8); // invalid box format.\n\n if (size === 0) {\n break;\n }\n\n var end = i + size;\n\n if (end > bytes.length) {\n // this box is bigger than the number of bytes we have\n // and complete is set, we cannot find any more boxes.\n if (complete) {\n break;\n }\n\n end = bytes.length;\n }\n\n var data = bytes.subarray(i + 8, end);\n\n if (bytesMatch(type, paths[0])) {\n if (paths.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data);\n } else {\n // recursively search for the next box along the path\n results.push.apply(results, findBox(data, paths.slice(1), complete));\n }\n }\n\n i = end;\n } // we've finished searching all of bytes\n\n\n return results;\n};\n/**\n * Search for a single matching box by name in an iso bmff format like\n * mp4. This function is useful for finding codec boxes which\n * can be placed arbitrarily in sample descriptions depending\n * on the version of the file or file type.\n *\n * @param {TypedArray} bytes\n * bytes for the iso bmff to search for boxes in\n *\n * @param {string|Uint8Array} name\n * The name of the box to find.\n *\n * @return {Uint8Array[]}\n * a subarray of bytes representing the name boxed we found.\n */\n\nexport var findNamedBox = function findNamedBox(bytes, name) {\n name = normalizePath(name);\n\n if (!name.length) {\n // short-circuit the search for empty paths\n return bytes.subarray(bytes.length);\n }\n\n var i = 0;\n\n while (i < bytes.length) {\n if (bytesMatch(bytes.subarray(i, i + name.length), name)) {\n var size = (bytes[i - 4] << 24 | bytes[i - 3] << 16 | bytes[i - 2] << 8 | bytes[i - 1]) >>> 0;\n var end = size > 1 ? i + size : bytes.byteLength;\n return bytes.subarray(i + 4, end);\n }\n\n i++;\n } // we've finished searching all of bytes\n\n\n return bytes.subarray(bytes.length);\n};\n\nvar parseSamples = function parseSamples(data, entrySize, parseEntry) {\n if (entrySize === void 0) {\n entrySize = 4;\n }\n\n if (parseEntry === void 0) {\n parseEntry = function parseEntry(d) {\n return bytesToNumber(d);\n };\n }\n\n var entries = [];\n\n if (!data || !data.length) {\n return entries;\n }\n\n var entryCount = bytesToNumber(data.subarray(4, 8));\n\n for (var i = 8; entryCount; i += entrySize, entryCount--) {\n entries.push(parseEntry(data.subarray(i, i + entrySize)));\n }\n\n return entries;\n};\n\nexport var buildFrameTable = function buildFrameTable(stbl, timescale) {\n var keySamples = parseSamples(findBox(stbl, ['stss'])[0]);\n var chunkOffsets = parseSamples(findBox(stbl, ['stco'])[0]);\n var timeToSamples = parseSamples(findBox(stbl, ['stts'])[0], 8, function (entry) {\n return {\n sampleCount: bytesToNumber(entry.subarray(0, 4)),\n sampleDelta: bytesToNumber(entry.subarray(4, 8))\n };\n });\n var samplesToChunks = parseSamples(findBox(stbl, ['stsc'])[0], 12, function (entry) {\n return {\n firstChunk: bytesToNumber(entry.subarray(0, 4)),\n samplesPerChunk: bytesToNumber(entry.subarray(4, 8)),\n sampleDescriptionIndex: bytesToNumber(entry.subarray(8, 12))\n };\n });\n var stsz = findBox(stbl, ['stsz'])[0]; // stsz starts with a 4 byte sampleSize which we don't need\n\n var sampleSizes = parseSamples(stsz && stsz.length && stsz.subarray(4) || null);\n var frames = [];\n\n for (var chunkIndex = 0; chunkIndex < chunkOffsets.length; chunkIndex++) {\n var samplesInChunk = void 0;\n\n for (var i = 0; i < samplesToChunks.length; i++) {\n var sampleToChunk = samplesToChunks[i];\n var isThisOne = chunkIndex + 1 >= sampleToChunk.firstChunk && (i + 1 >= samplesToChunks.length || chunkIndex + 1 < samplesToChunks[i + 1].firstChunk);\n\n if (isThisOne) {\n samplesInChunk = sampleToChunk.samplesPerChunk;\n break;\n }\n }\n\n var chunkOffset = chunkOffsets[chunkIndex];\n\n for (var _i = 0; _i < samplesInChunk; _i++) {\n var frameEnd = sampleSizes[frames.length]; // if we don't have key samples every frame is a keyframe\n\n var keyframe = !keySamples.length;\n\n if (keySamples.length && keySamples.indexOf(frames.length + 1) !== -1) {\n keyframe = true;\n }\n\n var frame = {\n keyframe: keyframe,\n start: chunkOffset,\n end: chunkOffset + frameEnd\n };\n\n for (var k = 0; k < timeToSamples.length; k++) {\n var _timeToSamples$k = timeToSamples[k],\n sampleCount = _timeToSamples$k.sampleCount,\n sampleDelta = _timeToSamples$k.sampleDelta;\n\n if (frames.length <= sampleCount) {\n // ms to ns\n var lastTimestamp = frames.length ? frames[frames.length - 1].timestamp : 0;\n frame.timestamp = lastTimestamp + sampleDelta / timescale * 1000;\n frame.duration = sampleDelta;\n break;\n }\n }\n\n frames.push(frame);\n chunkOffset += frameEnd;\n }\n }\n\n return frames;\n};\nexport var addSampleDescription = function addSampleDescription(track, bytes) {\n var codec = bytesToString(bytes.subarray(0, 4));\n\n if (track.type === 'video') {\n track.info = track.info || {};\n track.info.width = bytes[28] << 8 | bytes[29];\n track.info.height = bytes[30] << 8 | bytes[31];\n } else if (track.type === 'audio') {\n track.info = track.info || {};\n track.info.channels = bytes[20] << 8 | bytes[21];\n track.info.bitDepth = bytes[22] << 8 | bytes[23];\n track.info.sampleRate = bytes[28] << 8 | bytes[29];\n }\n\n if (codec === 'avc1') {\n var avcC = findNamedBox(bytes, 'avcC'); // AVCDecoderConfigurationRecord\n\n codec += \".\" + getAvcCodec(avcC);\n track.info.avcC = avcC; // TODO: do we need to parse all this?\n\n /* {\n configurationVersion: avcC[0],\n profile: avcC[1],\n profileCompatibility: avcC[2],\n level: avcC[3],\n lengthSizeMinusOne: avcC[4] & 0x3\n };\n let spsNalUnitCount = avcC[5] & 0x1F;\n const spsNalUnits = track.info.avc.spsNalUnits = [];\n // past spsNalUnitCount\n let offset = 6;\n while (spsNalUnitCount--) {\n const nalLen = avcC[offset] << 8 | avcC[offset + 1];\n spsNalUnits.push(avcC.subarray(offset + 2, offset + 2 + nalLen));\n offset += nalLen + 2;\n }\n let ppsNalUnitCount = avcC[offset];\n const ppsNalUnits = track.info.avc.ppsNalUnits = [];\n // past ppsNalUnitCount\n offset += 1;\n while (ppsNalUnitCount--) {\n const nalLen = avcC[offset] << 8 | avcC[offset + 1];\n ppsNalUnits.push(avcC.subarray(offset + 2, offset + 2 + nalLen));\n offset += nalLen + 2;\n }*/\n // HEVCDecoderConfigurationRecord\n } else if (codec === 'hvc1' || codec === 'hev1') {\n codec += \".\" + getHvcCodec(findNamedBox(bytes, 'hvcC'));\n } else if (codec === 'mp4a' || codec === 'mp4v') {\n var esds = findNamedBox(bytes, 'esds');\n var esDescriptor = parseDescriptors(esds.subarray(4))[0];\n var decoderConfig = esDescriptor && esDescriptor.descriptors.filter(function (_ref) {\n var tag = _ref.tag;\n return tag === 0x04;\n })[0];\n\n if (decoderConfig) {\n // most codecs do not have a further '.'\n // such as 0xa5 for ac-3 and 0xa6 for e-ac-3\n codec += '.' + toHexString(decoderConfig.oti);\n\n if (decoderConfig.oti === 0x40) {\n codec += '.' + (decoderConfig.descriptors[0].bytes[0] >> 3).toString();\n } else if (decoderConfig.oti === 0x20) {\n codec += '.' + decoderConfig.descriptors[0].bytes[4].toString();\n } else if (decoderConfig.oti === 0xdd) {\n codec = 'vorbis';\n }\n } else if (track.type === 'audio') {\n codec += '.40.2';\n } else {\n codec += '.20.9';\n }\n } else if (codec === 'av01') {\n // AV1DecoderConfigurationRecord\n codec += \".\" + getAv1Codec(findNamedBox(bytes, 'av1C'));\n } else if (codec === 'vp09') {\n // VPCodecConfigurationRecord\n var vpcC = findNamedBox(bytes, 'vpcC'); // https://www.webmproject.org/vp9/mp4/\n\n var profile = vpcC[0];\n var level = vpcC[1];\n var bitDepth = vpcC[2] >> 4;\n var chromaSubsampling = (vpcC[2] & 0x0F) >> 1;\n var videoFullRangeFlag = (vpcC[2] & 0x0F) >> 3;\n var colourPrimaries = vpcC[3];\n var transferCharacteristics = vpcC[4];\n var matrixCoefficients = vpcC[5];\n codec += \".\" + padStart(profile, 2, '0');\n codec += \".\" + padStart(level, 2, '0');\n codec += \".\" + padStart(bitDepth, 2, '0');\n codec += \".\" + padStart(chromaSubsampling, 2, '0');\n codec += \".\" + padStart(colourPrimaries, 2, '0');\n codec += \".\" + padStart(transferCharacteristics, 2, '0');\n codec += \".\" + padStart(matrixCoefficients, 2, '0');\n codec += \".\" + padStart(videoFullRangeFlag, 2, '0');\n } else if (codec === 'theo') {\n codec = 'theora';\n } else if (codec === 'spex') {\n codec = 'speex';\n } else if (codec === '.mp3') {\n codec = 'mp4a.40.34';\n } else if (codec === 'msVo') {\n codec = 'vorbis';\n } else if (codec === 'Opus') {\n codec = 'opus';\n var dOps = findNamedBox(bytes, 'dOps');\n track.info.opus = parseOpusHead(dOps); // TODO: should this go into the webm code??\n // Firefox requires a codecDelay for opus playback\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1276238\n\n track.info.codecDelay = 6500000;\n } else {\n codec = codec.toLowerCase();\n }\n /* eslint-enable */\n // flac, ac-3, ec-3, opus\n\n\n track.codec = codec;\n};\nexport var parseTracks = function parseTracks(bytes, frameTable) {\n if (frameTable === void 0) {\n frameTable = true;\n }\n\n bytes = toUint8(bytes);\n var traks = findBox(bytes, ['moov', 'trak'], true);\n var tracks = [];\n traks.forEach(function (trak) {\n var track = {\n bytes: trak\n };\n var mdia = findBox(trak, ['mdia'])[0];\n var hdlr = findBox(mdia, ['hdlr'])[0];\n var trakType = bytesToString(hdlr.subarray(8, 12));\n\n if (trakType === 'soun') {\n track.type = 'audio';\n } else if (trakType === 'vide') {\n track.type = 'video';\n } else {\n track.type = trakType;\n }\n\n var tkhd = findBox(trak, ['tkhd'])[0];\n\n if (tkhd) {\n var view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n var tkhdVersion = view.getUint8(0);\n track.number = tkhdVersion === 0 ? view.getUint32(12) : view.getUint32(20);\n }\n\n var mdhd = findBox(mdia, ['mdhd'])[0];\n\n if (mdhd) {\n // mdhd is a FullBox, meaning it will have its own version as the first byte\n var version = mdhd[0];\n var index = version === 0 ? 12 : 20;\n track.timescale = (mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]) >>> 0;\n }\n\n var stbl = findBox(mdia, ['minf', 'stbl'])[0];\n var stsd = findBox(stbl, ['stsd'])[0];\n var descriptionCount = bytesToNumber(stsd.subarray(4, 8));\n var offset = 8; // add codec and codec info\n\n while (descriptionCount--) {\n var len = bytesToNumber(stsd.subarray(offset, offset + 4));\n var sampleDescriptor = stsd.subarray(offset + 4, offset + 4 + len);\n addSampleDescription(track, sampleDescriptor);\n offset += 4 + len;\n }\n\n if (frameTable) {\n track.frameTable = buildFrameTable(stbl, track.timescale);\n } // codec has no sub parameters\n\n\n tracks.push(track);\n });\n return tracks;\n};\nexport var parseMediaInfo = function parseMediaInfo(bytes) {\n var mvhd = findBox(bytes, ['moov', 'mvhd'], true)[0];\n\n if (!mvhd || !mvhd.length) {\n return;\n }\n\n var info = {}; // ms to ns\n // mvhd v1 has 8 byte duration and other fields too\n\n if (mvhd[0] === 1) {\n info.timestampScale = bytesToNumber(mvhd.subarray(20, 24));\n info.duration = bytesToNumber(mvhd.subarray(24, 32));\n } else {\n info.timestampScale = bytesToNumber(mvhd.subarray(12, 16));\n info.duration = bytesToNumber(mvhd.subarray(16, 20));\n }\n\n info.bytes = mvhd;\n return info;\n};","export var OPUS_HEAD = new Uint8Array([// O, p, u, s\n0x4f, 0x70, 0x75, 0x73, // H, e, a, d\n0x48, 0x65, 0x61, 0x64]); // https://wiki.xiph.org/OggOpus\n// https://vfrmaniac.fushizen.eu/contents/opus_in_isobmff.html\n// https://opus-codec.org/docs/opusfile_api-0.7/structOpusHead.html\n\nexport var parseOpusHead = function parseOpusHead(bytes) {\n var view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n var version = view.getUint8(0); // version 0, from mp4, does not use littleEndian.\n\n var littleEndian = version !== 0;\n var config = {\n version: version,\n channels: view.getUint8(1),\n preSkip: view.getUint16(2, littleEndian),\n sampleRate: view.getUint32(4, littleEndian),\n outputGain: view.getUint16(8, littleEndian),\n channelMappingFamily: view.getUint8(10)\n };\n\n if (config.channelMappingFamily > 0 && bytes.length > 10) {\n config.streamCount = view.getUint8(11);\n config.twoChannelStreamCount = view.getUint8(12);\n config.channelMapping = [];\n\n for (var c = 0; c < config.channels; c++) {\n config.channelMapping.push(view.getUint8(13 + c));\n }\n }\n\n return config;\n};\nexport var setOpusHead = function setOpusHead(config) {\n var size = config.channelMappingFamily <= 0 ? 11 : 12 + config.channels;\n var view = new DataView(new ArrayBuffer(size));\n var littleEndian = config.version !== 0;\n view.setUint8(0, config.version);\n view.setUint8(1, config.channels);\n view.setUint16(2, config.preSkip, littleEndian);\n view.setUint32(4, config.sampleRate, littleEndian);\n view.setUint16(8, config.outputGain, littleEndian);\n view.setUint8(10, config.channelMappingFamily);\n\n if (config.channelMappingFamily > 0) {\n view.setUint8(11, config.streamCount);\n config.channelMapping.foreach(function (cm, i) {\n view.setUint8(12 + i, cm);\n });\n }\n\n return new Uint8Array(view.buffer);\n};","import { toUint8, bytesToNumber, bytesMatch, bytesToString, numberToBytes, padStart } from './byte-helpers';\nimport { getAvcCodec, getHvcCodec, getAv1Codec } from './codec-helpers.js'; // relevant specs for this parser:\n// https://matroska-org.github.io/libebml/specs.html\n// https://www.matroska.org/technical/elements.html\n// https://www.webmproject.org/docs/container/\n\nexport var EBML_TAGS = {\n EBML: toUint8([0x1A, 0x45, 0xDF, 0xA3]),\n DocType: toUint8([0x42, 0x82]),\n Segment: toUint8([0x18, 0x53, 0x80, 0x67]),\n SegmentInfo: toUint8([0x15, 0x49, 0xA9, 0x66]),\n Tracks: toUint8([0x16, 0x54, 0xAE, 0x6B]),\n Track: toUint8([0xAE]),\n TrackNumber: toUint8([0xd7]),\n DefaultDuration: toUint8([0x23, 0xe3, 0x83]),\n TrackEntry: toUint8([0xAE]),\n TrackType: toUint8([0x83]),\n FlagDefault: toUint8([0x88]),\n CodecID: toUint8([0x86]),\n CodecPrivate: toUint8([0x63, 0xA2]),\n VideoTrack: toUint8([0xe0]),\n AudioTrack: toUint8([0xe1]),\n // Not used yet, but will be used for live webm/mkv\n // see https://www.matroska.org/technical/basics.html#block-structure\n // see https://www.matroska.org/technical/basics.html#simpleblock-structure\n Cluster: toUint8([0x1F, 0x43, 0xB6, 0x75]),\n Timestamp: toUint8([0xE7]),\n TimestampScale: toUint8([0x2A, 0xD7, 0xB1]),\n BlockGroup: toUint8([0xA0]),\n BlockDuration: toUint8([0x9B]),\n Block: toUint8([0xA1]),\n SimpleBlock: toUint8([0xA3])\n};\n/**\n * This is a simple table to determine the length\n * of things in ebml. The length is one based (starts at 1,\n * rather than zero) and for every zero bit before a one bit\n * we add one to length. We also need this table because in some\n * case we have to xor all the length bits from another value.\n */\n\nvar LENGTH_TABLE = [128, 64, 32, 16, 8, 4, 2, 1];\n\nvar getLength = function getLength(byte) {\n var len = 1;\n\n for (var i = 0; i < LENGTH_TABLE.length; i++) {\n if (byte & LENGTH_TABLE[i]) {\n break;\n }\n\n len++;\n }\n\n return len;\n}; // length in ebml is stored in the first 4 to 8 bits\n// of the first byte. 4 for the id length and 8 for the\n// data size length. Length is measured by converting the number to binary\n// then 1 + the number of zeros before a 1 is encountered starting\n// from the left.\n\n\nvar getvint = function getvint(bytes, offset, removeLength, signed) {\n if (removeLength === void 0) {\n removeLength = true;\n }\n\n if (signed === void 0) {\n signed = false;\n }\n\n var length = getLength(bytes[offset]);\n var valueBytes = bytes.subarray(offset, offset + length); // NOTE that we do **not** subarray here because we need to copy these bytes\n // as they will be modified below to remove the dataSizeLen bits and we do not\n // want to modify the original data. normally we could just call slice on\n // uint8array but ie 11 does not support that...\n\n if (removeLength) {\n valueBytes = Array.prototype.slice.call(bytes, offset, offset + length);\n valueBytes[0] ^= LENGTH_TABLE[length - 1];\n }\n\n return {\n length: length,\n value: bytesToNumber(valueBytes, {\n signed: signed\n }),\n bytes: valueBytes\n };\n};\n\nvar normalizePath = function normalizePath(path) {\n if (typeof path === 'string') {\n return path.match(/.{1,2}/g).map(function (p) {\n return normalizePath(p);\n });\n }\n\n if (typeof path === 'number') {\n return numberToBytes(path);\n }\n\n return path;\n};\n\nvar normalizePaths = function normalizePaths(paths) {\n if (!Array.isArray(paths)) {\n return [normalizePath(paths)];\n }\n\n return paths.map(function (p) {\n return normalizePath(p);\n });\n};\n\nvar getInfinityDataSize = function getInfinityDataSize(id, bytes, offset) {\n if (offset >= bytes.length) {\n return bytes.length;\n }\n\n var innerid = getvint(bytes, offset, false);\n\n if (bytesMatch(id.bytes, innerid.bytes)) {\n return offset;\n }\n\n var dataHeader = getvint(bytes, offset + innerid.length);\n return getInfinityDataSize(id, bytes, offset + dataHeader.length + dataHeader.value + innerid.length);\n};\n/**\n * Notes on the EBLM format.\n *\n * EBLM uses \"vints\" tags. Every vint tag contains\n * two parts\n *\n * 1. The length from the first byte. You get this by\n * converting the byte to binary and counting the zeros\n * before a 1. Then you add 1 to that. Examples\n * 00011111 = length 4 because there are 3 zeros before a 1.\n * 00100000 = length 3 because there are 2 zeros before a 1.\n * 00000011 = length 7 because there are 6 zeros before a 1.\n *\n * 2. The bits used for length are removed from the first byte\n * Then all the bytes are merged into a value. NOTE: this\n * is not the case for id ebml tags as there id includes\n * length bits.\n *\n */\n\n\nexport var findEbml = function findEbml(bytes, paths) {\n paths = normalizePaths(paths);\n bytes = toUint8(bytes);\n var results = [];\n\n if (!paths.length) {\n return results;\n }\n\n var i = 0;\n\n while (i < bytes.length) {\n var id = getvint(bytes, i, false);\n var dataHeader = getvint(bytes, i + id.length);\n var dataStart = i + id.length + dataHeader.length; // dataSize is unknown or this is a live stream\n\n if (dataHeader.value === 0x7f) {\n dataHeader.value = getInfinityDataSize(id, bytes, dataStart);\n\n if (dataHeader.value !== bytes.length) {\n dataHeader.value -= dataStart;\n }\n }\n\n var dataEnd = dataStart + dataHeader.value > bytes.length ? bytes.length : dataStart + dataHeader.value;\n var data = bytes.subarray(dataStart, dataEnd);\n\n if (bytesMatch(paths[0], id.bytes)) {\n if (paths.length === 1) {\n // this is the end of the paths and we've found the tag we were\n // looking for\n results.push(data);\n } else {\n // recursively search for the next tag inside of the data\n // of this one\n results = results.concat(findEbml(data, paths.slice(1)));\n }\n }\n\n var totalLength = id.length + dataHeader.length + data.length; // move past this tag entirely, we are not looking for it\n\n i += totalLength;\n }\n\n return results;\n}; // see https://www.matroska.org/technical/basics.html#block-structure\n\nexport var decodeBlock = function decodeBlock(block, type, timestampScale, clusterTimestamp) {\n var duration;\n\n if (type === 'group') {\n duration = findEbml(block, [EBML_TAGS.BlockDuration])[0];\n\n if (duration) {\n duration = bytesToNumber(duration);\n duration = 1 / timestampScale * duration * timestampScale / 1000;\n }\n\n block = findEbml(block, [EBML_TAGS.Block])[0];\n type = 'block'; // treat data as a block after this point\n }\n\n var dv = new DataView(block.buffer, block.byteOffset, block.byteLength);\n var trackNumber = getvint(block, 0);\n var timestamp = dv.getInt16(trackNumber.length, false);\n var flags = block[trackNumber.length + 2];\n var data = block.subarray(trackNumber.length + 3); // pts/dts in seconds\n\n var ptsdts = 1 / timestampScale * (clusterTimestamp + timestamp) * timestampScale / 1000; // return the frame\n\n var parsed = {\n duration: duration,\n trackNumber: trackNumber.value,\n keyframe: type === 'simple' && flags >> 7 === 1,\n invisible: (flags & 0x08) >> 3 === 1,\n lacing: (flags & 0x06) >> 1,\n discardable: type === 'simple' && (flags & 0x01) === 1,\n frames: [],\n pts: ptsdts,\n dts: ptsdts,\n timestamp: timestamp\n };\n\n if (!parsed.lacing) {\n parsed.frames.push(data);\n return parsed;\n }\n\n var numberOfFrames = data[0] + 1;\n var frameSizes = [];\n var offset = 1; // Fixed\n\n if (parsed.lacing === 2) {\n var sizeOfFrame = (data.length - offset) / numberOfFrames;\n\n for (var i = 0; i < numberOfFrames; i++) {\n frameSizes.push(sizeOfFrame);\n }\n } // xiph\n\n\n if (parsed.lacing === 1) {\n for (var _i = 0; _i < numberOfFrames - 1; _i++) {\n var size = 0;\n\n do {\n size += data[offset];\n offset++;\n } while (data[offset - 1] === 0xFF);\n\n frameSizes.push(size);\n }\n } // ebml\n\n\n if (parsed.lacing === 3) {\n // first vint is unsinged\n // after that vints are singed and\n // based on a compounding size\n var _size = 0;\n\n for (var _i2 = 0; _i2 < numberOfFrames - 1; _i2++) {\n var vint = _i2 === 0 ? getvint(data, offset) : getvint(data, offset, true, true);\n _size += vint.value;\n frameSizes.push(_size);\n offset += vint.length;\n }\n }\n\n frameSizes.forEach(function (size) {\n parsed.frames.push(data.subarray(offset, offset + size));\n offset += size;\n });\n return parsed;\n}; // VP9 Codec Feature Metadata (CodecPrivate)\n// https://www.webmproject.org/docs/container/\n\nvar parseVp9Private = function parseVp9Private(bytes) {\n var i = 0;\n var params = {};\n\n while (i < bytes.length) {\n var id = bytes[i] & 0x7f;\n var len = bytes[i + 1];\n var val = void 0;\n\n if (len === 1) {\n val = bytes[i + 2];\n } else {\n val = bytes.subarray(i + 2, i + 2 + len);\n }\n\n if (id === 1) {\n params.profile = val;\n } else if (id === 2) {\n params.level = val;\n } else if (id === 3) {\n params.bitDepth = val;\n } else if (id === 4) {\n params.chromaSubsampling = val;\n } else {\n params[id] = val;\n }\n\n i += 2 + len;\n }\n\n return params;\n};\n\nexport var parseTracks = function parseTracks(bytes) {\n bytes = toUint8(bytes);\n var decodedTracks = [];\n var tracks = findEbml(bytes, [EBML_TAGS.Segment, EBML_TAGS.Tracks, EBML_TAGS.Track]);\n\n if (!tracks.length) {\n tracks = findEbml(bytes, [EBML_TAGS.Tracks, EBML_TAGS.Track]);\n }\n\n if (!tracks.length) {\n tracks = findEbml(bytes, [EBML_TAGS.Track]);\n }\n\n if (!tracks.length) {\n return decodedTracks;\n }\n\n tracks.forEach(function (track) {\n var trackType = findEbml(track, EBML_TAGS.TrackType)[0];\n\n if (!trackType || !trackType.length) {\n return;\n } // 1 is video, 2 is audio, 17 is subtitle\n // other values are unimportant in this context\n\n\n if (trackType[0] === 1) {\n trackType = 'video';\n } else if (trackType[0] === 2) {\n trackType = 'audio';\n } else if (trackType[0] === 17) {\n trackType = 'subtitle';\n } else {\n return;\n } // todo parse language\n\n\n var decodedTrack = {\n rawCodec: bytesToString(findEbml(track, [EBML_TAGS.CodecID])[0]),\n type: trackType,\n codecPrivate: findEbml(track, [EBML_TAGS.CodecPrivate])[0],\n number: bytesToNumber(findEbml(track, [EBML_TAGS.TrackNumber])[0]),\n defaultDuration: bytesToNumber(findEbml(track, [EBML_TAGS.DefaultDuration])[0]),\n default: findEbml(track, [EBML_TAGS.FlagDefault])[0],\n rawData: track\n };\n var codec = '';\n\n if (/V_MPEG4\\/ISO\\/AVC/.test(decodedTrack.rawCodec)) {\n codec = \"avc1.\" + getAvcCodec(decodedTrack.codecPrivate);\n } else if (/V_MPEGH\\/ISO\\/HEVC/.test(decodedTrack.rawCodec)) {\n codec = \"hev1.\" + getHvcCodec(decodedTrack.codecPrivate);\n } else if (/V_MPEG4\\/ISO\\/ASP/.test(decodedTrack.rawCodec)) {\n if (decodedTrack.codecPrivate) {\n codec = 'mp4v.20.' + decodedTrack.codecPrivate[4].toString();\n } else {\n codec = 'mp4v.20.9';\n }\n } else if (/^V_THEORA/.test(decodedTrack.rawCodec)) {\n codec = 'theora';\n } else if (/^V_VP8/.test(decodedTrack.rawCodec)) {\n codec = 'vp8';\n } else if (/^V_VP9/.test(decodedTrack.rawCodec)) {\n if (decodedTrack.codecPrivate) {\n var _parseVp9Private = parseVp9Private(decodedTrack.codecPrivate),\n profile = _parseVp9Private.profile,\n level = _parseVp9Private.level,\n bitDepth = _parseVp9Private.bitDepth,\n chromaSubsampling = _parseVp9Private.chromaSubsampling;\n\n codec = 'vp09.';\n codec += padStart(profile, 2, '0') + \".\";\n codec += padStart(level, 2, '0') + \".\";\n codec += padStart(bitDepth, 2, '0') + \".\";\n codec += \"\" + padStart(chromaSubsampling, 2, '0'); // Video -> Colour -> Ebml name\n\n var matrixCoefficients = findEbml(track, [0xE0, [0x55, 0xB0], [0x55, 0xB1]])[0] || [];\n var videoFullRangeFlag = findEbml(track, [0xE0, [0x55, 0xB0], [0x55, 0xB9]])[0] || [];\n var transferCharacteristics = findEbml(track, [0xE0, [0x55, 0xB0], [0x55, 0xBA]])[0] || [];\n var colourPrimaries = findEbml(track, [0xE0, [0x55, 0xB0], [0x55, 0xBB]])[0] || []; // if we find any optional codec parameter specify them all.\n\n if (matrixCoefficients.length || videoFullRangeFlag.length || transferCharacteristics.length || colourPrimaries.length) {\n codec += \".\" + padStart(colourPrimaries[0], 2, '0');\n codec += \".\" + padStart(transferCharacteristics[0], 2, '0');\n codec += \".\" + padStart(matrixCoefficients[0], 2, '0');\n codec += \".\" + padStart(videoFullRangeFlag[0], 2, '0');\n }\n } else {\n codec = 'vp9';\n }\n } else if (/^V_AV1/.test(decodedTrack.rawCodec)) {\n codec = \"av01.\" + getAv1Codec(decodedTrack.codecPrivate);\n } else if (/A_ALAC/.test(decodedTrack.rawCodec)) {\n codec = 'alac';\n } else if (/A_MPEG\\/L2/.test(decodedTrack.rawCodec)) {\n codec = 'mp2';\n } else if (/A_MPEG\\/L3/.test(decodedTrack.rawCodec)) {\n codec = 'mp3';\n } else if (/^A_AAC/.test(decodedTrack.rawCodec)) {\n if (decodedTrack.codecPrivate) {\n codec = 'mp4a.40.' + (decodedTrack.codecPrivate[0] >>> 3).toString();\n } else {\n codec = 'mp4a.40.2';\n }\n } else if (/^A_AC3/.test(decodedTrack.rawCodec)) {\n codec = 'ac-3';\n } else if (/^A_PCM/.test(decodedTrack.rawCodec)) {\n codec = 'pcm';\n } else if (/^A_MS\\/ACM/.test(decodedTrack.rawCodec)) {\n codec = 'speex';\n } else if (/^A_EAC3/.test(decodedTrack.rawCodec)) {\n codec = 'ec-3';\n } else if (/^A_VORBIS/.test(decodedTrack.rawCodec)) {\n codec = 'vorbis';\n } else if (/^A_FLAC/.test(decodedTrack.rawCodec)) {\n codec = 'flac';\n } else if (/^A_OPUS/.test(decodedTrack.rawCodec)) {\n codec = 'opus';\n }\n\n decodedTrack.codec = codec;\n decodedTracks.push(decodedTrack);\n });\n return decodedTracks.sort(function (a, b) {\n return a.number - b.number;\n });\n};\nexport var parseData = function parseData(data, tracks) {\n var allBlocks = [];\n var segment = findEbml(data, [EBML_TAGS.Segment])[0];\n var timestampScale = findEbml(segment, [EBML_TAGS.SegmentInfo, EBML_TAGS.TimestampScale])[0]; // in nanoseconds, defaults to 1ms\n\n if (timestampScale && timestampScale.length) {\n timestampScale = bytesToNumber(timestampScale);\n } else {\n timestampScale = 1000000;\n }\n\n var clusters = findEbml(segment, [EBML_TAGS.Cluster]);\n\n if (!tracks) {\n tracks = parseTracks(segment);\n }\n\n clusters.forEach(function (cluster, ci) {\n var simpleBlocks = findEbml(cluster, [EBML_TAGS.SimpleBlock]).map(function (b) {\n return {\n type: 'simple',\n data: b\n };\n });\n var blockGroups = findEbml(cluster, [EBML_TAGS.BlockGroup]).map(function (b) {\n return {\n type: 'group',\n data: b\n };\n });\n var timestamp = findEbml(cluster, [EBML_TAGS.Timestamp])[0] || 0;\n\n if (timestamp && timestamp.length) {\n timestamp = bytesToNumber(timestamp);\n } // get all blocks then sort them into the correct order\n\n\n var blocks = simpleBlocks.concat(blockGroups).sort(function (a, b) {\n return a.data.byteOffset - b.data.byteOffset;\n });\n blocks.forEach(function (block, bi) {\n var decoded = decodeBlock(block.data, block.type, timestampScale, timestamp);\n allBlocks.push(decoded);\n });\n });\n return {\n tracks: tracks,\n blocks: allBlocks\n };\n};","import { bytesMatch, toUint8 } from './byte-helpers.js';\nexport var NAL_TYPE_ONE = toUint8([0x00, 0x00, 0x00, 0x01]);\nexport var NAL_TYPE_TWO = toUint8([0x00, 0x00, 0x01]);\nexport var EMULATION_PREVENTION = toUint8([0x00, 0x00, 0x03]);\n/**\n * Expunge any \"Emulation Prevention\" bytes from a \"Raw Byte\n * Sequence Payload\"\n *\n * @param data {Uint8Array} the bytes of a RBSP from a NAL\n * unit\n * @return {Uint8Array} the RBSP without any Emulation\n * Prevention Bytes\n */\n\nexport var discardEmulationPreventionBytes = function discardEmulationPreventionBytes(bytes) {\n var positions = [];\n var i = 1; // Find all `Emulation Prevention Bytes`\n\n while (i < bytes.length - 2) {\n if (bytesMatch(bytes.subarray(i, i + 3), EMULATION_PREVENTION)) {\n positions.push(i + 2);\n i++;\n }\n\n i++;\n } // If no Emulation Prevention Bytes were found just return the original\n // array\n\n\n if (positions.length === 0) {\n return bytes;\n } // Create a new array to hold the NAL unit data\n\n\n var newLength = bytes.length - positions.length;\n var newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === positions[0]) {\n // Skip this byte\n sourceIndex++; // Remove this position index\n\n positions.shift();\n }\n\n newData[i] = bytes[sourceIndex];\n }\n\n return newData;\n};\nexport var findNal = function findNal(bytes, dataType, types, nalLimit) {\n if (nalLimit === void 0) {\n nalLimit = Infinity;\n }\n\n bytes = toUint8(bytes);\n types = [].concat(types);\n var i = 0;\n var nalStart;\n var nalsFound = 0; // keep searching until:\n // we reach the end of bytes\n // we reach the maximum number of nals they want to seach\n // NOTE: that we disregard nalLimit when we have found the start\n // of the nal we want so that we can find the end of the nal we want.\n\n while (i < bytes.length && (nalsFound < nalLimit || nalStart)) {\n var nalOffset = void 0;\n\n if (bytesMatch(bytes.subarray(i), NAL_TYPE_ONE)) {\n nalOffset = 4;\n } else if (bytesMatch(bytes.subarray(i), NAL_TYPE_TWO)) {\n nalOffset = 3;\n } // we are unsynced,\n // find the next nal unit\n\n\n if (!nalOffset) {\n i++;\n continue;\n }\n\n nalsFound++;\n\n if (nalStart) {\n return discardEmulationPreventionBytes(bytes.subarray(nalStart, i));\n }\n\n var nalType = void 0;\n\n if (dataType === 'h264') {\n nalType = bytes[i + nalOffset] & 0x1f;\n } else if (dataType === 'h265') {\n nalType = bytes[i + nalOffset] >> 1 & 0x3f;\n }\n\n if (types.indexOf(nalType) !== -1) {\n nalStart = i + nalOffset;\n } // nal header is 1 length for h264, and 2 for h265\n\n\n i += nalOffset + (dataType === 'h264' ? 1 : 2);\n }\n\n return bytes.subarray(0, 0);\n};\nexport var findH264Nal = function findH264Nal(bytes, type, nalLimit) {\n return findNal(bytes, 'h264', type, nalLimit);\n};\nexport var findH265Nal = function findH265Nal(bytes, type, nalLimit) {\n return findNal(bytes, 'h265', type, nalLimit);\n};","import { toUint8, bytesMatch } from './byte-helpers.js';\nimport { findBox } from './mp4-helpers.js';\nimport { findEbml, EBML_TAGS } from './ebml-helpers.js';\nimport { getId3Offset } from './id3-helpers.js';\nimport { findH264Nal, findH265Nal } from './nal-helpers.js';\nvar CONSTANTS = {\n // \"webm\" string literal in hex\n 'webm': toUint8([0x77, 0x65, 0x62, 0x6d]),\n // \"matroska\" string literal in hex\n 'matroska': toUint8([0x6d, 0x61, 0x74, 0x72, 0x6f, 0x73, 0x6b, 0x61]),\n // \"fLaC\" string literal in hex\n 'flac': toUint8([0x66, 0x4c, 0x61, 0x43]),\n // \"OggS\" string literal in hex\n 'ogg': toUint8([0x4f, 0x67, 0x67, 0x53]),\n // ac-3 sync byte, also works for ec-3 as that is simply a codec\n // of ac-3\n 'ac3': toUint8([0x0b, 0x77]),\n // \"RIFF\" string literal in hex used for wav and avi\n 'riff': toUint8([0x52, 0x49, 0x46, 0x46]),\n // \"AVI\" string literal in hex\n 'avi': toUint8([0x41, 0x56, 0x49]),\n // \"WAVE\" string literal in hex\n 'wav': toUint8([0x57, 0x41, 0x56, 0x45]),\n // \"ftyp3g\" string literal in hex\n '3gp': toUint8([0x66, 0x74, 0x79, 0x70, 0x33, 0x67]),\n // \"ftyp\" string literal in hex\n 'mp4': toUint8([0x66, 0x74, 0x79, 0x70]),\n // \"styp\" string literal in hex\n 'fmp4': toUint8([0x73, 0x74, 0x79, 0x70]),\n // \"ftypqt\" string literal in hex\n 'mov': toUint8([0x66, 0x74, 0x79, 0x70, 0x71, 0x74]),\n // moov string literal in hex\n 'moov': toUint8([0x6D, 0x6F, 0x6F, 0x76]),\n // moof string literal in hex\n 'moof': toUint8([0x6D, 0x6F, 0x6F, 0x66])\n};\nvar _isLikely = {\n aac: function aac(bytes) {\n var offset = getId3Offset(bytes);\n return bytesMatch(bytes, [0xFF, 0x10], {\n offset: offset,\n mask: [0xFF, 0x16]\n });\n },\n mp3: function mp3(bytes) {\n var offset = getId3Offset(bytes);\n return bytesMatch(bytes, [0xFF, 0x02], {\n offset: offset,\n mask: [0xFF, 0x06]\n });\n },\n webm: function webm(bytes) {\n var docType = findEbml(bytes, [EBML_TAGS.EBML, EBML_TAGS.DocType])[0]; // check if DocType EBML tag is webm\n\n return bytesMatch(docType, CONSTANTS.webm);\n },\n mkv: function mkv(bytes) {\n var docType = findEbml(bytes, [EBML_TAGS.EBML, EBML_TAGS.DocType])[0]; // check if DocType EBML tag is matroska\n\n return bytesMatch(docType, CONSTANTS.matroska);\n },\n mp4: function mp4(bytes) {\n // if this file is another base media file format, it is not mp4\n if (_isLikely['3gp'](bytes) || _isLikely.mov(bytes)) {\n return false;\n } // if this file starts with a ftyp or styp box its mp4\n\n\n if (bytesMatch(bytes, CONSTANTS.mp4, {\n offset: 4\n }) || bytesMatch(bytes, CONSTANTS.fmp4, {\n offset: 4\n })) {\n return true;\n } // if this file starts with a moof/moov box its mp4\n\n\n if (bytesMatch(bytes, CONSTANTS.moof, {\n offset: 4\n }) || bytesMatch(bytes, CONSTANTS.moov, {\n offset: 4\n })) {\n return true;\n }\n },\n mov: function mov(bytes) {\n return bytesMatch(bytes, CONSTANTS.mov, {\n offset: 4\n });\n },\n '3gp': function gp(bytes) {\n return bytesMatch(bytes, CONSTANTS['3gp'], {\n offset: 4\n });\n },\n ac3: function ac3(bytes) {\n var offset = getId3Offset(bytes);\n return bytesMatch(bytes, CONSTANTS.ac3, {\n offset: offset\n });\n },\n ts: function ts(bytes) {\n if (bytes.length < 189 && bytes.length >= 1) {\n return bytes[0] === 0x47;\n }\n\n var i = 0; // check the first 376 bytes for two matching sync bytes\n\n while (i + 188 < bytes.length && i < 188) {\n if (bytes[i] === 0x47 && bytes[i + 188] === 0x47) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n flac: function flac(bytes) {\n var offset = getId3Offset(bytes);\n return bytesMatch(bytes, CONSTANTS.flac, {\n offset: offset\n });\n },\n ogg: function ogg(bytes) {\n return bytesMatch(bytes, CONSTANTS.ogg);\n },\n avi: function avi(bytes) {\n return bytesMatch(bytes, CONSTANTS.riff) && bytesMatch(bytes, CONSTANTS.avi, {\n offset: 8\n });\n },\n wav: function wav(bytes) {\n return bytesMatch(bytes, CONSTANTS.riff) && bytesMatch(bytes, CONSTANTS.wav, {\n offset: 8\n });\n },\n 'h264': function h264(bytes) {\n // find seq_parameter_set_rbsp\n return findH264Nal(bytes, 7, 3).length;\n },\n 'h265': function h265(bytes) {\n // find video_parameter_set_rbsp or seq_parameter_set_rbsp\n return findH265Nal(bytes, [32, 33], 3).length;\n }\n}; // get all the isLikely functions\n// but make sure 'ts' is above h264 and h265\n// but below everything else as it is the least specific\n\nvar isLikelyTypes = Object.keys(_isLikely) // remove ts, h264, h265\n.filter(function (t) {\n return t !== 'ts' && t !== 'h264' && t !== 'h265';\n}) // add it back to the bottom\n.concat(['ts', 'h264', 'h265']); // make sure we are dealing with uint8 data.\n\nisLikelyTypes.forEach(function (type) {\n var isLikelyFn = _isLikely[type];\n\n _isLikely[type] = function (bytes) {\n return isLikelyFn(toUint8(bytes));\n };\n}); // export after wrapping\n\nexport var isLikely = _isLikely; // A useful list of file signatures can be found here\n// https://en.wikipedia.org/wiki/List_of_file_signatures\n\nexport var detectContainerForBytes = function detectContainerForBytes(bytes) {\n bytes = toUint8(bytes);\n\n for (var i = 0; i < isLikelyTypes.length; i++) {\n var type = isLikelyTypes[i];\n\n if (isLikely[type](bytes)) {\n return type;\n }\n }\n\n return '';\n}; // fmp4 is not a container\n\nexport var isLikelyFmp4MediaSegment = function isLikelyFmp4MediaSegment(bytes) {\n return findBox(bytes, ['moof']).length > 0;\n};","var MPEGURL_REGEX = /^(audio|video|application)\\/(x-|vnd\\.apple\\.)?mpegurl/i;\nvar DASH_REGEX = /^application\\/dash\\+xml/i;\n/**\n * Returns a string that describes the type of source based on a video source object's\n * media type.\n *\n * @see {@link https://dev.w3.org/html5/pf-summary/video.html#dom-source-type|Source Type}\n *\n * @param {string} type\n * Video source object media type\n * @return {('hls'|'dash'|'vhs-json'|null)}\n * VHS source type string\n */\n\nexport var simpleTypeFromSourceType = function simpleTypeFromSourceType(type) {\n if (MPEGURL_REGEX.test(type)) {\n return 'hls';\n }\n\n if (DASH_REGEX.test(type)) {\n return 'dash';\n } // Denotes the special case of a manifest object passed to http-streaming instead of a\n // source URL.\n //\n // See https://en.wikipedia.org/wiki/Media_type for details on specifying media types.\n //\n // In this case, vnd stands for vendor, video.js for the organization, VHS for this\n // project, and the +json suffix identifies the structure of the media type.\n\n\n if (type === 'application/vnd.videojs.vhs+json') {\n return 'vhs-json';\n }\n\n return null;\n};","/**\n * @file sync-controller.js\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _muxJsLibMp4Probe = require('mux.js/lib/mp4/probe');\n\nvar _muxJsLibMp4Probe2 = _interopRequireDefault(_muxJsLibMp4Probe);\n\nvar _muxJsLibToolsTsInspectorJs = require('mux.js/lib/tools/ts-inspector.js');\n\nvar _playlist = require('./playlist');\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar syncPointStrategies = [\n// Stategy \"VOD\": Handle the VOD-case where the sync-point is *always*\n// the equivalence display-time 0 === segment-index 0\n{\n name: 'VOD',\n run: function run(syncController, playlist, duration, currentTimeline, currentTime) {\n if (duration !== Infinity) {\n var syncPoint = {\n time: 0,\n segmentIndex: 0\n };\n\n return syncPoint;\n }\n return null;\n }\n},\n// Stategy \"ProgramDateTime\": We have a program-date-time tag in this playlist\n{\n name: 'ProgramDateTime',\n run: function run(syncController, playlist, duration, currentTimeline, currentTime) {\n if (syncController.datetimeToDisplayTime && playlist.dateTimeObject) {\n var playlistTime = playlist.dateTimeObject.getTime() / 1000;\n var playlistStart = playlistTime + syncController.datetimeToDisplayTime;\n var syncPoint = {\n time: playlistStart,\n segmentIndex: 0\n };\n\n return syncPoint;\n }\n return null;\n }\n},\n// Stategy \"Segment\": We have a known time mapping for a timeline and a\n// segment in the current timeline with timing data\n{\n name: 'Segment',\n run: function run(syncController, playlist, duration, currentTimeline, currentTime) {\n var segments = playlist.segments || [];\n var syncPoint = null;\n var lastDistance = null;\n\n currentTime = currentTime || 0;\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n\n if (segment.timeline === currentTimeline && typeof segment.start !== 'undefined') {\n var distance = Math.abs(currentTime - segment.start);\n\n // Once the distance begins to increase, we have passed\n // currentTime and can stop looking for better candidates\n if (lastDistance !== null && lastDistance < distance) {\n break;\n }\n\n if (!syncPoint || lastDistance === null || lastDistance >= distance) {\n lastDistance = distance;\n syncPoint = {\n time: segment.start,\n segmentIndex: i\n };\n }\n }\n }\n return syncPoint;\n }\n},\n// Stategy \"Discontinuity\": We have a discontinuity with a known\n// display-time\n{\n name: 'Discontinuity',\n run: function run(syncController, playlist, duration, currentTimeline, currentTime) {\n var syncPoint = null;\n\n currentTime = currentTime || 0;\n\n if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) {\n var lastDistance = null;\n\n for (var i = 0; i < playlist.discontinuityStarts.length; i++) {\n var segmentIndex = playlist.discontinuityStarts[i];\n var discontinuity = playlist.discontinuitySequence + i + 1;\n var discontinuitySync = syncController.discontinuities[discontinuity];\n\n if (discontinuitySync) {\n var distance = Math.abs(currentTime - discontinuitySync.time);\n\n // Once the distance begins to increase, we have passed\n // currentTime and can stop looking for better candidates\n if (lastDistance !== null && lastDistance < distance) {\n break;\n }\n\n if (!syncPoint || lastDistance === null || lastDistance >= distance) {\n lastDistance = distance;\n syncPoint = {\n time: discontinuitySync.time,\n segmentIndex: segmentIndex\n };\n }\n }\n }\n }\n return syncPoint;\n }\n},\n// Stategy \"Playlist\": We have a playlist with a known mapping of\n// segment index to display time\n{\n name: 'Playlist',\n run: function run(syncController, playlist, duration, currentTimeline, currentTime) {\n if (playlist.syncInfo) {\n var syncPoint = {\n time: playlist.syncInfo.time,\n segmentIndex: playlist.syncInfo.mediaSequence - playlist.mediaSequence\n };\n\n return syncPoint;\n }\n return null;\n }\n}];\n\nexports.syncPointStrategies = syncPointStrategies;\n\nvar SyncController = (function (_videojs$EventTarget) {\n _inherits(SyncController, _videojs$EventTarget);\n\n function SyncController() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n _classCallCheck(this, SyncController);\n\n _get(Object.getPrototypeOf(SyncController.prototype), 'constructor', this).call(this);\n // Segment Loader state variables...\n // ...for synching across variants\n this.inspectCache_ = undefined;\n\n // ...for synching across variants\n this.timelines = [];\n this.discontinuities = [];\n this.datetimeToDisplayTime = null;\n\n if (options.debug) {\n this.logger_ = _videoJs2['default'].log.bind(_videoJs2['default'], 'sync-controller ->');\n }\n }\n\n /**\n * Find a sync-point for the playlist specified\n *\n * A sync-point is defined as a known mapping from display-time to\n * a segment-index in the current playlist.\n *\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {Number} duration\n * Duration of the MediaSource (Infinite if playing a live source)\n * @param {Number} currentTimeline\n * The last timeline from which a segment was loaded\n * @returns {Object}\n * A sync-point object\n */\n\n _createClass(SyncController, [{\n key: 'getSyncPoint',\n value: function getSyncPoint(playlist, duration, currentTimeline, currentTime) {\n var syncPoints = this.runStrategies_(playlist, duration, currentTimeline, currentTime);\n\n if (!syncPoints.length) {\n // Signal that we need to attempt to get a sync-point manually\n // by fetching a segment in the playlist and constructing\n // a sync-point from that information\n return null;\n }\n\n // Now find the sync-point that is closest to the currentTime because\n // that should result in the most accurate guess about which segment\n // to fetch\n return this.selectSyncPoint_(syncPoints, { key: 'time', value: currentTime });\n }\n\n /**\n * Calculate the amount of time that has expired off the playlist during playback\n *\n * @param {Playlist} playlist\n * Playlist object to calculate expired from\n * @param {Number} duration\n * Duration of the MediaSource (Infinity if playling a live source)\n * @returns {Number|null}\n * The amount of time that has expired off the playlist during playback. Null\n * if no sync-points for the playlist can be found.\n */\n }, {\n key: 'getExpiredTime',\n value: function getExpiredTime(playlist, duration) {\n if (!playlist || !playlist.segments) {\n return null;\n }\n\n var syncPoints = this.runStrategies_(playlist, duration, playlist.discontinuitySequence, 0);\n\n // Without sync-points, there is not enough information to determine the expired time\n if (!syncPoints.length) {\n return null;\n }\n\n var syncPoint = this.selectSyncPoint_(syncPoints, {\n key: 'segmentIndex',\n value: 0\n });\n\n // If the sync-point is beyond the start of the playlist, we want to subtract the\n // duration from index 0 to syncPoint.segmentIndex instead of adding.\n if (syncPoint.segmentIndex > 0) {\n syncPoint.time *= -1;\n }\n\n return Math.abs(syncPoint.time + (0, _playlist.sumDurations)(playlist, syncPoint.segmentIndex, 0));\n }\n\n /**\n * Runs each sync-point strategy and returns a list of sync-points returned by the\n * strategies\n *\n * @private\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {Number} duration\n * Duration of the MediaSource (Infinity if playing a live source)\n * @param {Number} currentTimeline\n * The last timeline from which a segment was loaded\n * @returns {Array}\n * A list of sync-point objects\n */\n }, {\n key: 'runStrategies_',\n value: function runStrategies_(playlist, duration, currentTimeline, currentTime) {\n var syncPoints = [];\n\n // Try to find a sync-point in by utilizing various strategies...\n for (var i = 0; i < syncPointStrategies.length; i++) {\n var strategy = syncPointStrategies[i];\n var syncPoint = strategy.run(this, playlist, duration, currentTimeline, currentTime);\n\n if (syncPoint) {\n syncPoint.strategy = strategy.name;\n syncPoints.push({\n strategy: strategy.name,\n syncPoint: syncPoint\n });\n this.logger_('syncPoint found via <' + strategy.name + '>:', syncPoint);\n }\n }\n\n return syncPoints;\n }\n\n /**\n * Selects the sync-point nearest the specified target\n *\n * @private\n * @param {Array} syncPoints\n * List of sync-points to select from\n * @param {Object} target\n * Object specifying the property and value we are targeting\n * @param {String} target.key\n * Specifies the property to target. Must be either 'time' or 'segmentIndex'\n * @param {Number} target.value\n * The value to target for the specified key.\n * @returns {Object}\n * The sync-point nearest the target\n */\n }, {\n key: 'selectSyncPoint_',\n value: function selectSyncPoint_(syncPoints, target) {\n var bestSyncPoint = syncPoints[0].syncPoint;\n var bestDistance = Math.abs(syncPoints[0].syncPoint[target.key] - target.value);\n var bestStrategy = syncPoints[0].strategy;\n\n for (var i = 1; i < syncPoints.length; i++) {\n var newDistance = Math.abs(syncPoints[i].syncPoint[target.key] - target.value);\n\n if (newDistance < bestDistance) {\n bestDistance = newDistance;\n bestSyncPoint = syncPoints[i].syncPoint;\n bestStrategy = syncPoints[i].strategy;\n }\n }\n\n this.logger_('syncPoint with strategy <' + bestStrategy + '> chosen: ', bestSyncPoint);\n return bestSyncPoint;\n }\n\n /**\n * Save any meta-data present on the segments when segments leave\n * the live window to the playlist to allow for synchronization at the\n * playlist level later.\n *\n * @param {Playlist} oldPlaylist - The previous active playlist\n * @param {Playlist} newPlaylist - The updated and most current playlist\n */\n }, {\n key: 'saveExpiredSegmentInfo',\n value: function saveExpiredSegmentInfo(oldPlaylist, newPlaylist) {\n var mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence;\n\n // When a segment expires from the playlist and it has a start time\n // save that information as a possible sync-point reference in future\n for (var i = mediaSequenceDiff - 1; i >= 0; i--) {\n var lastRemovedSegment = oldPlaylist.segments[i];\n\n if (lastRemovedSegment && typeof lastRemovedSegment.start !== 'undefined') {\n newPlaylist.syncInfo = {\n mediaSequence: oldPlaylist.mediaSequence + i,\n time: lastRemovedSegment.start\n };\n this.logger_('playlist sync:', newPlaylist.syncInfo);\n this.trigger('syncinfoupdate');\n break;\n }\n }\n }\n\n /**\n * Save the mapping from playlist's ProgramDateTime to display. This should\n * only ever happen once at the start of playback.\n *\n * @param {Playlist} playlist - The currently active playlist\n */\n }, {\n key: 'setDateTimeMapping',\n value: function setDateTimeMapping(playlist) {\n if (!this.datetimeToDisplayTime && playlist.dateTimeObject) {\n var playlistTimestamp = playlist.dateTimeObject.getTime() / 1000;\n\n this.datetimeToDisplayTime = -playlistTimestamp;\n }\n }\n\n /**\n * Reset the state of the inspection cache when we do a rendition\n * switch\n */\n }, {\n key: 'reset',\n value: function reset() {\n this.inspectCache_ = undefined;\n }\n\n /**\n * Probe or inspect a fmp4 or an mpeg2-ts segment to determine the start\n * and end of the segment in it's internal \"media time\". Used to generate\n * mappings from that internal \"media time\" to the display time that is\n * shown on the player.\n *\n * @param {SegmentInfo} segmentInfo - The current active request information\n */\n }, {\n key: 'probeSegmentInfo',\n value: function probeSegmentInfo(segmentInfo) {\n var segment = segmentInfo.segment;\n var playlist = segmentInfo.playlist;\n var timingInfo = undefined;\n\n if (segment.map) {\n timingInfo = this.probeMp4Segment_(segmentInfo);\n } else {\n timingInfo = this.probeTsSegment_(segmentInfo);\n }\n\n if (timingInfo) {\n if (this.calculateSegmentTimeMapping_(segmentInfo, timingInfo)) {\n this.saveDiscontinuitySyncInfo_(segmentInfo);\n\n // If the playlist does not have sync information yet, record that information\n // now with segment timing information\n if (!playlist.syncInfo) {\n playlist.syncInfo = {\n mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex,\n time: segment.start\n };\n }\n }\n }\n\n return timingInfo;\n }\n\n /**\n * Probe an fmp4 or an mpeg2-ts segment to determine the start of the segment\n * in it's internal \"media time\".\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n * @return {object} The start and end time of the current segment in \"media time\"\n */\n }, {\n key: 'probeMp4Segment_',\n value: function probeMp4Segment_(segmentInfo) {\n var segment = segmentInfo.segment;\n var timescales = _muxJsLibMp4Probe2['default'].timescale(segment.map.bytes);\n var startTime = _muxJsLibMp4Probe2['default'].startTime(timescales, segmentInfo.bytes);\n\n if (segmentInfo.timestampOffset !== null) {\n segmentInfo.timestampOffset -= startTime;\n }\n\n return {\n start: startTime,\n end: startTime + segment.duration\n };\n }\n\n /**\n * Probe an mpeg2-ts segment to determine the start and end of the segment\n * in it's internal \"media time\".\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n * @return {object} The start and end time of the current segment in \"media time\"\n */\n }, {\n key: 'probeTsSegment_',\n value: function probeTsSegment_(segmentInfo) {\n var timeInfo = (0, _muxJsLibToolsTsInspectorJs.inspect)(segmentInfo.bytes, this.inspectCache_);\n var segmentStartTime = undefined;\n var segmentEndTime = undefined;\n\n if (!timeInfo) {\n return null;\n }\n\n if (timeInfo.video && timeInfo.video.length === 2) {\n this.inspectCache_ = timeInfo.video[1].dts;\n segmentStartTime = timeInfo.video[0].dtsTime;\n segmentEndTime = timeInfo.video[1].dtsTime;\n } else if (timeInfo.audio && timeInfo.audio.length === 2) {\n this.inspectCache_ = timeInfo.audio[1].dts;\n segmentStartTime = timeInfo.audio[0].dtsTime;\n segmentEndTime = timeInfo.audio[1].dtsTime;\n }\n\n return {\n start: segmentStartTime,\n end: segmentEndTime,\n containsVideo: timeInfo.video && timeInfo.video.length === 2,\n containsAudio: timeInfo.audio && timeInfo.audio.length === 2\n };\n }\n }, {\n key: 'timestampOffsetForTimeline',\n value: function timestampOffsetForTimeline(timeline) {\n if (typeof this.timelines[timeline] === 'undefined') {\n return null;\n }\n return this.timelines[timeline].time;\n }\n }, {\n key: 'mappingForTimeline',\n value: function mappingForTimeline(timeline) {\n if (typeof this.timelines[timeline] === 'undefined') {\n return null;\n }\n return this.timelines[timeline].mapping;\n }\n\n /**\n * Use the \"media time\" for a segment to generate a mapping to \"display time\" and\n * save that display time to the segment.\n *\n * @private\n * @param {SegmentInfo} segmentInfo\n * The current active request information\n * @param {object} timingInfo\n * The start and end time of the current segment in \"media time\"\n * @returns {Boolean}\n * Returns false if segment time mapping could not be calculated\n */\n }, {\n key: 'calculateSegmentTimeMapping_',\n value: function calculateSegmentTimeMapping_(segmentInfo, timingInfo) {\n var segment = segmentInfo.segment;\n var mappingObj = this.timelines[segmentInfo.timeline];\n\n if (segmentInfo.timestampOffset !== null) {\n this.logger_('tsO:', segmentInfo.timestampOffset);\n\n mappingObj = {\n time: segmentInfo.startOfSegment,\n mapping: segmentInfo.startOfSegment - timingInfo.start\n };\n this.timelines[segmentInfo.timeline] = mappingObj;\n this.trigger('timestampoffset');\n\n segment.start = segmentInfo.startOfSegment;\n segment.end = timingInfo.end + mappingObj.mapping;\n } else if (mappingObj) {\n segment.start = timingInfo.start + mappingObj.mapping;\n segment.end = timingInfo.end + mappingObj.mapping;\n } else {\n return false;\n }\n\n return true;\n }\n\n /**\n * Each time we have discontinuity in the playlist, attempt to calculate the location\n * in display of the start of the discontinuity and save that. We also save an accuracy\n * value so that we save values with the most accuracy (closest to 0.)\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n */\n }, {\n key: 'saveDiscontinuitySyncInfo_',\n value: function saveDiscontinuitySyncInfo_(segmentInfo) {\n var playlist = segmentInfo.playlist;\n var segment = segmentInfo.segment;\n\n // If the current segment is a discontinuity then we know exactly where\n // the start of the range and it's accuracy is 0 (greater accuracy values\n // mean more approximation)\n if (segment.discontinuity) {\n this.discontinuities[segment.timeline] = {\n time: segment.start,\n accuracy: 0\n };\n } else if (playlist.discontinuityStarts.length) {\n // Search for future discontinuities that we can provide better timing\n // information for and save that information for sync purposes\n for (var i = 0; i < playlist.discontinuityStarts.length; i++) {\n var segmentIndex = playlist.discontinuityStarts[i];\n var discontinuity = playlist.discontinuitySequence + i + 1;\n var mediaIndexDiff = segmentIndex - segmentInfo.mediaIndex;\n var accuracy = Math.abs(mediaIndexDiff);\n\n if (!this.discontinuities[discontinuity] || this.discontinuities[discontinuity].accuracy > accuracy) {\n var time = undefined;\n\n if (mediaIndexDiff < 0) {\n time = segment.start - (0, _playlist.sumDurations)(playlist, segmentInfo.mediaIndex, segmentIndex);\n } else {\n time = segment.end + (0, _playlist.sumDurations)(playlist, segmentInfo.mediaIndex + 1, segmentIndex);\n }\n\n this.discontinuities[discontinuity] = {\n time: time,\n accuracy: accuracy\n };\n }\n }\n }\n }\n\n /**\n * A debugging logger noop that is set to console.log only if debugging\n * is enabled globally\n *\n * @private\n */\n }, {\n key: 'logger_',\n value: function logger_() {}\n }]);\n\n return SyncController;\n})(_videoJs2['default'].EventTarget);\n\nexports['default'] = SyncController;","/**\n * mux.js\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * Reads in-band caption information from a video elementary\n * stream. Captions must follow the CEA-708 standard for injection\n * into an MPEG-2 transport streams.\n * @see https://en.wikipedia.org/wiki/CEA-708\n * @see https://www.gpo.gov/fdsys/pkg/CFR-2007-title47-vol1/pdf/CFR-2007-title47-vol1-sec15-119.pdf\n */\n\n'use strict';\n\n// -----------------\n// Link To Transport\n// -----------------\n\n// Supplemental enhancement information (SEI) NAL units have a\n// payload type field to indicate how they are to be\n// interpreted. CEAS-708 caption content is always transmitted with\n// payload type 0x04.\nvar USER_DATA_REGISTERED_ITU_T_T35 = 4,\n RBSP_TRAILING_BITS = 128,\n Stream = require('../utils/stream');\n\n/**\n * Parse a supplemental enhancement information (SEI) NAL unit.\n * Stops parsing once a message of type ITU T T35 has been found.\n *\n * @param bytes {Uint8Array} the bytes of a SEI NAL unit\n * @return {object} the parsed SEI payload\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n */\nvar parseSei = function(bytes) {\n var\n i = 0,\n result = {\n payloadType: -1,\n payloadSize: 0\n },\n payloadType = 0,\n payloadSize = 0;\n\n // go through the sei_rbsp parsing each each individual sei_message\n while (i < bytes.byteLength) {\n // stop once we have hit the end of the sei_rbsp\n if (bytes[i] === RBSP_TRAILING_BITS) {\n break;\n }\n\n // Parse payload type\n while (bytes[i] === 0xFF) {\n payloadType += 255;\n i++;\n }\n payloadType += bytes[i++];\n\n // Parse payload size\n while (bytes[i] === 0xFF) {\n payloadSize += 255;\n i++;\n }\n payloadSize += bytes[i++];\n\n // this sei_message is a 608/708 caption so save it and break\n // there can only ever be one caption message in a frame's sei\n if (!result.payload && payloadType === USER_DATA_REGISTERED_ITU_T_T35) {\n result.payloadType = payloadType;\n result.payloadSize = payloadSize;\n result.payload = bytes.subarray(i, i + payloadSize);\n break;\n }\n\n // skip the payload and parse the next message\n i += payloadSize;\n payloadType = 0;\n payloadSize = 0;\n }\n\n return result;\n};\n\n// see ANSI/SCTE 128-1 (2013), section 8.1\nvar parseUserData = function(sei) {\n // itu_t_t35_contry_code must be 181 (United States) for\n // captions\n if (sei.payload[0] !== 181) {\n return null;\n }\n\n // itu_t_t35_provider_code should be 49 (ATSC) for captions\n if (((sei.payload[1] << 8) | sei.payload[2]) !== 49) {\n return null;\n }\n\n // the user_identifier should be \"GA94\" to indicate ATSC1 data\n if (String.fromCharCode(sei.payload[3],\n sei.payload[4],\n sei.payload[5],\n sei.payload[6]) !== 'GA94') {\n return null;\n }\n\n // finally, user_data_type_code should be 0x03 for caption data\n if (sei.payload[7] !== 0x03) {\n return null;\n }\n\n // return the user_data_type_structure and strip the trailing\n // marker bits\n return sei.payload.subarray(8, sei.payload.length - 1);\n};\n\n// see CEA-708-D, section 4.4\nvar parseCaptionPackets = function(pts, userData) {\n var results = [], i, count, offset, data;\n\n // if this is just filler, return immediately\n if (!(userData[0] & 0x40)) {\n return results;\n }\n\n // parse out the cc_data_1 and cc_data_2 fields\n count = userData[0] & 0x1f;\n for (i = 0; i < count; i++) {\n offset = i * 3;\n data = {\n type: userData[offset + 2] & 0x03,\n pts: pts\n };\n\n // capture cc data when cc_valid is 1\n if (userData[offset + 2] & 0x04) {\n data.ccData = (userData[offset + 3] << 8) | userData[offset + 4];\n results.push(data);\n }\n }\n return results;\n};\n\nvar CaptionStream = function() {\n\n CaptionStream.prototype.init.call(this);\n\n this.captionPackets_ = [];\n\n this.ccStreams_ = [\n new Cea608Stream(0, 0), // eslint-disable-line no-use-before-define\n new Cea608Stream(0, 1), // eslint-disable-line no-use-before-define\n new Cea608Stream(1, 0), // eslint-disable-line no-use-before-define\n new Cea608Stream(1, 1) // eslint-disable-line no-use-before-define\n ];\n\n this.reset();\n\n // forward data and done events from CCs to this CaptionStream\n this.ccStreams_.forEach(function(cc) {\n cc.on('data', this.trigger.bind(this, 'data'));\n cc.on('done', this.trigger.bind(this, 'done'));\n }, this);\n\n};\n\nCaptionStream.prototype = new Stream();\nCaptionStream.prototype.push = function(event) {\n var sei, userData;\n\n // only examine SEI NALs\n if (event.nalUnitType !== 'sei_rbsp') {\n return;\n }\n\n // parse the sei\n sei = parseSei(event.escapedRBSP);\n\n // ignore everything but user_data_registered_itu_t_t35\n if (sei.payloadType !== USER_DATA_REGISTERED_ITU_T_T35) {\n return;\n }\n\n // parse out the user data payload\n userData = parseUserData(sei);\n\n // ignore unrecognized userData\n if (!userData) {\n return;\n }\n\n // Sometimes, the same segment # will be downloaded twice. To stop the\n // caption data from being processed twice, we track the latest dts we've\n // received and ignore everything with a dts before that. However, since\n // data for a specific dts can be split across 2 packets on either side of\n // a segment boundary, we need to make sure we *don't* ignore the second\n // dts packet we receive that has dts === this.latestDts_. And thus, the\n // ignoreNextEqualDts_ flag was born.\n if (event.dts < this.latestDts_) {\n // We've started getting older data, so set the flag.\n this.ignoreNextEqualDts_ = true;\n return;\n } else if ((event.dts === this.latestDts_) && (this.ignoreNextEqualDts_)) {\n // We've received the last duplicate packet, time to start processing again\n this.ignoreNextEqualDts_ = false;\n return;\n }\n\n // parse out CC data packets and save them for later\n this.captionPackets_ = this.captionPackets_.concat(parseCaptionPackets(event.pts, userData));\n this.latestDts_ = event.dts;\n};\n\nCaptionStream.prototype.flush = function() {\n // make sure we actually parsed captions before proceeding\n if (!this.captionPackets_.length) {\n this.ccStreams_.forEach(function(cc) {\n cc.flush();\n }, this);\n return;\n }\n\n // In Chrome, the Array#sort function is not stable so add a\n // presortIndex that we can use to ensure we get a stable-sort\n this.captionPackets_.forEach(function(elem, idx) {\n elem.presortIndex = idx;\n });\n\n // sort caption byte-pairs based on their PTS values\n this.captionPackets_.sort(function(a, b) {\n if (a.pts === b.pts) {\n return a.presortIndex - b.presortIndex;\n }\n return a.pts - b.pts;\n });\n\n this.captionPackets_.forEach(function(packet) {\n if (packet.type < 2) {\n // Dispatch packet to the right Cea608Stream\n this.dispatchCea608Packet(packet);\n }\n // this is where an 'else' would go for a dispatching packets\n // to a theoretical Cea708Stream that handles SERVICEn data\n }, this);\n\n this.captionPackets_.length = 0;\n this.ccStreams_.forEach(function(cc) {\n cc.flush();\n }, this);\n return;\n};\n\nCaptionStream.prototype.reset = function() {\n this.latestDts_ = null;\n this.ignoreNextEqualDts_ = false;\n this.activeCea608Channel_ = [null, null];\n this.ccStreams_.forEach(function(ccStream) {\n ccStream.reset();\n });\n};\n\nCaptionStream.prototype.dispatchCea608Packet = function(packet) {\n // NOTE: packet.type is the CEA608 field\n if (this.setsChannel1Active(packet)) {\n this.activeCea608Channel_[packet.type] = 0;\n } else if (this.setsChannel2Active(packet)) {\n this.activeCea608Channel_[packet.type] = 1;\n }\n if (this.activeCea608Channel_[packet.type] === null) {\n // If we haven't received anything to set the active channel, discard the\n // data; we don't want jumbled captions\n return;\n }\n this.ccStreams_[(packet.type << 1) + this.activeCea608Channel_[packet.type]].push(packet);\n};\n\nCaptionStream.prototype.setsChannel1Active = function(packet) {\n return ((packet.ccData & 0x7800) === 0x1000);\n};\nCaptionStream.prototype.setsChannel2Active = function(packet) {\n return ((packet.ccData & 0x7800) === 0x1800);\n};\n\n// ----------------------\n// Session to Application\n// ----------------------\n\nvar CHARACTER_TRANSLATION = {\n 0x2a: 0xe1, // á\n 0x5c: 0xe9, // é\n 0x5e: 0xed, // í\n 0x5f: 0xf3, // ó\n 0x60: 0xfa, // ú\n 0x7b: 0xe7, // ç\n 0x7c: 0xf7, // ÷\n 0x7d: 0xd1, // Ñ\n 0x7e: 0xf1, // ñ\n 0x7f: 0x2588, // █\n 0x0130: 0xae, // ®\n 0x0131: 0xb0, // °\n 0x0132: 0xbd, // ½\n 0x0133: 0xbf, // ¿\n 0x0134: 0x2122, // ™\n 0x0135: 0xa2, // ¢\n 0x0136: 0xa3, // £\n 0x0137: 0x266a, // ♪\n 0x0138: 0xe0, // à\n 0x0139: 0xa0, //\n 0x013a: 0xe8, // è\n 0x013b: 0xe2, // â\n 0x013c: 0xea, // ê\n 0x013d: 0xee, // î\n 0x013e: 0xf4, // ô\n 0x013f: 0xfb, // û\n 0x0220: 0xc1, // Á\n 0x0221: 0xc9, // É\n 0x0222: 0xd3, // Ó\n 0x0223: 0xda, // Ú\n 0x0224: 0xdc, // Ü\n 0x0225: 0xfc, // ü\n 0x0226: 0x2018, // ‘\n 0x0227: 0xa1, // ¡\n 0x0228: 0x2a, // *\n 0x0229: 0x27, // '\n 0x022a: 0x2014, // —\n 0x022b: 0xa9, // ©\n 0x022c: 0x2120, // ℠\n 0x022d: 0x2022, // •\n 0x022e: 0x201c, // “\n 0x022f: 0x201d, // ”\n 0x0230: 0xc0, // À\n 0x0231: 0xc2, // Â\n 0x0232: 0xc7, // Ç\n 0x0233: 0xc8, // È\n 0x0234: 0xca, // Ê\n 0x0235: 0xcb, // Ë\n 0x0236: 0xeb, // ë\n 0x0237: 0xce, // Î\n 0x0238: 0xcf, // Ï\n 0x0239: 0xef, // ï\n 0x023a: 0xd4, // Ô\n 0x023b: 0xd9, // Ù\n 0x023c: 0xf9, // ù\n 0x023d: 0xdb, // Û\n 0x023e: 0xab, // «\n 0x023f: 0xbb, // »\n 0x0320: 0xc3, // Ã\n 0x0321: 0xe3, // ã\n 0x0322: 0xcd, // Í\n 0x0323: 0xcc, // Ì\n 0x0324: 0xec, // ì\n 0x0325: 0xd2, // Ò\n 0x0326: 0xf2, // ò\n 0x0327: 0xd5, // Õ\n 0x0328: 0xf5, // õ\n 0x0329: 0x7b, // {\n 0x032a: 0x7d, // }\n 0x032b: 0x5c, // \\\n 0x032c: 0x5e, // ^\n 0x032d: 0x5f, // _\n 0x032e: 0x7c, // |\n 0x032f: 0x7e, // ~\n 0x0330: 0xc4, // Ä\n 0x0331: 0xe4, // ä\n 0x0332: 0xd6, // Ö\n 0x0333: 0xf6, // ö\n 0x0334: 0xdf, // ß\n 0x0335: 0xa5, // ¥\n 0x0336: 0xa4, // ¤\n 0x0337: 0x2502, // │\n 0x0338: 0xc5, // Å\n 0x0339: 0xe5, // å\n 0x033a: 0xd8, // Ø\n 0x033b: 0xf8, // ø\n 0x033c: 0x250c, // ┌\n 0x033d: 0x2510, // ┐\n 0x033e: 0x2514, // └\n 0x033f: 0x2518 // ┘\n};\n\nvar getCharFromCode = function(code) {\n if (code === null) {\n return '';\n }\n code = CHARACTER_TRANSLATION[code] || code;\n return String.fromCharCode(code);\n};\n\n// the index of the last row in a CEA-608 display buffer\nvar BOTTOM_ROW = 14;\n\n// This array is used for mapping PACs -> row #, since there's no way of\n// getting it through bit logic.\nvar ROWS = [0x1100, 0x1120, 0x1200, 0x1220, 0x1500, 0x1520, 0x1600, 0x1620,\n 0x1700, 0x1720, 0x1000, 0x1300, 0x1320, 0x1400, 0x1420];\n\n// CEA-608 captions are rendered onto a 34x15 matrix of character\n// cells. The \"bottom\" row is the last element in the outer array.\nvar createDisplayBuffer = function() {\n var result = [], i = BOTTOM_ROW + 1;\n while (i--) {\n result.push('');\n }\n return result;\n};\n\nvar Cea608Stream = function(field, dataChannel) {\n Cea608Stream.prototype.init.call(this);\n\n this.field_ = field || 0;\n this.dataChannel_ = dataChannel || 0;\n\n this.name_ = 'CC' + (((this.field_ << 1) | this.dataChannel_) + 1);\n\n this.setConstants();\n this.reset();\n\n this.push = function(packet) {\n var data, swap, char0, char1, text;\n // remove the parity bits\n data = packet.ccData & 0x7f7f;\n\n // ignore duplicate control codes; the spec demands they're sent twice\n if (data === this.lastControlCode_) {\n this.lastControlCode_ = null;\n return;\n }\n\n // Store control codes\n if ((data & 0xf000) === 0x1000) {\n this.lastControlCode_ = data;\n } else if (data !== this.PADDING_) {\n this.lastControlCode_ = null;\n }\n\n char0 = data >>> 8;\n char1 = data & 0xff;\n\n if (data === this.PADDING_) {\n return;\n\n } else if (data === this.RESUME_CAPTION_LOADING_) {\n this.mode_ = 'popOn';\n\n } else if (data === this.END_OF_CAPTION_) {\n this.clearFormatting(packet.pts);\n // if a caption was being displayed, it's gone now\n this.flushDisplayed(packet.pts);\n\n // flip memory\n swap = this.displayed_;\n this.displayed_ = this.nonDisplayed_;\n this.nonDisplayed_ = swap;\n\n // start measuring the time to display the caption\n this.startPts_ = packet.pts;\n\n } else if (data === this.ROLL_UP_2_ROWS_) {\n this.topRow_ = BOTTOM_ROW - 1;\n this.mode_ = 'rollUp';\n } else if (data === this.ROLL_UP_3_ROWS_) {\n this.topRow_ = BOTTOM_ROW - 2;\n this.mode_ = 'rollUp';\n } else if (data === this.ROLL_UP_4_ROWS_) {\n this.topRow_ = BOTTOM_ROW - 3;\n this.mode_ = 'rollUp';\n } else if (data === this.CARRIAGE_RETURN_) {\n this.clearFormatting(packet.pts);\n this.flushDisplayed(packet.pts);\n this.shiftRowsUp_();\n this.startPts_ = packet.pts;\n\n } else if (data === this.BACKSPACE_) {\n if (this.mode_ === 'popOn') {\n this.nonDisplayed_[BOTTOM_ROW] = this.nonDisplayed_[BOTTOM_ROW].slice(0, -1);\n } else {\n this.displayed_[BOTTOM_ROW] = this.displayed_[BOTTOM_ROW].slice(0, -1);\n }\n } else if (data === this.ERASE_DISPLAYED_MEMORY_) {\n this.flushDisplayed(packet.pts);\n this.displayed_ = createDisplayBuffer();\n } else if (data === this.ERASE_NON_DISPLAYED_MEMORY_) {\n this.nonDisplayed_ = createDisplayBuffer();\n\n } else if (data === this.RESUME_DIRECT_CAPTIONING_) {\n this.mode_ = 'paintOn';\n\n // Append special characters to caption text\n } else if (this.isSpecialCharacter(char0, char1)) {\n // Bitmask char0 so that we can apply character transformations\n // regardless of field and data channel.\n // Then byte-shift to the left and OR with char1 so we can pass the\n // entire character code to `getCharFromCode`.\n char0 = (char0 & 0x03) << 8;\n text = getCharFromCode(char0 | char1);\n this[this.mode_](packet.pts, text);\n this.column_++;\n\n // Append extended characters to caption text\n } else if (this.isExtCharacter(char0, char1)) {\n // Extended characters always follow their \"non-extended\" equivalents.\n // IE if a \"è\" is desired, you'll always receive \"eè\"; non-compliant\n // decoders are supposed to drop the \"è\", while compliant decoders\n // backspace the \"e\" and insert \"è\".\n\n // Delete the previous character\n if (this.mode_ === 'popOn') {\n this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1);\n } else {\n this.displayed_[BOTTOM_ROW] = this.displayed_[BOTTOM_ROW].slice(0, -1);\n }\n\n // Bitmask char0 so that we can apply character transformations\n // regardless of field and data channel.\n // Then byte-shift to the left and OR with char1 so we can pass the\n // entire character code to `getCharFromCode`.\n char0 = (char0 & 0x03) << 8;\n text = getCharFromCode(char0 | char1);\n this[this.mode_](packet.pts, text);\n this.column_++;\n\n // Process mid-row codes\n } else if (this.isMidRowCode(char0, char1)) {\n // Attributes are not additive, so clear all formatting\n this.clearFormatting(packet.pts);\n\n // According to the standard, mid-row codes\n // should be replaced with spaces, so add one now\n this[this.mode_](packet.pts, ' ');\n this.column_++;\n\n if ((char1 & 0xe) === 0xe) {\n this.addFormatting(packet.pts, ['i']);\n }\n\n if ((char1 & 0x1) === 0x1) {\n this.addFormatting(packet.pts, ['u']);\n }\n\n // Detect offset control codes and adjust cursor\n } else if (this.isOffsetControlCode(char0, char1)) {\n // Cursor position is set by indent PAC (see below) in 4-column\n // increments, with an additional offset code of 1-3 to reach any\n // of the 32 columns specified by CEA-608. So all we need to do\n // here is increment the column cursor by the given offset.\n this.column_ += (char1 & 0x03);\n\n // Detect PACs (Preamble Address Codes)\n } else if (this.isPAC(char0, char1)) {\n\n // There's no logic for PAC -> row mapping, so we have to just\n // find the row code in an array and use its index :(\n var row = ROWS.indexOf(data & 0x1f20);\n\n if (row !== this.row_) {\n // formatting is only persistent for current row\n this.clearFormatting(packet.pts);\n this.row_ = row;\n }\n // All PACs can apply underline, so detect and apply\n // (All odd-numbered second bytes set underline)\n if ((char1 & 0x1) && (this.formatting_.indexOf('u') === -1)) {\n this.addFormatting(packet.pts, ['u']);\n }\n\n if ((data & 0x10) === 0x10) {\n // We've got an indent level code. Each successive even number\n // increments the column cursor by 4, so we can get the desired\n // column position by bit-shifting to the right (to get n/2)\n // and multiplying by 4.\n this.column_ = ((data & 0xe) >> 1) * 4;\n }\n\n if (this.isColorPAC(char1)) {\n // it's a color code, though we only support white, which\n // can be either normal or italicized. white italics can be\n // either 0x4e or 0x6e depending on the row, so we just\n // bitwise-and with 0xe to see if italics should be turned on\n if ((char1 & 0xe) === 0xe) {\n this.addFormatting(packet.pts, ['i']);\n }\n }\n\n // We have a normal character in char0, and possibly one in char1\n } else if (this.isNormalChar(char0)) {\n if (char1 === 0x00) {\n char1 = null;\n }\n text = getCharFromCode(char0);\n text += getCharFromCode(char1);\n this[this.mode_](packet.pts, text);\n this.column_ += text.length;\n\n } // finish data processing\n\n };\n};\nCea608Stream.prototype = new Stream();\n// Trigger a cue point that captures the current state of the\n// display buffer\nCea608Stream.prototype.flushDisplayed = function(pts) {\n var content = this.displayed_\n // remove spaces from the start and end of the string\n .map(function(row) {\n return row.trim();\n })\n // combine all text rows to display in one cue\n .join('\\n')\n // and remove blank rows from the start and end, but not the middle\n .replace(/^\\n+|\\n+$/g, '');\n\n if (content.length) {\n this.trigger('data', {\n startPts: this.startPts_,\n endPts: pts,\n text: content,\n stream: this.name_\n });\n }\n};\n\n/**\n * Zero out the data, used for startup and on seek\n */\nCea608Stream.prototype.reset = function() {\n this.mode_ = 'popOn';\n // When in roll-up mode, the index of the last row that will\n // actually display captions. If a caption is shifted to a row\n // with a lower index than this, it is cleared from the display\n // buffer\n this.topRow_ = 0;\n this.startPts_ = 0;\n this.displayed_ = createDisplayBuffer();\n this.nonDisplayed_ = createDisplayBuffer();\n this.lastControlCode_ = null;\n\n // Track row and column for proper line-breaking and spacing\n this.column_ = 0;\n this.row_ = BOTTOM_ROW;\n\n // This variable holds currently-applied formatting\n this.formatting_ = [];\n};\n\n/**\n * Sets up control code and related constants for this instance\n */\nCea608Stream.prototype.setConstants = function() {\n // The following attributes have these uses:\n // ext_ : char0 for mid-row codes, and the base for extended\n // chars (ext_+0, ext_+1, and ext_+2 are char0s for\n // extended codes)\n // control_: char0 for control codes, except byte-shifted to the\n // left so that we can do this.control_ | CONTROL_CODE\n // offset_: char0 for tab offset codes\n //\n // It's also worth noting that control codes, and _only_ control codes,\n // differ between field 1 and field2. Field 2 control codes are always\n // their field 1 value plus 1. That's why there's the \"| field\" on the\n // control value.\n if (this.dataChannel_ === 0) {\n this.BASE_ = 0x10;\n this.EXT_ = 0x11;\n this.CONTROL_ = (0x14 | this.field_) << 8;\n this.OFFSET_ = 0x17;\n } else if (this.dataChannel_ === 1) {\n this.BASE_ = 0x18;\n this.EXT_ = 0x19;\n this.CONTROL_ = (0x1c | this.field_) << 8;\n this.OFFSET_ = 0x1f;\n }\n\n // Constants for the LSByte command codes recognized by Cea608Stream. This\n // list is not exhaustive. For a more comprehensive listing and semantics see\n // http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/pdf/CFR-2010-title47-vol1-sec15-119.pdf\n // Padding\n this.PADDING_ = 0x0000;\n // Pop-on Mode\n this.RESUME_CAPTION_LOADING_ = this.CONTROL_ | 0x20;\n this.END_OF_CAPTION_ = this.CONTROL_ | 0x2f;\n // Roll-up Mode\n this.ROLL_UP_2_ROWS_ = this.CONTROL_ | 0x25;\n this.ROLL_UP_3_ROWS_ = this.CONTROL_ | 0x26;\n this.ROLL_UP_4_ROWS_ = this.CONTROL_ | 0x27;\n this.CARRIAGE_RETURN_ = this.CONTROL_ | 0x2d;\n // paint-on mode (not supported)\n this.RESUME_DIRECT_CAPTIONING_ = this.CONTROL_ | 0x29;\n // Erasure\n this.BACKSPACE_ = this.CONTROL_ | 0x21;\n this.ERASE_DISPLAYED_MEMORY_ = this.CONTROL_ | 0x2c;\n this.ERASE_NON_DISPLAYED_MEMORY_ = this.CONTROL_ | 0x2e;\n};\n\n/**\n * Detects if the 2-byte packet data is a special character\n *\n * Special characters have a second byte in the range 0x30 to 0x3f,\n * with the first byte being 0x11 (for data channel 1) or 0x19 (for\n * data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an special character\n */\nCea608Stream.prototype.isSpecialCharacter = function(char0, char1) {\n return (char0 === this.EXT_ && char1 >= 0x30 && char1 <= 0x3f);\n};\n\n/**\n * Detects if the 2-byte packet data is an extended character\n *\n * Extended characters have a second byte in the range 0x20 to 0x3f,\n * with the first byte being 0x12 or 0x13 (for data channel 1) or\n * 0x1a or 0x1b (for data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an extended character\n */\nCea608Stream.prototype.isExtCharacter = function(char0, char1) {\n return ((char0 === (this.EXT_ + 1) || char0 === (this.EXT_ + 2)) &&\n (char1 >= 0x20 && char1 <= 0x3f));\n};\n\n/**\n * Detects if the 2-byte packet is a mid-row code\n *\n * Mid-row codes have a second byte in the range 0x20 to 0x2f, with\n * the first byte being 0x11 (for data channel 1) or 0x19 (for data\n * channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are a mid-row code\n */\nCea608Stream.prototype.isMidRowCode = function(char0, char1) {\n return (char0 === this.EXT_ && (char1 >= 0x20 && char1 <= 0x2f));\n};\n\n/**\n * Detects if the 2-byte packet is an offset control code\n *\n * Offset control codes have a second byte in the range 0x21 to 0x23,\n * with the first byte being 0x17 (for data channel 1) or 0x1f (for\n * data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an offset control code\n */\nCea608Stream.prototype.isOffsetControlCode = function(char0, char1) {\n return (char0 === this.OFFSET_ && (char1 >= 0x21 && char1 <= 0x23));\n};\n\n/**\n * Detects if the 2-byte packet is a Preamble Address Code\n *\n * PACs have a first byte in the range 0x10 to 0x17 (for data channel 1)\n * or 0x18 to 0x1f (for data channel 2), with the second byte in the\n * range 0x40 to 0x7f.\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are a PAC\n */\nCea608Stream.prototype.isPAC = function(char0, char1) {\n return (char0 >= this.BASE_ && char0 < (this.BASE_ + 8) &&\n (char1 >= 0x40 && char1 <= 0x7f));\n};\n\n/**\n * Detects if a packet's second byte is in the range of a PAC color code\n *\n * PAC color codes have the second byte be in the range 0x40 to 0x4f, or\n * 0x60 to 0x6f.\n *\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the byte is a color PAC\n */\nCea608Stream.prototype.isColorPAC = function(char1) {\n return ((char1 >= 0x40 && char1 <= 0x4f) || (char1 >= 0x60 && char1 <= 0x7f));\n};\n\n/**\n * Detects if a single byte is in the range of a normal character\n *\n * Normal text bytes are in the range 0x20 to 0x7f.\n *\n * @param {Integer} char The byte\n * @return {Boolean} Whether the byte is a normal character\n */\nCea608Stream.prototype.isNormalChar = function(char) {\n return (char >= 0x20 && char <= 0x7f);\n};\n\n// Adds the opening HTML tag for the passed character to the caption text,\n// and keeps track of it for later closing\nCea608Stream.prototype.addFormatting = function(pts, format) {\n this.formatting_ = this.formatting_.concat(format);\n var text = format.reduce(function(text, format) {\n return text + '<' + format + '>';\n }, '');\n this[this.mode_](pts, text);\n};\n\n// Adds HTML closing tags for current formatting to caption text and\n// clears remembered formatting\nCea608Stream.prototype.clearFormatting = function(pts) {\n if (!this.formatting_.length) {\n return;\n }\n var text = this.formatting_.reverse().reduce(function(text, format) {\n return text + '';\n }, '');\n this.formatting_ = [];\n this[this.mode_](pts, text);\n};\n\n// Mode Implementations\nCea608Stream.prototype.popOn = function(pts, text) {\n var baseRow = this.nonDisplayed_[this.row_];\n\n // buffer characters\n baseRow += text;\n this.nonDisplayed_[this.row_] = baseRow;\n};\n\nCea608Stream.prototype.rollUp = function(pts, text) {\n var baseRow = this.displayed_[BOTTOM_ROW];\n\n baseRow += text;\n this.displayed_[BOTTOM_ROW] = baseRow;\n\n};\n\nCea608Stream.prototype.shiftRowsUp_ = function() {\n var i;\n // clear out inactive rows\n for (i = 0; i < this.topRow_; i++) {\n this.displayed_[i] = '';\n }\n // shift displayed rows up\n for (i = this.topRow_; i < BOTTOM_ROW; i++) {\n this.displayed_[i] = this.displayed_[i + 1];\n }\n // clear out the bottom row\n this.displayed_[BOTTOM_ROW] = '';\n};\n\n// paintOn mode is not implemented\nCea608Stream.prototype.paintOn = function() {};\n\n// exports\nmodule.exports = {\n CaptionStream: CaptionStream,\n Cea608Stream: Cea608Stream\n};\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar scrollSetting = {\n \"\": true,\n \"up\": true\n};\n\nfunction findScrollSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var scroll = scrollSetting[value.toLowerCase()];\n return scroll ? value.toLowerCase() : false;\n}\n\nfunction isValidPercentValue(value) {\n return typeof value === \"number\" && (value >= 0 && value <= 100);\n}\n\n// VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface\nfunction VTTRegion() {\n var _width = 100;\n var _lines = 3;\n var _regionAnchorX = 0;\n var _regionAnchorY = 100;\n var _viewportAnchorX = 0;\n var _viewportAnchorY = 100;\n var _scroll = \"\";\n\n Object.defineProperties(this, {\n \"width\": {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"Width must be between 0 and 100.\");\n }\n _width = value;\n }\n },\n \"lines\": {\n enumerable: true,\n get: function() {\n return _lines;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Lines must be set to a number.\");\n }\n _lines = value;\n }\n },\n \"regionAnchorY\": {\n enumerable: true,\n get: function() {\n return _regionAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorX must be between 0 and 100.\");\n }\n _regionAnchorY = value;\n }\n },\n \"regionAnchorX\": {\n enumerable: true,\n get: function() {\n return _regionAnchorX;\n },\n set: function(value) {\n if(!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorY must be between 0 and 100.\");\n }\n _regionAnchorX = value;\n }\n },\n \"viewportAnchorY\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorY must be between 0 and 100.\");\n }\n _viewportAnchorY = value;\n }\n },\n \"viewportAnchorX\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorX;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorX must be between 0 and 100.\");\n }\n _viewportAnchorX = value;\n }\n },\n \"scroll\": {\n enumerable: true,\n get: function() {\n return _scroll;\n },\n set: function(value) {\n var setting = findScrollSetting(value);\n // Have to check for false as an empty string is a legal value.\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _scroll = setting;\n }\n }\n });\n}\n\nmodule.exports = VTTRegion;\n","var isCallable = require('../internals/is-callable');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","/**\n * @file flash-constants.js\n */\n/**\n * The maximum size in bytes for append operations to the video.js\n * SWF. Calling through to Flash blocks and can be expensive so\n * we chunk data and pass through 4KB at a time, yielding to the\n * browser between chunks. This gives a theoretical maximum rate of\n * 1MB/s into Flash. Any higher and we begin to drop frames and UI\n * responsiveness suffers.\n *\n * @private\n */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar flashConstants = {\n // times in milliseconds\n TIME_BETWEEN_CHUNKS: 1,\n BYTES_PER_CHUNK: 1024 * 32\n};\n\nexports[\"default\"] = flashConstants;\nmodule.exports = exports[\"default\"];","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","import window from 'global/window'; // const log2 = Math.log2 ? Math.log2 : (x) => (Math.log(x) / Math.log(2));\n\nvar repeat = function repeat(str, len) {\n var acc = '';\n\n while (len--) {\n acc += str;\n }\n\n return acc;\n}; // count the number of bits it would take to represent a number\n// we used to do this with log2 but BigInt does not support builtin math\n// Math.ceil(log2(x));\n\n\nexport var countBits = function countBits(x) {\n return x.toString(2).length;\n}; // count the number of whole bytes it would take to represent a number\n\nexport var countBytes = function countBytes(x) {\n return Math.ceil(countBits(x) / 8);\n};\nexport var padStart = function padStart(b, len, str) {\n if (str === void 0) {\n str = ' ';\n }\n\n return (repeat(str, len) + b.toString()).slice(-len);\n};\nexport var isArrayBufferView = function isArrayBufferView(obj) {\n if (ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(obj);\n }\n\n return obj && obj.buffer instanceof ArrayBuffer;\n};\nexport var isTypedArray = function isTypedArray(obj) {\n return isArrayBufferView(obj);\n};\nexport var toUint8 = function toUint8(bytes) {\n if (bytes instanceof Uint8Array) {\n return bytes;\n }\n\n if (!Array.isArray(bytes) && !isTypedArray(bytes) && !(bytes instanceof ArrayBuffer)) {\n // any non-number or NaN leads to empty uint8array\n // eslint-disable-next-line\n if (typeof bytes !== 'number' || typeof bytes === 'number' && bytes !== bytes) {\n bytes = 0;\n } else {\n bytes = [bytes];\n }\n }\n\n return new Uint8Array(bytes && bytes.buffer || bytes, bytes && bytes.byteOffset || 0, bytes && bytes.byteLength || 0);\n};\nexport var toHexString = function toHexString(bytes) {\n bytes = toUint8(bytes);\n var str = '';\n\n for (var i = 0; i < bytes.length; i++) {\n str += padStart(bytes[i].toString(16), 2, '0');\n }\n\n return str;\n};\nexport var toBinaryString = function toBinaryString(bytes) {\n bytes = toUint8(bytes);\n var str = '';\n\n for (var i = 0; i < bytes.length; i++) {\n str += padStart(bytes[i].toString(2), 8, '0');\n }\n\n return str;\n};\nvar BigInt = window.BigInt || Number;\nvar BYTE_TABLE = [BigInt('0x1'), BigInt('0x100'), BigInt('0x10000'), BigInt('0x1000000'), BigInt('0x100000000'), BigInt('0x10000000000'), BigInt('0x1000000000000'), BigInt('0x100000000000000'), BigInt('0x10000000000000000')];\nexport var ENDIANNESS = function () {\n var a = new Uint16Array([0xFFCC]);\n var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n\n if (b[0] === 0xFF) {\n return 'big';\n }\n\n if (b[0] === 0xCC) {\n return 'little';\n }\n\n return 'unknown';\n}();\nexport var IS_BIG_ENDIAN = ENDIANNESS === 'big';\nexport var IS_LITTLE_ENDIAN = ENDIANNESS === 'little';\nexport var bytesToNumber = function bytesToNumber(bytes, _temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$signed = _ref.signed,\n signed = _ref$signed === void 0 ? false : _ref$signed,\n _ref$le = _ref.le,\n le = _ref$le === void 0 ? false : _ref$le;\n\n bytes = toUint8(bytes);\n var fn = le ? 'reduce' : 'reduceRight';\n var obj = bytes[fn] ? bytes[fn] : Array.prototype[fn];\n var number = obj.call(bytes, function (total, byte, i) {\n var exponent = le ? i : Math.abs(i + 1 - bytes.length);\n return total + BigInt(byte) * BYTE_TABLE[exponent];\n }, BigInt(0));\n\n if (signed) {\n var max = BYTE_TABLE[bytes.length] / BigInt(2) - BigInt(1);\n number = BigInt(number);\n\n if (number > max) {\n number -= max;\n number -= max;\n number -= BigInt(2);\n }\n }\n\n return Number(number);\n};\nexport var numberToBytes = function numberToBytes(number, _temp2) {\n var _ref2 = _temp2 === void 0 ? {} : _temp2,\n _ref2$le = _ref2.le,\n le = _ref2$le === void 0 ? false : _ref2$le;\n\n // eslint-disable-next-line\n if (typeof number !== 'bigint' && typeof number !== 'number' || typeof number === 'number' && number !== number) {\n number = 0;\n }\n\n number = BigInt(number);\n var byteCount = countBytes(number);\n var bytes = new Uint8Array(new ArrayBuffer(byteCount));\n\n for (var i = 0; i < byteCount; i++) {\n var byteIndex = le ? i : Math.abs(i + 1 - bytes.length);\n bytes[byteIndex] = Number(number / BYTE_TABLE[i] & BigInt(0xFF));\n\n if (number < 0) {\n bytes[byteIndex] = Math.abs(~bytes[byteIndex]);\n bytes[byteIndex] -= i === 0 ? 1 : 2;\n }\n }\n\n return bytes;\n};\nexport var bytesToString = function bytesToString(bytes) {\n if (!bytes) {\n return '';\n } // TODO: should toUint8 handle cases where we only have 8 bytes\n // but report more since this is a Uint16+ Array?\n\n\n bytes = Array.prototype.slice.call(bytes);\n var string = String.fromCharCode.apply(null, toUint8(bytes));\n\n try {\n return decodeURIComponent(escape(string));\n } catch (e) {// if decodeURIComponent/escape fails, we are dealing with partial\n // or full non string data. Just return the potentially garbled string.\n }\n\n return string;\n};\nexport var stringToBytes = function stringToBytes(string, stringIsBytes) {\n if (typeof string !== 'string' && string && typeof string.toString === 'function') {\n string = string.toString();\n }\n\n if (typeof string !== 'string') {\n return new Uint8Array();\n } // If the string already is bytes, we don't have to do this\n // otherwise we do this so that we split multi length characters\n // into individual bytes\n\n\n if (!stringIsBytes) {\n string = unescape(encodeURIComponent(string));\n }\n\n var view = new Uint8Array(string.length);\n\n for (var i = 0; i < string.length; i++) {\n view[i] = string.charCodeAt(i);\n }\n\n return view;\n};\nexport var concatTypedArrays = function concatTypedArrays() {\n for (var _len = arguments.length, buffers = new Array(_len), _key = 0; _key < _len; _key++) {\n buffers[_key] = arguments[_key];\n }\n\n buffers = buffers.filter(function (b) {\n return b && (b.byteLength || b.length) && typeof b !== 'string';\n });\n\n if (buffers.length <= 1) {\n // for 0 length we will return empty uint8\n // for 1 length we return the first uint8\n return toUint8(buffers[0]);\n }\n\n var totalLen = buffers.reduce(function (total, buf, i) {\n return total + (buf.byteLength || buf.length);\n }, 0);\n var tempBuffer = new Uint8Array(totalLen);\n var offset = 0;\n buffers.forEach(function (buf) {\n buf = toUint8(buf);\n tempBuffer.set(buf, offset);\n offset += buf.byteLength;\n });\n return tempBuffer;\n};\n/**\n * Check if the bytes \"b\" are contained within bytes \"a\".\n *\n * @param {Uint8Array|Array} a\n * Bytes to check in\n *\n * @param {Uint8Array|Array} b\n * Bytes to check for\n *\n * @param {Object} options\n * options\n *\n * @param {Array|Uint8Array} [offset=0]\n * offset to use when looking at bytes in a\n *\n * @param {Array|Uint8Array} [mask=[]]\n * mask to use on bytes before comparison.\n *\n * @return {boolean}\n * If all bytes in b are inside of a, taking into account\n * bit masks.\n */\n\nexport var bytesMatch = function bytesMatch(a, b, _temp3) {\n var _ref3 = _temp3 === void 0 ? {} : _temp3,\n _ref3$offset = _ref3.offset,\n offset = _ref3$offset === void 0 ? 0 : _ref3$offset,\n _ref3$mask = _ref3.mask,\n mask = _ref3$mask === void 0 ? [] : _ref3$mask;\n\n a = toUint8(a);\n b = toUint8(b); // ie 11 does not support uint8 every\n\n var fn = b.every ? b.every : Array.prototype.every;\n return b.length && a.length - offset >= b.length && // ie 11 doesn't support every on uin8\n fn.call(b, function (bByte, i) {\n var aByte = mask[i] ? mask[i] & a[offset + i] : a[offset + i];\n return bByte === aByte;\n });\n};\nexport var sliceBytes = function sliceBytes(src, start, end) {\n if (Uint8Array.prototype.slice) {\n return Uint8Array.prototype.slice.call(src, start, end);\n }\n\n return new Uint8Array(Array.prototype.slice.call(src, start, end));\n};\nexport var reverseBytes = function reverseBytes(src) {\n if (src.reverse) {\n return src.reverse();\n }\n\n return Array.prototype.reverse.call(src);\n};","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring \nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\t\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif(k in entityMap){\n\t\t\treturn entityMap[k]; \n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\t\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\t\t\t\t\t\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(qname, value, startIndex)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t//console.log(attrName,value,start,p)\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t//console.dir(el)\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value.replace(/&#?\\w+;/g,entityReplacer), start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute \n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value) \n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\t\t\t\t\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf('',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\t\t\t\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf('')\n\t\tif(pos',start+4);\n\t\t\t//append comment source.substring(4,end)//\") { // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed time stamp (time stamps must be separated by '-->'): \" +\n oInput);\n }\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\n\nvar ESCAPE = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \"‎\": \"\\u200e\",\n \"‏\": \"\\u200f\",\n \" \": \"\\u00a0\"\n};\n\nvar TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n};\n\nvar TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n};\n\nvar NEEDS_PARENT = {\n rt: \"ruby\"\n};\n\n// Parse content into a document fragment.\nfunction parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n }\n\n // Consume 'n' characters from the input.\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]*>?)?/);\n // If there is some text before the next tag, return it, otherwise return\n // the tag.\n return consume(m[1] ? m[1] : m[2]);\n }\n\n // Unescape a string 's'.\n function unescape1(e) {\n return ESCAPE[e];\n }\n function unescape(s) {\n while ((m = s.match(/&(amp|lt|gt|lrm|rlm|nbsp);/))) {\n s = s.replace(m[0], unescape1);\n }\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] ||\n NEEDS_PARENT[element.localName] === current.localName;\n }\n\n // Create an element for this tag.\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n if (!tagName) {\n return null;\n }\n var element = window.document.createElement(tagName);\n element.localName = tagName;\n var name = TAG_ANNOTATION[type];\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length &&\n tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n }\n // Otherwise just ignore the end tag.\n continue;\n }\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/);\n // If we can't parse the tag, skip to the next tag.\n if (!m) {\n continue;\n }\n // Try to construct an element, and ignore the tag if we couldn't.\n node = createElement(m[1], m[3]);\n if (!node) {\n continue;\n }\n // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n if (!shouldAdd(current, node)) {\n continue;\n }\n // Set the class list (as a list of classes, separated by space).\n if (m[2]) {\n node.className = m[2].substr(1).replace('.', ' ');\n }\n // Append the node to the current node, and enter the scope of the new\n // node.\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n }\n\n // Text nodes are leaf nodes.\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n}\n\n// This is a list of all the Unicode characters that have a strong\n// right-to-left category. What this means is that these characters are\n// written right-to-left for sure. It was generated by pulling all the strong\n// right-to-left characters out of the Unicode data table. That table can\n// found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\nvar strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6],\n [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d],\n [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6],\n [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5],\n [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815],\n [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858],\n [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f],\n [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c],\n [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1],\n [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc],\n [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808],\n [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855],\n [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f],\n [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13],\n [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58],\n [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72],\n [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f],\n [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32],\n [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42],\n [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f],\n [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59],\n [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62],\n [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77],\n [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b],\n [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\nfunction isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n return text;\n }\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n while ((text = nextTextNode(nodeStack))) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n return \"ltr\";\n}\n\nfunction computeLinePos(cue) {\n if (typeof cue.line === \"number\" &&\n (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {\n return cue.line;\n }\n if (!cue.track || !cue.track.textTrackList ||\n !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n return ++count * -1;\n}\n\nfunction StyleBox() {\n}\n\n// Apply styles to a div. If there is no div passed then it defaults to the\n// div on 'this'.\nStyleBox.prototype.applyStyles = function(styles, div) {\n div = div || this.div;\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n};\n\nStyleBox.prototype.formatStyle = function(val, unit) {\n return val === 0 ? 0 : val + unit;\n};\n\n// Constructs the computed display state of the cue (a div). Places the div\n// into the overlay which should be a block level element (usually a div).\nfunction CueStyleBox(window, cue, styleOptions) {\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n var color = \"rgba(255, 255, 255, 1)\";\n var backgroundColor = \"rgba(0, 0, 0, 0.8)\";\n\n if (isIE8) {\n color = \"rgb(255, 255, 255)\";\n backgroundColor = \"rgb(0, 0, 0)\";\n }\n\n StyleBox.call(this);\n this.cue = cue;\n\n // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: color,\n backgroundColor: backgroundColor,\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\"\n };\n\n if (!isIE8) {\n styles.writingMode = cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\";\n styles.unicodeBidi = \"plaintext\";\n }\n this.applyStyles(styles, this.cueDiv);\n\n // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except \"middle\" which is \"center\" in CSS.\n this.div = window.document.createElement(\"div\");\n styles = {\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n\n if (!isIE8) {\n styles.direction = determineBidi(this.cueDiv);\n styles.writingMode = cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\".\n stylesunicodeBidi = \"plaintext\";\n }\n\n this.applyStyles(styles);\n\n this.div.appendChild(this.cueDiv);\n\n // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n var textPos = 0;\n switch (cue.positionAlign) {\n case \"start\":\n textPos = cue.position;\n break;\n case \"middle\":\n textPos = cue.position - (cue.size / 2);\n break;\n case \"end\":\n textPos = cue.position - cue.size;\n break;\n }\n\n // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n });\n // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function(box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n}\nCueStyleBox.prototype = _objCreate(StyleBox.prototype);\nCueStyleBox.prototype.constructor = CueStyleBox;\n\n// Represents the co-ordinates of an Element in a way that we can easily\n// compute things with such as if it overlaps or intersects with another Element.\n// Can initialize it with either a StyleBox or another BoxPosition.\nfunction BoxPosition(obj) {\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&\n rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect();\n // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)\n : 0;\n\n }\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || (top + (obj.height || height));\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n\n if (isIE8 && !this.lineHeight) {\n this.lineHeight = 13;\n }\n}\n\n// Move the box along a particular axis. Optionally pass in an amount to move\n// the box. If no amount is passed then the default is the line height of the\n// box.\nBoxPosition.prototype.move = function(axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n};\n\n// Check if this box overlaps another box, b2.\nBoxPosition.prototype.overlaps = function(b2) {\n return this.left < b2.right &&\n this.right > b2.left &&\n this.top < b2.bottom &&\n this.bottom > b2.top;\n};\n\n// Check if this box overlaps any other boxes in boxes.\nBoxPosition.prototype.overlapsAny = function(boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n return false;\n};\n\n// Check if this box is within another box.\nBoxPosition.prototype.within = function(container) {\n return this.top >= container.top &&\n this.bottom <= container.bottom &&\n this.left >= container.left &&\n this.right <= container.right;\n};\n\n// Check if this box is entirely within the container or it is overlapping\n// on the edge opposite of the axis direction passed. For example, if \"+x\" is\n// passed and the box is overlapping on the left edge of the container, then\n// return true.\nBoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n case \"-x\":\n return this.right > container.right;\n case \"+y\":\n return this.top < container.top;\n case \"-y\":\n return this.bottom > container.bottom;\n }\n};\n\n// Find the percentage of the area that this box is overlapping with another\n// box.\nBoxPosition.prototype.intersectPercentage = function(b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n};\n\n// Convert the positions from this box to CSS compatible positions using\n// the reference container's positions. This has to be done because this\n// box's positions are in reference to the viewport origin, whereas, CSS\n// values are in referecne to their respective edges.\nBoxPosition.prototype.toCSSCompatValues = function(reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n};\n\n// Get an object that represents the box's position without anything extra.\n// Can pass a StyleBox, HTMLElement, or another BoxPositon.\nBoxPosition.getSimpleBoxPosition = function(obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n\n obj = obj.div ? obj.div.getBoundingClientRect() :\n obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || (top + (obj.height || height)),\n width: obj.width || width\n };\n return ret;\n};\n\n// Move a StyleBox to its specified, or next best, position. The containerBox\n// is the box that contains the StyleBox, such as a div. boxPositions are\n// a list of other boxes that the styleBox can't overlap with.\nfunction moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) ||\n (b.within(containerBox) && b.overlapsAny(boxPositions))) {\n b.move(axis[i]);\n }\n // We found a spot where we aren't overlapping anything. This is our\n // best position.\n if (b.within(containerBox)) {\n return b;\n }\n var p = b.intersectPercentage(containerBox);\n // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n }\n // Reset the box position to the specified position.\n b = new BoxPosition(specifiedPosition);\n }\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = [];\n\n // If we have a line number to align the cue to.\n if (cue.snapToLines) {\n var size;\n switch (cue.vertical) {\n case \"\":\n axis = [ \"+y\", \"-y\" ];\n size = \"height\";\n break;\n case \"rl\":\n axis = [ \"+x\", \"-x\" ];\n size = \"width\";\n break;\n case \"lr\":\n axis = [ \"-x\", \"+x\" ];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0];\n\n // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n\n // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n }\n\n // Move the box to the specified position. This may not be its best\n // position.\n boxPosition.move(initialAxis, position);\n\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;\n\n switch (cue.lineAlign) {\n case \"middle\":\n linePos -= (calculatedPercentage / 2);\n break;\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n }\n\n // Apply initial line position to the cue box.\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [ \"+y\", \"-x\", \"+x\", \"-y\" ];\n\n // Get the box position again after we've applied the specified positioning\n // to it.\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n}\n\nfunction WebVTT() {\n // Nothing\n}\n\n// Helper to allow strings to be decoded instead of the default binary utf8 data.\nWebVTT.StringDecoder = function() {\n return {\n decode: function(data) {\n if (!data) {\n return \"\";\n }\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n};\n\nWebVTT.convertCueToDOMTree = function(window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n return parseContent(window, cuetext);\n};\n\nvar FONT_SIZE_PERCENT = 0.05;\nvar FONT_STYLE = \"sans-serif\";\nvar CUE_BACKGROUND_PADDING = \"1.5%\";\n\n// Runs the processing model over the cues and regions passed to it.\n// @param overlay A block level element (usually a div) that the computed cues\n// and regions will be placed into.\nWebVTT.processCues = function(window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n }\n\n // Remove all previous children.\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay);\n\n // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n return false;\n }\n\n // We don't need to recompute the cues' display states. Just reuse them.\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function() {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i];\n\n // Compute the intial position and styles of the cue div.\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div);\n\n // Move the cue div to it's correct line position.\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);\n\n // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n cue.displayState = styleBox.div;\n\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n};\n\nWebVTT.Parser = function(window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n};\n\nWebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function (data) {\n var self = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {stream: true});\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n var line = buffer.substr(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n self.buffer = buffer.substr(pos);\n return line;\n }\n\n // 3.4 WebVTT region and WebVTT region settings syntax\n function parseRegion(input) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n case \"width\":\n settings.percent(k, v);\n break;\n case \"lines\":\n settings.integer(k, v);\n break;\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n if (xy.length !== 2) {\n break;\n }\n // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/);\n\n // Create the region, using default values for any values that were not\n // specified.\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\");\n // Register the region.\n self.onregion && self.onregion(region);\n // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n }\n\n // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n function parseTimestampMap(input) {\n var settings = new Settings();\n\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n\n }\n\n // 5.1 WebVTT file parsing.\n try {\n var line;\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n continue;\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n self.state = \"CUE\";\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /*falls through*/\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e);\n // In case of an error ignore rest of the cue.\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n self.state = \"CUETEXT\";\n continue;\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n self.cue.text += line;\n continue;\n case \"BADCUE\": // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e);\n\n // If we are currently parsing a cue, report what we have.\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n self.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n return this;\n },\n flush: function () {\n var self = this;\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch(e) {\n self.reportOrThrowError(e);\n }\n self.onflush && self.onflush();\n return this;\n }\n};\n\nmodule.exports = WebVTT;\n","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * mux.js\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n'use strict';\nvar Stream = require('../utils/stream.js'),\n CaptionStream = require('./caption-stream'),\n StreamTypes = require('./stream-types'),\n TimestampRolloverStream = require('./timestamp-rollover-stream').TimestampRolloverStream;\n\nvar m2tsStreamTypes = require('./stream-types.js');\n\n// object types\nvar TransportPacketStream, TransportParseStream, ElementaryStream;\n\n// constants\nvar\n MP2T_PACKET_LENGTH = 188, // bytes\n SYNC_BYTE = 0x47;\n\n/**\n * Splits an incoming stream of binary data into MPEG-2 Transport\n * Stream packets.\n */\nTransportPacketStream = function() {\n var\n buffer = new Uint8Array(MP2T_PACKET_LENGTH),\n bytesInBuffer = 0;\n\n TransportPacketStream.prototype.init.call(this);\n\n // Deliver new bytes to the stream.\n\n this.push = function(bytes) {\n var\n startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n everything;\n\n // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n if (bytesInBuffer) {\n everything = new Uint8Array(bytes.byteLength + bytesInBuffer);\n everything.set(buffer.subarray(0, bytesInBuffer));\n everything.set(bytes, bytesInBuffer);\n bytesInBuffer = 0;\n } else {\n everything = bytes;\n }\n\n // While we have enough data for a packet\n while (endIndex < everything.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (everything[startIndex] === SYNC_BYTE && everything[endIndex] === SYNC_BYTE) {\n // We found a packet so emit it and jump one whole packet forward in\n // the stream\n this.trigger('data', everything.subarray(startIndex, endIndex));\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n }\n // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n startIndex++;\n endIndex++;\n }\n\n // If there was some data left over at the end of the segment that couldn't\n // possibly be a whole packet, keep it because it might be the start of a packet\n // that continues in the next segment\n if (startIndex < everything.byteLength) {\n buffer.set(everything.subarray(startIndex), 0);\n bytesInBuffer = everything.byteLength - startIndex;\n }\n };\n\n this.flush = function() {\n // If the buffer contains a whole packet when we are being flushed, emit it\n // and empty the buffer. Otherwise hold onto the data because it may be\n // important for decoding the next segment\n if (bytesInBuffer === MP2T_PACKET_LENGTH && buffer[0] === SYNC_BYTE) {\n this.trigger('data', buffer);\n bytesInBuffer = 0;\n }\n this.trigger('done');\n };\n};\nTransportPacketStream.prototype = new Stream();\n\n/**\n * Accepts an MP2T TransportPacketStream and emits data events with parsed\n * forms of the individual transport stream packets.\n */\nTransportParseStream = function() {\n var parsePsi, parsePat, parsePmt, self;\n TransportParseStream.prototype.init.call(this);\n self = this;\n\n this.packetsWaitingForPmt = [];\n this.programMapTable = undefined;\n\n parsePsi = function(payload, psi) {\n var offset = 0;\n\n // PSI packets may be split into multiple sections and those\n // sections may be split into multiple packets. If a PSI\n // section starts in this packet, the payload_unit_start_indicator\n // will be true and the first byte of the payload will indicate\n // the offset from the current position to the start of the\n // section.\n if (psi.payloadUnitStartIndicator) {\n offset += payload[offset] + 1;\n }\n\n if (psi.type === 'pat') {\n parsePat(payload.subarray(offset), psi);\n } else {\n parsePmt(payload.subarray(offset), psi);\n }\n };\n\n parsePat = function(payload, pat) {\n pat.section_number = payload[7]; // eslint-disable-line camelcase\n pat.last_section_number = payload[8]; // eslint-disable-line camelcase\n\n // skip the PSI header and parse the first PMT entry\n self.pmtPid = (payload[10] & 0x1F) << 8 | payload[11];\n pat.pmtPid = self.pmtPid;\n };\n\n /**\n * Parse out the relevant fields of a Program Map Table (PMT).\n * @param payload {Uint8Array} the PMT-specific portion of an MP2T\n * packet. The first byte in this array should be the table_id\n * field.\n * @param pmt {object} the object that should be decorated with\n * fields parsed from the PMT.\n */\n parsePmt = function(payload, pmt) {\n var sectionLength, tableEnd, programInfoLength, offset;\n\n // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n if (!(payload[5] & 0x01)) {\n return;\n }\n\n // overwrite any existing program map table\n self.programMapTable = {\n video: null,\n audio: null,\n 'timed-metadata': {}\n };\n\n // the mapping table ends at the end of the current section\n sectionLength = (payload[1] & 0x0f) << 8 | payload[2];\n tableEnd = 3 + sectionLength - 4;\n\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n programInfoLength = (payload[10] & 0x0f) << 8 | payload[11];\n\n // advance the offset to the first entry in the mapping table\n offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n var streamType = payload[offset];\n var pid = (payload[offset + 1] & 0x1F) << 8 | payload[offset + 2];\n\n // only map a single elementary_pid for audio and video stream types\n // TODO: should this be done for metadata too? for now maintain behavior of\n // multiple metadata streams\n if (streamType === StreamTypes.H264_STREAM_TYPE &&\n self.programMapTable.video === null) {\n self.programMapTable.video = pid;\n } else if (streamType === StreamTypes.ADTS_STREAM_TYPE &&\n self.programMapTable.audio === null) {\n self.programMapTable.audio = pid;\n } else if (streamType === StreamTypes.METADATA_STREAM_TYPE) {\n // map pid to stream type for metadata streams\n self.programMapTable['timed-metadata'][pid] = streamType;\n }\n\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += ((payload[offset + 3] & 0x0F) << 8 | payload[offset + 4]) + 5;\n }\n\n // record the map on the packet as well\n pmt.programMapTable = self.programMapTable;\n };\n\n /**\n * Deliver a new MP2T packet to the stream.\n */\n this.push = function(packet) {\n var\n result = {},\n offset = 4;\n\n result.payloadUnitStartIndicator = !!(packet[1] & 0x40);\n\n // pid is a 13-bit field starting at the last bit of packet[1]\n result.pid = packet[1] & 0x1f;\n result.pid <<= 8;\n result.pid |= packet[2];\n\n // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n if (((packet[3] & 0x30) >>> 4) > 0x01) {\n offset += packet[offset] + 1;\n }\n\n // parse the rest of the packet based on the type\n if (result.pid === 0) {\n result.type = 'pat';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result);\n } else if (result.pid === this.pmtPid) {\n result.type = 'pmt';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result);\n\n // if there are any packets waiting for a PMT to be found, process them now\n while (this.packetsWaitingForPmt.length) {\n this.processPes_.apply(this, this.packetsWaitingForPmt.shift());\n }\n } else if (this.programMapTable === undefined) {\n // When we have not seen a PMT yet, defer further processing of\n // PES packets until one has been parsed\n this.packetsWaitingForPmt.push([packet, offset, result]);\n } else {\n this.processPes_(packet, offset, result);\n }\n };\n\n this.processPes_ = function(packet, offset, result) {\n // set the appropriate stream type\n if (result.pid === this.programMapTable.video) {\n result.streamType = StreamTypes.H264_STREAM_TYPE;\n } else if (result.pid === this.programMapTable.audio) {\n result.streamType = StreamTypes.ADTS_STREAM_TYPE;\n } else {\n // if not video or audio, it is timed-metadata or unknown\n // if unknown, streamType will be undefined\n result.streamType = this.programMapTable['timed-metadata'][result.pid];\n }\n\n result.type = 'pes';\n result.data = packet.subarray(offset);\n\n this.trigger('data', result);\n };\n\n};\nTransportParseStream.prototype = new Stream();\nTransportParseStream.STREAM_TYPES = {\n h264: 0x1b,\n adts: 0x0f\n};\n\n/**\n * Reconsistutes program elementary stream (PES) packets from parsed\n * transport stream packets. That is, if you pipe an\n * mp2t.TransportParseStream into a mp2t.ElementaryStream, the output\n * events will be events which capture the bytes for individual PES\n * packets plus relevant metadata that has been extracted from the\n * container.\n */\nElementaryStream = function() {\n var\n self = this,\n // PES packet fragments\n video = {\n data: [],\n size: 0\n },\n audio = {\n data: [],\n size: 0\n },\n timedMetadata = {\n data: [],\n size: 0\n },\n parsePes = function(payload, pes) {\n var ptsDtsFlags;\n\n // get the packet length, this will be 0 for video\n pes.packetLength = 6 + ((payload[4] << 8) | payload[5]);\n\n // find out if this packets starts a new keyframe\n pes.dataAlignmentIndicator = (payload[6] & 0x04) !== 0;\n // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n ptsDtsFlags = payload[7];\n\n // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n if (ptsDtsFlags & 0xC0) {\n // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n pes.pts = (payload[9] & 0x0E) << 27 |\n (payload[10] & 0xFF) << 20 |\n (payload[11] & 0xFE) << 12 |\n (payload[12] & 0xFF) << 5 |\n (payload[13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n pes.pts += (payload[13] & 0x06) >>> 1; // OR by the two LSBs\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n pes.dts = (payload[14] & 0x0E) << 27 |\n (payload[15] & 0xFF) << 20 |\n (payload[16] & 0xFE) << 12 |\n (payload[17] & 0xFF) << 5 |\n (payload[18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n pes.dts += (payload[18] & 0x06) >>> 1; // OR by the two LSBs\n }\n }\n // the data section starts immediately after the PES header.\n // pes_header_data_length specifies the number of header bytes\n // that follow the last byte of the field.\n pes.data = payload.subarray(9 + payload[8]);\n },\n flushStream = function(stream, type, forceFlush) {\n var\n packetData = new Uint8Array(stream.size),\n event = {\n type: type\n },\n i = 0,\n offset = 0,\n packetFlushable = false,\n fragment;\n\n // do nothing if there is not enough buffered data for a complete\n // PES header\n if (!stream.data.length || stream.size < 9) {\n return;\n }\n event.trackId = stream.data[0].pid;\n\n // reassemble the packet\n for (i = 0; i < stream.data.length; i++) {\n fragment = stream.data[i];\n\n packetData.set(fragment.data, offset);\n offset += fragment.data.byteLength;\n }\n\n // parse assembled packet's PES header\n parsePes(packetData, event);\n\n // non-video PES packets MUST have a non-zero PES_packet_length\n // check that there is enough stream data to fill the packet\n packetFlushable = type === 'video' || event.packetLength <= stream.size;\n\n // flush pending packets if the conditions are right\n if (forceFlush || packetFlushable) {\n stream.size = 0;\n stream.data.length = 0;\n }\n\n // only emit packets that are complete. this is to avoid assembling\n // incomplete PES packets due to poor segmentation\n if (packetFlushable) {\n self.trigger('data', event);\n }\n };\n\n ElementaryStream.prototype.init.call(this);\n\n this.push = function(data) {\n ({\n pat: function() {\n // we have to wait for the PMT to arrive as well before we\n // have any meaningful metadata\n },\n pes: function() {\n var stream, streamType;\n\n switch (data.streamType) {\n case StreamTypes.H264_STREAM_TYPE:\n case m2tsStreamTypes.H264_STREAM_TYPE:\n stream = video;\n streamType = 'video';\n break;\n case StreamTypes.ADTS_STREAM_TYPE:\n stream = audio;\n streamType = 'audio';\n break;\n case StreamTypes.METADATA_STREAM_TYPE:\n stream = timedMetadata;\n streamType = 'timed-metadata';\n break;\n default:\n // ignore unknown stream types\n return;\n }\n\n // if a new packet is starting, we can flush the completed\n // packet\n if (data.payloadUnitStartIndicator) {\n flushStream(stream, streamType, true);\n }\n\n // buffer this fragment until we are sure we've received the\n // complete payload\n stream.data.push(data);\n stream.size += data.data.byteLength;\n },\n pmt: function() {\n var\n event = {\n type: 'metadata',\n tracks: []\n },\n programMapTable = data.programMapTable;\n\n // translate audio and video streams to tracks\n if (programMapTable.video !== null) {\n event.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.video,\n codec: 'avc',\n type: 'video'\n });\n }\n if (programMapTable.audio !== null) {\n event.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.audio,\n codec: 'adts',\n type: 'audio'\n });\n }\n\n self.trigger('data', event);\n }\n })[data.type]();\n };\n\n /**\n * Flush any remaining input. Video PES packets may be of variable\n * length. Normally, the start of a new video packet can trigger the\n * finalization of the previous packet. That is not possible if no\n * more video is forthcoming, however. In that case, some other\n * mechanism (like the end of the file) has to be employed. When it is\n * clear that no additional data is forthcoming, calling this method\n * will flush the buffered packets.\n */\n this.flush = function() {\n // !!THIS ORDER IS IMPORTANT!!\n // video first then audio\n flushStream(video, 'video');\n flushStream(audio, 'audio');\n flushStream(timedMetadata, 'timed-metadata');\n this.trigger('done');\n };\n};\nElementaryStream.prototype = new Stream();\n\nvar m2ts = {\n PAT_PID: 0x0000,\n MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH,\n TransportPacketStream: TransportPacketStream,\n TransportParseStream: TransportParseStream,\n ElementaryStream: ElementaryStream,\n TimestampRolloverStream: TimestampRolloverStream,\n CaptionStream: CaptionStream.CaptionStream,\n Cea608Stream: CaptionStream.Cea608Stream,\n MetadataStream: require('./metadata-stream')\n};\n\nfor (var type in StreamTypes) {\n if (StreamTypes.hasOwnProperty(type)) {\n m2ts[type] = StreamTypes[type];\n }\n}\n\nmodule.exports = m2ts;\n","'use strict';\n\nmodule.exports = {\n H264_STREAM_TYPE: 0x1B,\n ADTS_STREAM_TYPE: 0x0F,\n METADATA_STREAM_TYPE: 0x15\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","/**\n * @file vtt-segment-loader.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _segmentLoader = require('./segment-loader');\n\nvar _segmentLoader2 = _interopRequireDefault(_segmentLoader);\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _videojsContribMediaSourcesEs5RemoveCuesFromTrackJs = require('videojs-contrib-media-sources/es5/remove-cues-from-track.js');\n\nvar _videojsContribMediaSourcesEs5RemoveCuesFromTrackJs2 = _interopRequireDefault(_videojsContribMediaSourcesEs5RemoveCuesFromTrackJs);\n\nvar _binUtils = require('./bin-utils');\n\nvar VTT_LINE_TERMINATORS = new Uint8Array('\\n\\n'.split('').map(function (char) {\n return char.charCodeAt(0);\n}));\n\nvar uintToString = function uintToString(uintArray) {\n return String.fromCharCode.apply(null, uintArray);\n};\n\n/**\n * An object that manages segment loading and appending.\n *\n * @class VTTSegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */\n\nvar VTTSegmentLoader = (function (_SegmentLoader) {\n _inherits(VTTSegmentLoader, _SegmentLoader);\n\n function VTTSegmentLoader(settings) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, VTTSegmentLoader);\n\n _get(Object.getPrototypeOf(VTTSegmentLoader.prototype), 'constructor', this).call(this, settings, options);\n\n // SegmentLoader requires a MediaSource be specified or it will throw an error;\n // however, VTTSegmentLoader has no need of a media source, so delete the reference\n this.mediaSource_ = null;\n\n this.subtitlesTrack_ = null;\n }\n\n /**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */\n\n _createClass(VTTSegmentLoader, [{\n key: 'buffered_',\n value: function buffered_() {\n if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues.length) {\n return _videoJs2['default'].createTimeRanges();\n }\n\n var cues = this.subtitlesTrack_.cues;\n var start = cues[0].startTime;\n var end = cues[cues.length - 1].startTime;\n\n return _videoJs2['default'].createTimeRanges([[start, end]]);\n }\n\n /**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {Boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */\n }, {\n key: 'initSegment',\n value: function initSegment(map) {\n var set = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n if (!map) {\n return null;\n }\n\n var id = (0, _binUtils.initSegmentId)(map);\n var storedMap = this.initSegments_[id];\n\n if (set && !storedMap && map.bytes) {\n // append WebVTT line terminators to the media initialization segment if it exists\n // to follow the WebVTT spec (https://w3c.github.io/webvtt/#file-structure) that\n // requires two or more WebVTT line terminators between the WebVTT header and the\n // rest of the file\n var combinedByteLength = VTT_LINE_TERMINATORS.byteLength + map.bytes.byteLength;\n var combinedSegment = new Uint8Array(combinedByteLength);\n\n combinedSegment.set(map.bytes);\n combinedSegment.set(VTT_LINE_TERMINATORS, map.bytes.byteLength);\n\n this.initSegments_[id] = storedMap = {\n resolvedUri: map.resolvedUri,\n byterange: map.byterange,\n bytes: combinedSegment\n };\n }\n\n return storedMap || map;\n }\n\n /**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {Boolean} True if the all configuration is ready for loading\n * @private\n */\n }, {\n key: 'couldBeginLoading_',\n value: function couldBeginLoading_() {\n return this.playlist_ && this.subtitlesTrack_ && !this.paused();\n }\n\n /**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */\n }, {\n key: 'init_',\n value: function init_() {\n this.state = 'READY';\n this.resetEverything();\n return this.monitorBuffer_();\n }\n\n /**\n * Set a subtitle track on the segment loader to add subtitles to\n *\n * @param {TextTrack=} track\n * The text track to add loaded subtitles to\n * @return {TextTrack}\n * Returns the subtitles track\n */\n }, {\n key: 'track',\n value: function track(_track) {\n if (typeof _track === 'undefined') {\n return this.subtitlesTrack_;\n }\n\n this.subtitlesTrack_ = _track;\n\n // if we were unpaused but waiting for a sourceUpdater, start\n // buffering now\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n this.init_();\n }\n\n return this.subtitlesTrack_;\n }\n\n /**\n * Remove any data in the source buffer between start and end times\n * @param {Number} start - the start time of the region to remove from the buffer\n * @param {Number} end - the end time of the region to remove from the buffer\n */\n }, {\n key: 'remove',\n value: function remove(start, end) {\n (0, _videojsContribMediaSourcesEs5RemoveCuesFromTrackJs2['default'])(start, end, this.subtitlesTrack_);\n }\n\n /**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */\n }, {\n key: 'fillBuffer_',\n value: function fillBuffer_() {\n var _this = this;\n\n if (!this.syncPoint_) {\n this.syncPoint_ = this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_());\n }\n\n // see if we need to begin loading immediately\n var segmentInfo = this.checkBuffer_(this.buffered_(), this.playlist_, this.mediaIndex, this.hasPlayed_(), this.currentTime_(), this.syncPoint_);\n\n segmentInfo = this.skipEmptySegments_(segmentInfo);\n\n if (!segmentInfo) {\n return;\n }\n\n if (this.syncController_.timestampOffsetForTimeline(segmentInfo.timeline) === null) {\n // We don't have the timestamp offset that we need to sync subtitles.\n // Rerun on a timestamp offset or user interaction.\n var checkTimestampOffset = function checkTimestampOffset() {\n _this.state = 'READY';\n if (!_this.paused()) {\n // if not paused, queue a buffer check as soon as possible\n _this.monitorBuffer_();\n }\n };\n\n this.syncController_.one('timestampoffset', checkTimestampOffset);\n this.state = 'WAITING_ON_TIMELINE';\n return;\n }\n\n this.loadSegment_(segmentInfo);\n }\n\n /**\n * Prevents the segment loader from requesting segments we know contain no subtitles\n * by walking forward until we find the next segment that we don't know whether it is\n * empty or not.\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @return {Object}\n * a segment info object that describes the current segment\n */\n }, {\n key: 'skipEmptySegments_',\n value: function skipEmptySegments_(segmentInfo) {\n while (segmentInfo && segmentInfo.segment.empty) {\n segmentInfo = this.generateSegmentInfo_(segmentInfo.playlist, segmentInfo.mediaIndex + 1, segmentInfo.startOfSegment + segmentInfo.duration, segmentInfo.isSyncRequest);\n }\n return segmentInfo;\n }\n\n /**\n * append a decrypted segement to the SourceBuffer through a SourceUpdater\n *\n * @private\n */\n }, {\n key: 'handleSegment_',\n value: function handleSegment_() {\n var _this2 = this;\n\n if (!this.pendingSegment_ || !this.subtitlesTrack_) {\n this.state = 'READY';\n return;\n }\n\n this.state = 'APPENDING';\n\n var segmentInfo = this.pendingSegment_;\n var segment = segmentInfo.segment;\n\n // Make sure that vttjs has loaded, otherwise, wait till it finished loading\n if (typeof _globalWindow2['default'].WebVTT !== 'function' && this.subtitlesTrack_ && this.subtitlesTrack_.tech_) {\n var _ret = (function () {\n\n var loadHandler = function loadHandler() {\n _this2.handleSegment_();\n };\n\n _this2.state = 'WAITING_ON_VTTJS';\n _this2.subtitlesTrack_.tech_.one('vttjsloaded', loadHandler);\n _this2.subtitlesTrack_.tech_.one('vttjserror', function () {\n _this2.subtitlesTrack_.tech_.off('vttjsloaded', loadHandler);\n _this2.error({\n message: 'Error loading vtt.js'\n });\n _this2.state = 'READY';\n _this2.pause();\n _this2.trigger('error');\n });\n\n return {\n v: undefined\n };\n })();\n\n if (typeof _ret === 'object') return _ret.v;\n }\n\n segment.requested = true;\n\n try {\n this.parseVTTCues_(segmentInfo);\n } catch (e) {\n this.error({\n message: e.message\n });\n this.state = 'READY';\n this.pause();\n return this.trigger('error');\n }\n\n this.updateTimeMapping_(segmentInfo, this.syncController_.timelines[segmentInfo.timeline], this.playlist_);\n\n if (segmentInfo.isSyncRequest) {\n this.trigger('syncinfoupdate');\n this.pendingSegment_ = null;\n this.state = 'READY';\n return;\n }\n\n segmentInfo.byteLength = segmentInfo.bytes.byteLength;\n\n this.mediaSecondsLoaded += segment.duration;\n\n if (segmentInfo.cues.length) {\n // remove any overlapping cues to prevent doubling\n this.remove(segmentInfo.cues[0].endTime, segmentInfo.cues[segmentInfo.cues.length - 1].endTime);\n }\n\n segmentInfo.cues.forEach(function (cue) {\n _this2.subtitlesTrack_.addCue(cue);\n });\n\n this.handleUpdateEnd_();\n }\n\n /**\n * Uses the WebVTT parser to parse the segment response\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @private\n */\n }, {\n key: 'parseVTTCues_',\n value: function parseVTTCues_(segmentInfo) {\n var decoder = undefined;\n var decodeBytesToString = false;\n\n if (typeof _globalWindow2['default'].TextDecoder === 'function') {\n decoder = new _globalWindow2['default'].TextDecoder('utf8');\n } else {\n decoder = _globalWindow2['default'].WebVTT.StringDecoder();\n decodeBytesToString = true;\n }\n\n var parser = new _globalWindow2['default'].WebVTT.Parser(_globalWindow2['default'], _globalWindow2['default'].vttjs, decoder);\n\n segmentInfo.cues = [];\n segmentInfo.timestampmap = { MPEGTS: 0, LOCAL: 0 };\n\n parser.oncue = segmentInfo.cues.push.bind(segmentInfo.cues);\n parser.ontimestampmap = function (map) {\n return segmentInfo.timestampmap = map;\n };\n parser.onparsingerror = function (error) {\n _videoJs2['default'].log.warn('Error encountered when parsing cues: ' + error.message);\n };\n\n if (segmentInfo.segment.map) {\n var mapData = segmentInfo.segment.map.bytes;\n\n if (decodeBytesToString) {\n mapData = uintToString(mapData);\n }\n\n parser.parse(mapData);\n }\n\n var segmentData = segmentInfo.bytes;\n\n if (decodeBytesToString) {\n segmentData = uintToString(segmentData);\n }\n\n parser.parse(segmentData);\n parser.flush();\n }\n\n /**\n * Updates the start and end times of any cues parsed by the WebVTT parser using\n * the information parsed from the X-TIMESTAMP-MAP header and a TS to media time mapping\n * from the SyncController\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @param {Object} mappingObj\n * object containing a mapping from TS to media time\n * @param {Object} playlist\n * the playlist object containing the segment\n * @private\n */\n }, {\n key: 'updateTimeMapping_',\n value: function updateTimeMapping_(segmentInfo, mappingObj, playlist) {\n var segment = segmentInfo.segment;\n\n if (!mappingObj) {\n // If the sync controller does not have a mapping of TS to Media Time for the\n // timeline, then we don't have enough information to update the cue\n // start/end times\n return;\n }\n\n if (!segmentInfo.cues.length) {\n // If there are no cues, we also do not have enough information to figure out\n // segment timing. Mark that the segment contains no cues so we don't re-request\n // an empty segment.\n segment.empty = true;\n return;\n }\n\n var timestampmap = segmentInfo.timestampmap;\n var diff = timestampmap.MPEGTS / 90000 - timestampmap.LOCAL + mappingObj.mapping;\n\n segmentInfo.cues.forEach(function (cue) {\n // First convert cue time to TS time using the timestamp-map provided within the vtt\n cue.startTime += diff;\n cue.endTime += diff;\n });\n\n if (!playlist.syncInfo) {\n var firstStart = segmentInfo.cues[0].startTime;\n var lastStart = segmentInfo.cues[segmentInfo.cues.length - 1].startTime;\n\n playlist.syncInfo = {\n mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex,\n time: Math.min(firstStart, lastStart - segment.duration)\n };\n }\n }\n }]);\n\n return VTTSegmentLoader;\n})(_segmentLoader2['default']);\n\nexports['default'] = VTTSegmentLoader;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @file stream.js\n */\n/**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\nvar Stream = function () {\n function Stream() {\n _classCallCheck(this, Stream);\n\n this.listeners = {};\n }\n\n /**\n * Add a listener for a specified event type.\n *\n * @param {String} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n\n _createClass(Stream, [{\n key: 'on',\n value: function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n this.listeners[type].push(listener);\n }\n\n /**\n * Remove a listener for a specified event type.\n *\n * @param {String} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {Boolean} if we could turn it off or not\n */\n\n }, {\n key: 'off',\n value: function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n\n var index = this.listeners[type].indexOf(listener);\n\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {String} type the event name\n */\n\n }, {\n key: 'trigger',\n value: function trigger(type) {\n var callbacks = this.listeners[type];\n var i = void 0;\n var length = void 0;\n var args = void 0;\n\n if (!callbacks) {\n return;\n }\n // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n if (arguments.length === 2) {\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n args = Array.prototype.slice.call(arguments, 1);\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n }\n\n /**\n * Destroys the stream and cleans up.\n */\n\n }, {\n key: 'dispose',\n value: function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n\n }, {\n key: 'pipe',\n value: function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n }\n }]);\n\n return Stream;\n}();\n\nexports['default'] = Stream;","var fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n","/**\n * mux.js\n *\n * Copyright (c) 2016 Brightcove\n * All rights reserved.\n *\n * Parse mpeg2 transport stream packets to extract basic timing information\n */\n'use strict';\n\nvar StreamTypes = require('../m2ts/stream-types.js');\nvar handleRollover = require('../m2ts/timestamp-rollover-stream.js').handleRollover;\nvar probe = {};\nprobe.ts = require('../m2ts/probe.js');\nprobe.aac = require('../aac/probe.js');\n\n\nvar\n PES_TIMESCALE = 90000,\n MP2T_PACKET_LENGTH = 188, // bytes\n SYNC_BYTE = 0x47;\n\nvar isLikelyAacData = function(data) {\n if ((data[0] === 'I'.charCodeAt(0)) &&\n (data[1] === 'D'.charCodeAt(0)) &&\n (data[2] === '3'.charCodeAt(0))) {\n return true;\n }\n return false;\n};\n\n/**\n * walks through segment data looking for pat and pmt packets to parse out\n * program map table information\n */\nvar parsePsi_ = function(bytes, pmt) {\n var\n startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet, type;\n\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pat':\n if (!pmt.pid) {\n pmt.pid = probe.ts.parsePat(packet);\n }\n break;\n case 'pmt':\n if (!pmt.table) {\n pmt.table = probe.ts.parsePmt(packet);\n }\n break;\n default:\n break;\n }\n\n // Found the pat and pmt, we can stop walking the segment\n if (pmt.pid && pmt.table) {\n return;\n }\n\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n }\n\n // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n startIndex++;\n endIndex++;\n }\n};\n\n/**\n * walks through the segment data from the start and end to get timing information\n * for the first and last audio pes packets\n */\nvar parseAudioPes_ = function(bytes, pmt, result) {\n var\n startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet, type, pesType, pusi, parsed;\n\n var endLoop = false;\n\n // Start walking from start of segment to get first audio packet\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n break;\n default:\n break;\n }\n\n if (endLoop) {\n break;\n }\n\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n }\n\n // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n startIndex++;\n endIndex++;\n }\n\n // Start walking from end of segment to get last audio packet\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n break;\n default:\n break;\n }\n\n if (endLoop) {\n break;\n }\n\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n }\n\n // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n startIndex--;\n endIndex--;\n }\n};\n\n/**\n * walks through the segment data from the start and end to get timing information\n * for the first and last video pes packets as well as timing information for the first\n * key frame.\n */\nvar parseVideoPes_ = function(bytes, pmt, result) {\n var\n startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet, type, pesType, pusi, parsed, frame, i, pes;\n\n var endLoop = false;\n\n var currentFrame = {\n data: [],\n size: 0\n };\n\n // Start walking from start of segment to get first video packet\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'video') {\n if (pusi && !endLoop) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n if (!result.firstKeyFrame) {\n if (pusi) {\n if (currentFrame.size !== 0) {\n frame = new Uint8Array(currentFrame.size);\n i = 0;\n while (currentFrame.data.length) {\n pes = currentFrame.data.shift();\n frame.set(pes, i);\n i += pes.byteLength;\n }\n if (probe.ts.videoPacketContainsKeyFrame(frame)) {\n result.firstKeyFrame = probe.ts.parsePesTime(frame);\n result.firstKeyFrame.type = 'video';\n }\n currentFrame.size = 0;\n }\n }\n currentFrame.data.push(packet);\n currentFrame.size += packet.byteLength;\n }\n }\n break;\n default:\n break;\n }\n\n if (endLoop && result.firstKeyFrame) {\n break;\n }\n\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n }\n\n // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n startIndex++;\n endIndex++;\n }\n\n // Start walking from end of segment to get last video packet\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'video' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n break;\n default:\n break;\n }\n\n if (endLoop) {\n break;\n }\n\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n }\n\n // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n startIndex--;\n endIndex--;\n }\n};\n\n/**\n * Adjusts the timestamp information for the segment to account for\n * rollover and convert to seconds based on pes packet timescale (90khz clock)\n */\nvar adjustTimestamp_ = function(segmentInfo, baseTimestamp) {\n if (segmentInfo.audio && segmentInfo.audio.length) {\n var audioBaseTimestamp = baseTimestamp;\n if (typeof audioBaseTimestamp === 'undefined') {\n audioBaseTimestamp = segmentInfo.audio[0].dts;\n }\n segmentInfo.audio.forEach(function(info) {\n info.dts = handleRollover(info.dts, audioBaseTimestamp);\n info.pts = handleRollover(info.pts, audioBaseTimestamp);\n // time in seconds\n info.dtsTime = info.dts / PES_TIMESCALE;\n info.ptsTime = info.pts / PES_TIMESCALE;\n });\n }\n\n if (segmentInfo.video && segmentInfo.video.length) {\n var videoBaseTimestamp = baseTimestamp;\n if (typeof videoBaseTimestamp === 'undefined') {\n videoBaseTimestamp = segmentInfo.video[0].dts;\n }\n segmentInfo.video.forEach(function(info) {\n info.dts = handleRollover(info.dts, videoBaseTimestamp);\n info.pts = handleRollover(info.pts, videoBaseTimestamp);\n // time in seconds\n info.dtsTime = info.dts / PES_TIMESCALE;\n info.ptsTime = info.pts / PES_TIMESCALE;\n });\n if (segmentInfo.firstKeyFrame) {\n var frame = segmentInfo.firstKeyFrame;\n frame.dts = handleRollover(frame.dts, videoBaseTimestamp);\n frame.pts = handleRollover(frame.pts, videoBaseTimestamp);\n // time in seconds\n frame.dtsTime = frame.dts / PES_TIMESCALE;\n frame.ptsTime = frame.dts / PES_TIMESCALE;\n }\n }\n};\n\n/**\n * inspects the aac data stream for start and end time information\n */\nvar inspectAac_ = function(bytes) {\n var\n endLoop = false,\n audioCount = 0,\n sampleRate = null,\n timestamp = null,\n frameSize = 0,\n byteIndex = 0,\n packet;\n\n while (bytes.length - byteIndex >= 3) {\n var type = probe.aac.parseType(bytes, byteIndex);\n switch (type) {\n case 'timed-metadata':\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (bytes.length - byteIndex < 10) {\n endLoop = true;\n break;\n }\n\n frameSize = probe.aac.parseId3TagSize(bytes, byteIndex);\n\n // Exit early if we don't have enough in the buffer\n // to emit a full packet\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n if (timestamp === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n timestamp = probe.aac.parseAacTimestamp(packet);\n }\n byteIndex += frameSize;\n break;\n case 'audio':\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (bytes.length - byteIndex < 7) {\n endLoop = true;\n break;\n }\n\n frameSize = probe.aac.parseAdtsSize(bytes, byteIndex);\n\n // Exit early if we don't have enough in the buffer\n // to emit a full packet\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n if (sampleRate === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n sampleRate = probe.aac.parseSampleRate(packet);\n }\n audioCount++;\n byteIndex += frameSize;\n break;\n default:\n byteIndex++;\n break;\n }\n if (endLoop) {\n return null;\n }\n }\n if (sampleRate === null || timestamp === null) {\n return null;\n }\n\n var audioTimescale = PES_TIMESCALE / sampleRate;\n\n var result = {\n audio: [\n {\n type: 'audio',\n dts: timestamp,\n pts: timestamp\n },\n {\n type: 'audio',\n dts: timestamp + (audioCount * 1024 * audioTimescale),\n pts: timestamp + (audioCount * 1024 * audioTimescale)\n }\n ]\n };\n\n return result;\n};\n\n/**\n * inspects the transport stream segment data for start and end time information\n * of the audio and video tracks (when present) as well as the first key frame's\n * start time.\n */\nvar inspectTs_ = function(bytes) {\n var pmt = {\n pid: null,\n table: null\n };\n\n var result = {};\n\n parsePsi_(bytes, pmt);\n\n for (var pid in pmt.table) {\n if (pmt.table.hasOwnProperty(pid)) {\n var type = pmt.table[pid];\n switch (type) {\n case StreamTypes.H264_STREAM_TYPE:\n result.video = [];\n parseVideoPes_(bytes, pmt, result);\n if (result.video.length === 0) {\n delete result.video;\n }\n break;\n case StreamTypes.ADTS_STREAM_TYPE:\n result.audio = [];\n parseAudioPes_(bytes, pmt, result);\n if (result.audio.length === 0) {\n delete result.audio;\n }\n break;\n default:\n break;\n }\n }\n }\n return result;\n};\n\n/**\n * Inspects segment byte data and returns an object with start and end timing information\n *\n * @param {Uint8Array} bytes The segment byte data\n * @param {Number} baseTimestamp Relative reference timestamp used when adjusting frame\n * timestamps for rollover. This value must be in 90khz clock.\n * @return {Object} Object containing start and end frame timing info of segment.\n */\nvar inspect = function(bytes, baseTimestamp) {\n var isAacData = isLikelyAacData(bytes);\n\n var result;\n\n if (isAacData) {\n result = inspectAac_(bytes);\n } else {\n result = inspectTs_(bytes);\n }\n\n if (!result || (!result.audio && !result.video)) {\n return null;\n }\n\n adjustTimestamp_(result, baseTimestamp);\n\n return result;\n};\n\nmodule.exports = {\n inspect: inspect\n};\n","/*\n * pkcs7.pad\n * https://github.com/brightcove/pkcs7\n *\n * Copyright (c) 2014 Brightcove\n * Licensed under the apache2 license.\n */\n\n'use strict';\n\nvar PADDING;\n\n/**\n * Returns a new Uint8Array that is padded with PKCS#7 padding.\n * @param plaintext {Uint8Array} the input bytes before encryption\n * @return {Uint8Array} the padded bytes\n * @see http://tools.ietf.org/html/rfc5652\n */\nmodule.exports = function pad(plaintext) {\n var padding = PADDING[(plaintext.byteLength % 16) || 0],\n result = new Uint8Array(plaintext.byteLength + padding.length);\n result.set(plaintext);\n result.set(padding, plaintext.byteLength);\n return result;\n};\n\n// pre-define the padding values\nPADDING = [\n [16, 16, 16, 16,\n 16, 16, 16, 16,\n 16, 16, 16, 16,\n 16, 16, 16, 16],\n\n [15, 15, 15, 15,\n 15, 15, 15, 15,\n 15, 15, 15, 15,\n 15, 15, 15],\n\n [14, 14, 14, 14,\n 14, 14, 14, 14,\n 14, 14, 14, 14,\n 14, 14],\n\n [13, 13, 13, 13,\n 13, 13, 13, 13,\n 13, 13, 13, 13,\n 13],\n\n [12, 12, 12, 12,\n 12, 12, 12, 12,\n 12, 12, 12, 12],\n\n [11, 11, 11, 11,\n 11, 11, 11, 11,\n 11, 11, 11],\n\n [10, 10, 10, 10,\n 10, 10, 10, 10,\n 10, 10],\n\n [9, 9, 9, 9,\n 9, 9, 9, 9,\n 9],\n\n [8, 8, 8, 8,\n 8, 8, 8, 8],\n\n [7, 7, 7, 7,\n 7, 7, 7],\n\n [6, 6, 6, 6,\n 6, 6],\n\n [5, 5, 5, 5,\n 5],\n\n [4, 4, 4, 4],\n\n [3, 3, 3],\n\n [2, 2],\n\n [1]\n];\n","/**\n * @file source-updater.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar noop = function noop() {};\n\n/**\n * A queue of callbacks to be serialized and applied when a\n * MediaSource and its associated SourceBuffers are not in the\n * updating state. It is used by the segment loader to update the\n * underlying SourceBuffers when new data is loaded, for instance.\n *\n * @class SourceUpdater\n * @param {MediaSource} mediaSource the MediaSource to create the\n * SourceBuffer from\n * @param {String} mimeType the desired MIME type of the underlying\n * SourceBuffer\n */\n\nvar SourceUpdater = (function () {\n function SourceUpdater(mediaSource, mimeType) {\n var _this = this;\n\n _classCallCheck(this, SourceUpdater);\n\n var createSourceBuffer = function createSourceBuffer() {\n _this.sourceBuffer_ = mediaSource.addSourceBuffer(mimeType);\n\n // run completion handlers and process callbacks as updateend\n // events fire\n _this.onUpdateendCallback_ = function () {\n var pendingCallback = _this.pendingCallback_;\n\n _this.pendingCallback_ = null;\n\n if (pendingCallback) {\n pendingCallback();\n }\n\n _this.runCallback_();\n };\n\n _this.sourceBuffer_.addEventListener('updateend', _this.onUpdateendCallback_);\n\n _this.runCallback_();\n };\n\n this.callbacks_ = [];\n this.pendingCallback_ = null;\n this.timestampOffset_ = 0;\n this.mediaSource = mediaSource;\n this.processedAppend_ = false;\n\n if (mediaSource.readyState === 'closed') {\n mediaSource.addEventListener('sourceopen', createSourceBuffer);\n } else {\n createSourceBuffer();\n }\n }\n\n /**\n * Aborts the current segment and resets the segment parser.\n *\n * @param {Function} done function to call when done\n * @see http://w3c.github.io/media-source/#widl-SourceBuffer-abort-void\n */\n\n _createClass(SourceUpdater, [{\n key: 'abort',\n value: function abort(done) {\n var _this2 = this;\n\n if (this.processedAppend_) {\n this.queueCallback_(function () {\n _this2.sourceBuffer_.abort();\n }, done);\n }\n }\n\n /**\n * Queue an update to append an ArrayBuffer.\n *\n * @param {ArrayBuffer} bytes\n * @param {Function} done the function to call when done\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-appendBuffer-void-ArrayBuffer-data\n */\n }, {\n key: 'appendBuffer',\n value: function appendBuffer(bytes, done) {\n var _this3 = this;\n\n this.processedAppend_ = true;\n this.queueCallback_(function () {\n _this3.sourceBuffer_.appendBuffer(bytes);\n }, done);\n }\n\n /**\n * Indicates what TimeRanges are buffered in the managed SourceBuffer.\n *\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-buffered\n */\n }, {\n key: 'buffered',\n value: function buffered() {\n if (!this.sourceBuffer_) {\n return _videoJs2['default'].createTimeRanges();\n }\n return this.sourceBuffer_.buffered;\n }\n\n /**\n * Queue an update to remove a time range from the buffer.\n *\n * @param {Number} start where to start the removal\n * @param {Number} end where to end the removal\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end\n */\n }, {\n key: 'remove',\n value: function remove(start, end) {\n var _this4 = this;\n\n if (this.processedAppend_) {\n this.queueCallback_(function () {\n _this4.sourceBuffer_.remove(start, end);\n }, noop);\n }\n }\n\n /**\n * Whether the underlying sourceBuffer is updating or not\n *\n * @return {Boolean} the updating status of the SourceBuffer\n */\n }, {\n key: 'updating',\n value: function updating() {\n return !this.sourceBuffer_ || this.sourceBuffer_.updating || this.pendingCallback_;\n }\n\n /**\n * Set/get the timestampoffset on the SourceBuffer\n *\n * @return {Number} the timestamp offset\n */\n }, {\n key: 'timestampOffset',\n value: function timestampOffset(offset) {\n var _this5 = this;\n\n if (typeof offset !== 'undefined') {\n this.queueCallback_(function () {\n _this5.sourceBuffer_.timestampOffset = offset;\n });\n this.timestampOffset_ = offset;\n }\n return this.timestampOffset_;\n }\n\n /**\n * Queue a callback to run\n */\n }, {\n key: 'queueCallback_',\n value: function queueCallback_(callback, done) {\n this.callbacks_.push([callback.bind(this), done]);\n this.runCallback_();\n }\n\n /**\n * Run a queued callback\n */\n }, {\n key: 'runCallback_',\n value: function runCallback_() {\n var callbacks = undefined;\n\n if (!this.updating() && this.callbacks_.length) {\n callbacks = this.callbacks_.shift();\n this.pendingCallback_ = callbacks[1];\n callbacks[0]();\n }\n }\n\n /**\n * dispose of the source updater and the underlying sourceBuffer\n */\n }, {\n key: 'dispose',\n value: function dispose() {\n this.sourceBuffer_.removeEventListener('updateend', this.onUpdateendCallback_);\n if (this.sourceBuffer_ && this.mediaSource.readyState === 'open') {\n this.sourceBuffer_.abort();\n }\n }\n }]);\n\n return SourceUpdater;\n})();\n\nexports['default'] = SourceUpdater;\nmodule.exports = exports['default'];","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar autoKeyword = \"auto\";\nvar directionSetting = {\n \"\": true,\n \"lr\": true,\n \"rl\": true\n};\nvar alignSetting = {\n \"start\": true,\n \"middle\": true,\n \"end\": true,\n \"left\": true,\n \"right\": true\n};\n\nfunction findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n}\n\nfunction findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n}\n\nfunction extend(obj) {\n var i = 1;\n for (; i < arguments.length; i++) {\n var cobj = arguments[i];\n for (var p in cobj) {\n obj[p] = cobj[p];\n }\n }\n\n return obj;\n}\n\nfunction VTTCue(startTime, endTime, text) {\n var cue = this;\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n var baseObj = {};\n\n if (isIE8) {\n cue = document.createElement('custom');\n } else {\n baseObj.enumerable = true;\n }\n\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n cue.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = 50;\n var _positionAlign = \"middle\";\n var _size = 50;\n var _align = \"middle\";\n\n Object.defineProperty(cue,\n \"id\", extend({}, baseObj, {\n get: function() {\n return _id;\n },\n set: function(value) {\n _id = \"\" + value;\n }\n }));\n\n Object.defineProperty(cue,\n \"pauseOnExit\", extend({}, baseObj, {\n get: function() {\n return _pauseOnExit;\n },\n set: function(value) {\n _pauseOnExit = !!value;\n }\n }));\n\n Object.defineProperty(cue,\n \"startTime\", extend({}, baseObj, {\n get: function() {\n return _startTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"endTime\", extend({}, baseObj, {\n get: function() {\n return _endTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"text\", extend({}, baseObj, {\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"region\", extend({}, baseObj, {\n get: function() {\n return _region;\n },\n set: function(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"vertical\", extend({}, baseObj, {\n get: function() {\n return _vertical;\n },\n set: function(value) {\n var setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"snapToLines\", extend({}, baseObj, {\n get: function() {\n return _snapToLines;\n },\n set: function(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"line\", extend({}, baseObj, {\n get: function() {\n return _line;\n },\n set: function(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"An invalid number or illegal string was specified.\");\n }\n _line = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"lineAlign\", extend({}, baseObj, {\n get: function() {\n return _lineAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"position\", extend({}, baseObj, {\n get: function() {\n return _position;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n _position = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"positionAlign\", extend({}, baseObj, {\n get: function() {\n return _positionAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"size\", extend({}, baseObj, {\n get: function() {\n return _size;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n _size = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"align\", extend({}, baseObj, {\n get: function() {\n return _align;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }));\n\n /**\n * Other spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n cue.displayState = undefined;\n\n if (isIE8) {\n return cue;\n }\n}\n\n/**\n * VTTCue methods\n */\n\nVTTCue.prototype.getCueAsHTML = function() {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n return WebVTT.convertCueToDOMTree(window, this.text);\n};\n\nmodule.exports = VTTCue;\n","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct.bind(), module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n }\n return _construct.apply(null, arguments);\n}\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar _binUtils = require('./bin-utils');\n\nvar REQUEST_ERRORS = {\n FAILURE: 2,\n TIMEOUT: -101,\n ABORTED: -102\n};\n\nexports.REQUEST_ERRORS = REQUEST_ERRORS;\n/**\n * Turns segment byterange into a string suitable for use in\n * HTTP Range requests\n *\n * @param {Object} byterange - an object with two values defining the start and end\n * of a byte-range\n */\nvar byterangeStr = function byterangeStr(byterange) {\n var byterangeStart = undefined;\n var byterangeEnd = undefined;\n\n // `byterangeEnd` is one less than `offset + length` because the HTTP range\n // header uses inclusive ranges\n byterangeEnd = byterange.offset + byterange.length - 1;\n byterangeStart = byterange.offset;\n return 'bytes=' + byterangeStart + '-' + byterangeEnd;\n};\n\n/**\n * Defines headers for use in the xhr request for a particular segment.\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n */\nvar segmentXhrHeaders = function segmentXhrHeaders(segment) {\n var headers = {};\n\n if (segment.byterange) {\n headers.Range = byterangeStr(segment.byterange);\n }\n return headers;\n};\n\n/**\n * Abort all requests\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n */\nvar abortAll = function abortAll(activeXhrs) {\n activeXhrs.forEach(function (xhr) {\n xhr.abort();\n });\n};\n\n/**\n * Gather important bandwidth stats once a request has completed\n *\n * @param {Object} request - the XHR request from which to gather stats\n */\nvar getRequestStats = function getRequestStats(request) {\n return {\n bandwidth: request.bandwidth,\n bytesReceived: request.bytesReceived || 0,\n roundTripTime: request.roundTripTime || 0\n };\n};\n\n/**\n * If possible gather bandwidth stats as a request is in\n * progress\n *\n * @param {Event} progressEvent - an event object from an XHR's progress event\n */\nvar getProgressStats = function getProgressStats(progressEvent) {\n var request = progressEvent.target;\n var roundTripTime = Date.now() - request.requestTime;\n var stats = {\n bandwidth: Infinity,\n bytesReceived: 0,\n roundTripTime: roundTripTime || 0\n };\n\n stats.bytesReceived = progressEvent.loaded;\n // This can result in Infinity if stats.roundTripTime is 0 but that is ok\n // because we should only use bandwidth stats on progress to determine when\n // abort a request early due to insufficient bandwidth\n stats.bandwidth = Math.floor(stats.bytesReceived / stats.roundTripTime * 8 * 1000);\n\n return stats;\n};\n\n/**\n * Handle all error conditions in one place and return an object\n * with all the information\n *\n * @param {Error|null} error - if non-null signals an error occured with the XHR\n * @param {Object} request - the XHR request that possibly generated the error\n */\nvar handleErrors = function handleErrors(error, request) {\n if (request.timedout) {\n return {\n status: request.status,\n message: 'HLS request timed-out at URL: ' + request.uri,\n code: REQUEST_ERRORS.TIMEOUT,\n xhr: request\n };\n }\n\n if (request.aborted) {\n return {\n status: request.status,\n message: 'HLS request aborted at URL: ' + request.uri,\n code: REQUEST_ERRORS.ABORTED,\n xhr: request\n };\n }\n\n if (error) {\n return {\n status: request.status,\n message: 'HLS request errored at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n };\n }\n\n return null;\n};\n\n/**\n * Handle responses for key data and convert the key data to the correct format\n * for the decryption step later\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\nvar handleKeyResponse = function handleKeyResponse(segment, finishProcessingFn) {\n return function (error, request) {\n var response = request.response;\n var errorObj = handleErrors(error, request);\n\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n\n if (response.byteLength !== 16) {\n return finishProcessingFn({\n status: request.status,\n message: 'Invalid HLS key at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n }, segment);\n }\n\n var view = new DataView(response);\n\n segment.key.bytes = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]);\n return finishProcessingFn(null, segment);\n };\n};\n\n/**\n * Handle init-segment responses\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\nvar handleInitSegmentResponse = function handleInitSegmentResponse(segment, finishProcessingFn) {\n return function (error, request) {\n var response = request.response;\n var errorObj = handleErrors(error, request);\n\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n\n // stop processing if received empty content\n if (response.byteLength === 0) {\n return finishProcessingFn({\n status: request.status,\n message: 'Empty HLS segment content at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n }, segment);\n }\n\n segment.map.bytes = new Uint8Array(request.response);\n return finishProcessingFn(null, segment);\n };\n};\n\n/**\n * Response handler for segment-requests being sure to set the correct\n * property depending on whether the segment is encryped or not\n * Also records and keeps track of stats that are used for ABR purposes\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\nvar handleSegmentResponse = function handleSegmentResponse(segment, finishProcessingFn) {\n return function (error, request) {\n var response = request.response;\n var errorObj = handleErrors(error, request);\n\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n\n // stop processing if received empty content\n if (response.byteLength === 0) {\n return finishProcessingFn({\n status: request.status,\n message: 'Empty HLS segment content at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n }, segment);\n }\n\n segment.stats = getRequestStats(request);\n\n if (segment.key) {\n segment.encryptedBytes = new Uint8Array(request.response);\n } else {\n segment.bytes = new Uint8Array(request.response);\n }\n\n return finishProcessingFn(null, segment);\n };\n};\n\n/**\n * Decrypt the segment via the decryption web worker\n *\n * @param {WebWorker} decrypter - a WebWorker interface to AES-128 decryption routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} doneFn - a callback that is executed after decryption has completed\n */\nvar decryptSegment = function decryptSegment(decrypter, segment, doneFn) {\n var decryptionHandler = function decryptionHandler(event) {\n if (event.data.source === segment.requestId) {\n decrypter.removeEventListener('message', decryptionHandler);\n var decrypted = event.data.decrypted;\n\n segment.bytes = new Uint8Array(decrypted.bytes, decrypted.byteOffset, decrypted.byteLength);\n return doneFn(null, segment);\n }\n };\n\n decrypter.addEventListener('message', decryptionHandler);\n\n // this is an encrypted segment\n // incrementally decrypt the segment\n decrypter.postMessage((0, _binUtils.createTransferableMessage)({\n source: segment.requestId,\n encrypted: segment.encryptedBytes,\n key: segment.key.bytes,\n iv: segment.key.iv\n }), [segment.encryptedBytes.buffer, segment.key.bytes.buffer]);\n};\n\n/**\n * The purpose of this function is to get the most pertinent error from the\n * array of errors.\n * For instance if a timeout and two aborts occur, then the aborts were\n * likely triggered by the timeout so return that error object.\n */\nvar getMostImportantError = function getMostImportantError(errors) {\n return errors.reduce(function (prev, err) {\n return err.code > prev.code ? err : prev;\n });\n};\n\n/**\n * This function waits for all XHRs to finish (with either success or failure)\n * before continueing processing via it's callback. The function gathers errors\n * from each request into a single errors array so that the error status for\n * each request can be examined later.\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n * @param {WebWorker} decrypter - a WebWorker interface to AES-128 decryption routines\n * @param {Function} doneFn - a callback that is executed after all resources have been\n * downloaded and any decryption completed\n */\nvar waitForCompletion = function waitForCompletion(activeXhrs, decrypter, doneFn) {\n var errors = [];\n var count = 0;\n\n return function (error, segment) {\n if (error) {\n // If there are errors, we have to abort any outstanding requests\n abortAll(activeXhrs);\n errors.push(error);\n }\n count += 1;\n\n if (count === activeXhrs.length) {\n // Keep track of when *all* of the requests have completed\n segment.endOfAllRequests = Date.now();\n\n if (errors.length > 0) {\n var worstError = getMostImportantError(errors);\n\n return doneFn(worstError, segment);\n }\n if (segment.encryptedBytes) {\n return decryptSegment(decrypter, segment, doneFn);\n }\n // Otherwise, everything is ready just continue\n return doneFn(null, segment);\n }\n };\n};\n\n/**\n * Simple progress event callback handler that gathers some stats before\n * executing a provided callback with the `segment` object\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} progressFn - a callback that is executed each time a progress event\n * is received\n * @param {Event} event - the progress event object from XMLHttpRequest\n */\nvar handleProgress = function handleProgress(segment, progressFn) {\n return function (event) {\n segment.stats = _videoJs2['default'].mergeOptions(segment.stats, getProgressStats(event));\n\n // record the time that we receive the first byte of data\n if (!segment.stats.firstBytesReceivedAt && segment.stats.bytesReceived) {\n segment.stats.firstBytesReceivedAt = Date.now();\n }\n\n return progressFn(event, segment);\n };\n};\n\n/**\n * Load all resources and does any processing necessary for a media-segment\n *\n * Features:\n * decrypts the media-segment if it has a key uri and an iv\n * aborts *all* requests if *any* one request fails\n *\n * The segment object, at minimum, has the following format:\n * {\n * resolvedUri: String,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [key]: {\n * resolvedUri: String\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * iv: {\n * bytes: Uint32Array\n * }\n * },\n * [map]: {\n * resolvedUri: String,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [bytes]: Uint8Array\n * }\n * }\n * ...where [name] denotes optional properties\n *\n * @param {Function} xhr - an instance of the xhr wrapper in xhr.js\n * @param {Object} xhrOptions - the base options to provide to all xhr requests\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128\n * decryption routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} progressFn - a callback that receives progress events from the main\n * segment's xhr request\n * @param {Function} doneFn - a callback that is executed only once all requests have\n * succeeded or failed\n * @returns {Function} a function that, when invoked, immediately aborts all\n * outstanding requests\n */\nvar mediaSegmentRequest = function mediaSegmentRequest(xhr, xhrOptions, decryptionWorker, segment, progressFn, doneFn) {\n var activeXhrs = [];\n var finishProcessingFn = waitForCompletion(activeXhrs, decryptionWorker, doneFn);\n\n // optionally, request the decryption key\n if (segment.key) {\n var keyRequestOptions = _videoJs2['default'].mergeOptions(xhrOptions, {\n uri: segment.key.resolvedUri,\n responseType: 'arraybuffer'\n });\n var keyRequestCallback = handleKeyResponse(segment, finishProcessingFn);\n var keyXhr = xhr(keyRequestOptions, keyRequestCallback);\n\n activeXhrs.push(keyXhr);\n }\n\n // optionally, request the associated media init segment\n if (segment.map && !segment.map.bytes) {\n var initSegmentOptions = _videoJs2['default'].mergeOptions(xhrOptions, {\n uri: segment.map.resolvedUri,\n responseType: 'arraybuffer',\n headers: segmentXhrHeaders(segment.map)\n });\n var initSegmentRequestCallback = handleInitSegmentResponse(segment, finishProcessingFn);\n var initSegmentXhr = xhr(initSegmentOptions, initSegmentRequestCallback);\n\n activeXhrs.push(initSegmentXhr);\n }\n\n var segmentRequestOptions = _videoJs2['default'].mergeOptions(xhrOptions, {\n uri: segment.resolvedUri,\n responseType: 'arraybuffer',\n headers: segmentXhrHeaders(segment)\n });\n var segmentRequestCallback = handleSegmentResponse(segment, finishProcessingFn);\n var segmentXhr = xhr(segmentRequestOptions, segmentRequestCallback);\n\n segmentXhr.addEventListener('progress', handleProgress(segment, progressFn));\n activeXhrs.push(segmentXhr);\n\n return function () {\n return abortAll(activeXhrs);\n };\n};\nexports.mediaSegmentRequest = mediaSegmentRequest;","// see https://tools.ietf.org/html/rfc1808\n\n(function (root) {\n var URL_REGEX =\n /^(?=((?:[a-zA-Z0-9+\\-.]+:)?))\\1(?=((?:\\/\\/[^\\/?#]*)?))\\2(?=((?:(?:[^?#\\/]*\\/)*[^;?#\\/]*)?))\\3((?:;[^?#]*)?)(\\?[^#]*)?(#[^]*)?$/;\n var FIRST_SEGMENT_REGEX = /^(?=([^\\/?#]*))\\1([^]*)$/;\n var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/)[^\\/]*(?=\\/)/g;\n\n var URLToolkit = {\n // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n // E.g\n // With opts.alwaysNormalize = false (default, spec compliant)\n // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n // With opts.alwaysNormalize = true (not spec compliant)\n // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n buildAbsoluteURL: function (baseURL, relativeURL, opts) {\n opts = opts || {};\n // remove any remaining space and CRLF\n baseURL = baseURL.trim();\n relativeURL = relativeURL.trim();\n if (!relativeURL) {\n // 2a) If the embedded URL is entirely empty, it inherits the\n // entire base URL (i.e., is set equal to the base URL)\n // and we are done.\n if (!opts.alwaysNormalize) {\n return baseURL;\n }\n var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n if (!basePartsForNormalise) {\n throw new Error('Error trying to parse base URL.');\n }\n basePartsForNormalise.path = URLToolkit.normalizePath(\n basePartsForNormalise.path\n );\n return URLToolkit.buildURLFromParts(basePartsForNormalise);\n }\n var relativeParts = URLToolkit.parseURL(relativeURL);\n if (!relativeParts) {\n throw new Error('Error trying to parse relative URL.');\n }\n if (relativeParts.scheme) {\n // 2b) If the embedded URL starts with a scheme name, it is\n // interpreted as an absolute URL and we are done.\n if (!opts.alwaysNormalize) {\n return relativeURL;\n }\n relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n return URLToolkit.buildURLFromParts(relativeParts);\n }\n var baseParts = URLToolkit.parseURL(baseURL);\n if (!baseParts) {\n throw new Error('Error trying to parse base URL.');\n }\n if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') {\n // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc\n // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a'\n var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n baseParts.netLoc = pathParts[1];\n baseParts.path = pathParts[2];\n }\n if (baseParts.netLoc && !baseParts.path) {\n baseParts.path = '/';\n }\n var builtParts = {\n // 2c) Otherwise, the embedded URL inherits the scheme of\n // the base URL.\n scheme: baseParts.scheme,\n netLoc: relativeParts.netLoc,\n path: null,\n params: relativeParts.params,\n query: relativeParts.query,\n fragment: relativeParts.fragment,\n };\n if (!relativeParts.netLoc) {\n // 3) If the embedded URL's is non-empty, we skip to\n // Step 7. Otherwise, the embedded URL inherits the \n // (if any) of the base URL.\n builtParts.netLoc = baseParts.netLoc;\n // 4) If the embedded URL path is preceded by a slash \"/\", the\n // path is not relative and we skip to Step 7.\n if (relativeParts.path[0] !== '/') {\n if (!relativeParts.path) {\n // 5) If the embedded URL path is empty (and not preceded by a\n // slash), then the embedded URL inherits the base URL path\n builtParts.path = baseParts.path;\n // 5a) if the embedded URL's is non-empty, we skip to\n // step 7; otherwise, it inherits the of the base\n // URL (if any) and\n if (!relativeParts.params) {\n builtParts.params = baseParts.params;\n // 5b) if the embedded URL's is non-empty, we skip to\n // step 7; otherwise, it inherits the of the base\n // URL (if any) and we skip to step 7.\n if (!relativeParts.query) {\n builtParts.query = baseParts.query;\n }\n }\n } else {\n // 6) The last segment of the base URL's path (anything\n // following the rightmost slash \"/\", or the entire path if no\n // slash is present) is removed and the embedded URL's path is\n // appended in its place.\n var baseURLPath = baseParts.path;\n var newPath =\n baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) +\n relativeParts.path;\n builtParts.path = URLToolkit.normalizePath(newPath);\n }\n }\n }\n if (builtParts.path === null) {\n builtParts.path = opts.alwaysNormalize\n ? URLToolkit.normalizePath(relativeParts.path)\n : relativeParts.path;\n }\n return URLToolkit.buildURLFromParts(builtParts);\n },\n parseURL: function (url) {\n var parts = URL_REGEX.exec(url);\n if (!parts) {\n return null;\n }\n return {\n scheme: parts[1] || '',\n netLoc: parts[2] || '',\n path: parts[3] || '',\n params: parts[4] || '',\n query: parts[5] || '',\n fragment: parts[6] || '',\n };\n },\n normalizePath: function (path) {\n // The following operations are\n // then applied, in order, to the new path:\n // 6a) All occurrences of \"./\", where \".\" is a complete path\n // segment, are removed.\n // 6b) If the path ends with \".\" as a complete path segment,\n // that \".\" is removed.\n path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, '');\n // 6c) All occurrences of \"/../\", where is a\n // complete path segment not equal to \"..\", are removed.\n // Removal of these path segments is performed iteratively,\n // removing the leftmost matching pattern on each iteration,\n // until no matching pattern remains.\n // 6d) If the path ends with \"/..\", where is a\n // complete path segment not equal to \"..\", that\n // \"/..\" is removed.\n while (\n path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length\n ) {}\n return path.split('').reverse().join('');\n },\n buildURLFromParts: function (parts) {\n return (\n parts.scheme +\n parts.netLoc +\n parts.path +\n parts.params +\n parts.query +\n parts.fragment\n );\n },\n };\n\n if (typeof exports === 'object' && typeof module === 'object')\n module.exports = URLToolkit;\n else if (typeof define === 'function' && define.amd)\n define([], function () {\n return URLToolkit;\n });\n else if (typeof exports === 'object') exports['URLToolkit'] = URLToolkit;\n else root['URLToolkit'] = URLToolkit;\n})(this);\n","/**\n * mux.js\n *\n * Copyright (c) 2014 Brightcove\n * All rights reserved.\n *\n * A lightweight readable stream implemention that handles event dispatching.\n * Objects that inherit from streams should call init in their constructors.\n */\n'use strict';\n\nvar Stream = function() {\n this.init = function() {\n var listeners = {};\n /**\n * Add a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} the callback to be invoked when an event of\n * the specified type occurs\n */\n this.on = function(type, listener) {\n if (!listeners[type]) {\n listeners[type] = [];\n }\n listeners[type] = listeners[type].concat(listener);\n };\n /**\n * Remove a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} a function previously registered for this\n * type of event through `on`\n */\n this.off = function(type, listener) {\n var index;\n if (!listeners[type]) {\n return false;\n }\n index = listeners[type].indexOf(listener);\n listeners[type] = listeners[type].slice();\n listeners[type].splice(index, 1);\n return index > -1;\n };\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n * @param type {string} the event name\n */\n this.trigger = function(type) {\n var callbacks, i, length, args;\n callbacks = listeners[type];\n if (!callbacks) {\n return;\n }\n // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n if (arguments.length === 2) {\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n args = [];\n i = arguments.length;\n for (i = 1; i < arguments.length; ++i) {\n args.push(arguments[i]);\n }\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n };\n /**\n * Destroys the stream and cleans up.\n */\n this.dispose = function() {\n listeners = {};\n };\n };\n};\n\n/**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n * @param destination {stream} the stream that will receive all `data` events\n * @param autoFlush {boolean} if false, we will not call `flush` on the destination\n * when the current stream emits a 'done' event\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\nStream.prototype.pipe = function(destination) {\n this.on('data', function(data) {\n destination.push(data);\n });\n\n this.on('done', function(flushSource) {\n destination.flush(flushSource);\n });\n\n return destination;\n};\n\n// Default stream functions that are expected to be overridden to perform\n// actual work. These are provided by the prototype as a sort of no-op\n// implementation so that we don't have to check for their existence in the\n// `pipe` function above.\nStream.prototype.push = function(data) {\n this.trigger('data', data);\n};\n\nStream.prototype.flush = function(flushSource) {\n this.trigger('done', flushSource);\n};\n\nmodule.exports = Stream;\n","/**\n * Accepts program elementary stream (PES) data events and parses out\n * ID3 metadata from them, if present.\n * @see http://id3.org/id3v2.3.0\n */\n'use strict';\nvar\n Stream = require('../utils/stream'),\n StreamTypes = require('./stream-types'),\n // return a percent-encoded representation of the specified byte range\n // @see http://en.wikipedia.org/wiki/Percent-encoding\n percentEncode = function(bytes, start, end) {\n var i, result = '';\n for (i = start; i < end; i++) {\n result += '%' + ('00' + bytes[i].toString(16)).slice(-2);\n }\n return result;\n },\n // return the string representation of the specified byte range,\n // interpreted as UTf-8.\n parseUtf8 = function(bytes, start, end) {\n return decodeURIComponent(percentEncode(bytes, start, end));\n },\n // return the string representation of the specified byte range,\n // interpreted as ISO-8859-1.\n parseIso88591 = function(bytes, start, end) {\n return unescape(percentEncode(bytes, start, end)); // jshint ignore:line\n },\n parseSyncSafeInteger = function(data) {\n return (data[0] << 21) |\n (data[1] << 14) |\n (data[2] << 7) |\n (data[3]);\n },\n tagParsers = {\n TXXX: function(tag) {\n var i;\n if (tag.data[0] !== 3) {\n // ignore frames with unrecognized character encodings\n return;\n }\n\n for (i = 1; i < tag.data.length; i++) {\n if (tag.data[i] === 0) {\n // parse the text fields\n tag.description = parseUtf8(tag.data, 1, i);\n // do not include the null terminator in the tag value\n tag.value = parseUtf8(tag.data, i + 1, tag.data.length).replace(/\\0*$/, '');\n break;\n }\n }\n tag.data = tag.value;\n },\n WXXX: function(tag) {\n var i;\n if (tag.data[0] !== 3) {\n // ignore frames with unrecognized character encodings\n return;\n }\n\n for (i = 1; i < tag.data.length; i++) {\n if (tag.data[i] === 0) {\n // parse the description and URL fields\n tag.description = parseUtf8(tag.data, 1, i);\n tag.url = parseUtf8(tag.data, i + 1, tag.data.length);\n break;\n }\n }\n },\n PRIV: function(tag) {\n var i;\n\n for (i = 0; i < tag.data.length; i++) {\n if (tag.data[i] === 0) {\n // parse the description and URL fields\n tag.owner = parseIso88591(tag.data, 0, i);\n break;\n }\n }\n tag.privateData = tag.data.subarray(i + 1);\n tag.data = tag.privateData;\n }\n },\n MetadataStream;\n\nMetadataStream = function(options) {\n var\n settings = {\n debug: !!(options && options.debug),\n\n // the bytes of the program-level descriptor field in MP2T\n // see ISO/IEC 13818-1:2013 (E), section 2.6 \"Program and\n // program element descriptors\"\n descriptor: options && options.descriptor\n },\n // the total size in bytes of the ID3 tag being parsed\n tagSize = 0,\n // tag data that is not complete enough to be parsed\n buffer = [],\n // the total number of bytes currently in the buffer\n bufferSize = 0,\n i;\n\n MetadataStream.prototype.init.call(this);\n\n // calculate the text track in-band metadata track dispatch type\n // https://html.spec.whatwg.org/multipage/embedded-content.html#steps-to-expose-a-media-resource-specific-text-track\n this.dispatchType = StreamTypes.METADATA_STREAM_TYPE.toString(16);\n if (settings.descriptor) {\n for (i = 0; i < settings.descriptor.length; i++) {\n this.dispatchType += ('00' + settings.descriptor[i].toString(16)).slice(-2);\n }\n }\n\n this.push = function(chunk) {\n var tag, frameStart, frameSize, frame, i, frameHeader;\n if (chunk.type !== 'timed-metadata') {\n return;\n }\n\n // if data_alignment_indicator is set in the PES header,\n // we must have the start of a new ID3 tag. Assume anything\n // remaining in the buffer was malformed and throw it out\n if (chunk.dataAlignmentIndicator) {\n bufferSize = 0;\n buffer.length = 0;\n }\n\n // ignore events that don't look like ID3 data\n if (buffer.length === 0 &&\n (chunk.data.length < 10 ||\n chunk.data[0] !== 'I'.charCodeAt(0) ||\n chunk.data[1] !== 'D'.charCodeAt(0) ||\n chunk.data[2] !== '3'.charCodeAt(0))) {\n if (settings.debug) {\n // eslint-disable-next-line no-console\n console.log('Skipping unrecognized metadata packet');\n }\n return;\n }\n\n // add this chunk to the data we've collected so far\n\n buffer.push(chunk);\n bufferSize += chunk.data.byteLength;\n\n // grab the size of the entire frame from the ID3 header\n if (buffer.length === 1) {\n // the frame size is transmitted as a 28-bit integer in the\n // last four bytes of the ID3 header.\n // The most significant bit of each byte is dropped and the\n // results concatenated to recover the actual value.\n tagSize = parseSyncSafeInteger(chunk.data.subarray(6, 10));\n\n // ID3 reports the tag size excluding the header but it's more\n // convenient for our comparisons to include it\n tagSize += 10;\n }\n\n // if the entire frame has not arrived, wait for more data\n if (bufferSize < tagSize) {\n return;\n }\n\n // collect the entire frame so it can be parsed\n tag = {\n data: new Uint8Array(tagSize),\n frames: [],\n pts: buffer[0].pts,\n dts: buffer[0].dts\n };\n for (i = 0; i < tagSize;) {\n tag.data.set(buffer[0].data.subarray(0, tagSize - i), i);\n i += buffer[0].data.byteLength;\n bufferSize -= buffer[0].data.byteLength;\n buffer.shift();\n }\n\n // find the start of the first frame and the end of the tag\n frameStart = 10;\n if (tag.data[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n frameStart += parseSyncSafeInteger(tag.data.subarray(10, 14));\n\n // clip any padding off the end\n tagSize -= parseSyncSafeInteger(tag.data.subarray(16, 20));\n }\n\n // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger(tag.data.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n // eslint-disable-next-line no-console\n return console.log('Malformed ID3 frame encountered. Skipping metadata parsing.');\n }\n frameHeader = String.fromCharCode(tag.data[frameStart],\n tag.data[frameStart + 1],\n tag.data[frameStart + 2],\n tag.data[frameStart + 3]);\n\n\n frame = {\n id: frameHeader,\n data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10)\n };\n frame.key = frame.id;\n if (tagParsers[frame.id]) {\n tagParsers[frame.id](frame);\n\n // handle the special PRIV frame used to indicate the start\n // time for raw AAC data\n if (frame.owner === 'com.apple.streaming.transportStreamTimestamp') {\n var\n d = frame.data,\n size = ((d[3] & 0x01) << 30) |\n (d[4] << 22) |\n (d[5] << 14) |\n (d[6] << 6) |\n (d[7] >>> 2);\n\n size *= 4;\n size += d[7] & 0x03;\n frame.timeStamp = size;\n // in raw AAC, all subsequent data will be timestamped based\n // on the value of this frame\n // we couldn't have known the appropriate pts and dts before\n // parsing this ID3 tag so set those values now\n if (tag.pts === undefined && tag.dts === undefined) {\n tag.pts = frame.timeStamp;\n tag.dts = frame.timeStamp;\n }\n this.trigger('timestamp', frame);\n }\n }\n tag.frames.push(frame);\n\n frameStart += 10; // advance past the frame header\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < tagSize);\n this.trigger('data', tag);\n };\n};\nMetadataStream.prototype = new Stream();\n\nmodule.exports = MetadataStream;\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar defaultOptions = {\n errorInterval: 30,\n getSource: function getSource(next) {\n var tech = this.tech({ IWillNotUseThisInPlugins: true });\n var sourceObj = tech.currentSource_;\n\n return next(sourceObj);\n }\n};\n\n/**\n * Main entry point for the plugin\n *\n * @param {Player} player a reference to a videojs Player instance\n * @param {Object} [options] an object with plugin options\n * @private\n */\nvar initPlugin = function initPlugin(player, options) {\n var lastCalled = 0;\n var seekTo = 0;\n var localOptions = _videoJs2['default'].mergeOptions(defaultOptions, options);\n\n player.ready(function () {\n player.trigger({ type: 'usage', name: 'hls-error-reload-initialized' });\n });\n\n /**\n * Player modifications to perform that must wait until `loadedmetadata`\n * has been triggered\n *\n * @private\n */\n var loadedMetadataHandler = function loadedMetadataHandler() {\n if (seekTo) {\n player.currentTime(seekTo);\n }\n };\n\n /**\n * Set the source on the player element, play, and seek if necessary\n *\n * @param {Object} sourceObj An object specifying the source url and mime-type to play\n * @private\n */\n var setSource = function setSource(sourceObj) {\n if (sourceObj === null || sourceObj === undefined) {\n return;\n }\n seekTo = player.duration() !== Infinity && player.currentTime() || 0;\n\n player.one('loadedmetadata', loadedMetadataHandler);\n\n player.src(sourceObj);\n player.trigger({ type: 'usage', name: 'hls-error-reload' });\n player.play();\n };\n\n /**\n * Attempt to get a source from either the built-in getSource function\n * or a custom function provided via the options\n *\n * @private\n */\n var errorHandler = function errorHandler() {\n // Do not attempt to reload the source if a source-reload occurred before\n // 'errorInterval' time has elapsed since the last source-reload\n if (Date.now() - lastCalled < localOptions.errorInterval * 1000) {\n player.trigger({ type: 'usage', name: 'hls-error-reload-canceled' });\n return;\n }\n\n if (!localOptions.getSource || typeof localOptions.getSource !== 'function') {\n _videoJs2['default'].log.error('ERROR: reloadSourceOnError - The option getSource must be a function!');\n return;\n }\n lastCalled = Date.now();\n\n return localOptions.getSource.call(player, setSource);\n };\n\n /**\n * Unbind any event handlers that were bound by the plugin\n *\n * @private\n */\n var cleanupEvents = function cleanupEvents() {\n player.off('loadedmetadata', loadedMetadataHandler);\n player.off('error', errorHandler);\n player.off('dispose', cleanupEvents);\n };\n\n /**\n * Cleanup before re-initializing the plugin\n *\n * @param {Object} [newOptions] an object with plugin options\n * @private\n */\n var reinitPlugin = function reinitPlugin(newOptions) {\n cleanupEvents();\n initPlugin(player, newOptions);\n };\n\n player.on('error', errorHandler);\n player.on('dispose', cleanupEvents);\n\n // Overwrite the plugin function so that we can correctly cleanup before\n // initializing the plugin\n player.reloadSourceOnError = reinitPlugin;\n};\n\n/**\n * Reload the source when an error is detected as long as there\n * wasn't an error previously within the last 30 seconds\n *\n * @param {Object} [options] an object with plugin options\n */\nvar reloadSourceOnError = function reloadSourceOnError(options) {\n initPlugin(this, options);\n};\n\nexports['default'] = reloadSourceOnError;\nmodule.exports = exports['default'];","/**\n * @file transmuxer-worker.js\n */\n\n/**\n * videojs-contrib-media-sources\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * Handles communication between the browser-world and the mux.js\n * transmuxer running inside of a WebWorker by exposing a simple\n * message-based interface to a Transmuxer object.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _muxJsLibMp4 = require('mux.js/lib/mp4');\n\nvar _muxJsLibMp42 = _interopRequireDefault(_muxJsLibMp4);\n\n/**\n * Re-emits transmuxer events by converting them into messages to the\n * world outside the worker.\n *\n * @param {Object} transmuxer the transmuxer to wire events on\n * @private\n */\nvar wireTransmuxerEvents = function wireTransmuxerEvents(transmuxer) {\n transmuxer.on('data', function (segment) {\n // transfer ownership of the underlying ArrayBuffer\n // instead of doing a copy to save memory\n // ArrayBuffers are transferable but generic TypedArrays are not\n // @link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects)\n var initArray = segment.initSegment;\n\n segment.initSegment = {\n data: initArray.buffer,\n byteOffset: initArray.byteOffset,\n byteLength: initArray.byteLength\n };\n\n var typedArray = segment.data;\n\n segment.data = typedArray.buffer;\n _globalWindow2['default'].postMessage({\n action: 'data',\n segment: segment,\n byteOffset: typedArray.byteOffset,\n byteLength: typedArray.byteLength\n }, [segment.data]);\n });\n\n if (transmuxer.captionStream) {\n transmuxer.captionStream.on('data', function (caption) {\n _globalWindow2['default'].postMessage({\n action: 'caption',\n data: caption\n });\n });\n }\n\n transmuxer.on('done', function (data) {\n _globalWindow2['default'].postMessage({ action: 'done' });\n });\n\n transmuxer.on('gopInfo', function (gopInfo) {\n _globalWindow2['default'].postMessage({\n action: 'gopInfo',\n gopInfo: gopInfo\n });\n });\n};\n\n/**\n * All incoming messages route through this hash. If no function exists\n * to handle an incoming message, then we ignore the message.\n *\n * @class MessageHandlers\n * @param {Object} options the options to initialize with\n */\n\nvar MessageHandlers = (function () {\n function MessageHandlers(options) {\n _classCallCheck(this, MessageHandlers);\n\n this.options = options || {};\n this.init();\n }\n\n /**\n * Our web wroker interface so that things can talk to mux.js\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n *\n * @param {Object} self the scope for the web worker\n */\n\n /**\n * initialize our web worker and wire all the events.\n */\n\n _createClass(MessageHandlers, [{\n key: 'init',\n value: function init() {\n if (this.transmuxer) {\n this.transmuxer.dispose();\n }\n this.transmuxer = new _muxJsLibMp42['default'].Transmuxer(this.options);\n wireTransmuxerEvents(this.transmuxer);\n }\n\n /**\n * Adds data (a ts segment) to the start of the transmuxer pipeline for\n * processing.\n *\n * @param {ArrayBuffer} data data to push into the muxer\n */\n }, {\n key: 'push',\n value: function push(data) {\n // Cast array buffer to correct type for transmuxer\n var segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n\n this.transmuxer.push(segment);\n }\n\n /**\n * Recreate the transmuxer so that the next segment added via `push`\n * start with a fresh transmuxer.\n */\n }, {\n key: 'reset',\n value: function reset() {\n this.init();\n }\n\n /**\n * Set the value that will be used as the `baseMediaDecodeTime` time for the\n * next segment pushed in. Subsequent segments will have their `baseMediaDecodeTime`\n * set relative to the first based on the PTS values.\n *\n * @param {Object} data used to set the timestamp offset in the muxer\n */\n }, {\n key: 'setTimestampOffset',\n value: function setTimestampOffset(data) {\n var timestampOffset = data.timestampOffset || 0;\n\n this.transmuxer.setBaseMediaDecodeTime(Math.round(timestampOffset * 90000));\n }\n }, {\n key: 'setAudioAppendStart',\n value: function setAudioAppendStart(data) {\n this.transmuxer.setAudioAppendStart(Math.ceil(data.appendStart * 90000));\n }\n\n /**\n * Forces the pipeline to finish processing the last segment and emit it's\n * results.\n *\n * @param {Object} data event data, not really used\n */\n }, {\n key: 'flush',\n value: function flush(data) {\n this.transmuxer.flush();\n }\n }, {\n key: 'resetCaptions',\n value: function resetCaptions() {\n this.transmuxer.resetCaptions();\n }\n }, {\n key: 'alignGopsWith',\n value: function alignGopsWith(data) {\n this.transmuxer.alignGopsWith(data.gopsToAlignWith.slice());\n }\n }]);\n\n return MessageHandlers;\n})();\n\nvar TransmuxerWorker = function TransmuxerWorker(self) {\n self.onmessage = function (event) {\n if (event.data.action === 'init' && event.data.options) {\n this.messageHandlers = new MessageHandlers(event.data.options);\n return;\n }\n\n if (!this.messageHandlers) {\n this.messageHandlers = new MessageHandlers();\n }\n\n if (event.data && event.data.action && event.data.action !== 'init') {\n if (this.messageHandlers[event.data.action]) {\n this.messageHandlers[event.data.action](event.data);\n }\n }\n };\n};\n\nexports['default'] = function (self) {\n return new TransmuxerWorker(self);\n};\n\nmodule.exports = exports['default'];","/**\n * mux.js\n *\n * Copyright (c) 2016 Brightcove\n * All rights reserved.\n *\n * Accepts program elementary stream (PES) data events and corrects\n * decode and presentation time stamps to account for a rollover\n * of the 33 bit value.\n */\n\n'use strict';\n\nvar Stream = require('../utils/stream');\n\nvar MAX_TS = 8589934592;\n\nvar RO_THRESH = 4294967296;\n\nvar handleRollover = function(value, reference) {\n var direction = 1;\n\n if (value > reference) {\n // If the current timestamp value is greater than our reference timestamp and we detect a\n // timestamp rollover, this means the roll over is happening in the opposite direction.\n // Example scenario: Enter a long stream/video just after a rollover occurred. The reference\n // point will be set to a small number, e.g. 1. The user then seeks backwards over the\n // rollover point. In loading this segment, the timestamp values will be very large,\n // e.g. 2^33 - 1. Since this comes before the data we loaded previously, we want to adjust\n // the time stamp to be `value - 2^33`.\n direction = -1;\n }\n\n // Note: A seek forwards or back that is greater than the RO_THRESH (2^32, ~13 hours) will\n // cause an incorrect adjustment.\n while (Math.abs(reference - value) > RO_THRESH) {\n value += (direction * MAX_TS);\n }\n\n return value;\n};\n\nvar TimestampRolloverStream = function(type) {\n var lastDTS, referenceDTS;\n\n TimestampRolloverStream.prototype.init.call(this);\n\n this.type_ = type;\n\n this.push = function(data) {\n if (data.type !== this.type_) {\n return;\n }\n\n if (referenceDTS === undefined) {\n referenceDTS = data.dts;\n }\n\n data.dts = handleRollover(data.dts, referenceDTS);\n data.pts = handleRollover(data.pts, referenceDTS);\n\n lastDTS = data.dts;\n\n this.trigger('data', data);\n };\n\n this.flush = function() {\n referenceDTS = lastDTS;\n this.trigger('done');\n };\n\n this.discontinuity = function() {\n referenceDTS = void 0;\n lastDTS = void 0;\n };\n\n};\n\nTimestampRolloverStream.prototype = new Stream();\n\nmodule.exports = {\n TimestampRolloverStream: TimestampRolloverStream,\n handleRollover: handleRollover\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _stream = require('./stream');\n\nvar _stream2 = _interopRequireDefault(_stream);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * @file m3u8/line-stream.js\n */\n\n\n/**\n * A stream that buffers string input and generates a `data` event for each\n * line.\n *\n * @class LineStream\n * @extends Stream\n */\nvar LineStream = function (_Stream) {\n _inherits(LineStream, _Stream);\n\n function LineStream() {\n _classCallCheck(this, LineStream);\n\n var _this = _possibleConstructorReturn(this, (LineStream.__proto__ || Object.getPrototypeOf(LineStream)).call(this));\n\n _this.buffer = '';\n return _this;\n }\n\n /**\n * Add new data to be parsed.\n *\n * @param {String} data the text to process\n */\n\n\n _createClass(LineStream, [{\n key: 'push',\n value: function push(data) {\n var nextNewline = void 0;\n\n this.buffer += data;\n nextNewline = this.buffer.indexOf('\\n');\n\n for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\\n')) {\n this.trigger('data', this.buffer.substring(0, nextNewline));\n this.buffer = this.buffer.substring(nextNewline + 1);\n }\n }\n }]);\n\n return LineStream;\n}(_stream2['default']);\n\nexports['default'] = LineStream;","/**\n * mux.js\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * Utilities to detect basic properties and metadata about MP4s.\n */\n'use strict';\n\nvar findBox, parseType, timescale, startTime;\n\n// Find the data for a box specified by its path\nfindBox = function(data, path) {\n var results = [],\n i, size, type, end, subresults;\n\n if (!path.length) {\n // short-circuit the search for empty paths\n return null;\n }\n\n for (i = 0; i < data.byteLength;) {\n size = data[i] << 24;\n size |= data[i + 1] << 16;\n size |= data[i + 2] << 8;\n size |= data[i + 3];\n\n type = parseType(data.subarray(i + 4, i + 8));\n\n end = size > 1 ? i + size : data.byteLength;\n\n if (type === path[0]) {\n if (path.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data.subarray(i + 8, end));\n } else {\n // recursively search for the next box along the path\n subresults = findBox(data.subarray(i + 8, end), path.slice(1));\n if (subresults.length) {\n results = results.concat(subresults);\n }\n }\n }\n i = end;\n }\n\n // we've finished searching all of data\n return results;\n};\n\n/**\n * Returns the string representation of an ASCII encoded four byte buffer.\n * @param buffer {Uint8Array} a four-byte buffer to translate\n * @return {string} the corresponding string\n */\nparseType = function(buffer) {\n var result = '';\n result += String.fromCharCode(buffer[0]);\n result += String.fromCharCode(buffer[1]);\n result += String.fromCharCode(buffer[2]);\n result += String.fromCharCode(buffer[3]);\n return result;\n};\n\n/**\n * Parses an MP4 initialization segment and extracts the timescale\n * values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * ```\n * @param init {Uint8Array} the bytes of the init segment\n * @return {object} a hash of track ids to timescale values or null if\n * the init segment is malformed.\n */\ntimescale = function(init) {\n var\n result = {},\n traks = findBox(init, ['moov', 'trak']);\n\n // mdhd timescale\n return traks.reduce(function(result, trak) {\n var tkhd, version, index, id, mdhd;\n\n tkhd = findBox(trak, ['tkhd'])[0];\n if (!tkhd) {\n return null;\n }\n version = tkhd[0];\n index = version === 0 ? 12 : 20;\n id = tkhd[index] << 24 |\n tkhd[index + 1] << 16 |\n tkhd[index + 2] << 8 |\n tkhd[index + 3];\n\n mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (!mdhd) {\n return null;\n }\n version = mdhd[0];\n index = version === 0 ? 12 : 20;\n result[id] = mdhd[index] << 24 |\n mdhd[index + 1] << 16 |\n mdhd[index + 2] << 8 |\n mdhd[index + 3];\n return result;\n }, result);\n};\n\n/**\n * Determine the base media decode start time, in seconds, for an MP4\n * fragment. If multiple fragments are specified, the earliest time is\n * returned.\n *\n * The base media decode time can be parsed from track fragment\n * metadata:\n * ```\n * moof > traf > tfdt.baseMediaDecodeTime\n * ```\n * It requires the timescale value from the mdhd to interpret.\n *\n * @param timescale {object} a hash of track ids to timescale values.\n * @return {number} the earliest base media decode start time for the\n * fragment, in seconds\n */\nstartTime = function(timescale, fragment) {\n var trafs, baseTimes, result;\n\n // we need info from two childrend of each track fragment box\n trafs = findBox(fragment, ['moof', 'traf']);\n\n // determine the start times for each track\n baseTimes = [].concat.apply([], trafs.map(function(traf) {\n return findBox(traf, ['tfhd']).map(function(tfhd) {\n var id, scale, baseTime;\n\n // get the track id from the tfhd\n id = tfhd[4] << 24 |\n tfhd[5] << 16 |\n tfhd[6] << 8 |\n tfhd[7];\n // assume a 90kHz clock if no timescale was specified\n scale = timescale[id] || 90e3;\n\n // get the base media decode time from the tfdt\n baseTime = findBox(traf, ['tfdt']).map(function(tfdt) {\n var version, result;\n\n version = tfdt[0];\n result = tfdt[4] << 24 |\n tfdt[5] << 16 |\n tfdt[6] << 8 |\n tfdt[7];\n if (version === 1) {\n result *= Math.pow(2, 32);\n result += tfdt[8] << 24 |\n tfdt[9] << 16 |\n tfdt[10] << 8 |\n tfdt[11];\n }\n return result;\n })[0];\n baseTime = baseTime || Infinity;\n\n // convert base time to seconds\n return baseTime / scale;\n });\n }));\n\n // return the minimum\n result = Math.min.apply(null, baseTimes);\n return isFinite(result) ? result : 0;\n};\n\nmodule.exports = {\n parseType: parseType,\n timescale: timescale,\n startTime: startTime\n};\n","var defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (Target, Source, key) {\n key in Target || defineProperty(Target, key, {\n configurable: true,\n get: function () { return Source[key]; },\n set: function (it) { Source[key] = it; }\n });\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = {\n GOAL_BUFFER_LENGTH: 30,\n MAX_GOAL_BUFFER_LENGTH: 60,\n GOAL_BUFFER_LENGTH_RATE: 1,\n // A fudge factor to apply to advertised playlist bitrates to account for\n // temporary flucations in client bandwidth\n BANDWIDTH_VARIANCE: 1.2,\n // How much of the buffer must be filled before we consider upswitching\n BUFFER_LOW_WATER_LINE: 0,\n MAX_BUFFER_LOW_WATER_LINE: 30,\n BUFFER_LOW_WATER_LINE_RATE: 1\n};\nmodule.exports = exports[\"default\"];","'use strict';\n\nvar Stream = require('../utils/stream.js');\n\n/**\n * The final stage of the transmuxer that emits the flv tags\n * for audio, video, and metadata. Also tranlates in time and\n * outputs caption data and id3 cues.\n */\nvar CoalesceStream = function(options) {\n // Number of Tracks per output segment\n // If greater than 1, we combine multiple\n // tracks into a single segment\n this.numberOfTracks = 0;\n this.metadataStream = options.metadataStream;\n\n this.videoTags = [];\n this.audioTags = [];\n this.videoTrack = null;\n this.audioTrack = null;\n this.pendingCaptions = [];\n this.pendingMetadata = [];\n this.pendingTracks = 0;\n this.processedTracks = 0;\n\n CoalesceStream.prototype.init.call(this);\n\n // Take output from multiple\n this.push = function(output) {\n // buffer incoming captions until the associated video segment\n // finishes\n if (output.text) {\n return this.pendingCaptions.push(output);\n }\n // buffer incoming id3 tags until the final flush\n if (output.frames) {\n return this.pendingMetadata.push(output);\n }\n\n if (output.track.type === 'video') {\n this.videoTrack = output.track;\n this.videoTags = output.tags;\n this.pendingTracks++;\n }\n if (output.track.type === 'audio') {\n this.audioTrack = output.track;\n this.audioTags = output.tags;\n this.pendingTracks++;\n }\n };\n};\n\nCoalesceStream.prototype = new Stream();\nCoalesceStream.prototype.flush = function(flushSource) {\n var\n id3,\n caption,\n i,\n timelineStartPts,\n event = {\n tags: {},\n captions: [],\n captionStreams: {},\n metadata: []\n };\n\n if (this.pendingTracks < this.numberOfTracks) {\n if (flushSource !== 'VideoSegmentStream' &&\n flushSource !== 'AudioSegmentStream') {\n // Return because we haven't received a flush from a data-generating\n // portion of the segment (meaning that we have only recieved meta-data\n // or captions.)\n return;\n } else if (this.pendingTracks === 0) {\n // In the case where we receive a flush without any data having been\n // received we consider it an emitted track for the purposes of coalescing\n // `done` events.\n // We do this for the case where there is an audio and video track in the\n // segment but no audio data. (seen in several playlists with alternate\n // audio tracks and no audio present in the main TS segments.)\n this.processedTracks++;\n\n if (this.processedTracks < this.numberOfTracks) {\n return;\n }\n }\n }\n\n this.processedTracks += this.pendingTracks;\n this.pendingTracks = 0;\n\n if (this.processedTracks < this.numberOfTracks) {\n return;\n }\n\n if (this.videoTrack) {\n timelineStartPts = this.videoTrack.timelineStartInfo.pts;\n } else if (this.audioTrack) {\n timelineStartPts = this.audioTrack.timelineStartInfo.pts;\n }\n\n event.tags.videoTags = this.videoTags;\n event.tags.audioTags = this.audioTags;\n\n // Translate caption PTS times into second offsets into the\n // video timeline for the segment, and add track info\n for (i = 0; i < this.pendingCaptions.length; i++) {\n caption = this.pendingCaptions[i];\n caption.startTime = caption.startPts - timelineStartPts;\n caption.startTime /= 90e3;\n caption.endTime = caption.endPts - timelineStartPts;\n caption.endTime /= 90e3;\n event.captionStreams[caption.stream] = true;\n event.captions.push(caption);\n }\n\n // Translate ID3 frame PTS times into second offsets into the\n // video timeline for the segment\n for (i = 0; i < this.pendingMetadata.length; i++) {\n id3 = this.pendingMetadata[i];\n id3.cueTime = id3.pts - timelineStartPts;\n id3.cueTime /= 90e3;\n event.metadata.push(id3);\n }\n // We add this to every single emitted segment even though we only need\n // it for the first\n event.metadata.dispatchType = this.metadataStream.dispatchType;\n\n // Reset stream state\n this.videoTrack = null;\n this.audioTrack = null;\n this.videoTags = [];\n this.audioTags = [];\n this.pendingCaptions.length = 0;\n this.pendingMetadata.length = 0;\n this.pendingTracks = 0;\n this.processedTracks = 0;\n\n // Emit the final segment\n this.trigger('data', event);\n\n this.trigger('done');\n};\n\nmodule.exports = CoalesceStream;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Default exports for Node. Export the extended versions of VTTCue and\n// VTTRegion in Node since we likely want the capability to convert back and\n// forth between JSON. If we don't then it's not that big of a deal since we're\n// off browser.\n\nvar window = require('global/window');\n\nvar vttjs = module.exports = {\n WebVTT: require(\"./vtt.js\"),\n VTTCue: require(\"./vttcue.js\"),\n VTTRegion: require(\"./vttregion.js\")\n};\n\nwindow.vttjs = vttjs;\nwindow.WebVTT = vttjs.WebVTT;\n\nvar cueShim = vttjs.VTTCue;\nvar regionShim = vttjs.VTTRegion;\nvar nativeVTTCue = window.VTTCue;\nvar nativeVTTRegion = window.VTTRegion;\n\nvttjs.shim = function() {\n window.VTTCue = cueShim;\n window.VTTRegion = regionShim;\n};\n\nvttjs.restore = function() {\n window.VTTCue = nativeVTTCue;\n window.VTTRegion = nativeVTTRegion;\n};\n\nif (!window.VTTCue) {\n vttjs.shim();\n}\n","var classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","\"use strict\";\n\nvar window = require(\"global/window\");\n\nvar _extends = require(\"@babel/runtime/helpers/extends\");\n\nvar isFunction = require('is-function');\n\ncreateXHR.httpHandler = require('./http-handler.js');\n/**\n * @license\n * slighly modified parse-headers 2.0.2 \n * Copyright (c) 2014 David Björklund\n * Available under the MIT license\n * \n */\n\nvar parseHeaders = function parseHeaders(headers) {\n var result = {};\n\n if (!headers) {\n return result;\n }\n\n headers.trim().split('\\n').forEach(function (row) {\n var index = row.indexOf(':');\n var key = row.slice(0, index).trim().toLowerCase();\n var value = row.slice(index + 1).trim();\n\n if (typeof result[key] === 'undefined') {\n result[key] = value;\n } else if (Array.isArray(result[key])) {\n result[key].push(value);\n } else {\n result[key] = [result[key], value];\n }\n });\n return result;\n};\n\nmodule.exports = createXHR; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = createXHR;\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop;\ncreateXHR.XDomainRequest = \"withCredentials\" in new createXHR.XMLHttpRequest() ? createXHR.XMLHttpRequest : window.XDomainRequest;\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function (method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function (uri, options, callback) {\n options = initParams(uri, options, callback);\n options.method = method.toUpperCase();\n return _createXHR(options);\n };\n});\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i]);\n }\n}\n\nfunction isEmpty(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) return false;\n }\n\n return true;\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri;\n\n if (isFunction(options)) {\n callback = options;\n\n if (typeof uri === \"string\") {\n params = {\n uri: uri\n };\n }\n } else {\n params = _extends({}, options, {\n uri: uri\n });\n }\n\n params.callback = callback;\n return params;\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback);\n return _createXHR(options);\n}\n\nfunction _createXHR(options) {\n if (typeof options.callback === \"undefined\") {\n throw new Error(\"callback argument missing\");\n }\n\n var called = false;\n\n var callback = function cbOnce(err, response, body) {\n if (!called) {\n called = true;\n options.callback(err, response, body);\n }\n };\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0);\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined;\n\n if (xhr.response) {\n body = xhr.response;\n } else {\n body = xhr.responseText || getXml(xhr);\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body);\n } catch (e) {}\n }\n\n return body;\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer);\n\n if (!(evt instanceof Error)) {\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\"));\n }\n\n evt.statusCode = 0;\n return callback(evt, failureResponse);\n } // will load the data & process the response in a special response object\n\n\n function loadFunc() {\n if (aborted) return;\n var status;\n clearTimeout(timeoutTimer);\n\n if (options.useXDR && xhr.status === undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200;\n } else {\n status = xhr.status === 1223 ? 204 : xhr.status;\n }\n\n var response = failureResponse;\n var err = null;\n\n if (status !== 0) {\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n };\n\n if (xhr.getAllResponseHeaders) {\n //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders());\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\");\n }\n\n return callback(err, response, response.body);\n }\n\n var xhr = options.xhr || null;\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest();\n } else {\n xhr = new createXHR.XMLHttpRequest();\n }\n }\n\n var key;\n var aborted;\n var uri = xhr.url = options.uri || options.url;\n var method = xhr.method = options.method || \"GET\";\n var body = options.body || options.data;\n var headers = xhr.headers = options.headers || {};\n var sync = !!options.sync;\n var isJson = false;\n var timeoutTimer;\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n };\n\n if (\"json\" in options && options.json !== false) {\n isJson = true;\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\"); //Don't override existing accept header declared by user\n\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\"); //Don't override existing accept header declared by user\n\n body = JSON.stringify(options.json === true ? body : options.json);\n }\n }\n\n xhr.onreadystatechange = readystatechange;\n xhr.onload = loadFunc;\n xhr.onerror = errorFunc; // IE9 must have onprogress be set to a unique function.\n\n xhr.onprogress = function () {// IE must die\n };\n\n xhr.onabort = function () {\n aborted = true;\n };\n\n xhr.ontimeout = errorFunc;\n xhr.open(method, uri, !sync, options.username, options.password); //has to be after open\n\n if (!sync) {\n xhr.withCredentials = !!options.withCredentials;\n } // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n\n\n if (!sync && options.timeout > 0) {\n timeoutTimer = setTimeout(function () {\n if (aborted) return;\n aborted = true; //IE9 may still call readystatechange\n\n xhr.abort(\"timeout\");\n var e = new Error(\"XMLHttpRequest timeout\");\n e.code = \"ETIMEDOUT\";\n errorFunc(e);\n }, options.timeout);\n }\n\n if (xhr.setRequestHeader) {\n for (key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\");\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType;\n }\n\n if (\"beforeSend\" in options && typeof options.beforeSend === \"function\") {\n options.beforeSend(xhr);\n } // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n\n\n xhr.send(body || null);\n return xhr;\n}\n\nfunction getXml(xhr) {\n // xhr.responseXML will throw Exception \"InvalidStateError\" or \"DOMException\"\n // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML.\n try {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML;\n }\n\n var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\";\n\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML;\n }\n } catch (e) {}\n\n return null;\n}\n\nfunction noop() {}","/**\n * @file create-text-tracks-if-necessary.js\n */\n\n/**\n * Create text tracks on video.js if they exist on a segment.\n *\n * @param {Object} sourceBuffer the VSB or FSB\n * @param {Object} mediaSource the HTML or Flash media source\n * @param {Object} segment the segment that may contain the text track\n * @private\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nvar createTextTracksIfNecessary = function createTextTracksIfNecessary(sourceBuffer, mediaSource, segment) {\n var player = mediaSource.player_;\n\n // create an in-band caption track if one is present in the segment\n if (segment.captions && segment.captions.length) {\n if (!sourceBuffer.inbandTextTracks_) {\n sourceBuffer.inbandTextTracks_ = {};\n }\n\n for (var trackId in segment.captionStreams) {\n if (!sourceBuffer.inbandTextTracks_[trackId]) {\n player.tech_.trigger({ type: 'usage', name: 'hls-608' });\n var track = player.textTracks().getTrackById(trackId);\n\n if (track) {\n // Resuse an existing track with a CC# id because this was\n // very likely created by videojs-contrib-hls from information\n // in the m3u8 for us to use\n sourceBuffer.inbandTextTracks_[trackId] = track;\n } else {\n // Otherwise, create a track with the default `CC#` label and\n // without a language\n sourceBuffer.inbandTextTracks_[trackId] = player.addRemoteTextTrack({\n kind: 'captions',\n id: trackId,\n label: trackId\n }, false).track;\n }\n }\n }\n }\n\n if (segment.metadata && segment.metadata.length && !sourceBuffer.metadataTrack_) {\n sourceBuffer.metadataTrack_ = player.addRemoteTextTrack({\n kind: 'metadata',\n label: 'Timed Metadata'\n }, false).track;\n sourceBuffer.metadataTrack_.inBandMetadataTrackDispatchType = segment.metadata.dispatchType;\n }\n};\n\nexports['default'] = createTextTracksIfNecessary;\nmodule.exports = exports['default'];","import { toUint8, bytesMatch } from './byte-helpers.js';\nvar ID3 = toUint8([0x49, 0x44, 0x33]);\nexport var getId3Size = function getId3Size(bytes, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n bytes = toUint8(bytes);\n var flags = bytes[offset + 5];\n var returnSize = bytes[offset + 6] << 21 | bytes[offset + 7] << 14 | bytes[offset + 8] << 7 | bytes[offset + 9];\n var footerPresent = (flags & 16) >> 4;\n\n if (footerPresent) {\n return returnSize + 20;\n }\n\n return returnSize + 10;\n};\nexport var getId3Offset = function getId3Offset(bytes, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n bytes = toUint8(bytes);\n\n if (bytes.length - offset < 10 || !bytesMatch(bytes, ID3, {\n offset: offset\n })) {\n return offset;\n }\n\n offset += getId3Size(bytes, offset); // recursive check for id3 tags as some files\n // have multiple ID3 tag sections even though\n // they should not.\n\n return getId3Offset(bytes, offset);\n};","'use strict';\n\nvar Stream = require('../utils/stream.js');\nvar ExpGolomb = require('../utils/exp-golomb.js');\n\nvar H264Stream, NalByteStream;\nvar PROFILES_WITH_OPTIONAL_SPS_DATA;\n\n/**\n * Accepts a NAL unit byte stream and unpacks the embedded NAL units.\n */\nNalByteStream = function() {\n var\n syncPoint = 0,\n i,\n buffer;\n NalByteStream.prototype.init.call(this);\n\n this.push = function(data) {\n var swapBuffer;\n\n if (!buffer) {\n buffer = data.data;\n } else {\n swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength);\n swapBuffer.set(buffer);\n swapBuffer.set(data.data, buffer.byteLength);\n buffer = swapBuffer;\n }\n\n // Rec. ITU-T H.264, Annex B\n // scan for NAL unit boundaries\n\n // a match looks like this:\n // 0 0 1 .. NAL .. 0 0 1\n // ^ sync point ^ i\n // or this:\n // 0 0 1 .. NAL .. 0 0 0\n // ^ sync point ^ i\n\n // advance the sync point to a NAL start, if necessary\n for (; syncPoint < buffer.byteLength - 3; syncPoint++) {\n if (buffer[syncPoint + 2] === 1) {\n // the sync point is properly aligned\n i = syncPoint + 5;\n break;\n }\n }\n\n while (i < buffer.byteLength) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (buffer[i]) {\n case 0:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0) {\n i += 2;\n break;\n } else if (buffer[i - 2] !== 0) {\n i++;\n break;\n }\n\n // deliver the NAL unit if it isn't empty\n if (syncPoint + 3 !== i - 2) {\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n }\n\n // drop trailing zeroes\n do {\n i++;\n } while (buffer[i] !== 1 && i < buffer.length);\n syncPoint = i - 2;\n i += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0 ||\n buffer[i - 2] !== 0) {\n i += 3;\n break;\n }\n\n // deliver the NAL unit\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n syncPoint = i - 2;\n i += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n i += 3;\n break;\n }\n }\n // filter out the NAL units that were delivered\n buffer = buffer.subarray(syncPoint);\n i -= syncPoint;\n syncPoint = 0;\n };\n\n this.flush = function() {\n // deliver the last buffered NAL unit\n if (buffer && buffer.byteLength > 3) {\n this.trigger('data', buffer.subarray(syncPoint + 3));\n }\n // reset the stream state\n buffer = null;\n syncPoint = 0;\n this.trigger('done');\n };\n};\nNalByteStream.prototype = new Stream();\n\n// values of profile_idc that indicate additional fields are included in the SPS\n// see Recommendation ITU-T H.264 (4/2013),\n// 7.3.2.1.1 Sequence parameter set data syntax\nPROFILES_WITH_OPTIONAL_SPS_DATA = {\n 100: true,\n 110: true,\n 122: true,\n 244: true,\n 44: true,\n 83: true,\n 86: true,\n 118: true,\n 128: true,\n 138: true,\n 139: true,\n 134: true\n};\n\n/**\n * Accepts input from a ElementaryStream and produces H.264 NAL unit data\n * events.\n */\nH264Stream = function() {\n var\n nalByteStream = new NalByteStream(),\n self,\n trackId,\n currentPts,\n currentDts,\n\n discardEmulationPreventionBytes,\n readSequenceParameterSet,\n skipScalingList;\n\n H264Stream.prototype.init.call(this);\n self = this;\n\n this.push = function(packet) {\n if (packet.type !== 'video') {\n return;\n }\n trackId = packet.trackId;\n currentPts = packet.pts;\n currentDts = packet.dts;\n\n nalByteStream.push(packet);\n };\n\n nalByteStream.on('data', function(data) {\n var\n event = {\n trackId: trackId,\n pts: currentPts,\n dts: currentDts,\n data: data\n };\n\n switch (data[0] & 0x1f) {\n case 0x05:\n event.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr';\n break;\n case 0x06:\n event.nalUnitType = 'sei_rbsp';\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n break;\n case 0x07:\n event.nalUnitType = 'seq_parameter_set_rbsp';\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n event.config = readSequenceParameterSet(event.escapedRBSP);\n break;\n case 0x08:\n event.nalUnitType = 'pic_parameter_set_rbsp';\n break;\n case 0x09:\n event.nalUnitType = 'access_unit_delimiter_rbsp';\n break;\n\n default:\n break;\n }\n self.trigger('data', event);\n });\n nalByteStream.on('done', function() {\n self.trigger('done');\n });\n\n this.flush = function() {\n nalByteStream.flush();\n };\n\n /**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @param expGolombDecoder {object} an ExpGolomb pointed to the\n * start of a scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n skipScalingList = function(count, expGolombDecoder) {\n var\n lastScale = 8,\n nextScale = 8,\n j,\n deltaScale;\n\n for (j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = expGolombDecoder.readExpGolomb();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n\n lastScale = (nextScale === 0) ? lastScale : nextScale;\n }\n };\n\n /**\n * Expunge any \"Emulation Prevention\" bytes from a \"Raw Byte\n * Sequence Payload\"\n * @param data {Uint8Array} the bytes of a RBSP from a NAL\n * unit\n * @return {Uint8Array} the RBSP without any Emulation\n * Prevention Bytes\n */\n discardEmulationPreventionBytes = function(data) {\n var\n length = data.byteLength,\n emulationPreventionBytesPositions = [],\n i = 1,\n newLength, newData;\n\n // Find all `Emulation Prevention Bytes`\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n }\n\n // If no Emulation Prevention Bytes were found just return the original\n // array\n if (emulationPreventionBytesPositions.length === 0) {\n return data;\n }\n\n // Create a new array to hold the NAL unit data\n newLength = length - emulationPreventionBytesPositions.length;\n newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n // Skip this byte\n sourceIndex++;\n // Remove this position index\n emulationPreventionBytesPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n\n return newData;\n };\n\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n readSequenceParameterSet = function(data) {\n var\n frameCropLeftOffset = 0,\n frameCropRightOffset = 0,\n frameCropTopOffset = 0,\n frameCropBottomOffset = 0,\n sarScale = 1,\n expGolombDecoder, profileIdc, levelIdc, profileCompatibility,\n chromaFormatIdc, picOrderCntType,\n numRefFramesInPicOrderCntCycle, picWidthInMbsMinus1,\n picHeightInMapUnitsMinus1,\n frameMbsOnlyFlag,\n scalingListCount,\n sarRatio,\n aspectRatioIdc,\n i;\n\n expGolombDecoder = new ExpGolomb(data);\n profileIdc = expGolombDecoder.readUnsignedByte(); // profile_idc\n profileCompatibility = expGolombDecoder.readUnsignedByte(); // constraint_set[0-5]_flag\n levelIdc = expGolombDecoder.readUnsignedByte(); // level_idc u(8)\n expGolombDecoder.skipUnsignedExpGolomb(); // seq_parameter_set_id\n\n // some profiles have more optional data we don't need\n if (PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]) {\n chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb();\n if (chromaFormatIdc === 3) {\n expGolombDecoder.skipBits(1); // separate_colour_plane_flag\n }\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_luma_minus8\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_chroma_minus8\n expGolombDecoder.skipBits(1); // qpprime_y_zero_transform_bypass_flag\n if (expGolombDecoder.readBoolean()) { // seq_scaling_matrix_present_flag\n scalingListCount = (chromaFormatIdc !== 3) ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (expGolombDecoder.readBoolean()) { // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n skipScalingList(16, expGolombDecoder);\n } else {\n skipScalingList(64, expGolombDecoder);\n }\n }\n }\n }\n }\n\n expGolombDecoder.skipUnsignedExpGolomb(); // log2_max_frame_num_minus4\n picOrderCntType = expGolombDecoder.readUnsignedExpGolomb();\n\n if (picOrderCntType === 0) {\n expGolombDecoder.readUnsignedExpGolomb(); // log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n expGolombDecoder.skipBits(1); // delta_pic_order_always_zero_flag\n expGolombDecoder.skipExpGolomb(); // offset_for_non_ref_pic\n expGolombDecoder.skipExpGolomb(); // offset_for_top_to_bottom_field\n numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n expGolombDecoder.skipExpGolomb(); // offset_for_ref_frame[ i ]\n }\n }\n\n expGolombDecoder.skipUnsignedExpGolomb(); // max_num_ref_frames\n expGolombDecoder.skipBits(1); // gaps_in_frame_num_value_allowed_flag\n\n picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n\n frameMbsOnlyFlag = expGolombDecoder.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n expGolombDecoder.skipBits(1); // mb_adaptive_frame_field_flag\n }\n\n expGolombDecoder.skipBits(1); // direct_8x8_inference_flag\n if (expGolombDecoder.readBoolean()) { // frame_cropping_flag\n frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb();\n }\n if (expGolombDecoder.readBoolean()) {\n // vui_parameters_present_flag\n if (expGolombDecoder.readBoolean()) {\n // aspect_ratio_info_present_flag\n aspectRatioIdc = expGolombDecoder.readUnsignedByte();\n switch (aspectRatioIdc) {\n case 1: sarRatio = [1, 1]; break;\n case 2: sarRatio = [12, 11]; break;\n case 3: sarRatio = [10, 11]; break;\n case 4: sarRatio = [16, 11]; break;\n case 5: sarRatio = [40, 33]; break;\n case 6: sarRatio = [24, 11]; break;\n case 7: sarRatio = [20, 11]; break;\n case 8: sarRatio = [32, 11]; break;\n case 9: sarRatio = [80, 33]; break;\n case 10: sarRatio = [18, 11]; break;\n case 11: sarRatio = [15, 11]; break;\n case 12: sarRatio = [64, 33]; break;\n case 13: sarRatio = [160, 99]; break;\n case 14: sarRatio = [4, 3]; break;\n case 15: sarRatio = [3, 2]; break;\n case 16: sarRatio = [2, 1]; break;\n case 255: {\n sarRatio = [expGolombDecoder.readUnsignedByte() << 8 |\n expGolombDecoder.readUnsignedByte(),\n expGolombDecoder.readUnsignedByte() << 8 |\n expGolombDecoder.readUnsignedByte() ];\n break;\n }\n }\n if (sarRatio) {\n sarScale = sarRatio[0] / sarRatio[1];\n }\n }\n }\n return {\n profileIdc: profileIdc,\n levelIdc: levelIdc,\n profileCompatibility: profileCompatibility,\n width: Math.ceil((((picWidthInMbsMinus1 + 1) * 16) - frameCropLeftOffset * 2 - frameCropRightOffset * 2) * sarScale),\n height: ((2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16) - (frameCropTopOffset * 2) - (frameCropBottomOffset * 2)\n };\n };\n\n};\nH264Stream.prototype = new Stream();\n\nmodule.exports = {\n H264Stream: H264Stream,\n NalByteStream: NalByteStream\n};\n","/**\n * ranges\n *\n * Utilities for working with TimeRanges.\n *\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\n// Fudge factor to account for TimeRanges rounding\nvar TIME_FUDGE_FACTOR = 1 / 30;\n// Comparisons between time values such as current time and the end of the buffered range\n// can be misleading because of precision differences or when the current media has poorly\n// aligned audio and video, which can cause values to be slightly off from what you would\n// expect. This value is what we consider to be safe to use in such comparisons to account\n// for these scenarios.\nvar SAFE_TIME_DELTA = TIME_FUDGE_FACTOR * 3;\n\n/**\n * Clamps a value to within a range\n * @param {Number} num - the value to clamp\n * @param {Number} start - the start of the range to clamp within, inclusive\n * @param {Number} end - the end of the range to clamp within, inclusive\n * @return {Number}\n */\nvar clamp = function clamp(num, _ref) {\n var _ref2 = _slicedToArray(_ref, 2);\n\n var start = _ref2[0];\n var end = _ref2[1];\n\n return Math.min(Math.max(start, num), end);\n};\nvar filterRanges = function filterRanges(timeRanges, predicate) {\n var results = [];\n var i = undefined;\n\n if (timeRanges && timeRanges.length) {\n // Search for ranges that match the predicate\n for (i = 0; i < timeRanges.length; i++) {\n if (predicate(timeRanges.start(i), timeRanges.end(i))) {\n results.push([timeRanges.start(i), timeRanges.end(i)]);\n }\n }\n }\n\n return _videoJs2['default'].createTimeRanges(results);\n};\n\n/**\n * Attempts to find the buffered TimeRange that contains the specified\n * time.\n * @param {TimeRanges} buffered - the TimeRanges object to query\n * @param {number} time - the time to filter on.\n * @returns {TimeRanges} a new TimeRanges object\n */\nvar findRange = function findRange(buffered, time) {\n return filterRanges(buffered, function (start, end) {\n return start - TIME_FUDGE_FACTOR <= time && end + TIME_FUDGE_FACTOR >= time;\n });\n};\n\n/**\n * Returns the TimeRanges that begin later than the specified time.\n * @param {TimeRanges} timeRanges - the TimeRanges object to query\n * @param {number} time - the time to filter on.\n * @returns {TimeRanges} a new TimeRanges object.\n */\nvar findNextRange = function findNextRange(timeRanges, time) {\n return filterRanges(timeRanges, function (start) {\n return start - TIME_FUDGE_FACTOR >= time;\n });\n};\n\n/**\n * Returns gaps within a list of TimeRanges\n * @param {TimeRanges} buffered - the TimeRanges object\n * @return {TimeRanges} a TimeRanges object of gaps\n */\nvar findGaps = function findGaps(buffered) {\n if (buffered.length < 2) {\n return _videoJs2['default'].createTimeRanges();\n }\n\n var ranges = [];\n\n for (var i = 1; i < buffered.length; i++) {\n var start = buffered.end(i - 1);\n var end = buffered.start(i);\n\n ranges.push([start, end]);\n }\n\n return _videoJs2['default'].createTimeRanges(ranges);\n};\n\n/**\n * Search for a likely end time for the segment that was just appened\n * based on the state of the `buffered` property before and after the\n * append. If we fin only one such uncommon end-point return it.\n * @param {TimeRanges} original - the buffered time ranges before the update\n * @param {TimeRanges} update - the buffered time ranges after the update\n * @returns {Number|null} the end time added between `original` and `update`,\n * or null if one cannot be unambiguously determined.\n */\nvar findSoleUncommonTimeRangesEnd = function findSoleUncommonTimeRangesEnd(original, update) {\n var i = undefined;\n var start = undefined;\n var end = undefined;\n var result = [];\n var edges = [];\n\n // In order to qualify as a possible candidate, the end point must:\n // 1) Not have already existed in the `original` ranges\n // 2) Not result from the shrinking of a range that already existed\n // in the `original` ranges\n // 3) Not be contained inside of a range that existed in `original`\n var overlapsCurrentEnd = function overlapsCurrentEnd(span) {\n return span[0] <= end && span[1] >= end;\n };\n\n if (original) {\n // Save all the edges in the `original` TimeRanges object\n for (i = 0; i < original.length; i++) {\n start = original.start(i);\n end = original.end(i);\n\n edges.push([start, end]);\n }\n }\n\n if (update) {\n // Save any end-points in `update` that are not in the `original`\n // TimeRanges object\n for (i = 0; i < update.length; i++) {\n start = update.start(i);\n end = update.end(i);\n\n if (edges.some(overlapsCurrentEnd)) {\n continue;\n }\n\n // at this point it must be a unique non-shrinking end edge\n result.push(end);\n }\n }\n\n // we err on the side of caution and return null if didn't find\n // exactly *one* differing end edge in the search above\n if (result.length !== 1) {\n return null;\n }\n\n return result[0];\n};\n\n/**\n * Calculate the intersection of two TimeRanges\n * @param {TimeRanges} bufferA\n * @param {TimeRanges} bufferB\n * @returns {TimeRanges} The interesection of `bufferA` with `bufferB`\n */\nvar bufferIntersection = function bufferIntersection(bufferA, bufferB) {\n var start = null;\n var end = null;\n var arity = 0;\n var extents = [];\n var ranges = [];\n\n if (!bufferA || !bufferA.length || !bufferB || !bufferB.length) {\n return _videoJs2['default'].createTimeRange();\n }\n\n // Handle the case where we have both buffers and create an\n // intersection of the two\n var count = bufferA.length;\n\n // A) Gather up all start and end times\n while (count--) {\n extents.push({ time: bufferA.start(count), type: 'start' });\n extents.push({ time: bufferA.end(count), type: 'end' });\n }\n count = bufferB.length;\n while (count--) {\n extents.push({ time: bufferB.start(count), type: 'start' });\n extents.push({ time: bufferB.end(count), type: 'end' });\n }\n // B) Sort them by time\n extents.sort(function (a, b) {\n return a.time - b.time;\n });\n\n // C) Go along one by one incrementing arity for start and decrementing\n // arity for ends\n for (count = 0; count < extents.length; count++) {\n if (extents[count].type === 'start') {\n arity++;\n\n // D) If arity is ever incremented to 2 we are entering an\n // overlapping range\n if (arity === 2) {\n start = extents[count].time;\n }\n } else if (extents[count].type === 'end') {\n arity--;\n\n // E) If arity is ever decremented to 1 we leaving an\n // overlapping range\n if (arity === 1) {\n end = extents[count].time;\n }\n }\n\n // F) Record overlapping ranges\n if (start !== null && end !== null) {\n ranges.push([start, end]);\n start = null;\n end = null;\n }\n }\n\n return _videoJs2['default'].createTimeRanges(ranges);\n};\n\n/**\n * Calculates the percentage of `segmentRange` that overlaps the\n * `buffered` time ranges.\n * @param {TimeRanges} segmentRange - the time range that the segment\n * covers adjusted according to currentTime\n * @param {TimeRanges} referenceRange - the original time range that the\n * segment covers\n * @param {Number} currentTime - time in seconds where the current playback\n * is at\n * @param {TimeRanges} buffered - the currently buffered time ranges\n * @returns {Number} percent of the segment currently buffered\n */\nvar calculateBufferedPercent = function calculateBufferedPercent(adjustedRange, referenceRange, currentTime, buffered) {\n var referenceDuration = referenceRange.end(0) - referenceRange.start(0);\n var adjustedDuration = adjustedRange.end(0) - adjustedRange.start(0);\n var bufferMissingFromAdjusted = referenceDuration - adjustedDuration;\n var adjustedIntersection = bufferIntersection(adjustedRange, buffered);\n var referenceIntersection = bufferIntersection(referenceRange, buffered);\n var adjustedOverlap = 0;\n var referenceOverlap = 0;\n\n var count = adjustedIntersection.length;\n\n while (count--) {\n adjustedOverlap += adjustedIntersection.end(count) - adjustedIntersection.start(count);\n\n // If the current overlap segment starts at currentTime, then increase the\n // overlap duration so that it actually starts at the beginning of referenceRange\n // by including the difference between the two Range's durations\n // This is a work around for the way Flash has no buffer before currentTime\n if (adjustedIntersection.start(count) === currentTime) {\n adjustedOverlap += bufferMissingFromAdjusted;\n }\n }\n\n count = referenceIntersection.length;\n\n while (count--) {\n referenceOverlap += referenceIntersection.end(count) - referenceIntersection.start(count);\n }\n\n // Use whichever value is larger for the percentage-buffered since that value\n // is likely more accurate because the only way\n return Math.max(adjustedOverlap, referenceOverlap) / referenceDuration * 100;\n};\n\n/**\n * Return the amount of a range specified by the startOfSegment and segmentDuration\n * overlaps the current buffered content.\n *\n * @param {Number} startOfSegment - the time where the segment begins\n * @param {Number} segmentDuration - the duration of the segment in seconds\n * @param {Number} currentTime - time in seconds where the current playback\n * is at\n * @param {TimeRanges} buffered - the state of the buffer\n * @returns {Number} percentage of the segment's time range that is\n * already in `buffered`\n */\nvar getSegmentBufferedPercent = function getSegmentBufferedPercent(startOfSegment, segmentDuration, currentTime, buffered) {\n var endOfSegment = startOfSegment + segmentDuration;\n\n // The entire time range of the segment\n var originalSegmentRange = _videoJs2['default'].createTimeRanges([[startOfSegment, endOfSegment]]);\n\n // The adjusted segment time range that is setup such that it starts\n // no earlier than currentTime\n // Flash has no notion of a back-buffer so adjustedSegmentRange adjusts\n // for that and the function will still return 100% if a only half of a\n // segment is actually in the buffer as long as the currentTime is also\n // half-way through the segment\n var adjustedSegmentRange = _videoJs2['default'].createTimeRanges([[clamp(startOfSegment, [currentTime, endOfSegment]), endOfSegment]]);\n\n // This condition happens when the currentTime is beyond the segment's\n // end time\n if (adjustedSegmentRange.start(0) === adjustedSegmentRange.end(0)) {\n return 0;\n }\n\n var percent = calculateBufferedPercent(adjustedSegmentRange, originalSegmentRange, currentTime, buffered);\n\n // If the segment is reported as having a zero duration, return 0%\n // since it is likely that we will need to fetch the segment\n if (isNaN(percent) || percent === Infinity || percent === -Infinity) {\n return 0;\n }\n\n return percent;\n};\n\n/**\n * Gets a human readable string for a TimeRange\n *\n * @param {TimeRange} range\n * @returns {String} a human readable string\n */\nvar printableRange = function printableRange(range) {\n var strArr = [];\n\n if (!range || !range.length) {\n return '';\n }\n\n for (var i = 0; i < range.length; i++) {\n strArr.push(range.start(i) + ' => ' + range.end(i));\n }\n\n return strArr.join(', ');\n};\n\n/**\n * Calculates the amount of time left in seconds until the player hits the end of the\n * buffer and causes a rebuffer\n *\n * @param {TimeRange} buffered\n * The state of the buffer\n * @param {Numnber} currentTime\n * The current time of the player\n * @param {Number} playbackRate\n * The current playback rate of the player. Defaults to 1.\n * @return {Number}\n * Time until the player has to start rebuffering in seconds.\n * @function timeUntilRebuffer\n */\nvar timeUntilRebuffer = function timeUntilRebuffer(buffered, currentTime) {\n var playbackRate = arguments.length <= 2 || arguments[2] === undefined ? 1 : arguments[2];\n\n var bufferedEnd = buffered.length ? buffered.end(buffered.length - 1) : 0;\n\n return (bufferedEnd - currentTime) / playbackRate;\n};\n\nexports['default'] = {\n findRange: findRange,\n findNextRange: findNextRange,\n findGaps: findGaps,\n findSoleUncommonTimeRangesEnd: findSoleUncommonTimeRangesEnd,\n getSegmentBufferedPercent: getSegmentBufferedPercent,\n TIME_FUDGE_FACTOR: TIME_FUDGE_FACTOR,\n SAFE_TIME_DELTA: SAFE_TIME_DELTA,\n printableRange: printableRange,\n timeUntilRebuffer: timeUntilRebuffer\n};\nmodule.exports = exports['default'];","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar autoKeyword = \"auto\";\nvar directionSetting = {\n \"\": 1,\n \"lr\": 1,\n \"rl\": 1\n};\nvar alignSetting = {\n \"start\": 1,\n \"center\": 1,\n \"end\": 1,\n \"left\": 1,\n \"right\": 1,\n \"auto\": 1,\n \"line-left\": 1,\n \"line-right\": 1\n};\n\nfunction findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n}\n\nfunction findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n}\n\nfunction VTTCue(startTime, endTime, text) {\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n this.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = \"auto\";\n var _positionAlign = \"auto\";\n var _size = 100;\n var _align = \"center\";\n\n Object.defineProperties(this, {\n \"id\": {\n enumerable: true,\n get: function() {\n return _id;\n },\n set: function(value) {\n _id = \"\" + value;\n }\n },\n\n \"pauseOnExit\": {\n enumerable: true,\n get: function() {\n return _pauseOnExit;\n },\n set: function(value) {\n _pauseOnExit = !!value;\n }\n },\n\n \"startTime\": {\n enumerable: true,\n get: function() {\n return _startTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n },\n\n \"endTime\": {\n enumerable: true,\n get: function() {\n return _endTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n },\n\n \"text\": {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n },\n\n \"region\": {\n enumerable: true,\n get: function() {\n return _region;\n },\n set: function(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n },\n\n \"vertical\": {\n enumerable: true,\n get: function() {\n return _vertical;\n },\n set: function(value) {\n var setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError(\"Vertical: an invalid or illegal direction string was specified.\");\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n },\n\n \"snapToLines\": {\n enumerable: true,\n get: function() {\n return _snapToLines;\n },\n set: function(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n },\n\n \"line\": {\n enumerable: true,\n get: function() {\n return _line;\n },\n set: function(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"Line: an invalid number or illegal string was specified.\");\n }\n _line = value;\n this.hasBeenReset = true;\n }\n },\n\n \"lineAlign\": {\n enumerable: true,\n get: function() {\n return _lineAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n console.warn(\"lineAlign: an invalid or illegal string was specified.\");\n } else {\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }\n },\n\n \"position\": {\n enumerable: true,\n get: function() {\n return _position;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n _position = value;\n this.hasBeenReset = true;\n }\n },\n\n \"positionAlign\": {\n enumerable: true,\n get: function() {\n return _positionAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n console.warn(\"positionAlign: an invalid or illegal string was specified.\");\n } else {\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }\n },\n\n \"size\": {\n enumerable: true,\n get: function() {\n return _size;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n _size = value;\n this.hasBeenReset = true;\n }\n },\n\n \"align\": {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"align: an invalid or illegal alignment string was specified.\");\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }\n });\n\n /**\n * Other spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n this.displayState = undefined;\n}\n\n/**\n * VTTCue methods\n */\n\nVTTCue.prototype.getCueAsHTML = function() {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n return WebVTT.convertCueToDOMTree(window, this.text);\n};\n\nmodule.exports = VTTCue;\n","/*\n * pkcs7.unpad\n * https://github.com/brightcove/pkcs7\n *\n * Copyright (c) 2014 Brightcove\n * Licensed under the apache2 license.\n */\n\n'use strict';\n\n/**\n * Returns the subarray of a Uint8Array without PKCS#7 padding.\n * @param padded {Uint8Array} unencrypted bytes that have been padded\n * @return {Uint8Array} the unpadded bytes\n * @see http://tools.ietf.org/html/rfc5652\n */\nmodule.exports = function unpad(padded) {\n return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]);\n};\n","'use strict';\n\nvar TagList = function() {\n var self = this;\n\n this.list = [];\n\n this.push = function(tag) {\n this.list.push({\n bytes: tag.bytes,\n dts: tag.dts,\n pts: tag.pts,\n keyFrame: tag.keyFrame,\n metaDataTag: tag.metaDataTag\n });\n };\n\n Object.defineProperty(this, 'length', {\n get: function() {\n return self.list.length;\n }\n });\n};\n\nmodule.exports = TagList;\n","/**\n * @file stream.js\n */\n\n/**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\nvar Stream = /*#__PURE__*/function () {\n function Stream() {\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n\n var _proto = Stream.prototype;\n\n _proto.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n\n this.listeners[type].push(listener);\n }\n /**\n * Remove a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {boolean} if we could turn it off or not\n */\n ;\n\n _proto.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n\n var index = this.listeners[type].indexOf(listener); // TODO: which is better?\n // In Video.js we slice listener functions\n // on trigger so that it does not mess up the order\n // while we loop through.\n //\n // Here we slice on off so that the loop in trigger\n // can continue using it's old reference to loop without\n // messing up the order.\n\n this.listeners[type] = this.listeners[type].slice(0);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {string} type the event name\n */\n ;\n\n _proto.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n\n if (arguments.length === 2) {\n var length = callbacks.length;\n\n for (var i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var _length = callbacks.length;\n\n for (var _i = 0; _i < _length; ++_i) {\n callbacks[_i].apply(this, args);\n }\n }\n }\n /**\n * Destroys the stream and cleans up.\n */\n ;\n\n _proto.dispose = function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n ;\n\n _proto.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n\n return Stream;\n}();\n\nexport { Stream as default };","/*! @name m3u8-parser @version 4.7.1 @license Apache-2.0 */\nimport _inheritsLoose from '@babel/runtime/helpers/inheritsLoose';\nimport Stream from '@videojs/vhs-utils/es/stream.js';\nimport _extends from '@babel/runtime/helpers/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/assertThisInitialized';\nimport decodeB64ToUint8Array from '@videojs/vhs-utils/es/decode-b64-to-uint8-array.js';\n\n/**\n * A stream that buffers string input and generates a `data` event for each\n * line.\n *\n * @class LineStream\n * @extends Stream\n */\n\nvar LineStream = /*#__PURE__*/function (_Stream) {\n _inheritsLoose(LineStream, _Stream);\n\n function LineStream() {\n var _this;\n\n _this = _Stream.call(this) || this;\n _this.buffer = '';\n return _this;\n }\n /**\n * Add new data to be parsed.\n *\n * @param {string} data the text to process\n */\n\n\n var _proto = LineStream.prototype;\n\n _proto.push = function push(data) {\n var nextNewline;\n this.buffer += data;\n nextNewline = this.buffer.indexOf('\\n');\n\n for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\\n')) {\n this.trigger('data', this.buffer.substring(0, nextNewline));\n this.buffer = this.buffer.substring(nextNewline + 1);\n }\n };\n\n return LineStream;\n}(Stream);\n\nvar TAB = String.fromCharCode(0x09);\n\nvar parseByterange = function parseByterange(byterangeString) {\n // optionally match and capture 0+ digits before `@`\n // optionally match and capture 0+ digits after `@`\n var match = /([0-9.]*)?@?([0-9.]*)?/.exec(byterangeString || '');\n var result = {};\n\n if (match[1]) {\n result.length = parseInt(match[1], 10);\n }\n\n if (match[2]) {\n result.offset = parseInt(match[2], 10);\n }\n\n return result;\n};\n/**\n * \"forgiving\" attribute list psuedo-grammar:\n * attributes -> keyvalue (',' keyvalue)*\n * keyvalue -> key '=' value\n * key -> [^=]*\n * value -> '\"' [^\"]* '\"' | [^,]*\n */\n\n\nvar attributeSeparator = function attributeSeparator() {\n var key = '[^=]*';\n var value = '\"[^\"]*\"|[^,]*';\n var keyvalue = '(?:' + key + ')=(?:' + value + ')';\n return new RegExp('(?:^|,)(' + keyvalue + ')');\n};\n/**\n * Parse attributes from a line given the separator\n *\n * @param {string} attributes the attribute line to parse\n */\n\n\nvar parseAttributes = function parseAttributes(attributes) {\n // split the string using attributes as the separator\n var attrs = attributes.split(attributeSeparator());\n var result = {};\n var i = attrs.length;\n var attr;\n\n while (i--) {\n // filter out unmatched portions of the string\n if (attrs[i] === '') {\n continue;\n } // split the key and value\n\n\n attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1); // trim whitespace and remove optional quotes around the value\n\n attr[0] = attr[0].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^['\"](.*)['\"]$/g, '$1');\n result[attr[0]] = attr[1];\n }\n\n return result;\n};\n/**\n * A line-level M3U8 parser event stream. It expects to receive input one\n * line at a time and performs a context-free parse of its contents. A stream\n * interpretation of a manifest can be useful if the manifest is expected to\n * be too large to fit comfortably into memory or the entirety of the input\n * is not immediately available. Otherwise, it's probably much easier to work\n * with a regular `Parser` object.\n *\n * Produces `data` events with an object that captures the parser's\n * interpretation of the input. That object has a property `tag` that is one\n * of `uri`, `comment`, or `tag`. URIs only have a single additional\n * property, `line`, which captures the entirety of the input without\n * interpretation. Comments similarly have a single additional property\n * `text` which is the input without the leading `#`.\n *\n * Tags always have a property `tagType` which is the lower-cased version of\n * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance,\n * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized\n * tags are given the tag type `unknown` and a single additional property\n * `data` with the remainder of the input.\n *\n * @class ParseStream\n * @extends Stream\n */\n\n\nvar ParseStream = /*#__PURE__*/function (_Stream) {\n _inheritsLoose(ParseStream, _Stream);\n\n function ParseStream() {\n var _this;\n\n _this = _Stream.call(this) || this;\n _this.customParsers = [];\n _this.tagMappers = [];\n return _this;\n }\n /**\n * Parses an additional line of input.\n *\n * @param {string} line a single line of an M3U8 file to parse\n */\n\n\n var _proto = ParseStream.prototype;\n\n _proto.push = function push(line) {\n var _this2 = this;\n\n var match;\n var event; // strip whitespace\n\n line = line.trim();\n\n if (line.length === 0) {\n // ignore empty lines\n return;\n } // URIs\n\n\n if (line[0] !== '#') {\n this.trigger('data', {\n type: 'uri',\n uri: line\n });\n return;\n } // map tags\n\n\n var newLines = this.tagMappers.reduce(function (acc, mapper) {\n var mappedLine = mapper(line); // skip if unchanged\n\n if (mappedLine === line) {\n return acc;\n }\n\n return acc.concat([mappedLine]);\n }, [line]);\n newLines.forEach(function (newLine) {\n for (var i = 0; i < _this2.customParsers.length; i++) {\n if (_this2.customParsers[i].call(_this2, newLine)) {\n return;\n }\n } // Comments\n\n\n if (newLine.indexOf('#EXT') !== 0) {\n _this2.trigger('data', {\n type: 'comment',\n text: newLine.slice(1)\n });\n\n return;\n } // strip off any carriage returns here so the regex matching\n // doesn't have to account for them.\n\n\n newLine = newLine.replace('\\r', ''); // Tags\n\n match = /^#EXTM3U/.exec(newLine);\n\n if (match) {\n _this2.trigger('data', {\n type: 'tag',\n tagType: 'm3u'\n });\n\n return;\n }\n\n match = /^#EXTINF:?([0-9\\.]*)?,?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'inf'\n };\n\n if (match[1]) {\n event.duration = parseFloat(match[1]);\n }\n\n if (match[2]) {\n event.title = match[2];\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'targetduration'\n };\n\n if (match[1]) {\n event.duration = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'version'\n };\n\n if (match[1]) {\n event.version = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-MEDIA-SEQUENCE:?(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'discontinuity-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'playlist-type'\n };\n\n if (match[1]) {\n event.playlistType = match[1];\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-BYTERANGE:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = _extends(parseByterange(match[1]), {\n type: 'tag',\n tagType: 'byterange'\n });\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'allow-cache'\n };\n\n if (match[1]) {\n event.allowed = !/NO/.test(match[1]);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-MAP:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'map'\n };\n\n if (match[1]) {\n var attributes = parseAttributes(match[1]);\n\n if (attributes.URI) {\n event.uri = attributes.URI;\n }\n\n if (attributes.BYTERANGE) {\n event.byterange = parseByterange(attributes.BYTERANGE);\n }\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-STREAM-INF:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'stream-inf'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.RESOLUTION) {\n var split = event.attributes.RESOLUTION.split('x');\n var resolution = {};\n\n if (split[0]) {\n resolution.width = parseInt(split[0], 10);\n }\n\n if (split[1]) {\n resolution.height = parseInt(split[1], 10);\n }\n\n event.attributes.RESOLUTION = resolution;\n }\n\n if (event.attributes.BANDWIDTH) {\n event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);\n }\n\n if (event.attributes['PROGRAM-ID']) {\n event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10);\n }\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-MEDIA:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-ENDLIST/.exec(newLine);\n\n if (match) {\n _this2.trigger('data', {\n type: 'tag',\n tagType: 'endlist'\n });\n\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY/.exec(newLine);\n\n if (match) {\n _this2.trigger('data', {\n type: 'tag',\n tagType: 'discontinuity'\n });\n\n return;\n }\n\n match = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'program-date-time'\n };\n\n if (match[1]) {\n event.dateTimeString = match[1];\n event.dateTimeObject = new Date(match[1]);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-KEY:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'key'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]); // parse the IV string into a Uint32Array\n\n if (event.attributes.IV) {\n if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') {\n event.attributes.IV = event.attributes.IV.substring(2);\n }\n\n event.attributes.IV = event.attributes.IV.match(/.{8}/g);\n event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);\n event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);\n event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);\n event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);\n event.attributes.IV = new Uint32Array(event.attributes.IV);\n }\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-START:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'start'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n event.attributes['TIME-OFFSET'] = parseFloat(event.attributes['TIME-OFFSET']);\n event.attributes.PRECISE = /YES/.test(event.attributes.PRECISE);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out-cont'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-in'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-SKIP:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'skip'\n };\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.hasOwnProperty('SKIPPED-SEGMENTS')) {\n event.attributes['SKIPPED-SEGMENTS'] = parseInt(event.attributes['SKIPPED-SEGMENTS'], 10);\n }\n\n if (event.attributes.hasOwnProperty('RECENTLY-REMOVED-DATERANGES')) {\n event.attributes['RECENTLY-REMOVED-DATERANGES'] = event.attributes['RECENTLY-REMOVED-DATERANGES'].split(TAB);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-PART:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'part'\n };\n event.attributes = parseAttributes(match[1]);\n ['DURATION'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['INDEPENDENT', 'GAP'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/.test(event.attributes[key]);\n }\n });\n\n if (event.attributes.hasOwnProperty('BYTERANGE')) {\n event.attributes.byterange = parseByterange(event.attributes.BYTERANGE);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'server-control'\n };\n event.attributes = parseAttributes(match[1]);\n ['CAN-SKIP-UNTIL', 'PART-HOLD-BACK', 'HOLD-BACK'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['CAN-SKIP-DATERANGES', 'CAN-BLOCK-RELOAD'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/.test(event.attributes[key]);\n }\n });\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-PART-INF:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'part-inf'\n };\n event.attributes = parseAttributes(match[1]);\n ['PART-TARGET'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'preload-hint'\n };\n event.attributes = parseAttributes(match[1]);\n ['BYTERANGE-START', 'BYTERANGE-LENGTH'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseInt(event.attributes[key], 10);\n var subkey = key === 'BYTERANGE-LENGTH' ? 'length' : 'offset';\n event.attributes.byterange = event.attributes.byterange || {};\n event.attributes.byterange[subkey] = event.attributes[key]; // only keep the parsed byterange object.\n\n delete event.attributes[key];\n }\n });\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'rendition-report'\n };\n event.attributes = parseAttributes(match[1]);\n ['LAST-MSN', 'LAST-PART'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseInt(event.attributes[key], 10);\n }\n });\n\n _this2.trigger('data', event);\n\n return;\n } // unknown tag type\n\n\n _this2.trigger('data', {\n type: 'tag',\n data: newLine.slice(4)\n });\n });\n }\n /**\n * Add a parser for custom headers\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.customType the custom type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n ;\n\n _proto.addParser = function addParser(_ref) {\n var _this3 = this;\n\n var expression = _ref.expression,\n customType = _ref.customType,\n dataParser = _ref.dataParser,\n segment = _ref.segment;\n\n if (typeof dataParser !== 'function') {\n dataParser = function dataParser(line) {\n return line;\n };\n }\n\n this.customParsers.push(function (line) {\n var match = expression.exec(line);\n\n if (match) {\n _this3.trigger('data', {\n type: 'custom',\n data: dataParser(line),\n customType: customType,\n segment: segment\n });\n\n return true;\n }\n });\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n ;\n\n _proto.addTagMapper = function addTagMapper(_ref2) {\n var expression = _ref2.expression,\n map = _ref2.map;\n\n var mapFn = function mapFn(line) {\n if (expression.test(line)) {\n return map(line);\n }\n\n return line;\n };\n\n this.tagMappers.push(mapFn);\n };\n\n return ParseStream;\n}(Stream);\n\nvar camelCase = function camelCase(str) {\n return str.toLowerCase().replace(/-(\\w)/g, function (a) {\n return a[1].toUpperCase();\n });\n};\n\nvar camelCaseKeys = function camelCaseKeys(attributes) {\n var result = {};\n Object.keys(attributes).forEach(function (key) {\n result[camelCase(key)] = attributes[key];\n });\n return result;\n}; // set SERVER-CONTROL hold back based upon targetDuration and partTargetDuration\n// we need this helper because defaults are based upon targetDuration and\n// partTargetDuration being set, but they may not be if SERVER-CONTROL appears before\n// target durations are set.\n\n\nvar setHoldBack = function setHoldBack(manifest) {\n var serverControl = manifest.serverControl,\n targetDuration = manifest.targetDuration,\n partTargetDuration = manifest.partTargetDuration;\n\n if (!serverControl) {\n return;\n }\n\n var tag = '#EXT-X-SERVER-CONTROL';\n var hb = 'holdBack';\n var phb = 'partHoldBack';\n var minTargetDuration = targetDuration && targetDuration * 3;\n var minPartDuration = partTargetDuration && partTargetDuration * 2;\n\n if (targetDuration && !serverControl.hasOwnProperty(hb)) {\n serverControl[hb] = minTargetDuration;\n this.trigger('info', {\n message: tag + \" defaulting HOLD-BACK to targetDuration * 3 (\" + minTargetDuration + \").\"\n });\n }\n\n if (minTargetDuration && serverControl[hb] < minTargetDuration) {\n this.trigger('warn', {\n message: tag + \" clamping HOLD-BACK (\" + serverControl[hb] + \") to targetDuration * 3 (\" + minTargetDuration + \")\"\n });\n serverControl[hb] = minTargetDuration;\n } // default no part hold back to part target duration * 3\n\n\n if (partTargetDuration && !serverControl.hasOwnProperty(phb)) {\n serverControl[phb] = partTargetDuration * 3;\n this.trigger('info', {\n message: tag + \" defaulting PART-HOLD-BACK to partTargetDuration * 3 (\" + serverControl[phb] + \").\"\n });\n } // if part hold back is too small default it to part target duration * 2\n\n\n if (partTargetDuration && serverControl[phb] < minPartDuration) {\n this.trigger('warn', {\n message: tag + \" clamping PART-HOLD-BACK (\" + serverControl[phb] + \") to partTargetDuration * 2 (\" + minPartDuration + \").\"\n });\n serverControl[phb] = minPartDuration;\n }\n};\n/**\n * A parser for M3U8 files. The current interpretation of the input is\n * exposed as a property `manifest` on parser objects. It's just two lines to\n * create and parse a manifest once you have the contents available as a string:\n *\n * ```js\n * var parser = new m3u8.Parser();\n * parser.push(xhr.responseText);\n * ```\n *\n * New input can later be applied to update the manifest object by calling\n * `push` again.\n *\n * The parser attempts to create a usable manifest object even if the\n * underlying input is somewhat nonsensical. It emits `info` and `warning`\n * events during the parse if it encounters input that seems invalid or\n * requires some property of the manifest object to be defaulted.\n *\n * @class Parser\n * @extends Stream\n */\n\n\nvar Parser = /*#__PURE__*/function (_Stream) {\n _inheritsLoose(Parser, _Stream);\n\n function Parser() {\n var _this;\n\n _this = _Stream.call(this) || this;\n _this.lineStream = new LineStream();\n _this.parseStream = new ParseStream();\n\n _this.lineStream.pipe(_this.parseStream);\n /* eslint-disable consistent-this */\n\n\n var self = _assertThisInitialized(_this);\n /* eslint-enable consistent-this */\n\n\n var uris = [];\n var currentUri = {}; // if specified, the active EXT-X-MAP definition\n\n var currentMap; // if specified, the active decryption key\n\n var _key;\n\n var hasParts = false;\n\n var noop = function noop() {};\n\n var defaultMediaGroups = {\n 'AUDIO': {},\n 'VIDEO': {},\n 'CLOSED-CAPTIONS': {},\n 'SUBTITLES': {}\n }; // This is the Widevine UUID from DASH IF IOP. The same exact string is\n // used in MPDs with Widevine encrypted streams.\n\n var widevineUuid = 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'; // group segments into numbered timelines delineated by discontinuities\n\n var currentTimeline = 0; // the manifest is empty until the parse stream begins delivering data\n\n _this.manifest = {\n allowCache: true,\n discontinuityStarts: [],\n segments: []\n }; // keep track of the last seen segment's byte range end, as segments are not required\n // to provide the offset, in which case it defaults to the next byte after the\n // previous segment\n\n var lastByterangeEnd = 0; // keep track of the last seen part's byte range end.\n\n var lastPartByterangeEnd = 0;\n\n _this.on('end', function () {\n // only add preloadSegment if we don't yet have a uri for it.\n // and we actually have parts/preloadHints\n if (currentUri.uri || !currentUri.parts && !currentUri.preloadHints) {\n return;\n }\n\n if (!currentUri.map && currentMap) {\n currentUri.map = currentMap;\n }\n\n if (!currentUri.key && _key) {\n currentUri.key = _key;\n }\n\n if (!currentUri.timeline && typeof currentTimeline === 'number') {\n currentUri.timeline = currentTimeline;\n }\n\n _this.manifest.preloadSegment = currentUri;\n }); // update the manifest with the m3u8 entry from the parse stream\n\n\n _this.parseStream.on('data', function (entry) {\n var mediaGroup;\n var rendition;\n ({\n tag: function tag() {\n // switch based on the tag type\n (({\n version: function version() {\n if (entry.version) {\n this.manifest.version = entry.version;\n }\n },\n 'allow-cache': function allowCache() {\n this.manifest.allowCache = entry.allowed;\n\n if (!('allowed' in entry)) {\n this.trigger('info', {\n message: 'defaulting allowCache to YES'\n });\n this.manifest.allowCache = true;\n }\n },\n byterange: function byterange() {\n var byterange = {};\n\n if ('length' in entry) {\n currentUri.byterange = byterange;\n byterange.length = entry.length;\n\n if (!('offset' in entry)) {\n /*\n * From the latest spec (as of this writing):\n * https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.2\n *\n * Same text since EXT-X-BYTERANGE's introduction in draft 7:\n * https://tools.ietf.org/html/draft-pantos-http-live-streaming-07#section-3.3.1)\n *\n * \"If o [offset] is not present, the sub-range begins at the next byte\n * following the sub-range of the previous media segment.\"\n */\n entry.offset = lastByterangeEnd;\n }\n }\n\n if ('offset' in entry) {\n currentUri.byterange = byterange;\n byterange.offset = entry.offset;\n }\n\n lastByterangeEnd = byterange.offset + byterange.length;\n },\n endlist: function endlist() {\n this.manifest.endList = true;\n },\n inf: function inf() {\n if (!('mediaSequence' in this.manifest)) {\n this.manifest.mediaSequence = 0;\n this.trigger('info', {\n message: 'defaulting media sequence to zero'\n });\n }\n\n if (!('discontinuitySequence' in this.manifest)) {\n this.manifest.discontinuitySequence = 0;\n this.trigger('info', {\n message: 'defaulting discontinuity sequence to zero'\n });\n }\n\n if (entry.duration > 0) {\n currentUri.duration = entry.duration;\n }\n\n if (entry.duration === 0) {\n currentUri.duration = 0.01;\n this.trigger('info', {\n message: 'updating zero segment duration to a small value'\n });\n }\n\n this.manifest.segments = uris;\n },\n key: function key() {\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring key declaration without attribute list'\n });\n return;\n } // clear the active encryption key\n\n\n if (entry.attributes.METHOD === 'NONE') {\n _key = null;\n return;\n }\n\n if (!entry.attributes.URI) {\n this.trigger('warn', {\n message: 'ignoring key declaration without URI'\n });\n return;\n }\n\n if (entry.attributes.KEYFORMAT === 'com.apple.streamingkeydelivery') {\n this.manifest.contentProtection = this.manifest.contentProtection || {}; // TODO: add full support for this.\n\n this.manifest.contentProtection['com.apple.fps.1_0'] = {\n attributes: entry.attributes\n };\n return;\n }\n\n if (entry.attributes.KEYFORMAT === 'com.microsoft.playready') {\n this.manifest.contentProtection = this.manifest.contentProtection || {}; // TODO: add full support for this.\n\n this.manifest.contentProtection['com.microsoft.playready'] = {\n uri: entry.attributes.URI\n };\n return;\n } // check if the content is encrypted for Widevine\n // Widevine/HLS spec: https://storage.googleapis.com/wvdocs/Widevine_DRM_HLS.pdf\n\n\n if (entry.attributes.KEYFORMAT === widevineUuid) {\n var VALID_METHODS = ['SAMPLE-AES', 'SAMPLE-AES-CTR', 'SAMPLE-AES-CENC'];\n\n if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) {\n this.trigger('warn', {\n message: 'invalid key method provided for Widevine'\n });\n return;\n }\n\n if (entry.attributes.METHOD === 'SAMPLE-AES-CENC') {\n this.trigger('warn', {\n message: 'SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead'\n });\n }\n\n if (entry.attributes.URI.substring(0, 23) !== 'data:text/plain;base64,') {\n this.trigger('warn', {\n message: 'invalid key URI provided for Widevine'\n });\n return;\n }\n\n if (!(entry.attributes.KEYID && entry.attributes.KEYID.substring(0, 2) === '0x')) {\n this.trigger('warn', {\n message: 'invalid key ID provided for Widevine'\n });\n return;\n } // if Widevine key attributes are valid, store them as `contentProtection`\n // on the manifest to emulate Widevine tag structure in a DASH mpd\n\n\n this.manifest.contentProtection = this.manifest.contentProtection || {};\n this.manifest.contentProtection['com.widevine.alpha'] = {\n attributes: {\n schemeIdUri: entry.attributes.KEYFORMAT,\n // remove '0x' from the key id string\n keyId: entry.attributes.KEYID.substring(2)\n },\n // decode the base64-encoded PSSH box\n pssh: decodeB64ToUint8Array(entry.attributes.URI.split(',')[1])\n };\n return;\n }\n\n if (!entry.attributes.METHOD) {\n this.trigger('warn', {\n message: 'defaulting key method to AES-128'\n });\n } // setup an encryption key for upcoming segments\n\n\n _key = {\n method: entry.attributes.METHOD || 'AES-128',\n uri: entry.attributes.URI\n };\n\n if (typeof entry.attributes.IV !== 'undefined') {\n _key.iv = entry.attributes.IV;\n }\n },\n 'media-sequence': function mediaSequence() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid media sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.mediaSequence = entry.number;\n },\n 'discontinuity-sequence': function discontinuitySequence() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid discontinuity sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.discontinuitySequence = entry.number;\n currentTimeline = entry.number;\n },\n 'playlist-type': function playlistType() {\n if (!/VOD|EVENT/.test(entry.playlistType)) {\n this.trigger('warn', {\n message: 'ignoring unknown playlist type: ' + entry.playlist\n });\n return;\n }\n\n this.manifest.playlistType = entry.playlistType;\n },\n map: function map() {\n currentMap = {};\n\n if (entry.uri) {\n currentMap.uri = entry.uri;\n }\n\n if (entry.byterange) {\n currentMap.byterange = entry.byterange;\n }\n\n if (_key) {\n currentMap.key = _key;\n }\n },\n 'stream-inf': function streamInf() {\n this.manifest.playlists = uris;\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring empty stream-inf attributes'\n });\n return;\n }\n\n if (!currentUri.attributes) {\n currentUri.attributes = {};\n }\n\n _extends(currentUri.attributes, entry.attributes);\n },\n media: function media() {\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!(entry.attributes && entry.attributes.TYPE && entry.attributes['GROUP-ID'] && entry.attributes.NAME)) {\n this.trigger('warn', {\n message: 'ignoring incomplete or missing media group'\n });\n return;\n } // find the media group, creating defaults as necessary\n\n\n var mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE];\n mediaGroupType[entry.attributes['GROUP-ID']] = mediaGroupType[entry.attributes['GROUP-ID']] || {};\n mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']]; // collect the rendition metadata\n\n rendition = {\n default: /yes/i.test(entry.attributes.DEFAULT)\n };\n\n if (rendition.default) {\n rendition.autoselect = true;\n } else {\n rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT);\n }\n\n if (entry.attributes.LANGUAGE) {\n rendition.language = entry.attributes.LANGUAGE;\n }\n\n if (entry.attributes.URI) {\n rendition.uri = entry.attributes.URI;\n }\n\n if (entry.attributes['INSTREAM-ID']) {\n rendition.instreamId = entry.attributes['INSTREAM-ID'];\n }\n\n if (entry.attributes.CHARACTERISTICS) {\n rendition.characteristics = entry.attributes.CHARACTERISTICS;\n }\n\n if (entry.attributes.FORCED) {\n rendition.forced = /yes/i.test(entry.attributes.FORCED);\n } // insert the new rendition\n\n\n mediaGroup[entry.attributes.NAME] = rendition;\n },\n discontinuity: function discontinuity() {\n currentTimeline += 1;\n currentUri.discontinuity = true;\n this.manifest.discontinuityStarts.push(uris.length);\n },\n 'program-date-time': function programDateTime() {\n if (typeof this.manifest.dateTimeString === 'undefined') {\n // PROGRAM-DATE-TIME is a media-segment tag, but for backwards\n // compatibility, we add the first occurence of the PROGRAM-DATE-TIME tag\n // to the manifest object\n // TODO: Consider removing this in future major version\n this.manifest.dateTimeString = entry.dateTimeString;\n this.manifest.dateTimeObject = entry.dateTimeObject;\n }\n\n currentUri.dateTimeString = entry.dateTimeString;\n currentUri.dateTimeObject = entry.dateTimeObject;\n },\n targetduration: function targetduration() {\n if (!isFinite(entry.duration) || entry.duration < 0) {\n this.trigger('warn', {\n message: 'ignoring invalid target duration: ' + entry.duration\n });\n return;\n }\n\n this.manifest.targetDuration = entry.duration;\n setHoldBack.call(this, this.manifest);\n },\n start: function start() {\n if (!entry.attributes || isNaN(entry.attributes['TIME-OFFSET'])) {\n this.trigger('warn', {\n message: 'ignoring start declaration without appropriate attribute list'\n });\n return;\n }\n\n this.manifest.start = {\n timeOffset: entry.attributes['TIME-OFFSET'],\n precise: entry.attributes.PRECISE\n };\n },\n 'cue-out': function cueOut() {\n currentUri.cueOut = entry.data;\n },\n 'cue-out-cont': function cueOutCont() {\n currentUri.cueOutCont = entry.data;\n },\n 'cue-in': function cueIn() {\n currentUri.cueIn = entry.data;\n },\n 'skip': function skip() {\n this.manifest.skip = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-SKIP', entry.attributes, ['SKIPPED-SEGMENTS']);\n },\n 'part': function part() {\n var _this2 = this;\n\n hasParts = true; // parts are always specifed before a segment\n\n var segmentIndex = this.manifest.segments.length;\n var part = camelCaseKeys(entry.attributes);\n currentUri.parts = currentUri.parts || [];\n currentUri.parts.push(part);\n\n if (part.byterange) {\n if (!part.byterange.hasOwnProperty('offset')) {\n part.byterange.offset = lastPartByterangeEnd;\n }\n\n lastPartByterangeEnd = part.byterange.offset + part.byterange.length;\n }\n\n var partIndex = currentUri.parts.length - 1;\n this.warnOnMissingAttributes_(\"#EXT-X-PART #\" + partIndex + \" for segment #\" + segmentIndex, entry.attributes, ['URI', 'DURATION']);\n\n if (this.manifest.renditionReports) {\n this.manifest.renditionReports.forEach(function (r, i) {\n if (!r.hasOwnProperty('lastPart')) {\n _this2.trigger('warn', {\n message: \"#EXT-X-RENDITION-REPORT #\" + i + \" lacks required attribute(s): LAST-PART\"\n });\n }\n });\n }\n },\n 'server-control': function serverControl() {\n var attrs = this.manifest.serverControl = camelCaseKeys(entry.attributes);\n\n if (!attrs.hasOwnProperty('canBlockReload')) {\n attrs.canBlockReload = false;\n this.trigger('info', {\n message: '#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false'\n });\n }\n\n setHoldBack.call(this, this.manifest);\n\n if (attrs.canSkipDateranges && !attrs.hasOwnProperty('canSkipUntil')) {\n this.trigger('warn', {\n message: '#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set'\n });\n }\n },\n 'preload-hint': function preloadHint() {\n // parts are always specifed before a segment\n var segmentIndex = this.manifest.segments.length;\n var hint = camelCaseKeys(entry.attributes);\n var isPart = hint.type && hint.type === 'PART';\n currentUri.preloadHints = currentUri.preloadHints || [];\n currentUri.preloadHints.push(hint);\n\n if (hint.byterange) {\n if (!hint.byterange.hasOwnProperty('offset')) {\n // use last part byterange end or zero if not a part.\n hint.byterange.offset = isPart ? lastPartByterangeEnd : 0;\n\n if (isPart) {\n lastPartByterangeEnd = hint.byterange.offset + hint.byterange.length;\n }\n }\n }\n\n var index = currentUri.preloadHints.length - 1;\n this.warnOnMissingAttributes_(\"#EXT-X-PRELOAD-HINT #\" + index + \" for segment #\" + segmentIndex, entry.attributes, ['TYPE', 'URI']);\n\n if (!hint.type) {\n return;\n } // search through all preload hints except for the current one for\n // a duplicate type.\n\n\n for (var i = 0; i < currentUri.preloadHints.length - 1; i++) {\n var otherHint = currentUri.preloadHints[i];\n\n if (!otherHint.type) {\n continue;\n }\n\n if (otherHint.type === hint.type) {\n this.trigger('warn', {\n message: \"#EXT-X-PRELOAD-HINT #\" + index + \" for segment #\" + segmentIndex + \" has the same TYPE \" + hint.type + \" as preload hint #\" + i\n });\n }\n }\n },\n 'rendition-report': function renditionReport() {\n var report = camelCaseKeys(entry.attributes);\n this.manifest.renditionReports = this.manifest.renditionReports || [];\n this.manifest.renditionReports.push(report);\n var index = this.manifest.renditionReports.length - 1;\n var required = ['LAST-MSN', 'URI'];\n\n if (hasParts) {\n required.push('LAST-PART');\n }\n\n this.warnOnMissingAttributes_(\"#EXT-X-RENDITION-REPORT #\" + index, entry.attributes, required);\n },\n 'part-inf': function partInf() {\n this.manifest.partInf = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-PART-INF', entry.attributes, ['PART-TARGET']);\n\n if (this.manifest.partInf.partTarget) {\n this.manifest.partTargetDuration = this.manifest.partInf.partTarget;\n }\n\n setHoldBack.call(this, this.manifest);\n }\n })[entry.tagType] || noop).call(self);\n },\n uri: function uri() {\n currentUri.uri = entry.uri;\n uris.push(currentUri); // if no explicit duration was declared, use the target duration\n\n if (this.manifest.targetDuration && !('duration' in currentUri)) {\n this.trigger('warn', {\n message: 'defaulting segment duration to the target duration'\n });\n currentUri.duration = this.manifest.targetDuration;\n } // annotate with encryption information, if necessary\n\n\n if (_key) {\n currentUri.key = _key;\n }\n\n currentUri.timeline = currentTimeline; // annotate with initialization segment information, if necessary\n\n if (currentMap) {\n currentUri.map = currentMap;\n } // reset the last byterange end as it needs to be 0 between parts\n\n\n lastPartByterangeEnd = 0; // prepare for the next URI\n\n currentUri = {};\n },\n comment: function comment() {// comments are not important for playback\n },\n custom: function custom() {\n // if this is segment-level data attach the output to the segment\n if (entry.segment) {\n currentUri.custom = currentUri.custom || {};\n currentUri.custom[entry.customType] = entry.data; // if this is manifest-level data attach to the top level manifest object\n } else {\n this.manifest.custom = this.manifest.custom || {};\n this.manifest.custom[entry.customType] = entry.data;\n }\n }\n })[entry.type].call(self);\n });\n\n return _this;\n }\n\n var _proto = Parser.prototype;\n\n _proto.warnOnMissingAttributes_ = function warnOnMissingAttributes_(identifier, attributes, required) {\n var missing = [];\n required.forEach(function (key) {\n if (!attributes.hasOwnProperty(key)) {\n missing.push(key);\n }\n });\n\n if (missing.length) {\n this.trigger('warn', {\n message: identifier + \" lacks required attribute(s): \" + missing.join(', ')\n });\n }\n }\n /**\n * Parse the input string and update the manifest object.\n *\n * @param {string} chunk a potentially incomplete portion of the manifest\n */\n ;\n\n _proto.push = function push(chunk) {\n this.lineStream.push(chunk);\n }\n /**\n * Flush any remaining input. This can be handy if the last line of an M3U8\n * manifest did not contain a trailing newline but the file has been\n * completely received.\n */\n ;\n\n _proto.end = function end() {\n // flush any buffered input\n this.lineStream.push('\\n');\n this.trigger('end');\n }\n /**\n * Add an additional parser for non-standard tags\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.type the type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n ;\n\n _proto.addParser = function addParser(options) {\n this.parseStream.addParser(options);\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n ;\n\n _proto.addTagMapper = function addTagMapper(options) {\n this.parseStream.addTagMapper(options);\n };\n\n return Parser;\n}(Stream);\n\nexport { LineStream, ParseStream, Parser };\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _stream = require('./stream');\n\nvar _stream2 = _interopRequireDefault(_stream);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * @file m3u8/parse-stream.js\n */\n\n\n/**\n * \"forgiving\" attribute list psuedo-grammar:\n * attributes -> keyvalue (',' keyvalue)*\n * keyvalue -> key '=' value\n * key -> [^=]*\n * value -> '\"' [^\"]* '\"' | [^,]*\n */\nvar attributeSeparator = function attributeSeparator() {\n var key = '[^=]*';\n var value = '\"[^\"]*\"|[^,]*';\n var keyvalue = '(?:' + key + ')=(?:' + value + ')';\n\n return new RegExp('(?:^|,)(' + keyvalue + ')');\n};\n\n/**\n * Parse attributes from a line given the seperator\n *\n * @param {String} attributes the attibute line to parse\n */\nvar parseAttributes = function parseAttributes(attributes) {\n // split the string using attributes as the separator\n var attrs = attributes.split(attributeSeparator());\n var result = {};\n var i = attrs.length;\n var attr = void 0;\n\n while (i--) {\n // filter out unmatched portions of the string\n if (attrs[i] === '') {\n continue;\n }\n\n // split the key and value\n attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1);\n // trim whitespace and remove optional quotes around the value\n attr[0] = attr[0].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^['\"](.*)['\"]$/g, '$1');\n result[attr[0]] = attr[1];\n }\n return result;\n};\n\n/**\n * A line-level M3U8 parser event stream. It expects to receive input one\n * line at a time and performs a context-free parse of its contents. A stream\n * interpretation of a manifest can be useful if the manifest is expected to\n * be too large to fit comfortably into memory or the entirety of the input\n * is not immediately available. Otherwise, it's probably much easier to work\n * with a regular `Parser` object.\n *\n * Produces `data` events with an object that captures the parser's\n * interpretation of the input. That object has a property `tag` that is one\n * of `uri`, `comment`, or `tag`. URIs only have a single additional\n * property, `line`, which captures the entirety of the input without\n * interpretation. Comments similarly have a single additional property\n * `text` which is the input without the leading `#`.\n *\n * Tags always have a property `tagType` which is the lower-cased version of\n * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance,\n * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized\n * tags are given the tag type `unknown` and a single additional property\n * `data` with the remainder of the input.\n *\n * @class ParseStream\n * @extends Stream\n */\n\nvar ParseStream = function (_Stream) {\n _inherits(ParseStream, _Stream);\n\n function ParseStream() {\n _classCallCheck(this, ParseStream);\n\n return _possibleConstructorReturn(this, (ParseStream.__proto__ || Object.getPrototypeOf(ParseStream)).call(this));\n }\n\n /**\n * Parses an additional line of input.\n *\n * @param {String} line a single line of an M3U8 file to parse\n */\n\n\n _createClass(ParseStream, [{\n key: 'push',\n value: function push(line) {\n var match = void 0;\n var event = void 0;\n\n // strip whitespace\n line = line.replace(/^[\\u0000\\s]+|[\\u0000\\s]+$/g, '');\n if (line.length === 0) {\n // ignore empty lines\n return;\n }\n\n // URIs\n if (line[0] !== '#') {\n this.trigger('data', {\n type: 'uri',\n uri: line\n });\n return;\n }\n\n // Comments\n if (line.indexOf('#EXT') !== 0) {\n this.trigger('data', {\n type: 'comment',\n text: line.slice(1)\n });\n return;\n }\n\n // strip off any carriage returns here so the regex matching\n // doesn't have to account for them.\n line = line.replace('\\r', '');\n\n // Tags\n match = /^#EXTM3U/.exec(line);\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'm3u'\n });\n return;\n }\n match = /^#EXTINF:?([0-9\\.]*)?,?(.*)?$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'inf'\n };\n if (match[1]) {\n event.duration = parseFloat(match[1]);\n }\n if (match[2]) {\n event.title = match[2];\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'targetduration'\n };\n if (match[1]) {\n event.duration = parseInt(match[1], 10);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'totalduration'\n };\n if (match[1]) {\n event.duration = parseInt(match[1], 10);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'version'\n };\n if (match[1]) {\n event.version = parseInt(match[1], 10);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-MEDIA-SEQUENCE:?(\\-?[0-9.]*)?/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media-sequence'\n };\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\\-?[0-9.]*)?/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'discontinuity-sequence'\n };\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'playlist-type'\n };\n if (match[1]) {\n event.playlistType = match[1];\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'byterange'\n };\n if (match[1]) {\n event.length = parseInt(match[1], 10);\n }\n if (match[2]) {\n event.offset = parseInt(match[2], 10);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'allow-cache'\n };\n if (match[1]) {\n event.allowed = !/NO/.test(match[1]);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-MAP:?(.*)$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'map'\n };\n\n if (match[1]) {\n var attributes = parseAttributes(match[1]);\n\n if (attributes.URI) {\n event.uri = attributes.URI;\n }\n if (attributes.BYTERANGE) {\n var _attributes$BYTERANGE = attributes.BYTERANGE.split('@'),\n _attributes$BYTERANGE2 = _slicedToArray(_attributes$BYTERANGE, 2),\n length = _attributes$BYTERANGE2[0],\n offset = _attributes$BYTERANGE2[1];\n\n event.byterange = {};\n if (length) {\n event.byterange.length = parseInt(length, 10);\n }\n if (offset) {\n event.byterange.offset = parseInt(offset, 10);\n }\n }\n }\n\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-STREAM-INF:?(.*)$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'stream-inf'\n };\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.RESOLUTION) {\n var split = event.attributes.RESOLUTION.split('x');\n var resolution = {};\n\n if (split[0]) {\n resolution.width = parseInt(split[0], 10);\n }\n if (split[1]) {\n resolution.height = parseInt(split[1], 10);\n }\n event.attributes.RESOLUTION = resolution;\n }\n if (event.attributes.BANDWIDTH) {\n event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);\n }\n if (event.attributes['PROGRAM-ID']) {\n event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10);\n }\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-MEDIA:?(.*)$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media'\n };\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-ENDLIST/.exec(line);\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'endlist'\n });\n return;\n }\n match = /^#EXT-X-DISCONTINUITY/.exec(line);\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'discontinuity'\n });\n return;\n }\n match = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'program-date-time'\n };\n if (match[1]) {\n event.dateTimeString = match[1];\n event.dateTimeObject = new Date(match[1]);\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-KEY:?(.*)$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'key'\n };\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n // parse the IV string into a Uint32Array\n if (event.attributes.IV) {\n if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') {\n event.attributes.IV = event.attributes.IV.substring(2);\n }\n\n event.attributes.IV = event.attributes.IV.match(/.{8}/g);\n event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);\n event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);\n event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);\n event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);\n event.attributes.IV = new Uint32Array(event.attributes.IV);\n }\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out-cont'\n };\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out'\n };\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n this.trigger('data', event);\n return;\n }\n match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(line);\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-in'\n };\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n this.trigger('data', event);\n return;\n }\n\n // unknown tag type\n this.trigger('data', {\n type: 'tag',\n data: line.slice(4)\n });\n }\n }]);\n\n return ParseStream;\n}(_stream2['default']);\n\nexports['default'] = ParseStream;","var trim = function(string) {\n return string.replace(/^\\s+|\\s+$/g, '');\n}\n , isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }\n\nmodule.exports = function (headers) {\n if (!headers)\n return {}\n\n var result = {}\n\n var headersArr = trim(headers).split('\\n')\n\n for (var i = 0; i < headersArr.length; i++) {\n var row = headersArr[i]\n var index = row.indexOf(':')\n , key = trim(row.slice(0, index)).toLowerCase()\n , value = trim(row.slice(index + 1))\n\n if (typeof(result[key]) === 'undefined') {\n result[key] = value\n } else if (isArray(result[key])) {\n result[key].push(value)\n } else {\n result[key] = [ result[key], value ]\n }\n }\n\n return result\n}\n","'use strict';\n\nvar FlvTag = require('./flv-tag.js');\n\n// For information on the FLV format, see\n// http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf.\n// Technically, this function returns the header and a metadata FLV tag\n// if duration is greater than zero\n// duration in seconds\n// @return {object} the bytes of the FLV header as a Uint8Array\nvar getFlvHeader = function(duration, audio, video) { // :ByteArray {\n var\n headBytes = new Uint8Array(3 + 1 + 1 + 4),\n head = new DataView(headBytes.buffer),\n metadata,\n result,\n metadataLength;\n\n // default arguments\n duration = duration || 0;\n audio = audio === undefined ? true : audio;\n video = video === undefined ? true : video;\n\n // signature\n head.setUint8(0, 0x46); // 'F'\n head.setUint8(1, 0x4c); // 'L'\n head.setUint8(2, 0x56); // 'V'\n\n // version\n head.setUint8(3, 0x01);\n\n // flags\n head.setUint8(4, (audio ? 0x04 : 0x00) | (video ? 0x01 : 0x00));\n\n // data offset, should be 9 for FLV v1\n head.setUint32(5, headBytes.byteLength);\n\n // init the first FLV tag\n if (duration <= 0) {\n // no duration available so just write the first field of the first\n // FLV tag\n result = new Uint8Array(headBytes.byteLength + 4);\n result.set(headBytes);\n result.set([0, 0, 0, 0], headBytes.byteLength);\n return result;\n }\n\n // write out the duration metadata tag\n metadata = new FlvTag(FlvTag.METADATA_TAG);\n metadata.pts = metadata.dts = 0;\n metadata.writeMetaDataDouble('duration', duration);\n metadataLength = metadata.finalize().length;\n result = new Uint8Array(headBytes.byteLength + metadataLength);\n result.set(headBytes);\n result.set(head.byteLength, metadataLength);\n\n return result;\n};\n\nmodule.exports = getFlvHeader;\n","/**\n * @file virtual-source-buffer.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar _createTextTracksIfNecessary = require('./create-text-tracks-if-necessary');\n\nvar _createTextTracksIfNecessary2 = _interopRequireDefault(_createTextTracksIfNecessary);\n\nvar _removeCuesFromTrack = require('./remove-cues-from-track');\n\nvar _removeCuesFromTrack2 = _interopRequireDefault(_removeCuesFromTrack);\n\nvar _addTextTrackData = require('./add-text-track-data');\n\nvar _webwackify = require('webwackify');\n\nvar _webwackify2 = _interopRequireDefault(_webwackify);\n\nvar _transmuxerWorker = require('./transmuxer-worker');\n\nvar _transmuxerWorker2 = _interopRequireDefault(_transmuxerWorker);\n\nvar _codecUtils = require('./codec-utils');\n\nvar resolveTransmuxWorker = function resolveTransmuxWorker() {\n var result = undefined;\n\n try {\n result = require.resolve('./transmuxer-worker');\n } catch (e) {\n // no result\n }\n\n return result;\n};\n\n// We create a wrapper around the SourceBuffer so that we can manage the\n// state of the `updating` property manually. We have to do this because\n// Firefox changes `updating` to false long before triggering `updateend`\n// events and that was causing strange problems in videojs-contrib-hls\nvar makeWrappedSourceBuffer = function makeWrappedSourceBuffer(mediaSource, mimeType) {\n var sourceBuffer = mediaSource.addSourceBuffer(mimeType);\n var wrapper = Object.create(null);\n\n wrapper.updating = false;\n wrapper.realBuffer_ = sourceBuffer;\n\n var _loop = function (key) {\n if (typeof sourceBuffer[key] === 'function') {\n wrapper[key] = function () {\n return sourceBuffer[key].apply(sourceBuffer, arguments);\n };\n } else if (typeof wrapper[key] === 'undefined') {\n Object.defineProperty(wrapper, key, {\n get: function get() {\n return sourceBuffer[key];\n },\n set: function set(v) {\n return sourceBuffer[key] = v;\n }\n });\n }\n };\n\n for (var key in sourceBuffer) {\n _loop(key);\n }\n\n return wrapper;\n};\n\n/**\n * Returns a list of gops in the buffer that have a pts value of 3 seconds or more in\n * front of current time.\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Player} player\n * The player instance\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n * @return {Array}\n * List of gops considered safe to append over\n */\nvar gopsSafeToAlignWith = function gopsSafeToAlignWith(buffer, player, mapping) {\n if (!player || !buffer.length) {\n return [];\n }\n\n // pts value for current time + 3 seconds to give a bit more wiggle room\n var currentTimePts = Math.ceil((player.currentTime() - mapping + 3) * 90000);\n\n var i = undefined;\n\n for (i = 0; i < buffer.length; i++) {\n if (buffer[i].pts > currentTimePts) {\n break;\n }\n }\n\n return buffer.slice(i);\n};\n\nexports.gopsSafeToAlignWith = gopsSafeToAlignWith;\n/**\n * Appends gop information (timing and byteLength) received by the transmuxer for the\n * gops appended in the last call to appendBuffer\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Array} gops\n * List of new gop information\n * @param {boolean} replace\n * If true, replace the buffer with the new gop information. If false, append the\n * new gop information to the buffer in the right location of time.\n * @return {Array}\n * Updated list of gop information\n */\nvar updateGopBuffer = function updateGopBuffer(buffer, gops, replace) {\n if (!gops.length) {\n return buffer;\n }\n\n if (replace) {\n // If we are in safe append mode, then completely overwrite the gop buffer\n // with the most recent appeneded data. This will make sure that when appending\n // future segments, we only try to align with gops that are both ahead of current\n // time and in the last segment appended.\n return gops.slice();\n }\n\n var start = gops[0].pts;\n\n var i = 0;\n\n for (i; i < buffer.length; i++) {\n if (buffer[i].pts >= start) {\n break;\n }\n }\n\n return buffer.slice(0, i).concat(gops);\n};\n\nexports.updateGopBuffer = updateGopBuffer;\n/**\n * Removes gop information in buffer that overlaps with provided start and end\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Double} start\n * position to start the remove at\n * @param {Double} end\n * position to end the remove at\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n */\nvar removeGopBuffer = function removeGopBuffer(buffer, start, end, mapping) {\n var startPts = Math.ceil((start - mapping) * 90000);\n var endPts = Math.ceil((end - mapping) * 90000);\n var updatedBuffer = buffer.slice();\n\n var i = buffer.length;\n\n while (i--) {\n if (buffer[i].pts <= endPts) {\n break;\n }\n }\n\n if (i === -1) {\n // no removal because end of remove range is before start of buffer\n return updatedBuffer;\n }\n\n var j = i + 1;\n\n while (j--) {\n if (buffer[j].pts <= startPts) {\n break;\n }\n }\n\n // clamp remove range start to 0 index\n j = Math.max(j, 0);\n\n updatedBuffer.splice(j, i - j + 1);\n\n return updatedBuffer;\n};\n\nexports.removeGopBuffer = removeGopBuffer;\n/**\n * VirtualSourceBuffers exist so that we can transmux non native formats\n * into a native format, but keep the same api as a native source buffer.\n * It creates a transmuxer, that works in its own thread (a web worker) and\n * that transmuxer muxes the data into a native format. VirtualSourceBuffer will\n * then send all of that data to the naive sourcebuffer so that it is\n * indestinguishable from a natively supported format.\n *\n * @param {HtmlMediaSource} mediaSource the parent mediaSource\n * @param {Array} codecs array of codecs that we will be dealing with\n * @class VirtualSourceBuffer\n * @extends video.js.EventTarget\n */\n\nvar VirtualSourceBuffer = (function (_videojs$EventTarget) {\n _inherits(VirtualSourceBuffer, _videojs$EventTarget);\n\n function VirtualSourceBuffer(mediaSource, codecs) {\n var _this = this;\n\n _classCallCheck(this, VirtualSourceBuffer);\n\n _get(Object.getPrototypeOf(VirtualSourceBuffer.prototype), 'constructor', this).call(this, _videoJs2['default'].EventTarget);\n this.timestampOffset_ = 0;\n this.pendingBuffers_ = [];\n this.bufferUpdating_ = false;\n\n this.mediaSource_ = mediaSource;\n this.codecs_ = codecs;\n this.audioCodec_ = null;\n this.videoCodec_ = null;\n this.audioDisabled_ = false;\n this.appendAudioInitSegment_ = true;\n this.gopBuffer_ = [];\n this.timeMapping_ = 0;\n this.safeAppend_ = _videoJs2['default'].browser.IE_VERSION >= 11;\n\n var options = {\n remux: false,\n alignGopsAtEnd: this.safeAppend_\n };\n\n this.codecs_.forEach(function (codec) {\n if ((0, _codecUtils.isAudioCodec)(codec)) {\n _this.audioCodec_ = codec;\n } else if ((0, _codecUtils.isVideoCodec)(codec)) {\n _this.videoCodec_ = codec;\n }\n });\n\n // append muxed segments to their respective native buffers as\n // soon as they are available\n this.transmuxer_ = (0, _webwackify2['default'])(_transmuxerWorker2['default'], resolveTransmuxWorker());\n this.transmuxer_.postMessage({ action: 'init', options: options });\n\n this.transmuxer_.onmessage = function (event) {\n if (event.data.action === 'data') {\n return _this.data_(event);\n }\n\n if (event.data.action === 'done') {\n return _this.done_(event);\n }\n\n if (event.data.action === 'gopInfo') {\n return _this.appendGopInfo_(event);\n }\n };\n\n // this timestampOffset is a property with the side-effect of resetting\n // baseMediaDecodeTime in the transmuxer on the setter\n Object.defineProperty(this, 'timestampOffset', {\n get: function get() {\n return this.timestampOffset_;\n },\n set: function set(val) {\n if (typeof val === 'number' && val >= 0) {\n this.timestampOffset_ = val;\n this.appendAudioInitSegment_ = true;\n\n // reset gop buffer on timestampoffset as this signals a change in timeline\n this.gopBuffer_.length = 0;\n this.timeMapping_ = 0;\n\n // We have to tell the transmuxer to set the baseMediaDecodeTime to\n // the desired timestampOffset for the next segment\n this.transmuxer_.postMessage({\n action: 'setTimestampOffset',\n timestampOffset: val\n });\n }\n }\n });\n\n // setting the append window affects both source buffers\n Object.defineProperty(this, 'appendWindowStart', {\n get: function get() {\n return (this.videoBuffer_ || this.audioBuffer_).appendWindowStart;\n },\n set: function set(start) {\n if (this.videoBuffer_) {\n this.videoBuffer_.appendWindowStart = start;\n }\n if (this.audioBuffer_) {\n this.audioBuffer_.appendWindowStart = start;\n }\n }\n });\n\n // this buffer is \"updating\" if either of its native buffers are\n Object.defineProperty(this, 'updating', {\n get: function get() {\n return !!(this.bufferUpdating_ || !this.audioDisabled_ && this.audioBuffer_ && this.audioBuffer_.updating || this.videoBuffer_ && this.videoBuffer_.updating);\n }\n });\n\n // the buffered property is the intersection of the buffered\n // ranges of the native source buffers\n Object.defineProperty(this, 'buffered', {\n get: function get() {\n var start = null;\n var end = null;\n var arity = 0;\n var extents = [];\n var ranges = [];\n\n // neither buffer has been created yet\n if (!this.videoBuffer_ && !this.audioBuffer_) {\n return _videoJs2['default'].createTimeRange();\n }\n\n // only one buffer is configured\n if (!this.videoBuffer_) {\n return this.audioBuffer_.buffered;\n }\n if (!this.audioBuffer_) {\n return this.videoBuffer_.buffered;\n }\n\n // both buffers are configured\n if (this.audioDisabled_) {\n return this.videoBuffer_.buffered;\n }\n\n // both buffers are empty\n if (this.videoBuffer_.buffered.length === 0 && this.audioBuffer_.buffered.length === 0) {\n return _videoJs2['default'].createTimeRange();\n }\n\n // Handle the case where we have both buffers and create an\n // intersection of the two\n var videoBuffered = this.videoBuffer_.buffered;\n var audioBuffered = this.audioBuffer_.buffered;\n var count = videoBuffered.length;\n\n // A) Gather up all start and end times\n while (count--) {\n extents.push({ time: videoBuffered.start(count), type: 'start' });\n extents.push({ time: videoBuffered.end(count), type: 'end' });\n }\n count = audioBuffered.length;\n while (count--) {\n extents.push({ time: audioBuffered.start(count), type: 'start' });\n extents.push({ time: audioBuffered.end(count), type: 'end' });\n }\n // B) Sort them by time\n extents.sort(function (a, b) {\n return a.time - b.time;\n });\n\n // C) Go along one by one incrementing arity for start and decrementing\n // arity for ends\n for (count = 0; count < extents.length; count++) {\n if (extents[count].type === 'start') {\n arity++;\n\n // D) If arity is ever incremented to 2 we are entering an\n // overlapping range\n if (arity === 2) {\n start = extents[count].time;\n }\n } else if (extents[count].type === 'end') {\n arity--;\n\n // E) If arity is ever decremented to 1 we leaving an\n // overlapping range\n if (arity === 1) {\n end = extents[count].time;\n }\n }\n\n // F) Record overlapping ranges\n if (start !== null && end !== null) {\n ranges.push([start, end]);\n start = null;\n end = null;\n }\n }\n\n return _videoJs2['default'].createTimeRanges(ranges);\n }\n });\n }\n\n /**\n * When we get a data event from the transmuxer\n * we call this function and handle the data that\n * was sent to us\n *\n * @private\n * @param {Event} event the data event from the transmuxer\n */\n\n _createClass(VirtualSourceBuffer, [{\n key: 'data_',\n value: function data_(event) {\n var segment = event.data.segment;\n\n // Cast ArrayBuffer to TypedArray\n segment.data = new Uint8Array(segment.data, event.data.byteOffset, event.data.byteLength);\n\n segment.initSegment = new Uint8Array(segment.initSegment.data, segment.initSegment.byteOffset, segment.initSegment.byteLength);\n\n (0, _createTextTracksIfNecessary2['default'])(this, this.mediaSource_, segment);\n\n // Add the segments to the pendingBuffers array\n this.pendingBuffers_.push(segment);\n return;\n }\n\n /**\n * When we get a done event from the transmuxer\n * we call this function and we process all\n * of the pending data that we have been saving in the\n * data_ function\n *\n * @private\n * @param {Event} event the done event from the transmuxer\n */\n }, {\n key: 'done_',\n value: function done_(event) {\n // Don't process and append data if the mediaSource is closed\n if (this.mediaSource_.readyState === 'closed') {\n this.pendingBuffers_.length = 0;\n return;\n }\n\n // All buffers should have been flushed from the muxer\n // start processing anything we have received\n this.processPendingSegments_();\n return;\n }\n\n /**\n * Create our internal native audio/video source buffers and add\n * event handlers to them with the following conditions:\n * 1. they do not already exist on the mediaSource\n * 2. this VSB has a codec for them\n *\n * @private\n */\n }, {\n key: 'createRealSourceBuffers_',\n value: function createRealSourceBuffers_() {\n var _this2 = this;\n\n var types = ['audio', 'video'];\n\n types.forEach(function (type) {\n // Don't create a SourceBuffer of this type if we don't have a\n // codec for it\n if (!_this2[type + 'Codec_']) {\n return;\n }\n\n // Do nothing if a SourceBuffer of this type already exists\n if (_this2[type + 'Buffer_']) {\n return;\n }\n\n var buffer = null;\n\n // If the mediasource already has a SourceBuffer for the codec\n // use that\n if (_this2.mediaSource_[type + 'Buffer_']) {\n buffer = _this2.mediaSource_[type + 'Buffer_'];\n // In multiple audio track cases, the audio source buffer is disabled\n // on the main VirtualSourceBuffer by the HTMLMediaSource much earlier\n // than createRealSourceBuffers_ is called to create the second\n // VirtualSourceBuffer because that happens as a side-effect of\n // videojs-contrib-hls starting the audioSegmentLoader. As a result,\n // the audioBuffer is essentially \"ownerless\" and no one will toggle\n // the `updating` state back to false once the `updateend` event is received\n //\n // Setting `updating` to false manually will work around this\n // situation and allow work to continue\n buffer.updating = false;\n } else {\n var codecProperty = type + 'Codec_';\n var mimeType = type + '/mp4;codecs=\"' + _this2[codecProperty] + '\"';\n\n buffer = makeWrappedSourceBuffer(_this2.mediaSource_.nativeMediaSource_, mimeType);\n\n _this2.mediaSource_[type + 'Buffer_'] = buffer;\n }\n\n _this2[type + 'Buffer_'] = buffer;\n\n // Wire up the events to the SourceBuffer\n ['update', 'updatestart', 'updateend'].forEach(function (event) {\n buffer.addEventListener(event, function () {\n // if audio is disabled\n if (type === 'audio' && _this2.audioDisabled_) {\n return;\n }\n\n if (event === 'updateend') {\n _this2[type + 'Buffer_'].updating = false;\n }\n\n var shouldTrigger = types.every(function (t) {\n // skip checking audio's updating status if audio\n // is not enabled\n if (t === 'audio' && _this2.audioDisabled_) {\n return true;\n }\n // if the other type if updating we don't trigger\n if (type !== t && _this2[t + 'Buffer_'] && _this2[t + 'Buffer_'].updating) {\n return false;\n }\n return true;\n });\n\n if (shouldTrigger) {\n return _this2.trigger(event);\n }\n });\n });\n });\n }\n\n /**\n * Emulate the native mediasource function, but our function will\n * send all of the proposed segments to the transmuxer so that we\n * can transmux them before we append them to our internal\n * native source buffers in the correct format.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/appendBuffer\n * @param {Uint8Array} segment the segment to append to the buffer\n */\n }, {\n key: 'appendBuffer',\n value: function appendBuffer(segment) {\n // Start the internal \"updating\" state\n this.bufferUpdating_ = true;\n\n if (this.audioBuffer_ && this.audioBuffer_.buffered.length) {\n var audioBuffered = this.audioBuffer_.buffered;\n\n this.transmuxer_.postMessage({\n action: 'setAudioAppendStart',\n appendStart: audioBuffered.end(audioBuffered.length - 1)\n });\n }\n\n if (this.videoBuffer_) {\n this.transmuxer_.postMessage({\n action: 'alignGopsWith',\n gopsToAlignWith: gopsSafeToAlignWith(this.gopBuffer_, this.mediaSource_.player_, this.timeMapping_)\n });\n }\n\n this.transmuxer_.postMessage({\n action: 'push',\n // Send the typed-array of data as an ArrayBuffer so that\n // it can be sent as a \"Transferable\" and avoid the costly\n // memory copy\n data: segment.buffer,\n\n // To recreate the original typed-array, we need information\n // about what portion of the ArrayBuffer it was a view into\n byteOffset: segment.byteOffset,\n byteLength: segment.byteLength\n }, [segment.buffer]);\n this.transmuxer_.postMessage({ action: 'flush' });\n }\n\n /**\n * Appends gop information (timing and byteLength) received by the transmuxer for the\n * gops appended in the last call to appendBuffer\n *\n * @param {Event} event\n * The gopInfo event from the transmuxer\n * @param {Array} event.data.gopInfo\n * List of gop info to append\n */\n }, {\n key: 'appendGopInfo_',\n value: function appendGopInfo_(event) {\n this.gopBuffer_ = updateGopBuffer(this.gopBuffer_, event.data.gopInfo, this.safeAppend_);\n }\n\n /**\n * Emulate the native mediasource function and remove parts\n * of the buffer from any of our internal buffers that exist\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/remove\n * @param {Double} start position to start the remove at\n * @param {Double} end position to end the remove at\n */\n }, {\n key: 'remove',\n value: function remove(start, end) {\n if (this.videoBuffer_) {\n this.videoBuffer_.updating = true;\n this.videoBuffer_.remove(start, end);\n this.gopBuffer_ = removeGopBuffer(this.gopBuffer_, start, end, this.timeMapping_);\n }\n if (!this.audioDisabled_ && this.audioBuffer_) {\n this.audioBuffer_.updating = true;\n this.audioBuffer_.remove(start, end);\n }\n\n // Remove Metadata Cues (id3)\n (0, _removeCuesFromTrack2['default'])(start, end, this.metadataTrack_);\n\n // Remove Any Captions\n if (this.inbandTextTracks_) {\n for (var track in this.inbandTextTracks_) {\n (0, _removeCuesFromTrack2['default'])(start, end, this.inbandTextTracks_[track]);\n }\n }\n }\n\n /**\n * Process any segments that the muxer has output\n * Concatenate segments together based on type and append them into\n * their respective sourceBuffers\n *\n * @private\n */\n }, {\n key: 'processPendingSegments_',\n value: function processPendingSegments_() {\n var sortedSegments = {\n video: {\n segments: [],\n bytes: 0\n },\n audio: {\n segments: [],\n bytes: 0\n },\n captions: [],\n metadata: []\n };\n\n // Sort segments into separate video/audio arrays and\n // keep track of their total byte lengths\n sortedSegments = this.pendingBuffers_.reduce(function (segmentObj, segment) {\n var type = segment.type;\n var data = segment.data;\n var initSegment = segment.initSegment;\n\n segmentObj[type].segments.push(data);\n segmentObj[type].bytes += data.byteLength;\n\n segmentObj[type].initSegment = initSegment;\n\n // Gather any captions into a single array\n if (segment.captions) {\n segmentObj.captions = segmentObj.captions.concat(segment.captions);\n }\n\n if (segment.info) {\n segmentObj[type].info = segment.info;\n }\n\n // Gather any metadata into a single array\n if (segment.metadata) {\n segmentObj.metadata = segmentObj.metadata.concat(segment.metadata);\n }\n\n return segmentObj;\n }, sortedSegments);\n\n // Create the real source buffers if they don't exist by now since we\n // finally are sure what tracks are contained in the source\n if (!this.videoBuffer_ && !this.audioBuffer_) {\n // Remove any codecs that may have been specified by default but\n // are no longer applicable now\n if (sortedSegments.video.bytes === 0) {\n this.videoCodec_ = null;\n }\n if (sortedSegments.audio.bytes === 0) {\n this.audioCodec_ = null;\n }\n\n this.createRealSourceBuffers_();\n }\n\n if (sortedSegments.audio.info) {\n this.mediaSource_.trigger({ type: 'audioinfo', info: sortedSegments.audio.info });\n }\n if (sortedSegments.video.info) {\n this.mediaSource_.trigger({ type: 'videoinfo', info: sortedSegments.video.info });\n }\n\n if (this.appendAudioInitSegment_) {\n if (!this.audioDisabled_ && this.audioBuffer_) {\n sortedSegments.audio.segments.unshift(sortedSegments.audio.initSegment);\n sortedSegments.audio.bytes += sortedSegments.audio.initSegment.byteLength;\n }\n this.appendAudioInitSegment_ = false;\n }\n\n var triggerUpdateend = false;\n\n // Merge multiple video and audio segments into one and append\n if (this.videoBuffer_ && sortedSegments.video.bytes) {\n sortedSegments.video.segments.unshift(sortedSegments.video.initSegment);\n sortedSegments.video.bytes += sortedSegments.video.initSegment.byteLength;\n this.concatAndAppendSegments_(sortedSegments.video, this.videoBuffer_);\n // TODO: are video tracks the only ones with text tracks?\n (0, _addTextTrackData.addTextTrackData)(this, sortedSegments.captions, sortedSegments.metadata);\n } else if (this.videoBuffer_ && (this.audioDisabled_ || !this.audioBuffer_)) {\n // The transmuxer did not return any bytes of video, meaning it was all trimmed\n // for gop alignment. Since we have a video buffer and audio is disabled, updateend\n // will never be triggered by this source buffer, which will cause contrib-hls\n // to be stuck forever waiting for updateend. If audio is not disabled, updateend\n // will be triggered by the audio buffer, which will be sent upwards since the video\n // buffer will not be in an updating state.\n triggerUpdateend = true;\n }\n\n if (!this.audioDisabled_ && this.audioBuffer_) {\n this.concatAndAppendSegments_(sortedSegments.audio, this.audioBuffer_);\n }\n\n this.pendingBuffers_.length = 0;\n\n if (triggerUpdateend) {\n this.trigger('updateend');\n }\n\n // We are no longer in the internal \"updating\" state\n this.bufferUpdating_ = false;\n }\n\n /**\n * Combine all segments into a single Uint8Array and then append them\n * to the destination buffer\n *\n * @param {Object} segmentObj\n * @param {SourceBuffer} destinationBuffer native source buffer to append data to\n * @private\n */\n }, {\n key: 'concatAndAppendSegments_',\n value: function concatAndAppendSegments_(segmentObj, destinationBuffer) {\n var offset = 0;\n var tempBuffer = undefined;\n\n if (segmentObj.bytes) {\n tempBuffer = new Uint8Array(segmentObj.bytes);\n\n // Combine the individual segments into one large typed-array\n segmentObj.segments.forEach(function (segment) {\n tempBuffer.set(segment, offset);\n offset += segment.byteLength;\n });\n\n try {\n destinationBuffer.updating = true;\n destinationBuffer.appendBuffer(tempBuffer);\n } catch (error) {\n if (this.mediaSource_.player_) {\n this.mediaSource_.player_.error({\n code: -3,\n type: 'APPEND_BUFFER_ERR',\n message: error.message,\n originalError: error\n });\n }\n }\n }\n }\n\n /**\n * Emulate the native mediasource function. abort any soureBuffer\n * actions and throw out any un-appended data.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/abort\n */\n }, {\n key: 'abort',\n value: function abort() {\n if (this.videoBuffer_) {\n this.videoBuffer_.abort();\n }\n if (!this.audioDisabled_ && this.audioBuffer_) {\n this.audioBuffer_.abort();\n }\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({ action: 'reset' });\n }\n this.pendingBuffers_.length = 0;\n this.bufferUpdating_ = false;\n }\n }]);\n\n return VirtualSourceBuffer;\n})(_videoJs2['default'].EventTarget);\n\nexports['default'] = VirtualSourceBuffer;","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * @param {string} element\n * @returns {Record}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;\nvar ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;\nvar TEXT_NODE = NodeType.TEXT_NODE = 3;\nvar CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;\nvar ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;\nvar ENTITY_NODE = NodeType.ENTITY_NODE = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE = NodeType.COMMENT_NODE = 8;\nvar DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;\nvar DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;\nvar DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;\nvar NOTATION_NODE = NodeType.NOTATION_NODE = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR \t= ExceptionCode.INVALID_STATE_ERR \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR \t= ExceptionCode.SYNTAX_ERR \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR \t= ExceptionCode.NAMESPACE_ERR \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR \t= ExceptionCode.INVALID_ACCESS_ERR \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index unsigned long\n\t * Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn this[index] || null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI, qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n // Introduced in DOM Level 2:\n hasAttributes:function(){\n \treturn this.attributes.length>0;\n },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n lookupPrefix:function(namespaceURI){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tfor(var n in map){\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\treturn n;\n\t\t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n lookupNamespaceURI:function(prefix){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tif(prefix in map){\n\t\t\t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n\t\t\t\t\t\treturn map[prefix] ;\n\t\t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n isDefaultNamespace:function(namespaceURI){\n \tvar prefix = this.lookupPrefix(namespaceURI);\n \treturn prefix == null;\n }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '<' ||\n c == '>' && '>' ||\n c == '&' && '&' ||\n c == '\"' && '"' ||\n '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n }while(node=node.nextSibling)\n }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\nfunction _onUpdateChild(doc,el,newChild){\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif(newChild){\n\t\t\tcs[cs.length++] = newChild;\n\t\t}else{\n\t\t\t//console.log(1)\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile(child){\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild =child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * attributes;\n * children;\n *\n * writeable properties:\n * nodeValue,Attr:value,CharacterData:data\n * prefix\n */\nfunction _removeChild(parentNode,child){\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif(previous){\n\t\tprevious.nextSibling = next;\n\t}else{\n\t\tparentNode.firstChild = next\n\t}\n\tif(next){\n\t\tnext.previousSibling = previous;\n\t}else{\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument,parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\nfunction _appendSingleChild(parentNode,newChild){\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t}else{\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName : '#document',\n\tnodeType : DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype : null,\n\tdocumentElement : null,\n\t_inc : 1,\n\n\tinsertBefore : function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild : function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.target = target;\n\t\tnode.nodeValue= node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * The replacement text of any entity referred to directly or indirectly in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml/#CleanAttrVals\n * @see https://www.w3.org/TR/xml/#NT-AttValue\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<&\"]/g,_xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&` and `<` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" > \", and must, for compatibility,\n\t\t * be escaped using either `>` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&]/g,_xmlEncoder)\n\t\t\t.replace(/]]>/g, ']]>')\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\n\n/**\n * Expand the S-box tables.\n *\n * @private\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar precompute = function precompute() {\n var tables = [[[], [], [], [], []], [[], [], [], [], []]];\n var encTable = tables[0];\n var decTable = tables[1];\n var sbox = encTable[4];\n var sboxInv = decTable[4];\n var i = undefined;\n var x = undefined;\n var xInv = undefined;\n var d = [];\n var th = [];\n var x2 = undefined;\n var x4 = undefined;\n var x8 = undefined;\n var s = undefined;\n var tEnc = undefined;\n var tDec = undefined;\n\n // Compute double and third tables\n for (i = 0; i < 256; i++) {\n th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n }\n\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x;\n\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n }\n }\n\n // Compactify. Considerable speedup on Firefox.\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n return tables;\n};\nvar aesTables = null;\n\n/**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @class AES\n * @param key {Array} The key as an array of 4, 6 or 8 words.\n */\n\nvar AES = (function () {\n function AES(key) {\n _classCallCheck(this, AES);\n\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n // if we have yet to precompute the S-box tables\n // do so now\n if (!aesTables) {\n aesTables = precompute();\n }\n // then make a copy of that object for use\n this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]];\n var i = undefined;\n var j = undefined;\n var tmp = undefined;\n var encKey = undefined;\n var decKey = undefined;\n var sbox = this._tables[0][4];\n var decTable = this._tables[1];\n var keyLen = key.length;\n var rcon = 1;\n\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new Error('Invalid aes key size');\n }\n\n encKey = key.slice(0);\n decKey = [];\n this._key = [encKey, decKey];\n\n // schedule encryption keys\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i - 1];\n\n // apply sbox\n if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255];\n\n // shift rows and add rcon\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n\n encKey[i] = encKey[i - keyLen] ^ tmp;\n }\n\n // schedule decryption keys\n for (j = 0; i; j++, i--) {\n tmp = encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]];\n }\n }\n }\n\n /**\n * Decrypt 16 bytes, specified as four 32-bit words.\n *\n * @param {Number} encrypted0 the first word to decrypt\n * @param {Number} encrypted1 the second word to decrypt\n * @param {Number} encrypted2 the third word to decrypt\n * @param {Number} encrypted3 the fourth word to decrypt\n * @param {Int32Array} out the array to write the decrypted words\n * into\n * @param {Number} offset the offset into the output array to start\n * writing results\n * @return {Array} The plaintext.\n */\n\n _createClass(AES, [{\n key: 'decrypt',\n value: function decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) {\n var key = this._key[1];\n // state variables a,b,c,d are loaded with pre-whitened data\n var a = encrypted0 ^ key[0];\n var b = encrypted3 ^ key[1];\n var c = encrypted2 ^ key[2];\n var d = encrypted1 ^ key[3];\n var a2 = undefined;\n var b2 = undefined;\n var c2 = undefined;\n\n // key.length === 2 ?\n var nInnerRounds = key.length / 4 - 2;\n var i = undefined;\n var kIndex = 4;\n var table = this._tables[1];\n\n // load up the tables\n var table0 = table[0];\n var table1 = table[1];\n var table2 = table[2];\n var table3 = table[3];\n var sbox = table[4];\n\n // Inner rounds. Cribbed from OpenSSL.\n for (i = 0; i < nInnerRounds; i++) {\n a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex];\n b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1];\n c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2];\n d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a = a2;b = b2;c = c2;\n }\n\n // Last round.\n for (i = 0; i < 4; i++) {\n out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];\n a2 = a;a = b;b = c;c = d;d = a2;\n }\n }\n }]);\n\n return AES;\n})();\n\nexports['default'] = AES;\nmodule.exports = exports['default'];","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * @file html-media-source.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _globalDocument = require('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar _virtualSourceBuffer = require('./virtual-source-buffer');\n\nvar _virtualSourceBuffer2 = _interopRequireDefault(_virtualSourceBuffer);\n\nvar _addTextTrackData = require('./add-text-track-data');\n\nvar _codecUtils = require('./codec-utils');\n\n/**\n * Our MediaSource implementation in HTML, mimics native\n * MediaSource where/if possible.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource\n * @class HtmlMediaSource\n * @extends videojs.EventTarget\n */\n\nvar HtmlMediaSource = (function (_videojs$EventTarget) {\n _inherits(HtmlMediaSource, _videojs$EventTarget);\n\n function HtmlMediaSource() {\n var _this = this;\n\n _classCallCheck(this, HtmlMediaSource);\n\n _get(Object.getPrototypeOf(HtmlMediaSource.prototype), 'constructor', this).call(this);\n var property = undefined;\n\n this.nativeMediaSource_ = new _globalWindow2['default'].MediaSource();\n // delegate to the native MediaSource's methods by default\n for (property in this.nativeMediaSource_) {\n if (!(property in HtmlMediaSource.prototype) && typeof this.nativeMediaSource_[property] === 'function') {\n this[property] = this.nativeMediaSource_[property].bind(this.nativeMediaSource_);\n }\n }\n\n // emulate `duration` and `seekable` until seeking can be\n // handled uniformly for live streams\n // see https://github.com/w3c/media-source/issues/5\n this.duration_ = NaN;\n Object.defineProperty(this, 'duration', {\n get: function get() {\n if (this.duration_ === Infinity) {\n return this.duration_;\n }\n return this.nativeMediaSource_.duration;\n },\n set: function set(duration) {\n this.duration_ = duration;\n if (duration !== Infinity) {\n this.nativeMediaSource_.duration = duration;\n return;\n }\n }\n });\n Object.defineProperty(this, 'seekable', {\n get: function get() {\n if (this.duration_ === Infinity) {\n return _videoJs2['default'].createTimeRanges([[0, this.nativeMediaSource_.duration]]);\n }\n return this.nativeMediaSource_.seekable;\n }\n });\n\n Object.defineProperty(this, 'readyState', {\n get: function get() {\n return this.nativeMediaSource_.readyState;\n }\n });\n\n Object.defineProperty(this, 'activeSourceBuffers', {\n get: function get() {\n return this.activeSourceBuffers_;\n }\n });\n\n // the list of virtual and native SourceBuffers created by this\n // MediaSource\n this.sourceBuffers = [];\n\n this.activeSourceBuffers_ = [];\n\n /**\n * update the list of active source buffers based upon various\n * imformation from HLS and video.js\n *\n * @private\n */\n this.updateActiveSourceBuffers_ = function () {\n // Retain the reference but empty the array\n _this.activeSourceBuffers_.length = 0;\n\n // If there is only one source buffer, then it will always be active and audio will\n // be disabled based on the codec of the source buffer\n if (_this.sourceBuffers.length === 1) {\n var sourceBuffer = _this.sourceBuffers[0];\n\n sourceBuffer.appendAudioInitSegment_ = true;\n sourceBuffer.audioDisabled_ = !sourceBuffer.audioCodec_;\n _this.activeSourceBuffers_.push(sourceBuffer);\n return;\n }\n\n // There are 2 source buffers, a combined (possibly video only) source buffer and\n // and an audio only source buffer.\n // By default, the audio in the combined virtual source buffer is enabled\n // and the audio-only source buffer (if it exists) is disabled.\n var disableCombined = false;\n var disableAudioOnly = true;\n\n // TODO: maybe we can store the sourcebuffers on the track objects?\n // safari may do something like this\n for (var i = 0; i < _this.player_.audioTracks().length; i++) {\n var track = _this.player_.audioTracks()[i];\n\n if (track.enabled && track.kind !== 'main') {\n // The enabled track is an alternate audio track so disable the audio in\n // the combined source buffer and enable the audio-only source buffer.\n disableCombined = true;\n disableAudioOnly = false;\n break;\n }\n }\n\n _this.sourceBuffers.forEach(function (sourceBuffer) {\n /* eslinst-disable */\n // TODO once codecs are required, we can switch to using the codecs to determine\n // what stream is the video stream, rather than relying on videoTracks\n /* eslinst-enable */\n\n sourceBuffer.appendAudioInitSegment_ = true;\n\n if (sourceBuffer.videoCodec_ && sourceBuffer.audioCodec_) {\n // combined\n sourceBuffer.audioDisabled_ = disableCombined;\n } else if (sourceBuffer.videoCodec_ && !sourceBuffer.audioCodec_) {\n // If the \"combined\" source buffer is video only, then we do not want\n // disable the audio-only source buffer (this is mostly for demuxed\n // audio and video hls)\n sourceBuffer.audioDisabled_ = true;\n disableAudioOnly = false;\n } else if (!sourceBuffer.videoCodec_ && sourceBuffer.audioCodec_) {\n // audio only\n sourceBuffer.audioDisabled_ = disableAudioOnly;\n if (disableAudioOnly) {\n return;\n }\n }\n\n _this.activeSourceBuffers_.push(sourceBuffer);\n });\n };\n\n this.onPlayerMediachange_ = function () {\n _this.sourceBuffers.forEach(function (sourceBuffer) {\n sourceBuffer.appendAudioInitSegment_ = true;\n });\n };\n\n this.onHlsReset_ = function () {\n _this.sourceBuffers.forEach(function (sourceBuffer) {\n if (sourceBuffer.transmuxer_) {\n sourceBuffer.transmuxer_.postMessage({ action: 'resetCaptions' });\n }\n });\n };\n\n this.onHlsSegmentTimeMapping_ = function (event) {\n _this.sourceBuffers.forEach(function (buffer) {\n return buffer.timeMapping_ = event.mapping;\n });\n };\n\n // Re-emit MediaSource events on the polyfill\n ['sourceopen', 'sourceclose', 'sourceended'].forEach(function (eventName) {\n this.nativeMediaSource_.addEventListener(eventName, this.trigger.bind(this));\n }, this);\n\n // capture the associated player when the MediaSource is\n // successfully attached\n this.on('sourceopen', function (event) {\n // Get the player this MediaSource is attached to\n var video = _globalDocument2['default'].querySelector('[src=\"' + _this.url_ + '\"]');\n\n if (!video) {\n return;\n }\n\n _this.player_ = (0, _videoJs2['default'])(video.parentNode);\n\n // hls-reset is fired by videojs.Hls on to the tech after the main SegmentLoader\n // resets its state and flushes the buffer\n _this.player_.tech_.on('hls-reset', _this.onHlsReset_);\n // hls-segment-time-mapping is fired by videojs.Hls on to the tech after the main\n // SegmentLoader inspects an MTS segment and has an accurate stream to display\n // time mapping\n _this.player_.tech_.on('hls-segment-time-mapping', _this.onHlsSegmentTimeMapping_);\n\n if (_this.player_.audioTracks && _this.player_.audioTracks()) {\n _this.player_.audioTracks().on('change', _this.updateActiveSourceBuffers_);\n _this.player_.audioTracks().on('addtrack', _this.updateActiveSourceBuffers_);\n _this.player_.audioTracks().on('removetrack', _this.updateActiveSourceBuffers_);\n }\n\n _this.player_.on('mediachange', _this.onPlayerMediachange_);\n });\n\n this.on('sourceended', function (event) {\n var duration = (0, _addTextTrackData.durationOfVideo)(_this.duration);\n\n for (var i = 0; i < _this.sourceBuffers.length; i++) {\n var sourcebuffer = _this.sourceBuffers[i];\n var cues = sourcebuffer.metadataTrack_ && sourcebuffer.metadataTrack_.cues;\n\n if (cues && cues.length) {\n cues[cues.length - 1].endTime = duration;\n }\n }\n });\n\n // explicitly terminate any WebWorkers that were created\n // by SourceHandlers\n this.on('sourceclose', function (event) {\n this.sourceBuffers.forEach(function (sourceBuffer) {\n if (sourceBuffer.transmuxer_) {\n sourceBuffer.transmuxer_.terminate();\n }\n });\n\n this.sourceBuffers.length = 0;\n if (!this.player_) {\n return;\n }\n\n if (this.player_.audioTracks && this.player_.audioTracks()) {\n this.player_.audioTracks().off('change', this.updateActiveSourceBuffers_);\n this.player_.audioTracks().off('addtrack', this.updateActiveSourceBuffers_);\n this.player_.audioTracks().off('removetrack', this.updateActiveSourceBuffers_);\n }\n\n // We can only change this if the player hasn't been disposed of yet\n // because `off` eventually tries to use the el_ property. If it has\n // been disposed of, then don't worry about it because there are no\n // event handlers left to unbind anyway\n if (this.player_.el_) {\n this.player_.off('mediachange', this.onPlayerMediachange_);\n this.player_.tech_.off('hls-reset', this.onHlsReset_);\n this.player_.tech_.off('hls-segment-time-mapping', this.onHlsSegmentTimeMapping_);\n }\n });\n }\n\n /**\n * Add a range that that can now be seeked to.\n *\n * @param {Double} start where to start the addition\n * @param {Double} end where to end the addition\n * @private\n */\n\n _createClass(HtmlMediaSource, [{\n key: 'addSeekableRange_',\n value: function addSeekableRange_(start, end) {\n var error = undefined;\n\n if (this.duration !== Infinity) {\n error = new Error('MediaSource.addSeekableRange() can only be invoked ' + 'when the duration is Infinity');\n error.name = 'InvalidStateError';\n error.code = 11;\n throw error;\n }\n\n if (end > this.nativeMediaSource_.duration || isNaN(this.nativeMediaSource_.duration)) {\n this.nativeMediaSource_.duration = end;\n }\n }\n\n /**\n * Add a source buffer to the media source.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/addSourceBuffer\n * @param {String} type the content-type of the content\n * @return {Object} the created source buffer\n */\n }, {\n key: 'addSourceBuffer',\n value: function addSourceBuffer(type) {\n var buffer = undefined;\n var parsedType = (0, _codecUtils.parseContentType)(type);\n\n // Create a VirtualSourceBuffer to transmux MPEG-2 transport\n // stream segments into fragmented MP4s\n if (/^(video|audio)\\/mp2t$/i.test(parsedType.type)) {\n var codecs = [];\n\n if (parsedType.parameters && parsedType.parameters.codecs) {\n codecs = parsedType.parameters.codecs.split(',');\n codecs = (0, _codecUtils.translateLegacyCodecs)(codecs);\n codecs = codecs.filter(function (codec) {\n return (0, _codecUtils.isAudioCodec)(codec) || (0, _codecUtils.isVideoCodec)(codec);\n });\n }\n\n if (codecs.length === 0) {\n codecs = ['avc1.4d400d', 'mp4a.40.2'];\n }\n\n buffer = new _virtualSourceBuffer2['default'](this, codecs);\n\n if (this.sourceBuffers.length !== 0) {\n // If another VirtualSourceBuffer already exists, then we are creating a\n // SourceBuffer for an alternate audio track and therefore we know that\n // the source has both an audio and video track.\n // That means we should trigger the manual creation of the real\n // SourceBuffers instead of waiting for the transmuxer to return data\n this.sourceBuffers[0].createRealSourceBuffers_();\n buffer.createRealSourceBuffers_();\n\n // Automatically disable the audio on the first source buffer if\n // a second source buffer is ever created\n this.sourceBuffers[0].audioDisabled_ = true;\n }\n } else {\n // delegate to the native implementation\n buffer = this.nativeMediaSource_.addSourceBuffer(type);\n }\n\n this.sourceBuffers.push(buffer);\n return buffer;\n }\n }]);\n\n return HtmlMediaSource;\n})(_videoJs2['default'].EventTarget);\n\nexports['default'] = HtmlMediaSource;\nmodule.exports = exports['default'];","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * @file remove-cues-from-track.js\n */\n\n/**\n * Remove cues from a track on video.js.\n *\n * @param {Double} start start of where we should remove the cue\n * @param {Double} end end of where the we should remove the cue\n * @param {Object} track the text track to remove the cues from\n * @private\n */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar removeCuesFromTrack = function removeCuesFromTrack(start, end, track) {\n var i = undefined;\n var cue = undefined;\n\n if (!track) {\n return;\n }\n\n if (!track.cues) {\n return;\n }\n\n i = track.cues.length;\n\n while (i--) {\n cue = track.cues[i];\n\n // Remove any overlapping cue\n if (cue.startTime <= end && cue.endTime >= start) {\n track.removeCue(cue);\n }\n }\n};\n\nexports[\"default\"] = removeCuesFromTrack;\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar _playlistLoader = require('./playlist-loader');\n\nvar _playlistLoader2 = _interopRequireDefault(_playlistLoader);\n\nvar noop = function noop() {};\n\n/**\n * Convert the properties of an HLS track into an audioTrackKind.\n *\n * @private\n */\nvar audioTrackKind_ = function audioTrackKind_(properties) {\n var kind = properties['default'] ? 'main' : 'alternative';\n\n if (properties.characteristics && properties.characteristics.indexOf('public.accessibility.describes-video') >= 0) {\n kind = 'main-desc';\n }\n\n return kind;\n};\n\n/**\n * Pause provided segment loader and playlist loader if active\n *\n * @param {SegmentLoader} segmentLoader\n * SegmentLoader to pause\n * @param {Object} mediaType\n * Active media type\n * @function stopLoaders\n */\nvar stopLoaders = function stopLoaders(segmentLoader, mediaType) {\n segmentLoader.abort();\n segmentLoader.pause();\n\n if (mediaType && mediaType.activePlaylistLoader) {\n mediaType.activePlaylistLoader.pause();\n mediaType.activePlaylistLoader = null;\n }\n};\n\nexports.stopLoaders = stopLoaders;\n/**\n * Start loading provided segment loader and playlist loader\n *\n * @param {PlaylistLoader} playlistLoader\n * PlaylistLoader to start loading\n * @param {Object} mediaType\n * Active media type\n * @function startLoaders\n */\nvar startLoaders = function startLoaders(playlistLoader, mediaType) {\n // Segment loader will be started after `loadedmetadata` or `loadedplaylist` from the\n // playlist loader\n mediaType.activePlaylistLoader = playlistLoader;\n playlistLoader.load();\n};\n\nexports.startLoaders = startLoaders;\n/**\n * Returns a function to be called when the media group changes. It performs a\n * non-destructive (preserve the buffer) resync of the SegmentLoader. This is because a\n * change of group is merely a rendition switch of the same content at another encoding,\n * rather than a change of content, such as switching audio from English to Spanish.\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a non-destructive resync of SegmentLoader when the active media\n * group changes.\n * @function onGroupChanged\n */\nvar onGroupChanged = function onGroupChanged(type, settings) {\n return function () {\n var _settings$segmentLoaders = settings.segmentLoaders;\n var segmentLoader = _settings$segmentLoaders[type];\n var mainSegmentLoader = _settings$segmentLoaders.main;\n var mediaType = settings.mediaTypes[type];\n\n var activeTrack = mediaType.activeTrack();\n var activeGroup = mediaType.activeGroup(activeTrack);\n var previousActiveLoader = mediaType.activePlaylistLoader;\n\n stopLoaders(segmentLoader, mediaType);\n\n if (!activeGroup) {\n // there is no group active\n return;\n }\n\n if (!activeGroup.playlistLoader) {\n if (previousActiveLoader) {\n // The previous group had a playlist loader but the new active group does not\n // this means we are switching from demuxed to muxed audio. In this case we want to\n // do a destructive reset of the main segment loader and not restart the audio\n // loaders.\n mainSegmentLoader.resetEverything();\n }\n return;\n }\n\n // Non-destructive resync\n segmentLoader.resyncLoader();\n\n startLoaders(activeGroup.playlistLoader, mediaType);\n };\n};\n\nexports.onGroupChanged = onGroupChanged;\n/**\n * Returns a function to be called when the media track changes. It performs a\n * destructive reset of the SegmentLoader to ensure we start loading as close to\n * currentTime as possible.\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a destructive reset of SegmentLoader when the active media\n * track changes.\n * @function onTrackChanged\n */\nvar onTrackChanged = function onTrackChanged(type, settings) {\n return function () {\n var _settings$segmentLoaders2 = settings.segmentLoaders;\n var segmentLoader = _settings$segmentLoaders2[type];\n var mainSegmentLoader = _settings$segmentLoaders2.main;\n var mediaType = settings.mediaTypes[type];\n\n var activeTrack = mediaType.activeTrack();\n var activeGroup = mediaType.activeGroup(activeTrack);\n var previousActiveLoader = mediaType.activePlaylistLoader;\n\n stopLoaders(segmentLoader, mediaType);\n\n if (!activeGroup) {\n // there is no group active so we do not want to restart loaders\n return;\n }\n\n if (!activeGroup.playlistLoader) {\n // when switching from demuxed audio/video to muxed audio/video (noted by no playlist\n // loader for the audio group), we want to do a destructive reset of the main segment\n // loader and not restart the audio loaders\n mainSegmentLoader.resetEverything();\n return;\n }\n\n if (previousActiveLoader === activeGroup.playlistLoader) {\n // Nothing has actually changed. This can happen because track change events can fire\n // multiple times for a \"single\" change. One for enabling the new active track, and\n // one for disabling the track that was active\n startLoaders(activeGroup.playlistLoader, mediaType);\n return;\n }\n\n if (segmentLoader.track) {\n // For WebVTT, set the new text track in the segmentloader\n segmentLoader.track(activeTrack);\n }\n\n // destructive reset\n segmentLoader.resetEverything();\n\n startLoaders(activeGroup.playlistLoader, mediaType);\n };\n};\n\nexports.onTrackChanged = onTrackChanged;\nvar onError = {\n /**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning (or error if the playlist is blacklisted) to\n * console and switches back to default audio track.\n * @function onError.AUDIO\n */\n AUDIO: function AUDIO(type, settings) {\n return function () {\n var segmentLoader = settings.segmentLoaders[type];\n var mediaType = settings.mediaTypes[type];\n var blacklistCurrentPlaylist = settings.blacklistCurrentPlaylist;\n\n stopLoaders(segmentLoader, mediaType);\n\n // switch back to default audio track\n var activeTrack = mediaType.activeTrack();\n var activeGroup = mediaType.activeGroup();\n var id = (activeGroup.filter(function (group) {\n return group['default'];\n })[0] || activeGroup[0]).id;\n var defaultTrack = mediaType.tracks[id];\n\n if (activeTrack === defaultTrack) {\n // Default track encountered an error. All we can do now is blacklist the current\n // rendition and hope another will switch audio groups\n blacklistCurrentPlaylist({\n message: 'Problem encountered loading the default audio track.'\n });\n return;\n }\n\n _videoJs2['default'].log.warn('Problem encountered loading the alternate audio track.' + 'Switching back to default.');\n\n for (var trackId in mediaType.tracks) {\n mediaType.tracks[trackId].enabled = mediaType.tracks[trackId] === defaultTrack;\n }\n\n mediaType.onTrackChanged();\n };\n },\n /**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning to console and disables the active subtitle track\n * @function onError.SUBTITLES\n */\n SUBTITLES: function SUBTITLES(type, settings) {\n return function () {\n var segmentLoader = settings.segmentLoaders[type];\n var mediaType = settings.mediaTypes[type];\n\n _videoJs2['default'].log.warn('Problem encountered loading the subtitle track.' + 'Disabling subtitle track.');\n\n stopLoaders(segmentLoader, mediaType);\n\n var track = mediaType.activeTrack();\n\n if (track) {\n track.mode = 'disabled';\n }\n\n mediaType.onTrackChanged();\n };\n }\n};\n\nexports.onError = onError;\nvar setupListeners = {\n /**\n * Setup event listeners for audio playlist loader\n *\n * @param {String} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.AUDIO\n */\n AUDIO: function AUDIO(type, playlistLoader, settings) {\n if (!playlistLoader) {\n // no playlist loader means audio will be muxed with the video\n return;\n }\n\n var tech = settings.tech;\n var requestOptions = settings.requestOptions;\n var segmentLoader = settings.segmentLoaders[type];\n\n playlistLoader.on('loadedmetadata', function () {\n var media = playlistLoader.media();\n\n segmentLoader.playlist(media, requestOptions);\n\n // if the video is already playing, or if this isn't a live video and preload\n // permits, start downloading segments\n if (!tech.paused() || media.endList && tech.preload() !== 'none') {\n segmentLoader.load();\n }\n });\n\n playlistLoader.on('loadedplaylist', function () {\n segmentLoader.playlist(playlistLoader.media(), requestOptions);\n\n // If the player isn't paused, ensure that the segment loader is running\n if (!tech.paused()) {\n segmentLoader.load();\n }\n });\n\n playlistLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup event listeners for subtitle playlist loader\n *\n * @param {String} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.SUBTITLES\n */\n SUBTITLES: function SUBTITLES(type, playlistLoader, settings) {\n var tech = settings.tech;\n var requestOptions = settings.requestOptions;\n var segmentLoader = settings.segmentLoaders[type];\n var mediaType = settings.mediaTypes[type];\n\n playlistLoader.on('loadedmetadata', function () {\n var media = playlistLoader.media();\n\n segmentLoader.playlist(media, requestOptions);\n segmentLoader.track(mediaType.activeTrack());\n\n // if the video is already playing, or if this isn't a live video and preload\n // permits, start downloading segments\n if (!tech.paused() || media.endList && tech.preload() !== 'none') {\n segmentLoader.load();\n }\n });\n\n playlistLoader.on('loadedplaylist', function () {\n segmentLoader.playlist(playlistLoader.media(), requestOptions);\n\n // If the player isn't paused, ensure that the segment loader is running\n if (!tech.paused()) {\n segmentLoader.load();\n }\n });\n\n playlistLoader.on('error', onError[type](type, settings));\n }\n};\n\nexports.setupListeners = setupListeners;\nvar initialize = {\n /**\n * Setup PlaylistLoaders and AudioTracks for the audio groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.AUDIO\n */\n 'AUDIO': function AUDIO(type, settings) {\n var mode = settings.mode;\n var hls = settings.hls;\n var segmentLoader = settings.segmentLoaders[type];\n var requestOptions = settings.requestOptions;\n var mediaGroups = settings.master.mediaGroups;\n var _settings$mediaTypes$type = settings.mediaTypes[type];\n var groups = _settings$mediaTypes$type.groups;\n var tracks = _settings$mediaTypes$type.tracks;\n\n // force a default if we have none or we are not\n // in html5 mode (the only mode to support more than one\n // audio track)\n if (!mediaGroups[type] || Object.keys(mediaGroups[type]).length === 0 || mode !== 'html5') {\n mediaGroups[type] = { main: { 'default': { 'default': true } } };\n }\n\n for (var groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n\n for (var variantLabel in mediaGroups[type][groupId]) {\n var properties = mediaGroups[type][groupId][variantLabel];\n var playlistLoader = undefined;\n\n if (properties.resolvedUri) {\n playlistLoader = new _playlistLoader2['default'](properties.resolvedUri, hls, requestOptions);\n } else {\n // no resolvedUri means the audio is muxed with the video when using this\n // audio track\n playlistLoader = null;\n }\n\n properties = _videoJs2['default'].mergeOptions({ id: variantLabel, playlistLoader: playlistLoader }, properties);\n\n setupListeners[type](type, properties.playlistLoader, settings);\n\n groups[groupId].push(properties);\n\n if (typeof tracks[variantLabel] === 'undefined') {\n var track = new _videoJs2['default'].AudioTrack({\n id: variantLabel,\n kind: audioTrackKind_(properties),\n enabled: false,\n language: properties.language,\n 'default': properties['default'],\n label: variantLabel\n });\n\n tracks[variantLabel] = track;\n }\n }\n }\n\n // setup single error event handler for the segment loader\n segmentLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup PlaylistLoaders and TextTracks for the subtitle groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.SUBTITLES\n */\n 'SUBTITLES': function SUBTITLES(type, settings) {\n var tech = settings.tech;\n var hls = settings.hls;\n var segmentLoader = settings.segmentLoaders[type];\n var requestOptions = settings.requestOptions;\n var mediaGroups = settings.master.mediaGroups;\n var _settings$mediaTypes$type2 = settings.mediaTypes[type];\n var groups = _settings$mediaTypes$type2.groups;\n var tracks = _settings$mediaTypes$type2.tracks;\n\n for (var groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n\n for (var variantLabel in mediaGroups[type][groupId]) {\n if (mediaGroups[type][groupId][variantLabel].forced) {\n // Subtitle playlists with the forced attribute are not selectable in Safari.\n // According to Apple's HLS Authoring Specification:\n // If content has forced subtitles and regular subtitles in a given language,\n // the regular subtitles track in that language MUST contain both the forced\n // subtitles and the regular subtitles for that language.\n // Because of this requirement and that Safari does not add forced subtitles,\n // forced subtitles are skipped here to maintain consistent experience across\n // all platforms\n continue;\n }\n\n var properties = mediaGroups[type][groupId][variantLabel];\n\n properties = _videoJs2['default'].mergeOptions({\n id: variantLabel,\n playlistLoader: new _playlistLoader2['default'](properties.resolvedUri, hls, requestOptions)\n }, properties);\n\n setupListeners[type](type, properties.playlistLoader, settings);\n\n groups[groupId].push(properties);\n\n if (typeof tracks[variantLabel] === 'undefined') {\n var track = tech.addRemoteTextTrack({\n id: variantLabel,\n kind: 'subtitles',\n enabled: false,\n language: properties.language,\n label: variantLabel\n }, false).track;\n\n tracks[variantLabel] = track;\n }\n }\n }\n\n // setup single error event handler for the segment loader\n segmentLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup TextTracks for the closed-caption groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize['CLOSED-CAPTIONS']\n */\n 'CLOSED-CAPTIONS': function CLOSEDCAPTIONS(type, settings) {\n var tech = settings.tech;\n var mediaGroups = settings.master.mediaGroups;\n var _settings$mediaTypes$type3 = settings.mediaTypes[type];\n var groups = _settings$mediaTypes$type3.groups;\n var tracks = _settings$mediaTypes$type3.tracks;\n\n for (var groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n\n for (var variantLabel in mediaGroups[type][groupId]) {\n var properties = mediaGroups[type][groupId][variantLabel];\n\n // We only support CEA608 captions for now, so ignore anything that\n // doesn't use a CCx INSTREAM-ID\n if (!properties.instreamId.match(/CC\\d/)) {\n continue;\n }\n\n // No PlaylistLoader is required for Closed-Captions because the captions are\n // embedded within the video stream\n groups[groupId].push(_videoJs2['default'].mergeOptions({ id: variantLabel }, properties));\n\n if (typeof tracks[variantLabel] === 'undefined') {\n var track = tech.addRemoteTextTrack({\n id: properties.instreamId,\n kind: 'captions',\n enabled: false,\n language: properties.language,\n label: variantLabel\n }, false).track;\n\n tracks[variantLabel] = track;\n }\n }\n }\n }\n};\n\nexports.initialize = initialize;\n/**\n * Returns a function used to get the active group of the provided type\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media group for the provided type. Takes an\n * optional parameter {TextTrack} track. If no track is provided, a list of all\n * variants in the group, otherwise the variant corresponding to the provided\n * track is returned.\n * @function activeGroup\n */\nvar activeGroup = function activeGroup(type, settings) {\n return function (track) {\n var masterPlaylistLoader = settings.masterPlaylistLoader;\n var groups = settings.mediaTypes[type].groups;\n\n var media = masterPlaylistLoader.media();\n\n if (!media) {\n return null;\n }\n\n var variants = null;\n\n if (media.attributes[type]) {\n variants = groups[media.attributes[type]];\n }\n\n variants = variants || groups.main;\n\n if (typeof track === 'undefined') {\n return variants;\n }\n\n if (track === null) {\n // An active track was specified so a corresponding group is expected. track === null\n // means no track is currently active so there is no corresponding group\n return null;\n }\n\n return variants.filter(function (props) {\n return props.id === track.id;\n })[0] || null;\n };\n};\n\nexports.activeGroup = activeGroup;\nvar activeTrack = {\n /**\n * Returns a function used to get the active track of type provided\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.AUDIO\n */\n AUDIO: function AUDIO(type, settings) {\n return function () {\n var tracks = settings.mediaTypes[type].tracks;\n\n for (var id in tracks) {\n if (tracks[id].enabled) {\n return tracks[id];\n }\n }\n\n return null;\n };\n },\n /**\n * Returns a function used to get the active track of type provided\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.SUBTITLES\n */\n SUBTITLES: function SUBTITLES(type, settings) {\n return function () {\n var tracks = settings.mediaTypes[type].tracks;\n\n for (var id in tracks) {\n if (tracks[id].mode === 'showing') {\n return tracks[id];\n }\n }\n\n return null;\n };\n }\n};\n\nexports.activeTrack = activeTrack;\n/**\n * Setup PlaylistLoaders and Tracks for media groups (Audio, Subtitles,\n * Closed-Captions) specified in the master manifest.\n *\n * @param {Object} settings\n * Object containing required information for setting up the media groups\n * @param {SegmentLoader} settings.segmentLoaders.AUDIO\n * Audio segment loader\n * @param {SegmentLoader} settings.segmentLoaders.SUBTITLES\n * Subtitle segment loader\n * @param {SegmentLoader} settings.segmentLoaders.main\n * Main segment loader\n * @param {Tech} settings.tech\n * The tech of the player\n * @param {Object} settings.requestOptions\n * XHR request options used by the segment loaders\n * @param {PlaylistLoader} settings.masterPlaylistLoader\n * PlaylistLoader for the master source\n * @param {String} mode\n * Mode of the hls source handler. Can be 'auto', 'html5', or 'flash'\n * @param {HlsHandler} settings.hls\n * HLS SourceHandler\n * @param {Object} settings.master\n * The parsed master manifest\n * @param {Object} settings.mediaTypes\n * Object to store the loaders, tracks, and utility methods for each media type\n * @param {Function} settings.blacklistCurrentPlaylist\n * Blacklists the current rendition and forces a rendition switch.\n * @function setupMediaGroups\n */\nvar setupMediaGroups = function setupMediaGroups(settings) {\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(function (type) {\n initialize[type](type, settings);\n });\n\n var mediaTypes = settings.mediaTypes;\n var masterPlaylistLoader = settings.masterPlaylistLoader;\n var tech = settings.tech;\n var hls = settings.hls;\n\n // setup active group and track getters and change event handlers\n ['AUDIO', 'SUBTITLES'].forEach(function (type) {\n mediaTypes[type].activeGroup = activeGroup(type, settings);\n mediaTypes[type].activeTrack = activeTrack[type](type, settings);\n mediaTypes[type].onGroupChanged = onGroupChanged(type, settings);\n mediaTypes[type].onTrackChanged = onTrackChanged(type, settings);\n });\n\n // DO NOT enable the default subtitle or caption track.\n // DO enable the default audio track\n var audioGroup = mediaTypes.AUDIO.activeGroup();\n var groupId = (audioGroup.filter(function (group) {\n return group['default'];\n })[0] || audioGroup[0]).id;\n\n mediaTypes.AUDIO.tracks[groupId].enabled = true;\n mediaTypes.AUDIO.onTrackChanged();\n\n masterPlaylistLoader.on('mediachange', function () {\n ['AUDIO', 'SUBTITLES'].forEach(function (type) {\n return mediaTypes[type].onGroupChanged();\n });\n });\n\n // custom audio track change event handler for usage event\n var onAudioTrackChanged = function onAudioTrackChanged() {\n mediaTypes.AUDIO.onTrackChanged();\n tech.trigger({ type: 'usage', name: 'hls-audio-change' });\n };\n\n tech.audioTracks().addEventListener('change', onAudioTrackChanged);\n tech.remoteTextTracks().addEventListener('change', mediaTypes.SUBTITLES.onTrackChanged);\n\n hls.on('dispose', function () {\n tech.audioTracks().removeEventListener('change', onAudioTrackChanged);\n tech.remoteTextTracks().removeEventListener('change', mediaTypes.SUBTITLES.onTrackChanged);\n });\n\n // clear existing audio tracks and add the ones we just created\n tech.clearTracks('audio');\n\n for (var id in mediaTypes.AUDIO.tracks) {\n tech.audioTracks().addTrack(mediaTypes.AUDIO.tracks[id]);\n }\n};\n\nexports.setupMediaGroups = setupMediaGroups;\n/**\n * Creates skeleton object used to store the loaders, tracks, and utility methods for each\n * media type\n *\n * @return {Object}\n * Object to store the loaders, tracks, and utility methods for each media type\n * @function createMediaTypes\n */\nvar createMediaTypes = function createMediaTypes() {\n var mediaTypes = {};\n\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(function (type) {\n mediaTypes[type] = {\n groups: {},\n tracks: {},\n activePlaylistLoader: null,\n activeGroup: noop,\n activeTrack: noop,\n onGroupChanged: noop,\n onTrackChanged: noop\n };\n });\n\n return mediaTypes;\n};\nexports.createMediaTypes = createMediaTypes;","module.exports = {\n tag: require('./flv-tag'),\n Transmuxer: require('./transmuxer'),\n getFlvHeader: require('./flv-header')\n};\n","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n if (!fn) {\n return false\n }\n var string = toString.call(fn)\n return string === '[object Function]' ||\n (typeof fn === 'function' && string !== '[object RegExp]') ||\n (typeof window !== 'undefined' &&\n // IE8 and below\n (fn === window.setTimeout ||\n fn === window.alert ||\n fn === window.confirm ||\n fn === window.prompt))\n};\n","/**\n * @file segment-loader.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _playlist = require('./playlist');\n\nvar _playlist2 = _interopRequireDefault(_playlist);\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar _sourceUpdater = require('./source-updater');\n\nvar _sourceUpdater2 = _interopRequireDefault(_sourceUpdater);\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _videojsContribMediaSourcesEs5RemoveCuesFromTrackJs = require('videojs-contrib-media-sources/es5/remove-cues-from-track.js');\n\nvar _videojsContribMediaSourcesEs5RemoveCuesFromTrackJs2 = _interopRequireDefault(_videojsContribMediaSourcesEs5RemoveCuesFromTrackJs);\n\nvar _binUtils = require('./bin-utils');\n\nvar _mediaSegmentRequest = require('./media-segment-request');\n\nvar _ranges = require('./ranges');\n\nvar _playlistSelectors = require('./playlist-selectors');\n\n// in ms\nvar CHECK_BUFFER_DELAY = 500;\n\n/**\n * Determines if we should call endOfStream on the media source based\n * on the state of the buffer or if appened segment was the final\n * segment in the playlist.\n *\n * @param {Object} playlist a media playlist object\n * @param {Object} mediaSource the MediaSource object\n * @param {Number} segmentIndex the index of segment we last appended\n * @returns {Boolean} do we need to call endOfStream on the MediaSource\n */\nvar detectEndOfStream = function detectEndOfStream(playlist, mediaSource, segmentIndex) {\n if (!playlist || !mediaSource) {\n return false;\n }\n\n var segments = playlist.segments;\n\n // determine a few boolean values to help make the branch below easier\n // to read\n var appendedLastSegment = segmentIndex === segments.length;\n\n // if we've buffered to the end of the video, we need to call endOfStream\n // so that MediaSources can trigger the `ended` event when it runs out of\n // buffered data instead of waiting for me\n return playlist.endList && mediaSource.readyState === 'open' && appendedLastSegment;\n};\n\nvar finite = function finite(num) {\n return typeof num === 'number' && isFinite(num);\n};\n\nvar illegalMediaSwitch = function illegalMediaSwitch(loaderType, startingMedia, newSegmentMedia) {\n // Although these checks should most likely cover non 'main' types, for now it narrows\n // the scope of our checks.\n if (loaderType !== 'main' || !startingMedia || !newSegmentMedia) {\n return null;\n }\n\n if (!newSegmentMedia.containsAudio && !newSegmentMedia.containsVideo) {\n return 'Neither audio nor video found in segment.';\n }\n\n if (startingMedia.containsVideo && !newSegmentMedia.containsVideo) {\n return 'Only audio found in segment when we expected video.' + ' We can\\'t switch to audio only from a stream that had video.' + ' To get rid of this message, please add codec information to the manifest.';\n }\n\n if (!startingMedia.containsVideo && newSegmentMedia.containsVideo) {\n return 'Video found in segment when we expected only audio.' + ' We can\\'t switch to a stream with video from an audio only stream.' + ' To get rid of this message, please add codec information to the manifest.';\n }\n\n return null;\n};\n\nexports.illegalMediaSwitch = illegalMediaSwitch;\n/**\n * Calculates a time value that is safe to remove from the back buffer without interupting\n * playback.\n *\n * @param {TimeRange} seekable\n * The current seekable range\n * @param {Number} currentTime\n * The current time of the player\n * @param {Number} targetDuration\n * The target duration of the current playlist\n * @return {Number}\n * Time that is safe to remove from the back buffer without interupting playback\n */\nvar safeBackBufferTrimTime = function safeBackBufferTrimTime(seekable, currentTime, targetDuration) {\n var removeToTime = undefined;\n\n if (seekable.length && seekable.start(0) > 0 && seekable.start(0) < currentTime) {\n // If we have a seekable range use that as the limit for what can be removed safely\n removeToTime = seekable.start(0);\n } else {\n // otherwise remove anything older than 30 seconds before the current play head\n removeToTime = currentTime - 30;\n }\n\n // Don't allow removing from the buffer within target duration of current time\n // to avoid the possibility of removing the GOP currently being played which could\n // cause playback stalls.\n return Math.min(removeToTime, currentTime - targetDuration);\n};\n\nexports.safeBackBufferTrimTime = safeBackBufferTrimTime;\n/**\n * An object that manages segment loading and appending.\n *\n * @class SegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */\n\nvar SegmentLoader = (function (_videojs$EventTarget) {\n _inherits(SegmentLoader, _videojs$EventTarget);\n\n function SegmentLoader(settings) {\n var _this = this;\n\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, SegmentLoader);\n\n _get(Object.getPrototypeOf(SegmentLoader.prototype), 'constructor', this).call(this);\n // check pre-conditions\n if (!settings) {\n throw new TypeError('Initialization settings are required');\n }\n if (typeof settings.currentTime !== 'function') {\n throw new TypeError('No currentTime getter specified');\n }\n if (!settings.mediaSource) {\n throw new TypeError('No MediaSource specified');\n }\n // public properties\n this.state = 'INIT';\n this.bandwidth = settings.bandwidth;\n this.throughput = { rate: 0, count: 0 };\n this.roundTrip = NaN;\n this.resetStats_();\n this.mediaIndex = null;\n\n // private settings\n this.hasPlayed_ = settings.hasPlayed;\n this.currentTime_ = settings.currentTime;\n this.seekable_ = settings.seekable;\n this.seeking_ = settings.seeking;\n this.duration_ = settings.duration;\n this.mediaSource_ = settings.mediaSource;\n this.hls_ = settings.hls;\n this.loaderType_ = settings.loaderType;\n this.startingMedia_ = void 0;\n this.segmentMetadataTrack_ = settings.segmentMetadataTrack;\n this.goalBufferLength_ = settings.goalBufferLength;\n\n // private instance variables\n this.checkBufferTimeout_ = null;\n this.error_ = void 0;\n this.currentTimeline_ = -1;\n this.pendingSegment_ = null;\n this.mimeType_ = null;\n this.sourceUpdater_ = null;\n this.xhrOptions_ = null;\n\n // Fragmented mp4 playback\n this.activeInitSegmentId_ = null;\n this.initSegments_ = {};\n\n this.decrypter_ = settings.decrypter;\n\n // Manages the tracking and generation of sync-points, mappings\n // between a time in the display time and a segment index within\n // a playlist\n this.syncController_ = settings.syncController;\n this.syncPoint_ = {\n segmentIndex: 0,\n time: 0\n };\n\n this.syncController_.on('syncinfoupdate', function () {\n return _this.trigger('syncinfoupdate');\n });\n\n this.mediaSource_.addEventListener('sourceopen', function () {\n return _this.ended_ = false;\n });\n\n // ...for determining the fetch location\n this.fetchAtBuffer_ = false;\n\n if (options.debug) {\n this.logger_ = _videoJs2['default'].log.bind(_videoJs2['default'], 'segment-loader', this.loaderType_, '->');\n }\n }\n\n /**\n * reset all of our media stats\n *\n * @private\n */\n\n _createClass(SegmentLoader, [{\n key: 'resetStats_',\n value: function resetStats_() {\n this.mediaBytesTransferred = 0;\n this.mediaRequests = 0;\n this.mediaRequestsAborted = 0;\n this.mediaRequestsTimedout = 0;\n this.mediaRequestsErrored = 0;\n this.mediaTransferDuration = 0;\n this.mediaSecondsLoaded = 0;\n }\n\n /**\n * dispose of the SegmentLoader and reset to the default state\n */\n }, {\n key: 'dispose',\n value: function dispose() {\n this.state = 'DISPOSED';\n this.pause();\n this.abort_();\n if (this.sourceUpdater_) {\n this.sourceUpdater_.dispose();\n }\n this.resetStats_();\n }\n\n /**\n * abort anything that is currently doing on with the SegmentLoader\n * and reset to a default state\n */\n }, {\n key: 'abort',\n value: function abort() {\n if (this.state !== 'WAITING') {\n if (this.pendingSegment_) {\n this.pendingSegment_ = null;\n }\n return;\n }\n\n this.abort_();\n\n // We aborted the requests we were waiting on, so reset the loader's state to READY\n // since we are no longer \"waiting\" on any requests. XHR callback is not always run\n // when the request is aborted. This will prevent the loader from being stuck in the\n // WAITING state indefinitely.\n this.state = 'READY';\n\n // don't wait for buffer check timeouts to begin fetching the\n // next segment\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n }\n\n /**\n * abort all pending xhr requests and null any pending segements\n *\n * @private\n */\n }, {\n key: 'abort_',\n value: function abort_() {\n if (this.pendingSegment_) {\n this.pendingSegment_.abortRequests();\n }\n\n // clear out the segment being processed\n this.pendingSegment_ = null;\n }\n\n /**\n * set an error on the segment loader and null out any pending segements\n *\n * @param {Error} error the error to set on the SegmentLoader\n * @return {Error} the error that was set or that is currently set\n */\n }, {\n key: 'error',\n value: function error(_error) {\n if (typeof _error !== 'undefined') {\n this.error_ = _error;\n }\n\n this.pendingSegment_ = null;\n return this.error_;\n }\n }, {\n key: 'endOfStream',\n value: function endOfStream() {\n this.ended_ = true;\n this.pause();\n this.trigger('ended');\n }\n\n /**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */\n }, {\n key: 'buffered_',\n value: function buffered_() {\n if (!this.sourceUpdater_) {\n return _videoJs2['default'].createTimeRanges();\n }\n\n return this.sourceUpdater_.buffered();\n }\n\n /**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {Boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */\n }, {\n key: 'initSegment',\n value: function initSegment(map) {\n var set = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n if (!map) {\n return null;\n }\n\n var id = (0, _binUtils.initSegmentId)(map);\n var storedMap = this.initSegments_[id];\n\n if (set && !storedMap && map.bytes) {\n this.initSegments_[id] = storedMap = {\n resolvedUri: map.resolvedUri,\n byterange: map.byterange,\n bytes: map.bytes\n };\n }\n\n return storedMap || map;\n }\n\n /**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {Boolean} True if the all configuration is ready for loading\n * @private\n */\n }, {\n key: 'couldBeginLoading_',\n value: function couldBeginLoading_() {\n return this.playlist_ && (\n // the source updater is created when init_ is called, so either having a\n // source updater or being in the INIT state with a mimeType is enough\n // to say we have all the needed configuration to start loading.\n this.sourceUpdater_ || this.mimeType_ && this.state === 'INIT') && !this.paused();\n }\n\n /**\n * load a playlist and start to fill the buffer\n */\n }, {\n key: 'load',\n value: function load() {\n // un-pause\n this.monitorBuffer_();\n\n // if we don't have a playlist yet, keep waiting for one to be\n // specified\n if (!this.playlist_) {\n return;\n }\n\n // not sure if this is the best place for this\n this.syncController_.setDateTimeMapping(this.playlist_);\n\n // if all the configuration is ready, initialize and begin loading\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n return this.init_();\n }\n\n // if we're in the middle of processing a segment already, don't\n // kick off an additional segment request\n if (!this.couldBeginLoading_() || this.state !== 'READY' && this.state !== 'INIT') {\n return;\n }\n\n this.state = 'READY';\n }\n\n /**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */\n }, {\n key: 'init_',\n value: function init_() {\n this.state = 'READY';\n this.sourceUpdater_ = new _sourceUpdater2['default'](this.mediaSource_, this.mimeType_);\n this.resetEverything();\n return this.monitorBuffer_();\n }\n\n /**\n * set a playlist on the segment loader\n *\n * @param {PlaylistLoader} media the playlist to set on the segment loader\n */\n }, {\n key: 'playlist',\n value: function playlist(newPlaylist) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n if (!newPlaylist) {\n return;\n }\n\n var oldPlaylist = this.playlist_;\n var segmentInfo = this.pendingSegment_;\n\n this.playlist_ = newPlaylist;\n this.xhrOptions_ = options;\n\n // when we haven't started playing yet, the start of a live playlist\n // is always our zero-time so force a sync update each time the playlist\n // is refreshed from the server\n if (!this.hasPlayed_()) {\n newPlaylist.syncInfo = {\n mediaSequence: newPlaylist.mediaSequence,\n time: 0\n };\n }\n\n // in VOD, this is always a rendition switch (or we updated our syncInfo above)\n // in LIVE, we always want to update with new playlists (including refreshes)\n this.trigger('syncinfoupdate');\n\n // if we were unpaused but waiting for a playlist, start\n // buffering now\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n return this.init_();\n }\n\n if (!oldPlaylist || oldPlaylist.uri !== newPlaylist.uri) {\n if (this.mediaIndex !== null) {\n // we must \"resync\" the segment loader when we switch renditions and\n // the segment loader is already synced to the previous rendition\n this.resyncLoader();\n }\n\n // the rest of this function depends on `oldPlaylist` being defined\n return;\n }\n\n // we reloaded the same playlist so we are in a live scenario\n // and we will likely need to adjust the mediaIndex\n var mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence;\n\n this.logger_('mediaSequenceDiff', mediaSequenceDiff);\n\n // update the mediaIndex on the SegmentLoader\n // this is important because we can abort a request and this value must be\n // equal to the last appended mediaIndex\n if (this.mediaIndex !== null) {\n this.mediaIndex -= mediaSequenceDiff;\n }\n\n // update the mediaIndex on the SegmentInfo object\n // this is important because we will update this.mediaIndex with this value\n // in `handleUpdateEnd_` after the segment has been successfully appended\n if (segmentInfo) {\n segmentInfo.mediaIndex -= mediaSequenceDiff;\n\n // we need to update the referenced segment so that timing information is\n // saved for the new playlist's segment, however, if the segment fell off the\n // playlist, we can leave the old reference and just lose the timing info\n if (segmentInfo.mediaIndex >= 0) {\n segmentInfo.segment = newPlaylist.segments[segmentInfo.mediaIndex];\n }\n }\n\n this.syncController_.saveExpiredSegmentInfo(oldPlaylist, newPlaylist);\n }\n\n /**\n * Prevent the loader from fetching additional segments. If there\n * is a segment request outstanding, it will finish processing\n * before the loader halts. A segment loader can be unpaused by\n * calling load().\n */\n }, {\n key: 'pause',\n value: function pause() {\n if (this.checkBufferTimeout_) {\n _globalWindow2['default'].clearTimeout(this.checkBufferTimeout_);\n\n this.checkBufferTimeout_ = null;\n }\n }\n\n /**\n * Returns whether the segment loader is fetching additional\n * segments when given the opportunity. This property can be\n * modified through calls to pause() and load().\n */\n }, {\n key: 'paused',\n value: function paused() {\n return this.checkBufferTimeout_ === null;\n }\n\n /**\n * create/set the following mimetype on the SourceBuffer through a\n * SourceUpdater\n *\n * @param {String} mimeType the mime type string to use\n */\n }, {\n key: 'mimeType',\n value: function mimeType(_mimeType) {\n if (this.mimeType_) {\n return;\n }\n\n this.mimeType_ = _mimeType;\n // if we were unpaused but waiting for a sourceUpdater, start\n // buffering now\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n this.init_();\n }\n }\n\n /**\n * Delete all the buffered data and reset the SegmentLoader\n */\n }, {\n key: 'resetEverything',\n value: function resetEverything() {\n this.ended_ = false;\n this.resetLoader();\n this.remove(0, this.duration_());\n this.trigger('reseteverything');\n }\n\n /**\n * Force the SegmentLoader to resync and start loading around the currentTime instead\n * of starting at the end of the buffer\n *\n * Useful for fast quality changes\n */\n }, {\n key: 'resetLoader',\n value: function resetLoader() {\n this.fetchAtBuffer_ = false;\n this.resyncLoader();\n }\n\n /**\n * Force the SegmentLoader to restart synchronization and make a conservative guess\n * before returning to the simple walk-forward method\n */\n }, {\n key: 'resyncLoader',\n value: function resyncLoader() {\n this.mediaIndex = null;\n this.syncPoint_ = null;\n this.abort();\n }\n\n /**\n * Remove any data in the source buffer between start and end times\n * @param {Number} start - the start time of the region to remove from the buffer\n * @param {Number} end - the end time of the region to remove from the buffer\n */\n }, {\n key: 'remove',\n value: function remove(start, end) {\n if (this.sourceUpdater_) {\n this.sourceUpdater_.remove(start, end);\n }\n (0, _videojsContribMediaSourcesEs5RemoveCuesFromTrackJs2['default'])(start, end, this.segmentMetadataTrack_);\n }\n\n /**\n * (re-)schedule monitorBufferTick_ to run as soon as possible\n *\n * @private\n */\n }, {\n key: 'monitorBuffer_',\n value: function monitorBuffer_() {\n if (this.checkBufferTimeout_) {\n _globalWindow2['default'].clearTimeout(this.checkBufferTimeout_);\n }\n\n this.checkBufferTimeout_ = _globalWindow2['default'].setTimeout(this.monitorBufferTick_.bind(this), 1);\n }\n\n /**\n * As long as the SegmentLoader is in the READY state, periodically\n * invoke fillBuffer_().\n *\n * @private\n */\n }, {\n key: 'monitorBufferTick_',\n value: function monitorBufferTick_() {\n if (this.state === 'READY') {\n this.fillBuffer_();\n }\n\n if (this.checkBufferTimeout_) {\n _globalWindow2['default'].clearTimeout(this.checkBufferTimeout_);\n }\n\n this.checkBufferTimeout_ = _globalWindow2['default'].setTimeout(this.monitorBufferTick_.bind(this), CHECK_BUFFER_DELAY);\n }\n\n /**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */\n }, {\n key: 'fillBuffer_',\n value: function fillBuffer_() {\n if (this.sourceUpdater_.updating()) {\n return;\n }\n\n if (!this.syncPoint_) {\n this.syncPoint_ = this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_());\n }\n\n // see if we need to begin loading immediately\n var segmentInfo = this.checkBuffer_(this.buffered_(), this.playlist_, this.mediaIndex, this.hasPlayed_(), this.currentTime_(), this.syncPoint_);\n\n if (!segmentInfo) {\n return;\n }\n\n var isEndOfStream = detectEndOfStream(this.playlist_, this.mediaSource_, segmentInfo.mediaIndex);\n\n if (isEndOfStream) {\n this.endOfStream();\n return;\n }\n\n if (segmentInfo.mediaIndex === this.playlist_.segments.length - 1 && this.mediaSource_.readyState === 'ended' && !this.seeking_()) {\n return;\n }\n\n // We will need to change timestampOffset of the sourceBuffer if either of\n // the following conditions are true:\n // - The segment.timeline !== this.currentTimeline\n // (we are crossing a discontinuity somehow)\n // - The \"timestampOffset\" for the start of this segment is less than\n // the currently set timestampOffset\n if (segmentInfo.timeline !== this.currentTimeline_ || segmentInfo.startOfSegment !== null && segmentInfo.startOfSegment < this.sourceUpdater_.timestampOffset()) {\n this.syncController_.reset();\n segmentInfo.timestampOffset = segmentInfo.startOfSegment;\n }\n\n this.loadSegment_(segmentInfo);\n }\n\n /**\n * Determines what segment request should be made, given current playback\n * state.\n *\n * @param {TimeRanges} buffered - the state of the buffer\n * @param {Object} playlist - the playlist object to fetch segments from\n * @param {Number} mediaIndex - the previous mediaIndex fetched or null\n * @param {Boolean} hasPlayed - a flag indicating whether we have played or not\n * @param {Number} currentTime - the playback position in seconds\n * @param {Object} syncPoint - a segment info object that describes the\n * @returns {Object} a segment request object that describes the segment to load\n */\n }, {\n key: 'checkBuffer_',\n value: function checkBuffer_(buffered, playlist, mediaIndex, hasPlayed, currentTime, syncPoint) {\n var lastBufferedEnd = 0;\n var startOfSegment = undefined;\n\n if (buffered.length) {\n lastBufferedEnd = buffered.end(buffered.length - 1);\n }\n\n var bufferedTime = Math.max(0, lastBufferedEnd - currentTime);\n\n if (!playlist.segments.length) {\n return null;\n }\n\n // if there is plenty of content buffered, and the video has\n // been played before relax for awhile\n if (bufferedTime >= this.goalBufferLength_()) {\n return null;\n }\n\n // if the video has not yet played once, and we already have\n // one segment downloaded do nothing\n if (!hasPlayed && bufferedTime >= 1) {\n return null;\n }\n\n this.logger_('checkBuffer_', 'mediaIndex:', mediaIndex, 'hasPlayed:', hasPlayed, 'currentTime:', currentTime, 'syncPoint:', syncPoint, 'fetchAtBuffer:', this.fetchAtBuffer_, 'bufferedTime:', bufferedTime);\n\n // When the syncPoint is null, there is no way of determining a good\n // conservative segment index to fetch from\n // The best thing to do here is to get the kind of sync-point data by\n // making a request\n if (syncPoint === null) {\n mediaIndex = this.getSyncSegmentCandidate_(playlist);\n this.logger_('getSync', 'mediaIndex:', mediaIndex);\n return this.generateSegmentInfo_(playlist, mediaIndex, null, true);\n }\n\n // Under normal playback conditions fetching is a simple walk forward\n if (mediaIndex !== null) {\n this.logger_('walkForward', 'mediaIndex:', mediaIndex + 1);\n var segment = playlist.segments[mediaIndex];\n\n if (segment && segment.end) {\n startOfSegment = segment.end;\n } else {\n startOfSegment = lastBufferedEnd;\n }\n return this.generateSegmentInfo_(playlist, mediaIndex + 1, startOfSegment, false);\n }\n\n // There is a sync-point but the lack of a mediaIndex indicates that\n // we need to make a good conservative guess about which segment to\n // fetch\n if (this.fetchAtBuffer_) {\n // Find the segment containing the end of the buffer\n var mediaSourceInfo = _playlist2['default'].getMediaInfoForTime(playlist, lastBufferedEnd, syncPoint.segmentIndex, syncPoint.time);\n\n mediaIndex = mediaSourceInfo.mediaIndex;\n startOfSegment = mediaSourceInfo.startTime;\n } else {\n // Find the segment containing currentTime\n var mediaSourceInfo = _playlist2['default'].getMediaInfoForTime(playlist, currentTime, syncPoint.segmentIndex, syncPoint.time);\n\n mediaIndex = mediaSourceInfo.mediaIndex;\n startOfSegment = mediaSourceInfo.startTime;\n }\n this.logger_('getMediaIndexForTime', 'mediaIndex:', mediaIndex, 'startOfSegment:', startOfSegment);\n\n return this.generateSegmentInfo_(playlist, mediaIndex, startOfSegment, false);\n }\n\n /**\n * The segment loader has no recourse except to fetch a segment in the\n * current playlist and use the internal timestamps in that segment to\n * generate a syncPoint. This function returns a good candidate index\n * for that process.\n *\n * @param {Object} playlist - the playlist object to look for a\n * @returns {Number} An index of a segment from the playlist to load\n */\n }, {\n key: 'getSyncSegmentCandidate_',\n value: function getSyncSegmentCandidate_(playlist) {\n var _this2 = this;\n\n if (this.currentTimeline_ === -1) {\n return 0;\n }\n\n var segmentIndexArray = playlist.segments.map(function (s, i) {\n return {\n timeline: s.timeline,\n segmentIndex: i\n };\n }).filter(function (s) {\n return s.timeline === _this2.currentTimeline_;\n });\n\n if (segmentIndexArray.length) {\n return segmentIndexArray[Math.min(segmentIndexArray.length - 1, 1)].segmentIndex;\n }\n\n return Math.max(playlist.segments.length - 1, 0);\n }\n }, {\n key: 'generateSegmentInfo_',\n value: function generateSegmentInfo_(playlist, mediaIndex, startOfSegment, isSyncRequest) {\n if (mediaIndex < 0 || mediaIndex >= playlist.segments.length) {\n return null;\n }\n\n var segment = playlist.segments[mediaIndex];\n\n return {\n requestId: 'segment-loader-' + Math.random(),\n // resolve the segment URL relative to the playlist\n uri: segment.resolvedUri,\n // the segment's mediaIndex at the time it was requested\n mediaIndex: mediaIndex,\n // whether or not to update the SegmentLoader's state with this\n // segment's mediaIndex\n isSyncRequest: isSyncRequest,\n startOfSegment: startOfSegment,\n // the segment's playlist\n playlist: playlist,\n // unencrypted bytes of the segment\n bytes: null,\n // when a key is defined for this segment, the encrypted bytes\n encryptedBytes: null,\n // The target timestampOffset for this segment when we append it\n // to the source buffer\n timestampOffset: null,\n // The timeline that the segment is in\n timeline: segment.timeline,\n // The expected duration of the segment in seconds\n duration: segment.duration,\n // retain the segment in case the playlist updates while doing an async process\n segment: segment\n };\n }\n\n /**\n * Determines if the network has enough bandwidth to complete the current segment\n * request in a timely manner. If not, the request will be aborted early and bandwidth\n * updated to trigger a playlist switch.\n *\n * @param {Object} stats\n * Object containing stats about the request timing and size\n * @return {Boolean} True if the request was aborted, false otherwise\n * @private\n */\n }, {\n key: 'abortRequestEarly_',\n value: function abortRequestEarly_(stats) {\n if (this.hls_.tech_.paused() ||\n // Don't abort if the current playlist is on the lowestEnabledRendition\n // TODO: Replace using timeout with a boolean indicating whether this playlist is\n // the lowestEnabledRendition.\n !this.xhrOptions_.timeout ||\n // Don't abort if we have no bandwidth information to estimate segment sizes\n !this.playlist_.attributes.BANDWIDTH) {\n return false;\n }\n\n // Wait at least 1 second since the first byte of data has been received before\n // using the calculated bandwidth from the progress event to allow the bitrate\n // to stabilize\n if (Date.now() - (stats.firstBytesReceivedAt || Date.now()) < 1000) {\n return false;\n }\n\n var currentTime = this.currentTime_();\n var measuredBandwidth = stats.bandwidth;\n var segmentDuration = this.pendingSegment_.duration;\n\n var requestTimeRemaining = _playlist2['default'].estimateSegmentRequestTime(segmentDuration, measuredBandwidth, this.playlist_, stats.bytesReceived);\n\n // Subtract 1 from the timeUntilRebuffer so we still consider an early abort\n // if we are only left with less than 1 second when the request completes.\n // A negative timeUntilRebuffering indicates we are already rebuffering\n var timeUntilRebuffer = (0, _ranges.timeUntilRebuffer)(this.buffered_(), currentTime, this.hls_.tech_.playbackRate()) - 1;\n\n // Only consider aborting early if the estimated time to finish the download\n // is larger than the estimated time until the player runs out of forward buffer\n if (requestTimeRemaining <= timeUntilRebuffer) {\n return false;\n }\n\n var switchCandidate = (0, _playlistSelectors.minRebufferMaxBandwidthSelector)({\n master: this.hls_.playlists.master,\n currentTime: currentTime,\n bandwidth: measuredBandwidth,\n duration: this.duration_(),\n segmentDuration: segmentDuration,\n timeUntilRebuffer: timeUntilRebuffer,\n currentTimeline: this.currentTimeline_,\n syncController: this.syncController_\n });\n\n if (!switchCandidate) {\n return;\n }\n\n var rebufferingImpact = requestTimeRemaining - timeUntilRebuffer;\n\n var timeSavedBySwitching = rebufferingImpact - switchCandidate.rebufferingImpact;\n\n var minimumTimeSaving = 0.5;\n\n // If we are already rebuffering, increase the amount of variance we add to the\n // potential round trip time of the new request so that we are not too aggressive\n // with switching to a playlist that might save us a fraction of a second.\n if (timeUntilRebuffer <= _ranges.TIME_FUDGE_FACTOR) {\n minimumTimeSaving = 1;\n }\n\n if (!switchCandidate.playlist || switchCandidate.playlist.uri === this.playlist_.uri || timeSavedBySwitching < minimumTimeSaving) {\n return false;\n }\n\n // set the bandwidth to that of the desired playlist being sure to scale by\n // BANDWIDTH_VARIANCE and add one so the playlist selector does not exclude it\n // don't trigger a bandwidthupdate as the bandwidth is artifial\n this.bandwidth = switchCandidate.playlist.attributes.BANDWIDTH * _config2['default'].BANDWIDTH_VARIANCE + 1;\n this.abort();\n this.trigger('earlyabort');\n return true;\n }\n\n /**\n * XHR `progress` event handler\n *\n * @param {Event}\n * The XHR `progress` event\n * @param {Object} simpleSegment\n * A simplified segment object copy\n * @private\n */\n }, {\n key: 'handleProgress_',\n value: function handleProgress_(event, simpleSegment) {\n if (!this.pendingSegment_ || simpleSegment.requestId !== this.pendingSegment_.requestId || this.abortRequestEarly_(simpleSegment.stats)) {\n return;\n }\n\n this.trigger('progress');\n }\n\n /**\n * load a specific segment from a request into the buffer\n *\n * @private\n */\n }, {\n key: 'loadSegment_',\n value: function loadSegment_(segmentInfo) {\n this.state = 'WAITING';\n this.pendingSegment_ = segmentInfo;\n this.trimBackBuffer_(segmentInfo);\n\n segmentInfo.abortRequests = (0, _mediaSegmentRequest.mediaSegmentRequest)(this.hls_.xhr, this.xhrOptions_, this.decrypter_, this.createSimplifiedSegmentObj_(segmentInfo),\n // progress callback\n this.handleProgress_.bind(this), this.segmentRequestFinished_.bind(this));\n }\n\n /**\n * trim the back buffer so that we don't have too much data\n * in the source buffer\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n */\n }, {\n key: 'trimBackBuffer_',\n value: function trimBackBuffer_(segmentInfo) {\n var removeToTime = safeBackBufferTrimTime(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10);\n\n // Chrome has a hard limit of 150MB of\n // buffer and a very conservative \"garbage collector\"\n // We manually clear out the old buffer to ensure\n // we don't trigger the QuotaExceeded error\n // on the source buffer during subsequent appends\n\n if (removeToTime > 0) {\n this.remove(0, removeToTime);\n }\n }\n\n /**\n * created a simplified copy of the segment object with just the\n * information necessary to perform the XHR and decryption\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n * @returns {Object} a simplified segment object copy\n */\n }, {\n key: 'createSimplifiedSegmentObj_',\n value: function createSimplifiedSegmentObj_(segmentInfo) {\n var segment = segmentInfo.segment;\n var simpleSegment = {\n resolvedUri: segment.resolvedUri,\n byterange: segment.byterange,\n requestId: segmentInfo.requestId\n };\n\n if (segment.key) {\n // if the media sequence is greater than 2^32, the IV will be incorrect\n // assuming 10s segments, that would be about 1300 years\n var iv = segment.key.iv || new Uint32Array([0, 0, 0, segmentInfo.mediaIndex + segmentInfo.playlist.mediaSequence]);\n\n simpleSegment.key = {\n resolvedUri: segment.key.resolvedUri,\n iv: iv\n };\n }\n\n if (segment.map) {\n simpleSegment.map = this.initSegment(segment.map);\n }\n\n return simpleSegment;\n }\n\n /**\n * Handle the callback from the segmentRequest function and set the\n * associated SegmentLoader state and errors if necessary\n *\n * @private\n */\n }, {\n key: 'segmentRequestFinished_',\n value: function segmentRequestFinished_(error, simpleSegment) {\n // every request counts as a media request even if it has been aborted\n // or canceled due to a timeout\n this.mediaRequests += 1;\n\n if (simpleSegment.stats) {\n this.mediaBytesTransferred += simpleSegment.stats.bytesReceived;\n this.mediaTransferDuration += simpleSegment.stats.roundTripTime;\n }\n\n // The request was aborted and the SegmentLoader has already been reset\n if (!this.pendingSegment_) {\n this.mediaRequestsAborted += 1;\n return;\n }\n\n // the request was aborted and the SegmentLoader has already started\n // another request. this can happen when the timeout for an aborted\n // request triggers due to a limitation in the XHR library\n // do not count this as any sort of request or we risk double-counting\n if (simpleSegment.requestId !== this.pendingSegment_.requestId) {\n return;\n }\n\n // an error occurred from the active pendingSegment_ so reset everything\n if (error) {\n this.pendingSegment_ = null;\n this.state = 'READY';\n\n // the requests were aborted just record the aborted stat and exit\n // this is not a true error condition and nothing corrective needs\n // to be done\n if (error.code === _mediaSegmentRequest.REQUEST_ERRORS.ABORTED) {\n this.mediaRequestsAborted += 1;\n return;\n }\n\n this.pause();\n\n // the error is really just that at least one of the requests timed-out\n // set the bandwidth to a very low value and trigger an ABR switch to\n // take emergency action\n if (error.code === _mediaSegmentRequest.REQUEST_ERRORS.TIMEOUT) {\n this.mediaRequestsTimedout += 1;\n this.bandwidth = 1;\n this.roundTrip = NaN;\n this.trigger('bandwidthupdate');\n return;\n }\n\n // if control-flow has arrived here, then the error is real\n // emit an error event to blacklist the current playlist\n this.mediaRequestsErrored += 1;\n this.error(error);\n this.trigger('error');\n return;\n }\n\n // the response was a success so set any bandwidth stats the request\n // generated for ABR purposes\n this.bandwidth = simpleSegment.stats.bandwidth;\n this.roundTrip = simpleSegment.stats.roundTripTime;\n\n // if this request included an initialization segment, save that data\n // to the initSegment cache\n if (simpleSegment.map) {\n simpleSegment.map = this.initSegment(simpleSegment.map, true);\n }\n\n this.processSegmentResponse_(simpleSegment);\n }\n\n /**\n * Move any important data from the simplified segment object\n * back to the real segment object for future phases\n *\n * @private\n */\n }, {\n key: 'processSegmentResponse_',\n value: function processSegmentResponse_(simpleSegment) {\n var segmentInfo = this.pendingSegment_;\n\n segmentInfo.bytes = simpleSegment.bytes;\n if (simpleSegment.map) {\n segmentInfo.segment.map.bytes = simpleSegment.map.bytes;\n }\n\n segmentInfo.endOfAllRequests = simpleSegment.endOfAllRequests;\n this.handleSegment_();\n }\n\n /**\n * append a decrypted segement to the SourceBuffer through a SourceUpdater\n *\n * @private\n */\n }, {\n key: 'handleSegment_',\n value: function handleSegment_() {\n var _this3 = this;\n\n if (!this.pendingSegment_) {\n this.state = 'READY';\n return;\n }\n\n var segmentInfo = this.pendingSegment_;\n var segment = segmentInfo.segment;\n var timingInfo = this.syncController_.probeSegmentInfo(segmentInfo);\n\n // When we have our first timing info, determine what media types this loader is\n // dealing with. Although we're maintaining extra state, it helps to preserve the\n // separation of segment loader from the actual source buffers.\n if (typeof this.startingMedia_ === 'undefined' && timingInfo && (\n // Guard against cases where we're not getting timing info at all until we are\n // certain that all streams will provide it.\n timingInfo.containsAudio || timingInfo.containsVideo)) {\n this.startingMedia_ = {\n containsAudio: timingInfo.containsAudio,\n containsVideo: timingInfo.containsVideo\n };\n }\n\n var illegalMediaSwitchError = illegalMediaSwitch(this.loaderType_, this.startingMedia_, timingInfo);\n\n if (illegalMediaSwitchError) {\n this.error({\n message: illegalMediaSwitchError,\n blacklistDuration: Infinity\n });\n this.trigger('error');\n return;\n }\n\n if (segmentInfo.isSyncRequest) {\n this.trigger('syncinfoupdate');\n this.pendingSegment_ = null;\n this.state = 'READY';\n return;\n }\n\n if (segmentInfo.timestampOffset !== null && segmentInfo.timestampOffset !== this.sourceUpdater_.timestampOffset()) {\n this.sourceUpdater_.timestampOffset(segmentInfo.timestampOffset);\n // fired when a timestamp offset is set in HLS (can also identify discontinuities)\n this.trigger('timestampoffset');\n }\n\n var timelineMapping = this.syncController_.mappingForTimeline(segmentInfo.timeline);\n\n if (timelineMapping !== null) {\n this.trigger({\n type: 'segmenttimemapping',\n mapping: timelineMapping\n });\n }\n\n this.state = 'APPENDING';\n\n // if the media initialization segment is changing, append it\n // before the content segment\n if (segment.map) {\n (function () {\n var initId = (0, _binUtils.initSegmentId)(segment.map);\n\n if (!_this3.activeInitSegmentId_ || _this3.activeInitSegmentId_ !== initId) {\n var initSegment = _this3.initSegment(segment.map);\n\n _this3.sourceUpdater_.appendBuffer(initSegment.bytes, function () {\n _this3.activeInitSegmentId_ = initId;\n });\n }\n })();\n }\n\n segmentInfo.byteLength = segmentInfo.bytes.byteLength;\n if (typeof segment.start === 'number' && typeof segment.end === 'number') {\n this.mediaSecondsLoaded += segment.end - segment.start;\n } else {\n this.mediaSecondsLoaded += segment.duration;\n }\n\n this.sourceUpdater_.appendBuffer(segmentInfo.bytes, this.handleUpdateEnd_.bind(this));\n }\n\n /**\n * callback to run when appendBuffer is finished. detects if we are\n * in a good state to do things with the data we got, or if we need\n * to wait for more\n *\n * @private\n */\n }, {\n key: 'handleUpdateEnd_',\n value: function handleUpdateEnd_() {\n this.logger_('handleUpdateEnd_', 'segmentInfo:', this.pendingSegment_);\n\n if (!this.pendingSegment_) {\n this.state = 'READY';\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n return;\n }\n\n var segmentInfo = this.pendingSegment_;\n var segment = segmentInfo.segment;\n var isWalkingForward = this.mediaIndex !== null;\n\n this.pendingSegment_ = null;\n this.recordThroughput_(segmentInfo);\n this.addSegmentMetadataCue_(segmentInfo);\n\n this.state = 'READY';\n\n this.mediaIndex = segmentInfo.mediaIndex;\n this.fetchAtBuffer_ = true;\n this.currentTimeline_ = segmentInfo.timeline;\n\n // We must update the syncinfo to recalculate the seekable range before\n // the following conditional otherwise it may consider this a bad \"guess\"\n // and attempt to resync when the post-update seekable window and live\n // point would mean that this was the perfect segment to fetch\n this.trigger('syncinfoupdate');\n\n // If we previously appended a segment that ends more than 3 targetDurations before\n // the currentTime_ that means that our conservative guess was too conservative.\n // In that case, reset the loader state so that we try to use any information gained\n // from the previous request to create a new, more accurate, sync-point.\n if (segment.end && this.currentTime_() - segment.end > segmentInfo.playlist.targetDuration * 3) {\n this.resetEverything();\n return;\n }\n\n // Don't do a rendition switch unless we have enough time to get a sync segment\n // and conservatively guess\n if (isWalkingForward) {\n this.trigger('bandwidthupdate');\n }\n this.trigger('progress');\n\n // any time an update finishes and the last segment is in the\n // buffer, end the stream. this ensures the \"ended\" event will\n // fire if playback reaches that point.\n var isEndOfStream = detectEndOfStream(segmentInfo.playlist, this.mediaSource_, segmentInfo.mediaIndex + 1);\n\n if (isEndOfStream) {\n this.endOfStream();\n }\n\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n }\n\n /**\n * Records the current throughput of the decrypt, transmux, and append\n * portion of the semgment pipeline. `throughput.rate` is a the cumulative\n * moving average of the throughput. `throughput.count` is the number of\n * data points in the average.\n *\n * @private\n * @param {Object} segmentInfo the object returned by loadSegment\n */\n }, {\n key: 'recordThroughput_',\n value: function recordThroughput_(segmentInfo) {\n var rate = this.throughput.rate;\n // Add one to the time to ensure that we don't accidentally attempt to divide\n // by zero in the case where the throughput is ridiculously high\n var segmentProcessingTime = Date.now() - segmentInfo.endOfAllRequests + 1;\n // Multiply by 8000 to convert from bytes/millisecond to bits/second\n var segmentProcessingThroughput = Math.floor(segmentInfo.byteLength / segmentProcessingTime * 8 * 1000);\n\n // This is just a cumulative moving average calculation:\n // newAvg = oldAvg + (sample - oldAvg) / (sampleCount + 1)\n this.throughput.rate += (segmentProcessingThroughput - rate) / ++this.throughput.count;\n }\n\n /**\n * A debugging logger noop that is set to console.log only if debugging\n * is enabled globally\n *\n * @private\n */\n }, {\n key: 'logger_',\n value: function logger_() {}\n\n /**\n * Adds a cue to the segment-metadata track with some metadata information about the\n * segment\n *\n * @private\n * @param {Object} segmentInfo\n * the object returned by loadSegment\n * @method addSegmentMetadataCue_\n */\n }, {\n key: 'addSegmentMetadataCue_',\n value: function addSegmentMetadataCue_(segmentInfo) {\n if (!this.segmentMetadataTrack_) {\n return;\n }\n\n var segment = segmentInfo.segment;\n var start = segment.start;\n var end = segment.end;\n\n // Do not try adding the cue if the start and end times are invalid.\n if (!finite(start) || !finite(end)) {\n return;\n }\n\n (0, _videojsContribMediaSourcesEs5RemoveCuesFromTrackJs2['default'])(start, end, this.segmentMetadataTrack_);\n\n var Cue = _globalWindow2['default'].WebKitDataCue || _globalWindow2['default'].VTTCue;\n var value = {\n bandwidth: segmentInfo.playlist.attributes.BANDWIDTH,\n resolution: segmentInfo.playlist.attributes.RESOLUTION,\n codecs: segmentInfo.playlist.attributes.CODECS,\n byteLength: segmentInfo.byteLength,\n uri: segmentInfo.uri,\n timeline: segmentInfo.timeline,\n playlist: segmentInfo.playlist.uri,\n start: start,\n end: end\n };\n var data = JSON.stringify(value);\n var cue = new Cue(start, end, data);\n\n // Attach the metadata to the value property of the cue to keep consistency between\n // the differences of WebKitDataCue in safari and VTTCue in other browsers\n cue.value = value;\n\n this.segmentMetadataTrack_.addCue(cue);\n }\n }]);\n\n return SegmentLoader;\n})(_videoJs2['default'].EventTarget);\n\nexports['default'] = SegmentLoader;","var topLevel = typeof global !== 'undefined' ? global :\n typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n doccy = document;\n} else {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n}\n\nmodule.exports = doccy;\n","/**\n * @file decrypter.js\n *\n * An asynchronous implementation of AES-128 CBC decryption with\n * PKCS#7 padding.\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _aes = require('./aes');\n\nvar _aes2 = _interopRequireDefault(_aes);\n\nvar _asyncStream = require('./async-stream');\n\nvar _asyncStream2 = _interopRequireDefault(_asyncStream);\n\nvar _pkcs7 = require('pkcs7');\n\n/**\n * Convert network-order (big-endian) bytes into their little-endian\n * representation.\n */\nvar ntoh = function ntoh(word) {\n return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n};\n\n/**\n * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * use for the first round of CBC.\n * @return {Uint8Array} the decrypted bytes\n *\n * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\n * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29\n * @see https://tools.ietf.org/html/rfc2315\n */\nvar decrypt = function decrypt(encrypted, key, initVector) {\n // word-level access to the encrypted bytes\n var encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2);\n\n var decipher = new _aes2['default'](Array.prototype.slice.call(key));\n\n // byte and word-level access for the decrypted output\n var decrypted = new Uint8Array(encrypted.byteLength);\n var decrypted32 = new Int32Array(decrypted.buffer);\n\n // temporary variables for working with the IV, encrypted, and\n // decrypted data\n var init0 = undefined;\n var init1 = undefined;\n var init2 = undefined;\n var init3 = undefined;\n var encrypted0 = undefined;\n var encrypted1 = undefined;\n var encrypted2 = undefined;\n var encrypted3 = undefined;\n\n // iteration variable\n var wordIx = undefined;\n\n // pull out the words of the IV to ensure we don't modify the\n // passed-in reference and easier access\n init0 = initVector[0];\n init1 = initVector[1];\n init2 = initVector[2];\n init3 = initVector[3];\n\n // decrypt four word sequences, applying cipher-block chaining (CBC)\n // to each decrypted block\n for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) {\n // convert big-endian (network order) words into little-endian\n // (javascript order)\n encrypted0 = ntoh(encrypted32[wordIx]);\n encrypted1 = ntoh(encrypted32[wordIx + 1]);\n encrypted2 = ntoh(encrypted32[wordIx + 2]);\n encrypted3 = ntoh(encrypted32[wordIx + 3]);\n\n // decrypt the block\n decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx);\n\n // XOR with the IV, and restore network byte-order to obtain the\n // plaintext\n decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0);\n decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1);\n decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2);\n decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3);\n\n // setup the IV for the next round\n init0 = encrypted0;\n init1 = encrypted1;\n init2 = encrypted2;\n init3 = encrypted3;\n }\n\n return decrypted;\n};\n\nexports.decrypt = decrypt;\n/**\n * The `Decrypter` class that manages decryption of AES\n * data through `AsyncStream` objects and the `decrypt`\n * function\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * @param {Function} done the function to run when done\n * @class Decrypter\n */\n\nvar Decrypter = (function () {\n function Decrypter(encrypted, key, initVector, done) {\n _classCallCheck(this, Decrypter);\n\n var step = Decrypter.STEP;\n var encrypted32 = new Int32Array(encrypted.buffer);\n var decrypted = new Uint8Array(encrypted.byteLength);\n var i = 0;\n\n this.asyncStream_ = new _asyncStream2['default']();\n\n // split up the encryption job and do the individual chunks asynchronously\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n for (i = step; i < encrypted32.length; i += step) {\n initVector = new Uint32Array([ntoh(encrypted32[i - 4]), ntoh(encrypted32[i - 3]), ntoh(encrypted32[i - 2]), ntoh(encrypted32[i - 1])]);\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n }\n // invoke the done() callback when everything is finished\n this.asyncStream_.push(function () {\n // remove pkcs#7 padding from the decrypted bytes\n done(null, (0, _pkcs7.unpad)(decrypted));\n });\n }\n\n /**\n * a getter for step the maximum number of bytes to process at one time\n *\n * @return {Number} the value of step 32000\n */\n\n _createClass(Decrypter, [{\n key: 'decryptChunk_',\n\n /**\n * @private\n */\n value: function decryptChunk_(encrypted, key, initVector, decrypted) {\n return function () {\n var bytes = decrypt(encrypted, key, initVector);\n\n decrypted.set(bytes, encrypted.byteOffset);\n };\n }\n }], [{\n key: 'STEP',\n get: function get() {\n // 4 * 8000;\n return 32000;\n }\n }]);\n\n return Decrypter;\n})();\n\nexports.Decrypter = Decrypter;\nexports['default'] = {\n Decrypter: Decrypter,\n decrypt: decrypt\n};","/**\n * mux.js\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n'use strict';\n\nvar Stream = require('../utils/stream.js');\nvar mp4 = require('./mp4-generator.js');\nvar m2ts = require('../m2ts/m2ts.js');\nvar AdtsStream = require('../codecs/adts.js');\nvar H264Stream = require('../codecs/h264').H264Stream;\nvar AacStream = require('../aac');\nvar coneOfSilence = require('../data/silence');\nvar clock = require('../utils/clock');\n\n// constants\nvar AUDIO_PROPERTIES = [\n 'audioobjecttype',\n 'channelcount',\n 'samplerate',\n 'samplingfrequencyindex',\n 'samplesize'\n];\n\nvar VIDEO_PROPERTIES = [\n 'width',\n 'height',\n 'profileIdc',\n 'levelIdc',\n 'profileCompatibility'\n];\n\nvar ONE_SECOND_IN_TS = 90000; // 90kHz clock\n\n// object types\nvar VideoSegmentStream, AudioSegmentStream, Transmuxer, CoalesceStream;\n\n// Helper functions\nvar\n createDefaultSample,\n isLikelyAacData,\n collectDtsInfo,\n clearDtsInfo,\n calculateTrackBaseMediaDecodeTime,\n arrayEquals,\n sumFrameByteLengths;\n\n/**\n * Default sample object\n * see ISO/IEC 14496-12:2012, section 8.6.4.3\n */\ncreateDefaultSample = function() {\n return {\n size: 0,\n flags: {\n isLeading: 0,\n dependsOn: 1,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradationPriority: 0\n }\n };\n};\n\nisLikelyAacData = function(data) {\n if ((data[0] === 'I'.charCodeAt(0)) &&\n (data[1] === 'D'.charCodeAt(0)) &&\n (data[2] === '3'.charCodeAt(0))) {\n return true;\n }\n return false;\n};\n\n/**\n * Compare two arrays (even typed) for same-ness\n */\narrayEquals = function(a, b) {\n var\n i;\n\n if (a.length !== b.length) {\n return false;\n }\n\n // compare the value of each element in the array\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Sum the `byteLength` properties of the data in each AAC frame\n */\nsumFrameByteLengths = function(array) {\n var\n i,\n currentObj,\n sum = 0;\n\n // sum the byteLength's all each nal unit in the frame\n for (i = 0; i < array.length; i++) {\n currentObj = array[i];\n sum += currentObj.data.byteLength;\n }\n\n return sum;\n};\n\n/**\n * Constructs a single-track, ISO BMFF media segment from AAC data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n */\nAudioSegmentStream = function(track) {\n var\n adtsFrames = [],\n sequenceNumber = 0,\n earliestAllowedDts = 0,\n audioAppendStartTs = 0,\n videoBaseMediaDecodeTime = Infinity;\n\n AudioSegmentStream.prototype.init.call(this);\n\n this.push = function(data) {\n collectDtsInfo(track, data);\n\n if (track) {\n AUDIO_PROPERTIES.forEach(function(prop) {\n track[prop] = data[prop];\n });\n }\n\n // buffer audio data until end() is called\n adtsFrames.push(data);\n };\n\n this.setEarliestDts = function(earliestDts) {\n earliestAllowedDts = earliestDts - track.timelineStartInfo.baseMediaDecodeTime;\n };\n\n this.setVideoBaseMediaDecodeTime = function(baseMediaDecodeTime) {\n videoBaseMediaDecodeTime = baseMediaDecodeTime;\n };\n\n this.setAudioAppendStart = function(timestamp) {\n audioAppendStartTs = timestamp;\n };\n\n this.flush = function() {\n var\n frames,\n moof,\n mdat,\n boxes;\n\n // return early if no audio data has been observed\n if (adtsFrames.length === 0) {\n this.trigger('done', 'AudioSegmentStream');\n return;\n }\n\n frames = this.trimAdtsFramesByEarliestDts_(adtsFrames);\n track.baseMediaDecodeTime = calculateTrackBaseMediaDecodeTime(track);\n\n this.prefixWithSilence_(track, frames);\n\n // we have to build the index from byte locations to\n // samples (that is, adts frames) in the audio data\n track.samples = this.generateSampleTable_(frames);\n\n // concatenate the audio data to constuct the mdat\n mdat = mp4.mdat(this.concatenateFrameData_(frames));\n\n adtsFrames = [];\n\n moof = mp4.moof(sequenceNumber, [track]);\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength);\n\n // bump the sequence number for next time\n sequenceNumber++;\n\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n\n clearDtsInfo(track);\n\n this.trigger('data', {track: track, boxes: boxes});\n this.trigger('done', 'AudioSegmentStream');\n };\n\n // Possibly pad (prefix) the audio track with silence if appending this track\n // would lead to the introduction of a gap in the audio buffer\n this.prefixWithSilence_ = function(track, frames) {\n var\n baseMediaDecodeTimeTs,\n frameDuration = 0,\n audioGapDuration = 0,\n audioFillFrameCount = 0,\n audioFillDuration = 0,\n silentFrame,\n i;\n\n if (!frames.length) {\n return;\n }\n\n baseMediaDecodeTimeTs = clock.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate);\n // determine frame clock duration based on sample rate, round up to avoid overfills\n frameDuration = Math.ceil(ONE_SECOND_IN_TS / (track.samplerate / 1024));\n\n if (audioAppendStartTs && videoBaseMediaDecodeTime) {\n // insert the shortest possible amount (audio gap or audio to video gap)\n audioGapDuration =\n baseMediaDecodeTimeTs - Math.max(audioAppendStartTs, videoBaseMediaDecodeTime);\n // number of full frames in the audio gap\n audioFillFrameCount = Math.floor(audioGapDuration / frameDuration);\n audioFillDuration = audioFillFrameCount * frameDuration;\n }\n\n // don't attempt to fill gaps smaller than a single frame or larger\n // than a half second\n if (audioFillFrameCount < 1 || audioFillDuration > ONE_SECOND_IN_TS / 2) {\n return;\n }\n\n silentFrame = coneOfSilence[track.samplerate];\n\n if (!silentFrame) {\n // we don't have a silent frame pregenerated for the sample rate, so use a frame\n // from the content instead\n silentFrame = frames[0].data;\n }\n\n for (i = 0; i < audioFillFrameCount; i++) {\n frames.splice(i, 0, {\n data: silentFrame\n });\n }\n\n track.baseMediaDecodeTime -=\n Math.floor(clock.videoTsToAudioTs(audioFillDuration, track.samplerate));\n };\n\n // If the audio segment extends before the earliest allowed dts\n // value, remove AAC frames until starts at or after the earliest\n // allowed DTS so that we don't end up with a negative baseMedia-\n // DecodeTime for the audio track\n this.trimAdtsFramesByEarliestDts_ = function(adtsFrames) {\n if (track.minSegmentDts >= earliestAllowedDts) {\n return adtsFrames;\n }\n\n // We will need to recalculate the earliest segment Dts\n track.minSegmentDts = Infinity;\n\n return adtsFrames.filter(function(currentFrame) {\n // If this is an allowed frame, keep it and record it's Dts\n if (currentFrame.dts >= earliestAllowedDts) {\n track.minSegmentDts = Math.min(track.minSegmentDts, currentFrame.dts);\n track.minSegmentPts = track.minSegmentDts;\n return true;\n }\n // Otherwise, discard it\n return false;\n });\n };\n\n // generate the track's raw mdat data from an array of frames\n this.generateSampleTable_ = function(frames) {\n var\n i,\n currentFrame,\n samples = [];\n\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n samples.push({\n size: currentFrame.data.byteLength,\n duration: 1024 // For AAC audio, all samples contain 1024 samples\n });\n }\n return samples;\n };\n\n // generate the track's sample table from an array of frames\n this.concatenateFrameData_ = function(frames) {\n var\n i,\n currentFrame,\n dataOffset = 0,\n data = new Uint8Array(sumFrameByteLengths(frames));\n\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n\n data.set(currentFrame.data, dataOffset);\n dataOffset += currentFrame.data.byteLength;\n }\n return data;\n };\n};\n\nAudioSegmentStream.prototype = new Stream();\n\n/**\n * Constructs a single-track, ISO BMFF media segment from H264 data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.alignGopsAtEnd {boolean} If true, start from the end of the\n * gopsToAlignWith list when attempting to align gop pts\n */\nVideoSegmentStream = function(track, options) {\n var\n sequenceNumber = 0,\n nalUnits = [],\n gopsToAlignWith = [],\n config,\n pps;\n\n options = options || {};\n\n VideoSegmentStream.prototype.init.call(this);\n\n delete track.minPTS;\n\n this.gopCache_ = [];\n\n this.push = function(nalUnit) {\n collectDtsInfo(track, nalUnit);\n\n // record the track config\n if (nalUnit.nalUnitType === 'seq_parameter_set_rbsp' && !config) {\n config = nalUnit.config;\n track.sps = [nalUnit.data];\n\n VIDEO_PROPERTIES.forEach(function(prop) {\n track[prop] = config[prop];\n }, this);\n }\n\n if (nalUnit.nalUnitType === 'pic_parameter_set_rbsp' &&\n !pps) {\n pps = nalUnit.data;\n track.pps = [nalUnit.data];\n }\n\n // buffer video until flush() is called\n nalUnits.push(nalUnit);\n };\n\n this.flush = function() {\n var\n frames,\n gopForFusion,\n gops,\n moof,\n mdat,\n boxes;\n\n // Throw away nalUnits at the start of the byte stream until\n // we find the first AUD\n while (nalUnits.length) {\n if (nalUnits[0].nalUnitType === 'access_unit_delimiter_rbsp') {\n break;\n }\n nalUnits.shift();\n }\n\n // Return early if no video data has been observed\n if (nalUnits.length === 0) {\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n }\n\n // Organize the raw nal-units into arrays that represent\n // higher-level constructs such as frames and gops\n // (group-of-pictures)\n frames = this.groupNalsIntoFrames_(nalUnits);\n gops = this.groupFramesIntoGops_(frames);\n\n // If the first frame of this fragment is not a keyframe we have\n // a problem since MSE (on Chrome) requires a leading keyframe.\n //\n // We have two approaches to repairing this situation:\n // 1) GOP-FUSION:\n // This is where we keep track of the GOPS (group-of-pictures)\n // from previous fragments and attempt to find one that we can\n // prepend to the current fragment in order to create a valid\n // fragment.\n // 2) KEYFRAME-PULLING:\n // Here we search for the first keyframe in the fragment and\n // throw away all the frames between the start of the fragment\n // and that keyframe. We then extend the duration and pull the\n // PTS of the keyframe forward so that it covers the time range\n // of the frames that were disposed of.\n //\n // #1 is far prefereable over #2 which can cause \"stuttering\" but\n // requires more things to be just right.\n if (!gops[0][0].keyFrame) {\n // Search for a gop for fusion from our gopCache\n gopForFusion = this.getGopForFusion_(nalUnits[0], track);\n\n if (gopForFusion) {\n gops.unshift(gopForFusion);\n // Adjust Gops' metadata to account for the inclusion of the\n // new gop at the beginning\n gops.byteLength += gopForFusion.byteLength;\n gops.nalCount += gopForFusion.nalCount;\n gops.pts = gopForFusion.pts;\n gops.dts = gopForFusion.dts;\n gops.duration += gopForFusion.duration;\n } else {\n // If we didn't find a candidate gop fall back to keyrame-pulling\n gops = this.extendFirstKeyFrame_(gops);\n }\n }\n\n // Trim gops to align with gopsToAlignWith\n if (gopsToAlignWith.length) {\n var alignedGops;\n\n if (options.alignGopsAtEnd) {\n alignedGops = this.alignGopsAtEnd_(gops);\n } else {\n alignedGops = this.alignGopsAtStart_(gops);\n }\n\n if (!alignedGops) {\n // save all the nals in the last GOP into the gop cache\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n });\n\n // Keep a maximum of 6 GOPs in the cache\n this.gopCache_.length = Math.min(6, this.gopCache_.length);\n\n // Clear nalUnits\n nalUnits = [];\n\n // return early no gops can be aligned with desired gopsToAlignWith\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n }\n\n // Some gops were trimmed. clear dts info so minSegmentDts and pts are correct\n // when recalculated before sending off to CoalesceStream\n clearDtsInfo(track);\n\n gops = alignedGops;\n }\n\n collectDtsInfo(track, gops);\n\n // First, we have to build the index from byte locations to\n // samples (that is, frames) in the video data\n track.samples = this.generateSampleTable_(gops);\n\n // Concatenate the video data and construct the mdat\n mdat = mp4.mdat(this.concatenateNalData_(gops));\n\n track.baseMediaDecodeTime = calculateTrackBaseMediaDecodeTime(track);\n\n this.trigger('processedGopsInfo', gops.map(function(gop) {\n return {\n pts: gop.pts,\n dts: gop.dts,\n byteLength: gop.byteLength\n };\n }));\n\n // save all the nals in the last GOP into the gop cache\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n });\n\n // Keep a maximum of 6 GOPs in the cache\n this.gopCache_.length = Math.min(6, this.gopCache_.length);\n\n // Clear nalUnits\n nalUnits = [];\n\n this.trigger('baseMediaDecodeTime', track.baseMediaDecodeTime);\n this.trigger('timelineStartInfo', track.timelineStartInfo);\n\n moof = mp4.moof(sequenceNumber, [track]);\n\n // it would be great to allocate this array up front instead of\n // throwing away hundreds of media segment fragments\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength);\n\n // Bump the sequence number for next time\n sequenceNumber++;\n\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n\n this.trigger('data', {track: track, boxes: boxes});\n\n this.resetStream_();\n\n // Continue with the flush process now\n this.trigger('done', 'VideoSegmentStream');\n };\n\n this.resetStream_ = function() {\n clearDtsInfo(track);\n\n // reset config and pps because they may differ across segments\n // for instance, when we are rendition switching\n config = undefined;\n pps = undefined;\n };\n\n // Search for a candidate Gop for gop-fusion from the gop cache and\n // return it or return null if no good candidate was found\n this.getGopForFusion_ = function(nalUnit) {\n var\n halfSecond = 45000, // Half-a-second in a 90khz clock\n allowableOverlap = 10000, // About 3 frames @ 30fps\n nearestDistance = Infinity,\n dtsDistance,\n nearestGopObj,\n currentGop,\n currentGopObj,\n i;\n\n // Search for the GOP nearest to the beginning of this nal unit\n for (i = 0; i < this.gopCache_.length; i++) {\n currentGopObj = this.gopCache_[i];\n currentGop = currentGopObj.gop;\n\n // Reject Gops with different SPS or PPS\n if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) ||\n !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) {\n continue;\n }\n\n // Reject Gops that would require a negative baseMediaDecodeTime\n if (currentGop.dts < track.timelineStartInfo.dts) {\n continue;\n }\n\n // The distance between the end of the gop and the start of the nalUnit\n dtsDistance = (nalUnit.dts - currentGop.dts) - currentGop.duration;\n\n // Only consider GOPS that start before the nal unit and end within\n // a half-second of the nal unit\n if (dtsDistance >= -allowableOverlap &&\n dtsDistance <= halfSecond) {\n\n // Always use the closest GOP we found if there is more than\n // one candidate\n if (!nearestGopObj ||\n nearestDistance > dtsDistance) {\n nearestGopObj = currentGopObj;\n nearestDistance = dtsDistance;\n }\n }\n }\n\n if (nearestGopObj) {\n return nearestGopObj.gop;\n }\n return null;\n };\n\n this.extendFirstKeyFrame_ = function(gops) {\n var currentGop;\n\n if (!gops[0][0].keyFrame && gops.length > 1) {\n // Remove the first GOP\n currentGop = gops.shift();\n\n gops.byteLength -= currentGop.byteLength;\n gops.nalCount -= currentGop.nalCount;\n\n // Extend the first frame of what is now the\n // first gop to cover the time period of the\n // frames we just removed\n gops[0][0].dts = currentGop.dts;\n gops[0][0].pts = currentGop.pts;\n gops[0][0].duration += currentGop.duration;\n }\n\n return gops;\n };\n\n // Convert an array of nal units into an array of frames with each frame being\n // composed of the nal units that make up that frame\n // Also keep track of cummulative data about the frame from the nal units such\n // as the frame duration, starting pts, etc.\n this.groupNalsIntoFrames_ = function(nalUnits) {\n var\n i,\n currentNal,\n currentFrame = [],\n frames = [];\n\n currentFrame.byteLength = 0;\n\n for (i = 0; i < nalUnits.length; i++) {\n currentNal = nalUnits[i];\n\n // Split on 'aud'-type nal units\n if (currentNal.nalUnitType === 'access_unit_delimiter_rbsp') {\n // Since the very first nal unit is expected to be an AUD\n // only push to the frames array when currentFrame is not empty\n if (currentFrame.length) {\n currentFrame.duration = currentNal.dts - currentFrame.dts;\n frames.push(currentFrame);\n }\n currentFrame = [currentNal];\n currentFrame.byteLength = currentNal.data.byteLength;\n currentFrame.pts = currentNal.pts;\n currentFrame.dts = currentNal.dts;\n } else {\n // Specifically flag key frames for ease of use later\n if (currentNal.nalUnitType === 'slice_layer_without_partitioning_rbsp_idr') {\n currentFrame.keyFrame = true;\n }\n currentFrame.duration = currentNal.dts - currentFrame.dts;\n currentFrame.byteLength += currentNal.data.byteLength;\n currentFrame.push(currentNal);\n }\n }\n\n // For the last frame, use the duration of the previous frame if we\n // have nothing better to go on\n if (frames.length &&\n (!currentFrame.duration ||\n currentFrame.duration <= 0)) {\n currentFrame.duration = frames[frames.length - 1].duration;\n }\n\n // Push the final frame\n frames.push(currentFrame);\n return frames;\n };\n\n // Convert an array of frames into an array of Gop with each Gop being composed\n // of the frames that make up that Gop\n // Also keep track of cummulative data about the Gop from the frames such as the\n // Gop duration, starting pts, etc.\n this.groupFramesIntoGops_ = function(frames) {\n var\n i,\n currentFrame,\n currentGop = [],\n gops = [];\n\n // We must pre-set some of the values on the Gop since we\n // keep running totals of these values\n currentGop.byteLength = 0;\n currentGop.nalCount = 0;\n currentGop.duration = 0;\n currentGop.pts = frames[0].pts;\n currentGop.dts = frames[0].dts;\n\n // store some metadata about all the Gops\n gops.byteLength = 0;\n gops.nalCount = 0;\n gops.duration = 0;\n gops.pts = frames[0].pts;\n gops.dts = frames[0].dts;\n\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n\n if (currentFrame.keyFrame) {\n // Since the very first frame is expected to be an keyframe\n // only push to the gops array when currentGop is not empty\n if (currentGop.length) {\n gops.push(currentGop);\n gops.byteLength += currentGop.byteLength;\n gops.nalCount += currentGop.nalCount;\n gops.duration += currentGop.duration;\n }\n\n currentGop = [currentFrame];\n currentGop.nalCount = currentFrame.length;\n currentGop.byteLength = currentFrame.byteLength;\n currentGop.pts = currentFrame.pts;\n currentGop.dts = currentFrame.dts;\n currentGop.duration = currentFrame.duration;\n } else {\n currentGop.duration += currentFrame.duration;\n currentGop.nalCount += currentFrame.length;\n currentGop.byteLength += currentFrame.byteLength;\n currentGop.push(currentFrame);\n }\n }\n\n if (gops.length && currentGop.duration <= 0) {\n currentGop.duration = gops[gops.length - 1].duration;\n }\n gops.byteLength += currentGop.byteLength;\n gops.nalCount += currentGop.nalCount;\n gops.duration += currentGop.duration;\n\n // push the final Gop\n gops.push(currentGop);\n return gops;\n };\n\n // generate the track's sample table from an array of gops\n this.generateSampleTable_ = function(gops, baseDataOffset) {\n var\n h, i,\n sample,\n currentGop,\n currentFrame,\n dataOffset = baseDataOffset || 0,\n samples = [];\n\n for (h = 0; h < gops.length; h++) {\n currentGop = gops[h];\n\n for (i = 0; i < currentGop.length; i++) {\n currentFrame = currentGop[i];\n\n sample = createDefaultSample();\n\n sample.dataOffset = dataOffset;\n sample.compositionTimeOffset = currentFrame.pts - currentFrame.dts;\n sample.duration = currentFrame.duration;\n sample.size = 4 * currentFrame.length; // Space for nal unit size\n sample.size += currentFrame.byteLength;\n\n if (currentFrame.keyFrame) {\n sample.flags.dependsOn = 2;\n }\n\n dataOffset += sample.size;\n\n samples.push(sample);\n }\n }\n return samples;\n };\n\n // generate the track's raw mdat data from an array of gops\n this.concatenateNalData_ = function(gops) {\n var\n h, i, j,\n currentGop,\n currentFrame,\n currentNal,\n dataOffset = 0,\n nalsByteLength = gops.byteLength,\n numberOfNals = gops.nalCount,\n totalByteLength = nalsByteLength + 4 * numberOfNals,\n data = new Uint8Array(totalByteLength),\n view = new DataView(data.buffer);\n\n // For each Gop..\n for (h = 0; h < gops.length; h++) {\n currentGop = gops[h];\n\n // For each Frame..\n for (i = 0; i < currentGop.length; i++) {\n currentFrame = currentGop[i];\n\n // For each NAL..\n for (j = 0; j < currentFrame.length; j++) {\n currentNal = currentFrame[j];\n\n view.setUint32(dataOffset, currentNal.data.byteLength);\n dataOffset += 4;\n data.set(currentNal.data, dataOffset);\n dataOffset += currentNal.data.byteLength;\n }\n }\n }\n return data;\n };\n\n // trim gop list to the first gop found that has a matching pts with a gop in the list\n // of gopsToAlignWith starting from the START of the list\n this.alignGopsAtStart_ = function(gops) {\n var alignIndex, gopIndex, align, gop, byteLength, nalCount, duration, alignedGops;\n\n byteLength = gops.byteLength;\n nalCount = gops.nalCount;\n duration = gops.duration;\n alignIndex = gopIndex = 0;\n\n while (alignIndex < gopsToAlignWith.length && gopIndex < gops.length) {\n align = gopsToAlignWith[alignIndex];\n gop = gops[gopIndex];\n\n if (align.pts === gop.pts) {\n break;\n }\n\n if (gop.pts > align.pts) {\n // this current gop starts after the current gop we want to align on, so increment\n // align index\n alignIndex++;\n continue;\n }\n\n // current gop starts before the current gop we want to align on. so increment gop\n // index\n gopIndex++;\n byteLength -= gop.byteLength;\n nalCount -= gop.nalCount;\n duration -= gop.duration;\n }\n\n if (gopIndex === 0) {\n // no gops to trim\n return gops;\n }\n\n if (gopIndex === gops.length) {\n // all gops trimmed, skip appending all gops\n return null;\n }\n\n alignedGops = gops.slice(gopIndex);\n alignedGops.byteLength = byteLength;\n alignedGops.duration = duration;\n alignedGops.nalCount = nalCount;\n alignedGops.pts = alignedGops[0].pts;\n alignedGops.dts = alignedGops[0].dts;\n\n return alignedGops;\n };\n\n // trim gop list to the first gop found that has a matching pts with a gop in the list\n // of gopsToAlignWith starting from the END of the list\n this.alignGopsAtEnd_ = function(gops) {\n var alignIndex, gopIndex, align, gop, alignEndIndex, matchFound;\n\n alignIndex = gopsToAlignWith.length - 1;\n gopIndex = gops.length - 1;\n alignEndIndex = null;\n matchFound = false;\n\n while (alignIndex >= 0 && gopIndex >= 0) {\n align = gopsToAlignWith[alignIndex];\n gop = gops[gopIndex];\n\n if (align.pts === gop.pts) {\n matchFound = true;\n break;\n }\n\n if (align.pts > gop.pts) {\n alignIndex--;\n continue;\n }\n\n if (alignIndex === gopsToAlignWith.length - 1) {\n // gop.pts is greater than the last alignment candidate. If no match is found\n // by the end of this loop, we still want to append gops that come after this\n // point\n alignEndIndex = gopIndex;\n }\n\n gopIndex--;\n }\n\n if (!matchFound && alignEndIndex === null) {\n return null;\n }\n\n var trimIndex;\n\n if (matchFound) {\n trimIndex = gopIndex;\n } else {\n trimIndex = alignEndIndex;\n }\n\n if (trimIndex === 0) {\n return gops;\n }\n\n var alignedGops = gops.slice(trimIndex);\n var metadata = alignedGops.reduce(function(total, gop) {\n total.byteLength += gop.byteLength;\n total.duration += gop.duration;\n total.nalCount += gop.nalCount;\n return total;\n }, { byteLength: 0, duration: 0, nalCount: 0 });\n\n alignedGops.byteLength = metadata.byteLength;\n alignedGops.duration = metadata.duration;\n alignedGops.nalCount = metadata.nalCount;\n alignedGops.pts = alignedGops[0].pts;\n alignedGops.dts = alignedGops[0].dts;\n\n return alignedGops;\n };\n\n this.alignGopsWith = function(newGopsToAlignWith) {\n gopsToAlignWith = newGopsToAlignWith;\n };\n};\n\nVideoSegmentStream.prototype = new Stream();\n\n/**\n * Store information about the start and end of the track and the\n * duration for each frame/sample we process in order to calculate\n * the baseMediaDecodeTime\n */\ncollectDtsInfo = function(track, data) {\n if (typeof data.pts === 'number') {\n if (track.timelineStartInfo.pts === undefined) {\n track.timelineStartInfo.pts = data.pts;\n }\n\n if (track.minSegmentPts === undefined) {\n track.minSegmentPts = data.pts;\n } else {\n track.minSegmentPts = Math.min(track.minSegmentPts, data.pts);\n }\n\n if (track.maxSegmentPts === undefined) {\n track.maxSegmentPts = data.pts;\n } else {\n track.maxSegmentPts = Math.max(track.maxSegmentPts, data.pts);\n }\n }\n\n if (typeof data.dts === 'number') {\n if (track.timelineStartInfo.dts === undefined) {\n track.timelineStartInfo.dts = data.dts;\n }\n\n if (track.minSegmentDts === undefined) {\n track.minSegmentDts = data.dts;\n } else {\n track.minSegmentDts = Math.min(track.minSegmentDts, data.dts);\n }\n\n if (track.maxSegmentDts === undefined) {\n track.maxSegmentDts = data.dts;\n } else {\n track.maxSegmentDts = Math.max(track.maxSegmentDts, data.dts);\n }\n }\n};\n\n/**\n * Clear values used to calculate the baseMediaDecodeTime between\n * tracks\n */\nclearDtsInfo = function(track) {\n delete track.minSegmentDts;\n delete track.maxSegmentDts;\n delete track.minSegmentPts;\n delete track.maxSegmentPts;\n};\n\n/**\n * Calculate the track's baseMediaDecodeTime based on the earliest\n * DTS the transmuxer has ever seen and the minimum DTS for the\n * current track\n */\ncalculateTrackBaseMediaDecodeTime = function(track) {\n var\n baseMediaDecodeTime,\n scale,\n // Calculate the distance, in time, that this segment starts from the start\n // of the timeline (earliest time seen since the transmuxer initialized)\n timeSinceStartOfTimeline = track.minSegmentDts - track.timelineStartInfo.dts;\n\n // track.timelineStartInfo.baseMediaDecodeTime is the location, in time, where\n // we want the start of the first segment to be placed\n baseMediaDecodeTime = track.timelineStartInfo.baseMediaDecodeTime;\n\n // Add to that the distance this segment is from the very first\n baseMediaDecodeTime += timeSinceStartOfTimeline;\n\n // baseMediaDecodeTime must not become negative\n baseMediaDecodeTime = Math.max(0, baseMediaDecodeTime);\n\n if (track.type === 'audio') {\n // Audio has a different clock equal to the sampling_rate so we need to\n // scale the PTS values into the clock rate of the track\n scale = track.samplerate / ONE_SECOND_IN_TS;\n baseMediaDecodeTime *= scale;\n baseMediaDecodeTime = Math.floor(baseMediaDecodeTime);\n }\n\n return baseMediaDecodeTime;\n};\n\n/**\n * A Stream that can combine multiple streams (ie. audio & video)\n * into a single output segment for MSE. Also supports audio-only\n * and video-only streams.\n */\nCoalesceStream = function(options, metadataStream) {\n // Number of Tracks per output segment\n // If greater than 1, we combine multiple\n // tracks into a single segment\n this.numberOfTracks = 0;\n this.metadataStream = metadataStream;\n\n if (typeof options.remux !== 'undefined') {\n this.remuxTracks = !!options.remux;\n } else {\n this.remuxTracks = true;\n }\n\n this.pendingTracks = [];\n this.videoTrack = null;\n this.pendingBoxes = [];\n this.pendingCaptions = [];\n this.pendingMetadata = [];\n this.pendingBytes = 0;\n this.emittedTracks = 0;\n\n CoalesceStream.prototype.init.call(this);\n\n // Take output from multiple\n this.push = function(output) {\n // buffer incoming captions until the associated video segment\n // finishes\n if (output.text) {\n return this.pendingCaptions.push(output);\n }\n // buffer incoming id3 tags until the final flush\n if (output.frames) {\n return this.pendingMetadata.push(output);\n }\n\n // Add this track to the list of pending tracks and store\n // important information required for the construction of\n // the final segment\n this.pendingTracks.push(output.track);\n this.pendingBoxes.push(output.boxes);\n this.pendingBytes += output.boxes.byteLength;\n\n if (output.track.type === 'video') {\n this.videoTrack = output.track;\n }\n if (output.track.type === 'audio') {\n this.audioTrack = output.track;\n }\n };\n};\n\nCoalesceStream.prototype = new Stream();\nCoalesceStream.prototype.flush = function(flushSource) {\n var\n offset = 0,\n event = {\n captions: [],\n captionStreams: {},\n metadata: [],\n info: {}\n },\n caption,\n id3,\n initSegment,\n timelineStartPts = 0,\n i;\n\n if (this.pendingTracks.length < this.numberOfTracks) {\n if (flushSource !== 'VideoSegmentStream' &&\n flushSource !== 'AudioSegmentStream') {\n // Return because we haven't received a flush from a data-generating\n // portion of the segment (meaning that we have only recieved meta-data\n // or captions.)\n return;\n } else if (this.remuxTracks) {\n // Return until we have enough tracks from the pipeline to remux (if we\n // are remuxing audio and video into a single MP4)\n return;\n } else if (this.pendingTracks.length === 0) {\n // In the case where we receive a flush without any data having been\n // received we consider it an emitted track for the purposes of coalescing\n // `done` events.\n // We do this for the case where there is an audio and video track in the\n // segment but no audio data. (seen in several playlists with alternate\n // audio tracks and no audio present in the main TS segments.)\n this.emittedTracks++;\n\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n return;\n }\n }\n\n if (this.videoTrack) {\n timelineStartPts = this.videoTrack.timelineStartInfo.pts;\n VIDEO_PROPERTIES.forEach(function(prop) {\n event.info[prop] = this.videoTrack[prop];\n }, this);\n } else if (this.audioTrack) {\n timelineStartPts = this.audioTrack.timelineStartInfo.pts;\n AUDIO_PROPERTIES.forEach(function(prop) {\n event.info[prop] = this.audioTrack[prop];\n }, this);\n }\n\n if (this.pendingTracks.length === 1) {\n event.type = this.pendingTracks[0].type;\n } else {\n event.type = 'combined';\n }\n\n this.emittedTracks += this.pendingTracks.length;\n\n initSegment = mp4.initSegment(this.pendingTracks);\n\n // Create a new typed array to hold the init segment\n event.initSegment = new Uint8Array(initSegment.byteLength);\n\n // Create an init segment containing a moov\n // and track definitions\n event.initSegment.set(initSegment);\n\n // Create a new typed array to hold the moof+mdats\n event.data = new Uint8Array(this.pendingBytes);\n\n // Append each moof+mdat (one per track) together\n for (i = 0; i < this.pendingBoxes.length; i++) {\n event.data.set(this.pendingBoxes[i], offset);\n offset += this.pendingBoxes[i].byteLength;\n }\n\n // Translate caption PTS times into second offsets into the\n // video timeline for the segment, and add track info\n for (i = 0; i < this.pendingCaptions.length; i++) {\n caption = this.pendingCaptions[i];\n caption.startTime = (caption.startPts - timelineStartPts);\n caption.startTime /= 90e3;\n caption.endTime = (caption.endPts - timelineStartPts);\n caption.endTime /= 90e3;\n event.captionStreams[caption.stream] = true;\n event.captions.push(caption);\n }\n\n // Translate ID3 frame PTS times into second offsets into the\n // video timeline for the segment\n for (i = 0; i < this.pendingMetadata.length; i++) {\n id3 = this.pendingMetadata[i];\n id3.cueTime = (id3.pts - timelineStartPts);\n id3.cueTime /= 90e3;\n event.metadata.push(id3);\n }\n // We add this to every single emitted segment even though we only need\n // it for the first\n event.metadata.dispatchType = this.metadataStream.dispatchType;\n\n // Reset stream state\n this.pendingTracks.length = 0;\n this.videoTrack = null;\n this.pendingBoxes.length = 0;\n this.pendingCaptions.length = 0;\n this.pendingBytes = 0;\n this.pendingMetadata.length = 0;\n\n // Emit the built segment\n this.trigger('data', event);\n\n // Only emit `done` if all tracks have been flushed and emitted\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n};\n/**\n * A Stream that expects MP2T binary data as input and produces\n * corresponding media segments, suitable for use with Media Source\n * Extension (MSE) implementations that support the ISO BMFF byte\n * stream format, like Chrome.\n */\nTransmuxer = function(options) {\n var\n self = this,\n hasFlushed = true,\n videoTrack,\n audioTrack;\n\n Transmuxer.prototype.init.call(this);\n\n options = options || {};\n this.baseMediaDecodeTime = options.baseMediaDecodeTime || 0;\n this.transmuxPipeline_ = {};\n\n this.setupAacPipeline = function() {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n\n pipeline.type = 'aac';\n pipeline.metadataStream = new m2ts.MetadataStream();\n\n // set up the parsing pipeline\n pipeline.aacStream = new AacStream();\n pipeline.audioTimestampRolloverStream = new m2ts.TimestampRolloverStream('audio');\n pipeline.timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream('timed-metadata');\n pipeline.adtsStream = new AdtsStream();\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.aacStream;\n\n pipeline.aacStream\n .pipe(pipeline.audioTimestampRolloverStream)\n .pipe(pipeline.adtsStream);\n pipeline.aacStream\n .pipe(pipeline.timedMetadataTimestampRolloverStream)\n .pipe(pipeline.metadataStream)\n .pipe(pipeline.coalesceStream);\n\n pipeline.metadataStream.on('timestamp', function(frame) {\n pipeline.aacStream.setTimestamp(frame.timeStamp);\n });\n\n pipeline.aacStream.on('data', function(data) {\n if (data.type === 'timed-metadata' && !pipeline.audioSegmentStream) {\n audioTrack = audioTrack || {\n timelineStartInfo: {\n baseMediaDecodeTime: self.baseMediaDecodeTime\n },\n codec: 'adts',\n type: 'audio'\n };\n // hook up the audio segment stream to the first track with aac data\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack);\n // Set up the final part of the audio pipeline\n pipeline.adtsStream\n .pipe(pipeline.audioSegmentStream)\n .pipe(pipeline.coalesceStream);\n }\n });\n\n // Re-emit any data coming from the coalesce stream to the outside world\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data'));\n // Let the consumer know we have finished flushing the entire pipeline\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n };\n\n this.setupTsPipeline = function() {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n\n pipeline.type = 'ts';\n pipeline.metadataStream = new m2ts.MetadataStream();\n\n // set up the parsing pipeline\n pipeline.packetStream = new m2ts.TransportPacketStream();\n pipeline.parseStream = new m2ts.TransportParseStream();\n pipeline.elementaryStream = new m2ts.ElementaryStream();\n pipeline.videoTimestampRolloverStream = new m2ts.TimestampRolloverStream('video');\n pipeline.audioTimestampRolloverStream = new m2ts.TimestampRolloverStream('audio');\n pipeline.timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream('timed-metadata');\n pipeline.adtsStream = new AdtsStream();\n pipeline.h264Stream = new H264Stream();\n pipeline.captionStream = new m2ts.CaptionStream();\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.packetStream;\n\n // disassemble MPEG2-TS packets into elementary streams\n pipeline.packetStream\n .pipe(pipeline.parseStream)\n .pipe(pipeline.elementaryStream);\n\n // !!THIS ORDER IS IMPORTANT!!\n // demux the streams\n pipeline.elementaryStream\n .pipe(pipeline.videoTimestampRolloverStream)\n .pipe(pipeline.h264Stream);\n pipeline.elementaryStream\n .pipe(pipeline.audioTimestampRolloverStream)\n .pipe(pipeline.adtsStream);\n\n pipeline.elementaryStream\n .pipe(pipeline.timedMetadataTimestampRolloverStream)\n .pipe(pipeline.metadataStream)\n .pipe(pipeline.coalesceStream);\n\n // Hook up CEA-608/708 caption stream\n pipeline.h264Stream.pipe(pipeline.captionStream)\n .pipe(pipeline.coalesceStream);\n\n pipeline.elementaryStream.on('data', function(data) {\n var i;\n\n if (data.type === 'metadata') {\n i = data.tracks.length;\n\n // scan the tracks listed in the metadata\n while (i--) {\n if (!videoTrack && data.tracks[i].type === 'video') {\n videoTrack = data.tracks[i];\n videoTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n } else if (!audioTrack && data.tracks[i].type === 'audio') {\n audioTrack = data.tracks[i];\n audioTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n }\n }\n\n // hook up the video segment stream to the first track with h264 data\n if (videoTrack && !pipeline.videoSegmentStream) {\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.videoSegmentStream = new VideoSegmentStream(videoTrack, options);\n\n pipeline.videoSegmentStream.on('timelineStartInfo', function(timelineStartInfo) {\n // When video emits timelineStartInfo data after a flush, we forward that\n // info to the AudioSegmentStream, if it exists, because video timeline\n // data takes precedence.\n if (audioTrack) {\n audioTrack.timelineStartInfo = timelineStartInfo;\n // On the first segment we trim AAC frames that exist before the\n // very earliest DTS we have seen in video because Chrome will\n // interpret any video track with a baseMediaDecodeTime that is\n // non-zero as a gap.\n pipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts);\n }\n });\n\n pipeline.videoSegmentStream.on('processedGopsInfo',\n self.trigger.bind(self, 'gopInfo'));\n\n pipeline.videoSegmentStream.on('baseMediaDecodeTime', function(baseMediaDecodeTime) {\n if (audioTrack) {\n pipeline.audioSegmentStream.setVideoBaseMediaDecodeTime(baseMediaDecodeTime);\n }\n });\n\n // Set up the final part of the video pipeline\n pipeline.h264Stream\n .pipe(pipeline.videoSegmentStream)\n .pipe(pipeline.coalesceStream);\n }\n\n if (audioTrack && !pipeline.audioSegmentStream) {\n // hook up the audio segment stream to the first track with aac data\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack);\n\n // Set up the final part of the audio pipeline\n pipeline.adtsStream\n .pipe(pipeline.audioSegmentStream)\n .pipe(pipeline.coalesceStream);\n }\n }\n });\n\n // Re-emit any data coming from the coalesce stream to the outside world\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data'));\n // Let the consumer know we have finished flushing the entire pipeline\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n };\n\n // hook up the segment streams once track metadata is delivered\n this.setBaseMediaDecodeTime = function(baseMediaDecodeTime) {\n var pipeline = this.transmuxPipeline_;\n\n this.baseMediaDecodeTime = baseMediaDecodeTime;\n if (audioTrack) {\n audioTrack.timelineStartInfo.dts = undefined;\n audioTrack.timelineStartInfo.pts = undefined;\n clearDtsInfo(audioTrack);\n audioTrack.timelineStartInfo.baseMediaDecodeTime = baseMediaDecodeTime;\n if (pipeline.audioTimestampRolloverStream) {\n pipeline.audioTimestampRolloverStream.discontinuity();\n }\n }\n if (videoTrack) {\n if (pipeline.videoSegmentStream) {\n pipeline.videoSegmentStream.gopCache_ = [];\n pipeline.videoTimestampRolloverStream.discontinuity();\n }\n videoTrack.timelineStartInfo.dts = undefined;\n videoTrack.timelineStartInfo.pts = undefined;\n clearDtsInfo(videoTrack);\n pipeline.captionStream.reset();\n videoTrack.timelineStartInfo.baseMediaDecodeTime = baseMediaDecodeTime;\n }\n\n if (pipeline.timedMetadataTimestampRolloverStream) {\n pipeline.timedMetadataTimestampRolloverStream.discontinuity();\n }\n };\n\n this.setAudioAppendStart = function(timestamp) {\n if (audioTrack) {\n this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(timestamp);\n }\n };\n\n this.alignGopsWith = function(gopsToAlignWith) {\n if (videoTrack && this.transmuxPipeline_.videoSegmentStream) {\n this.transmuxPipeline_.videoSegmentStream.alignGopsWith(gopsToAlignWith);\n }\n };\n\n // feed incoming data to the front of the parsing pipeline\n this.push = function(data) {\n if (hasFlushed) {\n var isAac = isLikelyAacData(data);\n\n if (isAac && this.transmuxPipeline_.type !== 'aac') {\n this.setupAacPipeline();\n } else if (!isAac && this.transmuxPipeline_.type !== 'ts') {\n this.setupTsPipeline();\n }\n hasFlushed = false;\n }\n this.transmuxPipeline_.headOfPipeline.push(data);\n };\n\n // flush any buffered data\n this.flush = function() {\n hasFlushed = true;\n // Start at the top of the pipeline and flush all pending work\n this.transmuxPipeline_.headOfPipeline.flush();\n };\n\n // Caption data has to be reset when seeking outside buffered range\n this.resetCaptions = function() {\n if (this.transmuxPipeline_.captionStream) {\n this.transmuxPipeline_.captionStream.reset();\n }\n };\n\n};\nTransmuxer.prototype = new Stream();\n\nmodule.exports = {\n Transmuxer: Transmuxer,\n VideoSegmentStream: VideoSegmentStream,\n AudioSegmentStream: AudioSegmentStream,\n AUDIO_PROPERTIES: AUDIO_PROPERTIES,\n VIDEO_PROPERTIES: VIDEO_PROPERTIES\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _playlistJs = require('./playlist.js');\n\n/**\n * Returns a function that acts as the Enable/disable playlist function.\n *\n * @param {PlaylistLoader} loader - The master playlist loader\n * @param {String} playlistUri - uri of the playlist\n * @param {Function} changePlaylistFn - A function to be called after a\n * playlist's enabled-state has been changed. Will NOT be called if a\n * playlist's enabled-state is unchanged\n * @param {Boolean=} enable - Value to set the playlist enabled-state to\n * or if undefined returns the current enabled-state for the playlist\n * @return {Function} Function for setting/getting enabled\n */\nvar enableFunction = function enableFunction(loader, playlistUri, changePlaylistFn) {\n return function (enable) {\n var playlist = loader.master.playlists[playlistUri];\n var incompatible = (0, _playlistJs.isIncompatible)(playlist);\n var currentlyEnabled = (0, _playlistJs.isEnabled)(playlist);\n\n if (typeof enable === 'undefined') {\n return currentlyEnabled;\n }\n\n if (enable) {\n delete playlist.disabled;\n } else {\n playlist.disabled = true;\n }\n\n if (enable !== currentlyEnabled && !incompatible) {\n // Ensure the outside world knows about our changes\n changePlaylistFn();\n if (enable) {\n loader.trigger('renditionenabled');\n } else {\n loader.trigger('renditiondisabled');\n }\n }\n return enable;\n };\n};\n\n/**\n * The representation object encapsulates the publicly visible information\n * in a media playlist along with a setter/getter-type function (enabled)\n * for changing the enabled-state of a particular playlist entry\n *\n * @class Representation\n */\n\nvar Representation = function Representation(hlsHandler, playlist, id) {\n _classCallCheck(this, Representation);\n\n // Get a reference to a bound version of fastQualityChange_\n var fastChangeFunction = hlsHandler.masterPlaylistController_.fastQualityChange_.bind(hlsHandler.masterPlaylistController_);\n\n // some playlist attributes are optional\n if (playlist.attributes.RESOLUTION) {\n var resolution = playlist.attributes.RESOLUTION;\n\n this.width = resolution.width;\n this.height = resolution.height;\n }\n\n this.bandwidth = playlist.attributes.BANDWIDTH;\n\n // The id is simply the ordinality of the media playlist\n // within the master playlist\n this.id = id;\n\n // Partially-apply the enableFunction to create a playlist-\n // specific variant\n this.enabled = enableFunction(hlsHandler.playlists, playlist.uri, fastChangeFunction);\n}\n\n/**\n * A mixin function that adds the `representations` api to an instance\n * of the HlsHandler class\n * @param {HlsHandler} hlsHandler - An instance of HlsHandler to add the\n * representation API into\n */\n;\n\nvar renditionSelectionMixin = function renditionSelectionMixin(hlsHandler) {\n var playlists = hlsHandler.playlists;\n\n // Add a single API-specific function to the HlsHandler instance\n hlsHandler.representations = function () {\n return playlists.master.playlists.filter(function (media) {\n return !(0, _playlistJs.isIncompatible)(media);\n }).map(function (e, i) {\n return new Representation(hlsHandler, e, e.uri);\n });\n };\n};\n\nexports['default'] = renditionSelectionMixin;\nmodule.exports = exports['default'];","'use strict';\n\nvar Stream = require('../utils/stream.js');\nvar FlvTag = require('./flv-tag.js');\nvar m2ts = require('../m2ts/m2ts.js');\nvar AdtsStream = require('../codecs/adts.js');\nvar H264Stream = require('../codecs/h264').H264Stream;\nvar CoalesceStream = require('./coalesce-stream.js');\nvar TagList = require('./tag-list.js');\n\nvar\n Transmuxer,\n VideoSegmentStream,\n AudioSegmentStream,\n collectTimelineInfo,\n metaDataTag,\n extraDataTag;\n\n/**\n * Store information about the start and end of the tracka and the\n * duration for each frame/sample we process in order to calculate\n * the baseMediaDecodeTime\n */\ncollectTimelineInfo = function(track, data) {\n if (typeof data.pts === 'number') {\n if (track.timelineStartInfo.pts === undefined) {\n track.timelineStartInfo.pts = data.pts;\n } else {\n track.timelineStartInfo.pts =\n Math.min(track.timelineStartInfo.pts, data.pts);\n }\n }\n\n if (typeof data.dts === 'number') {\n if (track.timelineStartInfo.dts === undefined) {\n track.timelineStartInfo.dts = data.dts;\n } else {\n track.timelineStartInfo.dts =\n Math.min(track.timelineStartInfo.dts, data.dts);\n }\n }\n};\n\nmetaDataTag = function(track, pts) {\n var\n tag = new FlvTag(FlvTag.METADATA_TAG); // :FlvTag\n\n tag.dts = pts;\n tag.pts = pts;\n\n tag.writeMetaDataDouble('videocodecid', 7);\n tag.writeMetaDataDouble('width', track.width);\n tag.writeMetaDataDouble('height', track.height);\n\n return tag;\n};\n\nextraDataTag = function(track, pts) {\n var\n i,\n tag = new FlvTag(FlvTag.VIDEO_TAG, true);\n\n tag.dts = pts;\n tag.pts = pts;\n\n tag.writeByte(0x01);// version\n tag.writeByte(track.profileIdc);// profile\n tag.writeByte(track.profileCompatibility);// compatibility\n tag.writeByte(track.levelIdc);// level\n tag.writeByte(0xFC | 0x03); // reserved (6 bits), NULA length size - 1 (2 bits)\n tag.writeByte(0xE0 | 0x01); // reserved (3 bits), num of SPS (5 bits)\n tag.writeShort(track.sps[0].length); // data of SPS\n tag.writeBytes(track.sps[0]); // SPS\n\n tag.writeByte(track.pps.length); // num of PPS (will there ever be more that 1 PPS?)\n for (i = 0; i < track.pps.length; ++i) {\n tag.writeShort(track.pps[i].length); // 2 bytes for length of PPS\n tag.writeBytes(track.pps[i]); // data of PPS\n }\n\n return tag;\n};\n\n/**\n * Constructs a single-track, media segment from AAC data\n * events. The output of this stream can be fed to flash.\n */\nAudioSegmentStream = function(track) {\n var\n adtsFrames = [],\n videoKeyFrames = [],\n oldExtraData;\n\n AudioSegmentStream.prototype.init.call(this);\n\n this.push = function(data) {\n collectTimelineInfo(track, data);\n\n if (track) {\n track.audioobjecttype = data.audioobjecttype;\n track.channelcount = data.channelcount;\n track.samplerate = data.samplerate;\n track.samplingfrequencyindex = data.samplingfrequencyindex;\n track.samplesize = data.samplesize;\n track.extraData = (track.audioobjecttype << 11) |\n (track.samplingfrequencyindex << 7) |\n (track.channelcount << 3);\n }\n\n data.pts = Math.round(data.pts / 90);\n data.dts = Math.round(data.dts / 90);\n\n // buffer audio data until end() is called\n adtsFrames.push(data);\n };\n\n this.flush = function() {\n var currentFrame, adtsFrame, lastMetaPts, tags = new TagList();\n // return early if no audio data has been observed\n if (adtsFrames.length === 0) {\n this.trigger('done', 'AudioSegmentStream');\n return;\n }\n\n lastMetaPts = -Infinity;\n\n while (adtsFrames.length) {\n currentFrame = adtsFrames.shift();\n\n // write out a metadata frame at every video key frame\n if (videoKeyFrames.length && currentFrame.pts >= videoKeyFrames[0]) {\n lastMetaPts = videoKeyFrames.shift();\n this.writeMetaDataTags(tags, lastMetaPts);\n }\n\n // also write out metadata tags every 1 second so that the decoder\n // is re-initialized quickly after seeking into a different\n // audio configuration.\n if (track.extraData !== oldExtraData || currentFrame.pts - lastMetaPts >= 1000) {\n this.writeMetaDataTags(tags, currentFrame.pts);\n oldExtraData = track.extraData;\n lastMetaPts = currentFrame.pts;\n }\n\n adtsFrame = new FlvTag(FlvTag.AUDIO_TAG);\n adtsFrame.pts = currentFrame.pts;\n adtsFrame.dts = currentFrame.dts;\n\n adtsFrame.writeBytes(currentFrame.data);\n\n tags.push(adtsFrame.finalize());\n }\n\n videoKeyFrames.length = 0;\n oldExtraData = null;\n this.trigger('data', {track: track, tags: tags.list});\n\n this.trigger('done', 'AudioSegmentStream');\n };\n\n this.writeMetaDataTags = function(tags, pts) {\n var adtsFrame;\n\n adtsFrame = new FlvTag(FlvTag.METADATA_TAG);\n // For audio, DTS is always the same as PTS. We want to set the DTS\n // however so we can compare with video DTS to determine approximate\n // packet order\n adtsFrame.pts = pts;\n adtsFrame.dts = pts;\n\n // AAC is always 10\n adtsFrame.writeMetaDataDouble('audiocodecid', 10);\n adtsFrame.writeMetaDataBoolean('stereo', track.channelcount === 2);\n adtsFrame.writeMetaDataDouble('audiosamplerate', track.samplerate);\n // Is AAC always 16 bit?\n adtsFrame.writeMetaDataDouble('audiosamplesize', 16);\n\n tags.push(adtsFrame.finalize());\n\n adtsFrame = new FlvTag(FlvTag.AUDIO_TAG, true);\n // For audio, DTS is always the same as PTS. We want to set the DTS\n // however so we can compare with video DTS to determine approximate\n // packet order\n adtsFrame.pts = pts;\n adtsFrame.dts = pts;\n\n adtsFrame.view.setUint16(adtsFrame.position, track.extraData);\n adtsFrame.position += 2;\n adtsFrame.length = Math.max(adtsFrame.length, adtsFrame.position);\n\n tags.push(adtsFrame.finalize());\n };\n\n this.onVideoKeyFrame = function(pts) {\n videoKeyFrames.push(pts);\n };\n};\nAudioSegmentStream.prototype = new Stream();\n\n/**\n * Store FlvTags for the h264 stream\n * @param track {object} track metadata configuration\n */\nVideoSegmentStream = function(track) {\n var\n nalUnits = [],\n config,\n h264Frame;\n VideoSegmentStream.prototype.init.call(this);\n\n this.finishFrame = function(tags, frame) {\n if (!frame) {\n return;\n }\n // Check if keyframe and the length of tags.\n // This makes sure we write metadata on the first frame of a segment.\n if (config && track && track.newMetadata &&\n (frame.keyFrame || tags.length === 0)) {\n // Push extra data on every IDR frame in case we did a stream change + seek\n var metaTag = metaDataTag(config, frame.dts).finalize();\n var extraTag = extraDataTag(track, frame.dts).finalize();\n\n metaTag.metaDataTag = extraTag.metaDataTag = true;\n\n tags.push(metaTag);\n tags.push(extraTag);\n track.newMetadata = false;\n\n this.trigger('keyframe', frame.dts);\n }\n\n frame.endNalUnit();\n tags.push(frame.finalize());\n h264Frame = null;\n };\n\n this.push = function(data) {\n collectTimelineInfo(track, data);\n\n data.pts = Math.round(data.pts / 90);\n data.dts = Math.round(data.dts / 90);\n\n // buffer video until flush() is called\n nalUnits.push(data);\n };\n\n this.flush = function() {\n var\n currentNal,\n tags = new TagList();\n\n // Throw away nalUnits at the start of the byte stream until we find\n // the first AUD\n while (nalUnits.length) {\n if (nalUnits[0].nalUnitType === 'access_unit_delimiter_rbsp') {\n break;\n }\n nalUnits.shift();\n }\n\n // return early if no video data has been observed\n if (nalUnits.length === 0) {\n this.trigger('done', 'VideoSegmentStream');\n return;\n }\n\n while (nalUnits.length) {\n currentNal = nalUnits.shift();\n\n // record the track config\n if (currentNal.nalUnitType === 'seq_parameter_set_rbsp') {\n track.newMetadata = true;\n config = currentNal.config;\n track.width = config.width;\n track.height = config.height;\n track.sps = [currentNal.data];\n track.profileIdc = config.profileIdc;\n track.levelIdc = config.levelIdc;\n track.profileCompatibility = config.profileCompatibility;\n h264Frame.endNalUnit();\n } else if (currentNal.nalUnitType === 'pic_parameter_set_rbsp') {\n track.newMetadata = true;\n track.pps = [currentNal.data];\n h264Frame.endNalUnit();\n } else if (currentNal.nalUnitType === 'access_unit_delimiter_rbsp') {\n if (h264Frame) {\n this.finishFrame(tags, h264Frame);\n }\n h264Frame = new FlvTag(FlvTag.VIDEO_TAG);\n h264Frame.pts = currentNal.pts;\n h264Frame.dts = currentNal.dts;\n } else {\n if (currentNal.nalUnitType === 'slice_layer_without_partitioning_rbsp_idr') {\n // the current sample is a key frame\n h264Frame.keyFrame = true;\n }\n h264Frame.endNalUnit();\n }\n h264Frame.startNalUnit();\n h264Frame.writeBytes(currentNal.data);\n }\n if (h264Frame) {\n this.finishFrame(tags, h264Frame);\n }\n\n this.trigger('data', {track: track, tags: tags.list});\n\n // Continue with the flush process now\n this.trigger('done', 'VideoSegmentStream');\n };\n};\n\nVideoSegmentStream.prototype = new Stream();\n\n/**\n * An object that incrementally transmuxes MPEG2 Trasport Stream\n * chunks into an FLV.\n */\nTransmuxer = function(options) {\n var\n self = this,\n\n packetStream, parseStream, elementaryStream,\n videoTimestampRolloverStream, audioTimestampRolloverStream,\n timedMetadataTimestampRolloverStream,\n adtsStream, h264Stream,\n videoSegmentStream, audioSegmentStream, captionStream,\n coalesceStream;\n\n Transmuxer.prototype.init.call(this);\n\n options = options || {};\n\n // expose the metadata stream\n this.metadataStream = new m2ts.MetadataStream();\n\n options.metadataStream = this.metadataStream;\n\n // set up the parsing pipeline\n packetStream = new m2ts.TransportPacketStream();\n parseStream = new m2ts.TransportParseStream();\n elementaryStream = new m2ts.ElementaryStream();\n videoTimestampRolloverStream = new m2ts.TimestampRolloverStream('video');\n audioTimestampRolloverStream = new m2ts.TimestampRolloverStream('audio');\n timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream('timed-metadata');\n\n adtsStream = new AdtsStream();\n h264Stream = new H264Stream();\n coalesceStream = new CoalesceStream(options);\n\n // disassemble MPEG2-TS packets into elementary streams\n packetStream\n .pipe(parseStream)\n .pipe(elementaryStream);\n\n // !!THIS ORDER IS IMPORTANT!!\n // demux the streams\n elementaryStream\n .pipe(videoTimestampRolloverStream)\n .pipe(h264Stream);\n elementaryStream\n .pipe(audioTimestampRolloverStream)\n .pipe(adtsStream);\n\n elementaryStream\n .pipe(timedMetadataTimestampRolloverStream)\n .pipe(this.metadataStream)\n .pipe(coalesceStream);\n // if CEA-708 parsing is available, hook up a caption stream\n captionStream = new m2ts.CaptionStream();\n h264Stream.pipe(captionStream)\n .pipe(coalesceStream);\n\n // hook up the segment streams once track metadata is delivered\n elementaryStream.on('data', function(data) {\n var i, videoTrack, audioTrack;\n\n if (data.type === 'metadata') {\n i = data.tracks.length;\n\n // scan the tracks listed in the metadata\n while (i--) {\n if (data.tracks[i].type === 'video') {\n videoTrack = data.tracks[i];\n } else if (data.tracks[i].type === 'audio') {\n audioTrack = data.tracks[i];\n }\n }\n\n // hook up the video segment stream to the first track with h264 data\n if (videoTrack && !videoSegmentStream) {\n coalesceStream.numberOfTracks++;\n videoSegmentStream = new VideoSegmentStream(videoTrack);\n\n // Set up the final part of the video pipeline\n h264Stream\n .pipe(videoSegmentStream)\n .pipe(coalesceStream);\n }\n\n if (audioTrack && !audioSegmentStream) {\n // hook up the audio segment stream to the first track with aac data\n coalesceStream.numberOfTracks++;\n audioSegmentStream = new AudioSegmentStream(audioTrack);\n\n // Set up the final part of the audio pipeline\n adtsStream\n .pipe(audioSegmentStream)\n .pipe(coalesceStream);\n\n if (videoSegmentStream) {\n videoSegmentStream.on('keyframe', audioSegmentStream.onVideoKeyFrame);\n }\n }\n }\n });\n\n // feed incoming data to the front of the parsing pipeline\n this.push = function(data) {\n packetStream.push(data);\n };\n\n // flush any buffered data\n this.flush = function() {\n // Start at the top of the pipeline and flush all pending work\n packetStream.flush();\n };\n\n // Caption data has to be reset when seeking outside buffered range\n this.resetCaptions = function() {\n captionStream.reset();\n };\n\n // Re-emit any data coming from the coalesce stream to the outside world\n coalesceStream.on('data', function(event) {\n self.trigger('data', event);\n });\n\n // Let the consumer know we have finished flushing the entire pipeline\n coalesceStream.on('done', function() {\n self.trigger('done');\n });\n};\nTransmuxer.prototype = new Stream();\n\n// forward compatibility\nmodule.exports = Transmuxer;\n","/**\n * @file playlist.js\n *\n * Playlist related utilities.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _videoJs = require('video.js');\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\n/**\n * walk backward until we find a duration we can use\n * or return a failure\n *\n * @param {Playlist} playlist the playlist to walk through\n * @param {Number} endSequence the mediaSequence to stop walking on\n */\n\nvar backwardDuration = function backwardDuration(playlist, endSequence) {\n var result = 0;\n var i = endSequence - playlist.mediaSequence;\n // if a start time is available for segment immediately following\n // the interval, use it\n var segment = playlist.segments[i];\n\n // Walk backward until we find the latest segment with timeline\n // information that is earlier than endSequence\n if (segment) {\n if (typeof segment.start !== 'undefined') {\n return { result: segment.start, precise: true };\n }\n if (typeof segment.end !== 'undefined') {\n return {\n result: segment.end - segment.duration,\n precise: true\n };\n }\n }\n while (i--) {\n segment = playlist.segments[i];\n if (typeof segment.end !== 'undefined') {\n return { result: result + segment.end, precise: true };\n }\n\n result += segment.duration;\n\n if (typeof segment.start !== 'undefined') {\n return { result: result + segment.start, precise: true };\n }\n }\n return { result: result, precise: false };\n};\n\n/**\n * walk forward until we find a duration we can use\n * or return a failure\n *\n * @param {Playlist} playlist the playlist to walk through\n * @param {Number} endSequence the mediaSequence to stop walking on\n */\nvar forwardDuration = function forwardDuration(playlist, endSequence) {\n var result = 0;\n var segment = undefined;\n var i = endSequence - playlist.mediaSequence;\n // Walk forward until we find the earliest segment with timeline\n // information\n\n for (; i < playlist.segments.length; i++) {\n segment = playlist.segments[i];\n if (typeof segment.start !== 'undefined') {\n return {\n result: segment.start - result,\n precise: true\n };\n }\n\n result += segment.duration;\n\n if (typeof segment.end !== 'undefined') {\n return {\n result: segment.end - result,\n precise: true\n };\n }\n }\n // indicate we didn't find a useful duration estimate\n return { result: -1, precise: false };\n};\n\n/**\n * Calculate the media duration from the segments associated with a\n * playlist. The duration of a subinterval of the available segments\n * may be calculated by specifying an end index.\n *\n * @param {Object} playlist a media playlist object\n * @param {Number=} endSequence an exclusive upper boundary\n * for the playlist. Defaults to playlist length.\n * @param {Number} expired the amount of time that has dropped\n * off the front of the playlist in a live scenario\n * @return {Number} the duration between the first available segment\n * and end index.\n */\nvar intervalDuration = function intervalDuration(playlist, endSequence, expired) {\n var backward = undefined;\n var forward = undefined;\n\n if (typeof endSequence === 'undefined') {\n endSequence = playlist.mediaSequence + playlist.segments.length;\n }\n\n if (endSequence < playlist.mediaSequence) {\n return 0;\n }\n\n // do a backward walk to estimate the duration\n backward = backwardDuration(playlist, endSequence);\n if (backward.precise) {\n // if we were able to base our duration estimate on timing\n // information provided directly from the Media Source, return\n // it\n return backward.result;\n }\n\n // walk forward to see if a precise duration estimate can be made\n // that way\n forward = forwardDuration(playlist, endSequence);\n if (forward.precise) {\n // we found a segment that has been buffered and so it's\n // position is known precisely\n return forward.result;\n }\n\n // return the less-precise, playlist-based duration estimate\n return backward.result + expired;\n};\n\n/**\n * Calculates the duration of a playlist. If a start and end index\n * are specified, the duration will be for the subset of the media\n * timeline between those two indices. The total duration for live\n * playlists is always Infinity.\n *\n * @param {Object} playlist a media playlist object\n * @param {Number=} endSequence an exclusive upper\n * boundary for the playlist. Defaults to the playlist media\n * sequence number plus its length.\n * @param {Number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @return {Number} the duration between the start index and end\n * index.\n */\nvar duration = function duration(playlist, endSequence, expired) {\n if (!playlist) {\n return 0;\n }\n\n if (typeof expired !== 'number') {\n expired = 0;\n }\n\n // if a slice of the total duration is not requested, use\n // playlist-level duration indicators when they're present\n if (typeof endSequence === 'undefined') {\n // if present, use the duration specified in the playlist\n if (playlist.totalDuration) {\n return playlist.totalDuration;\n }\n\n // duration should be Infinity for live playlists\n if (!playlist.endList) {\n return _globalWindow2['default'].Infinity;\n }\n }\n\n // calculate the total duration based on the segment durations\n return intervalDuration(playlist, endSequence, expired);\n};\n\nexports.duration = duration;\n/**\n * Calculate the time between two indexes in the current playlist\n * neight the start- nor the end-index need to be within the current\n * playlist in which case, the targetDuration of the playlist is used\n * to approximate the durations of the segments\n *\n * @param {Object} playlist a media playlist object\n * @param {Number} startIndex\n * @param {Number} endIndex\n * @return {Number} the number of seconds between startIndex and endIndex\n */\nvar sumDurations = function sumDurations(playlist, startIndex, endIndex) {\n var durations = 0;\n\n if (startIndex > endIndex) {\n var _ref = [endIndex, startIndex];\n startIndex = _ref[0];\n endIndex = _ref[1];\n }\n\n if (startIndex < 0) {\n for (var i = startIndex; i < Math.min(0, endIndex); i++) {\n durations += playlist.targetDuration;\n }\n startIndex = 0;\n }\n\n for (var i = startIndex; i < endIndex; i++) {\n durations += playlist.segments[i].duration;\n }\n\n return durations;\n};\n\nexports.sumDurations = sumDurations;\n/**\n * Determines the media index of the segment corresponding to the safe edge of the live\n * window which is the duration of the last segment plus 2 target durations from the end\n * of the playlist.\n *\n * @param {Object} playlist\n * a media playlist object\n * @return {Number}\n * The media index of the segment at the safe live point. 0 if there is no \"safe\"\n * point.\n * @function safeLiveIndex\n */\nvar safeLiveIndex = function safeLiveIndex(playlist) {\n if (!playlist.segments.length) {\n return 0;\n }\n\n var i = playlist.segments.length - 1;\n var distanceFromEnd = playlist.segments[i].duration || playlist.targetDuration;\n var safeDistance = distanceFromEnd + playlist.targetDuration * 2;\n\n while (i--) {\n distanceFromEnd += playlist.segments[i].duration;\n\n if (distanceFromEnd >= safeDistance) {\n break;\n }\n }\n\n return Math.max(0, i);\n};\n\nexports.safeLiveIndex = safeLiveIndex;\n/**\n * Calculates the playlist end time\n *\n * @param {Object} playlist a media playlist object\n * @param {Number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @param {Boolean|false} useSafeLiveEnd a boolean value indicating whether or not the\n * playlist end calculation should consider the safe live end\n * (truncate the playlist end by three segments). This is normally\n * used for calculating the end of the playlist's seekable range.\n * @returns {Number} the end time of playlist\n * @function playlistEnd\n */\nvar playlistEnd = function playlistEnd(playlist, expired, useSafeLiveEnd) {\n if (!playlist || !playlist.segments) {\n return null;\n }\n if (playlist.endList) {\n return duration(playlist);\n }\n\n if (expired === null) {\n return null;\n }\n\n expired = expired || 0;\n\n var endSequence = useSafeLiveEnd ? safeLiveIndex(playlist) : playlist.segments.length;\n\n return intervalDuration(playlist, playlist.mediaSequence + endSequence, expired);\n};\n\nexports.playlistEnd = playlistEnd;\n/**\n * Calculates the interval of time that is currently seekable in a\n * playlist. The returned time ranges are relative to the earliest\n * moment in the specified playlist that is still available. A full\n * seekable implementation for live streams would need to offset\n * these values by the duration of content that has expired from the\n * stream.\n *\n * @param {Object} playlist a media playlist object\n * dropped off the front of the playlist in a live scenario\n * @param {Number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @return {TimeRanges} the periods of time that are valid targets\n * for seeking\n */\nvar seekable = function seekable(playlist, expired) {\n var useSafeLiveEnd = true;\n var seekableStart = expired || 0;\n var seekableEnd = playlistEnd(playlist, expired, useSafeLiveEnd);\n\n if (seekableEnd === null) {\n return (0, _videoJs.createTimeRange)();\n }\n return (0, _videoJs.createTimeRange)(seekableStart, seekableEnd);\n};\n\nexports.seekable = seekable;\nvar isWholeNumber = function isWholeNumber(num) {\n return num - Math.floor(num) === 0;\n};\n\nvar roundSignificantDigit = function roundSignificantDigit(increment, num) {\n // If we have a whole number, just add 1 to it\n if (isWholeNumber(num)) {\n return num + increment * 0.1;\n }\n\n var numDecimalDigits = num.toString().split('.')[1].length;\n\n for (var i = 1; i <= numDecimalDigits; i++) {\n var scale = Math.pow(10, i);\n var temp = num * scale;\n\n if (isWholeNumber(temp) || i === numDecimalDigits) {\n return (temp + increment) / scale;\n }\n }\n};\n\nvar ceilLeastSignificantDigit = roundSignificantDigit.bind(null, 1);\nvar floorLeastSignificantDigit = roundSignificantDigit.bind(null, -1);\n\n/**\n * Determine the index and estimated starting time of the segment that\n * contains a specified playback position in a media playlist.\n *\n * @param {Object} playlist the media playlist to query\n * @param {Number} currentTime The number of seconds since the earliest\n * possible position to determine the containing segment for\n * @param {Number} startIndex\n * @param {Number} startTime\n * @return {Object}\n */\nvar getMediaInfoForTime = function getMediaInfoForTime(playlist, currentTime, startIndex, startTime) {\n var i = undefined;\n var segment = undefined;\n var numSegments = playlist.segments.length;\n\n var time = currentTime - startTime;\n\n if (time < 0) {\n // Walk backward from startIndex in the playlist, adding durations\n // until we find a segment that contains `time` and return it\n if (startIndex > 0) {\n for (i = startIndex - 1; i >= 0; i--) {\n segment = playlist.segments[i];\n time += floorLeastSignificantDigit(segment.duration);\n if (time > 0) {\n return {\n mediaIndex: i,\n startTime: startTime - sumDurations(playlist, startIndex, i)\n };\n }\n }\n }\n // We were unable to find a good segment within the playlist\n // so select the first segment\n return {\n mediaIndex: 0,\n startTime: currentTime\n };\n }\n\n // When startIndex is negative, we first walk forward to first segment\n // adding target durations. If we \"run out of time\" before getting to\n // the first segment, return the first segment\n if (startIndex < 0) {\n for (i = startIndex; i < 0; i++) {\n time -= playlist.targetDuration;\n if (time < 0) {\n return {\n mediaIndex: 0,\n startTime: currentTime\n };\n }\n }\n startIndex = 0;\n }\n\n // Walk forward from startIndex in the playlist, subtracting durations\n // until we find a segment that contains `time` and return it\n for (i = startIndex; i < numSegments; i++) {\n segment = playlist.segments[i];\n time -= ceilLeastSignificantDigit(segment.duration);\n if (time < 0) {\n return {\n mediaIndex: i,\n startTime: startTime + sumDurations(playlist, startIndex, i)\n };\n }\n }\n\n // We are out of possible candidates so load the last one...\n return {\n mediaIndex: numSegments - 1,\n startTime: currentTime\n };\n};\n\nexports.getMediaInfoForTime = getMediaInfoForTime;\n/**\n * Check whether the playlist is blacklisted or not.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is blacklisted or not\n * @function isBlacklisted\n */\nvar isBlacklisted = function isBlacklisted(playlist) {\n return playlist.excludeUntil && playlist.excludeUntil > Date.now();\n};\n\nexports.isBlacklisted = isBlacklisted;\n/**\n * Check whether the playlist is compatible with current playback configuration or has\n * been blacklisted permanently for being incompatible.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is incompatible or not\n * @function isIncompatible\n */\nvar isIncompatible = function isIncompatible(playlist) {\n return playlist.excludeUntil && playlist.excludeUntil === Infinity;\n};\n\nexports.isIncompatible = isIncompatible;\n/**\n * Check whether the playlist is enabled or not.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is enabled or not\n * @function isEnabled\n */\nvar isEnabled = function isEnabled(playlist) {\n var blacklisted = isBlacklisted(playlist);\n\n return !playlist.disabled && !blacklisted;\n};\n\nexports.isEnabled = isEnabled;\n/**\n * Check whether the playlist has been manually disabled through the representations api.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is disabled manually or not\n * @function isDisabled\n */\nvar isDisabled = function isDisabled(playlist) {\n return playlist.disabled;\n};\n\nexports.isDisabled = isDisabled;\n/**\n * Returns whether the current playlist is an AES encrypted HLS stream\n *\n * @return {Boolean} true if it's an AES encrypted HLS stream\n */\nvar isAes = function isAes(media) {\n for (var i = 0; i < media.segments.length; i++) {\n if (media.segments[i].key) {\n return true;\n }\n }\n return false;\n};\n\nexports.isAes = isAes;\n/**\n * Returns whether the current playlist contains fMP4\n *\n * @return {Boolean} true if the playlist contains fMP4\n */\nvar isFmp4 = function isFmp4(media) {\n for (var i = 0; i < media.segments.length; i++) {\n if (media.segments[i].map) {\n return true;\n }\n }\n return false;\n};\n\nexports.isFmp4 = isFmp4;\n/**\n * Checks if the playlist has a value for the specified attribute\n *\n * @param {String} attr\n * Attribute to check for\n * @param {Object} playlist\n * The media playlist object\n * @return {Boolean}\n * Whether the playlist contains a value for the attribute or not\n * @function hasAttribute\n */\nvar hasAttribute = function hasAttribute(attr, playlist) {\n return playlist.attributes && playlist.attributes[attr];\n};\n\nexports.hasAttribute = hasAttribute;\n/**\n * Estimates the time required to complete a segment download from the specified playlist\n *\n * @param {Number} segmentDuration\n * Duration of requested segment\n * @param {Number} bandwidth\n * Current measured bandwidth of the player\n * @param {Object} playlist\n * The media playlist object\n * @param {Number=} bytesReceived\n * Number of bytes already received for the request. Defaults to 0\n * @return {Number|NaN}\n * The estimated time to request the segment. NaN if bandwidth information for\n * the given playlist is unavailable\n * @function estimateSegmentRequestTime\n */\nvar estimateSegmentRequestTime = function estimateSegmentRequestTime(segmentDuration, bandwidth, playlist) {\n var bytesReceived = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3];\n\n if (!hasAttribute('BANDWIDTH', playlist)) {\n return NaN;\n }\n\n var size = segmentDuration * playlist.attributes.BANDWIDTH;\n\n return (size - bytesReceived * 8) / bandwidth;\n};\n\nexports.estimateSegmentRequestTime = estimateSegmentRequestTime;\n/*\n * Returns whether the current playlist is the lowest rendition\n *\n * @return {Boolean} true if on lowest rendition\n */\nvar isLowestEnabledRendition = function isLowestEnabledRendition(master, media) {\n if (master.playlists.length === 1) {\n return true;\n }\n\n var currentBandwidth = media.attributes.BANDWIDTH || Number.MAX_VALUE;\n\n return master.playlists.filter(function (playlist) {\n if (!isEnabled(playlist)) {\n return false;\n }\n\n return (playlist.attributes.BANDWIDTH || 0) < currentBandwidth;\n }).length === 0;\n};\n\nexports.isLowestEnabledRendition = isLowestEnabledRendition;\n// exports\nexports['default'] = {\n duration: duration,\n seekable: seekable,\n safeLiveIndex: safeLiveIndex,\n getMediaInfoForTime: getMediaInfoForTime,\n isEnabled: isEnabled,\n isDisabled: isDisabled,\n isBlacklisted: isBlacklisted,\n isIncompatible: isIncompatible,\n playlistEnd: playlistEnd,\n isAes: isAes,\n isFmp4: isFmp4,\n hasAttribute: hasAttribute,\n estimateSegmentRequestTime: estimateSegmentRequestTime,\n isLowestEnabledRendition: isLowestEnabledRendition\n};","/*\n * pkcs7\n * https://github.com/brightcove/pkcs7\n *\n * Copyright (c) 2014 Brightcove\n * Licensed under the apache2 license.\n */\n\n'use strict';\n\nexports.pad = require('./pad.js');\nexports.unpad = require('./unpad.js');\n","/**\n * Loops through all supported media groups in master and calls the provided\n * callback for each group\n *\n * @param {Object} master\n * The parsed master manifest object\n * @param {string[]} groups\n * The media groups to call the callback for\n * @param {Function} callback\n * Callback to call for each media group\n */\nexport var forEachMediaGroup = function forEachMediaGroup(master, groups, callback) {\n groups.forEach(function (mediaType) {\n for (var groupKey in master.mediaGroups[mediaType]) {\n for (var labelKey in master.mediaGroups[mediaType][groupKey]) {\n var mediaProperties = master.mediaGroups[mediaType][groupKey][labelKey];\n callback(mediaProperties, mediaType, groupKey, labelKey);\n }\n }\n });\n};","/*! @name mpd-parser @version 0.21.1 @license Apache-2.0 */\nimport resolveUrl from '@videojs/vhs-utils/es/resolve-url';\nimport window from 'global/window';\nimport { forEachMediaGroup } from '@videojs/vhs-utils/es/media-groups';\nimport decodeB64ToUint8Array from '@videojs/vhs-utils/es/decode-b64-to-uint8-array';\nimport { DOMParser } from '@xmldom/xmldom';\n\nvar version = \"0.21.1\";\n\nvar isObject = function isObject(obj) {\n return !!obj && typeof obj === 'object';\n};\n\nvar merge = function merge() {\n for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n objects[_key] = arguments[_key];\n }\n\n return objects.reduce(function (result, source) {\n if (typeof source !== 'object') {\n return result;\n }\n\n Object.keys(source).forEach(function (key) {\n if (Array.isArray(result[key]) && Array.isArray(source[key])) {\n result[key] = result[key].concat(source[key]);\n } else if (isObject(result[key]) && isObject(source[key])) {\n result[key] = merge(result[key], source[key]);\n } else {\n result[key] = source[key];\n }\n });\n return result;\n }, {});\n};\nvar values = function values(o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n};\n\nvar range = function range(start, end) {\n var result = [];\n\n for (var i = start; i < end; i++) {\n result.push(i);\n }\n\n return result;\n};\nvar flatten = function flatten(lists) {\n return lists.reduce(function (x, y) {\n return x.concat(y);\n }, []);\n};\nvar from = function from(list) {\n if (!list.length) {\n return [];\n }\n\n var result = [];\n\n for (var i = 0; i < list.length; i++) {\n result.push(list[i]);\n }\n\n return result;\n};\nvar findIndexes = function findIndexes(l, key) {\n return l.reduce(function (a, e, i) {\n if (e[key]) {\n a.push(i);\n }\n\n return a;\n }, []);\n};\n/**\n * Returns the first index that satisfies the matching function, or -1 if not found.\n *\n * Only necessary because of IE11 support.\n *\n * @param {Array} list - the list to search through\n * @param {Function} matchingFunction - the matching function\n *\n * @return {number} the matching index or -1 if not found\n */\n\nvar findIndex = function findIndex(list, matchingFunction) {\n for (var i = 0; i < list.length; i++) {\n if (matchingFunction(list[i])) {\n return i;\n }\n }\n\n return -1;\n};\n/**\n * Returns a union of the included lists provided each element can be identified by a key.\n *\n * @param {Array} list - list of lists to get the union of\n * @param {Function} keyFunction - the function to use as a key for each element\n *\n * @return {Array} the union of the arrays\n */\n\nvar union = function union(lists, keyFunction) {\n return values(lists.reduce(function (acc, list) {\n list.forEach(function (el) {\n acc[keyFunction(el)] = el;\n });\n return acc;\n }, {}));\n};\n\nvar errors = {\n INVALID_NUMBER_OF_PERIOD: 'INVALID_NUMBER_OF_PERIOD',\n DASH_EMPTY_MANIFEST: 'DASH_EMPTY_MANIFEST',\n DASH_INVALID_XML: 'DASH_INVALID_XML',\n NO_BASE_URL: 'NO_BASE_URL',\n MISSING_SEGMENT_INFORMATION: 'MISSING_SEGMENT_INFORMATION',\n SEGMENT_TIME_UNSPECIFIED: 'SEGMENT_TIME_UNSPECIFIED',\n UNSUPPORTED_UTC_TIMING_SCHEME: 'UNSUPPORTED_UTC_TIMING_SCHEME'\n};\n\n/**\n * @typedef {Object} SingleUri\n * @property {string} uri - relative location of segment\n * @property {string} resolvedUri - resolved location of segment\n * @property {Object} byterange - Object containing information on how to make byte range\n * requests following byte-range-spec per RFC2616.\n * @property {String} byterange.length - length of range request\n * @property {String} byterange.offset - byte offset of range request\n *\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.1\n */\n\n/**\n * Converts a URLType node (5.3.9.2.3 Table 13) to a segment object\n * that conforms to how m3u8-parser is structured\n *\n * @see https://github.com/videojs/m3u8-parser\n *\n * @param {string} baseUrl - baseUrl provided by nodes\n * @param {string} source - source url for segment\n * @param {string} range - optional range used for range calls,\n * follows RFC 2616, Clause 14.35.1\n * @return {SingleUri} full segment information transformed into a format similar\n * to m3u8-parser\n */\n\nvar urlTypeToSegment = function urlTypeToSegment(_ref) {\n var _ref$baseUrl = _ref.baseUrl,\n baseUrl = _ref$baseUrl === void 0 ? '' : _ref$baseUrl,\n _ref$source = _ref.source,\n source = _ref$source === void 0 ? '' : _ref$source,\n _ref$range = _ref.range,\n range = _ref$range === void 0 ? '' : _ref$range,\n _ref$indexRange = _ref.indexRange,\n indexRange = _ref$indexRange === void 0 ? '' : _ref$indexRange;\n var segment = {\n uri: source,\n resolvedUri: resolveUrl(baseUrl || '', source)\n };\n\n if (range || indexRange) {\n var rangeStr = range ? range : indexRange;\n var ranges = rangeStr.split('-'); // default to parsing this as a BigInt if possible\n\n var startRange = window.BigInt ? window.BigInt(ranges[0]) : parseInt(ranges[0], 10);\n var endRange = window.BigInt ? window.BigInt(ranges[1]) : parseInt(ranges[1], 10); // convert back to a number if less than MAX_SAFE_INTEGER\n\n if (startRange < Number.MAX_SAFE_INTEGER && typeof startRange === 'bigint') {\n startRange = Number(startRange);\n }\n\n if (endRange < Number.MAX_SAFE_INTEGER && typeof endRange === 'bigint') {\n endRange = Number(endRange);\n }\n\n var length;\n\n if (typeof endRange === 'bigint' || typeof startRange === 'bigint') {\n length = window.BigInt(endRange) - window.BigInt(startRange) + window.BigInt(1);\n } else {\n length = endRange - startRange + 1;\n }\n\n if (typeof length === 'bigint' && length < Number.MAX_SAFE_INTEGER) {\n length = Number(length);\n } // byterange should be inclusive according to\n // RFC 2616, Clause 14.35.1\n\n\n segment.byterange = {\n length: length,\n offset: startRange\n };\n }\n\n return segment;\n};\nvar byteRangeToString = function byteRangeToString(byterange) {\n // `endRange` is one less than `offset + length` because the HTTP range\n // header uses inclusive ranges\n var endRange;\n\n if (typeof byterange.offset === 'bigint' || typeof byterange.length === 'bigint') {\n endRange = window.BigInt(byterange.offset) + window.BigInt(byterange.length) - window.BigInt(1);\n } else {\n endRange = byterange.offset + byterange.length - 1;\n }\n\n return byterange.offset + \"-\" + endRange;\n};\n\n/**\n * parse the end number attribue that can be a string\n * number, or undefined.\n *\n * @param {string|number|undefined} endNumber\n * The end number attribute.\n *\n * @return {number|null}\n * The result of parsing the end number.\n */\n\nvar parseEndNumber = function parseEndNumber(endNumber) {\n if (endNumber && typeof endNumber !== 'number') {\n endNumber = parseInt(endNumber, 10);\n }\n\n if (isNaN(endNumber)) {\n return null;\n }\n\n return endNumber;\n};\n/**\n * Functions for calculating the range of available segments in static and dynamic\n * manifests.\n */\n\n\nvar segmentRange = {\n /**\n * Returns the entire range of available segments for a static MPD\n *\n * @param {Object} attributes\n * Inheritied MPD attributes\n * @return {{ start: number, end: number }}\n * The start and end numbers for available segments\n */\n static: function _static(attributes) {\n var duration = attributes.duration,\n _attributes$timescale = attributes.timescale,\n timescale = _attributes$timescale === void 0 ? 1 : _attributes$timescale,\n sourceDuration = attributes.sourceDuration,\n periodDuration = attributes.periodDuration;\n var endNumber = parseEndNumber(attributes.endNumber);\n var segmentDuration = duration / timescale;\n\n if (typeof endNumber === 'number') {\n return {\n start: 0,\n end: endNumber\n };\n }\n\n if (typeof periodDuration === 'number') {\n return {\n start: 0,\n end: periodDuration / segmentDuration\n };\n }\n\n return {\n start: 0,\n end: sourceDuration / segmentDuration\n };\n },\n\n /**\n * Returns the current live window range of available segments for a dynamic MPD\n *\n * @param {Object} attributes\n * Inheritied MPD attributes\n * @return {{ start: number, end: number }}\n * The start and end numbers for available segments\n */\n dynamic: function dynamic(attributes) {\n var NOW = attributes.NOW,\n clientOffset = attributes.clientOffset,\n availabilityStartTime = attributes.availabilityStartTime,\n _attributes$timescale2 = attributes.timescale,\n timescale = _attributes$timescale2 === void 0 ? 1 : _attributes$timescale2,\n duration = attributes.duration,\n _attributes$periodSta = attributes.periodStart,\n periodStart = _attributes$periodSta === void 0 ? 0 : _attributes$periodSta,\n _attributes$minimumUp = attributes.minimumUpdatePeriod,\n minimumUpdatePeriod = _attributes$minimumUp === void 0 ? 0 : _attributes$minimumUp,\n _attributes$timeShift = attributes.timeShiftBufferDepth,\n timeShiftBufferDepth = _attributes$timeShift === void 0 ? Infinity : _attributes$timeShift;\n var endNumber = parseEndNumber(attributes.endNumber); // clientOffset is passed in at the top level of mpd-parser and is an offset calculated\n // after retrieving UTC server time.\n\n var now = (NOW + clientOffset) / 1000; // WC stands for Wall Clock.\n // Convert the period start time to EPOCH.\n\n var periodStartWC = availabilityStartTime + periodStart; // Period end in EPOCH is manifest's retrieval time + time until next update.\n\n var periodEndWC = now + minimumUpdatePeriod;\n var periodDuration = periodEndWC - periodStartWC;\n var segmentCount = Math.ceil(periodDuration * timescale / duration);\n var availableStart = Math.floor((now - periodStartWC - timeShiftBufferDepth) * timescale / duration);\n var availableEnd = Math.floor((now - periodStartWC) * timescale / duration);\n return {\n start: Math.max(0, availableStart),\n end: typeof endNumber === 'number' ? endNumber : Math.min(segmentCount, availableEnd)\n };\n }\n};\n/**\n * Maps a range of numbers to objects with information needed to build the corresponding\n * segment list\n *\n * @name toSegmentsCallback\n * @function\n * @param {number} number\n * Number of the segment\n * @param {number} index\n * Index of the number in the range list\n * @return {{ number: Number, duration: Number, timeline: Number, time: Number }}\n * Object with segment timing and duration info\n */\n\n/**\n * Returns a callback for Array.prototype.map for mapping a range of numbers to\n * information needed to build the segment list.\n *\n * @param {Object} attributes\n * Inherited MPD attributes\n * @return {toSegmentsCallback}\n * Callback map function\n */\n\nvar toSegments = function toSegments(attributes) {\n return function (number) {\n var duration = attributes.duration,\n _attributes$timescale3 = attributes.timescale,\n timescale = _attributes$timescale3 === void 0 ? 1 : _attributes$timescale3,\n periodStart = attributes.periodStart,\n _attributes$startNumb = attributes.startNumber,\n startNumber = _attributes$startNumb === void 0 ? 1 : _attributes$startNumb;\n return {\n number: startNumber + number,\n duration: duration / timescale,\n timeline: periodStart,\n time: number * duration\n };\n };\n};\n/**\n * Returns a list of objects containing segment timing and duration info used for\n * building the list of segments. This uses the @duration attribute specified\n * in the MPD manifest to derive the range of segments.\n *\n * @param {Object} attributes\n * Inherited MPD attributes\n * @return {{number: number, duration: number, time: number, timeline: number}[]}\n * List of Objects with segment timing and duration info\n */\n\nvar parseByDuration = function parseByDuration(attributes) {\n var type = attributes.type,\n duration = attributes.duration,\n _attributes$timescale4 = attributes.timescale,\n timescale = _attributes$timescale4 === void 0 ? 1 : _attributes$timescale4,\n periodDuration = attributes.periodDuration,\n sourceDuration = attributes.sourceDuration;\n\n var _segmentRange$type = segmentRange[type](attributes),\n start = _segmentRange$type.start,\n end = _segmentRange$type.end;\n\n var segments = range(start, end).map(toSegments(attributes));\n\n if (type === 'static') {\n var index = segments.length - 1; // section is either a period or the full source\n\n var sectionDuration = typeof periodDuration === 'number' ? periodDuration : sourceDuration; // final segment may be less than full segment duration\n\n segments[index].duration = sectionDuration - duration / timescale * index;\n }\n\n return segments;\n};\n\n/**\n * Translates SegmentBase into a set of segments.\n * (DASH SPEC Section 5.3.9.3.2) contains a set of nodes. Each\n * node should be translated into segment.\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @return {Object.} list of segments\n */\n\nvar segmentsFromBase = function segmentsFromBase(attributes) {\n var baseUrl = attributes.baseUrl,\n _attributes$initializ = attributes.initialization,\n initialization = _attributes$initializ === void 0 ? {} : _attributes$initializ,\n sourceDuration = attributes.sourceDuration,\n _attributes$indexRang = attributes.indexRange,\n indexRange = _attributes$indexRang === void 0 ? '' : _attributes$indexRang,\n periodStart = attributes.periodStart,\n presentationTime = attributes.presentationTime,\n _attributes$number = attributes.number,\n number = _attributes$number === void 0 ? 0 : _attributes$number,\n duration = attributes.duration; // base url is required for SegmentBase to work, per spec (Section 5.3.9.2.1)\n\n if (!baseUrl) {\n throw new Error(errors.NO_BASE_URL);\n }\n\n var initSegment = urlTypeToSegment({\n baseUrl: baseUrl,\n source: initialization.sourceURL,\n range: initialization.range\n });\n var segment = urlTypeToSegment({\n baseUrl: baseUrl,\n source: baseUrl,\n indexRange: indexRange\n });\n segment.map = initSegment; // If there is a duration, use it, otherwise use the given duration of the source\n // (since SegmentBase is only for one total segment)\n\n if (duration) {\n var segmentTimeInfo = parseByDuration(attributes);\n\n if (segmentTimeInfo.length) {\n segment.duration = segmentTimeInfo[0].duration;\n segment.timeline = segmentTimeInfo[0].timeline;\n }\n } else if (sourceDuration) {\n segment.duration = sourceDuration;\n segment.timeline = periodStart;\n } // If presentation time is provided, these segments are being generated by SIDX\n // references, and should use the time provided. For the general case of SegmentBase,\n // there should only be one segment in the period, so its presentation time is the same\n // as its period start.\n\n\n segment.presentationTime = presentationTime || periodStart;\n segment.number = number;\n return [segment];\n};\n/**\n * Given a playlist, a sidx box, and a baseUrl, update the segment list of the playlist\n * according to the sidx information given.\n *\n * playlist.sidx has metadadata about the sidx where-as the sidx param\n * is the parsed sidx box itself.\n *\n * @param {Object} playlist the playlist to update the sidx information for\n * @param {Object} sidx the parsed sidx box\n * @return {Object} the playlist object with the updated sidx information\n */\n\nvar addSidxSegmentsToPlaylist$1 = function addSidxSegmentsToPlaylist(playlist, sidx, baseUrl) {\n // Retain init segment information\n var initSegment = playlist.sidx.map ? playlist.sidx.map : null; // Retain source duration from initial main manifest parsing\n\n var sourceDuration = playlist.sidx.duration; // Retain source timeline\n\n var timeline = playlist.timeline || 0;\n var sidxByteRange = playlist.sidx.byterange;\n var sidxEnd = sidxByteRange.offset + sidxByteRange.length; // Retain timescale of the parsed sidx\n\n var timescale = sidx.timescale; // referenceType 1 refers to other sidx boxes\n\n var mediaReferences = sidx.references.filter(function (r) {\n return r.referenceType !== 1;\n });\n var segments = [];\n var type = playlist.endList ? 'static' : 'dynamic';\n var periodStart = playlist.sidx.timeline;\n var presentationTime = periodStart;\n var number = playlist.mediaSequence || 0; // firstOffset is the offset from the end of the sidx box\n\n var startIndex; // eslint-disable-next-line\n\n if (typeof sidx.firstOffset === 'bigint') {\n startIndex = window.BigInt(sidxEnd) + sidx.firstOffset;\n } else {\n startIndex = sidxEnd + sidx.firstOffset;\n }\n\n for (var i = 0; i < mediaReferences.length; i++) {\n var reference = sidx.references[i]; // size of the referenced (sub)segment\n\n var size = reference.referencedSize; // duration of the referenced (sub)segment, in the timescale\n // this will be converted to seconds when generating segments\n\n var duration = reference.subsegmentDuration; // should be an inclusive range\n\n var endIndex = void 0; // eslint-disable-next-line\n\n if (typeof startIndex === 'bigint') {\n endIndex = startIndex + window.BigInt(size) - window.BigInt(1);\n } else {\n endIndex = startIndex + size - 1;\n }\n\n var indexRange = startIndex + \"-\" + endIndex;\n var attributes = {\n baseUrl: baseUrl,\n timescale: timescale,\n timeline: timeline,\n periodStart: periodStart,\n presentationTime: presentationTime,\n number: number,\n duration: duration,\n sourceDuration: sourceDuration,\n indexRange: indexRange,\n type: type\n };\n var segment = segmentsFromBase(attributes)[0];\n\n if (initSegment) {\n segment.map = initSegment;\n }\n\n segments.push(segment);\n\n if (typeof startIndex === 'bigint') {\n startIndex += window.BigInt(size);\n } else {\n startIndex += size;\n }\n\n presentationTime += duration / timescale;\n number++;\n }\n\n playlist.segments = segments;\n return playlist;\n};\n\nvar SUPPORTED_MEDIA_TYPES = ['AUDIO', 'SUBTITLES']; // allow one 60fps frame as leniency (arbitrarily chosen)\n\nvar TIME_FUDGE = 1 / 60;\n/**\n * Given a list of timelineStarts, combines, dedupes, and sorts them.\n *\n * @param {TimelineStart[]} timelineStarts - list of timeline starts\n *\n * @return {TimelineStart[]} the combined and deduped timeline starts\n */\n\nvar getUniqueTimelineStarts = function getUniqueTimelineStarts(timelineStarts) {\n return union(timelineStarts, function (_ref) {\n var timeline = _ref.timeline;\n return timeline;\n }).sort(function (a, b) {\n return a.timeline > b.timeline ? 1 : -1;\n });\n};\n/**\n * Finds the playlist with the matching NAME attribute.\n *\n * @param {Array} playlists - playlists to search through\n * @param {string} name - the NAME attribute to search for\n *\n * @return {Object|null} the matching playlist object, or null\n */\n\nvar findPlaylistWithName = function findPlaylistWithName(playlists, name) {\n for (var i = 0; i < playlists.length; i++) {\n if (playlists[i].attributes.NAME === name) {\n return playlists[i];\n }\n }\n\n return null;\n};\n/**\n * Gets a flattened array of media group playlists.\n *\n * @param {Object} manifest - the main manifest object\n *\n * @return {Array} the media group playlists\n */\n\nvar getMediaGroupPlaylists = function getMediaGroupPlaylists(manifest) {\n var mediaGroupPlaylists = [];\n forEachMediaGroup(manifest, SUPPORTED_MEDIA_TYPES, function (properties, type, group, label) {\n mediaGroupPlaylists = mediaGroupPlaylists.concat(properties.playlists || []);\n });\n return mediaGroupPlaylists;\n};\n/**\n * Updates the playlist's media sequence numbers.\n *\n * @param {Object} config - options object\n * @param {Object} config.playlist - the playlist to update\n * @param {number} config.mediaSequence - the mediaSequence number to start with\n */\n\nvar updateMediaSequenceForPlaylist = function updateMediaSequenceForPlaylist(_ref2) {\n var playlist = _ref2.playlist,\n mediaSequence = _ref2.mediaSequence;\n playlist.mediaSequence = mediaSequence;\n playlist.segments.forEach(function (segment, index) {\n segment.number = playlist.mediaSequence + index;\n });\n};\n/**\n * Updates the media and discontinuity sequence numbers of newPlaylists given oldPlaylists\n * and a complete list of timeline starts.\n *\n * If no matching playlist is found, only the discontinuity sequence number of the playlist\n * will be updated.\n *\n * Since early available timelines are not supported, at least one segment must be present.\n *\n * @param {Object} config - options object\n * @param {Object[]} oldPlaylists - the old playlists to use as a reference\n * @param {Object[]} newPlaylists - the new playlists to update\n * @param {Object} timelineStarts - all timelineStarts seen in the stream to this point\n */\n\nvar updateSequenceNumbers = function updateSequenceNumbers(_ref3) {\n var oldPlaylists = _ref3.oldPlaylists,\n newPlaylists = _ref3.newPlaylists,\n timelineStarts = _ref3.timelineStarts;\n newPlaylists.forEach(function (playlist) {\n playlist.discontinuitySequence = findIndex(timelineStarts, function (_ref4) {\n var timeline = _ref4.timeline;\n return timeline === playlist.timeline;\n }); // Playlists NAMEs come from DASH Representation IDs, which are mandatory\n // (see ISO_23009-1-2012 5.3.5.2).\n //\n // If the same Representation existed in a prior Period, it will retain the same NAME.\n\n var oldPlaylist = findPlaylistWithName(oldPlaylists, playlist.attributes.NAME);\n\n if (!oldPlaylist) {\n // Since this is a new playlist, the media sequence values can start from 0 without\n // consequence.\n return;\n } // TODO better support for live SIDX\n //\n // As of this writing, mpd-parser does not support multiperiod SIDX (in live or VOD).\n // This is evident by a playlist only having a single SIDX reference. In a multiperiod\n // playlist there would need to be multiple SIDX references. In addition, live SIDX is\n // not supported when the SIDX properties change on refreshes.\n //\n // In the future, if support needs to be added, the merging logic here can be called\n // after SIDX references are resolved. For now, exit early to prevent exceptions being\n // thrown due to undefined references.\n\n\n if (playlist.sidx) {\n return;\n } // Since we don't yet support early available timelines, we don't need to support\n // playlists with no segments.\n\n\n var firstNewSegment = playlist.segments[0];\n var oldMatchingSegmentIndex = findIndex(oldPlaylist.segments, function (oldSegment) {\n return Math.abs(oldSegment.presentationTime - firstNewSegment.presentationTime) < TIME_FUDGE;\n }); // No matching segment from the old playlist means the entire playlist was refreshed.\n // In this case the media sequence should account for this update, and the new segments\n // should be marked as discontinuous from the prior content, since the last prior\n // timeline was removed.\n\n if (oldMatchingSegmentIndex === -1) {\n updateMediaSequenceForPlaylist({\n playlist: playlist,\n mediaSequence: oldPlaylist.mediaSequence + oldPlaylist.segments.length\n });\n playlist.segments[0].discontinuity = true;\n playlist.discontinuityStarts.unshift(0); // No matching segment does not necessarily mean there's missing content.\n //\n // If the new playlist's timeline is the same as the last seen segment's timeline,\n // then a discontinuity can be added to identify that there's potentially missing\n // content. If there's no missing content, the discontinuity should still be rather\n // harmless. It's possible that if segment durations are accurate enough, that the\n // existence of a gap can be determined using the presentation times and durations,\n // but if the segment timing info is off, it may introduce more problems than simply\n // adding the discontinuity.\n //\n // If the new playlist's timeline is different from the last seen segment's timeline,\n // then a discontinuity can be added to identify that this is the first seen segment\n // of a new timeline. However, the logic at the start of this function that\n // determined the disconinuity sequence by timeline index is now off by one (the\n // discontinuity of the newest timeline hasn't yet fallen off the manifest...since\n // we added it), so the disconinuity sequence must be decremented.\n //\n // A period may also have a duration of zero, so the case of no segments is handled\n // here even though we don't yet support early available periods.\n\n if (!oldPlaylist.segments.length && playlist.timeline > oldPlaylist.timeline || oldPlaylist.segments.length && playlist.timeline > oldPlaylist.segments[oldPlaylist.segments.length - 1].timeline) {\n playlist.discontinuitySequence--;\n }\n\n return;\n } // If the first segment matched with a prior segment on a discontinuity (it's matching\n // on the first segment of a period), then the discontinuitySequence shouldn't be the\n // timeline's matching one, but instead should be the one prior, and the first segment\n // of the new manifest should be marked with a discontinuity.\n //\n // The reason for this special case is that discontinuity sequence shows how many\n // discontinuities have fallen off of the playlist, and discontinuities are marked on\n // the first segment of a new \"timeline.\" Because of this, while DASH will retain that\n // Period while the \"timeline\" exists, HLS keeps track of it via the discontinuity\n // sequence, and that first segment is an indicator, but can be removed before that\n // timeline is gone.\n\n\n var oldMatchingSegment = oldPlaylist.segments[oldMatchingSegmentIndex];\n\n if (oldMatchingSegment.discontinuity && !firstNewSegment.discontinuity) {\n firstNewSegment.discontinuity = true;\n playlist.discontinuityStarts.unshift(0);\n playlist.discontinuitySequence--;\n }\n\n updateMediaSequenceForPlaylist({\n playlist: playlist,\n mediaSequence: oldPlaylist.segments[oldMatchingSegmentIndex].number\n });\n });\n};\n/**\n * Given an old parsed manifest object and a new parsed manifest object, updates the\n * sequence and timing values within the new manifest to ensure that it lines up with the\n * old.\n *\n * @param {Array} oldManifest - the old main manifest object\n * @param {Array} newManifest - the new main manifest object\n *\n * @return {Object} the updated new manifest object\n */\n\nvar positionManifestOnTimeline = function positionManifestOnTimeline(_ref5) {\n var oldManifest = _ref5.oldManifest,\n newManifest = _ref5.newManifest;\n // Starting from v4.1.2 of the IOP, section 4.4.3.3 states:\n //\n // \"MPD@availabilityStartTime and Period@start shall not be changed over MPD updates.\"\n //\n // This was added from https://github.com/Dash-Industry-Forum/DASH-IF-IOP/issues/160\n //\n // Because of this change, and the difficulty of supporting periods with changing start\n // times, periods with changing start times are not supported. This makes the logic much\n // simpler, since periods with the same start time can be considerred the same period\n // across refreshes.\n //\n // To give an example as to the difficulty of handling periods where the start time may\n // change, if a single period manifest is refreshed with another manifest with a single\n // period, and both the start and end times are increased, then the only way to determine\n // if it's a new period or an old one that has changed is to look through the segments of\n // each playlist and determine the presentation time bounds to find a match. In addition,\n // if the period start changed to exceed the old period end, then there would be no\n // match, and it would not be possible to determine whether the refreshed period is a new\n // one or the old one.\n var oldPlaylists = oldManifest.playlists.concat(getMediaGroupPlaylists(oldManifest));\n var newPlaylists = newManifest.playlists.concat(getMediaGroupPlaylists(newManifest)); // Save all seen timelineStarts to the new manifest. Although this potentially means that\n // there's a \"memory leak\" in that it will never stop growing, in reality, only a couple\n // of properties are saved for each seen Period. Even long running live streams won't\n // generate too many Periods, unless the stream is watched for decades. In the future,\n // this can be optimized by mapping to discontinuity sequence numbers for each timeline,\n // but it may not become an issue, and the additional info can be useful for debugging.\n\n newManifest.timelineStarts = getUniqueTimelineStarts([oldManifest.timelineStarts, newManifest.timelineStarts]);\n updateSequenceNumbers({\n oldPlaylists: oldPlaylists,\n newPlaylists: newPlaylists,\n timelineStarts: newManifest.timelineStarts\n });\n return newManifest;\n};\n\nvar generateSidxKey = function generateSidxKey(sidx) {\n return sidx && sidx.uri + '-' + byteRangeToString(sidx.byterange);\n};\n\nvar mergeDiscontiguousPlaylists = function mergeDiscontiguousPlaylists(playlists) {\n var mergedPlaylists = values(playlists.reduce(function (acc, playlist) {\n // assuming playlist IDs are the same across periods\n // TODO: handle multiperiod where representation sets are not the same\n // across periods\n var name = playlist.attributes.id + (playlist.attributes.lang || '');\n\n if (!acc[name]) {\n // First Period\n acc[name] = playlist;\n acc[name].attributes.timelineStarts = [];\n } else {\n // Subsequent Periods\n if (playlist.segments) {\n var _acc$name$segments;\n\n // first segment of subsequent periods signal a discontinuity\n if (playlist.segments[0]) {\n playlist.segments[0].discontinuity = true;\n }\n\n (_acc$name$segments = acc[name].segments).push.apply(_acc$name$segments, playlist.segments);\n } // bubble up contentProtection, this assumes all DRM content\n // has the same contentProtection\n\n\n if (playlist.attributes.contentProtection) {\n acc[name].attributes.contentProtection = playlist.attributes.contentProtection;\n }\n }\n\n acc[name].attributes.timelineStarts.push({\n // Although they represent the same number, it's important to have both to make it\n // compatible with HLS potentially having a similar attribute.\n start: playlist.attributes.periodStart,\n timeline: playlist.attributes.periodStart\n });\n return acc;\n }, {}));\n return mergedPlaylists.map(function (playlist) {\n playlist.discontinuityStarts = findIndexes(playlist.segments || [], 'discontinuity');\n return playlist;\n });\n};\n\nvar addSidxSegmentsToPlaylist = function addSidxSegmentsToPlaylist(playlist, sidxMapping) {\n var sidxKey = generateSidxKey(playlist.sidx);\n var sidxMatch = sidxKey && sidxMapping[sidxKey] && sidxMapping[sidxKey].sidx;\n\n if (sidxMatch) {\n addSidxSegmentsToPlaylist$1(playlist, sidxMatch, playlist.sidx.resolvedUri);\n }\n\n return playlist;\n};\nvar addSidxSegmentsToPlaylists = function addSidxSegmentsToPlaylists(playlists, sidxMapping) {\n if (sidxMapping === void 0) {\n sidxMapping = {};\n }\n\n if (!Object.keys(sidxMapping).length) {\n return playlists;\n }\n\n for (var i in playlists) {\n playlists[i] = addSidxSegmentsToPlaylist(playlists[i], sidxMapping);\n }\n\n return playlists;\n};\nvar formatAudioPlaylist = function formatAudioPlaylist(_ref, isAudioOnly) {\n var _attributes;\n\n var attributes = _ref.attributes,\n segments = _ref.segments,\n sidx = _ref.sidx,\n mediaSequence = _ref.mediaSequence,\n discontinuitySequence = _ref.discontinuitySequence,\n discontinuityStarts = _ref.discontinuityStarts;\n var playlist = {\n attributes: (_attributes = {\n NAME: attributes.id,\n BANDWIDTH: attributes.bandwidth,\n CODECS: attributes.codecs\n }, _attributes['PROGRAM-ID'] = 1, _attributes),\n uri: '',\n endList: attributes.type === 'static',\n timeline: attributes.periodStart,\n resolvedUri: '',\n targetDuration: attributes.duration,\n discontinuitySequence: discontinuitySequence,\n discontinuityStarts: discontinuityStarts,\n timelineStarts: attributes.timelineStarts,\n mediaSequence: mediaSequence,\n segments: segments\n };\n\n if (attributes.contentProtection) {\n playlist.contentProtection = attributes.contentProtection;\n }\n\n if (sidx) {\n playlist.sidx = sidx;\n }\n\n if (isAudioOnly) {\n playlist.attributes.AUDIO = 'audio';\n playlist.attributes.SUBTITLES = 'subs';\n }\n\n return playlist;\n};\nvar formatVttPlaylist = function formatVttPlaylist(_ref2) {\n var _m3u8Attributes;\n\n var attributes = _ref2.attributes,\n segments = _ref2.segments,\n mediaSequence = _ref2.mediaSequence,\n discontinuityStarts = _ref2.discontinuityStarts,\n discontinuitySequence = _ref2.discontinuitySequence;\n\n if (typeof segments === 'undefined') {\n // vtt tracks may use single file in BaseURL\n segments = [{\n uri: attributes.baseUrl,\n timeline: attributes.periodStart,\n resolvedUri: attributes.baseUrl || '',\n duration: attributes.sourceDuration,\n number: 0\n }]; // targetDuration should be the same duration as the only segment\n\n attributes.duration = attributes.sourceDuration;\n }\n\n var m3u8Attributes = (_m3u8Attributes = {\n NAME: attributes.id,\n BANDWIDTH: attributes.bandwidth\n }, _m3u8Attributes['PROGRAM-ID'] = 1, _m3u8Attributes);\n\n if (attributes.codecs) {\n m3u8Attributes.CODECS = attributes.codecs;\n }\n\n return {\n attributes: m3u8Attributes,\n uri: '',\n endList: attributes.type === 'static',\n timeline: attributes.periodStart,\n resolvedUri: attributes.baseUrl || '',\n targetDuration: attributes.duration,\n timelineStarts: attributes.timelineStarts,\n discontinuityStarts: discontinuityStarts,\n discontinuitySequence: discontinuitySequence,\n mediaSequence: mediaSequence,\n segments: segments\n };\n};\nvar organizeAudioPlaylists = function organizeAudioPlaylists(playlists, sidxMapping, isAudioOnly) {\n if (sidxMapping === void 0) {\n sidxMapping = {};\n }\n\n if (isAudioOnly === void 0) {\n isAudioOnly = false;\n }\n\n var mainPlaylist;\n var formattedPlaylists = playlists.reduce(function (a, playlist) {\n var role = playlist.attributes.role && playlist.attributes.role.value || '';\n var language = playlist.attributes.lang || '';\n var label = playlist.attributes.label || 'main';\n\n if (language && !playlist.attributes.label) {\n var roleLabel = role ? \" (\" + role + \")\" : '';\n label = \"\" + playlist.attributes.lang + roleLabel;\n }\n\n if (!a[label]) {\n a[label] = {\n language: language,\n autoselect: true,\n default: role === 'main',\n playlists: [],\n uri: ''\n };\n }\n\n var formatted = addSidxSegmentsToPlaylist(formatAudioPlaylist(playlist, isAudioOnly), sidxMapping);\n a[label].playlists.push(formatted);\n\n if (typeof mainPlaylist === 'undefined' && role === 'main') {\n mainPlaylist = playlist;\n mainPlaylist.default = true;\n }\n\n return a;\n }, {}); // if no playlists have role \"main\", mark the first as main\n\n if (!mainPlaylist) {\n var firstLabel = Object.keys(formattedPlaylists)[0];\n formattedPlaylists[firstLabel].default = true;\n }\n\n return formattedPlaylists;\n};\nvar organizeVttPlaylists = function organizeVttPlaylists(playlists, sidxMapping) {\n if (sidxMapping === void 0) {\n sidxMapping = {};\n }\n\n return playlists.reduce(function (a, playlist) {\n var label = playlist.attributes.lang || 'text';\n\n if (!a[label]) {\n a[label] = {\n language: label,\n default: false,\n autoselect: false,\n playlists: [],\n uri: ''\n };\n }\n\n a[label].playlists.push(addSidxSegmentsToPlaylist(formatVttPlaylist(playlist), sidxMapping));\n return a;\n }, {});\n};\n\nvar organizeCaptionServices = function organizeCaptionServices(captionServices) {\n return captionServices.reduce(function (svcObj, svc) {\n if (!svc) {\n return svcObj;\n }\n\n svc.forEach(function (service) {\n var channel = service.channel,\n language = service.language;\n svcObj[language] = {\n autoselect: false,\n default: false,\n instreamId: channel,\n language: language\n };\n\n if (service.hasOwnProperty('aspectRatio')) {\n svcObj[language].aspectRatio = service.aspectRatio;\n }\n\n if (service.hasOwnProperty('easyReader')) {\n svcObj[language].easyReader = service.easyReader;\n }\n\n if (service.hasOwnProperty('3D')) {\n svcObj[language]['3D'] = service['3D'];\n }\n });\n return svcObj;\n }, {});\n};\n\nvar formatVideoPlaylist = function formatVideoPlaylist(_ref3) {\n var _attributes2;\n\n var attributes = _ref3.attributes,\n segments = _ref3.segments,\n sidx = _ref3.sidx,\n discontinuityStarts = _ref3.discontinuityStarts;\n var playlist = {\n attributes: (_attributes2 = {\n NAME: attributes.id,\n AUDIO: 'audio',\n SUBTITLES: 'subs',\n RESOLUTION: {\n width: attributes.width,\n height: attributes.height\n },\n CODECS: attributes.codecs,\n BANDWIDTH: attributes.bandwidth\n }, _attributes2['PROGRAM-ID'] = 1, _attributes2),\n uri: '',\n endList: attributes.type === 'static',\n timeline: attributes.periodStart,\n resolvedUri: '',\n targetDuration: attributes.duration,\n discontinuityStarts: discontinuityStarts,\n timelineStarts: attributes.timelineStarts,\n segments: segments\n };\n\n if (attributes.contentProtection) {\n playlist.contentProtection = attributes.contentProtection;\n }\n\n if (sidx) {\n playlist.sidx = sidx;\n }\n\n return playlist;\n};\n\nvar videoOnly = function videoOnly(_ref4) {\n var attributes = _ref4.attributes;\n return attributes.mimeType === 'video/mp4' || attributes.mimeType === 'video/webm' || attributes.contentType === 'video';\n};\n\nvar audioOnly = function audioOnly(_ref5) {\n var attributes = _ref5.attributes;\n return attributes.mimeType === 'audio/mp4' || attributes.mimeType === 'audio/webm' || attributes.contentType === 'audio';\n};\n\nvar vttOnly = function vttOnly(_ref6) {\n var attributes = _ref6.attributes;\n return attributes.mimeType === 'text/vtt' || attributes.contentType === 'text';\n};\n/**\n * Contains start and timeline properties denoting a timeline start. For DASH, these will\n * be the same number.\n *\n * @typedef {Object} TimelineStart\n * @property {number} start - the start time of the timeline\n * @property {number} timeline - the timeline number\n */\n\n/**\n * Adds appropriate media and discontinuity sequence values to the segments and playlists.\n *\n * Throughout mpd-parser, the `number` attribute is used in relation to `startNumber`, a\n * DASH specific attribute used in constructing segment URI's from templates. However, from\n * an HLS perspective, the `number` attribute on a segment would be its `mediaSequence`\n * value, which should start at the original media sequence value (or 0) and increment by 1\n * for each segment thereafter. Since DASH's `startNumber` values are independent per\n * period, it doesn't make sense to use it for `number`. Instead, assume everything starts\n * from a 0 mediaSequence value and increment from there.\n *\n * Note that VHS currently doesn't use the `number` property, but it can be helpful for\n * debugging and making sense of the manifest.\n *\n * For live playlists, to account for values increasing in manifests when periods are\n * removed on refreshes, merging logic should be used to update the numbers to their\n * appropriate values (to ensure they're sequential and increasing).\n *\n * @param {Object[]} playlists - the playlists to update\n * @param {TimelineStart[]} timelineStarts - the timeline starts for the manifest\n */\n\n\nvar addMediaSequenceValues = function addMediaSequenceValues(playlists, timelineStarts) {\n // increment all segments sequentially\n playlists.forEach(function (playlist) {\n playlist.mediaSequence = 0;\n playlist.discontinuitySequence = findIndex(timelineStarts, function (_ref7) {\n var timeline = _ref7.timeline;\n return timeline === playlist.timeline;\n });\n\n if (!playlist.segments) {\n return;\n }\n\n playlist.segments.forEach(function (segment, index) {\n segment.number = index;\n });\n });\n};\n/**\n * Given a media group object, flattens all playlists within the media group into a single\n * array.\n *\n * @param {Object} mediaGroupObject - the media group object\n *\n * @return {Object[]}\n * The media group playlists\n */\n\nvar flattenMediaGroupPlaylists = function flattenMediaGroupPlaylists(mediaGroupObject) {\n if (!mediaGroupObject) {\n return [];\n }\n\n return Object.keys(mediaGroupObject).reduce(function (acc, label) {\n var labelContents = mediaGroupObject[label];\n return acc.concat(labelContents.playlists);\n }, []);\n};\nvar toM3u8 = function toM3u8(_ref8) {\n var _mediaGroups;\n\n var dashPlaylists = _ref8.dashPlaylists,\n locations = _ref8.locations,\n _ref8$sidxMapping = _ref8.sidxMapping,\n sidxMapping = _ref8$sidxMapping === void 0 ? {} : _ref8$sidxMapping,\n previousManifest = _ref8.previousManifest;\n\n if (!dashPlaylists.length) {\n return {};\n } // grab all main manifest attributes\n\n\n var _dashPlaylists$0$attr = dashPlaylists[0].attributes,\n duration = _dashPlaylists$0$attr.sourceDuration,\n type = _dashPlaylists$0$attr.type,\n suggestedPresentationDelay = _dashPlaylists$0$attr.suggestedPresentationDelay,\n minimumUpdatePeriod = _dashPlaylists$0$attr.minimumUpdatePeriod;\n var videoPlaylists = mergeDiscontiguousPlaylists(dashPlaylists.filter(videoOnly)).map(formatVideoPlaylist);\n var audioPlaylists = mergeDiscontiguousPlaylists(dashPlaylists.filter(audioOnly));\n var vttPlaylists = mergeDiscontiguousPlaylists(dashPlaylists.filter(vttOnly));\n var captions = dashPlaylists.map(function (playlist) {\n return playlist.attributes.captionServices;\n }).filter(Boolean);\n var manifest = {\n allowCache: true,\n discontinuityStarts: [],\n segments: [],\n endList: true,\n mediaGroups: (_mediaGroups = {\n AUDIO: {},\n VIDEO: {}\n }, _mediaGroups['CLOSED-CAPTIONS'] = {}, _mediaGroups.SUBTITLES = {}, _mediaGroups),\n uri: '',\n duration: duration,\n playlists: addSidxSegmentsToPlaylists(videoPlaylists, sidxMapping)\n };\n\n if (minimumUpdatePeriod >= 0) {\n manifest.minimumUpdatePeriod = minimumUpdatePeriod * 1000;\n }\n\n if (locations) {\n manifest.locations = locations;\n }\n\n if (type === 'dynamic') {\n manifest.suggestedPresentationDelay = suggestedPresentationDelay;\n }\n\n var isAudioOnly = manifest.playlists.length === 0;\n var organizedAudioGroup = audioPlaylists.length ? organizeAudioPlaylists(audioPlaylists, sidxMapping, isAudioOnly) : null;\n var organizedVttGroup = vttPlaylists.length ? organizeVttPlaylists(vttPlaylists, sidxMapping) : null;\n var formattedPlaylists = videoPlaylists.concat(flattenMediaGroupPlaylists(organizedAudioGroup), flattenMediaGroupPlaylists(organizedVttGroup));\n var playlistTimelineStarts = formattedPlaylists.map(function (_ref9) {\n var timelineStarts = _ref9.timelineStarts;\n return timelineStarts;\n });\n manifest.timelineStarts = getUniqueTimelineStarts(playlistTimelineStarts);\n addMediaSequenceValues(formattedPlaylists, manifest.timelineStarts);\n\n if (organizedAudioGroup) {\n manifest.mediaGroups.AUDIO.audio = organizedAudioGroup;\n }\n\n if (organizedVttGroup) {\n manifest.mediaGroups.SUBTITLES.subs = organizedVttGroup;\n }\n\n if (captions.length) {\n manifest.mediaGroups['CLOSED-CAPTIONS'].cc = organizeCaptionServices(captions);\n }\n\n if (previousManifest) {\n return positionManifestOnTimeline({\n oldManifest: previousManifest,\n newManifest: manifest\n });\n }\n\n return manifest;\n};\n\n/**\n * Calculates the R (repetition) value for a live stream (for the final segment\n * in a manifest where the r value is negative 1)\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {number} time\n * current time (typically the total time up until the final segment)\n * @param {number} duration\n * duration property for the given \n *\n * @return {number}\n * R value to reach the end of the given period\n */\nvar getLiveRValue = function getLiveRValue(attributes, time, duration) {\n var NOW = attributes.NOW,\n clientOffset = attributes.clientOffset,\n availabilityStartTime = attributes.availabilityStartTime,\n _attributes$timescale = attributes.timescale,\n timescale = _attributes$timescale === void 0 ? 1 : _attributes$timescale,\n _attributes$periodSta = attributes.periodStart,\n periodStart = _attributes$periodSta === void 0 ? 0 : _attributes$periodSta,\n _attributes$minimumUp = attributes.minimumUpdatePeriod,\n minimumUpdatePeriod = _attributes$minimumUp === void 0 ? 0 : _attributes$minimumUp;\n var now = (NOW + clientOffset) / 1000;\n var periodStartWC = availabilityStartTime + periodStart;\n var periodEndWC = now + minimumUpdatePeriod;\n var periodDuration = periodEndWC - periodStartWC;\n return Math.ceil((periodDuration * timescale - time) / duration);\n};\n/**\n * Uses information provided by SegmentTemplate.SegmentTimeline to determine segment\n * timing and duration\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object[]} segmentTimeline\n * List of objects representing the attributes of each S element contained within\n *\n * @return {{number: number, duration: number, time: number, timeline: number}[]}\n * List of Objects with segment timing and duration info\n */\n\n\nvar parseByTimeline = function parseByTimeline(attributes, segmentTimeline) {\n var type = attributes.type,\n _attributes$minimumUp2 = attributes.minimumUpdatePeriod,\n minimumUpdatePeriod = _attributes$minimumUp2 === void 0 ? 0 : _attributes$minimumUp2,\n _attributes$media = attributes.media,\n media = _attributes$media === void 0 ? '' : _attributes$media,\n sourceDuration = attributes.sourceDuration,\n _attributes$timescale2 = attributes.timescale,\n timescale = _attributes$timescale2 === void 0 ? 1 : _attributes$timescale2,\n _attributes$startNumb = attributes.startNumber,\n startNumber = _attributes$startNumb === void 0 ? 1 : _attributes$startNumb,\n timeline = attributes.periodStart;\n var segments = [];\n var time = -1;\n\n for (var sIndex = 0; sIndex < segmentTimeline.length; sIndex++) {\n var S = segmentTimeline[sIndex];\n var duration = S.d;\n var repeat = S.r || 0;\n var segmentTime = S.t || 0;\n\n if (time < 0) {\n // first segment\n time = segmentTime;\n }\n\n if (segmentTime && segmentTime > time) {\n // discontinuity\n // TODO: How to handle this type of discontinuity\n // timeline++ here would treat it like HLS discontuity and content would\n // get appended without gap\n // E.G.\n // \n // \n // \n // \n // would have $Time$ values of [0, 1, 2, 5]\n // should this be appened at time positions [0, 1, 2, 3],(#EXT-X-DISCONTINUITY)\n // or [0, 1, 2, gap, gap, 5]? (#EXT-X-GAP)\n // does the value of sourceDuration consider this when calculating arbitrary\n // negative @r repeat value?\n // E.G. Same elements as above with this added at the end\n // \n // with a sourceDuration of 10\n // Would the 2 gaps be included in the time duration calculations resulting in\n // 8 segments with $Time$ values of [0, 1, 2, 5, 6, 7, 8, 9] or 10 segments\n // with $Time$ values of [0, 1, 2, 5, 6, 7, 8, 9, 10, 11] ?\n time = segmentTime;\n }\n\n var count = void 0;\n\n if (repeat < 0) {\n var nextS = sIndex + 1;\n\n if (nextS === segmentTimeline.length) {\n // last segment\n if (type === 'dynamic' && minimumUpdatePeriod > 0 && media.indexOf('$Number$') > 0) {\n count = getLiveRValue(attributes, time, duration);\n } else {\n // TODO: This may be incorrect depending on conclusion of TODO above\n count = (sourceDuration * timescale - time) / duration;\n }\n } else {\n count = (segmentTimeline[nextS].t - time) / duration;\n }\n } else {\n count = repeat + 1;\n }\n\n var end = startNumber + segments.length + count;\n var number = startNumber + segments.length;\n\n while (number < end) {\n segments.push({\n number: number,\n duration: duration / timescale,\n time: time,\n timeline: timeline\n });\n time += duration;\n number++;\n }\n }\n\n return segments;\n};\n\nvar identifierPattern = /\\$([A-z]*)(?:(%0)([0-9]+)d)?\\$/g;\n/**\n * Replaces template identifiers with corresponding values. To be used as the callback\n * for String.prototype.replace\n *\n * @name replaceCallback\n * @function\n * @param {string} match\n * Entire match of identifier\n * @param {string} identifier\n * Name of matched identifier\n * @param {string} format\n * Format tag string. Its presence indicates that padding is expected\n * @param {string} width\n * Desired length of the replaced value. Values less than this width shall be left\n * zero padded\n * @return {string}\n * Replacement for the matched identifier\n */\n\n/**\n * Returns a function to be used as a callback for String.prototype.replace to replace\n * template identifiers\n *\n * @param {Obect} values\n * Object containing values that shall be used to replace known identifiers\n * @param {number} values.RepresentationID\n * Value of the Representation@id attribute\n * @param {number} values.Number\n * Number of the corresponding segment\n * @param {number} values.Bandwidth\n * Value of the Representation@bandwidth attribute.\n * @param {number} values.Time\n * Timestamp value of the corresponding segment\n * @return {replaceCallback}\n * Callback to be used with String.prototype.replace to replace identifiers\n */\n\nvar identifierReplacement = function identifierReplacement(values) {\n return function (match, identifier, format, width) {\n if (match === '$$') {\n // escape sequence\n return '$';\n }\n\n if (typeof values[identifier] === 'undefined') {\n return match;\n }\n\n var value = '' + values[identifier];\n\n if (identifier === 'RepresentationID') {\n // Format tag shall not be present with RepresentationID\n return value;\n }\n\n if (!format) {\n width = 1;\n } else {\n width = parseInt(width, 10);\n }\n\n if (value.length >= width) {\n return value;\n }\n\n return \"\" + new Array(width - value.length + 1).join('0') + value;\n };\n};\n/**\n * Constructs a segment url from a template string\n *\n * @param {string} url\n * Template string to construct url from\n * @param {Obect} values\n * Object containing values that shall be used to replace known identifiers\n * @param {number} values.RepresentationID\n * Value of the Representation@id attribute\n * @param {number} values.Number\n * Number of the corresponding segment\n * @param {number} values.Bandwidth\n * Value of the Representation@bandwidth attribute.\n * @param {number} values.Time\n * Timestamp value of the corresponding segment\n * @return {string}\n * Segment url with identifiers replaced\n */\n\nvar constructTemplateUrl = function constructTemplateUrl(url, values) {\n return url.replace(identifierPattern, identifierReplacement(values));\n};\n/**\n * Generates a list of objects containing timing and duration information about each\n * segment needed to generate segment uris and the complete segment object\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object[]|undefined} segmentTimeline\n * List of objects representing the attributes of each S element contained within\n * the SegmentTimeline element\n * @return {{number: number, duration: number, time: number, timeline: number}[]}\n * List of Objects with segment timing and duration info\n */\n\nvar parseTemplateInfo = function parseTemplateInfo(attributes, segmentTimeline) {\n if (!attributes.duration && !segmentTimeline) {\n // if neither @duration or SegmentTimeline are present, then there shall be exactly\n // one media segment\n return [{\n number: attributes.startNumber || 1,\n duration: attributes.sourceDuration,\n time: 0,\n timeline: attributes.periodStart\n }];\n }\n\n if (attributes.duration) {\n return parseByDuration(attributes);\n }\n\n return parseByTimeline(attributes, segmentTimeline);\n};\n/**\n * Generates a list of segments using information provided by the SegmentTemplate element\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object[]|undefined} segmentTimeline\n * List of objects representing the attributes of each S element contained within\n * the SegmentTimeline element\n * @return {Object[]}\n * List of segment objects\n */\n\nvar segmentsFromTemplate = function segmentsFromTemplate(attributes, segmentTimeline) {\n var templateValues = {\n RepresentationID: attributes.id,\n Bandwidth: attributes.bandwidth || 0\n };\n var _attributes$initializ = attributes.initialization,\n initialization = _attributes$initializ === void 0 ? {\n sourceURL: '',\n range: ''\n } : _attributes$initializ;\n var mapSegment = urlTypeToSegment({\n baseUrl: attributes.baseUrl,\n source: constructTemplateUrl(initialization.sourceURL, templateValues),\n range: initialization.range\n });\n var segments = parseTemplateInfo(attributes, segmentTimeline);\n return segments.map(function (segment) {\n templateValues.Number = segment.number;\n templateValues.Time = segment.time;\n var uri = constructTemplateUrl(attributes.media || '', templateValues); // See DASH spec section 5.3.9.2.2\n // - if timescale isn't present on any level, default to 1.\n\n var timescale = attributes.timescale || 1; // - if presentationTimeOffset isn't present on any level, default to 0\n\n var presentationTimeOffset = attributes.presentationTimeOffset || 0;\n var presentationTime = // Even if the @t attribute is not specified for the segment, segment.time is\n // calculated in mpd-parser prior to this, so it's assumed to be available.\n attributes.periodStart + (segment.time - presentationTimeOffset) / timescale;\n var map = {\n uri: uri,\n timeline: segment.timeline,\n duration: segment.duration,\n resolvedUri: resolveUrl(attributes.baseUrl || '', uri),\n map: mapSegment,\n number: segment.number,\n presentationTime: presentationTime\n };\n return map;\n });\n};\n\n/**\n * Converts a (of type URLType from the DASH spec 5.3.9.2 Table 14)\n * to an object that matches the output of a segment in videojs/mpd-parser\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object} segmentUrl\n * node to translate into a segment object\n * @return {Object} translated segment object\n */\n\nvar SegmentURLToSegmentObject = function SegmentURLToSegmentObject(attributes, segmentUrl) {\n var baseUrl = attributes.baseUrl,\n _attributes$initializ = attributes.initialization,\n initialization = _attributes$initializ === void 0 ? {} : _attributes$initializ;\n var initSegment = urlTypeToSegment({\n baseUrl: baseUrl,\n source: initialization.sourceURL,\n range: initialization.range\n });\n var segment = urlTypeToSegment({\n baseUrl: baseUrl,\n source: segmentUrl.media,\n range: segmentUrl.mediaRange\n });\n segment.map = initSegment;\n return segment;\n};\n/**\n * Generates a list of segments using information provided by the SegmentList element\n * SegmentList (DASH SPEC Section 5.3.9.3.2) contains a set of nodes. Each\n * node should be translated into segment.\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object[]|undefined} segmentTimeline\n * List of objects representing the attributes of each S element contained within\n * the SegmentTimeline element\n * @return {Object.} list of segments\n */\n\n\nvar segmentsFromList = function segmentsFromList(attributes, segmentTimeline) {\n var duration = attributes.duration,\n _attributes$segmentUr = attributes.segmentUrls,\n segmentUrls = _attributes$segmentUr === void 0 ? [] : _attributes$segmentUr,\n periodStart = attributes.periodStart; // Per spec (5.3.9.2.1) no way to determine segment duration OR\n // if both SegmentTimeline and @duration are defined, it is outside of spec.\n\n if (!duration && !segmentTimeline || duration && segmentTimeline) {\n throw new Error(errors.SEGMENT_TIME_UNSPECIFIED);\n }\n\n var segmentUrlMap = segmentUrls.map(function (segmentUrlObject) {\n return SegmentURLToSegmentObject(attributes, segmentUrlObject);\n });\n var segmentTimeInfo;\n\n if (duration) {\n segmentTimeInfo = parseByDuration(attributes);\n }\n\n if (segmentTimeline) {\n segmentTimeInfo = parseByTimeline(attributes, segmentTimeline);\n }\n\n var segments = segmentTimeInfo.map(function (segmentTime, index) {\n if (segmentUrlMap[index]) {\n var segment = segmentUrlMap[index]; // See DASH spec section 5.3.9.2.2\n // - if timescale isn't present on any level, default to 1.\n\n var timescale = attributes.timescale || 1; // - if presentationTimeOffset isn't present on any level, default to 0\n\n var presentationTimeOffset = attributes.presentationTimeOffset || 0;\n segment.timeline = segmentTime.timeline;\n segment.duration = segmentTime.duration;\n segment.number = segmentTime.number;\n segment.presentationTime = periodStart + (segmentTime.time - presentationTimeOffset) / timescale;\n return segment;\n } // Since we're mapping we should get rid of any blank segments (in case\n // the given SegmentTimeline is handling for more elements than we have\n // SegmentURLs for).\n\n }).filter(function (segment) {\n return segment;\n });\n return segments;\n};\n\nvar generateSegments = function generateSegments(_ref) {\n var attributes = _ref.attributes,\n segmentInfo = _ref.segmentInfo;\n var segmentAttributes;\n var segmentsFn;\n\n if (segmentInfo.template) {\n segmentsFn = segmentsFromTemplate;\n segmentAttributes = merge(attributes, segmentInfo.template);\n } else if (segmentInfo.base) {\n segmentsFn = segmentsFromBase;\n segmentAttributes = merge(attributes, segmentInfo.base);\n } else if (segmentInfo.list) {\n segmentsFn = segmentsFromList;\n segmentAttributes = merge(attributes, segmentInfo.list);\n }\n\n var segmentsInfo = {\n attributes: attributes\n };\n\n if (!segmentsFn) {\n return segmentsInfo;\n }\n\n var segments = segmentsFn(segmentAttributes, segmentInfo.segmentTimeline); // The @duration attribute will be used to determin the playlist's targetDuration which\n // must be in seconds. Since we've generated the segment list, we no longer need\n // @duration to be in @timescale units, so we can convert it here.\n\n if (segmentAttributes.duration) {\n var _segmentAttributes = segmentAttributes,\n duration = _segmentAttributes.duration,\n _segmentAttributes$ti = _segmentAttributes.timescale,\n timescale = _segmentAttributes$ti === void 0 ? 1 : _segmentAttributes$ti;\n segmentAttributes.duration = duration / timescale;\n } else if (segments.length) {\n // if there is no @duration attribute, use the largest segment duration as\n // as target duration\n segmentAttributes.duration = segments.reduce(function (max, segment) {\n return Math.max(max, Math.ceil(segment.duration));\n }, 0);\n } else {\n segmentAttributes.duration = 0;\n }\n\n segmentsInfo.attributes = segmentAttributes;\n segmentsInfo.segments = segments; // This is a sidx box without actual segment information\n\n if (segmentInfo.base && segmentAttributes.indexRange) {\n segmentsInfo.sidx = segments[0];\n segmentsInfo.segments = [];\n }\n\n return segmentsInfo;\n};\nvar toPlaylists = function toPlaylists(representations) {\n return representations.map(generateSegments);\n};\n\nvar findChildren = function findChildren(element, name) {\n return from(element.childNodes).filter(function (_ref) {\n var tagName = _ref.tagName;\n return tagName === name;\n });\n};\nvar getContent = function getContent(element) {\n return element.textContent.trim();\n};\n\nvar parseDuration = function parseDuration(str) {\n var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;\n var SECONDS_IN_MONTH = 30 * 24 * 60 * 60;\n var SECONDS_IN_DAY = 24 * 60 * 60;\n var SECONDS_IN_HOUR = 60 * 60;\n var SECONDS_IN_MIN = 60; // P10Y10M10DT10H10M10.1S\n\n var durationRegex = /P(?:(\\d*)Y)?(?:(\\d*)M)?(?:(\\d*)D)?(?:T(?:(\\d*)H)?(?:(\\d*)M)?(?:([\\d.]*)S)?)?/;\n var match = durationRegex.exec(str);\n\n if (!match) {\n return 0;\n }\n\n var _match$slice = match.slice(1),\n year = _match$slice[0],\n month = _match$slice[1],\n day = _match$slice[2],\n hour = _match$slice[3],\n minute = _match$slice[4],\n second = _match$slice[5];\n\n return parseFloat(year || 0) * SECONDS_IN_YEAR + parseFloat(month || 0) * SECONDS_IN_MONTH + parseFloat(day || 0) * SECONDS_IN_DAY + parseFloat(hour || 0) * SECONDS_IN_HOUR + parseFloat(minute || 0) * SECONDS_IN_MIN + parseFloat(second || 0);\n};\nvar parseDate = function parseDate(str) {\n // Date format without timezone according to ISO 8601\n // YYY-MM-DDThh:mm:ss.ssssss\n var dateRegex = /^\\d+-\\d+-\\d+T\\d+:\\d+:\\d+(\\.\\d+)?$/; // If the date string does not specifiy a timezone, we must specifiy UTC. This is\n // expressed by ending with 'Z'\n\n if (dateRegex.test(str)) {\n str += 'Z';\n }\n\n return Date.parse(str);\n};\n\nvar parsers = {\n /**\n * Specifies the duration of the entire Media Presentation. Format is a duration string\n * as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n mediaPresentationDuration: function mediaPresentationDuration(value) {\n return parseDuration(value);\n },\n\n /**\n * Specifies the Segment availability start time for all Segments referred to in this\n * MPD. For a dynamic manifest, it specifies the anchor for the earliest availability\n * time. Format is a date string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The date as seconds from unix epoch\n */\n availabilityStartTime: function availabilityStartTime(value) {\n return parseDate(value) / 1000;\n },\n\n /**\n * Specifies the smallest period between potential changes to the MPD. Format is a\n * duration string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n minimumUpdatePeriod: function minimumUpdatePeriod(value) {\n return parseDuration(value);\n },\n\n /**\n * Specifies the suggested presentation delay. Format is a\n * duration string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n suggestedPresentationDelay: function suggestedPresentationDelay(value) {\n return parseDuration(value);\n },\n\n /**\n * specifices the type of mpd. Can be either \"static\" or \"dynamic\"\n *\n * @param {string} value\n * value of attribute as a string\n *\n * @return {string}\n * The type as a string\n */\n type: function type(value) {\n return value;\n },\n\n /**\n * Specifies the duration of the smallest time shifting buffer for any Representation\n * in the MPD. Format is a duration string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n timeShiftBufferDepth: function timeShiftBufferDepth(value) {\n return parseDuration(value);\n },\n\n /**\n * Specifies the PeriodStart time of the Period relative to the availabilityStarttime.\n * Format is a duration string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n start: function start(value) {\n return parseDuration(value);\n },\n\n /**\n * Specifies the width of the visual presentation\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed width\n */\n width: function width(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the height of the visual presentation\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed height\n */\n height: function height(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the bitrate of the representation\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed bandwidth\n */\n bandwidth: function bandwidth(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the number of the first Media Segment in this Representation in the Period\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed number\n */\n startNumber: function startNumber(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the timescale in units per seconds\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed timescale\n */\n timescale: function timescale(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the presentationTimeOffset.\n *\n * @param {string} value\n * value of the attribute as a string\n *\n * @return {number}\n * The parsed presentationTimeOffset\n */\n presentationTimeOffset: function presentationTimeOffset(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the constant approximate Segment duration\n * NOTE: The element also contains an @duration attribute. This duration\n * specifies the duration of the Period. This attribute is currently not\n * supported by the rest of the parser, however we still check for it to prevent\n * errors.\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed duration\n */\n duration: function duration(value) {\n var parsedValue = parseInt(value, 10);\n\n if (isNaN(parsedValue)) {\n return parseDuration(value);\n }\n\n return parsedValue;\n },\n\n /**\n * Specifies the Segment duration, in units of the value of the @timescale.\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed duration\n */\n d: function d(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the MPD start time, in @timescale units, the first Segment in the series\n * starts relative to the beginning of the Period\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed time\n */\n t: function t(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the repeat count of the number of following contiguous Segments with the\n * same duration expressed by the value of @d\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed number\n */\n r: function r(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Default parser for all other attributes. Acts as a no-op and just returns the value\n * as a string\n *\n * @param {string} value\n * value of attribute as a string\n * @return {string}\n * Unparsed value\n */\n DEFAULT: function DEFAULT(value) {\n return value;\n }\n};\n/**\n * Gets all the attributes and values of the provided node, parses attributes with known\n * types, and returns an object with attribute names mapped to values.\n *\n * @param {Node} el\n * The node to parse attributes from\n * @return {Object}\n * Object with all attributes of el parsed\n */\n\nvar parseAttributes = function parseAttributes(el) {\n if (!(el && el.attributes)) {\n return {};\n }\n\n return from(el.attributes).reduce(function (a, e) {\n var parseFn = parsers[e.name] || parsers.DEFAULT;\n a[e.name] = parseFn(e.value);\n return a;\n }, {});\n};\n\nvar keySystemsMap = {\n 'urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b': 'org.w3.clearkey',\n 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed': 'com.widevine.alpha',\n 'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95': 'com.microsoft.playready',\n 'urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb': 'com.adobe.primetime'\n};\n/**\n * Builds a list of urls that is the product of the reference urls and BaseURL values\n *\n * @param {string[]} referenceUrls\n * List of reference urls to resolve to\n * @param {Node[]} baseUrlElements\n * List of BaseURL nodes from the mpd\n * @return {string[]}\n * List of resolved urls\n */\n\nvar buildBaseUrls = function buildBaseUrls(referenceUrls, baseUrlElements) {\n if (!baseUrlElements.length) {\n return referenceUrls;\n }\n\n return flatten(referenceUrls.map(function (reference) {\n return baseUrlElements.map(function (baseUrlElement) {\n return resolveUrl(reference, getContent(baseUrlElement));\n });\n }));\n};\n/**\n * Contains all Segment information for its containing AdaptationSet\n *\n * @typedef {Object} SegmentInformation\n * @property {Object|undefined} template\n * Contains the attributes for the SegmentTemplate node\n * @property {Object[]|undefined} segmentTimeline\n * Contains a list of atrributes for each S node within the SegmentTimeline node\n * @property {Object|undefined} list\n * Contains the attributes for the SegmentList node\n * @property {Object|undefined} base\n * Contains the attributes for the SegmentBase node\n */\n\n/**\n * Returns all available Segment information contained within the AdaptationSet node\n *\n * @param {Node} adaptationSet\n * The AdaptationSet node to get Segment information from\n * @return {SegmentInformation}\n * The Segment information contained within the provided AdaptationSet\n */\n\nvar getSegmentInformation = function getSegmentInformation(adaptationSet) {\n var segmentTemplate = findChildren(adaptationSet, 'SegmentTemplate')[0];\n var segmentList = findChildren(adaptationSet, 'SegmentList')[0];\n var segmentUrls = segmentList && findChildren(segmentList, 'SegmentURL').map(function (s) {\n return merge({\n tag: 'SegmentURL'\n }, parseAttributes(s));\n });\n var segmentBase = findChildren(adaptationSet, 'SegmentBase')[0];\n var segmentTimelineParentNode = segmentList || segmentTemplate;\n var segmentTimeline = segmentTimelineParentNode && findChildren(segmentTimelineParentNode, 'SegmentTimeline')[0];\n var segmentInitializationParentNode = segmentList || segmentBase || segmentTemplate;\n var segmentInitialization = segmentInitializationParentNode && findChildren(segmentInitializationParentNode, 'Initialization')[0]; // SegmentTemplate is handled slightly differently, since it can have both\n // @initialization and an node. @initialization can be templated,\n // while the node can have a url and range specified. If the has\n // both @initialization and an subelement we opt to override with\n // the node, as this interaction is not defined in the spec.\n\n var template = segmentTemplate && parseAttributes(segmentTemplate);\n\n if (template && segmentInitialization) {\n template.initialization = segmentInitialization && parseAttributes(segmentInitialization);\n } else if (template && template.initialization) {\n // If it is @initialization we convert it to an object since this is the format that\n // later functions will rely on for the initialization segment. This is only valid\n // for \n template.initialization = {\n sourceURL: template.initialization\n };\n }\n\n var segmentInfo = {\n template: template,\n segmentTimeline: segmentTimeline && findChildren(segmentTimeline, 'S').map(function (s) {\n return parseAttributes(s);\n }),\n list: segmentList && merge(parseAttributes(segmentList), {\n segmentUrls: segmentUrls,\n initialization: parseAttributes(segmentInitialization)\n }),\n base: segmentBase && merge(parseAttributes(segmentBase), {\n initialization: parseAttributes(segmentInitialization)\n })\n };\n Object.keys(segmentInfo).forEach(function (key) {\n if (!segmentInfo[key]) {\n delete segmentInfo[key];\n }\n });\n return segmentInfo;\n};\n/**\n * Contains Segment information and attributes needed to construct a Playlist object\n * from a Representation\n *\n * @typedef {Object} RepresentationInformation\n * @property {SegmentInformation} segmentInfo\n * Segment information for this Representation\n * @property {Object} attributes\n * Inherited attributes for this Representation\n */\n\n/**\n * Maps a Representation node to an object containing Segment information and attributes\n *\n * @name inheritBaseUrlsCallback\n * @function\n * @param {Node} representation\n * Representation node from the mpd\n * @return {RepresentationInformation}\n * Representation information needed to construct a Playlist object\n */\n\n/**\n * Returns a callback for Array.prototype.map for mapping Representation nodes to\n * Segment information and attributes using inherited BaseURL nodes.\n *\n * @param {Object} adaptationSetAttributes\n * Contains attributes inherited by the AdaptationSet\n * @param {string[]} adaptationSetBaseUrls\n * Contains list of resolved base urls inherited by the AdaptationSet\n * @param {SegmentInformation} adaptationSetSegmentInfo\n * Contains Segment information for the AdaptationSet\n * @return {inheritBaseUrlsCallback}\n * Callback map function\n */\n\nvar inheritBaseUrls = function inheritBaseUrls(adaptationSetAttributes, adaptationSetBaseUrls, adaptationSetSegmentInfo) {\n return function (representation) {\n var repBaseUrlElements = findChildren(representation, 'BaseURL');\n var repBaseUrls = buildBaseUrls(adaptationSetBaseUrls, repBaseUrlElements);\n var attributes = merge(adaptationSetAttributes, parseAttributes(representation));\n var representationSegmentInfo = getSegmentInformation(representation);\n return repBaseUrls.map(function (baseUrl) {\n return {\n segmentInfo: merge(adaptationSetSegmentInfo, representationSegmentInfo),\n attributes: merge(attributes, {\n baseUrl: baseUrl\n })\n };\n });\n };\n};\n/**\n * Tranforms a series of content protection nodes to\n * an object containing pssh data by key system\n *\n * @param {Node[]} contentProtectionNodes\n * Content protection nodes\n * @return {Object}\n * Object containing pssh data by key system\n */\n\nvar generateKeySystemInformation = function generateKeySystemInformation(contentProtectionNodes) {\n return contentProtectionNodes.reduce(function (acc, node) {\n var attributes = parseAttributes(node); // Although it could be argued that according to the UUID RFC spec the UUID string (a-f chars) should be generated\n // as a lowercase string it also mentions it should be treated as case-insensitive on input. Since the key system\n // UUIDs in the keySystemsMap are hardcoded as lowercase in the codebase there isn't any reason not to do\n // .toLowerCase() on the input UUID string from the manifest (at least I could not think of one).\n\n if (attributes.schemeIdUri) {\n attributes.schemeIdUri = attributes.schemeIdUri.toLowerCase();\n }\n\n var keySystem = keySystemsMap[attributes.schemeIdUri];\n\n if (keySystem) {\n acc[keySystem] = {\n attributes: attributes\n };\n var psshNode = findChildren(node, 'cenc:pssh')[0];\n\n if (psshNode) {\n var pssh = getContent(psshNode);\n acc[keySystem].pssh = pssh && decodeB64ToUint8Array(pssh);\n }\n }\n\n return acc;\n }, {});\n}; // defined in ANSI_SCTE 214-1 2016\n\n\nvar parseCaptionServiceMetadata = function parseCaptionServiceMetadata(service) {\n // 608 captions\n if (service.schemeIdUri === 'urn:scte:dash:cc:cea-608:2015') {\n var values = typeof service.value !== 'string' ? [] : service.value.split(';');\n return values.map(function (value) {\n var channel;\n var language; // default language to value\n\n language = value;\n\n if (/^CC\\d=/.test(value)) {\n var _value$split = value.split('=');\n\n channel = _value$split[0];\n language = _value$split[1];\n } else if (/^CC\\d$/.test(value)) {\n channel = value;\n }\n\n return {\n channel: channel,\n language: language\n };\n });\n } else if (service.schemeIdUri === 'urn:scte:dash:cc:cea-708:2015') {\n var _values = typeof service.value !== 'string' ? [] : service.value.split(';');\n\n return _values.map(function (value) {\n var flags = {\n // service or channel number 1-63\n 'channel': undefined,\n // language is a 3ALPHA per ISO 639.2/B\n // field is required\n 'language': undefined,\n // BIT 1/0 or ?\n // default value is 1, meaning 16:9 aspect ratio, 0 is 4:3, ? is unknown\n 'aspectRatio': 1,\n // BIT 1/0\n // easy reader flag indicated the text is tailed to the needs of beginning readers\n // default 0, or off\n 'easyReader': 0,\n // BIT 1/0\n // If 3d metadata is present (CEA-708.1) then 1\n // default 0\n '3D': 0\n };\n\n if (/=/.test(value)) {\n var _value$split2 = value.split('='),\n channel = _value$split2[0],\n _value$split2$ = _value$split2[1],\n opts = _value$split2$ === void 0 ? '' : _value$split2$;\n\n flags.channel = channel;\n flags.language = value;\n opts.split(',').forEach(function (opt) {\n var _opt$split = opt.split(':'),\n name = _opt$split[0],\n val = _opt$split[1];\n\n if (name === 'lang') {\n flags.language = val; // er for easyReadery\n } else if (name === 'er') {\n flags.easyReader = Number(val); // war for wide aspect ratio\n } else if (name === 'war') {\n flags.aspectRatio = Number(val);\n } else if (name === '3D') {\n flags['3D'] = Number(val);\n }\n });\n } else {\n flags.language = value;\n }\n\n if (flags.channel) {\n flags.channel = 'SERVICE' + flags.channel;\n }\n\n return flags;\n });\n }\n};\n/**\n * Maps an AdaptationSet node to a list of Representation information objects\n *\n * @name toRepresentationsCallback\n * @function\n * @param {Node} adaptationSet\n * AdaptationSet node from the mpd\n * @return {RepresentationInformation[]}\n * List of objects containing Representaion information\n */\n\n/**\n * Returns a callback for Array.prototype.map for mapping AdaptationSet nodes to a list of\n * Representation information objects\n *\n * @param {Object} periodAttributes\n * Contains attributes inherited by the Period\n * @param {string[]} periodBaseUrls\n * Contains list of resolved base urls inherited by the Period\n * @param {string[]} periodSegmentInfo\n * Contains Segment Information at the period level\n * @return {toRepresentationsCallback}\n * Callback map function\n */\n\nvar toRepresentations = function toRepresentations(periodAttributes, periodBaseUrls, periodSegmentInfo) {\n return function (adaptationSet) {\n var adaptationSetAttributes = parseAttributes(adaptationSet);\n var adaptationSetBaseUrls = buildBaseUrls(periodBaseUrls, findChildren(adaptationSet, 'BaseURL'));\n var role = findChildren(adaptationSet, 'Role')[0];\n var roleAttributes = {\n role: parseAttributes(role)\n };\n var attrs = merge(periodAttributes, adaptationSetAttributes, roleAttributes);\n var accessibility = findChildren(adaptationSet, 'Accessibility')[0];\n var captionServices = parseCaptionServiceMetadata(parseAttributes(accessibility));\n\n if (captionServices) {\n attrs = merge(attrs, {\n captionServices: captionServices\n });\n }\n\n var label = findChildren(adaptationSet, 'Label')[0];\n\n if (label && label.childNodes.length) {\n var labelVal = label.childNodes[0].nodeValue.trim();\n attrs = merge(attrs, {\n label: labelVal\n });\n }\n\n var contentProtection = generateKeySystemInformation(findChildren(adaptationSet, 'ContentProtection'));\n\n if (Object.keys(contentProtection).length) {\n attrs = merge(attrs, {\n contentProtection: contentProtection\n });\n }\n\n var segmentInfo = getSegmentInformation(adaptationSet);\n var representations = findChildren(adaptationSet, 'Representation');\n var adaptationSetSegmentInfo = merge(periodSegmentInfo, segmentInfo);\n return flatten(representations.map(inheritBaseUrls(attrs, adaptationSetBaseUrls, adaptationSetSegmentInfo)));\n };\n};\n/**\n * Contains all period information for mapping nodes onto adaptation sets.\n *\n * @typedef {Object} PeriodInformation\n * @property {Node} period.node\n * Period node from the mpd\n * @property {Object} period.attributes\n * Parsed period attributes from node plus any added\n */\n\n/**\n * Maps a PeriodInformation object to a list of Representation information objects for all\n * AdaptationSet nodes contained within the Period.\n *\n * @name toAdaptationSetsCallback\n * @function\n * @param {PeriodInformation} period\n * Period object containing necessary period information\n * @param {number} periodStart\n * Start time of the Period within the mpd\n * @return {RepresentationInformation[]}\n * List of objects containing Representaion information\n */\n\n/**\n * Returns a callback for Array.prototype.map for mapping Period nodes to a list of\n * Representation information objects\n *\n * @param {Object} mpdAttributes\n * Contains attributes inherited by the mpd\n * @param {string[]} mpdBaseUrls\n * Contains list of resolved base urls inherited by the mpd\n * @return {toAdaptationSetsCallback}\n * Callback map function\n */\n\nvar toAdaptationSets = function toAdaptationSets(mpdAttributes, mpdBaseUrls) {\n return function (period, index) {\n var periodBaseUrls = buildBaseUrls(mpdBaseUrls, findChildren(period.node, 'BaseURL'));\n var periodAttributes = merge(mpdAttributes, {\n periodStart: period.attributes.start\n });\n\n if (typeof period.attributes.duration === 'number') {\n periodAttributes.periodDuration = period.attributes.duration;\n }\n\n var adaptationSets = findChildren(period.node, 'AdaptationSet');\n var periodSegmentInfo = getSegmentInformation(period.node);\n return flatten(adaptationSets.map(toRepresentations(periodAttributes, periodBaseUrls, periodSegmentInfo)));\n };\n};\n/**\n * Gets Period@start property for a given period.\n *\n * @param {Object} options\n * Options object\n * @param {Object} options.attributes\n * Period attributes\n * @param {Object} [options.priorPeriodAttributes]\n * Prior period attributes (if prior period is available)\n * @param {string} options.mpdType\n * The MPD@type these periods came from\n * @return {number|null}\n * The period start, or null if it's an early available period or error\n */\n\nvar getPeriodStart = function getPeriodStart(_ref) {\n var attributes = _ref.attributes,\n priorPeriodAttributes = _ref.priorPeriodAttributes,\n mpdType = _ref.mpdType;\n\n // Summary of period start time calculation from DASH spec section 5.3.2.1\n //\n // A period's start is the first period's start + time elapsed after playing all\n // prior periods to this one. Periods continue one after the other in time (without\n // gaps) until the end of the presentation.\n //\n // The value of Period@start should be:\n // 1. if Period@start is present: value of Period@start\n // 2. if previous period exists and it has @duration: previous Period@start +\n // previous Period@duration\n // 3. if this is first period and MPD@type is 'static': 0\n // 4. in all other cases, consider the period an \"early available period\" (note: not\n // currently supported)\n // (1)\n if (typeof attributes.start === 'number') {\n return attributes.start;\n } // (2)\n\n\n if (priorPeriodAttributes && typeof priorPeriodAttributes.start === 'number' && typeof priorPeriodAttributes.duration === 'number') {\n return priorPeriodAttributes.start + priorPeriodAttributes.duration;\n } // (3)\n\n\n if (!priorPeriodAttributes && mpdType === 'static') {\n return 0;\n } // (4)\n // There is currently no logic for calculating the Period@start value if there is\n // no Period@start or prior Period@start and Period@duration available. This is not made\n // explicit by the DASH interop guidelines or the DASH spec, however, since there's\n // nothing about any other resolution strategies, it's implied. Thus, this case should\n // be considered an early available period, or error, and null should suffice for both\n // of those cases.\n\n\n return null;\n};\n/**\n * Traverses the mpd xml tree to generate a list of Representation information objects\n * that have inherited attributes from parent nodes\n *\n * @param {Node} mpd\n * The root node of the mpd\n * @param {Object} options\n * Available options for inheritAttributes\n * @param {string} options.manifestUri\n * The uri source of the mpd\n * @param {number} options.NOW\n * Current time per DASH IOP. Default is current time in ms since epoch\n * @param {number} options.clientOffset\n * Client time difference from NOW (in milliseconds)\n * @return {RepresentationInformation[]}\n * List of objects containing Representation information\n */\n\nvar inheritAttributes = function inheritAttributes(mpd, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$manifestUri = _options.manifestUri,\n manifestUri = _options$manifestUri === void 0 ? '' : _options$manifestUri,\n _options$NOW = _options.NOW,\n NOW = _options$NOW === void 0 ? Date.now() : _options$NOW,\n _options$clientOffset = _options.clientOffset,\n clientOffset = _options$clientOffset === void 0 ? 0 : _options$clientOffset;\n var periodNodes = findChildren(mpd, 'Period');\n\n if (!periodNodes.length) {\n throw new Error(errors.INVALID_NUMBER_OF_PERIOD);\n }\n\n var locations = findChildren(mpd, 'Location');\n var mpdAttributes = parseAttributes(mpd);\n var mpdBaseUrls = buildBaseUrls([manifestUri], findChildren(mpd, 'BaseURL')); // See DASH spec section 5.3.1.2, Semantics of MPD element. Default type to 'static'.\n\n mpdAttributes.type = mpdAttributes.type || 'static';\n mpdAttributes.sourceDuration = mpdAttributes.mediaPresentationDuration || 0;\n mpdAttributes.NOW = NOW;\n mpdAttributes.clientOffset = clientOffset;\n\n if (locations.length) {\n mpdAttributes.locations = locations.map(getContent);\n }\n\n var periods = []; // Since toAdaptationSets acts on individual periods right now, the simplest approach to\n // adding properties that require looking at prior periods is to parse attributes and add\n // missing ones before toAdaptationSets is called. If more such properties are added, it\n // may be better to refactor toAdaptationSets.\n\n periodNodes.forEach(function (node, index) {\n var attributes = parseAttributes(node); // Use the last modified prior period, as it may contain added information necessary\n // for this period.\n\n var priorPeriod = periods[index - 1];\n attributes.start = getPeriodStart({\n attributes: attributes,\n priorPeriodAttributes: priorPeriod ? priorPeriod.attributes : null,\n mpdType: mpdAttributes.type\n });\n periods.push({\n node: node,\n attributes: attributes\n });\n });\n return {\n locations: mpdAttributes.locations,\n representationInfo: flatten(periods.map(toAdaptationSets(mpdAttributes, mpdBaseUrls)))\n };\n};\n\nvar stringToMpdXml = function stringToMpdXml(manifestString) {\n if (manifestString === '') {\n throw new Error(errors.DASH_EMPTY_MANIFEST);\n }\n\n var parser = new DOMParser();\n var xml;\n var mpd;\n\n try {\n xml = parser.parseFromString(manifestString, 'application/xml');\n mpd = xml && xml.documentElement.tagName === 'MPD' ? xml.documentElement : null;\n } catch (e) {// ie 11 throwsw on invalid xml\n }\n\n if (!mpd || mpd && mpd.getElementsByTagName('parsererror').length > 0) {\n throw new Error(errors.DASH_INVALID_XML);\n }\n\n return mpd;\n};\n\n/**\n * Parses the manifest for a UTCTiming node, returning the nodes attributes if found\n *\n * @param {string} mpd\n * XML string of the MPD manifest\n * @return {Object|null}\n * Attributes of UTCTiming node specified in the manifest. Null if none found\n */\n\nvar parseUTCTimingScheme = function parseUTCTimingScheme(mpd) {\n var UTCTimingNode = findChildren(mpd, 'UTCTiming')[0];\n\n if (!UTCTimingNode) {\n return null;\n }\n\n var attributes = parseAttributes(UTCTimingNode);\n\n switch (attributes.schemeIdUri) {\n case 'urn:mpeg:dash:utc:http-head:2014':\n case 'urn:mpeg:dash:utc:http-head:2012':\n attributes.method = 'HEAD';\n break;\n\n case 'urn:mpeg:dash:utc:http-xsdate:2014':\n case 'urn:mpeg:dash:utc:http-iso:2014':\n case 'urn:mpeg:dash:utc:http-xsdate:2012':\n case 'urn:mpeg:dash:utc:http-iso:2012':\n attributes.method = 'GET';\n break;\n\n case 'urn:mpeg:dash:utc:direct:2014':\n case 'urn:mpeg:dash:utc:direct:2012':\n attributes.method = 'DIRECT';\n attributes.value = Date.parse(attributes.value);\n break;\n\n case 'urn:mpeg:dash:utc:http-ntp:2014':\n case 'urn:mpeg:dash:utc:ntp:2014':\n case 'urn:mpeg:dash:utc:sntp:2014':\n default:\n throw new Error(errors.UNSUPPORTED_UTC_TIMING_SCHEME);\n }\n\n return attributes;\n};\n\nvar VERSION = version;\n/*\n * Given a DASH manifest string and options, parses the DASH manifest into an object in the\n * form outputed by m3u8-parser and accepted by videojs/http-streaming.\n *\n * For live DASH manifests, if `previousManifest` is provided in options, then the newly\n * parsed DASH manifest will have its media sequence and discontinuity sequence values\n * updated to reflect its position relative to the prior manifest.\n *\n * @param {string} manifestString - the DASH manifest as a string\n * @param {options} [options] - any options\n *\n * @return {Object} the manifest object\n */\n\nvar parse = function parse(manifestString, options) {\n if (options === void 0) {\n options = {};\n }\n\n var parsedManifestInfo = inheritAttributes(stringToMpdXml(manifestString), options);\n var playlists = toPlaylists(parsedManifestInfo.representationInfo);\n return toM3u8({\n dashPlaylists: playlists,\n locations: parsedManifestInfo.locations,\n sidxMapping: options.sidxMapping,\n previousManifest: options.previousManifest\n });\n};\n/**\n * Parses the manifest for a UTCTiming node, returning the nodes attributes if found\n *\n * @param {string} manifestString\n * XML string of the MPD manifest\n * @return {Object|null}\n * Attributes of UTCTiming node specified in the manifest. Null if none found\n */\n\n\nvar parseUTCTiming = function parseUTCTiming(manifestString) {\n return parseUTCTimingScheme(stringToMpdXml(manifestString));\n};\n\nexport { VERSION, addSidxSegmentsToPlaylist$1 as addSidxSegmentsToPlaylist, generateSidxKey, inheritAttributes, parse, parseUTCTiming, stringToMpdXml, toM3u8, toPlaylists };\n","/**\n * mux.js\n *\n * Copyright (c) 2016 Brightcove\n * All rights reserved.\n *\n * Utilities to detect basic properties and metadata about TS Segments.\n */\n'use strict';\n\nvar StreamTypes = require('./stream-types.js');\n\nvar parsePid = function(packet) {\n var pid = packet[1] & 0x1f;\n pid <<= 8;\n pid |= packet[2];\n return pid;\n};\n\nvar parsePayloadUnitStartIndicator = function(packet) {\n return !!(packet[1] & 0x40);\n};\n\nvar parseAdaptionField = function(packet) {\n var offset = 0;\n // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n if (((packet[3] & 0x30) >>> 4) > 0x01) {\n offset += packet[4] + 1;\n }\n return offset;\n};\n\nvar parseType = function(packet, pmtPid) {\n var pid = parsePid(packet);\n if (pid === 0) {\n return 'pat';\n } else if (pid === pmtPid) {\n return 'pmt';\n } else if (pmtPid) {\n return 'pes';\n }\n return null;\n};\n\nvar parsePat = function(packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n var offset = 4 + parseAdaptionField(packet);\n\n if (pusi) {\n offset += packet[offset] + 1;\n }\n\n return (packet[offset + 10] & 0x1f) << 8 | packet[offset + 11];\n};\n\nvar parsePmt = function(packet) {\n var programMapTable = {};\n var pusi = parsePayloadUnitStartIndicator(packet);\n var payloadOffset = 4 + parseAdaptionField(packet);\n\n if (pusi) {\n payloadOffset += packet[payloadOffset] + 1;\n }\n\n // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n if (!(packet[payloadOffset + 5] & 0x01)) {\n return;\n }\n\n var sectionLength, tableEnd, programInfoLength;\n // the mapping table ends at the end of the current section\n sectionLength = (packet[payloadOffset + 1] & 0x0f) << 8 | packet[payloadOffset + 2];\n tableEnd = 3 + sectionLength - 4;\n\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n programInfoLength = (packet[payloadOffset + 10] & 0x0f) << 8 | packet[payloadOffset + 11];\n\n // advance the offset to the first entry in the mapping table\n var offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n var i = payloadOffset + offset;\n // add an entry that maps the elementary_pid to the stream_type\n programMapTable[(packet[i + 1] & 0x1F) << 8 | packet[i + 2]] = packet[i];\n\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += ((packet[i + 3] & 0x0F) << 8 | packet[i + 4]) + 5;\n }\n return programMapTable;\n};\n\nvar parsePesType = function(packet, programMapTable) {\n var pid = parsePid(packet);\n var type = programMapTable[pid];\n switch (type) {\n case StreamTypes.H264_STREAM_TYPE:\n return 'video';\n case StreamTypes.ADTS_STREAM_TYPE:\n return 'audio';\n case StreamTypes.METADATA_STREAM_TYPE:\n return 'timed-metadata';\n default:\n return null;\n }\n};\n\nvar parsePesTime = function(packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n if (!pusi) {\n return null;\n }\n\n var offset = 4 + parseAdaptionField(packet);\n\n if (offset >= packet.byteLength) {\n // From the H 222.0 MPEG-TS spec\n // \"For transport stream packets carrying PES packets, stuffing is needed when there\n // is insufficient PES packet data to completely fill the transport stream packet\n // payload bytes. Stuffing is accomplished by defining an adaptation field longer than\n // the sum of the lengths of the data elements in it, so that the payload bytes\n // remaining after the adaptation field exactly accommodates the available PES packet\n // data.\"\n //\n // If the offset is >= the length of the packet, then the packet contains no data\n // and instead is just adaption field stuffing bytes\n return null;\n }\n\n var pes = null;\n var ptsDtsFlags;\n\n // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n ptsDtsFlags = packet[offset + 7];\n\n // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n if (ptsDtsFlags & 0xC0) {\n pes = {};\n // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n pes.pts = (packet[offset + 9] & 0x0E) << 27 |\n (packet[offset + 10] & 0xFF) << 20 |\n (packet[offset + 11] & 0xFE) << 12 |\n (packet[offset + 12] & 0xFF) << 5 |\n (packet[offset + 13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n pes.pts += (packet[offset + 13] & 0x06) >>> 1; // OR by the two LSBs\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n pes.dts = (packet[offset + 14] & 0x0E) << 27 |\n (packet[offset + 15] & 0xFF) << 20 |\n (packet[offset + 16] & 0xFE) << 12 |\n (packet[offset + 17] & 0xFF) << 5 |\n (packet[offset + 18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n pes.dts += (packet[offset + 18] & 0x06) >>> 1; // OR by the two LSBs\n }\n }\n return pes;\n};\n\nvar parseNalUnitType = function(type) {\n switch (type) {\n case 0x05:\n return 'slice_layer_without_partitioning_rbsp_idr';\n case 0x06:\n return 'sei_rbsp';\n case 0x07:\n return 'seq_parameter_set_rbsp';\n case 0x08:\n return 'pic_parameter_set_rbsp';\n case 0x09:\n return 'access_unit_delimiter_rbsp';\n default:\n return null;\n }\n};\n\nvar videoPacketContainsKeyFrame = function(packet) {\n var offset = 4 + parseAdaptionField(packet);\n var frameBuffer = packet.subarray(offset);\n var frameI = 0;\n var frameSyncPoint = 0;\n var foundKeyFrame = false;\n var nalType;\n\n // advance the sync point to a NAL start, if necessary\n for (; frameSyncPoint < frameBuffer.byteLength - 3; frameSyncPoint++) {\n if (frameBuffer[frameSyncPoint + 2] === 1) {\n // the sync point is properly aligned\n frameI = frameSyncPoint + 5;\n break;\n }\n }\n\n while (frameI < frameBuffer.byteLength) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (frameBuffer[frameI]) {\n case 0:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0) {\n frameI += 2;\n break;\n } else if (frameBuffer[frameI - 2] !== 0) {\n frameI++;\n break;\n }\n\n if (frameSyncPoint + 3 !== frameI - 2) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n }\n\n // drop trailing zeroes\n do {\n frameI++;\n } while (frameBuffer[frameI] !== 1 && frameI < frameBuffer.length);\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0 ||\n frameBuffer[frameI - 2] !== 0) {\n frameI += 3;\n break;\n }\n\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n frameI += 3;\n break;\n }\n }\n frameBuffer = frameBuffer.subarray(frameSyncPoint);\n frameI -= frameSyncPoint;\n frameSyncPoint = 0;\n // parse the final nal\n if (frameBuffer && frameBuffer.byteLength > 3) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n }\n\n return foundKeyFrame;\n};\n\n\nmodule.exports = {\n parseType: parseType,\n parsePat: parsePat,\n parsePmt: parsePmt,\n parsePayloadUnitStartIndicator: parsePayloadUnitStartIndicator,\n parsePesType: parsePesType,\n parsePesTime: parsePesTime,\n videoPacketContainsKeyFrame: videoPacketContainsKeyFrame\n};\n","/**\n * @file videojs-contrib-hls.js\n *\n * The main file for the HLS project.\n * License: https://github.com/videojs/videojs-contrib-hls/blob/master/LICENSE\n */\n'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _globalDocument = require('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _playlistLoader = require('./playlist-loader');\n\nvar _playlistLoader2 = _interopRequireDefault(_playlistLoader);\n\nvar _playlist = require('./playlist');\n\nvar _playlist2 = _interopRequireDefault(_playlist);\n\nvar _xhr = require('./xhr');\n\nvar _xhr2 = _interopRequireDefault(_xhr);\n\nvar _aesDecrypter = require('aes-decrypter');\n\nvar _binUtils = require('./bin-utils');\n\nvar _binUtils2 = _interopRequireDefault(_binUtils);\n\nvar _videojsContribMediaSources = require('videojs-contrib-media-sources');\n\nvar _m3u8Parser = require('m3u8-parser');\n\nvar _m3u8Parser2 = _interopRequireDefault(_m3u8Parser);\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar _masterPlaylistController = require('./master-playlist-controller');\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _renditionMixin = require('./rendition-mixin');\n\nvar _renditionMixin2 = _interopRequireDefault(_renditionMixin);\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _playbackWatcher = require('./playback-watcher');\n\nvar _playbackWatcher2 = _interopRequireDefault(_playbackWatcher);\n\nvar _reloadSourceOnError = require('./reload-source-on-error');\n\nvar _reloadSourceOnError2 = _interopRequireDefault(_reloadSourceOnError);\n\nvar _playlistSelectorsJs = require('./playlist-selectors.js');\n\nvar Hls = {\n PlaylistLoader: _playlistLoader2['default'],\n Playlist: _playlist2['default'],\n Decrypter: _aesDecrypter.Decrypter,\n AsyncStream: _aesDecrypter.AsyncStream,\n decrypt: _aesDecrypter.decrypt,\n utils: _binUtils2['default'],\n\n STANDARD_PLAYLIST_SELECTOR: _playlistSelectorsJs.lastBandwidthSelector,\n INITIAL_PLAYLIST_SELECTOR: _playlistSelectorsJs.lowestBitrateCompatibleVariantSelector,\n comparePlaylistBandwidth: _playlistSelectorsJs.comparePlaylistBandwidth,\n comparePlaylistResolution: _playlistSelectorsJs.comparePlaylistResolution,\n\n xhr: (0, _xhr2['default'])()\n};\n\n// 0.5 MB/s\nvar INITIAL_BANDWIDTH = 4194304;\n\n// Define getter/setters for config properites\n['GOAL_BUFFER_LENGTH', 'MAX_GOAL_BUFFER_LENGTH', 'GOAL_BUFFER_LENGTH_RATE', 'BUFFER_LOW_WATER_LINE', 'MAX_BUFFER_LOW_WATER_LINE', 'BUFFER_LOW_WATER_LINE_RATE', 'BANDWIDTH_VARIANCE'].forEach(function (prop) {\n Object.defineProperty(Hls, prop, {\n get: function get() {\n _videoJs2['default'].log.warn('using Hls.' + prop + ' is UNSAFE be sure you know what you are doing');\n return _config2['default'][prop];\n },\n set: function set(value) {\n _videoJs2['default'].log.warn('using Hls.' + prop + ' is UNSAFE be sure you know what you are doing');\n\n if (typeof value !== 'number' || value < 0) {\n _videoJs2['default'].log.warn('value of Hls.' + prop + ' must be greater than or equal to 0');\n return;\n }\n\n _config2['default'][prop] = value;\n }\n });\n});\n\n/**\n * Updates the selectedIndex of the QualityLevelList when a mediachange happens in hls.\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to update.\n * @param {PlaylistLoader} playlistLoader PlaylistLoader containing the new media info.\n * @function handleHlsMediaChange\n */\nvar handleHlsMediaChange = function handleHlsMediaChange(qualityLevels, playlistLoader) {\n var newPlaylist = playlistLoader.media();\n var selectedIndex = -1;\n\n for (var i = 0; i < qualityLevels.length; i++) {\n if (qualityLevels[i].id === newPlaylist.uri) {\n selectedIndex = i;\n break;\n }\n }\n\n qualityLevels.selectedIndex_ = selectedIndex;\n qualityLevels.trigger({\n selectedIndex: selectedIndex,\n type: 'change'\n });\n};\n\n/**\n * Adds quality levels to list once playlist metadata is available\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to attach events to.\n * @param {Object} hls Hls object to listen to for media events.\n * @function handleHlsLoadedMetadata\n */\nvar handleHlsLoadedMetadata = function handleHlsLoadedMetadata(qualityLevels, hls) {\n hls.representations().forEach(function (rep) {\n qualityLevels.addQualityLevel(rep);\n });\n handleHlsMediaChange(qualityLevels, hls.playlists);\n};\n\n// HLS is a source handler, not a tech. Make sure attempts to use it\n// as one do not cause exceptions.\nHls.canPlaySource = function () {\n return _videoJs2['default'].log.warn('HLS is no longer a tech. Please remove it from ' + 'your player\\'s techOrder.');\n};\n\n/**\n * Whether the browser has built-in HLS support.\n */\nHls.supportsNativeHls = (function () {\n var video = _globalDocument2['default'].createElement('video');\n\n // native HLS is definitely not supported if HTML5 video isn't\n if (!_videoJs2['default'].getTech('Html5').isSupported()) {\n return false;\n }\n\n // HLS manifests can go by many mime-types\n var canPlay = [\n // Apple santioned\n 'application/vnd.apple.mpegurl',\n // Apple sanctioned for backwards compatibility\n 'audio/mpegurl',\n // Very common\n 'audio/x-mpegurl',\n // Very common\n 'application/x-mpegurl',\n // Included for completeness\n 'video/x-mpegurl', 'video/mpegurl', 'application/mpegurl'];\n\n return canPlay.some(function (canItPlay) {\n return (/maybe|probably/i.test(video.canPlayType(canItPlay))\n );\n });\n})();\n\n/**\n * HLS is a source handler, not a tech. Make sure attempts to use it\n * as one do not cause exceptions.\n */\nHls.isSupported = function () {\n return _videoJs2['default'].log.warn('HLS is no longer a tech. Please remove it from ' + 'your player\\'s techOrder.');\n};\n\nvar Component = _videoJs2['default'].getComponent('Component');\n\n/**\n * The Hls Handler object, where we orchestrate all of the parts\n * of HLS to interact with video.js\n *\n * @class HlsHandler\n * @extends videojs.Component\n * @param {Object} source the soruce object\n * @param {Tech} tech the parent tech object\n * @param {Object} options optional and required options\n */\n\nvar HlsHandler = (function (_Component) {\n _inherits(HlsHandler, _Component);\n\n function HlsHandler(source, tech, options) {\n var _this = this;\n\n _classCallCheck(this, HlsHandler);\n\n _get(Object.getPrototypeOf(HlsHandler.prototype), 'constructor', this).call(this, tech, options.hls);\n\n // tech.player() is deprecated but setup a reference to HLS for\n // backwards-compatibility\n if (tech.options_ && tech.options_.playerId) {\n var _player = (0, _videoJs2['default'])(tech.options_.playerId);\n\n if (!_player.hasOwnProperty('hls')) {\n Object.defineProperty(_player, 'hls', {\n get: function get() {\n _videoJs2['default'].log.warn('player.hls is deprecated. Use player.tech_.hls instead.');\n tech.trigger({ type: 'usage', name: 'hls-player-access' });\n return _this;\n }\n });\n }\n }\n\n this.tech_ = tech;\n this.source_ = source;\n this.stats = {};\n this.ignoreNextSeekingEvent_ = false;\n this.setOptions_();\n\n // overriding native HLS only works if audio tracks have been emulated\n // error early if we're misconfigured:\n if (this.options_.overrideNative && (tech.featuresNativeVideoTracks || tech.featuresNativeAudioTracks)) {\n throw new Error('Overriding native HLS requires emulated tracks. ' + 'See https://git.io/vMpjB');\n }\n\n // listen for fullscreenchange events for this player so that we\n // can adjust our quality selection quickly\n this.on(_globalDocument2['default'], ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'], function (event) {\n var fullscreenElement = _globalDocument2['default'].fullscreenElement || _globalDocument2['default'].webkitFullscreenElement || _globalDocument2['default'].mozFullScreenElement || _globalDocument2['default'].msFullscreenElement;\n\n if (fullscreenElement && fullscreenElement.contains(_this.tech_.el())) {\n _this.masterPlaylistController_.fastQualityChange_();\n }\n });\n\n this.on(this.tech_, 'seeking', function () {\n if (this.ignoreNextSeekingEvent_) {\n this.ignoreNextSeekingEvent_ = false;\n return;\n }\n\n this.setCurrentTime(this.tech_.currentTime());\n });\n this.on(this.tech_, 'error', function () {\n if (this.masterPlaylistController_) {\n this.masterPlaylistController_.pauseLoading();\n }\n });\n\n this.on(this.tech_, 'play', this.play);\n }\n\n /**\n * The Source Handler object, which informs video.js what additional\n * MIME types are supported and sets up playback. It is registered\n * automatically to the appropriate tech based on the capabilities of\n * the browser it is running in. It is not necessary to use or modify\n * this object in normal usage.\n */\n\n _createClass(HlsHandler, [{\n key: 'setOptions_',\n value: function setOptions_() {\n var _this2 = this;\n\n // defaults\n this.options_.withCredentials = this.options_.withCredentials || false;\n\n if (typeof this.options_.blacklistDuration !== 'number') {\n this.options_.blacklistDuration = 5 * 60;\n }\n\n // start playlist selection at a reasonable bandwidth for\n // broadband internet (0.5 MB/s) or mobile (0.0625 MB/s)\n if (typeof this.options_.bandwidth !== 'number') {\n this.options_.bandwidth = INITIAL_BANDWIDTH;\n }\n\n // If the bandwidth number is unchanged from the initial setting\n // then this takes precedence over the enableLowInitialPlaylist option\n this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === INITIAL_BANDWIDTH;\n\n // grab options passed to player.src\n ['withCredentials', 'bandwidth', 'handleManifestRedirects'].forEach(function (option) {\n if (typeof _this2.source_[option] !== 'undefined') {\n _this2.options_[option] = _this2.source_[option];\n }\n });\n\n this.bandwidth = this.options_.bandwidth;\n }\n\n /**\n * called when player.src gets called, handle a new source\n *\n * @param {Object} src the source object to handle\n */\n }, {\n key: 'src',\n value: function src(_src) {\n var _this3 = this;\n\n // do nothing if the src is falsey\n if (!_src) {\n return;\n }\n this.setOptions_();\n // add master playlist controller options\n this.options_.url = this.source_.src;\n this.options_.tech = this.tech_;\n this.options_.externHls = Hls;\n\n this.masterPlaylistController_ = new _masterPlaylistController.MasterPlaylistController(this.options_);\n this.playbackWatcher_ = new _playbackWatcher2['default'](_videoJs2['default'].mergeOptions(this.options_, {\n seekable: function seekable() {\n return _this3.seekable();\n }\n }));\n\n this.masterPlaylistController_.on('error', function () {\n var player = _videoJs2['default'].players[_this3.tech_.options_.playerId];\n\n player.error(_this3.masterPlaylistController_.error);\n });\n\n // `this` in selectPlaylist should be the HlsHandler for backwards\n // compatibility with < v2\n this.masterPlaylistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : Hls.STANDARD_PLAYLIST_SELECTOR.bind(this);\n\n this.masterPlaylistController_.selectInitialPlaylist = Hls.INITIAL_PLAYLIST_SELECTOR.bind(this);\n\n // re-expose some internal objects for backwards compatibility with < v2\n this.playlists = this.masterPlaylistController_.masterPlaylistLoader_;\n this.mediaSource = this.masterPlaylistController_.mediaSource;\n\n // Proxy assignment of some properties to the master playlist\n // controller. Using a custom property for backwards compatibility\n // with < v2\n Object.defineProperties(this, {\n selectPlaylist: {\n get: function get() {\n return this.masterPlaylistController_.selectPlaylist;\n },\n set: function set(selectPlaylist) {\n this.masterPlaylistController_.selectPlaylist = selectPlaylist.bind(this);\n }\n },\n throughput: {\n get: function get() {\n return this.masterPlaylistController_.mainSegmentLoader_.throughput.rate;\n },\n set: function set(throughput) {\n this.masterPlaylistController_.mainSegmentLoader_.throughput.rate = throughput;\n // By setting `count` to 1 the throughput value becomes the starting value\n // for the cumulative average\n this.masterPlaylistController_.mainSegmentLoader_.throughput.count = 1;\n }\n },\n bandwidth: {\n get: function get() {\n return this.masterPlaylistController_.mainSegmentLoader_.bandwidth;\n },\n set: function set(bandwidth) {\n this.masterPlaylistController_.mainSegmentLoader_.bandwidth = bandwidth;\n // setting the bandwidth manually resets the throughput counter\n // `count` is set to zero that current value of `rate` isn't included\n // in the cumulative average\n this.masterPlaylistController_.mainSegmentLoader_.throughput = {\n rate: 0,\n count: 0\n };\n }\n },\n /**\n * `systemBandwidth` is a combination of two serial processes bit-rates. The first\n * is the network bitrate provided by `bandwidth` and the second is the bitrate of\n * the entire process after that - decryption, transmuxing, and appending - provided\n * by `throughput`.\n *\n * Since the two process are serial, the overall system bandwidth is given by:\n * sysBandwidth = 1 / (1 / bandwidth + 1 / throughput)\n */\n systemBandwidth: {\n get: function get() {\n var invBandwidth = 1 / (this.bandwidth || 1);\n var invThroughput = undefined;\n\n if (this.throughput > 0) {\n invThroughput = 1 / this.throughput;\n } else {\n invThroughput = 0;\n }\n\n var systemBitrate = Math.floor(1 / (invBandwidth + invThroughput));\n\n return systemBitrate;\n },\n set: function set() {\n _videoJs2['default'].log.error('The \"systemBandwidth\" property is read-only');\n }\n }\n });\n\n Object.defineProperties(this.stats, {\n bandwidth: {\n get: function get() {\n return _this3.bandwidth || 0;\n },\n enumerable: true\n },\n mediaRequests: {\n get: function get() {\n return _this3.masterPlaylistController_.mediaRequests_() || 0;\n },\n enumerable: true\n },\n mediaRequestsAborted: {\n get: function get() {\n return _this3.masterPlaylistController_.mediaRequestsAborted_() || 0;\n },\n enumerable: true\n },\n mediaRequestsTimedout: {\n get: function get() {\n return _this3.masterPlaylistController_.mediaRequestsTimedout_() || 0;\n },\n enumerable: true\n },\n mediaRequestsErrored: {\n get: function get() {\n return _this3.masterPlaylistController_.mediaRequestsErrored_() || 0;\n },\n enumerable: true\n },\n mediaTransferDuration: {\n get: function get() {\n return _this3.masterPlaylistController_.mediaTransferDuration_() || 0;\n },\n enumerable: true\n },\n mediaBytesTransferred: {\n get: function get() {\n return _this3.masterPlaylistController_.mediaBytesTransferred_() || 0;\n },\n enumerable: true\n },\n mediaSecondsLoaded: {\n get: function get() {\n return _this3.masterPlaylistController_.mediaSecondsLoaded_() || 0;\n },\n enumerable: true\n }\n });\n\n this.tech_.one('canplay', this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_));\n\n this.masterPlaylistController_.on('selectedinitialmedia', function () {\n // Add the manual rendition mix-in to HlsHandler\n (0, _renditionMixin2['default'])(_this3);\n });\n\n // the bandwidth of the primary segment loader is our best\n // estimate of overall bandwidth\n this.on(this.masterPlaylistController_, 'progress', function () {\n this.tech_.trigger('progress');\n });\n\n // In the live case, we need to ignore the very first `seeking` event since\n // that will be the result of the seek-to-live behavior\n this.on(this.masterPlaylistController_, 'firstplay', function () {\n this.ignoreNextSeekingEvent_ = true;\n });\n\n this.tech_.ready(function () {\n return _this3.setupQualityLevels_();\n });\n\n // do nothing if the tech has been disposed already\n // this can occur if someone sets the src in player.ready(), for instance\n if (!this.tech_.el()) {\n return;\n }\n\n this.tech_.src(_videoJs2['default'].URL.createObjectURL(this.masterPlaylistController_.mediaSource));\n }\n\n /**\n * Initializes the quality levels and sets listeners to update them.\n *\n * @method setupQualityLevels_\n * @private\n */\n }, {\n key: 'setupQualityLevels_',\n value: function setupQualityLevels_() {\n var _this4 = this;\n\n var player = _videoJs2['default'].players[this.tech_.options_.playerId];\n\n if (player && player.qualityLevels) {\n this.qualityLevels_ = player.qualityLevels();\n\n this.masterPlaylistController_.on('selectedinitialmedia', function () {\n handleHlsLoadedMetadata(_this4.qualityLevels_, _this4);\n });\n\n this.playlists.on('mediachange', function () {\n handleHlsMediaChange(_this4.qualityLevels_, _this4.playlists);\n });\n }\n }\n\n /**\n * Begin playing the video.\n */\n }, {\n key: 'play',\n value: function play() {\n this.masterPlaylistController_.play();\n }\n\n /**\n * a wrapper around the function in MasterPlaylistController\n */\n }, {\n key: 'setCurrentTime',\n value: function setCurrentTime(currentTime) {\n this.masterPlaylistController_.setCurrentTime(currentTime);\n }\n\n /**\n * a wrapper around the function in MasterPlaylistController\n */\n }, {\n key: 'duration',\n value: function duration() {\n return this.masterPlaylistController_.duration();\n }\n\n /**\n * a wrapper around the function in MasterPlaylistController\n */\n }, {\n key: 'seekable',\n value: function seekable() {\n return this.masterPlaylistController_.seekable();\n }\n\n /**\n * Abort all outstanding work and cleanup.\n */\n }, {\n key: 'dispose',\n value: function dispose() {\n if (this.playbackWatcher_) {\n this.playbackWatcher_.dispose();\n }\n if (this.masterPlaylistController_) {\n this.masterPlaylistController_.dispose();\n }\n if (this.qualityLevels_) {\n this.qualityLevels_.dispose();\n }\n _get(Object.getPrototypeOf(HlsHandler.prototype), 'dispose', this).call(this);\n }\n }]);\n\n return HlsHandler;\n})(Component);\n\nvar HlsSourceHandler = function HlsSourceHandler(mode) {\n return {\n canHandleSource: function canHandleSource(srcObj) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var localOptions = _videoJs2['default'].mergeOptions(_videoJs2['default'].options, options);\n\n // this forces video.js to skip this tech/mode if its not the one we have been\n // overriden to use, by returing that we cannot handle the source.\n if (localOptions.hls && localOptions.hls.mode && localOptions.hls.mode !== mode) {\n return false;\n }\n return HlsSourceHandler.canPlayType(srcObj.type, localOptions);\n },\n handleSource: function handleSource(source, tech) {\n var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n var localOptions = _videoJs2['default'].mergeOptions(_videoJs2['default'].options, options, { hls: { mode: mode } });\n\n if (mode === 'flash') {\n // We need to trigger this asynchronously to give others the chance\n // to bind to the event when a source is set at player creation\n tech.setTimeout(function () {\n tech.trigger('loadstart');\n }, 1);\n }\n\n tech.hls = new HlsHandler(source, tech, localOptions);\n tech.hls.xhr = (0, _xhr2['default'])();\n\n tech.hls.src(source.src);\n return tech.hls;\n },\n canPlayType: function canPlayType(type) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var localOptions = _videoJs2['default'].mergeOptions(_videoJs2['default'].options, options);\n\n if (HlsSourceHandler.canPlayType(type, localOptions)) {\n return 'maybe';\n }\n return '';\n }\n };\n};\n\nHlsSourceHandler.canPlayType = function (type, options) {\n // No support for IE 10 or below\n if (_videoJs2['default'].browser.IE_VERSION && _videoJs2['default'].browser.IE_VERSION <= 10) {\n return false;\n }\n\n var mpegurlRE = /^(audio|video|application)\\/(x-|vnd\\.apple\\.)?mpegurl/i;\n\n // favor native HLS support if it's available\n if (!options.hls.overrideNative && Hls.supportsNativeHls) {\n return false;\n }\n return mpegurlRE.test(type);\n};\n\nif (typeof _videoJs2['default'].MediaSource === 'undefined' || typeof _videoJs2['default'].URL === 'undefined') {\n _videoJs2['default'].MediaSource = _videojsContribMediaSources.MediaSource;\n _videoJs2['default'].URL = _videojsContribMediaSources.URL;\n}\n\nvar flashTech = _videoJs2['default'].getTech('Flash');\n\n// register source handlers with the appropriate techs\nif (_videojsContribMediaSources.MediaSource.supportsNativeMediaSources()) {\n _videoJs2['default'].getTech('Html5').registerSourceHandler(HlsSourceHandler('html5'), 0);\n}\nif (_globalWindow2['default'].Uint8Array && flashTech) {\n flashTech.registerSourceHandler(HlsSourceHandler('flash'));\n}\n\n_videoJs2['default'].HlsHandler = HlsHandler;\n_videoJs2['default'].HlsSourceHandler = HlsSourceHandler;\n_videoJs2['default'].Hls = Hls;\nif (!_videoJs2['default'].use) {\n _videoJs2['default'].registerComponent('Hls', Hls);\n}\n_videoJs2['default'].m3u8 = _m3u8Parser2['default'];\n_videoJs2['default'].options.hls = _videoJs2['default'].options.hls || {};\n\nif (_videoJs2['default'].registerPlugin) {\n _videoJs2['default'].registerPlugin('reloadSourceOnError', _reloadSourceOnError2['default']);\n} else {\n _videoJs2['default'].plugin('reloadSourceOnError', _reloadSourceOnError2['default']);\n}\n\nmodule.exports = {\n Hls: Hls,\n HlsHandler: HlsHandler,\n HlsSourceHandler: HlsSourceHandler\n};","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/**\n * @file videojs-contrib-media-sources.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalWindow = require('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _flashMediaSource = require('./flash-media-source');\n\nvar _flashMediaSource2 = _interopRequireDefault(_flashMediaSource);\n\nvar _htmlMediaSource = require('./html-media-source');\n\nvar _htmlMediaSource2 = _interopRequireDefault(_htmlMediaSource);\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\nvar urlCount = 0;\n\n// ------------\n// Media Source\n// ------------\n\nvar defaults = {\n // how to determine the MediaSource implementation to use. There\n // are three available modes:\n // - auto: use native MediaSources where available and Flash\n // everywhere else\n // - html5: always use native MediaSources\n // - flash: always use the Flash MediaSource polyfill\n mode: 'auto'\n};\n\n// store references to the media sources so they can be connected\n// to a video element (a swf object)\n// TODO: can we store this somewhere local to this module?\n_videoJs2['default'].mediaSources = {};\n\n/**\n * Provide a method for a swf object to notify JS that a\n * media source is now open.\n *\n * @param {String} msObjectURL string referencing the MSE Object URL\n * @param {String} swfId the swf id\n */\nvar open = function open(msObjectURL, swfId) {\n var mediaSource = _videoJs2['default'].mediaSources[msObjectURL];\n\n if (mediaSource) {\n mediaSource.trigger({ type: 'sourceopen', swfId: swfId });\n } else {\n throw new Error('Media Source not found (Video.js)');\n }\n};\n\n/**\n * Check to see if the native MediaSource object exists and supports\n * an MP4 container with both H.264 video and AAC-LC audio.\n *\n * @return {Boolean} if native media sources are supported\n */\nvar supportsNativeMediaSources = function supportsNativeMediaSources() {\n return !!_globalWindow2['default'].MediaSource && !!_globalWindow2['default'].MediaSource.isTypeSupported && _globalWindow2['default'].MediaSource.isTypeSupported('video/mp4;codecs=\"avc1.4d400d,mp4a.40.2\"');\n};\n\n/**\n * An emulation of the MediaSource API so that we can support\n * native and non-native functionality such as flash and\n * video/mp2t videos. returns an instance of HtmlMediaSource or\n * FlashMediaSource depending on what is supported and what options\n * are passed in.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/MediaSource\n * @param {Object} options options to use during setup.\n */\nvar MediaSource = function MediaSource(options) {\n var settings = _videoJs2['default'].mergeOptions(defaults, options);\n\n this.MediaSource = {\n open: open,\n supportsNativeMediaSources: supportsNativeMediaSources\n };\n\n // determine whether HTML MediaSources should be used\n if (settings.mode === 'html5' || settings.mode === 'auto' && supportsNativeMediaSources()) {\n return new _htmlMediaSource2['default']();\n } else if (_videoJs2['default'].getTech('Flash')) {\n return new _flashMediaSource2['default']();\n }\n\n throw new Error('Cannot use Flash or Html5 to create a MediaSource for this video');\n};\n\nexports.MediaSource = MediaSource;\nMediaSource.open = open;\nMediaSource.supportsNativeMediaSources = supportsNativeMediaSources;\n\n/**\n * A wrapper around the native URL for our MSE object\n * implementation, this object is exposed under videojs.URL\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/URL\n */\nvar URL = {\n /**\n * A wrapper around the native createObjectURL for our objects.\n * This function maps a native or emulated mediaSource to a blob\n * url so that it can be loaded into video.js\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n * @param {MediaSource} object the object to create a blob url to\n */\n createObjectURL: function createObjectURL(object) {\n var objectUrlPrefix = 'blob:vjs-media-source/';\n var url = undefined;\n\n // use the native MediaSource to generate an object URL\n if (object instanceof _htmlMediaSource2['default']) {\n url = _globalWindow2['default'].URL.createObjectURL(object.nativeMediaSource_);\n object.url_ = url;\n return url;\n }\n // if the object isn't an emulated MediaSource, delegate to the\n // native implementation\n if (!(object instanceof _flashMediaSource2['default'])) {\n url = _globalWindow2['default'].URL.createObjectURL(object);\n object.url_ = url;\n return url;\n }\n\n // build a URL that can be used to map back to the emulated\n // MediaSource\n url = objectUrlPrefix + urlCount;\n\n urlCount++;\n\n // setup the mapping back to object\n _videoJs2['default'].mediaSources[url] = object;\n\n return url;\n }\n};\n\nexports.URL = URL;\n_videoJs2['default'].MediaSource = MediaSource;\n_videoJs2['default'].URL = URL;","function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\n/**\n * @file - codecs.js - Handles tasks regarding codec strings such as translating them to\n * codec strings, or translating codec strings into objects that can be examined.\n */\n\n/**\n * Parses a codec string to retrieve the number of codecs specified,\n * the video codec and object type indicator, and the audio profile.\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nvar parseCodecs = function parseCodecs() {\n var codecs = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];\n\n var result = {\n codecCount: 0\n };\n var parsed = undefined;\n\n result.codecCount = codecs.split(',').length;\n result.codecCount = result.codecCount || 2;\n\n // parse the video codec\n parsed = /(^|\\s|,)+(avc1)([^ ,]*)/i.exec(codecs);\n if (parsed) {\n result.videoCodec = parsed[2];\n result.videoObjectTypeIndicator = parsed[3];\n }\n\n // parse the last field of the audio codec\n result.audioProfile = /(^|\\s|,)+mp4a.[0-9A-Fa-f]+\\.([0-9A-Fa-f]+)/i.exec(codecs);\n result.audioProfile = result.audioProfile && result.audioProfile[2];\n\n return result;\n};\nexports.parseCodecs = parseCodecs;","/**\n * An object that stores the bytes of an FLV tag and methods for\n * querying and manipulating that data.\n * @see http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf\n */\n'use strict';\n\nvar FlvTag;\n\n// (type:uint, extraData:Boolean = false) extends ByteArray\nFlvTag = function(type, extraData) {\n var\n // Counter if this is a metadata tag, nal start marker if this is a video\n // tag. unused if this is an audio tag\n adHoc = 0, // :uint\n\n // The default size is 16kb but this is not enough to hold iframe\n // data and the resizing algorithm costs a bit so we create a larger\n // starting buffer for video tags\n bufferStartSize = 16384,\n\n // checks whether the FLV tag has enough capacity to accept the proposed\n // write and re-allocates the internal buffers if necessary\n prepareWrite = function(flv, count) {\n var\n bytes,\n minLength = flv.position + count;\n if (minLength < flv.bytes.byteLength) {\n // there's enough capacity so do nothing\n return;\n }\n\n // allocate a new buffer and copy over the data that will not be modified\n bytes = new Uint8Array(minLength * 2);\n bytes.set(flv.bytes.subarray(0, flv.position), 0);\n flv.bytes = bytes;\n flv.view = new DataView(flv.bytes.buffer);\n },\n\n // commonly used metadata properties\n widthBytes = FlvTag.widthBytes || new Uint8Array('width'.length),\n heightBytes = FlvTag.heightBytes || new Uint8Array('height'.length),\n videocodecidBytes = FlvTag.videocodecidBytes || new Uint8Array('videocodecid'.length),\n i;\n\n if (!FlvTag.widthBytes) {\n // calculating the bytes of common metadata names ahead of time makes the\n // corresponding writes faster because we don't have to loop over the\n // characters\n // re-test with test/perf.html if you're planning on changing this\n for (i = 0; i < 'width'.length; i++) {\n widthBytes[i] = 'width'.charCodeAt(i);\n }\n for (i = 0; i < 'height'.length; i++) {\n heightBytes[i] = 'height'.charCodeAt(i);\n }\n for (i = 0; i < 'videocodecid'.length; i++) {\n videocodecidBytes[i] = 'videocodecid'.charCodeAt(i);\n }\n\n FlvTag.widthBytes = widthBytes;\n FlvTag.heightBytes = heightBytes;\n FlvTag.videocodecidBytes = videocodecidBytes;\n }\n\n this.keyFrame = false; // :Boolean\n\n switch (type) {\n case FlvTag.VIDEO_TAG:\n this.length = 16;\n // Start the buffer at 256k\n bufferStartSize *= 6;\n break;\n case FlvTag.AUDIO_TAG:\n this.length = 13;\n this.keyFrame = true;\n break;\n case FlvTag.METADATA_TAG:\n this.length = 29;\n this.keyFrame = true;\n break;\n default:\n throw new Error('Unknown FLV tag type');\n }\n\n this.bytes = new Uint8Array(bufferStartSize);\n this.view = new DataView(this.bytes.buffer);\n this.bytes[0] = type;\n this.position = this.length;\n this.keyFrame = extraData; // Defaults to false\n\n // presentation timestamp\n this.pts = 0;\n // decoder timestamp\n this.dts = 0;\n\n // ByteArray#writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0)\n this.writeBytes = function(bytes, offset, length) {\n var\n start = offset || 0,\n end;\n length = length || bytes.byteLength;\n end = start + length;\n\n prepareWrite(this, length);\n this.bytes.set(bytes.subarray(start, end), this.position);\n\n this.position += length;\n this.length = Math.max(this.length, this.position);\n };\n\n // ByteArray#writeByte(value:int):void\n this.writeByte = function(byte) {\n prepareWrite(this, 1);\n this.bytes[this.position] = byte;\n this.position++;\n this.length = Math.max(this.length, this.position);\n };\n\n // ByteArray#writeShort(value:int):void\n this.writeShort = function(short) {\n prepareWrite(this, 2);\n this.view.setUint16(this.position, short);\n this.position += 2;\n this.length = Math.max(this.length, this.position);\n };\n\n // Negative index into array\n // (pos:uint):int\n this.negIndex = function(pos) {\n return this.bytes[this.length - pos];\n };\n\n // The functions below ONLY work when this[0] == VIDEO_TAG.\n // We are not going to check for that because we dont want the overhead\n // (nal:ByteArray = null):int\n this.nalUnitSize = function() {\n if (adHoc === 0) {\n return 0;\n }\n\n return this.length - (adHoc + 4);\n };\n\n this.startNalUnit = function() {\n // remember position and add 4 bytes\n if (adHoc > 0) {\n throw new Error('Attempted to create new NAL wihout closing the old one');\n }\n\n // reserve 4 bytes for nal unit size\n adHoc = this.length;\n this.length += 4;\n this.position = this.length;\n };\n\n // (nal:ByteArray = null):void\n this.endNalUnit = function(nalContainer) {\n var\n nalStart, // :uint\n nalLength; // :uint\n\n // Rewind to the marker and write the size\n if (this.length === adHoc + 4) {\n // we started a nal unit, but didnt write one, so roll back the 4 byte size value\n this.length -= 4;\n } else if (adHoc > 0) {\n nalStart = adHoc + 4;\n nalLength = this.length - nalStart;\n\n this.position = adHoc;\n this.view.setUint32(this.position, nalLength);\n this.position = this.length;\n\n if (nalContainer) {\n // Add the tag to the NAL unit\n nalContainer.push(this.bytes.subarray(nalStart, nalStart + nalLength));\n }\n }\n\n adHoc = 0;\n };\n\n /**\n * Write out a 64-bit floating point valued metadata property. This method is\n * called frequently during a typical parse and needs to be fast.\n */\n // (key:String, val:Number):void\n this.writeMetaDataDouble = function(key, val) {\n var i;\n prepareWrite(this, 2 + key.length + 9);\n\n // write size of property name\n this.view.setUint16(this.position, key.length);\n this.position += 2;\n\n // this next part looks terrible but it improves parser throughput by\n // 10kB/s in my testing\n\n // write property name\n if (key === 'width') {\n this.bytes.set(widthBytes, this.position);\n this.position += 5;\n } else if (key === 'height') {\n this.bytes.set(heightBytes, this.position);\n this.position += 6;\n } else if (key === 'videocodecid') {\n this.bytes.set(videocodecidBytes, this.position);\n this.position += 12;\n } else {\n for (i = 0; i < key.length; i++) {\n this.bytes[this.position] = key.charCodeAt(i);\n this.position++;\n }\n }\n\n // skip null byte\n this.position++;\n\n // write property value\n this.view.setFloat64(this.position, val);\n this.position += 8;\n\n // update flv tag length\n this.length = Math.max(this.length, this.position);\n ++adHoc;\n };\n\n // (key:String, val:Boolean):void\n this.writeMetaDataBoolean = function(key, val) {\n var i;\n prepareWrite(this, 2);\n this.view.setUint16(this.position, key.length);\n this.position += 2;\n for (i = 0; i < key.length; i++) {\n // if key.charCodeAt(i) >= 255, handle error\n prepareWrite(this, 1);\n this.bytes[this.position] = key.charCodeAt(i);\n this.position++;\n }\n prepareWrite(this, 2);\n this.view.setUint8(this.position, 0x01);\n this.position++;\n this.view.setUint8(this.position, val ? 0x01 : 0x00);\n this.position++;\n this.length = Math.max(this.length, this.position);\n ++adHoc;\n };\n\n // ():ByteArray\n this.finalize = function() {\n var\n dtsDelta, // :int\n len; // :int\n\n switch (this.bytes[0]) {\n // Video Data\n case FlvTag.VIDEO_TAG:\n // We only support AVC, 1 = key frame (for AVC, a seekable\n // frame), 2 = inter frame (for AVC, a non-seekable frame)\n this.bytes[11] = ((this.keyFrame || extraData) ? 0x10 : 0x20) | 0x07;\n this.bytes[12] = extraData ? 0x00 : 0x01;\n\n dtsDelta = this.pts - this.dts;\n this.bytes[13] = (dtsDelta & 0x00FF0000) >>> 16;\n this.bytes[14] = (dtsDelta & 0x0000FF00) >>> 8;\n this.bytes[15] = (dtsDelta & 0x000000FF) >>> 0;\n break;\n\n case FlvTag.AUDIO_TAG:\n this.bytes[11] = 0xAF; // 44 kHz, 16-bit stereo\n this.bytes[12] = extraData ? 0x00 : 0x01;\n break;\n\n case FlvTag.METADATA_TAG:\n this.position = 11;\n this.view.setUint8(this.position, 0x02); // String type\n this.position++;\n this.view.setUint16(this.position, 0x0A); // 10 Bytes\n this.position += 2;\n // set \"onMetaData\"\n this.bytes.set([0x6f, 0x6e, 0x4d, 0x65,\n 0x74, 0x61, 0x44, 0x61,\n 0x74, 0x61], this.position);\n this.position += 10;\n this.bytes[this.position] = 0x08; // Array type\n this.position++;\n this.view.setUint32(this.position, adHoc);\n this.position = this.length;\n this.bytes.set([0, 0, 9], this.position);\n this.position += 3; // End Data Tag\n this.length = this.position;\n break;\n }\n\n len = this.length - 11;\n\n // write the DataSize field\n this.bytes[ 1] = (len & 0x00FF0000) >>> 16;\n this.bytes[ 2] = (len & 0x0000FF00) >>> 8;\n this.bytes[ 3] = (len & 0x000000FF) >>> 0;\n // write the Timestamp\n this.bytes[ 4] = (this.dts & 0x00FF0000) >>> 16;\n this.bytes[ 5] = (this.dts & 0x0000FF00) >>> 8;\n this.bytes[ 6] = (this.dts & 0x000000FF) >>> 0;\n this.bytes[ 7] = (this.dts & 0xFF000000) >>> 24;\n // write the StreamID\n this.bytes[ 8] = 0;\n this.bytes[ 9] = 0;\n this.bytes[10] = 0;\n\n // Sometimes we're at the end of the view and have one slot to write a\n // uint32, so, prepareWrite of count 4, since, view is uint8\n prepareWrite(this, 4);\n this.view.setUint32(this.length, this.length);\n this.length += 4;\n this.position += 4;\n\n // trim down the byte buffer to what is actually being used\n this.bytes = this.bytes.subarray(0, this.length);\n this.frameTime = FlvTag.frameTime(this.bytes);\n // if bytes.bytelength isn't equal to this.length, handle error\n return this;\n };\n};\n\nFlvTag.AUDIO_TAG = 0x08; // == 8, :uint\nFlvTag.VIDEO_TAG = 0x09; // == 9, :uint\nFlvTag.METADATA_TAG = 0x12; // == 18, :uint\n\n// (tag:ByteArray):Boolean {\nFlvTag.isAudioFrame = function(tag) {\n return FlvTag.AUDIO_TAG === tag[0];\n};\n\n// (tag:ByteArray):Boolean {\nFlvTag.isVideoFrame = function(tag) {\n return FlvTag.VIDEO_TAG === tag[0];\n};\n\n// (tag:ByteArray):Boolean {\nFlvTag.isMetaData = function(tag) {\n return FlvTag.METADATA_TAG === tag[0];\n};\n\n// (tag:ByteArray):Boolean {\nFlvTag.isKeyFrame = function(tag) {\n if (FlvTag.isVideoFrame(tag)) {\n return tag[11] === 0x17;\n }\n\n if (FlvTag.isAudioFrame(tag)) {\n return true;\n }\n\n if (FlvTag.isMetaData(tag)) {\n return true;\n }\n\n return false;\n};\n\n// (tag:ByteArray):uint {\nFlvTag.frameTime = function(tag) {\n var pts = tag[ 4] << 16; // :uint\n pts |= tag[ 5] << 8;\n pts |= tag[ 6] << 0;\n pts |= tag[ 7] << 24;\n return pts;\n};\n\nmodule.exports = FlvTag;\n","\"use strict\";\nvar window = require(\"global/window\")\nvar isFunction = require(\"is-function\")\nvar parseHeaders = require(\"parse-headers\")\nvar xtend = require(\"xtend\")\n\nmodule.exports = createXHR\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function(method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function(uri, options, callback) {\n options = initParams(uri, options, callback)\n options.method = method.toUpperCase()\n return _createXHR(options)\n }\n})\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i])\n }\n}\n\nfunction isEmpty(obj){\n for(var i in obj){\n if(obj.hasOwnProperty(i)) return false\n }\n return true\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri\n\n if (isFunction(options)) {\n callback = options\n if (typeof uri === \"string\") {\n params = {uri:uri}\n }\n } else {\n params = xtend(options, {uri: uri})\n }\n\n params.callback = callback\n return params\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback)\n return _createXHR(options)\n}\n\nfunction _createXHR(options) {\n if(typeof options.callback === \"undefined\"){\n throw new Error(\"callback argument missing\")\n }\n\n var called = false\n var callback = function cbOnce(err, response, body){\n if(!called){\n called = true\n options.callback(err, response, body)\n }\n }\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0)\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined\n\n if (xhr.response) {\n body = xhr.response\n } else {\n body = xhr.responseText || getXml(xhr)\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body)\n } catch (e) {}\n }\n\n return body\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer)\n if(!(evt instanceof Error)){\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n }\n evt.statusCode = 0\n return callback(evt, failureResponse)\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return\n var status\n clearTimeout(timeoutTimer)\n if(options.useXDR && xhr.status===undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200\n } else {\n status = (xhr.status === 1223 ? 204 : xhr.status)\n }\n var response = failureResponse\n var err = null\n\n if (status !== 0){\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n }\n if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders())\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\")\n }\n return callback(err, response, response.body)\n }\n\n var xhr = options.xhr || null\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest()\n }else{\n xhr = new createXHR.XMLHttpRequest()\n }\n }\n\n var key\n var aborted\n var uri = xhr.url = options.uri || options.url\n var method = xhr.method = options.method || \"GET\"\n var body = options.body || options.data\n var headers = xhr.headers = options.headers || {}\n var sync = !!options.sync\n var isJson = false\n var timeoutTimer\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n }\n\n if (\"json\" in options && options.json !== false) {\n isJson = true\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n body = JSON.stringify(options.json === true ? body : options.json)\n }\n }\n\n xhr.onreadystatechange = readystatechange\n xhr.onload = loadFunc\n xhr.onerror = errorFunc\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n }\n xhr.onabort = function(){\n aborted = true;\n }\n xhr.ontimeout = errorFunc\n xhr.open(method, uri, !sync, options.username, options.password)\n //has to be after open\n if(!sync) {\n xhr.withCredentials = !!options.withCredentials\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0 ) {\n timeoutTimer = setTimeout(function(){\n if (aborted) return\n aborted = true//IE9 may still call readystatechange\n xhr.abort(\"timeout\")\n var e = new Error(\"XMLHttpRequest timeout\")\n e.code = \"ETIMEDOUT\"\n errorFunc(e)\n }, options.timeout )\n }\n\n if (xhr.setRequestHeader) {\n for(key in headers){\n if(headers.hasOwnProperty(key)){\n xhr.setRequestHeader(key, headers[key])\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType\n }\n\n if (\"beforeSend\" in options &&\n typeof options.beforeSend === \"function\"\n ) {\n options.beforeSend(xhr)\n }\n\n // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n xhr.send(body || null)\n\n return xhr\n\n\n}\n\nfunction getXml(xhr) {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML\n }\n var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\"\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML\n }\n\n return null\n}\n\nfunction noop() {}\n","/**\n * mux.js\n *\n * Copyright (c) 2016 Brightcove\n * All rights reserved.\n *\n * Utilities to detect basic properties and metadata about Aac data.\n */\n'use strict';\n\nvar ADTS_SAMPLING_FREQUENCIES = [\n 96000,\n 88200,\n 64000,\n 48000,\n 44100,\n 32000,\n 24000,\n 22050,\n 16000,\n 12000,\n 11025,\n 8000,\n 7350\n];\n\nvar parseSyncSafeInteger = function(data) {\n return (data[0] << 21) |\n (data[1] << 14) |\n (data[2] << 7) |\n (data[3]);\n};\n\n// return a percent-encoded representation of the specified byte range\n// @see http://en.wikipedia.org/wiki/Percent-encoding\nvar percentEncode = function(bytes, start, end) {\n var i, result = '';\n for (i = start; i < end; i++) {\n result += '%' + ('00' + bytes[i].toString(16)).slice(-2);\n }\n return result;\n};\n\n// return the string representation of the specified byte range,\n// interpreted as ISO-8859-1.\nvar parseIso88591 = function(bytes, start, end) {\n return unescape(percentEncode(bytes, start, end)); // jshint ignore:line\n};\n\nvar parseId3TagSize = function(header, byteIndex) {\n var\n returnSize = (header[byteIndex + 6] << 21) |\n (header[byteIndex + 7] << 14) |\n (header[byteIndex + 8] << 7) |\n (header[byteIndex + 9]),\n flags = header[byteIndex + 5],\n footerPresent = (flags & 16) >> 4;\n\n if (footerPresent) {\n return returnSize + 20;\n }\n return returnSize + 10;\n};\n\nvar parseAdtsSize = function(header, byteIndex) {\n var\n lowThree = (header[byteIndex + 5] & 0xE0) >> 5,\n middle = header[byteIndex + 4] << 3,\n highTwo = header[byteIndex + 3] & 0x3 << 11;\n\n return (highTwo | middle) | lowThree;\n};\n\nvar parseType = function(header, byteIndex) {\n if ((header[byteIndex] === 'I'.charCodeAt(0)) &&\n (header[byteIndex + 1] === 'D'.charCodeAt(0)) &&\n (header[byteIndex + 2] === '3'.charCodeAt(0))) {\n return 'timed-metadata';\n } else if ((header[byteIndex] & 0xff === 0xff) &&\n ((header[byteIndex + 1] & 0xf0) === 0xf0)) {\n return 'audio';\n }\n return null;\n};\n\nvar parseSampleRate = function(packet) {\n var i = 0;\n\n while (i + 5 < packet.length) {\n if (packet[i] !== 0xFF || (packet[i + 1] & 0xF6) !== 0xF0) {\n // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n i++;\n continue;\n }\n return ADTS_SAMPLING_FREQUENCIES[(packet[i + 2] & 0x3c) >>> 2];\n }\n\n return null;\n};\n\nvar parseAacTimestamp = function(packet) {\n var frameStart, frameSize, frame, frameHeader;\n\n // find the start of the first frame and the end of the tag\n frameStart = 10;\n if (packet[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n frameStart += parseSyncSafeInteger(packet.subarray(10, 14));\n }\n\n // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger(packet.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n return null;\n }\n frameHeader = String.fromCharCode(packet[frameStart],\n packet[frameStart + 1],\n packet[frameStart + 2],\n packet[frameStart + 3]);\n\n if (frameHeader === 'PRIV') {\n frame = packet.subarray(frameStart + 10, frameStart + frameSize + 10);\n\n for (var i = 0; i < frame.byteLength; i++) {\n if (frame[i] === 0) {\n var owner = parseIso88591(frame, 0, i);\n if (owner === 'com.apple.streaming.transportStreamTimestamp') {\n var d = frame.subarray(i + 1);\n var size = ((d[3] & 0x01) << 30) |\n (d[4] << 22) |\n (d[5] << 14) |\n (d[6] << 6) |\n (d[7] >>> 2);\n size *= 4;\n size += d[7] & 0x03;\n\n return size;\n }\n break;\n }\n }\n }\n\n frameStart += 10; // advance past the frame header\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < packet.byteLength);\n return null;\n};\n\nmodule.exports = {\n parseId3TagSize: parseId3TagSize,\n parseAdtsSize: parseAdtsSize,\n parseType: parseType,\n parseSampleRate: parseSampleRate,\n parseAacTimestamp: parseAacTimestamp\n};\n","/**\n * @license\n * Video.js 7.20.3 \n * Copyright Brightcove, Inc. \n * Available under Apache License Version 2.0\n * \n *\n * Includes vtt.js \n * Available under Apache License Version 2.0\n * \n */\n\nimport window$1 from 'global/window';\nimport document from 'global/document';\nimport _extends from '@babel/runtime/helpers/extends';\nimport keycode from 'keycode';\nimport _assertThisInitialized from '@babel/runtime/helpers/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/inheritsLoose';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport XHR from '@videojs/xhr';\nimport vtt from 'videojs-vtt.js';\nimport _construct from '@babel/runtime/helpers/construct';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport _resolveUrl from '@videojs/vhs-utils/es/resolve-url.js';\nimport { Parser } from 'm3u8-parser';\nimport { browserSupportsCodec, DEFAULT_VIDEO_CODEC, DEFAULT_AUDIO_CODEC, muxerSupportsCodec, parseCodecs, translateLegacyCodec, codecsFromDefault, getMimeForCodec, isAudioCodec } from '@videojs/vhs-utils/es/codecs.js';\nimport { simpleTypeFromSourceType } from '@videojs/vhs-utils/es/media-types.js';\nimport { isArrayBufferView, concatTypedArrays, stringToBytes, toUint8 } from '@videojs/vhs-utils/es/byte-helpers';\nimport { generateSidxKey, parseUTCTiming, parse, addSidxSegmentsToPlaylist } from 'mpd-parser';\nimport parseSidx from 'mux.js/lib/tools/parse-sidx';\nimport { getId3Offset } from '@videojs/vhs-utils/es/id3-helpers';\nimport { detectContainerForBytes, isLikelyFmp4MediaSegment } from '@videojs/vhs-utils/es/containers';\nimport { ONE_SECOND_IN_TS } from 'mux.js/lib/utils/clock';\n\nvar version$5 = \"7.20.3\";\n\n/**\n * An Object that contains lifecycle hooks as keys which point to an array\n * of functions that are run when a lifecycle is triggered\n *\n * @private\n */\nvar hooks_ = {};\n/**\n * Get a list of hooks for a specific lifecycle\n *\n * @param {string} type\n * the lifecyle to get hooks from\n *\n * @param {Function|Function[]} [fn]\n * Optionally add a hook (or hooks) to the lifecycle that your are getting.\n *\n * @return {Array}\n * an array of hooks, or an empty array if there are none.\n */\n\nvar hooks = function hooks(type, fn) {\n hooks_[type] = hooks_[type] || [];\n\n if (fn) {\n hooks_[type] = hooks_[type].concat(fn);\n }\n\n return hooks_[type];\n};\n/**\n * Add a function hook to a specific videojs lifecycle.\n *\n * @param {string} type\n * the lifecycle to hook the function to.\n *\n * @param {Function|Function[]}\n * The function or array of functions to attach.\n */\n\n\nvar hook = function hook(type, fn) {\n hooks(type, fn);\n};\n/**\n * Remove a hook from a specific videojs lifecycle.\n *\n * @param {string} type\n * the lifecycle that the function hooked to\n *\n * @param {Function} fn\n * The hooked function to remove\n *\n * @return {boolean}\n * The function that was removed or undef\n */\n\n\nvar removeHook = function removeHook(type, fn) {\n var index = hooks(type).indexOf(fn);\n\n if (index <= -1) {\n return false;\n }\n\n hooks_[type] = hooks_[type].slice();\n hooks_[type].splice(index, 1);\n return true;\n};\n/**\n * Add a function hook that will only run once to a specific videojs lifecycle.\n *\n * @param {string} type\n * the lifecycle to hook the function to.\n *\n * @param {Function|Function[]}\n * The function or array of functions to attach.\n */\n\n\nvar hookOnce = function hookOnce(type, fn) {\n hooks(type, [].concat(fn).map(function (original) {\n var wrapper = function wrapper() {\n removeHook(type, wrapper);\n return original.apply(void 0, arguments);\n };\n\n return wrapper;\n }));\n};\n\n/**\n * @file fullscreen-api.js\n * @module fullscreen-api\n * @private\n */\n/**\n * Store the browser-specific methods for the fullscreen API.\n *\n * @type {Object}\n * @see [Specification]{@link https://fullscreen.spec.whatwg.org}\n * @see [Map Approach From Screenfull.js]{@link https://github.com/sindresorhus/screenfull.js}\n */\n\nvar FullscreenApi = {\n prefixed: true\n}; // browser API methods\n\nvar apiMap = [['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror', 'fullscreen'], // WebKit\n['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror', '-webkit-full-screen'], // Mozilla\n['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror', '-moz-full-screen'], // Microsoft\n['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError', '-ms-fullscreen']];\nvar specApi = apiMap[0];\nvar browserApi; // determine the supported set of functions\n\nfor (var i = 0; i < apiMap.length; i++) {\n // check for exitFullscreen function\n if (apiMap[i][1] in document) {\n browserApi = apiMap[i];\n break;\n }\n} // map the browser API names to the spec API names\n\n\nif (browserApi) {\n for (var _i = 0; _i < browserApi.length; _i++) {\n FullscreenApi[specApi[_i]] = browserApi[_i];\n }\n\n FullscreenApi.prefixed = browserApi[0] !== specApi[0];\n}\n\n/**\n * @file create-logger.js\n * @module create-logger\n */\n\nvar history = [];\n/**\n * Log messages to the console and history based on the type of message\n *\n * @private\n * @param {string} type\n * The name of the console method to use.\n *\n * @param {Array} args\n * The arguments to be passed to the matching console method.\n */\n\nvar LogByTypeFactory = function LogByTypeFactory(name, log) {\n return function (type, level, args) {\n var lvl = log.levels[level];\n var lvlRegExp = new RegExp(\"^(\" + lvl + \")$\");\n\n if (type !== 'log') {\n // Add the type to the front of the message when it's not \"log\".\n args.unshift(type.toUpperCase() + ':');\n } // Add console prefix after adding to history.\n\n\n args.unshift(name + ':'); // Add a clone of the args at this point to history.\n\n if (history) {\n history.push([].concat(args)); // only store 1000 history entries\n\n var splice = history.length - 1000;\n history.splice(0, splice > 0 ? splice : 0);\n } // If there's no console then don't try to output messages, but they will\n // still be stored in history.\n\n\n if (!window$1.console) {\n return;\n } // Was setting these once outside of this function, but containing them\n // in the function makes it easier to test cases where console doesn't exist\n // when the module is executed.\n\n\n var fn = window$1.console[type];\n\n if (!fn && type === 'debug') {\n // Certain browsers don't have support for console.debug. For those, we\n // should default to the closest comparable log.\n fn = window$1.console.info || window$1.console.log;\n } // Bail out if there's no console or if this type is not allowed by the\n // current logging level.\n\n\n if (!fn || !lvl || !lvlRegExp.test(type)) {\n return;\n }\n\n fn[Array.isArray(args) ? 'apply' : 'call'](window$1.console, args);\n };\n};\n\nfunction createLogger$1(name) {\n // This is the private tracking variable for logging level.\n var level = 'info'; // the curried logByType bound to the specific log and history\n\n var logByType;\n /**\n * Logs plain debug messages. Similar to `console.log`.\n *\n * Due to [limitations](https://github.com/jsdoc3/jsdoc/issues/955#issuecomment-313829149)\n * of our JSDoc template, we cannot properly document this as both a function\n * and a namespace, so its function signature is documented here.\n *\n * #### Arguments\n * ##### *args\n * Mixed[]\n *\n * Any combination of values that could be passed to `console.log()`.\n *\n * #### Return Value\n *\n * `undefined`\n *\n * @namespace\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged.\n */\n\n var log = function log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n logByType('log', level, args);\n }; // This is the logByType helper that the logging methods below use\n\n\n logByType = LogByTypeFactory(name, log);\n /**\n * Create a new sublogger which chains the old name to the new name.\n *\n * For example, doing `videojs.log.createLogger('player')` and then using that logger will log the following:\n * ```js\n * mylogger('foo');\n * // > VIDEOJS: player: foo\n * ```\n *\n * @param {string} name\n * The name to add call the new logger\n * @return {Object}\n */\n\n log.createLogger = function (subname) {\n return createLogger$1(name + ': ' + subname);\n };\n /**\n * Enumeration of available logging levels, where the keys are the level names\n * and the values are `|`-separated strings containing logging methods allowed\n * in that logging level. These strings are used to create a regular expression\n * matching the function name being called.\n *\n * Levels provided by Video.js are:\n *\n * - `off`: Matches no calls. Any value that can be cast to `false` will have\n * this effect. The most restrictive.\n * - `all`: Matches only Video.js-provided functions (`debug`, `log`,\n * `log.warn`, and `log.error`).\n * - `debug`: Matches `log.debug`, `log`, `log.warn`, and `log.error` calls.\n * - `info` (default): Matches `log`, `log.warn`, and `log.error` calls.\n * - `warn`: Matches `log.warn` and `log.error` calls.\n * - `error`: Matches only `log.error` calls.\n *\n * @type {Object}\n */\n\n\n log.levels = {\n all: 'debug|log|warn|error',\n off: '',\n debug: 'debug|log|warn|error',\n info: 'log|warn|error',\n warn: 'warn|error',\n error: 'error',\n DEFAULT: level\n };\n /**\n * Get or set the current logging level.\n *\n * If a string matching a key from {@link module:log.levels} is provided, acts\n * as a setter.\n *\n * @param {string} [lvl]\n * Pass a valid level to set a new logging level.\n *\n * @return {string}\n * The current logging level.\n */\n\n log.level = function (lvl) {\n if (typeof lvl === 'string') {\n if (!log.levels.hasOwnProperty(lvl)) {\n throw new Error(\"\\\"\" + lvl + \"\\\" in not a valid log level\");\n }\n\n level = lvl;\n }\n\n return level;\n };\n /**\n * Returns an array containing everything that has been logged to the history.\n *\n * This array is a shallow clone of the internal history record. However, its\n * contents are _not_ cloned; so, mutating objects inside this array will\n * mutate them in history.\n *\n * @return {Array}\n */\n\n\n log.history = function () {\n return history ? [].concat(history) : [];\n };\n /**\n * Allows you to filter the history by the given logger name\n *\n * @param {string} fname\n * The name to filter by\n *\n * @return {Array}\n * The filtered list to return\n */\n\n\n log.history.filter = function (fname) {\n return (history || []).filter(function (historyItem) {\n // if the first item in each historyItem includes `fname`, then it's a match\n return new RegExp(\".*\" + fname + \".*\").test(historyItem[0]);\n });\n };\n /**\n * Clears the internal history tracking, but does not prevent further history\n * tracking.\n */\n\n\n log.history.clear = function () {\n if (history) {\n history.length = 0;\n }\n };\n /**\n * Disable history tracking if it is currently enabled.\n */\n\n\n log.history.disable = function () {\n if (history !== null) {\n history.length = 0;\n history = null;\n }\n };\n /**\n * Enable history tracking if it is currently disabled.\n */\n\n\n log.history.enable = function () {\n if (history === null) {\n history = [];\n }\n };\n /**\n * Logs error messages. Similar to `console.error`.\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as an error\n */\n\n\n log.error = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return logByType('error', level, args);\n };\n /**\n * Logs warning messages. Similar to `console.warn`.\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as a warning.\n */\n\n\n log.warn = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return logByType('warn', level, args);\n };\n /**\n * Logs debug messages. Similar to `console.debug`, but may also act as a comparable\n * log if `console.debug` is not available\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as debug.\n */\n\n\n log.debug = function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return logByType('debug', level, args);\n };\n\n return log;\n}\n\n/**\n * @file log.js\n * @module log\n */\nvar log$1 = createLogger$1('VIDEOJS');\nvar createLogger = log$1.createLogger;\n\n/**\n * @file obj.js\n * @module obj\n */\n\n/**\n * @callback obj:EachCallback\n *\n * @param {Mixed} value\n * The current key for the object that is being iterated over.\n *\n * @param {string} key\n * The current key-value for object that is being iterated over\n */\n\n/**\n * @callback obj:ReduceCallback\n *\n * @param {Mixed} accum\n * The value that is accumulating over the reduce loop.\n *\n * @param {Mixed} value\n * The current key for the object that is being iterated over.\n *\n * @param {string} key\n * The current key-value for object that is being iterated over\n *\n * @return {Mixed}\n * The new accumulated value.\n */\nvar toString = Object.prototype.toString;\n/**\n * Get the keys of an Object\n *\n * @param {Object}\n * The Object to get the keys from\n *\n * @return {string[]}\n * An array of the keys from the object. Returns an empty array if the\n * object passed in was invalid or had no keys.\n *\n * @private\n */\n\nvar keys = function keys(object) {\n return isObject(object) ? Object.keys(object) : [];\n};\n/**\n * Array-like iteration for objects.\n *\n * @param {Object} object\n * The object to iterate over\n *\n * @param {obj:EachCallback} fn\n * The callback function which is called for each key in the object.\n */\n\n\nfunction each(object, fn) {\n keys(object).forEach(function (key) {\n return fn(object[key], key);\n });\n}\n/**\n * Array-like reduce for objects.\n *\n * @param {Object} object\n * The Object that you want to reduce.\n *\n * @param {Function} fn\n * A callback function which is called for each key in the object. It\n * receives the accumulated value and the per-iteration value and key\n * as arguments.\n *\n * @param {Mixed} [initial = 0]\n * Starting value\n *\n * @return {Mixed}\n * The final accumulated value.\n */\n\nfunction reduce(object, fn, initial) {\n if (initial === void 0) {\n initial = 0;\n }\n\n return keys(object).reduce(function (accum, key) {\n return fn(accum, object[key], key);\n }, initial);\n}\n/**\n * Object.assign-style object shallow merge/extend.\n *\n * @param {Object} target\n * @param {Object} ...sources\n * @return {Object}\n */\n\nfunction assign(target) {\n for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n sources[_key - 1] = arguments[_key];\n }\n\n if (Object.assign) {\n return _extends.apply(void 0, [target].concat(sources));\n }\n\n sources.forEach(function (source) {\n if (!source) {\n return;\n }\n\n each(source, function (value, key) {\n target[key] = value;\n });\n });\n return target;\n}\n/**\n * Returns whether a value is an object of any kind - including DOM nodes,\n * arrays, regular expressions, etc. Not functions, though.\n *\n * This avoids the gotcha where using `typeof` on a `null` value\n * results in `'object'`.\n *\n * @param {Object} value\n * @return {boolean}\n */\n\nfunction isObject(value) {\n return !!value && typeof value === 'object';\n}\n/**\n * Returns whether an object appears to be a \"plain\" object - that is, a\n * direct instance of `Object`.\n *\n * @param {Object} value\n * @return {boolean}\n */\n\nfunction isPlain(value) {\n return isObject(value) && toString.call(value) === '[object Object]' && value.constructor === Object;\n}\n\n/**\n * @file computed-style.js\n * @module computed-style\n */\n/**\n * A safe getComputedStyle.\n *\n * This is needed because in Firefox, if the player is loaded in an iframe with\n * `display:none`, then `getComputedStyle` returns `null`, so, we do a\n * null-check to make sure that the player doesn't break in these cases.\n *\n * @function\n * @param {Element} el\n * The element you want the computed style of\n *\n * @param {string} prop\n * The property name you want\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\n\nfunction computedStyle(el, prop) {\n if (!el || !prop) {\n return '';\n }\n\n if (typeof window$1.getComputedStyle === 'function') {\n var computedStyleValue;\n\n try {\n computedStyleValue = window$1.getComputedStyle(el);\n } catch (e) {\n return '';\n }\n\n return computedStyleValue ? computedStyleValue.getPropertyValue(prop) || computedStyleValue[prop] : '';\n }\n\n return '';\n}\n\n/**\n * @file browser.js\n * @module browser\n */\nvar USER_AGENT = window$1.navigator && window$1.navigator.userAgent || '';\nvar webkitVersionMap = /AppleWebKit\\/([\\d.]+)/i.exec(USER_AGENT);\nvar appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n/**\n * Whether or not this device is an iPod.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_IPOD = /iPod/i.test(USER_AGENT);\n/**\n * The detected iOS version - or `null`.\n *\n * @static\n * @const\n * @type {string|null}\n */\n\nvar IOS_VERSION = function () {\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n\n if (match && match[1]) {\n return match[1];\n }\n\n return null;\n}();\n/**\n * Whether or not this is an Android device.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_ANDROID = /Android/i.test(USER_AGENT);\n/**\n * The detected Android version - or `null`.\n *\n * @static\n * @const\n * @type {number|string|null}\n */\n\nvar ANDROID_VERSION = function () {\n // This matches Android Major.Minor.Patch versions\n // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i);\n\n if (!match) {\n return null;\n }\n\n var major = match[1] && parseFloat(match[1]);\n var minor = match[2] && parseFloat(match[2]);\n\n if (major && minor) {\n return parseFloat(match[1] + '.' + match[2]);\n } else if (major) {\n return major;\n }\n\n return null;\n}();\n/**\n * Whether or not this is a native Android browser.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n/**\n * Whether or not this is Mozilla Firefox.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_FIREFOX = /Firefox/i.test(USER_AGENT);\n/**\n * Whether or not this is Microsoft Edge.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_EDGE = /Edg/i.test(USER_AGENT);\n/**\n * Whether or not this is Google Chrome.\n *\n * This will also be `true` for Chrome on iOS, which will have different support\n * as it is actually Safari under the hood.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_CHROME = !IS_EDGE && (/Chrome/i.test(USER_AGENT) || /CriOS/i.test(USER_AGENT));\n/**\n * The detected Google Chrome version - or `null`.\n *\n * @static\n * @const\n * @type {number|null}\n */\n\nvar CHROME_VERSION = function () {\n var match = USER_AGENT.match(/(Chrome|CriOS)\\/(\\d+)/);\n\n if (match && match[2]) {\n return parseFloat(match[2]);\n }\n\n return null;\n}();\n/**\n * The detected Internet Explorer version - or `null`.\n *\n * @static\n * @const\n * @type {number|null}\n */\n\nvar IE_VERSION = function () {\n var result = /MSIE\\s(\\d+)\\.\\d/.exec(USER_AGENT);\n var version = result && parseFloat(result[1]);\n\n if (!version && /Trident\\/7.0/i.test(USER_AGENT) && /rv:11.0/.test(USER_AGENT)) {\n // IE 11 has a different user agent string than other IE versions\n version = 11.0;\n }\n\n return version;\n}();\n/**\n * Whether or not this is desktop Safari.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_SAFARI = /Safari/i.test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE;\n/**\n * Whether or not this is a Windows machine.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_WINDOWS = /Windows/i.test(USER_AGENT);\n/**\n * Whether or not this device is touch-enabled.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar TOUCH_ENABLED = Boolean(isReal() && ('ontouchstart' in window$1 || window$1.navigator.maxTouchPoints || window$1.DocumentTouch && window$1.document instanceof window$1.DocumentTouch));\n/**\n * Whether or not this device is an iPad.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_IPAD = /iPad/i.test(USER_AGENT) || IS_SAFARI && TOUCH_ENABLED && !/iPhone/i.test(USER_AGENT);\n/**\n * Whether or not this device is an iPhone.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n// The Facebook app's UIWebView identifies as both an iPhone and iPad, so\n// to identify iPhones, we need to exclude iPads.\n// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/\n\nvar IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD;\n/**\n * Whether or not this is an iOS device.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n/**\n * Whether or not this is any flavor of Safari - including iOS.\n *\n * @static\n * @const\n * @type {Boolean}\n */\n\nvar IS_ANY_SAFARI = (IS_SAFARI || IS_IOS) && !IS_CHROME;\n\nvar browser = /*#__PURE__*/Object.freeze({\n __proto__: null,\n IS_IPOD: IS_IPOD,\n IOS_VERSION: IOS_VERSION,\n IS_ANDROID: IS_ANDROID,\n ANDROID_VERSION: ANDROID_VERSION,\n IS_NATIVE_ANDROID: IS_NATIVE_ANDROID,\n IS_FIREFOX: IS_FIREFOX,\n IS_EDGE: IS_EDGE,\n IS_CHROME: IS_CHROME,\n CHROME_VERSION: CHROME_VERSION,\n IE_VERSION: IE_VERSION,\n IS_SAFARI: IS_SAFARI,\n IS_WINDOWS: IS_WINDOWS,\n TOUCH_ENABLED: TOUCH_ENABLED,\n IS_IPAD: IS_IPAD,\n IS_IPHONE: IS_IPHONE,\n IS_IOS: IS_IOS,\n IS_ANY_SAFARI: IS_ANY_SAFARI\n});\n\n/**\n * @file dom.js\n * @module dom\n */\n/**\n * Detect if a value is a string with any non-whitespace characters.\n *\n * @private\n * @param {string} str\n * The string to check\n *\n * @return {boolean}\n * Will be `true` if the string is non-blank, `false` otherwise.\n *\n */\n\nfunction isNonBlankString(str) {\n // we use str.trim as it will trim any whitespace characters\n // from the front or back of non-whitespace characters. aka\n // Any string that contains non-whitespace characters will\n // still contain them after `trim` but whitespace only strings\n // will have a length of 0, failing this check.\n return typeof str === 'string' && Boolean(str.trim());\n}\n/**\n * Throws an error if the passed string has whitespace. This is used by\n * class methods to be relatively consistent with the classList API.\n *\n * @private\n * @param {string} str\n * The string to check for whitespace.\n *\n * @throws {Error}\n * Throws an error if there is whitespace in the string.\n */\n\n\nfunction throwIfWhitespace(str) {\n // str.indexOf instead of regex because str.indexOf is faster performance wise.\n if (str.indexOf(' ') >= 0) {\n throw new Error('class has illegal whitespace characters');\n }\n}\n/**\n * Produce a regular expression for matching a className within an elements className.\n *\n * @private\n * @param {string} className\n * The className to generate the RegExp for.\n *\n * @return {RegExp}\n * The RegExp that will check for a specific `className` in an elements\n * className.\n */\n\n\nfunction classRegExp(className) {\n return new RegExp('(^|\\\\s)' + className + '($|\\\\s)');\n}\n/**\n * Whether the current DOM interface appears to be real (i.e. not simulated).\n *\n * @return {boolean}\n * Will be `true` if the DOM appears to be real, `false` otherwise.\n */\n\n\nfunction isReal() {\n // Both document and window will never be undefined thanks to `global`.\n return document === window$1.document;\n}\n/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @param {Mixed} value\n * The value to check.\n *\n * @return {boolean}\n * Will be `true` if the value is a DOM element, `false` otherwise.\n */\n\nfunction isEl(value) {\n return isObject(value) && value.nodeType === 1;\n}\n/**\n * Determines if the current DOM is embedded in an iframe.\n *\n * @return {boolean}\n * Will be `true` if the DOM is embedded in an iframe, `false`\n * otherwise.\n */\n\nfunction isInFrame() {\n // We need a try/catch here because Safari will throw errors when attempting\n // to get either `parent` or `self`\n try {\n return window$1.parent !== window$1.self;\n } catch (x) {\n return true;\n }\n}\n/**\n * Creates functions to query the DOM using a given method.\n *\n * @private\n * @param {string} method\n * The method to create the query with.\n *\n * @return {Function}\n * The query method\n */\n\nfunction createQuerier(method) {\n return function (selector, context) {\n if (!isNonBlankString(selector)) {\n return document[method](null);\n }\n\n if (isNonBlankString(context)) {\n context = document.querySelector(context);\n }\n\n var ctx = isEl(context) ? context : document;\n return ctx[method] && ctx[method](selector);\n };\n}\n/**\n * Creates an element and applies properties, attributes, and inserts content.\n *\n * @param {string} [tagName='div']\n * Name of tag to be created.\n *\n * @param {Object} [properties={}]\n * Element properties to be applied.\n *\n * @param {Object} [attributes={}]\n * Element attributes to be applied.\n *\n * @param {module:dom~ContentDescriptor} content\n * A content descriptor object.\n *\n * @return {Element}\n * The element that was created.\n */\n\n\nfunction createEl(tagName, properties, attributes, content) {\n if (tagName === void 0) {\n tagName = 'div';\n }\n\n if (properties === void 0) {\n properties = {};\n }\n\n if (attributes === void 0) {\n attributes = {};\n }\n\n var el = document.createElement(tagName);\n Object.getOwnPropertyNames(properties).forEach(function (propName) {\n var val = properties[propName]; // See #2176\n // We originally were accepting both properties and attributes in the\n // same object, but that doesn't work so well.\n\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n log$1.warn('Setting attributes in the second argument of createEl()\\n' + 'has been deprecated. Use the third argument instead.\\n' + (\"createEl(type, properties, attributes). Attempting to set \" + propName + \" to \" + val + \".\"));\n el.setAttribute(propName, val); // Handle textContent since it's not supported everywhere and we have a\n // method for it.\n } else if (propName === 'textContent') {\n textContent(el, val);\n } else if (el[propName] !== val || propName === 'tabIndex') {\n el[propName] = val;\n }\n });\n Object.getOwnPropertyNames(attributes).forEach(function (attrName) {\n el.setAttribute(attrName, attributes[attrName]);\n });\n\n if (content) {\n appendContent(el, content);\n }\n\n return el;\n}\n/**\n * Injects text into an element, replacing any existing contents entirely.\n *\n * @param {Element} el\n * The element to add text content into\n *\n * @param {string} text\n * The text content to add.\n *\n * @return {Element}\n * The element with added text content.\n */\n\nfunction textContent(el, text) {\n if (typeof el.textContent === 'undefined') {\n el.innerText = text;\n } else {\n el.textContent = text;\n }\n\n return el;\n}\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child\n * Element to insert\n *\n * @param {Element} parent\n * Element to insert child into\n */\n\nfunction prependTo(child, parent) {\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n/**\n * Check if an element has a class name.\n *\n * @param {Element} element\n * Element to check\n *\n * @param {string} classToCheck\n * Class name to check for\n *\n * @return {boolean}\n * Will be `true` if the element has a class, `false` otherwise.\n *\n * @throws {Error}\n * Throws an error if `classToCheck` has white space.\n */\n\nfunction hasClass(element, classToCheck) {\n throwIfWhitespace(classToCheck);\n\n if (element.classList) {\n return element.classList.contains(classToCheck);\n }\n\n return classRegExp(classToCheck).test(element.className);\n}\n/**\n * Add a class name to an element.\n *\n * @param {Element} element\n * Element to add class name to.\n *\n * @param {string} classToAdd\n * Class name to add.\n *\n * @return {Element}\n * The DOM element with the added class name.\n */\n\nfunction addClass(element, classToAdd) {\n if (element.classList) {\n element.classList.add(classToAdd); // Don't need to `throwIfWhitespace` here because `hasElClass` will do it\n // in the case of classList not being supported.\n } else if (!hasClass(element, classToAdd)) {\n element.className = (element.className + ' ' + classToAdd).trim();\n }\n\n return element;\n}\n/**\n * Remove a class name from an element.\n *\n * @param {Element} element\n * Element to remove a class name from.\n *\n * @param {string} classToRemove\n * Class name to remove\n *\n * @return {Element}\n * The DOM element with class name removed.\n */\n\nfunction removeClass(element, classToRemove) {\n // Protect in case the player gets disposed\n if (!element) {\n log$1.warn(\"removeClass was called with an element that doesn't exist\");\n return null;\n }\n\n if (element.classList) {\n element.classList.remove(classToRemove);\n } else {\n throwIfWhitespace(classToRemove);\n element.className = element.className.split(/\\s+/).filter(function (c) {\n return c !== classToRemove;\n }).join(' ');\n }\n\n return element;\n}\n/**\n * The callback definition for toggleClass.\n *\n * @callback module:dom~PredicateCallback\n * @param {Element} element\n * The DOM element of the Component.\n *\n * @param {string} classToToggle\n * The `className` that wants to be toggled\n *\n * @return {boolean|undefined}\n * If `true` is returned, the `classToToggle` will be added to the\n * `element`. If `false`, the `classToToggle` will be removed from\n * the `element`. If `undefined`, the callback will be ignored.\n */\n\n/**\n * Adds or removes a class name to/from an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @param {Element} element\n * The element to toggle a class name on.\n *\n * @param {string} classToToggle\n * The class that should be toggled.\n *\n * @param {boolean|module:dom~PredicateCallback} [predicate]\n * See the return value for {@link module:dom~PredicateCallback}\n *\n * @return {Element}\n * The element with a class that has been toggled.\n */\n\nfunction toggleClass(element, classToToggle, predicate) {\n // This CANNOT use `classList` internally because IE11 does not support the\n // second parameter to the `classList.toggle()` method! Which is fine because\n // `classList` will be used by the add/remove functions.\n var has = hasClass(element, classToToggle);\n\n if (typeof predicate === 'function') {\n predicate = predicate(element, classToToggle);\n }\n\n if (typeof predicate !== 'boolean') {\n predicate = !has;\n } // If the necessary class operation matches the current state of the\n // element, no action is required.\n\n\n if (predicate === has) {\n return;\n }\n\n if (predicate) {\n addClass(element, classToToggle);\n } else {\n removeClass(element, classToToggle);\n }\n\n return element;\n}\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el\n * Element to add attributes to.\n *\n * @param {Object} [attributes]\n * Attributes to be applied.\n */\n\nfunction setAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function (attrName) {\n var attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, attrValue === true ? '' : attrValue);\n }\n });\n}\n/**\n * Get an element's attribute values, as defined on the HTML tag.\n *\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute.\n *\n * @param {Element} tag\n * Element from which to get tag attributes.\n *\n * @return {Object}\n * All attributes of the element. Boolean attributes will be `true` or\n * `false`, others will be strings.\n */\n\nfunction getAttributes(tag) {\n var obj = {}; // known boolean attributes\n // we can check for matching boolean properties, but not all browsers\n // and not all tags know about these attributes, so, we still want to check them manually\n\n var knownBooleans = ',' + 'autoplay,controls,playsinline,loop,muted,default,defaultMuted' + ',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n var attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n var attrName = attrs[i].name;\n var attrVal = attrs[i].value; // check for known booleans\n // the matching element property will return a value for typeof\n\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(',' + attrName + ',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = attrVal !== null ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n/**\n * Get the value of an element's attribute.\n *\n * @param {Element} el\n * A DOM element.\n *\n * @param {string} attribute\n * Attribute to get the value of.\n *\n * @return {string}\n * The value of the attribute.\n */\n\nfunction getAttribute(el, attribute) {\n return el.getAttribute(attribute);\n}\n/**\n * Set the value of an element's attribute.\n *\n * @param {Element} el\n * A DOM element.\n *\n * @param {string} attribute\n * Attribute to set.\n *\n * @param {string} value\n * Value to set the attribute to.\n */\n\nfunction setAttribute(el, attribute, value) {\n el.setAttribute(attribute, value);\n}\n/**\n * Remove an element's attribute.\n *\n * @param {Element} el\n * A DOM element.\n *\n * @param {string} attribute\n * Attribute to remove.\n */\n\nfunction removeAttribute(el, attribute) {\n el.removeAttribute(attribute);\n}\n/**\n * Attempt to block the ability to select text.\n */\n\nfunction blockTextSelection() {\n document.body.focus();\n\n document.onselectstart = function () {\n return false;\n };\n}\n/**\n * Turn off text selection blocking.\n */\n\nfunction unblockTextSelection() {\n document.onselectstart = function () {\n return true;\n };\n}\n/**\n * Identical to the native `getBoundingClientRect` function, but ensures that\n * the method is supported at all (it is in all browsers we claim to support)\n * and that the element is in the DOM before continuing.\n *\n * This wrapper function also shims properties which are not provided by some\n * older browsers (namely, IE8).\n *\n * Additionally, some browsers do not support adding properties to a\n * `ClientRect`/`DOMRect` object; so, we shallow-copy it with the standard\n * properties (except `x` and `y` which are not widely supported). This helps\n * avoid implementations where keys are non-enumerable.\n *\n * @param {Element} el\n * Element whose `ClientRect` we want to calculate.\n *\n * @return {Object|undefined}\n * Always returns a plain object - or `undefined` if it cannot.\n */\n\nfunction getBoundingClientRect(el) {\n if (el && el.getBoundingClientRect && el.parentNode) {\n var rect = el.getBoundingClientRect();\n var result = {};\n ['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(function (k) {\n if (rect[k] !== undefined) {\n result[k] = rect[k];\n }\n });\n\n if (!result.height) {\n result.height = parseFloat(computedStyle(el, 'height'));\n }\n\n if (!result.width) {\n result.width = parseFloat(computedStyle(el, 'width'));\n }\n\n return result;\n }\n}\n/**\n * Represents the position of a DOM element on the page.\n *\n * @typedef {Object} module:dom~Position\n *\n * @property {number} left\n * Pixels to the left.\n *\n * @property {number} top\n * Pixels from the top.\n */\n\n/**\n * Get the position of an element in the DOM.\n *\n * Uses `getBoundingClientRect` technique from John Resig.\n *\n * @see http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el\n * Element from which to get offset.\n *\n * @return {module:dom~Position}\n * The position of the element that was passed in.\n */\n\nfunction findPosition(el) {\n if (!el || el && !el.offsetParent) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n }\n\n var width = el.offsetWidth;\n var height = el.offsetHeight;\n var left = 0;\n var top = 0;\n\n while (el.offsetParent && el !== document[FullscreenApi.fullscreenElement]) {\n left += el.offsetLeft;\n top += el.offsetTop;\n el = el.offsetParent;\n }\n\n return {\n left: left,\n top: top,\n width: width,\n height: height\n };\n}\n/**\n * Represents x and y coordinates for a DOM element or mouse pointer.\n *\n * @typedef {Object} module:dom~Coordinates\n *\n * @property {number} x\n * x coordinate in pixels\n *\n * @property {number} y\n * y coordinate in pixels\n */\n\n/**\n * Get the pointer position within an element.\n *\n * The base on the coordinates are the bottom left of the element.\n *\n * @param {Element} el\n * Element on which to get the pointer position on.\n *\n * @param {EventTarget~Event} event\n * Event object.\n *\n * @return {module:dom~Coordinates}\n * A coordinates object corresponding to the mouse position.\n *\n */\n\nfunction getPointerPosition(el, event) {\n var translated = {\n x: 0,\n y: 0\n };\n\n if (IS_IOS) {\n var item = el;\n\n while (item && item.nodeName.toLowerCase() !== 'html') {\n var transform = computedStyle(item, 'transform');\n\n if (/^matrix/.test(transform)) {\n var values = transform.slice(7, -1).split(/,\\s/).map(Number);\n translated.x += values[4];\n translated.y += values[5];\n } else if (/^matrix3d/.test(transform)) {\n var _values = transform.slice(9, -1).split(/,\\s/).map(Number);\n\n translated.x += _values[12];\n translated.y += _values[13];\n }\n\n item = item.parentNode;\n }\n }\n\n var position = {};\n var boxTarget = findPosition(event.target);\n var box = findPosition(el);\n var boxW = box.width;\n var boxH = box.height;\n var offsetY = event.offsetY - (box.top - boxTarget.top);\n var offsetX = event.offsetX - (box.left - boxTarget.left);\n\n if (event.changedTouches) {\n offsetX = event.changedTouches[0].pageX - box.left;\n offsetY = event.changedTouches[0].pageY + box.top;\n\n if (IS_IOS) {\n offsetX -= translated.x;\n offsetY -= translated.y;\n }\n }\n\n position.y = 1 - Math.max(0, Math.min(1, offsetY / boxH));\n position.x = Math.max(0, Math.min(1, offsetX / boxW));\n return position;\n}\n/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @param {Mixed} value\n * Check if this value is a text node.\n *\n * @return {boolean}\n * Will be `true` if the value is a text node, `false` otherwise.\n */\n\nfunction isTextNode(value) {\n return isObject(value) && value.nodeType === 3;\n}\n/**\n * Empties the contents of an element.\n *\n * @param {Element} el\n * The element to empty children from\n *\n * @return {Element}\n * The element with no children\n */\n\nfunction emptyEl(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n\n return el;\n}\n/**\n * This is a mixed value that describes content to be injected into the DOM\n * via some method. It can be of the following types:\n *\n * Type | Description\n * -----------|-------------\n * `string` | The value will be normalized into a text node.\n * `Element` | The value will be accepted as-is.\n * `TextNode` | The value will be accepted as-is.\n * `Array` | A one-dimensional array of strings, elements, text nodes, or functions. These functions should return a string, element, or text node (any other return value, like an array, will be ignored).\n * `Function` | A function, which is expected to return a string, element, text node, or array - any of the other possible values described above. This means that a content descriptor could be a function that returns an array of functions, but those second-level functions must return strings, elements, or text nodes.\n *\n * @typedef {string|Element|TextNode|Array|Function} module:dom~ContentDescriptor\n */\n\n/**\n * Normalizes content for eventual insertion into the DOM.\n *\n * This allows a wide range of content definition methods, but helps protect\n * from falling into the trap of simply writing to `innerHTML`, which could\n * be an XSS concern.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * @param {module:dom~ContentDescriptor} content\n * A content descriptor value.\n *\n * @return {Array}\n * All of the content that was passed in, normalized to an array of\n * elements or text nodes.\n */\n\nfunction normalizeContent(content) {\n // First, invoke content if it is a function. If it produces an array,\n // that needs to happen before normalization.\n if (typeof content === 'function') {\n content = content();\n } // Next up, normalize to an array, so one or many items can be normalized,\n // filtered, and returned.\n\n\n return (Array.isArray(content) ? content : [content]).map(function (value) {\n // First, invoke value if it is a function to produce a new value,\n // which will be subsequently normalized to a Node of some kind.\n if (typeof value === 'function') {\n value = value();\n }\n\n if (isEl(value) || isTextNode(value)) {\n return value;\n }\n\n if (typeof value === 'string' && /\\S/.test(value)) {\n return document.createTextNode(value);\n }\n }).filter(function (value) {\n return value;\n });\n}\n/**\n * Normalizes and appends content to an element.\n *\n * @param {Element} el\n * Element to append normalized content to.\n *\n * @param {module:dom~ContentDescriptor} content\n * A content descriptor value.\n *\n * @return {Element}\n * The element with appended normalized content.\n */\n\nfunction appendContent(el, content) {\n normalizeContent(content).forEach(function (node) {\n return el.appendChild(node);\n });\n return el;\n}\n/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * @param {Element} el\n * Element to insert normalized content into.\n *\n * @param {module:dom~ContentDescriptor} content\n * A content descriptor value.\n *\n * @return {Element}\n * The element with inserted normalized content.\n */\n\nfunction insertContent(el, content) {\n return appendContent(emptyEl(el), content);\n}\n/**\n * Check if an event was a single left click.\n *\n * @param {EventTarget~Event} event\n * Event object.\n *\n * @return {boolean}\n * Will be `true` if a single left click, `false` otherwise.\n */\n\nfunction isSingleLeftClick(event) {\n // Note: if you create something draggable, be sure to\n // call it on both `mousedown` and `mousemove` event,\n // otherwise `mousedown` should be enough for a button\n if (event.button === undefined && event.buttons === undefined) {\n // Why do we need `buttons` ?\n // Because, middle mouse sometimes have this:\n // e.button === 0 and e.buttons === 4\n // Furthermore, we want to prevent combination click, something like\n // HOLD middlemouse then left click, that would be\n // e.button === 0, e.buttons === 5\n // just `button` is not gonna work\n // Alright, then what this block does ?\n // this is for chrome `simulate mobile devices`\n // I want to support this as well\n return true;\n }\n\n if (event.button === 0 && event.buttons === undefined) {\n // Touch screen, sometimes on some specific device, `buttons`\n // doesn't have anything (safari on ios, blackberry...)\n return true;\n } // `mouseup` event on a single left click has\n // `button` and `buttons` equal to 0\n\n\n if (event.type === 'mouseup' && event.button === 0 && event.buttons === 0) {\n return true;\n }\n\n if (event.button !== 0 || event.buttons !== 1) {\n // This is the reason we have those if else block above\n // if any special case we can catch and let it slide\n // we do it above, when get to here, this definitely\n // is-not-left-click\n return false;\n }\n\n return true;\n}\n/**\n * Finds a single DOM element matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {Element|null}\n * The element that was found or null.\n */\n\nvar $ = createQuerier('querySelector');\n/**\n * Finds a all DOM elements matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {NodeList}\n * A element list of elements that were found. Will be empty if none\n * were found.\n *\n */\n\nvar $$ = createQuerier('querySelectorAll');\n\nvar Dom = /*#__PURE__*/Object.freeze({\n __proto__: null,\n isReal: isReal,\n isEl: isEl,\n isInFrame: isInFrame,\n createEl: createEl,\n textContent: textContent,\n prependTo: prependTo,\n hasClass: hasClass,\n addClass: addClass,\n removeClass: removeClass,\n toggleClass: toggleClass,\n setAttributes: setAttributes,\n getAttributes: getAttributes,\n getAttribute: getAttribute,\n setAttribute: setAttribute,\n removeAttribute: removeAttribute,\n blockTextSelection: blockTextSelection,\n unblockTextSelection: unblockTextSelection,\n getBoundingClientRect: getBoundingClientRect,\n findPosition: findPosition,\n getPointerPosition: getPointerPosition,\n isTextNode: isTextNode,\n emptyEl: emptyEl,\n normalizeContent: normalizeContent,\n appendContent: appendContent,\n insertContent: insertContent,\n isSingleLeftClick: isSingleLeftClick,\n $: $,\n $$: $$\n});\n\n/**\n * @file setup.js - Functions for setting up a player without\n * user interaction based on the data-setup `attribute` of the video tag.\n *\n * @module setup\n */\nvar _windowLoaded = false;\nvar videojs$1;\n/**\n * Set up any tags that have a data-setup `attribute` when the player is started.\n */\n\nvar autoSetup = function autoSetup() {\n if (videojs$1.options.autoSetup === false) {\n return;\n }\n\n var vids = Array.prototype.slice.call(document.getElementsByTagName('video'));\n var audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));\n var divs = Array.prototype.slice.call(document.getElementsByTagName('video-js'));\n var mediaEls = vids.concat(audios, divs); // Check if any media elements exist\n\n if (mediaEls && mediaEls.length > 0) {\n for (var i = 0, e = mediaEls.length; i < e; i++) {\n var mediaEl = mediaEls[i]; // Check if element exists, has getAttribute func.\n\n if (mediaEl && mediaEl.getAttribute) {\n // Make sure this player hasn't already been set up.\n if (mediaEl.player === undefined) {\n var options = mediaEl.getAttribute('data-setup'); // Check if data-setup attr exists.\n // We only auto-setup if they've added the data-setup attr.\n\n if (options !== null) {\n // Create new video.js instance.\n videojs$1(mediaEl);\n }\n } // If getAttribute isn't defined, we need to wait for the DOM.\n\n } else {\n autoSetupTimeout(1);\n break;\n }\n } // No videos were found, so keep looping unless page is finished loading.\n\n } else if (!_windowLoaded) {\n autoSetupTimeout(1);\n }\n};\n/**\n * Wait until the page is loaded before running autoSetup. This will be called in\n * autoSetup if `hasLoaded` returns false.\n *\n * @param {number} wait\n * How long to wait in ms\n *\n * @param {module:videojs} [vjs]\n * The videojs library function\n */\n\n\nfunction autoSetupTimeout(wait, vjs) {\n // Protect against breakage in non-browser environments\n if (!isReal()) {\n return;\n }\n\n if (vjs) {\n videojs$1 = vjs;\n }\n\n window$1.setTimeout(autoSetup, wait);\n}\n/**\n * Used to set the internal tracking of window loaded state to true.\n *\n * @private\n */\n\n\nfunction setWindowLoaded() {\n _windowLoaded = true;\n window$1.removeEventListener('load', setWindowLoaded);\n}\n\nif (isReal()) {\n if (document.readyState === 'complete') {\n setWindowLoaded();\n } else {\n /**\n * Listen for the load event on window, and set _windowLoaded to true.\n *\n * We use a standard event listener here to avoid incrementing the GUID\n * before any players are created.\n *\n * @listens load\n */\n window$1.addEventListener('load', setWindowLoaded);\n }\n}\n\n/**\n * @file stylesheet.js\n * @module stylesheet\n */\n/**\n * Create a DOM syle element given a className for it.\n *\n * @param {string} className\n * The className to add to the created style element.\n *\n * @return {Element}\n * The element that was created.\n */\n\nvar createStyleElement = function createStyleElement(className) {\n var style = document.createElement('style');\n style.className = className;\n return style;\n};\n/**\n * Add text to a DOM element.\n *\n * @param {Element} el\n * The Element to add text content to.\n *\n * @param {string} content\n * The text to add to the element.\n */\n\nvar setTextContent = function setTextContent(el, content) {\n if (el.styleSheet) {\n el.styleSheet.cssText = content;\n } else {\n el.textContent = content;\n }\n};\n\n/**\n * @file guid.js\n * @module guid\n */\n// Default value for GUIDs. This allows us to reset the GUID counter in tests.\n//\n// The initial GUID is 3 because some users have come to rely on the first\n// default player ID ending up as `vjs_video_3`.\n//\n// See: https://github.com/videojs/video.js/pull/6216\nvar _initialGuid = 3;\n/**\n * Unique ID for an element or function\n *\n * @type {Number}\n */\n\nvar _guid = _initialGuid;\n/**\n * Get a unique auto-incrementing ID by number that has not been returned before.\n *\n * @return {number}\n * A new unique ID.\n */\n\nfunction newGUID() {\n return _guid++;\n}\n\n/**\n * @file dom-data.js\n * @module dom-data\n */\nvar FakeWeakMap;\n\nif (!window$1.WeakMap) {\n FakeWeakMap = /*#__PURE__*/function () {\n function FakeWeakMap() {\n this.vdata = 'vdata' + Math.floor(window$1.performance && window$1.performance.now() || Date.now());\n this.data = {};\n }\n\n var _proto = FakeWeakMap.prototype;\n\n _proto.set = function set(key, value) {\n var access = key[this.vdata] || newGUID();\n\n if (!key[this.vdata]) {\n key[this.vdata] = access;\n }\n\n this.data[access] = value;\n return this;\n };\n\n _proto.get = function get(key) {\n var access = key[this.vdata]; // we have data, return it\n\n if (access) {\n return this.data[access];\n } // we don't have data, return nothing.\n // return undefined explicitly as that's the contract for this method\n\n\n log$1('We have no data for this element', key);\n return undefined;\n };\n\n _proto.has = function has(key) {\n var access = key[this.vdata];\n return access in this.data;\n };\n\n _proto[\"delete\"] = function _delete(key) {\n var access = key[this.vdata];\n\n if (access) {\n delete this.data[access];\n delete key[this.vdata];\n }\n };\n\n return FakeWeakMap;\n }();\n}\n/**\n * Element Data Store.\n *\n * Allows for binding data to an element without putting it directly on the\n * element. Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\n\n\nvar DomData = window$1.WeakMap ? new WeakMap() : new FakeWeakMap();\n\n/**\n * @file events.js. An Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n *\n * @file events.js\n * @module events\n */\n/**\n * Clean up the listener cache and dispatchers\n *\n * @param {Element|Object} elem\n * Element to clean up\n *\n * @param {string} type\n * Type of event to clean up\n */\n\nfunction _cleanUpEvents(elem, type) {\n if (!DomData.has(elem)) {\n return;\n }\n\n var data = DomData.get(elem); // Remove the events of a particular type if there are none left\n\n if (data.handlers[type].length === 0) {\n delete data.handlers[type]; // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n // Remove the meta-handler from the element\n\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n } // Remove the events object if there are no types left\n\n\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n } // Finally remove the element data if there is no data left\n\n\n if (Object.getOwnPropertyNames(data).length === 0) {\n DomData[\"delete\"](elem);\n }\n}\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn\n * The event method we want to use.\n *\n * @param {Element|Object} elem\n * Element or object to bind listeners to\n *\n * @param {string} type\n * Type of event to bind to.\n *\n * @param {EventTarget~EventListener} callback\n * Event listener.\n */\n\n\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function (type) {\n // Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event\n * Event object to fix.\n *\n * @return {Object}\n * Fixed event object.\n */\n\n\nfunction fixEvent(event) {\n if (event.fixed_) {\n return event;\n }\n\n function returnTrue() {\n return true;\n }\n\n function returnFalse() {\n return false;\n } // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n\n\n if (!event || !event.isPropagationStopped || !event.isImmediatePropagationStopped) {\n var old = event || window$1.event;\n event = {}; // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n // and webkitMovementX/Y\n // Lighthouse complains if Event.path is copied\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' && key !== 'webkitMovementX' && key !== 'webkitMovementY' && key !== 'path') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n } // The event occurred on this element\n\n\n if (!event.target) {\n event.target = event.srcElement || document;\n } // Handle which other element the event is related to\n\n\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;\n } // Stop the default browser action\n\n\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n\n event.returnValue = false;\n old.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false; // Stop the event from bubbling\n\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n\n event.cancelBubble = true;\n old.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse; // Stop the event from bubbling and executing other handlers\n\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse; // Handle mouse position\n\n if (event.clientX !== null && event.clientX !== undefined) {\n var doc = document.documentElement;\n var body = document.body;\n event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n } // Handle key presses\n\n\n event.which = event.charCode || event.keyCode; // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n\n if (event.button !== null && event.button !== undefined) {\n // The following is disabled because it does not pass videojs-standard\n // and... yikes.\n\n /* eslint-disable */\n event.button = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0;\n /* eslint-enable */\n }\n }\n\n event.fixed_ = true; // Returns fixed-up instance\n\n return event;\n}\n/**\n * Whether passive event listeners are supported\n */\n\nvar _supportsPassive;\n\nvar supportsPassive = function supportsPassive() {\n if (typeof _supportsPassive !== 'boolean') {\n _supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n _supportsPassive = true;\n }\n });\n window$1.addEventListener('test', null, opts);\n window$1.removeEventListener('test', null, opts);\n } catch (e) {// disregard\n }\n }\n\n return _supportsPassive;\n};\n/**\n * Touch events Chrome expects to be passive\n */\n\n\nvar passiveEvents = ['touchstart', 'touchmove'];\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem\n * Element or object to bind listeners to\n *\n * @param {string|string[]} type\n * Type of event to bind to.\n *\n * @param {EventTarget~EventListener} fn\n * Event listener.\n */\n\nfunction on(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n if (!DomData.has(elem)) {\n DomData.set(elem, {});\n }\n\n var data = DomData.get(elem); // We need a place to store all our handler data\n\n if (!data.handlers) {\n data.handlers = {};\n }\n\n if (!data.handlers[type]) {\n data.handlers[type] = [];\n }\n\n if (!fn.guid) {\n fn.guid = newGUID();\n }\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash) {\n if (data.disabled) {\n return;\n }\n\n event = fixEvent(event);\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n try {\n handlersCopy[m].call(elem, event, hash);\n } catch (e) {\n log$1.error(e);\n }\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n var options = false;\n\n if (supportsPassive() && passiveEvents.indexOf(type) > -1) {\n options = {\n passive: true\n };\n }\n\n elem.addEventListener(type, data.dispatcher, options);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem\n * Object to remove listeners from.\n *\n * @param {string|string[]} [type]\n * Type of listener to remove. Don't include to remove all events from element.\n *\n * @param {EventTarget~EventListener} [fn]\n * Specific listener to remove. Don't include to remove listeners for an event\n * type.\n */\n\nfunction off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!DomData.has(elem)) {\n return;\n }\n\n var data = DomData.get(elem); // If no events exist, nothing to unbind\n\n if (!data.handlers) {\n return;\n }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n } // Utility function\n\n\n var removeType = function removeType(el, t) {\n data.handlers[t] = [];\n\n _cleanUpEvents(el, t);\n }; // Are we removing all bound events?\n\n\n if (type === undefined) {\n for (var t in data.handlers) {\n if (Object.prototype.hasOwnProperty.call(data.handlers || {}, t)) {\n removeType(elem, t);\n }\n }\n\n return;\n }\n\n var handlers = data.handlers[type]; // If no handlers exist, nothing to unbind\n\n if (!handlers) {\n return;\n } // If no listener was provided, remove all listeners for type\n\n\n if (!fn) {\n removeType(elem, type);\n return;\n } // We're only removing a single handler\n\n\n if (fn.guid) {\n for (var n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem\n * Element to trigger an event on\n *\n * @param {EventTarget~Event|string} event\n * A string (the type) or an event object with a type attribute\n *\n * @param {Object} [hash]\n * data hash to pass along with the event\n *\n * @return {boolean|undefined}\n * Returns the opposite of `defaultPrevented` if default was\n * prevented. Otherwise, returns `undefined`\n */\n\nfunction trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = DomData.has(elem) ? DomData.get(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument; // type = event.type || event,\n // handler;\n // If an event name was passed as a string, creates an event out of it\n\n if (typeof event === 'string') {\n event = {\n type: event,\n target: elem\n };\n } else if (!event.target) {\n event.target = elem;\n } // Normalizes the event properties.\n\n\n event = fixEvent(event); // If the passed element has a dispatcher, executes the established handlers.\n\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n } // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n\n\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash); // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented && event.target && event.target[event.type]) {\n if (!DomData.has(event.target)) {\n DomData.set(event.target, {});\n }\n\n var targetData = DomData.get(event.target); // Checks if the target has a default action for this event.\n\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true; // Executes the default action.\n\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n } // Re-enables event dispatching.\n\n\n targetData.disabled = false;\n }\n } // Inform the triggerer if the default was prevented by returning false\n\n\n return !event.defaultPrevented;\n}\n/**\n * Trigger a listener only once for an event.\n *\n * @param {Element|Object} elem\n * Element or object to bind to.\n *\n * @param {string|string[]} type\n * Name/type of event\n *\n * @param {Event~EventListener} fn\n * Event listener function\n */\n\nfunction one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n\n var func = function func() {\n off(elem, type, func);\n fn.apply(this, arguments);\n }; // copy the guid to the new function so it can removed using the original function's ID\n\n\n func.guid = fn.guid = fn.guid || newGUID();\n on(elem, type, func);\n}\n/**\n * Trigger a listener only once and then turn if off for all\n * configured events\n *\n * @param {Element|Object} elem\n * Element or object to bind to.\n *\n * @param {string|string[]} type\n * Name/type of event\n *\n * @param {Event~EventListener} fn\n * Event listener function\n */\n\nfunction any(elem, type, fn) {\n var func = function func() {\n off(elem, type, func);\n fn.apply(this, arguments);\n }; // copy the guid to the new function so it can removed using the original function's ID\n\n\n func.guid = fn.guid = fn.guid || newGUID(); // multiple ons, but one off for everything\n\n on(elem, type, func);\n}\n\nvar Events = /*#__PURE__*/Object.freeze({\n __proto__: null,\n fixEvent: fixEvent,\n on: on,\n off: off,\n trigger: trigger,\n one: one,\n any: any\n});\n\n/**\n * @file fn.js\n * @module fn\n */\nvar UPDATE_REFRESH_INTERVAL = 30;\n/**\n * Bind (a.k.a proxy or context). A simple method for changing the context of\n * a function.\n *\n * It also stores a unique id on the function so it can be easily removed from\n * events.\n *\n * @function\n * @param {Mixed} context\n * The object to bind as scope.\n *\n * @param {Function} fn\n * The function to be bound to a scope.\n *\n * @param {number} [uid]\n * An optional unique ID for the function to be set\n *\n * @return {Function}\n * The new function that will be bound into the context given\n */\n\nvar bind = function bind(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) {\n fn.guid = newGUID();\n } // Create the new function that changes the context\n\n\n var bound = fn.bind(context); // Allow for the ability to individualize this function\n // Needed in the case where multiple objects might share the same prototype\n // IF both items add an event listener with the same function, then you try to remove just one\n // it will remove both because they both have the same guid.\n // when using this, you need to use the bind method when you remove the listener as well.\n // currently used in text tracks\n\n bound.guid = uid ? uid + '_' + fn.guid : fn.guid;\n return bound;\n};\n/**\n * Wraps the given function, `fn`, with a new function that only invokes `fn`\n * at most once per every `wait` milliseconds.\n *\n * @function\n * @param {Function} fn\n * The function to be throttled.\n *\n * @param {number} wait\n * The number of milliseconds by which to throttle.\n *\n * @return {Function}\n */\n\nvar throttle = function throttle(fn, wait) {\n var last = window$1.performance.now();\n\n var throttled = function throttled() {\n var now = window$1.performance.now();\n\n if (now - last >= wait) {\n fn.apply(void 0, arguments);\n last = now;\n }\n };\n\n return throttled;\n};\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked.\n *\n * Inspired by lodash and underscore implementations.\n *\n * @function\n * @param {Function} func\n * The function to wrap with debounce behavior.\n *\n * @param {number} wait\n * The number of milliseconds to wait after the last invocation.\n *\n * @param {boolean} [immediate]\n * Whether or not to invoke the function immediately upon creation.\n *\n * @param {Object} [context=window]\n * The \"context\" in which the debounced function should debounce. For\n * example, if this function should be tied to a Video.js player,\n * the player can be passed here. Alternatively, defaults to the\n * global `window` object.\n *\n * @return {Function}\n * A debounced function.\n */\n\nvar debounce = function debounce(func, wait, immediate, context) {\n if (context === void 0) {\n context = window$1;\n }\n\n var timeout;\n\n var cancel = function cancel() {\n context.clearTimeout(timeout);\n timeout = null;\n };\n /* eslint-disable consistent-this */\n\n\n var debounced = function debounced() {\n var self = this;\n var args = arguments;\n\n var _later = function later() {\n timeout = null;\n _later = null;\n\n if (!immediate) {\n func.apply(self, args);\n }\n };\n\n if (!timeout && immediate) {\n func.apply(self, args);\n }\n\n context.clearTimeout(timeout);\n timeout = context.setTimeout(_later, wait);\n };\n /* eslint-enable consistent-this */\n\n\n debounced.cancel = cancel;\n return debounced;\n};\n\n/**\n * @file src/js/event-target.js\n */\n/**\n * `EventTarget` is a class that can have the same API as the DOM `EventTarget`. It\n * adds shorthand functions that wrap around lengthy functions. For example:\n * the `on` function is a wrapper around `addEventListener`.\n *\n * @see [EventTarget Spec]{@link https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget}\n * @class EventTarget\n */\n\nvar EventTarget$2 = function EventTarget() {};\n/**\n * A Custom DOM event.\n *\n * @typedef {Object} EventTarget~Event\n * @see [Properties]{@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent}\n */\n\n/**\n * All event listeners should follow the following format.\n *\n * @callback EventTarget~EventListener\n * @this {EventTarget}\n *\n * @param {EventTarget~Event} event\n * the event that triggered this function\n *\n * @param {Object} [hash]\n * hash of data sent during the event\n */\n\n/**\n * An object containing event names as keys and booleans as values.\n *\n * > NOTE: If an event name is set to a true value here {@link EventTarget#trigger}\n * will have extra functionality. See that function for more information.\n *\n * @property EventTarget.prototype.allowedEvents_\n * @private\n */\n\n\nEventTarget$2.prototype.allowedEvents_ = {};\n/**\n * Adds an `event listener` to an instance of an `EventTarget`. An `event listener` is a\n * function that will get called when an event with a certain name gets triggered.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to call with `EventTarget`s\n */\n\nEventTarget$2.prototype.on = function (type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n var ael = this.addEventListener;\n\n this.addEventListener = function () {};\n\n on(this, type, fn);\n this.addEventListener = ael;\n};\n/**\n * An alias of {@link EventTarget#on}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#on}\n */\n\n\nEventTarget$2.prototype.addEventListener = EventTarget$2.prototype.on;\n/**\n * Removes an `event listener` for a specific event from an instance of `EventTarget`.\n * This makes it so that the `event listener` will no longer get called when the\n * named event happens.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to remove.\n */\n\nEventTarget$2.prototype.off = function (type, fn) {\n off(this, type, fn);\n};\n/**\n * An alias of {@link EventTarget#off}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#off}\n */\n\n\nEventTarget$2.prototype.removeEventListener = EventTarget$2.prototype.off;\n/**\n * This function will add an `event listener` that gets triggered only once. After the\n * first trigger it will get removed. This is like adding an `event listener`\n * with {@link EventTarget#on} that calls {@link EventTarget#off} on itself.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to be called once for each event name.\n */\n\nEventTarget$2.prototype.one = function (type, fn) {\n // Remove the addEventListener aliasing Events.on\n // so we don't get into an infinite type loop\n var ael = this.addEventListener;\n\n this.addEventListener = function () {};\n\n one(this, type, fn);\n this.addEventListener = ael;\n};\n\nEventTarget$2.prototype.any = function (type, fn) {\n // Remove the addEventListener aliasing Events.on\n // so we don't get into an infinite type loop\n var ael = this.addEventListener;\n\n this.addEventListener = function () {};\n\n any(this, type, fn);\n this.addEventListener = ael;\n};\n/**\n * This function causes an event to happen. This will then cause any `event listeners`\n * that are waiting for that event, to get called. If there are no `event listeners`\n * for an event then nothing will happen.\n *\n * If the name of the `Event` that is being triggered is in `EventTarget.allowedEvents_`.\n * Trigger will also call the `on` + `uppercaseEventName` function.\n *\n * Example:\n * 'click' is in `EventTarget.allowedEvents_`, so, trigger will attempt to call\n * `onClick` if it exists.\n *\n * @param {string|EventTarget~Event|Object} event\n * The name of the event, an `Event`, or an object with a key of type set to\n * an event name.\n */\n\n\nEventTarget$2.prototype.trigger = function (event) {\n var type = event.type || event; // deprecation\n // In a future version we should default target to `this`\n // similar to how we default the target to `elem` in\n // `Events.trigger`. Right now the default `target` will be\n // `document` due to the `Event.fixEvent` call.\n\n if (typeof event === 'string') {\n event = {\n type: type\n };\n }\n\n event = fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n trigger(this, event);\n};\n/**\n * An alias of {@link EventTarget#trigger}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#trigger}\n */\n\n\nEventTarget$2.prototype.dispatchEvent = EventTarget$2.prototype.trigger;\nvar EVENT_MAP;\n\nEventTarget$2.prototype.queueTrigger = function (event) {\n var _this = this;\n\n // only set up EVENT_MAP if it'll be used\n if (!EVENT_MAP) {\n EVENT_MAP = new Map();\n }\n\n var type = event.type || event;\n var map = EVENT_MAP.get(this);\n\n if (!map) {\n map = new Map();\n EVENT_MAP.set(this, map);\n }\n\n var oldTimeout = map.get(type);\n map[\"delete\"](type);\n window$1.clearTimeout(oldTimeout);\n var timeout = window$1.setTimeout(function () {\n // if we cleared out all timeouts for the current target, delete its map\n if (map.size === 0) {\n map = null;\n EVENT_MAP[\"delete\"](_this);\n }\n\n _this.trigger(event);\n }, 0);\n map.set(type, timeout);\n};\n\n/**\n * @file mixins/evented.js\n * @module evented\n */\n\nvar objName = function objName(obj) {\n if (typeof obj.name === 'function') {\n return obj.name();\n }\n\n if (typeof obj.name === 'string') {\n return obj.name;\n }\n\n if (obj.name_) {\n return obj.name_;\n }\n\n if (obj.constructor && obj.constructor.name) {\n return obj.constructor.name;\n }\n\n return typeof obj;\n};\n/**\n * Returns whether or not an object has had the evented mixin applied.\n *\n * @param {Object} object\n * An object to test.\n *\n * @return {boolean}\n * Whether or not the object appears to be evented.\n */\n\n\nvar isEvented = function isEvented(object) {\n return object instanceof EventTarget$2 || !!object.eventBusEl_ && ['on', 'one', 'off', 'trigger'].every(function (k) {\n return typeof object[k] === 'function';\n });\n};\n/**\n * Adds a callback to run after the evented mixin applied.\n *\n * @param {Object} object\n * An object to Add\n * @param {Function} callback\n * The callback to run.\n */\n\n\nvar addEventedCallback = function addEventedCallback(target, callback) {\n if (isEvented(target)) {\n callback();\n } else {\n if (!target.eventedCallbacks) {\n target.eventedCallbacks = [];\n }\n\n target.eventedCallbacks.push(callback);\n }\n};\n/**\n * Whether a value is a valid event type - non-empty string or array.\n *\n * @private\n * @param {string|Array} type\n * The type value to test.\n *\n * @return {boolean}\n * Whether or not the type is a valid event type.\n */\n\n\nvar isValidEventType = function isValidEventType(type) {\n return (// The regex here verifies that the `type` contains at least one non-\n // whitespace character.\n typeof type === 'string' && /\\S/.test(type) || Array.isArray(type) && !!type.length\n );\n};\n/**\n * Validates a value to determine if it is a valid event target. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the target does not appear to be a valid event target.\n *\n * @param {Object} target\n * The object to test.\n *\n * @param {Object} obj\n * The evented object we are validating for\n *\n * @param {string} fnName\n * The name of the evented mixin function that called this.\n */\n\n\nvar validateTarget = function validateTarget(target, obj, fnName) {\n if (!target || !target.nodeName && !isEvented(target)) {\n throw new Error(\"Invalid target for \" + objName(obj) + \"#\" + fnName + \"; must be a DOM node or evented object.\");\n }\n};\n/**\n * Validates a value to determine if it is a valid event target. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the type does not appear to be a valid event type.\n *\n * @param {string|Array} type\n * The type to test.\n *\n * @param {Object} obj\n* The evented object we are validating for\n *\n * @param {string} fnName\n * The name of the evented mixin function that called this.\n */\n\n\nvar validateEventType = function validateEventType(type, obj, fnName) {\n if (!isValidEventType(type)) {\n throw new Error(\"Invalid event type for \" + objName(obj) + \"#\" + fnName + \"; must be a non-empty string or array.\");\n }\n};\n/**\n * Validates a value to determine if it is a valid listener. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the listener is not a function.\n *\n * @param {Function} listener\n * The listener to test.\n *\n * @param {Object} obj\n * The evented object we are validating for\n *\n * @param {string} fnName\n * The name of the evented mixin function that called this.\n */\n\n\nvar validateListener = function validateListener(listener, obj, fnName) {\n if (typeof listener !== 'function') {\n throw new Error(\"Invalid listener for \" + objName(obj) + \"#\" + fnName + \"; must be a function.\");\n }\n};\n/**\n * Takes an array of arguments given to `on()` or `one()`, validates them, and\n * normalizes them into an object.\n *\n * @private\n * @param {Object} self\n * The evented object on which `on()` or `one()` was called. This\n * object will be bound as the `this` value for the listener.\n *\n * @param {Array} args\n * An array of arguments passed to `on()` or `one()`.\n *\n * @param {string} fnName\n * The name of the evented mixin function that called this.\n *\n * @return {Object}\n * An object containing useful values for `on()` or `one()` calls.\n */\n\n\nvar normalizeListenArgs = function normalizeListenArgs(self, args, fnName) {\n // If the number of arguments is less than 3, the target is always the\n // evented object itself.\n var isTargetingSelf = args.length < 3 || args[0] === self || args[0] === self.eventBusEl_;\n var target;\n var type;\n var listener;\n\n if (isTargetingSelf) {\n target = self.eventBusEl_; // Deal with cases where we got 3 arguments, but we are still listening to\n // the evented object itself.\n\n if (args.length >= 3) {\n args.shift();\n }\n\n type = args[0];\n listener = args[1];\n } else {\n target = args[0];\n type = args[1];\n listener = args[2];\n }\n\n validateTarget(target, self, fnName);\n validateEventType(type, self, fnName);\n validateListener(listener, self, fnName);\n listener = bind(self, listener);\n return {\n isTargetingSelf: isTargetingSelf,\n target: target,\n type: type,\n listener: listener\n };\n};\n/**\n * Adds the listener to the event type(s) on the target, normalizing for\n * the type of target.\n *\n * @private\n * @param {Element|Object} target\n * A DOM node or evented object.\n *\n * @param {string} method\n * The event binding method to use (\"on\" or \"one\").\n *\n * @param {string|Array} type\n * One or more event type(s).\n *\n * @param {Function} listener\n * A listener function.\n */\n\n\nvar listen = function listen(target, method, type, listener) {\n validateTarget(target, target, method);\n\n if (target.nodeName) {\n Events[method](target, type, listener);\n } else {\n target[method](type, listener);\n }\n};\n/**\n * Contains methods that provide event capabilities to an object which is passed\n * to {@link module:evented|evented}.\n *\n * @mixin EventedMixin\n */\n\n\nvar EventedMixin = {\n /**\n * Add a listener to an event (or events) on this object or another evented\n * object.\n *\n * @param {string|Array|Element|Object} targetOrType\n * If this is a string or array, it represents the event type(s)\n * that will trigger the listener.\n *\n * Another evented object can be passed here instead, which will\n * cause the listener to listen for events on _that_ object.\n *\n * In either case, the listener's `this` value will be bound to\n * this object.\n *\n * @param {string|Array|Function} typeOrListener\n * If the first argument was a string or array, this should be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function.\n */\n on: function on() {\n var _this = this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _normalizeListenArgs = normalizeListenArgs(this, args, 'on'),\n isTargetingSelf = _normalizeListenArgs.isTargetingSelf,\n target = _normalizeListenArgs.target,\n type = _normalizeListenArgs.type,\n listener = _normalizeListenArgs.listener;\n\n listen(target, 'on', type, listener); // If this object is listening to another evented object.\n\n if (!isTargetingSelf) {\n // If this object is disposed, remove the listener.\n var removeListenerOnDispose = function removeListenerOnDispose() {\n return _this.off(target, type, listener);\n }; // Use the same function ID as the listener so we can remove it later it\n // using the ID of the original listener.\n\n\n removeListenerOnDispose.guid = listener.guid; // Add a listener to the target's dispose event as well. This ensures\n // that if the target is disposed BEFORE this object, we remove the\n // removal listener that was just added. Otherwise, we create a memory leak.\n\n var removeRemoverOnTargetDispose = function removeRemoverOnTargetDispose() {\n return _this.off('dispose', removeListenerOnDispose);\n }; // Use the same function ID as the listener so we can remove it later\n // it using the ID of the original listener.\n\n\n removeRemoverOnTargetDispose.guid = listener.guid;\n listen(this, 'on', 'dispose', removeListenerOnDispose);\n listen(target, 'on', 'dispose', removeRemoverOnTargetDispose);\n }\n },\n\n /**\n * Add a listener to an event (or events) on this object or another evented\n * object. The listener will be called once per event and then removed.\n *\n * @param {string|Array|Element|Object} targetOrType\n * If this is a string or array, it represents the event type(s)\n * that will trigger the listener.\n *\n * Another evented object can be passed here instead, which will\n * cause the listener to listen for events on _that_ object.\n *\n * In either case, the listener's `this` value will be bound to\n * this object.\n *\n * @param {string|Array|Function} typeOrListener\n * If the first argument was a string or array, this should be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function.\n */\n one: function one() {\n var _this2 = this;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var _normalizeListenArgs2 = normalizeListenArgs(this, args, 'one'),\n isTargetingSelf = _normalizeListenArgs2.isTargetingSelf,\n target = _normalizeListenArgs2.target,\n type = _normalizeListenArgs2.type,\n listener = _normalizeListenArgs2.listener; // Targeting this evented object.\n\n\n if (isTargetingSelf) {\n listen(target, 'one', type, listener); // Targeting another evented object.\n } else {\n // TODO: This wrapper is incorrect! It should only\n // remove the wrapper for the event type that called it.\n // Instead all listners are removed on the first trigger!\n // see https://github.com/videojs/video.js/issues/5962\n var wrapper = function wrapper() {\n _this2.off(target, type, wrapper);\n\n for (var _len3 = arguments.length, largs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n largs[_key3] = arguments[_key3];\n }\n\n listener.apply(null, largs);\n }; // Use the same function ID as the listener so we can remove it later\n // it using the ID of the original listener.\n\n\n wrapper.guid = listener.guid;\n listen(target, 'one', type, wrapper);\n }\n },\n\n /**\n * Add a listener to an event (or events) on this object or another evented\n * object. The listener will only be called once for the first event that is triggered\n * then removed.\n *\n * @param {string|Array|Element|Object} targetOrType\n * If this is a string or array, it represents the event type(s)\n * that will trigger the listener.\n *\n * Another evented object can be passed here instead, which will\n * cause the listener to listen for events on _that_ object.\n *\n * In either case, the listener's `this` value will be bound to\n * this object.\n *\n * @param {string|Array|Function} typeOrListener\n * If the first argument was a string or array, this should be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function.\n */\n any: function any() {\n var _this3 = this;\n\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n var _normalizeListenArgs3 = normalizeListenArgs(this, args, 'any'),\n isTargetingSelf = _normalizeListenArgs3.isTargetingSelf,\n target = _normalizeListenArgs3.target,\n type = _normalizeListenArgs3.type,\n listener = _normalizeListenArgs3.listener; // Targeting this evented object.\n\n\n if (isTargetingSelf) {\n listen(target, 'any', type, listener); // Targeting another evented object.\n } else {\n var wrapper = function wrapper() {\n _this3.off(target, type, wrapper);\n\n for (var _len5 = arguments.length, largs = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n largs[_key5] = arguments[_key5];\n }\n\n listener.apply(null, largs);\n }; // Use the same function ID as the listener so we can remove it later\n // it using the ID of the original listener.\n\n\n wrapper.guid = listener.guid;\n listen(target, 'any', type, wrapper);\n }\n },\n\n /**\n * Removes listener(s) from event(s) on an evented object.\n *\n * @param {string|Array|Element|Object} [targetOrType]\n * If this is a string or array, it represents the event type(s).\n *\n * Another evented object can be passed here instead, in which case\n * ALL 3 arguments are _required_.\n *\n * @param {string|Array|Function} [typeOrListener]\n * If the first argument was a string or array, this may be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function; otherwise, _all_ listeners bound to the\n * event type(s) will be removed.\n */\n off: function off$1(targetOrType, typeOrListener, listener) {\n // Targeting this evented object.\n if (!targetOrType || isValidEventType(targetOrType)) {\n off(this.eventBusEl_, targetOrType, typeOrListener); // Targeting another evented object.\n } else {\n var target = targetOrType;\n var type = typeOrListener; // Fail fast and in a meaningful way!\n\n validateTarget(target, this, 'off');\n validateEventType(type, this, 'off');\n validateListener(listener, this, 'off'); // Ensure there's at least a guid, even if the function hasn't been used\n\n listener = bind(this, listener); // Remove the dispose listener on this evented object, which was given\n // the same guid as the event listener in on().\n\n this.off('dispose', listener);\n\n if (target.nodeName) {\n off(target, type, listener);\n off(target, 'dispose', listener);\n } else if (isEvented(target)) {\n target.off(type, listener);\n target.off('dispose', listener);\n }\n }\n },\n\n /**\n * Fire an event on this evented object, causing its listeners to be called.\n *\n * @param {string|Object} event\n * An event type or an object with a type property.\n *\n * @param {Object} [hash]\n * An additional object to pass along to listeners.\n *\n * @return {boolean}\n * Whether or not the default behavior was prevented.\n */\n trigger: function trigger$1(event, hash) {\n validateTarget(this.eventBusEl_, this, 'trigger');\n var type = event && typeof event !== 'string' ? event.type : event;\n\n if (!isValidEventType(type)) {\n var error = \"Invalid event type for \" + objName(this) + \"#trigger; \" + 'must be a non-empty string or object with a type key that has a non-empty value.';\n\n if (event) {\n (this.log || log$1).error(error);\n } else {\n throw new Error(error);\n }\n }\n\n return trigger(this.eventBusEl_, event, hash);\n }\n};\n/**\n * Applies {@link module:evented~EventedMixin|EventedMixin} to a target object.\n *\n * @param {Object} target\n * The object to which to add event methods.\n *\n * @param {Object} [options={}]\n * Options for customizing the mixin behavior.\n *\n * @param {string} [options.eventBusKey]\n * By default, adds a `eventBusEl_` DOM element to the target object,\n * which is used as an event bus. If the target object already has a\n * DOM element that should be used, pass its key here.\n *\n * @return {Object}\n * The target object.\n */\n\nfunction evented(target, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n eventBusKey = _options.eventBusKey; // Set or create the eventBusEl_.\n\n if (eventBusKey) {\n if (!target[eventBusKey].nodeName) {\n throw new Error(\"The eventBusKey \\\"\" + eventBusKey + \"\\\" does not refer to an element.\");\n }\n\n target.eventBusEl_ = target[eventBusKey];\n } else {\n target.eventBusEl_ = createEl('span', {\n className: 'vjs-event-bus'\n });\n }\n\n assign(target, EventedMixin);\n\n if (target.eventedCallbacks) {\n target.eventedCallbacks.forEach(function (callback) {\n callback();\n });\n } // When any evented object is disposed, it removes all its listeners.\n\n\n target.on('dispose', function () {\n target.off();\n [target, target.el_, target.eventBusEl_].forEach(function (val) {\n if (val && DomData.has(val)) {\n DomData[\"delete\"](val);\n }\n });\n window$1.setTimeout(function () {\n target.eventBusEl_ = null;\n }, 0);\n });\n return target;\n}\n\n/**\n * @file mixins/stateful.js\n * @module stateful\n */\n/**\n * Contains methods that provide statefulness to an object which is passed\n * to {@link module:stateful}.\n *\n * @mixin StatefulMixin\n */\n\nvar StatefulMixin = {\n /**\n * A hash containing arbitrary keys and values representing the state of\n * the object.\n *\n * @type {Object}\n */\n state: {},\n\n /**\n * Set the state of an object by mutating its\n * {@link module:stateful~StatefulMixin.state|state} object in place.\n *\n * @fires module:stateful~StatefulMixin#statechanged\n * @param {Object|Function} stateUpdates\n * A new set of properties to shallow-merge into the plugin state.\n * Can be a plain object or a function returning a plain object.\n *\n * @return {Object|undefined}\n * An object containing changes that occurred. If no changes\n * occurred, returns `undefined`.\n */\n setState: function setState(stateUpdates) {\n var _this = this;\n\n // Support providing the `stateUpdates` state as a function.\n if (typeof stateUpdates === 'function') {\n stateUpdates = stateUpdates();\n }\n\n var changes;\n each(stateUpdates, function (value, key) {\n // Record the change if the value is different from what's in the\n // current state.\n if (_this.state[key] !== value) {\n changes = changes || {};\n changes[key] = {\n from: _this.state[key],\n to: value\n };\n }\n\n _this.state[key] = value;\n }); // Only trigger \"statechange\" if there were changes AND we have a trigger\n // function. This allows us to not require that the target object be an\n // evented object.\n\n if (changes && isEvented(this)) {\n /**\n * An event triggered on an object that is both\n * {@link module:stateful|stateful} and {@link module:evented|evented}\n * indicating that its state has changed.\n *\n * @event module:stateful~StatefulMixin#statechanged\n * @type {Object}\n * @property {Object} changes\n * A hash containing the properties that were changed and\n * the values they were changed `from` and `to`.\n */\n this.trigger({\n changes: changes,\n type: 'statechanged'\n });\n }\n\n return changes;\n }\n};\n/**\n * Applies {@link module:stateful~StatefulMixin|StatefulMixin} to a target\n * object.\n *\n * If the target object is {@link module:evented|evented} and has a\n * `handleStateChanged` method, that method will be automatically bound to the\n * `statechanged` event on itself.\n *\n * @param {Object} target\n * The object to be made stateful.\n *\n * @param {Object} [defaultState]\n * A default set of properties to populate the newly-stateful object's\n * `state` property.\n *\n * @return {Object}\n * Returns the `target`.\n */\n\nfunction stateful(target, defaultState) {\n assign(target, StatefulMixin); // This happens after the mixing-in because we need to replace the `state`\n // added in that step.\n\n target.state = assign({}, target.state, defaultState); // Auto-bind the `handleStateChanged` method of the target object if it exists.\n\n if (typeof target.handleStateChanged === 'function' && isEvented(target)) {\n target.on('statechanged', target.handleStateChanged);\n }\n\n return target;\n}\n\n/**\n * @file string-cases.js\n * @module to-lower-case\n */\n\n/**\n * Lowercase the first letter of a string.\n *\n * @param {string} string\n * String to be lowercased\n *\n * @return {string}\n * The string with a lowercased first letter\n */\nvar toLowerCase = function toLowerCase(string) {\n if (typeof string !== 'string') {\n return string;\n }\n\n return string.replace(/./, function (w) {\n return w.toLowerCase();\n });\n};\n/**\n * Uppercase the first letter of a string.\n *\n * @param {string} string\n * String to be uppercased\n *\n * @return {string}\n * The string with an uppercased first letter\n */\n\nvar toTitleCase$1 = function toTitleCase(string) {\n if (typeof string !== 'string') {\n return string;\n }\n\n return string.replace(/./, function (w) {\n return w.toUpperCase();\n });\n};\n/**\n * Compares the TitleCase versions of the two strings for equality.\n *\n * @param {string} str1\n * The first string to compare\n *\n * @param {string} str2\n * The second string to compare\n *\n * @return {boolean}\n * Whether the TitleCase versions of the strings are equal\n */\n\nvar titleCaseEquals = function titleCaseEquals(str1, str2) {\n return toTitleCase$1(str1) === toTitleCase$1(str2);\n};\n\n/**\n * @file merge-options.js\n * @module merge-options\n */\n/**\n * Merge two objects recursively.\n *\n * Performs a deep merge like\n * {@link https://lodash.com/docs/4.17.10#merge|lodash.merge}, but only merges\n * plain objects (not arrays, elements, or anything else).\n *\n * Non-plain object values will be copied directly from the right-most\n * argument.\n *\n * @static\n * @param {Object[]} sources\n * One or more objects to merge into a new object.\n *\n * @return {Object}\n * A new object that is the merged result of all sources.\n */\n\nfunction mergeOptions$3() {\n var result = {};\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n sources.forEach(function (source) {\n if (!source) {\n return;\n }\n\n each(source, function (value, key) {\n if (!isPlain(value)) {\n result[key] = value;\n return;\n }\n\n if (!isPlain(result[key])) {\n result[key] = {};\n }\n\n result[key] = mergeOptions$3(result[key], value);\n });\n });\n return result;\n}\n\nvar MapSham = /*#__PURE__*/function () {\n function MapSham() {\n this.map_ = {};\n }\n\n var _proto = MapSham.prototype;\n\n _proto.has = function has(key) {\n return key in this.map_;\n };\n\n _proto[\"delete\"] = function _delete(key) {\n var has = this.has(key);\n delete this.map_[key];\n return has;\n };\n\n _proto.set = function set(key, value) {\n this.map_[key] = value;\n return this;\n };\n\n _proto.forEach = function forEach(callback, thisArg) {\n for (var key in this.map_) {\n callback.call(thisArg, this.map_[key], key, this);\n }\n };\n\n return MapSham;\n}();\n\nvar Map$1 = window$1.Map ? window$1.Map : MapSham;\n\nvar SetSham = /*#__PURE__*/function () {\n function SetSham() {\n this.set_ = {};\n }\n\n var _proto = SetSham.prototype;\n\n _proto.has = function has(key) {\n return key in this.set_;\n };\n\n _proto[\"delete\"] = function _delete(key) {\n var has = this.has(key);\n delete this.set_[key];\n return has;\n };\n\n _proto.add = function add(key) {\n this.set_[key] = 1;\n return this;\n };\n\n _proto.forEach = function forEach(callback, thisArg) {\n for (var key in this.set_) {\n callback.call(thisArg, key, key, this);\n }\n };\n\n return SetSham;\n}();\n\nvar Set$1 = window$1.Set ? window$1.Set : SetSham;\n\n/**\n * Player Component - Base class for all UI objects\n *\n * @file component.js\n */\n/**\n * Base class for all UI Components.\n * Components are UI objects which represent both a javascript object and an element\n * in the DOM. They can be children of other components, and can have\n * children themselves.\n *\n * Components can also use methods from {@link EventTarget}\n */\n\nvar Component$1 = /*#__PURE__*/function () {\n /**\n * A callback that is called when a component is ready. Does not have any\n * paramters and any callback value will be ignored.\n *\n * @callback Component~ReadyCallback\n * @this Component\n */\n\n /**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of component options.\n *\n * @param {Object[]} [options.children]\n * An array of children objects to intialize this component with. Children objects have\n * a name property that will be used if more than one component of the same type needs to be\n * added.\n *\n * @param {string} [options.className]\n * A class or space separated list of classes to add the component\n *\n * @param {Component~ReadyCallback} [ready]\n * Function that gets called when the `Component` is ready.\n */\n function Component(player, options, ready) {\n var _this = this;\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n this.isDisposed_ = false; // Hold the reference to the parent component via `addChild` method\n\n this.parentComponent_ = null; // Make a copy of prototype.options_ to protect against overriding defaults\n\n this.options_ = mergeOptions$3({}, this.options_); // Updated options with supplied options\n\n options = this.options_ = mergeOptions$3(this.options_, options); // Get ID from options or options element if one is supplied\n\n this.id_ = options.id || options.el && options.el.id; // If there was no ID from the options, generate one\n\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n var id = player && player.id && player.id() || 'no_player';\n this.id_ = id + \"_component_\" + newGUID();\n }\n\n this.name_ = options.name || null; // Create element if one wasn't provided in options\n\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n if (options.className && this.el_) {\n options.className.split(' ').forEach(function (c) {\n return _this.addClass(c);\n });\n } // if evented is anything except false, we want to mixin in evented\n\n\n if (options.evented !== false) {\n // Make this an evented object and use `el_`, if available, as its event bus\n evented(this, {\n eventBusKey: this.el_ ? 'el_' : null\n });\n this.handleLanguagechange = this.handleLanguagechange.bind(this);\n this.on(this.player_, 'languagechange', this.handleLanguagechange);\n }\n\n stateful(this, this.constructor.defaultState);\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n this.setTimeoutIds_ = new Set$1();\n this.setIntervalIds_ = new Set$1();\n this.rafIds_ = new Set$1();\n this.namedRafs_ = new Map$1();\n this.clearingTimersOnDispose_ = false; // Add any child components in options\n\n if (options.initChildren !== false) {\n this.initChildren();\n } // Don't want to trigger ready here or it will go before init is actually\n // finished for all children that run this constructor\n\n\n this.ready(ready);\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n /**\n * Dispose of the `Component` and all child components.\n *\n * @fires Component#dispose\n *\n * @param {Object} options\n * @param {Element} options.originalEl element with which to replace player element\n */\n\n\n var _proto = Component.prototype;\n\n _proto.dispose = function dispose(options) {\n if (options === void 0) {\n options = {};\n }\n\n // Bail out if the component has already been disposed.\n if (this.isDisposed_) {\n return;\n }\n\n if (this.readyQueue_) {\n this.readyQueue_.length = 0;\n }\n /**\n * Triggered when a `Component` is disposed.\n *\n * @event Component#dispose\n * @type {EventTarget~Event}\n *\n * @property {boolean} [bubbles=false]\n * set to false so that the dispose event does not\n * bubble up\n */\n\n\n this.trigger({\n type: 'dispose',\n bubbles: false\n });\n this.isDisposed_ = true; // Dispose all children.\n\n if (this.children_) {\n for (var i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n } // Delete child references\n\n\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n this.parentComponent_ = null;\n\n if (this.el_) {\n // Remove element from DOM\n if (this.el_.parentNode) {\n if (options.restoreEl) {\n this.el_.parentNode.replaceChild(options.restoreEl, this.el_);\n } else {\n this.el_.parentNode.removeChild(this.el_);\n }\n }\n\n this.el_ = null;\n } // remove reference to the player after disposing of the element\n\n\n this.player_ = null;\n }\n /**\n * Determine whether or not this component has been disposed.\n *\n * @return {boolean}\n * If the component has been disposed, will be `true`. Otherwise, `false`.\n */\n ;\n\n _proto.isDisposed = function isDisposed() {\n return Boolean(this.isDisposed_);\n }\n /**\n * Return the {@link Player} that the `Component` has attached to.\n *\n * @return {Player}\n * The player that this `Component` has attached to.\n */\n ;\n\n _proto.player = function player() {\n return this.player_;\n }\n /**\n * Deep merge of options objects with new options.\n * > Note: When both `obj` and `options` contain properties whose values are objects.\n * The two properties get merged using {@link module:mergeOptions}\n *\n * @param {Object} obj\n * The object that contains new options.\n *\n * @return {Object}\n * A new object of `this.options_` and `obj` merged together.\n */\n ;\n\n _proto.options = function options(obj) {\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = mergeOptions$3(this.options_, obj);\n return this.options_;\n }\n /**\n * Get the `Component`s DOM element\n *\n * @return {Element}\n * The DOM element for this `Component`.\n */\n ;\n\n _proto.el = function el() {\n return this.el_;\n }\n /**\n * Create the `Component`s DOM element.\n *\n * @param {string} [tagName]\n * Element's DOM node type. e.g. 'div'\n *\n * @param {Object} [properties]\n * An object of properties that should be set.\n *\n * @param {Object} [attributes]\n * An object of attributes that should be set.\n *\n * @return {Element}\n * The element that gets created.\n */\n ;\n\n _proto.createEl = function createEl$1(tagName, properties, attributes) {\n return createEl(tagName, properties, attributes);\n }\n /**\n * Localize a string given the string in english.\n *\n * If tokens are provided, it'll try and run a simple token replacement on the provided string.\n * The tokens it looks for look like `{1}` with the index being 1-indexed into the tokens array.\n *\n * If a `defaultValue` is provided, it'll use that over `string`,\n * if a value isn't found in provided language files.\n * This is useful if you want to have a descriptive key for token replacement\n * but have a succinct localized string and not require `en.json` to be included.\n *\n * Currently, it is used for the progress bar timing.\n * ```js\n * {\n * \"progress bar timing: currentTime={1} duration={2}\": \"{1} of {2}\"\n * }\n * ```\n * It is then used like so:\n * ```js\n * this.localize('progress bar timing: currentTime={1} duration{2}',\n * [this.player_.currentTime(), this.player_.duration()],\n * '{1} of {2}');\n * ```\n *\n * Which outputs something like: `01:23 of 24:56`.\n *\n *\n * @param {string} string\n * The string to localize and the key to lookup in the language files.\n * @param {string[]} [tokens]\n * If the current item has token replacements, provide the tokens here.\n * @param {string} [defaultValue]\n * Defaults to `string`. Can be a default value to use for token replacement\n * if the lookup key is needed to be separate.\n *\n * @return {string}\n * The localized string or if no localization exists the english string.\n */\n ;\n\n _proto.localize = function localize(string, tokens, defaultValue) {\n if (defaultValue === void 0) {\n defaultValue = string;\n }\n\n var code = this.player_.language && this.player_.language();\n var languages = this.player_.languages && this.player_.languages();\n var language = languages && languages[code];\n var primaryCode = code && code.split('-')[0];\n var primaryLang = languages && languages[primaryCode];\n var localizedString = defaultValue;\n\n if (language && language[string]) {\n localizedString = language[string];\n } else if (primaryLang && primaryLang[string]) {\n localizedString = primaryLang[string];\n }\n\n if (tokens) {\n localizedString = localizedString.replace(/\\{(\\d+)\\}/g, function (match, index) {\n var value = tokens[index - 1];\n var ret = value;\n\n if (typeof value === 'undefined') {\n ret = match;\n }\n\n return ret;\n });\n }\n\n return localizedString;\n }\n /**\n * Handles language change for the player in components. Should be overriden by sub-components.\n *\n * @abstract\n */\n ;\n\n _proto.handleLanguagechange = function handleLanguagechange() {}\n /**\n * Return the `Component`s DOM element. This is where children get inserted.\n * This will usually be the the same as the element returned in {@link Component#el}.\n *\n * @return {Element}\n * The content element for this `Component`.\n */\n ;\n\n _proto.contentEl = function contentEl() {\n return this.contentEl_ || this.el_;\n }\n /**\n * Get this `Component`s ID\n *\n * @return {string}\n * The id of this `Component`\n */\n ;\n\n _proto.id = function id() {\n return this.id_;\n }\n /**\n * Get the `Component`s name. The name gets used to reference the `Component`\n * and is set during registration.\n *\n * @return {string}\n * The name of this `Component`.\n */\n ;\n\n _proto.name = function name() {\n return this.name_;\n }\n /**\n * Get an array of all child components\n *\n * @return {Array}\n * The children\n */\n ;\n\n _proto.children = function children() {\n return this.children_;\n }\n /**\n * Returns the child `Component` with the given `id`.\n *\n * @param {string} id\n * The id of the child `Component` to get.\n *\n * @return {Component|undefined}\n * The child `Component` with the given `id` or undefined.\n */\n ;\n\n _proto.getChildById = function getChildById(id) {\n return this.childIndex_[id];\n }\n /**\n * Returns the child `Component` with the given `name`.\n *\n * @param {string} name\n * The name of the child `Component` to get.\n *\n * @return {Component|undefined}\n * The child `Component` with the given `name` or undefined.\n */\n ;\n\n _proto.getChild = function getChild(name) {\n if (!name) {\n return;\n }\n\n return this.childNameIndex_[name];\n }\n /**\n * Returns the descendant `Component` following the givent\n * descendant `names`. For instance ['foo', 'bar', 'baz'] would\n * try to get 'foo' on the current component, 'bar' on the 'foo'\n * component and 'baz' on the 'bar' component and return undefined\n * if any of those don't exist.\n *\n * @param {...string[]|...string} names\n * The name of the child `Component` to get.\n *\n * @return {Component|undefined}\n * The descendant `Component` following the given descendant\n * `names` or undefined.\n */\n ;\n\n _proto.getDescendant = function getDescendant() {\n for (var _len = arguments.length, names = new Array(_len), _key = 0; _key < _len; _key++) {\n names[_key] = arguments[_key];\n }\n\n // flatten array argument into the main array\n names = names.reduce(function (acc, n) {\n return acc.concat(n);\n }, []);\n var currentChild = this;\n\n for (var i = 0; i < names.length; i++) {\n currentChild = currentChild.getChild(names[i]);\n\n if (!currentChild || !currentChild.getChild) {\n return;\n }\n }\n\n return currentChild;\n }\n /**\n * Add a child `Component` inside the current `Component`.\n *\n *\n * @param {string|Component} child\n * The name or instance of a child to add.\n *\n * @param {Object} [options={}]\n * The key/value store of options that will get passed to children of\n * the child.\n *\n * @param {number} [index=this.children_.length]\n * The index to attempt to add a child into.\n *\n * @return {Component}\n * The `Component` that gets added as a child. When using a string the\n * `Component` will get created by this process.\n */\n ;\n\n _proto.addChild = function addChild(child, options, index) {\n if (options === void 0) {\n options = {};\n }\n\n if (index === void 0) {\n index = this.children_.length;\n }\n\n var component;\n var componentName; // If child is a string, create component with options\n\n if (typeof child === 'string') {\n componentName = toTitleCase$1(child);\n var componentClassName = options.componentClass || componentName; // Set name through options\n\n options.name = componentName; // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n\n var ComponentClass = Component.getComponent(componentClassName);\n\n if (!ComponentClass) {\n throw new Error(\"Component \" + componentClassName + \" does not exist\");\n } // data stored directly on the videojs object may be\n // misidentified as a component to retain\n // backwards-compatibility with 4.x. check to make sure the\n // component class can be instantiated.\n\n\n if (typeof ComponentClass !== 'function') {\n return null;\n }\n\n component = new ComponentClass(this.player_ || this, options); // child is a component instance\n } else {\n component = child;\n }\n\n if (component.parentComponent_) {\n component.parentComponent_.removeChild(component);\n }\n\n this.children_.splice(index, 0, component);\n component.parentComponent_ = this;\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n } // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n\n\n componentName = componentName || component.name && toTitleCase$1(component.name());\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n this.childNameIndex_[toLowerCase(componentName)] = component;\n } // Add the UI object's element to the container div (box)\n // Having an element is not required\n\n\n if (typeof component.el === 'function' && component.el()) {\n // If inserting before a component, insert before that component's element\n var refNode = null;\n\n if (this.children_[index + 1]) {\n // Most children are components, but the video tech is an HTML element\n if (this.children_[index + 1].el_) {\n refNode = this.children_[index + 1].el_;\n } else if (isEl(this.children_[index + 1])) {\n refNode = this.children_[index + 1];\n }\n }\n\n this.contentEl().insertBefore(component.el(), refNode);\n } // Return so it can stored on parent object if desired.\n\n\n return component;\n }\n /**\n * Remove a child `Component` from this `Component`s list of children. Also removes\n * the child `Component`s element from this `Component`s element.\n *\n * @param {Component} component\n * The child `Component` to remove.\n */\n ;\n\n _proto.removeChild = function removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n var childFound = false;\n\n for (var i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n component.parentComponent_ = null;\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[toTitleCase$1(component.name())] = null;\n this.childNameIndex_[toLowerCase(component.name())] = null;\n var compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n }\n /**\n * Add and initialize default child `Component`s based upon options.\n */\n ;\n\n _proto.initChildren = function initChildren() {\n var _this2 = this;\n\n var children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n var parentOptions = this.options_;\n\n var handleAdd = function handleAdd(child) {\n var name = child.name;\n var opts = child.opts; // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n } // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n\n\n if (opts === false) {\n return;\n } // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n\n\n if (opts === true) {\n opts = {};\n } // We also want to pass the original player options\n // to each component as well so they don't need to\n // reach back into the player for options later.\n\n\n opts.playerOptions = _this2.options_.playerOptions; // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n\n var newChild = _this2.addChild(name, opts);\n\n if (newChild) {\n _this2[name] = newChild;\n }\n }; // Allow for an array of children details to passed in the options\n\n\n var workingChildren;\n var Tech = Component.getComponent('Tech');\n\n if (Array.isArray(children)) {\n workingChildren = children;\n } else {\n workingChildren = Object.keys(children);\n }\n\n workingChildren // children that are in this.options_ but also in workingChildren would\n // give us extra children we do not want. So, we want to filter them out.\n .concat(Object.keys(this.options_).filter(function (child) {\n return !workingChildren.some(function (wchild) {\n if (typeof wchild === 'string') {\n return child === wchild;\n }\n\n return child === wchild.name;\n });\n })).map(function (child) {\n var name;\n var opts;\n\n if (typeof child === 'string') {\n name = child;\n opts = children[name] || _this2.options_[name] || {};\n } else {\n name = child.name;\n opts = child;\n }\n\n return {\n name: name,\n opts: opts\n };\n }).filter(function (child) {\n // we have to make sure that child.name isn't in the techOrder since\n // techs are registerd as Components but can't aren't compatible\n // See https://github.com/videojs/video.js/issues/2772\n var c = Component.getComponent(child.opts.componentClass || toTitleCase$1(child.name));\n return c && !Tech.isTech(c);\n }).forEach(handleAdd);\n }\n }\n /**\n * Builds the default DOM class name. Should be overriden by sub-components.\n *\n * @return {string}\n * The DOM class name for this object.\n *\n * @abstract\n */\n ;\n\n _proto.buildCSSClass = function buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n }\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @return {Component}\n * Returns itself; method can be chained.\n */\n ;\n\n _proto.ready = function ready(fn, sync) {\n if (sync === void 0) {\n sync = false;\n }\n\n if (!fn) {\n return;\n }\n\n if (!this.isReady_) {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n return;\n }\n\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n }\n /**\n * Trigger all the ready listeners for this `Component`.\n *\n * @fires Component#ready\n */\n ;\n\n _proto.triggerReady = function triggerReady() {\n this.isReady_ = true; // Ensure ready is triggered asynchronously\n\n this.setTimeout(function () {\n var readyQueue = this.readyQueue_; // Reset Ready Queue\n\n this.readyQueue_ = [];\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function (fn) {\n fn.call(this);\n }, this);\n } // Allow for using event listeners also\n\n /**\n * Triggered when a `Component` is ready.\n *\n * @event Component#ready\n * @type {EventTarget~Event}\n */\n\n\n this.trigger('ready');\n }, 1);\n }\n /**\n * Find a single DOM element matching a `selector`. This can be within the `Component`s\n * `contentEl()` or another custom context.\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param {Element|string} [context=this.contentEl()]\n * A DOM element within which to query. Can also be a selector string in\n * which case the first matching element will get used as context. If\n * missing `this.contentEl()` gets used. If `this.contentEl()` returns\n * nothing it falls back to `document`.\n *\n * @return {Element|null}\n * the dom element that was found, or null\n *\n * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors)\n */\n ;\n\n _proto.$ = function $$1(selector, context) {\n return $(selector, context || this.contentEl());\n }\n /**\n * Finds all DOM element matching a `selector`. This can be within the `Component`s\n * `contentEl()` or another custom context.\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param {Element|string} [context=this.contentEl()]\n * A DOM element within which to query. Can also be a selector string in\n * which case the first matching element will get used as context. If\n * missing `this.contentEl()` gets used. If `this.contentEl()` returns\n * nothing it falls back to `document`.\n *\n * @return {NodeList}\n * a list of dom elements that were found\n *\n * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors)\n */\n ;\n\n _proto.$$ = function $$$1(selector, context) {\n return $$(selector, context || this.contentEl());\n }\n /**\n * Check if a component's element has a CSS class name.\n *\n * @param {string} classToCheck\n * CSS class name to check.\n *\n * @return {boolean}\n * - True if the `Component` has the class.\n * - False if the `Component` does not have the class`\n */\n ;\n\n _proto.hasClass = function hasClass$1(classToCheck) {\n return hasClass(this.el_, classToCheck);\n }\n /**\n * Add a CSS class name to the `Component`s element.\n *\n * @param {string} classToAdd\n * CSS class name to add\n */\n ;\n\n _proto.addClass = function addClass$1(classToAdd) {\n addClass(this.el_, classToAdd);\n }\n /**\n * Remove a CSS class name from the `Component`s element.\n *\n * @param {string} classToRemove\n * CSS class name to remove\n */\n ;\n\n _proto.removeClass = function removeClass$1(classToRemove) {\n removeClass(this.el_, classToRemove);\n }\n /**\n * Add or remove a CSS class name from the component's element.\n * - `classToToggle` gets added when {@link Component#hasClass} would return false.\n * - `classToToggle` gets removed when {@link Component#hasClass} would return true.\n *\n * @param {string} classToToggle\n * The class to add or remove based on (@link Component#hasClass}\n *\n * @param {boolean|Dom~predicate} [predicate]\n * An {@link Dom~predicate} function or a boolean\n */\n ;\n\n _proto.toggleClass = function toggleClass$1(classToToggle, predicate) {\n toggleClass(this.el_, classToToggle, predicate);\n }\n /**\n * Show the `Component`s element if it is hidden by removing the\n * 'vjs-hidden' class name from it.\n */\n ;\n\n _proto.show = function show() {\n this.removeClass('vjs-hidden');\n }\n /**\n * Hide the `Component`s element if it is currently showing by adding the\n * 'vjs-hidden` class name to it.\n */\n ;\n\n _proto.hide = function hide() {\n this.addClass('vjs-hidden');\n }\n /**\n * Lock a `Component`s element in its visible state by adding the 'vjs-lock-showing'\n * class name to it. Used during fadeIn/fadeOut.\n *\n * @private\n */\n ;\n\n _proto.lockShowing = function lockShowing() {\n this.addClass('vjs-lock-showing');\n }\n /**\n * Unlock a `Component`s element from its visible state by removing the 'vjs-lock-showing'\n * class name from it. Used during fadeIn/fadeOut.\n *\n * @private\n */\n ;\n\n _proto.unlockShowing = function unlockShowing() {\n this.removeClass('vjs-lock-showing');\n }\n /**\n * Get the value of an attribute on the `Component`s element.\n *\n * @param {string} attribute\n * Name of the attribute to get the value from.\n *\n * @return {string|null}\n * - The value of the attribute that was asked for.\n * - Can be an empty string on some browsers if the attribute does not exist\n * or has no value\n * - Most browsers will return null if the attibute does not exist or has\n * no value.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute}\n */\n ;\n\n _proto.getAttribute = function getAttribute$1(attribute) {\n return getAttribute(this.el_, attribute);\n }\n /**\n * Set the value of an attribute on the `Component`'s element\n *\n * @param {string} attribute\n * Name of the attribute to set.\n *\n * @param {string} value\n * Value to set the attribute to.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute}\n */\n ;\n\n _proto.setAttribute = function setAttribute$1(attribute, value) {\n setAttribute(this.el_, attribute, value);\n }\n /**\n * Remove an attribute from the `Component`s element.\n *\n * @param {string} attribute\n * Name of the attribute to remove.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute}\n */\n ;\n\n _proto.removeAttribute = function removeAttribute$1(attribute) {\n removeAttribute(this.el_, attribute);\n }\n /**\n * Get or set the width of the component based upon the CSS styles.\n * See {@link Component#dimension} for more detailed information.\n *\n * @param {number|string} [num]\n * The width that you want to set postfixed with '%', 'px' or nothing.\n *\n * @param {boolean} [skipListeners]\n * Skip the componentresize event trigger\n *\n * @return {number|string}\n * The width when getting, zero if there is no width. Can be a string\n * postpixed with '%' or 'px'.\n */\n ;\n\n _proto.width = function width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n }\n /**\n * Get or set the height of the component based upon the CSS styles.\n * See {@link Component#dimension} for more detailed information.\n *\n * @param {number|string} [num]\n * The height that you want to set postfixed with '%', 'px' or nothing.\n *\n * @param {boolean} [skipListeners]\n * Skip the componentresize event trigger\n *\n * @return {number|string}\n * The width when getting, zero if there is no width. Can be a string\n * postpixed with '%' or 'px'.\n */\n ;\n\n _proto.height = function height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n }\n /**\n * Set both the width and height of the `Component` element at the same time.\n *\n * @param {number|string} width\n * Width to set the `Component`s element to.\n *\n * @param {number|string} height\n * Height to set the `Component`s element to.\n */\n ;\n\n _proto.dimensions = function dimensions(width, height) {\n // Skip componentresize listeners on width for optimization\n this.width(width, true);\n this.height(height);\n }\n /**\n * Get or set width or height of the `Component` element. This is the shared code\n * for the {@link Component#width} and {@link Component#height}.\n *\n * Things to know:\n * - If the width or height in an number this will return the number postfixed with 'px'.\n * - If the width/height is a percent this will return the percent postfixed with '%'\n * - Hidden elements have a width of 0 with `window.getComputedStyle`. This function\n * defaults to the `Component`s `style.width` and falls back to `window.getComputedStyle`.\n * See [this]{@link http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/}\n * for more information\n * - If you want the computed style of the component, use {@link Component#currentWidth}\n * and {@link {Component#currentHeight}\n *\n * @fires Component#componentresize\n *\n * @param {string} widthOrHeight\n 8 'width' or 'height'\n *\n * @param {number|string} [num]\n 8 New dimension\n *\n * @param {boolean} [skipListeners]\n * Skip componentresize event trigger\n *\n * @return {number}\n * The dimension when getting or 0 if unset\n */\n ;\n\n _proto.dimension = function dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n } // Check if using css width/height (% or px) and adjust\n\n\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n } // skipListeners allows us to avoid triggering the resize event when setting both width and height\n\n\n if (!skipListeners) {\n /**\n * Triggered when a component is resized.\n *\n * @event Component#componentresize\n * @type {EventTarget~Event}\n */\n this.trigger('componentresize');\n }\n\n return;\n } // Not setting a value, so getting it\n // Make sure element exists\n\n\n if (!this.el_) {\n return 0;\n } // Get dimension value from style\n\n\n var val = this.el_.style[widthOrHeight];\n var pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n } // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n\n\n return parseInt(this.el_['offset' + toTitleCase$1(widthOrHeight)], 10);\n }\n /**\n * Get the computed width or the height of the component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @param {string} widthOrHeight\n * A string containing 'width' or 'height'. Whichever one you want to get.\n *\n * @return {number}\n * The dimension that gets asked for or 0 if nothing was set\n * for that dimension.\n */\n ;\n\n _proto.currentDimension = function currentDimension(widthOrHeight) {\n var computedWidthOrHeight = 0;\n\n if (widthOrHeight !== 'width' && widthOrHeight !== 'height') {\n throw new Error('currentDimension only accepts width or height value');\n }\n\n computedWidthOrHeight = computedStyle(this.el_, widthOrHeight); // remove 'px' from variable and parse as integer\n\n computedWidthOrHeight = parseFloat(computedWidthOrHeight); // if the computed value is still 0, it's possible that the browser is lying\n // and we want to check the offset values.\n // This code also runs wherever getComputedStyle doesn't exist.\n\n if (computedWidthOrHeight === 0 || isNaN(computedWidthOrHeight)) {\n var rule = \"offset\" + toTitleCase$1(widthOrHeight);\n computedWidthOrHeight = this.el_[rule];\n }\n\n return computedWidthOrHeight;\n }\n /**\n * An object that contains width and height values of the `Component`s\n * computed style. Uses `window.getComputedStyle`.\n *\n * @typedef {Object} Component~DimensionObject\n *\n * @property {number} width\n * The width of the `Component`s computed style.\n *\n * @property {number} height\n * The height of the `Component`s computed style.\n */\n\n /**\n * Get an object that contains computed width and height values of the\n * component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {Component~DimensionObject}\n * The computed dimensions of the component's element.\n */\n ;\n\n _proto.currentDimensions = function currentDimensions() {\n return {\n width: this.currentDimension('width'),\n height: this.currentDimension('height')\n };\n }\n /**\n * Get the computed width of the component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {number}\n * The computed width of the component's element.\n */\n ;\n\n _proto.currentWidth = function currentWidth() {\n return this.currentDimension('width');\n }\n /**\n * Get the computed height of the component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {number}\n * The computed height of the component's element.\n */\n ;\n\n _proto.currentHeight = function currentHeight() {\n return this.currentDimension('height');\n }\n /**\n * Set the focus to this component\n */\n ;\n\n _proto.focus = function focus() {\n this.el_.focus();\n }\n /**\n * Remove the focus from this component\n */\n ;\n\n _proto.blur = function blur() {\n this.el_.blur();\n }\n /**\n * When this Component receives a `keydown` event which it does not process,\n * it passes the event to the Player for handling.\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n */\n ;\n\n _proto.handleKeyDown = function handleKeyDown(event) {\n if (this.player_) {\n // We only stop propagation here because we want unhandled events to fall\n // back to the browser. Exclude Tab for focus trapping.\n if (!keycode.isEventKey(event, 'Tab')) {\n event.stopPropagation();\n }\n\n this.player_.handleKeyDown(event);\n }\n }\n /**\n * Many components used to have a `handleKeyPress` method, which was poorly\n * named because it listened to a `keydown` event. This method name now\n * delegates to `handleKeyDown`. This means anyone calling `handleKeyPress`\n * will not see their method calls stop working.\n *\n * @param {EventTarget~Event} event\n * The event that caused this function to be called.\n */\n ;\n\n _proto.handleKeyPress = function handleKeyPress(event) {\n this.handleKeyDown(event);\n }\n /**\n * Emit a 'tap' events when touch event support gets detected. This gets used to\n * support toggling the controls through a tap on the video. They get enabled\n * because every sub-component would have extra overhead otherwise.\n *\n * @private\n * @fires Component#tap\n * @listens Component#touchstart\n * @listens Component#touchmove\n * @listens Component#touchleave\n * @listens Component#touchcancel\n * @listens Component#touchend\n */\n ;\n\n _proto.emitTapEvents = function emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n var touchStart = 0;\n var firstTouch = null; // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15,\n // so 10 seems like a nice, round number.\n\n var tapMovementThreshold = 10; // The maximum length a touch can be while still being considered a tap\n\n var touchTimeThreshold = 200;\n var couldBeTap;\n this.on('touchstart', function (event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy pageX/pageY from the object\n firstTouch = {\n pageX: event.touches[0].pageX,\n pageY: event.touches[0].pageY\n }; // Record start time so we can detect a tap vs. \"touch and hold\"\n\n touchStart = window$1.performance.now(); // Reset couldBeTap tracking\n\n couldBeTap = true;\n }\n });\n this.on('touchmove', function (event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n var xdiff = event.touches[0].pageX - firstTouch.pageX;\n var ydiff = event.touches[0].pageY - firstTouch.pageY;\n var touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n var noTap = function noTap() {\n couldBeTap = false;\n }; // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n\n\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap); // When the touch ends, measure how long it took and trigger the appropriate\n // event\n\n this.on('touchend', function (event) {\n firstTouch = null; // Proceed only if the touchmove/leave/cancel event didn't happen\n\n if (couldBeTap === true) {\n // Measure how long the touch lasted\n var touchTime = window$1.performance.now() - touchStart; // Make sure the touch was less than the threshold to be considered a tap\n\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n /**\n * Triggered when a `Component` is tapped.\n *\n * @event Component#tap\n * @type {EventTarget~Event}\n */\n\n this.trigger('tap'); // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n }\n /**\n * This function reports user activity whenever touch events happen. This can get\n * turned off by any sub-components that wants touch events to act another way.\n *\n * Report user touch activity when touch events occur. User activity gets used to\n * determine when controls should show/hide. It is simple when it comes to mouse\n * events, because any mouse event should show the controls. So we capture mouse\n * events that bubble up to the player and report activity when that happens.\n * With touch events it isn't as easy as `touchstart` and `touchend` toggle player\n * controls. So touch events can't help us at the player level either.\n *\n * User activity gets checked asynchronously. So what could happen is a tap event\n * on the video turns the controls off. Then the `touchend` event bubbles up to\n * the player. Which, if it reported user activity, would turn the controls right\n * back on. We also don't want to completely block touch events from bubbling up.\n * Furthermore a `touchmove` event and anything other than a tap, should not turn\n * controls back on.\n *\n * @listens Component#touchstart\n * @listens Component#touchmove\n * @listens Component#touchend\n * @listens Component#touchcancel\n */\n ;\n\n _proto.enableTouchActivity = function enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n } // listener for reporting that the user is active\n\n\n var report = bind(this.player(), this.player().reportUserActivity);\n var touchHolding;\n this.on('touchstart', function () {\n report(); // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n\n this.clearInterval(touchHolding); // report at the same interval as activityCheck\n\n touchHolding = this.setInterval(report, 250);\n });\n\n var touchEnd = function touchEnd(event) {\n report(); // stop the interval that maintains activity if the touch is holding\n\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n }\n /**\n * A callback that has no parameters and is bound into `Component`s context.\n *\n * @callback Component~GenericCallback\n * @this Component\n */\n\n /**\n * Creates a function that runs after an `x` millisecond timeout. This function is a\n * wrapper around `window.setTimeout`. There are a few reasons to use this one\n * instead though:\n * 1. It gets cleared via {@link Component#clearTimeout} when\n * {@link Component#dispose} gets called.\n * 2. The function callback will gets turned into a {@link Component~GenericCallback}\n *\n * > Note: You can't use `window.clearTimeout` on the id returned by this function. This\n * will cause its dispose listener not to get cleaned up! Please use\n * {@link Component#clearTimeout} or {@link Component#dispose} instead.\n *\n * @param {Component~GenericCallback} fn\n * The function that will be run after `timeout`.\n *\n * @param {number} timeout\n * Timeout in milliseconds to delay before executing the specified function.\n *\n * @return {number}\n * Returns a timeout ID that gets used to identify the timeout. It can also\n * get used in {@link Component#clearTimeout} to clear the timeout that\n * was set.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout}\n */\n ;\n\n _proto.setTimeout = function setTimeout(fn, timeout) {\n var _this3 = this;\n\n // declare as variables so they are properly available in timeout function\n // eslint-disable-next-line\n var timeoutId;\n fn = bind(this, fn);\n this.clearTimersOnDispose_();\n timeoutId = window$1.setTimeout(function () {\n if (_this3.setTimeoutIds_.has(timeoutId)) {\n _this3.setTimeoutIds_[\"delete\"](timeoutId);\n }\n\n fn();\n }, timeout);\n this.setTimeoutIds_.add(timeoutId);\n return timeoutId;\n }\n /**\n * Clears a timeout that gets created via `window.setTimeout` or\n * {@link Component#setTimeout}. If you set a timeout via {@link Component#setTimeout}\n * use this function instead of `window.clearTimout`. If you don't your dispose\n * listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} timeoutId\n * The id of the timeout to clear. The return value of\n * {@link Component#setTimeout} or `window.setTimeout`.\n *\n * @return {number}\n * Returns the timeout id that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout}\n */\n ;\n\n _proto.clearTimeout = function clearTimeout(timeoutId) {\n if (this.setTimeoutIds_.has(timeoutId)) {\n this.setTimeoutIds_[\"delete\"](timeoutId);\n window$1.clearTimeout(timeoutId);\n }\n\n return timeoutId;\n }\n /**\n * Creates a function that gets run every `x` milliseconds. This function is a wrapper\n * around `window.setInterval`. There are a few reasons to use this one instead though.\n * 1. It gets cleared via {@link Component#clearInterval} when\n * {@link Component#dispose} gets called.\n * 2. The function callback will be a {@link Component~GenericCallback}\n *\n * @param {Component~GenericCallback} fn\n * The function to run every `x` seconds.\n *\n * @param {number} interval\n * Execute the specified function every `x` milliseconds.\n *\n * @return {number}\n * Returns an id that can be used to identify the interval. It can also be be used in\n * {@link Component#clearInterval} to clear the interval.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval}\n */\n ;\n\n _proto.setInterval = function setInterval(fn, interval) {\n fn = bind(this, fn);\n this.clearTimersOnDispose_();\n var intervalId = window$1.setInterval(fn, interval);\n this.setIntervalIds_.add(intervalId);\n return intervalId;\n }\n /**\n * Clears an interval that gets created via `window.setInterval` or\n * {@link Component#setInterval}. If you set an inteval via {@link Component#setInterval}\n * use this function instead of `window.clearInterval`. If you don't your dispose\n * listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} intervalId\n * The id of the interval to clear. The return value of\n * {@link Component#setInterval} or `window.setInterval`.\n *\n * @return {number}\n * Returns the interval id that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval}\n */\n ;\n\n _proto.clearInterval = function clearInterval(intervalId) {\n if (this.setIntervalIds_.has(intervalId)) {\n this.setIntervalIds_[\"delete\"](intervalId);\n window$1.clearInterval(intervalId);\n }\n\n return intervalId;\n }\n /**\n * Queues up a callback to be passed to requestAnimationFrame (rAF), but\n * with a few extra bonuses:\n *\n * - Supports browsers that do not support rAF by falling back to\n * {@link Component#setTimeout}.\n *\n * - The callback is turned into a {@link Component~GenericCallback} (i.e.\n * bound to the component).\n *\n * - Automatic cancellation of the rAF callback is handled if the component\n * is disposed before it is called.\n *\n * @param {Component~GenericCallback} fn\n * A function that will be bound to this component and executed just\n * before the browser's next repaint.\n *\n * @return {number}\n * Returns an rAF ID that gets used to identify the timeout. It can\n * also be used in {@link Component#cancelAnimationFrame} to cancel\n * the animation frame callback.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame}\n */\n ;\n\n _proto.requestAnimationFrame = function requestAnimationFrame(fn) {\n var _this4 = this;\n\n // Fall back to using a timer.\n if (!this.supportsRaf_) {\n return this.setTimeout(fn, 1000 / 60);\n }\n\n this.clearTimersOnDispose_(); // declare as variables so they are properly available in rAF function\n // eslint-disable-next-line\n\n var id;\n fn = bind(this, fn);\n id = window$1.requestAnimationFrame(function () {\n if (_this4.rafIds_.has(id)) {\n _this4.rafIds_[\"delete\"](id);\n }\n\n fn();\n });\n this.rafIds_.add(id);\n return id;\n }\n /**\n * Request an animation frame, but only one named animation\n * frame will be queued. Another will never be added until\n * the previous one finishes.\n *\n * @param {string} name\n * The name to give this requestAnimationFrame\n *\n * @param {Component~GenericCallback} fn\n * A function that will be bound to this component and executed just\n * before the browser's next repaint.\n */\n ;\n\n _proto.requestNamedAnimationFrame = function requestNamedAnimationFrame(name, fn) {\n var _this5 = this;\n\n if (this.namedRafs_.has(name)) {\n return;\n }\n\n this.clearTimersOnDispose_();\n fn = bind(this, fn);\n var id = this.requestAnimationFrame(function () {\n fn();\n\n if (_this5.namedRafs_.has(name)) {\n _this5.namedRafs_[\"delete\"](name);\n }\n });\n this.namedRafs_.set(name, id);\n return name;\n }\n /**\n * Cancels a current named animation frame if it exists.\n *\n * @param {string} name\n * The name of the requestAnimationFrame to cancel.\n */\n ;\n\n _proto.cancelNamedAnimationFrame = function cancelNamedAnimationFrame(name) {\n if (!this.namedRafs_.has(name)) {\n return;\n }\n\n this.cancelAnimationFrame(this.namedRafs_.get(name));\n this.namedRafs_[\"delete\"](name);\n }\n /**\n * Cancels a queued callback passed to {@link Component#requestAnimationFrame}\n * (rAF).\n *\n * If you queue an rAF callback via {@link Component#requestAnimationFrame},\n * use this function instead of `window.cancelAnimationFrame`. If you don't,\n * your dispose listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} id\n * The rAF ID to clear. The return value of {@link Component#requestAnimationFrame}.\n *\n * @return {number}\n * Returns the rAF ID that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/cancelAnimationFrame}\n */\n ;\n\n _proto.cancelAnimationFrame = function cancelAnimationFrame(id) {\n // Fall back to using a timer.\n if (!this.supportsRaf_) {\n return this.clearTimeout(id);\n }\n\n if (this.rafIds_.has(id)) {\n this.rafIds_[\"delete\"](id);\n window$1.cancelAnimationFrame(id);\n }\n\n return id;\n }\n /**\n * A function to setup `requestAnimationFrame`, `setTimeout`,\n * and `setInterval`, clearing on dispose.\n *\n * > Previously each timer added and removed dispose listeners on it's own.\n * For better performance it was decided to batch them all, and use `Set`s\n * to track outstanding timer ids.\n *\n * @private\n */\n ;\n\n _proto.clearTimersOnDispose_ = function clearTimersOnDispose_() {\n var _this6 = this;\n\n if (this.clearingTimersOnDispose_) {\n return;\n }\n\n this.clearingTimersOnDispose_ = true;\n this.one('dispose', function () {\n [['namedRafs_', 'cancelNamedAnimationFrame'], ['rafIds_', 'cancelAnimationFrame'], ['setTimeoutIds_', 'clearTimeout'], ['setIntervalIds_', 'clearInterval']].forEach(function (_ref) {\n var idName = _ref[0],\n cancelName = _ref[1];\n\n // for a `Set` key will actually be the value again\n // so forEach((val, val) =>` but for maps we want to use\n // the key.\n _this6[idName].forEach(function (val, key) {\n return _this6[cancelName](key);\n });\n });\n _this6.clearingTimersOnDispose_ = false;\n });\n }\n /**\n * Register a `Component` with `videojs` given the name and the component.\n *\n * > NOTE: {@link Tech}s should not be registered as a `Component`. {@link Tech}s\n * should be registered using {@link Tech.registerTech} or\n * {@link videojs:videojs.registerTech}.\n *\n * > NOTE: This function can also be seen on videojs as\n * {@link videojs:videojs.registerComponent}.\n *\n * @param {string} name\n * The name of the `Component` to register.\n *\n * @param {Component} ComponentToRegister\n * The `Component` class to register.\n *\n * @return {Component}\n * The `Component` that was registered.\n */\n ;\n\n Component.registerComponent = function registerComponent(name, ComponentToRegister) {\n if (typeof name !== 'string' || !name) {\n throw new Error(\"Illegal component name, \\\"\" + name + \"\\\"; must be a non-empty string.\");\n }\n\n var Tech = Component.getComponent('Tech'); // We need to make sure this check is only done if Tech has been registered.\n\n var isTech = Tech && Tech.isTech(ComponentToRegister);\n var isComp = Component === ComponentToRegister || Component.prototype.isPrototypeOf(ComponentToRegister.prototype);\n\n if (isTech || !isComp) {\n var reason;\n\n if (isTech) {\n reason = 'techs must be registered using Tech.registerTech()';\n } else {\n reason = 'must be a Component subclass';\n }\n\n throw new Error(\"Illegal component, \\\"\" + name + \"\\\"; \" + reason + \".\");\n }\n\n name = toTitleCase$1(name);\n\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n var Player = Component.getComponent('Player');\n\n if (name === 'Player' && Player && Player.players) {\n var players = Player.players;\n var playerNames = Object.keys(players); // If we have players that were disposed, then their name will still be\n // in Players.players. So, we must loop through and verify that the value\n // for each item is not null. This allows registration of the Player component\n // after all players have been disposed or before any were created.\n\n if (players && playerNames.length > 0 && playerNames.map(function (pname) {\n return players[pname];\n }).every(Boolean)) {\n throw new Error('Can not register Player component after player has been created.');\n }\n }\n\n Component.components_[name] = ComponentToRegister;\n Component.components_[toLowerCase(name)] = ComponentToRegister;\n return ComponentToRegister;\n }\n /**\n * Get a `Component` based on the name it was registered with.\n *\n * @param {string} name\n * The Name of the component to get.\n *\n * @return {Component}\n * The `Component` that got registered under the given name.\n */\n ;\n\n Component.getComponent = function getComponent(name) {\n if (!name || !Component.components_) {\n return;\n }\n\n return Component.components_[name];\n };\n\n return Component;\n}();\n/**\n * Whether or not this component supports `requestAnimationFrame`.\n *\n * This is exposed primarily for testing purposes.\n *\n * @private\n * @type {Boolean}\n */\n\n\nComponent$1.prototype.supportsRaf_ = typeof window$1.requestAnimationFrame === 'function' && typeof window$1.cancelAnimationFrame === 'function';\nComponent$1.registerComponent('Component', Component$1);\n\n/**\n * @file time-ranges.js\n * @module time-ranges\n */\n/**\n * Returns the time for the specified index at the start or end\n * of a TimeRange object.\n *\n * @typedef {Function} TimeRangeIndex\n *\n * @param {number} [index=0]\n * The range number to return the time for.\n *\n * @return {number}\n * The time offset at the specified index.\n *\n * @deprecated The index argument must be provided.\n * In the future, leaving it out will throw an error.\n */\n\n/**\n * An object that contains ranges of time.\n *\n * @typedef {Object} TimeRange\n *\n * @property {number} length\n * The number of time ranges represented by this object.\n *\n * @property {module:time-ranges~TimeRangeIndex} start\n * Returns the time offset at which a specified time range begins.\n *\n * @property {module:time-ranges~TimeRangeIndex} end\n * Returns the time offset at which a specified time range ends.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges\n */\n\n/**\n * Check if any of the time ranges are over the maximum index.\n *\n * @private\n * @param {string} fnName\n * The function name to use for logging\n *\n * @param {number} index\n * The index to check\n *\n * @param {number} maxIndex\n * The maximum possible index\n *\n * @throws {Error} if the timeRanges provided are over the maxIndex\n */\n\nfunction rangeCheck(fnName, index, maxIndex) {\n if (typeof index !== 'number' || index < 0 || index > maxIndex) {\n throw new Error(\"Failed to execute '\" + fnName + \"' on 'TimeRanges': The index provided (\" + index + \") is non-numeric or out of bounds (0-\" + maxIndex + \").\");\n }\n}\n/**\n * Get the time for the specified index at the start or end\n * of a TimeRange object.\n *\n * @private\n * @param {string} fnName\n * The function name to use for logging\n *\n * @param {string} valueIndex\n * The property that should be used to get the time. should be\n * 'start' or 'end'\n *\n * @param {Array} ranges\n * An array of time ranges\n *\n * @param {Array} [rangeIndex=0]\n * The index to start the search at\n *\n * @return {number}\n * The time that offset at the specified index.\n *\n * @deprecated rangeIndex must be set to a value, in the future this will throw an error.\n * @throws {Error} if rangeIndex is more than the length of ranges\n */\n\n\nfunction getRange(fnName, valueIndex, ranges, rangeIndex) {\n rangeCheck(fnName, rangeIndex, ranges.length - 1);\n return ranges[rangeIndex][valueIndex];\n}\n/**\n * Create a time range object given ranges of time.\n *\n * @private\n * @param {Array} [ranges]\n * An array of time ranges.\n */\n\n\nfunction createTimeRangesObj(ranges) {\n var timeRangesObj;\n\n if (ranges === undefined || ranges.length === 0) {\n timeRangesObj = {\n length: 0,\n start: function start() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function end() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n } else {\n timeRangesObj = {\n length: ranges.length,\n start: getRange.bind(null, 'start', 0, ranges),\n end: getRange.bind(null, 'end', 1, ranges)\n };\n }\n\n if (window$1.Symbol && window$1.Symbol.iterator) {\n timeRangesObj[window$1.Symbol.iterator] = function () {\n return (ranges || []).values();\n };\n }\n\n return timeRangesObj;\n}\n/**\n * Create a `TimeRange` object which mimics an\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges|HTML5 TimeRanges instance}.\n *\n * @param {number|Array[]} start\n * The start of a single range (a number) or an array of ranges (an\n * array of arrays of two numbers each).\n *\n * @param {number} end\n * The end of a single range. Cannot be used with the array form of\n * the `start` argument.\n */\n\n\nfunction createTimeRanges(start, end) {\n if (Array.isArray(start)) {\n return createTimeRangesObj(start);\n } else if (start === undefined || end === undefined) {\n return createTimeRangesObj();\n }\n\n return createTimeRangesObj([[start, end]]);\n}\n\n/**\n * @file buffer.js\n * @module buffer\n */\n/**\n * Compute the percentage of the media that has been buffered.\n *\n * @param {TimeRange} buffered\n * The current `TimeRange` object representing buffered time ranges\n *\n * @param {number} duration\n * Total duration of the media\n *\n * @return {number}\n * Percent buffered of the total duration in decimal form.\n */\n\nfunction bufferedPercent(buffered, duration) {\n var bufferedDuration = 0;\n var start;\n var end;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRanges(0, 0);\n }\n\n for (var i = 0; i < buffered.length; i++) {\n start = buffered.start(i);\n end = buffered.end(i); // buffered end can be bigger than duration by a very small fraction\n\n if (end > duration) {\n end = duration;\n }\n\n bufferedDuration += end - start;\n }\n\n return bufferedDuration / duration;\n}\n\n/**\n * @file media-error.js\n */\n/**\n * A Custom `MediaError` class which mimics the standard HTML5 `MediaError` class.\n *\n * @param {number|string|Object|MediaError} value\n * This can be of multiple types:\n * - number: should be a standard error code\n * - string: an error message (the code will be 0)\n * - Object: arbitrary properties\n * - `MediaError` (native): used to populate a video.js `MediaError` object\n * - `MediaError` (video.js): will return itself if it's already a\n * video.js `MediaError` object.\n *\n * @see [MediaError Spec]{@link https://dev.w3.org/html5/spec-author-view/video.html#mediaerror}\n * @see [Encrypted MediaError Spec]{@link https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes}\n *\n * @class MediaError\n */\n\nfunction MediaError(value) {\n // Allow redundant calls to this constructor to avoid having `instanceof`\n // checks peppered around the code.\n if (value instanceof MediaError) {\n return value;\n }\n\n if (typeof value === 'number') {\n this.code = value;\n } else if (typeof value === 'string') {\n // default code is zero, so this is a custom error\n this.message = value;\n } else if (isObject(value)) {\n // We assign the `code` property manually because native `MediaError` objects\n // do not expose it as an own/enumerable property of the object.\n if (typeof value.code === 'number') {\n this.code = value.code;\n }\n\n assign(this, value);\n }\n\n if (!this.message) {\n this.message = MediaError.defaultMessages[this.code] || '';\n }\n}\n/**\n * The error code that refers two one of the defined `MediaError` types\n *\n * @type {Number}\n */\n\n\nMediaError.prototype.code = 0;\n/**\n * An optional message that to show with the error. Message is not part of the HTML5\n * video spec but allows for more informative custom errors.\n *\n * @type {String}\n */\n\nMediaError.prototype.message = '';\n/**\n * An optional status code that can be set by plugins to allow even more detail about\n * the error. For example a plugin might provide a specific HTTP status code and an\n * error message for that code. Then when the plugin gets that error this class will\n * know how to display an error message for it. This allows a custom message to show\n * up on the `Player` error overlay.\n *\n * @type {Array}\n */\n\nMediaError.prototype.status = null;\n/**\n * Errors indexed by the W3C standard. The order **CANNOT CHANGE**! See the\n * specification listed under {@link MediaError} for more information.\n *\n * @enum {array}\n * @readonly\n * @property {string} 0 - MEDIA_ERR_CUSTOM\n * @property {string} 1 - MEDIA_ERR_ABORTED\n * @property {string} 2 - MEDIA_ERR_NETWORK\n * @property {string} 3 - MEDIA_ERR_DECODE\n * @property {string} 4 - MEDIA_ERR_SRC_NOT_SUPPORTED\n * @property {string} 5 - MEDIA_ERR_ENCRYPTED\n */\n\nMediaError.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED'];\n/**\n * The default `MediaError` messages based on the {@link MediaError.errorTypes}.\n *\n * @type {Array}\n * @constant\n */\n\nMediaError.defaultMessages = {\n 1: 'You aborted the media playback',\n 2: 'A network error caused the media download to fail part-way.',\n 3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',\n 4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.',\n 5: 'The media is encrypted and we do not have the keys to decrypt it.'\n}; // Add types as properties on MediaError\n// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\n\nfor (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) {\n MediaError[MediaError.errorTypes[errNum]] = errNum; // values should be accessible on both the class and instance\n\n MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;\n} // jsdocs for instance/static members added above\n\n/**\n * Returns whether an object is `Promise`-like (i.e. has a `then` method).\n *\n * @param {Object} value\n * An object that may or may not be `Promise`-like.\n *\n * @return {boolean}\n * Whether or not the object is `Promise`-like.\n */\nfunction isPromise(value) {\n return value !== undefined && value !== null && typeof value.then === 'function';\n}\n/**\n * Silence a Promise-like object.\n *\n * This is useful for avoiding non-harmful, but potentially confusing \"uncaught\n * play promise\" rejection error messages.\n *\n * @param {Object} value\n * An object that may or may not be `Promise`-like.\n */\n\nfunction silencePromise(value) {\n if (isPromise(value)) {\n value.then(null, function (e) {});\n }\n}\n\n/**\n * @file text-track-list-converter.js Utilities for capturing text track state and\n * re-creating tracks based on a capture.\n *\n * @module text-track-list-converter\n */\n\n/**\n * Examine a single {@link TextTrack} and return a JSON-compatible javascript object that\n * represents the {@link TextTrack}'s state.\n *\n * @param {TextTrack} track\n * The text track to query.\n *\n * @return {Object}\n * A serializable javascript representation of the TextTrack.\n * @private\n */\nvar trackToJson_ = function trackToJson_(track) {\n var ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce(function (acc, prop, i) {\n if (track[prop]) {\n acc[prop] = track[prop];\n }\n\n return acc;\n }, {\n cues: track.cues && Array.prototype.map.call(track.cues, function (cue) {\n return {\n startTime: cue.startTime,\n endTime: cue.endTime,\n text: cue.text,\n id: cue.id\n };\n })\n });\n return ret;\n};\n/**\n * Examine a {@link Tech} and return a JSON-compatible javascript array that represents the\n * state of all {@link TextTrack}s currently configured. The return array is compatible with\n * {@link text-track-list-converter:jsonToTextTracks}.\n *\n * @param {Tech} tech\n * The tech object to query\n *\n * @return {Array}\n * A serializable javascript representation of the {@link Tech}s\n * {@link TextTrackList}.\n */\n\n\nvar textTracksToJson = function textTracksToJson(tech) {\n var trackEls = tech.$$('track');\n var trackObjs = Array.prototype.map.call(trackEls, function (t) {\n return t.track;\n });\n var tracks = Array.prototype.map.call(trackEls, function (trackEl) {\n var json = trackToJson_(trackEl.track);\n\n if (trackEl.src) {\n json.src = trackEl.src;\n }\n\n return json;\n });\n return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) {\n return trackObjs.indexOf(track) === -1;\n }).map(trackToJson_));\n};\n/**\n * Create a set of remote {@link TextTrack}s on a {@link Tech} based on an array of javascript\n * object {@link TextTrack} representations.\n *\n * @param {Array} json\n * An array of `TextTrack` representation objects, like those that would be\n * produced by `textTracksToJson`.\n *\n * @param {Tech} tech\n * The `Tech` to create the `TextTrack`s on.\n */\n\n\nvar jsonToTextTracks = function jsonToTextTracks(json, tech) {\n json.forEach(function (track) {\n var addedTrack = tech.addRemoteTextTrack(track).track;\n\n if (!track.src && track.cues) {\n track.cues.forEach(function (cue) {\n return addedTrack.addCue(cue);\n });\n }\n });\n return tech.textTracks();\n};\n\nvar textTrackConverter = {\n textTracksToJson: textTracksToJson,\n jsonToTextTracks: jsonToTextTracks,\n trackToJson_: trackToJson_\n};\n\nvar MODAL_CLASS_NAME = 'vjs-modal-dialog';\n/**\n * The `ModalDialog` displays over the video and its controls, which blocks\n * interaction with the player until it is closed.\n *\n * Modal dialogs include a \"Close\" button and will close when that button\n * is activated - or when ESC is pressed anywhere.\n *\n * @extends Component\n */\n\nvar ModalDialog = /*#__PURE__*/function (_Component) {\n _inheritsLoose(ModalDialog, _Component);\n\n /**\n * Create an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Mixed} [options.content=undefined]\n * Provide customized content for this modal.\n *\n * @param {string} [options.description]\n * A text description for the modal, primarily for accessibility.\n *\n * @param {boolean} [options.fillAlways=false]\n * Normally, modals are automatically filled only the first time\n * they open. This tells the modal to refresh its content\n * every time it opens.\n *\n * @param {string} [options.label]\n * A text label for the modal, primarily for accessibility.\n *\n * @param {boolean} [options.pauseOnOpen=true]\n * If `true`, playback will will be paused if playing when\n * the modal opens, and resumed when it closes.\n *\n * @param {boolean} [options.temporary=true]\n * If `true`, the modal can only be opened once; it will be\n * disposed as soon as it's closed.\n *\n * @param {boolean} [options.uncloseable=false]\n * If `true`, the user will not be able to close the modal\n * through the UI in the normal ways. Programmatic closing is\n * still possible.\n */\n function ModalDialog(player, options) {\n var _this;\n\n _this = _Component.call(this, player, options) || this;\n\n _this.handleKeyDown_ = function (e) {\n return _this.handleKeyDown(e);\n };\n\n _this.close_ = function (e) {\n return _this.close(e);\n };\n\n _this.opened_ = _this.hasBeenOpened_ = _this.hasBeenFilled_ = false;\n\n _this.closeable(!_this.options_.uncloseable);\n\n _this.content(_this.options_.content); // Make sure the contentEl is defined AFTER any children are initialized\n // because we only want the contents of the modal in the contentEl\n // (not the UI elements like the close button).\n\n\n _this.contentEl_ = createEl('div', {\n className: MODAL_CLASS_NAME + \"-content\"\n }, {\n role: 'document'\n });\n _this.descEl_ = createEl('p', {\n className: MODAL_CLASS_NAME + \"-description vjs-control-text\",\n id: _this.el().getAttribute('aria-describedby')\n });\n textContent(_this.descEl_, _this.description());\n\n _this.el_.appendChild(_this.descEl_);\n\n _this.el_.appendChild(_this.contentEl_);\n\n return _this;\n }\n /**\n * Create the `ModalDialog`'s DOM element\n *\n * @return {Element}\n * The DOM element that gets created.\n */\n\n\n var _proto = ModalDialog.prototype;\n\n _proto.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: this.buildCSSClass(),\n tabIndex: -1\n }, {\n 'aria-describedby': this.id() + \"_description\",\n 'aria-hidden': 'true',\n 'aria-label': this.label(),\n 'role': 'dialog'\n });\n };\n\n _proto.dispose = function dispose() {\n this.contentEl_ = null;\n this.descEl_ = null;\n this.previouslyActiveEl_ = null;\n\n _Component.prototype.dispose.call(this);\n }\n /**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */\n ;\n\n _proto.buildCSSClass = function buildCSSClass() {\n return MODAL_CLASS_NAME + \" vjs-hidden \" + _Component.prototype.buildCSSClass.call(this);\n }\n /**\n * Returns the label string for this modal. Primarily used for accessibility.\n *\n * @return {string}\n * the localized or raw label of this modal.\n */\n ;\n\n _proto.label = function label() {\n return this.localize(this.options_.label || 'Modal Window');\n }\n /**\n * Returns the description string for this modal. Primarily used for\n * accessibility.\n *\n * @return {string}\n * The localized or raw description of this modal.\n */\n ;\n\n _proto.description = function description() {\n var desc = this.options_.description || this.localize('This is a modal window.'); // Append a universal closeability message if the modal is closeable.\n\n if (this.closeable()) {\n desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.');\n }\n\n return desc;\n }\n /**\n * Opens the modal.\n *\n * @fires ModalDialog#beforemodalopen\n * @fires ModalDialog#modalopen\n */\n ;\n\n _proto.open = function open() {\n if (!this.opened_) {\n var player = this.player();\n /**\n * Fired just before a `ModalDialog` is opened.\n *\n * @event ModalDialog#beforemodalopen\n * @type {EventTarget~Event}\n */\n\n this.trigger('beforemodalopen');\n this.opened_ = true; // Fill content if the modal has never opened before and\n // never been filled.\n\n if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) {\n this.fill();\n } // If the player was playing, pause it and take note of its previously\n // playing state.\n\n\n this.wasPlaying_ = !player.paused();\n\n if (this.options_.pauseOnOpen && this.wasPlaying_) {\n player.pause();\n }\n\n this.on('keydown', this.handleKeyDown_); // Hide controls and note if they were enabled.\n\n this.hadControls_ = player.controls();\n player.controls(false);\n this.show();\n this.conditionalFocus_();\n this.el().setAttribute('aria-hidden', 'false');\n /**\n * Fired just after a `ModalDialog` is opened.\n *\n * @event ModalDialog#modalopen\n * @type {EventTarget~Event}\n */\n\n this.trigger('modalopen');\n this.hasBeenOpened_ = true;\n }\n }\n /**\n * If the `ModalDialog` is currently open or closed.\n *\n * @param {boolean} [value]\n * If given, it will open (`true`) or close (`false`) the modal.\n *\n * @return {boolean}\n * the current open state of the modaldialog\n */\n ;\n\n _proto.opened = function opened(value) {\n if (typeof value === 'boolean') {\n this[value ? 'open' : 'close']();\n }\n\n return this.opened_;\n }\n /**\n * Closes the modal, does nothing if the `ModalDialog` is\n * not open.\n *\n * @fires ModalDialog#beforemodalclose\n * @fires ModalDialog#modalclose\n */\n ;\n\n _proto.close = function close() {\n if (!this.opened_) {\n return;\n }\n\n var player = this.player();\n /**\n * Fired just before a `ModalDialog` is closed.\n *\n * @event ModalDialog#beforemodalclose\n * @type {EventTarget~Event}\n */\n\n this.trigger('beforemodalclose');\n this.opened_ = false;\n\n if (this.wasPlaying_ && this.options_.pauseOnOpen) {\n player.play();\n }\n\n this.off('keydown', this.handleKeyDown_);\n\n if (this.hadControls_) {\n player.controls(true);\n }\n\n this.hide();\n this.el().setAttribute('aria-hidden', 'true');\n /**\n * Fired just after a `ModalDialog` is closed.\n *\n * @event ModalDialog#modalclose\n * @type {EventTarget~Event}\n */\n\n this.trigger('modalclose');\n this.conditionalBlur_();\n\n if (this.options_.temporary) {\n this.dispose();\n }\n }\n /**\n * Check to see if the `ModalDialog` is closeable via the UI.\n *\n * @param {boolean} [value]\n * If given as a boolean, it will set the `closeable` option.\n *\n * @return {boolean}\n * Returns the final value of the closable option.\n */\n ;\n\n _proto.closeable = function closeable(value) {\n if (typeof value === 'boolean') {\n var closeable = this.closeable_ = !!value;\n var close = this.getChild('closeButton'); // If this is being made closeable and has no close button, add one.\n\n if (closeable && !close) {\n // The close button should be a child of the modal - not its\n // content element, so temporarily change the content element.\n var temp = this.contentEl_;\n this.contentEl_ = this.el_;\n close = this.addChild('closeButton', {\n controlText: 'Close Modal Dialog'\n });\n this.contentEl_ = temp;\n this.on(close, 'close', this.close_);\n } // If this is being made uncloseable and has a close button, remove it.\n\n\n if (!closeable && close) {\n this.off(close, 'close', this.close_);\n this.removeChild(close);\n close.dispose();\n }\n }\n\n return this.closeable_;\n }\n /**\n * Fill the modal's content element with the modal's \"content\" option.\n * The content element will be emptied before this change takes place.\n */\n ;\n\n _proto.fill = function fill() {\n this.fillWith(this.content());\n }\n /**\n * Fill the modal's content element with arbitrary content.\n * The content element will be emptied before this change takes place.\n *\n * @fires ModalDialog#beforemodalfill\n * @fires ModalDialog#modalfill\n *\n * @param {Mixed} [content]\n * The same rules apply to this as apply to the `content` option.\n */\n ;\n\n _proto.fillWith = function fillWith(content) {\n var contentEl = this.contentEl();\n var parentEl = contentEl.parentNode;\n var nextSiblingEl = contentEl.nextSibling;\n /**\n * Fired just before a `ModalDialog` is filled with content.\n *\n * @event ModalDialog#beforemodalfill\n * @type {EventTarget~Event}\n */\n\n this.trigger('beforemodalfill');\n this.hasBeenFilled_ = true; // Detach the content element from the DOM before performing\n // manipulation to avoid modifying the live DOM multiple times.\n\n parentEl.removeChild(contentEl);\n this.empty();\n insertContent(contentEl, content);\n /**\n * Fired just after a `ModalDialog` is filled with content.\n *\n * @event ModalDialog#modalfill\n * @type {EventTarget~Event}\n */\n\n this.trigger('modalfill'); // Re-inject the re-filled content element.\n\n if (nextSiblingEl) {\n parentEl.insertBefore(contentEl, nextSiblingEl);\n } else {\n parentEl.appendChild(contentEl);\n } // make sure that the close button is last in the dialog DOM\n\n\n var closeButton = this.getChild('closeButton');\n\n if (closeButton) {\n parentEl.appendChild(closeButton.el_);\n }\n }\n /**\n * Empties the content element. This happens anytime the modal is filled.\n *\n * @fires ModalDialog#beforemodalempty\n * @fires ModalDialog#modalempty\n */\n ;\n\n _proto.empty = function empty() {\n /**\n * Fired just before a `ModalDialog` is emptied.\n *\n * @event ModalDialog#beforemodalempty\n * @type {EventTarget~Event}\n */\n this.trigger('beforemodalempty');\n emptyEl(this.contentEl());\n /**\n * Fired just after a `ModalDialog` is emptied.\n *\n * @event ModalDialog#modalempty\n * @type {EventTarget~Event}\n */\n\n this.trigger('modalempty');\n }\n /**\n * Gets or sets the modal content, which gets normalized before being\n * rendered into the DOM.\n *\n * This does not update the DOM or fill the modal, but it is called during\n * that process.\n *\n * @param {Mixed} [value]\n * If defined, sets the internal content value to be used on the\n * next call(s) to `fill`. This value is normalized before being\n * inserted. To \"clear\" the internal content value, pass `null`.\n *\n * @return {Mixed}\n * The current content of the modal dialog\n */\n ;\n\n _proto.content = function content(value) {\n if (typeof value !== 'undefined') {\n this.content_ = value;\n }\n\n return this.content_;\n }\n /**\n * conditionally focus the modal dialog if focus was previously on the player.\n *\n * @private\n */\n ;\n\n _proto.conditionalFocus_ = function conditionalFocus_() {\n var activeEl = document.activeElement;\n var playerEl = this.player_.el_;\n this.previouslyActiveEl_ = null;\n\n if (playerEl.contains(activeEl) || playerEl === activeEl) {\n this.previouslyActiveEl_ = activeEl;\n this.focus();\n }\n }\n /**\n * conditionally blur the element and refocus the last focused element\n *\n * @private\n */\n ;\n\n _proto.conditionalBlur_ = function conditionalBlur_() {\n if (this.previouslyActiveEl_) {\n this.previouslyActiveEl_.focus();\n this.previouslyActiveEl_ = null;\n }\n }\n /**\n * Keydown handler. Attached when modal is focused.\n *\n * @listens keydown\n */\n ;\n\n _proto.handleKeyDown = function handleKeyDown(event) {\n // Do not allow keydowns to reach out of the modal dialog.\n event.stopPropagation();\n\n if (keycode.isEventKey(event, 'Escape') && this.closeable()) {\n event.preventDefault();\n this.close();\n return;\n } // exit early if it isn't a tab key\n\n\n if (!keycode.isEventKey(event, 'Tab')) {\n return;\n }\n\n var focusableEls = this.focusableEls_();\n var activeEl = this.el_.querySelector(':focus');\n var focusIndex;\n\n for (var i = 0; i < focusableEls.length; i++) {\n if (activeEl === focusableEls[i]) {\n focusIndex = i;\n break;\n }\n }\n\n if (document.activeElement === this.el_) {\n focusIndex = 0;\n }\n\n if (event.shiftKey && focusIndex === 0) {\n focusableEls[focusableEls.length - 1].focus();\n event.preventDefault();\n } else if (!event.shiftKey && focusIndex === focusableEls.length - 1) {\n focusableEls[0].focus();\n event.preventDefault();\n }\n }\n /**\n * get all focusable elements\n *\n * @private\n */\n ;\n\n _proto.focusableEls_ = function focusableEls_() {\n var allChildren = this.el_.querySelectorAll('*');\n return Array.prototype.filter.call(allChildren, function (child) {\n return (child instanceof window$1.HTMLAnchorElement || child instanceof window$1.HTMLAreaElement) && child.hasAttribute('href') || (child instanceof window$1.HTMLInputElement || child instanceof window$1.HTMLSelectElement || child instanceof window$1.HTMLTextAreaElement || child instanceof window$1.HTMLButtonElement) && !child.hasAttribute('disabled') || child instanceof window$1.HTMLIFrameElement || child instanceof window$1.HTMLObjectElement || child instanceof window$1.HTMLEmbedElement || child.hasAttribute('tabindex') && child.getAttribute('tabindex') !== -1 || child.hasAttribute('contenteditable');\n });\n };\n\n return ModalDialog;\n}(Component$1);\n/**\n * Default options for `ModalDialog` default options.\n *\n * @type {Object}\n * @private\n */\n\n\nModalDialog.prototype.options_ = {\n pauseOnOpen: true,\n temporary: true\n};\nComponent$1.registerComponent('ModalDialog', ModalDialog);\n\n/**\n * Common functionaliy between {@link TextTrackList}, {@link AudioTrackList}, and\n * {@link VideoTrackList}\n *\n * @extends EventTarget\n */\n\nvar TrackList = /*#__PURE__*/function (_EventTarget) {\n _inheritsLoose(TrackList, _EventTarget);\n\n /**\n * Create an instance of this class\n *\n * @param {Track[]} tracks\n * A list of tracks to initialize the list with.\n *\n * @abstract\n */\n function TrackList(tracks) {\n var _this;\n\n if (tracks === void 0) {\n tracks = [];\n }\n\n _this = _EventTarget.call(this) || this;\n _this.tracks_ = [];\n /**\n * @memberof TrackList\n * @member {number} length\n * The current number of `Track`s in the this Trackist.\n * @instance\n */\n\n Object.defineProperty(_assertThisInitialized(_this), 'length', {\n get: function get() {\n return this.tracks_.length;\n }\n });\n\n for (var i = 0; i < tracks.length; i++) {\n _this.addTrack(tracks[i]);\n }\n\n return _this;\n }\n /**\n * Add a {@link Track} to the `TrackList`\n *\n * @param {Track} track\n * The audio, video, or text track to add to the list.\n *\n * @fires TrackList#addtrack\n */\n\n\n var _proto = TrackList.prototype;\n\n _proto.addTrack = function addTrack(track) {\n var _this2 = this;\n\n var index = this.tracks_.length;\n\n if (!('' + index in this)) {\n Object.defineProperty(this, index, {\n get: function get() {\n return this.tracks_[index];\n }\n });\n } // Do not add duplicate tracks\n\n\n if (this.tracks_.indexOf(track) === -1) {\n this.tracks_.push(track);\n /**\n * Triggered when a track is added to a track list.\n *\n * @event TrackList#addtrack\n * @type {EventTarget~Event}\n * @property {Track} track\n * A reference to track that was added.\n */\n\n this.trigger({\n track: track,\n type: 'addtrack',\n target: this\n });\n }\n /**\n * Triggered when a track label is changed.\n *\n * @event TrackList#addtrack\n * @type {EventTarget~Event}\n * @property {Track} track\n * A reference to track that was added.\n */\n\n\n track.labelchange_ = function () {\n _this2.trigger({\n track: track,\n type: 'labelchange',\n target: _this2\n });\n };\n\n if (isEvented(track)) {\n track.addEventListener('labelchange', track.labelchange_);\n }\n }\n /**\n * Remove a {@link Track} from the `TrackList`\n *\n * @param {Track} rtrack\n * The audio, video, or text track to remove from the list.\n *\n * @fires TrackList#removetrack\n */\n ;\n\n _proto.removeTrack = function removeTrack(rtrack) {\n var track;\n\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] === rtrack) {\n track = this[i];\n\n if (track.off) {\n track.off();\n }\n\n this.tracks_.splice(i, 1);\n break;\n }\n }\n\n if (!track) {\n return;\n }\n /**\n * Triggered when a track is removed from track list.\n *\n * @event TrackList#removetrack\n * @type {EventTarget~Event}\n * @property {Track} track\n * A reference to track that was removed.\n */\n\n\n this.trigger({\n track: track,\n type: 'removetrack',\n target: this\n });\n }\n /**\n * Get a Track from the TrackList by a tracks id\n *\n * @param {string} id - the id of the track to get\n * @method getTrackById\n * @return {Track}\n * @private\n */\n ;\n\n _proto.getTrackById = function getTrackById(id) {\n var result = null;\n\n for (var i = 0, l = this.length; i < l; i++) {\n var track = this[i];\n\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n };\n\n return TrackList;\n}(EventTarget$2);\n/**\n * Triggered when a different track is selected/enabled.\n *\n * @event TrackList#change\n * @type {EventTarget~Event}\n */\n\n/**\n * Events that can be called with on + eventName. See {@link EventHandler}.\n *\n * @property {Object} TrackList#allowedEvents_\n * @private\n */\n\n\nTrackList.prototype.allowedEvents_ = {\n change: 'change',\n addtrack: 'addtrack',\n removetrack: 'removetrack',\n labelchange: 'labelchange'\n}; // emulate attribute EventHandler support to allow for feature detection\n\nfor (var event in TrackList.prototype.allowedEvents_) {\n TrackList.prototype['on' + event] = null;\n}\n\n/**\n * Anywhere we call this function we diverge from the spec\n * as we only support one enabled audiotrack at a time\n *\n * @param {AudioTrackList} list\n * list to work on\n *\n * @param {AudioTrack} track\n * The track to skip\n *\n * @private\n */\n\nvar disableOthers$1 = function disableOthers(list, track) {\n for (var i = 0; i < list.length; i++) {\n if (!Object.keys(list[i]).length || track.id === list[i].id) {\n continue;\n } // another audio track is enabled, disable it\n\n\n list[i].enabled = false;\n }\n};\n/**\n * The current list of {@link AudioTrack} for a media file.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist}\n * @extends TrackList\n */\n\n\nvar AudioTrackList = /*#__PURE__*/function (_TrackList) {\n _inheritsLoose(AudioTrackList, _TrackList);\n\n /**\n * Create an instance of this class.\n *\n * @param {AudioTrack[]} [tracks=[]]\n * A list of `AudioTrack` to instantiate the list with.\n */\n function AudioTrackList(tracks) {\n var _this;\n\n if (tracks === void 0) {\n tracks = [];\n }\n\n // make sure only 1 track is enabled\n // sorted from last index to first index\n for (var i = tracks.length - 1; i >= 0; i--) {\n if (tracks[i].enabled) {\n disableOthers$1(tracks, tracks[i]);\n break;\n }\n }\n\n _this = _TrackList.call(this, tracks) || this;\n _this.changing_ = false;\n return _this;\n }\n /**\n * Add an {@link AudioTrack} to the `AudioTrackList`.\n *\n * @param {AudioTrack} track\n * The AudioTrack to add to the list\n *\n * @fires TrackList#addtrack\n */\n\n\n var _proto = AudioTrackList.prototype;\n\n _proto.addTrack = function addTrack(track) {\n var _this2 = this;\n\n if (track.enabled) {\n disableOthers$1(this, track);\n }\n\n _TrackList.prototype.addTrack.call(this, track); // native tracks don't have this\n\n\n if (!track.addEventListener) {\n return;\n }\n\n track.enabledChange_ = function () {\n // when we are disabling other tracks (since we don't support\n // more than one track at a time) we will set changing_\n // to true so that we don't trigger additional change events\n if (_this2.changing_) {\n return;\n }\n\n _this2.changing_ = true;\n disableOthers$1(_this2, track);\n _this2.changing_ = false;\n\n _this2.trigger('change');\n };\n /**\n * @listens AudioTrack#enabledchange\n * @fires TrackList#change\n */\n\n\n track.addEventListener('enabledchange', track.enabledChange_);\n };\n\n _proto.removeTrack = function removeTrack(rtrack) {\n _TrackList.prototype.removeTrack.call(this, rtrack);\n\n if (rtrack.removeEventListener && rtrack.enabledChange_) {\n rtrack.removeEventListener('enabledchange', rtrack.enabledChange_);\n rtrack.enabledChange_ = null;\n }\n };\n\n return AudioTrackList;\n}(TrackList);\n\n/**\n * Un-select all other {@link VideoTrack}s that are selected.\n *\n * @param {VideoTrackList} list\n * list to work on\n *\n * @param {VideoTrack} track\n * The track to skip\n *\n * @private\n */\n\nvar disableOthers = function disableOthers(list, track) {\n for (var i = 0; i < list.length; i++) {\n if (!Object.keys(list[i]).length || track.id === list[i].id) {\n continue;\n } // another video track is enabled, disable it\n\n\n list[i].selected = false;\n }\n};\n/**\n * The current list of {@link VideoTrack} for a video.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}\n * @extends TrackList\n */\n\n\nvar VideoTrackList = /*#__PURE__*/function (_TrackList) {\n _inheritsLoose(VideoTrackList, _TrackList);\n\n /**\n * Create an instance of this class.\n *\n * @param {VideoTrack[]} [tracks=[]]\n * A list of `VideoTrack` to instantiate the list with.\n */\n function VideoTrackList(tracks) {\n var _this;\n\n if (tracks === void 0) {\n tracks = [];\n }\n\n // make sure only 1 track is enabled\n // sorted from last index to first index\n for (var i = tracks.length - 1; i >= 0; i--) {\n if (tracks[i].selected) {\n disableOthers(tracks, tracks[i]);\n break;\n }\n }\n\n _this = _TrackList.call(this, tracks) || this;\n _this.changing_ = false;\n /**\n * @member {number} VideoTrackList#selectedIndex\n * The current index of the selected {@link VideoTrack`}.\n */\n\n Object.defineProperty(_assertThisInitialized(_this), 'selectedIndex', {\n get: function get() {\n for (var _i = 0; _i < this.length; _i++) {\n if (this[_i].selected) {\n return _i;\n }\n }\n\n return -1;\n },\n set: function set() {}\n });\n return _this;\n }\n /**\n * Add a {@link VideoTrack} to the `VideoTrackList`.\n *\n * @param {VideoTrack} track\n * The VideoTrack to add to the list\n *\n * @fires TrackList#addtrack\n */\n\n\n var _proto = VideoTrackList.prototype;\n\n _proto.addTrack = function addTrack(track) {\n var _this2 = this;\n\n if (track.selected) {\n disableOthers(this, track);\n }\n\n _TrackList.prototype.addTrack.call(this, track); // native tracks don't have this\n\n\n if (!track.addEventListener) {\n return;\n }\n\n track.selectedChange_ = function () {\n if (_this2.changing_) {\n return;\n }\n\n _this2.changing_ = true;\n disableOthers(_this2, track);\n _this2.changing_ = false;\n\n _this2.trigger('change');\n };\n /**\n * @listens VideoTrack#selectedchange\n * @fires TrackList#change\n */\n\n\n track.addEventListener('selectedchange', track.selectedChange_);\n };\n\n _proto.removeTrack = function removeTrack(rtrack) {\n _TrackList.prototype.removeTrack.call(this, rtrack);\n\n if (rtrack.removeEventListener && rtrack.selectedChange_) {\n rtrack.removeEventListener('selectedchange', rtrack.selectedChange_);\n rtrack.selectedChange_ = null;\n }\n };\n\n return VideoTrackList;\n}(TrackList);\n\n/**\n * The current list of {@link TextTrack} for a media file.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist}\n * @extends TrackList\n */\n\nvar TextTrackList = /*#__PURE__*/function (_TrackList) {\n _inheritsLoose(TextTrackList, _TrackList);\n\n function TextTrackList() {\n return _TrackList.apply(this, arguments) || this;\n }\n\n var _proto = TextTrackList.prototype;\n\n /**\n * Add a {@link TextTrack} to the `TextTrackList`\n *\n * @param {TextTrack} track\n * The text track to add to the list.\n *\n * @fires TrackList#addtrack\n */\n _proto.addTrack = function addTrack(track) {\n var _this = this;\n\n _TrackList.prototype.addTrack.call(this, track);\n\n if (!this.queueChange_) {\n this.queueChange_ = function () {\n return _this.queueTrigger('change');\n };\n }\n\n if (!this.triggerSelectedlanguagechange) {\n this.triggerSelectedlanguagechange_ = function () {\n return _this.trigger('selectedlanguagechange');\n };\n }\n /**\n * @listens TextTrack#modechange\n * @fires TrackList#change\n */\n\n\n track.addEventListener('modechange', this.queueChange_);\n var nonLanguageTextTrackKind = ['metadata', 'chapters'];\n\n if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) {\n track.addEventListener('modechange', this.triggerSelectedlanguagechange_);\n }\n };\n\n _proto.removeTrack = function removeTrack(rtrack) {\n _TrackList.prototype.removeTrack.call(this, rtrack); // manually remove the event handlers we added\n\n\n if (rtrack.removeEventListener) {\n if (this.queueChange_) {\n rtrack.removeEventListener('modechange', this.queueChange_);\n }\n\n if (this.selectedlanguagechange_) {\n rtrack.removeEventListener('modechange', this.triggerSelectedlanguagechange_);\n }\n }\n };\n\n return TextTrackList;\n}(TrackList);\n\n/**\n * @file html-track-element-list.js\n */\n\n/**\n * The current list of {@link HtmlTrackElement}s.\n */\nvar HtmlTrackElementList = /*#__PURE__*/function () {\n /**\n * Create an instance of this class.\n *\n * @param {HtmlTrackElement[]} [tracks=[]]\n * A list of `HtmlTrackElement` to instantiate the list with.\n */\n function HtmlTrackElementList(trackElements) {\n if (trackElements === void 0) {\n trackElements = [];\n }\n\n this.trackElements_ = [];\n /**\n * @memberof HtmlTrackElementList\n * @member {number} length\n * The current number of `Track`s in the this Trackist.\n * @instance\n */\n\n Object.defineProperty(this, 'length', {\n get: function get() {\n return this.trackElements_.length;\n }\n });\n\n for (var i = 0, length = trackElements.length; i < length; i++) {\n this.addTrackElement_(trackElements[i]);\n }\n }\n /**\n * Add an {@link HtmlTrackElement} to the `HtmlTrackElementList`\n *\n * @param {HtmlTrackElement} trackElement\n * The track element to add to the list.\n *\n * @private\n */\n\n\n var _proto = HtmlTrackElementList.prototype;\n\n _proto.addTrackElement_ = function addTrackElement_(trackElement) {\n var index = this.trackElements_.length;\n\n if (!('' + index in this)) {\n Object.defineProperty(this, index, {\n get: function get() {\n return this.trackElements_[index];\n }\n });\n } // Do not add duplicate elements\n\n\n if (this.trackElements_.indexOf(trackElement) === -1) {\n this.trackElements_.push(trackElement);\n }\n }\n /**\n * Get an {@link HtmlTrackElement} from the `HtmlTrackElementList` given an\n * {@link TextTrack}.\n *\n * @param {TextTrack} track\n * The track associated with a track element.\n *\n * @return {HtmlTrackElement|undefined}\n * The track element that was found or undefined.\n *\n * @private\n */\n ;\n\n _proto.getTrackElementByTrack_ = function getTrackElementByTrack_(track) {\n var trackElement_;\n\n for (var i = 0, length = this.trackElements_.length; i < length; i++) {\n if (track === this.trackElements_[i].track) {\n trackElement_ = this.trackElements_[i];\n break;\n }\n }\n\n return trackElement_;\n }\n /**\n * Remove a {@link HtmlTrackElement} from the `HtmlTrackElementList`\n *\n * @param {HtmlTrackElement} trackElement\n * The track element to remove from the list.\n *\n * @private\n */\n ;\n\n _proto.removeTrackElement_ = function removeTrackElement_(trackElement) {\n for (var i = 0, length = this.trackElements_.length; i < length; i++) {\n if (trackElement === this.trackElements_[i]) {\n if (this.trackElements_[i].track && typeof this.trackElements_[i].track.off === 'function') {\n this.trackElements_[i].track.off();\n }\n\n if (typeof this.trackElements_[i].off === 'function') {\n this.trackElements_[i].off();\n }\n\n this.trackElements_.splice(i, 1);\n break;\n }\n }\n };\n\n return HtmlTrackElementList;\n}();\n\n/**\n * @file text-track-cue-list.js\n */\n\n/**\n * @typedef {Object} TextTrackCueList~TextTrackCue\n *\n * @property {string} id\n * The unique id for this text track cue\n *\n * @property {number} startTime\n * The start time for this text track cue\n *\n * @property {number} endTime\n * The end time for this text track cue\n *\n * @property {boolean} pauseOnExit\n * Pause when the end time is reached if true.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcue}\n */\n\n/**\n * A List of TextTrackCues.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist}\n */\nvar TextTrackCueList = /*#__PURE__*/function () {\n /**\n * Create an instance of this class..\n *\n * @param {Array} cues\n * A list of cues to be initialized with\n */\n function TextTrackCueList(cues) {\n TextTrackCueList.prototype.setCues_.call(this, cues);\n /**\n * @memberof TextTrackCueList\n * @member {number} length\n * The current number of `TextTrackCue`s in the TextTrackCueList.\n * @instance\n */\n\n Object.defineProperty(this, 'length', {\n get: function get() {\n return this.length_;\n }\n });\n }\n /**\n * A setter for cues in this list. Creates getters\n * an an index for the cues.\n *\n * @param {Array} cues\n * An array of cues to set\n *\n * @private\n */\n\n\n var _proto = TextTrackCueList.prototype;\n\n _proto.setCues_ = function setCues_(cues) {\n var oldLength = this.length || 0;\n var i = 0;\n var l = cues.length;\n this.cues_ = cues;\n this.length_ = cues.length;\n\n var defineProp = function defineProp(index) {\n if (!('' + index in this)) {\n Object.defineProperty(this, '' + index, {\n get: function get() {\n return this.cues_[index];\n }\n });\n }\n };\n\n if (oldLength < l) {\n i = oldLength;\n\n for (; i < l; i++) {\n defineProp.call(this, i);\n }\n }\n }\n /**\n * Get a `TextTrackCue` that is currently in the `TextTrackCueList` by id.\n *\n * @param {string} id\n * The id of the cue that should be searched for.\n *\n * @return {TextTrackCueList~TextTrackCue|null}\n * A single cue or null if none was found.\n */\n ;\n\n _proto.getCueById = function getCueById(id) {\n var result = null;\n\n for (var i = 0, l = this.length; i < l; i++) {\n var cue = this[i];\n\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n };\n\n return TextTrackCueList;\n}();\n\n/**\n * @file track-kinds.js\n */\n\n/**\n * All possible `VideoTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind\n * @typedef VideoTrack~Kind\n * @enum\n */\nvar VideoTrackKind = {\n alternative: 'alternative',\n captions: 'captions',\n main: 'main',\n sign: 'sign',\n subtitles: 'subtitles',\n commentary: 'commentary'\n};\n/**\n * All possible `AudioTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind\n * @typedef AudioTrack~Kind\n * @enum\n */\n\nvar AudioTrackKind = {\n 'alternative': 'alternative',\n 'descriptions': 'descriptions',\n 'main': 'main',\n 'main-desc': 'main-desc',\n 'translation': 'translation',\n 'commentary': 'commentary'\n};\n/**\n * All possible `TextTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-texttrack-kind\n * @typedef TextTrack~Kind\n * @enum\n */\n\nvar TextTrackKind = {\n subtitles: 'subtitles',\n captions: 'captions',\n descriptions: 'descriptions',\n chapters: 'chapters',\n metadata: 'metadata'\n};\n/**\n * All possible `TextTrackMode`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n * @typedef TextTrack~Mode\n * @enum\n */\n\nvar TextTrackMode = {\n disabled: 'disabled',\n hidden: 'hidden',\n showing: 'showing'\n};\n\n/**\n * A Track class that contains all of the common functionality for {@link AudioTrack},\n * {@link VideoTrack}, and {@link TextTrack}.\n *\n * > Note: This class should not be used directly\n *\n * @see {@link https://html.spec.whatwg.org/multipage/embedded-content.html}\n * @extends EventTarget\n * @abstract\n */\n\nvar Track = /*#__PURE__*/function (_EventTarget) {\n _inheritsLoose(Track, _EventTarget);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {string} [options.kind='']\n * A valid kind for the track type you are creating.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @abstract\n */\n function Track(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _EventTarget.call(this) || this;\n var trackProps = {\n id: options.id || 'vjs_track_' + newGUID(),\n kind: options.kind || '',\n language: options.language || ''\n };\n var label = options.label || '';\n /**\n * @memberof Track\n * @member {string} id\n * The id of this track. Cannot be changed after creation.\n * @instance\n *\n * @readonly\n */\n\n /**\n * @memberof Track\n * @member {string} kind\n * The kind of track that this is. Cannot be changed after creation.\n * @instance\n *\n * @readonly\n */\n\n /**\n * @memberof Track\n * @member {string} language\n * The two letter language code for this track. Cannot be changed after\n * creation.\n * @instance\n *\n * @readonly\n */\n\n var _loop = function _loop(key) {\n Object.defineProperty(_assertThisInitialized(_this), key, {\n get: function get() {\n return trackProps[key];\n },\n set: function set() {}\n });\n };\n\n for (var key in trackProps) {\n _loop(key);\n }\n /**\n * @memberof Track\n * @member {string} label\n * The label of this track. Cannot be changed after creation.\n * @instance\n *\n * @fires Track#labelchange\n */\n\n\n Object.defineProperty(_assertThisInitialized(_this), 'label', {\n get: function get() {\n return label;\n },\n set: function set(newLabel) {\n if (newLabel !== label) {\n label = newLabel;\n /**\n * An event that fires when label changes on this track.\n *\n * > Note: This is not part of the spec!\n *\n * @event Track#labelchange\n * @type {EventTarget~Event}\n */\n\n this.trigger('labelchange');\n }\n }\n });\n return _this;\n }\n\n return Track;\n}(EventTarget$2);\n\n/**\n * @file url.js\n * @module url\n */\n/**\n * @typedef {Object} url:URLObject\n *\n * @property {string} protocol\n * The protocol of the url that was parsed.\n *\n * @property {string} hostname\n * The hostname of the url that was parsed.\n *\n * @property {string} port\n * The port of the url that was parsed.\n *\n * @property {string} pathname\n * The pathname of the url that was parsed.\n *\n * @property {string} search\n * The search query of the url that was parsed.\n *\n * @property {string} hash\n * The hash of the url that was parsed.\n *\n * @property {string} host\n * The host of the url that was parsed.\n */\n\n/**\n * Resolve and parse the elements of a URL.\n *\n * @function\n * @param {String} url\n * The url to parse\n *\n * @return {url:URLObject}\n * An object of url details\n */\n\nvar parseUrl = function parseUrl(url) {\n // This entire method can be replace with URL once we are able to drop IE11\n var props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host']; // add the url to an anchor and let the browser parse the URL\n\n var a = document.createElement('a');\n a.href = url; // Copy the specific URL properties to a new object\n // This is also needed for IE because the anchor loses its\n // properties when it's removed from the dom\n\n var details = {};\n\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n } // IE adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n\n\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (!details.protocol) {\n details.protocol = window$1.location.protocol;\n }\n /* istanbul ignore if */\n\n\n if (!details.host) {\n details.host = window$1.location.host;\n }\n\n return details;\n};\n/**\n * Get absolute version of relative URL. Used to tell Flash the correct URL.\n *\n * @function\n * @param {string} url\n * URL to make absolute\n *\n * @return {string}\n * Absolute URL\n *\n * @see http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n */\n\nvar getAbsoluteURL = function getAbsoluteURL(url) {\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n // add the url to an anchor and let the browser parse the URL\n var a = document.createElement('a');\n a.href = url;\n url = a.href;\n }\n\n return url;\n};\n/**\n * Returns the extension of the passed file name. It will return an empty string\n * if passed an invalid path.\n *\n * @function\n * @param {string} path\n * The fileName path like '/path/to/file.mp4'\n *\n * @return {string}\n * The extension in lower case or an empty string if no\n * extension could be found.\n */\n\nvar getFileExtension = function getFileExtension(path) {\n if (typeof path === 'string') {\n var splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/;\n var pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @function\n * @param {string} url\n * The url to check.\n *\n * @param {Object} [winLoc]\n * the domain to check the url against, defaults to window.location\n *\n * @param {string} [winLoc.protocol]\n * The window location protocol defaults to window.location.protocol\n *\n * @param {string} [winLoc.host]\n * The window location host defaults to window.location.host\n *\n * @return {boolean}\n * Whether it is a cross domain request or not.\n */\n\nvar isCrossOrigin = function isCrossOrigin(url, winLoc) {\n if (winLoc === void 0) {\n winLoc = window$1.location;\n }\n\n var urlInfo = parseUrl(url); // IE8 protocol relative urls will return ':' for protocol\n\n var srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol; // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n\n var crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host;\n return crossOrigin;\n};\n\nvar Url = /*#__PURE__*/Object.freeze({\n __proto__: null,\n parseUrl: parseUrl,\n getAbsoluteURL: getAbsoluteURL,\n getFileExtension: getFileExtension,\n isCrossOrigin: isCrossOrigin\n});\n\n/**\n * Takes a webvtt file contents and parses it into cues\n *\n * @param {string} srcContent\n * webVTT file contents\n *\n * @param {TextTrack} track\n * TextTrack to add cues to. Cues come from the srcContent.\n *\n * @private\n */\n\nvar parseCues = function parseCues(srcContent, track) {\n var parser = new window$1.WebVTT.Parser(window$1, window$1.vttjs, window$1.WebVTT.StringDecoder());\n var errors = [];\n\n parser.oncue = function (cue) {\n track.addCue(cue);\n };\n\n parser.onparsingerror = function (error) {\n errors.push(error);\n };\n\n parser.onflush = function () {\n track.trigger({\n type: 'loadeddata',\n target: track\n });\n };\n\n parser.parse(srcContent);\n\n if (errors.length > 0) {\n if (window$1.console && window$1.console.groupCollapsed) {\n window$1.console.groupCollapsed(\"Text Track parsing errors for \" + track.src);\n }\n\n errors.forEach(function (error) {\n return log$1.error(error);\n });\n\n if (window$1.console && window$1.console.groupEnd) {\n window$1.console.groupEnd();\n }\n }\n\n parser.flush();\n};\n/**\n * Load a `TextTrack` from a specified url.\n *\n * @param {string} src\n * Url to load track from.\n *\n * @param {TextTrack} track\n * Track to add cues to. Comes from the content at the end of `url`.\n *\n * @private\n */\n\n\nvar loadTrack = function loadTrack(src, track) {\n var opts = {\n uri: src\n };\n var crossOrigin = isCrossOrigin(src);\n\n if (crossOrigin) {\n opts.cors = crossOrigin;\n }\n\n var withCredentials = track.tech_.crossOrigin() === 'use-credentials';\n\n if (withCredentials) {\n opts.withCredentials = withCredentials;\n }\n\n XHR(opts, bind(this, function (err, response, responseBody) {\n if (err) {\n return log$1.error(err, response);\n }\n\n track.loaded_ = true; // Make sure that vttjs has loaded, otherwise, wait till it finished loading\n // NOTE: this is only used for the alt/video.novtt.js build\n\n if (typeof window$1.WebVTT !== 'function') {\n if (track.tech_) {\n // to prevent use before define eslint error, we define loadHandler\n // as a let here\n track.tech_.any(['vttjsloaded', 'vttjserror'], function (event) {\n if (event.type === 'vttjserror') {\n log$1.error(\"vttjs failed to load, stopping trying to process \" + track.src);\n return;\n }\n\n return parseCues(responseBody, track);\n });\n }\n } else {\n parseCues(responseBody, track);\n }\n }));\n};\n/**\n * A representation of a single `TextTrack`.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack}\n * @extends Track\n */\n\n\nvar TextTrack = /*#__PURE__*/function (_Track) {\n _inheritsLoose(TextTrack, _Track);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} options={}\n * Object of option names and values\n *\n * @param {Tech} options.tech\n * A reference to the tech that owns this TextTrack.\n *\n * @param {TextTrack~Kind} [options.kind='subtitles']\n * A valid text track kind.\n *\n * @param {TextTrack~Mode} [options.mode='disabled']\n * A valid text track mode.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this TextTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {string} [options.srclang='']\n * A valid two character language code. An alternative, but deprioritized\n * version of `options.language`\n *\n * @param {string} [options.src]\n * A url to TextTrack cues.\n *\n * @param {boolean} [options.default]\n * If this track should default to on or off.\n */\n function TextTrack(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n var settings = mergeOptions$3(options, {\n kind: TextTrackKind[options.kind] || 'subtitles',\n language: options.language || options.srclang || ''\n });\n var mode = TextTrackMode[settings.mode] || 'disabled';\n var default_ = settings[\"default\"];\n\n if (settings.kind === 'metadata' || settings.kind === 'chapters') {\n mode = 'hidden';\n }\n\n _this = _Track.call(this, settings) || this;\n _this.tech_ = settings.tech;\n _this.cues_ = [];\n _this.activeCues_ = [];\n _this.preload_ = _this.tech_.preloadTextTracks !== false;\n var cues = new TextTrackCueList(_this.cues_);\n var activeCues = new TextTrackCueList(_this.activeCues_);\n var changed = false;\n _this.timeupdateHandler = bind(_assertThisInitialized(_this), function (event) {\n if (event === void 0) {\n event = {};\n }\n\n if (this.tech_.isDisposed()) {\n return;\n }\n\n if (!this.tech_.isReady_) {\n if (event.type !== 'timeupdate') {\n this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler);\n }\n\n return;\n } // Accessing this.activeCues for the side-effects of updating itself\n // due to its nature as a getter function. Do not remove or cues will\n // stop updating!\n // Use the setter to prevent deletion from uglify (pure_getters rule)\n\n\n this.activeCues = this.activeCues;\n\n if (changed) {\n this.trigger('cuechange');\n changed = false;\n }\n\n if (event.type !== 'timeupdate') {\n this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler);\n }\n });\n\n var disposeHandler = function disposeHandler() {\n _this.stopTracking();\n };\n\n _this.tech_.one('dispose', disposeHandler);\n\n if (mode !== 'disabled') {\n _this.startTracking();\n }\n\n Object.defineProperties(_assertThisInitialized(_this), {\n /**\n * @memberof TextTrack\n * @member {boolean} default\n * If this track was set to be on or off by default. Cannot be changed after\n * creation.\n * @instance\n *\n * @readonly\n */\n \"default\": {\n get: function get() {\n return default_;\n },\n set: function set() {}\n },\n\n /**\n * @memberof TextTrack\n * @member {string} mode\n * Set the mode of this TextTrack to a valid {@link TextTrack~Mode}. Will\n * not be set if setting to an invalid mode.\n * @instance\n *\n * @fires TextTrack#modechange\n */\n mode: {\n get: function get() {\n return mode;\n },\n set: function set(newMode) {\n if (!TextTrackMode[newMode]) {\n return;\n }\n\n if (mode === newMode) {\n return;\n }\n\n mode = newMode;\n\n if (!this.preload_ && mode !== 'disabled' && this.cues.length === 0) {\n // On-demand load.\n loadTrack(this.src, this);\n }\n\n this.stopTracking();\n\n if (mode !== 'disabled') {\n this.startTracking();\n }\n /**\n * An event that fires when mode changes on this track. This allows\n * the TextTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec!\n *\n * @event TextTrack#modechange\n * @type {EventTarget~Event}\n */\n\n\n this.trigger('modechange');\n }\n },\n\n /**\n * @memberof TextTrack\n * @member {TextTrackCueList} cues\n * The text track cue list for this TextTrack.\n * @instance\n */\n cues: {\n get: function get() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: function set() {}\n },\n\n /**\n * @memberof TextTrack\n * @member {TextTrackCueList} activeCues\n * The list text track cues that are currently active for this TextTrack.\n * @instance\n */\n activeCues: {\n get: function get() {\n if (!this.loaded_) {\n return null;\n } // nothing to do\n\n\n if (this.cues.length === 0) {\n return activeCues;\n }\n\n var ct = this.tech_.currentTime();\n var active = [];\n\n for (var i = 0, l = this.cues.length; i < l; i++) {\n var cue = this.cues[i];\n\n if (cue.startTime <= ct && cue.endTime >= ct) {\n active.push(cue);\n } else if (cue.startTime === cue.endTime && cue.startTime <= ct && cue.startTime + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (var _i = 0; _i < active.length; _i++) {\n if (this.activeCues_.indexOf(active[_i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n return activeCues;\n },\n // /!\\ Keep this setter empty (see the timeupdate handler above)\n set: function set() {}\n }\n });\n\n if (settings.src) {\n _this.src = settings.src;\n\n if (!_this.preload_) {\n // Tracks will load on-demand.\n // Act like we're loaded for other purposes.\n _this.loaded_ = true;\n }\n\n if (_this.preload_ || settings.kind !== 'subtitles' && settings.kind !== 'captions') {\n loadTrack(_this.src, _assertThisInitialized(_this));\n }\n } else {\n _this.loaded_ = true;\n }\n\n return _this;\n }\n\n var _proto = TextTrack.prototype;\n\n _proto.startTracking = function startTracking() {\n // More precise cues based on requestVideoFrameCallback with a requestAnimationFram fallback\n this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); // Also listen to timeupdate in case rVFC/rAF stops (window in background, audio in video el)\n\n this.tech_.on('timeupdate', this.timeupdateHandler);\n };\n\n _proto.stopTracking = function stopTracking() {\n if (this.rvf_) {\n this.tech_.cancelVideoFrameCallback(this.rvf_);\n this.rvf_ = undefined;\n }\n\n this.tech_.off('timeupdate', this.timeupdateHandler);\n }\n /**\n * Add a cue to the internal list of cues.\n *\n * @param {TextTrack~Cue} cue\n * The cue to add to our internal list\n */\n ;\n\n _proto.addCue = function addCue(originalCue) {\n var cue = originalCue;\n\n if (window$1.vttjs && !(originalCue instanceof window$1.vttjs.VTTCue)) {\n cue = new window$1.vttjs.VTTCue(originalCue.startTime, originalCue.endTime, originalCue.text);\n\n for (var prop in originalCue) {\n if (!(prop in cue)) {\n cue[prop] = originalCue[prop];\n }\n } // make sure that `id` is copied over\n\n\n cue.id = originalCue.id;\n cue.originalCue_ = originalCue;\n }\n\n var tracks = this.tech_.textTracks();\n\n for (var i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n\n this.cues_.push(cue);\n this.cues.setCues_(this.cues_);\n }\n /**\n * Remove a cue from our internal list\n *\n * @param {TextTrack~Cue} removeCue\n * The cue to remove from our internal list\n */\n ;\n\n _proto.removeCue = function removeCue(_removeCue) {\n var i = this.cues_.length;\n\n while (i--) {\n var cue = this.cues_[i];\n\n if (cue === _removeCue || cue.originalCue_ && cue.originalCue_ === _removeCue) {\n this.cues_.splice(i, 1);\n this.cues.setCues_(this.cues_);\n break;\n }\n }\n };\n\n return TextTrack;\n}(Track);\n/**\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\n\n\nTextTrack.prototype.allowedEvents_ = {\n cuechange: 'cuechange'\n};\n\n/**\n * A representation of a single `AudioTrack`. If it is part of an {@link AudioTrackList}\n * only one `AudioTrack` in the list will be enabled at a time.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack}\n * @extends Track\n */\n\nvar AudioTrack = /*#__PURE__*/function (_Track) {\n _inheritsLoose(AudioTrack, _Track);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {AudioTrack~Kind} [options.kind='']\n * A valid audio track kind\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {boolean} [options.enabled]\n * If this track is the one that is currently playing. If this track is part of\n * an {@link AudioTrackList}, only one {@link AudioTrack} will be enabled.\n */\n function AudioTrack(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n var settings = mergeOptions$3(options, {\n kind: AudioTrackKind[options.kind] || ''\n });\n _this = _Track.call(this, settings) || this;\n var enabled = false;\n /**\n * @memberof AudioTrack\n * @member {boolean} enabled\n * If this `AudioTrack` is enabled or not. When setting this will\n * fire {@link AudioTrack#enabledchange} if the state of enabled is changed.\n * @instance\n *\n * @fires VideoTrack#selectedchange\n */\n\n Object.defineProperty(_assertThisInitialized(_this), 'enabled', {\n get: function get() {\n return enabled;\n },\n set: function set(newEnabled) {\n // an invalid or unchanged value\n if (typeof newEnabled !== 'boolean' || newEnabled === enabled) {\n return;\n }\n\n enabled = newEnabled;\n /**\n * An event that fires when enabled changes on this track. This allows\n * the AudioTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec! Native tracks will do\n * this internally without an event.\n *\n * @event AudioTrack#enabledchange\n * @type {EventTarget~Event}\n */\n\n this.trigger('enabledchange');\n }\n }); // if the user sets this track to selected then\n // set selected to that true value otherwise\n // we keep it false\n\n if (settings.enabled) {\n _this.enabled = settings.enabled;\n }\n\n _this.loaded_ = true;\n return _this;\n }\n\n return AudioTrack;\n}(Track);\n\n/**\n * A representation of a single `VideoTrack`.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack}\n * @extends Track\n */\n\nvar VideoTrack = /*#__PURE__*/function (_Track) {\n _inheritsLoose(VideoTrack, _Track);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {string} [options.kind='']\n * A valid {@link VideoTrack~Kind}\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {boolean} [options.selected]\n * If this track is the one that is currently playing.\n */\n function VideoTrack(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n var settings = mergeOptions$3(options, {\n kind: VideoTrackKind[options.kind] || ''\n });\n _this = _Track.call(this, settings) || this;\n var selected = false;\n /**\n * @memberof VideoTrack\n * @member {boolean} selected\n * If this `VideoTrack` is selected or not. When setting this will\n * fire {@link VideoTrack#selectedchange} if the state of selected changed.\n * @instance\n *\n * @fires VideoTrack#selectedchange\n */\n\n Object.defineProperty(_assertThisInitialized(_this), 'selected', {\n get: function get() {\n return selected;\n },\n set: function set(newSelected) {\n // an invalid or unchanged value\n if (typeof newSelected !== 'boolean' || newSelected === selected) {\n return;\n }\n\n selected = newSelected;\n /**\n * An event that fires when selected changes on this track. This allows\n * the VideoTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec! Native tracks will do\n * this internally without an event.\n *\n * @event VideoTrack#selectedchange\n * @type {EventTarget~Event}\n */\n\n this.trigger('selectedchange');\n }\n }); // if the user sets this track to selected then\n // set selected to that true value otherwise\n // we keep it false\n\n if (settings.selected) {\n _this.selected = settings.selected;\n }\n\n return _this;\n }\n\n return VideoTrack;\n}(Track);\n\n/**\n * @memberof HTMLTrackElement\n * @typedef {HTMLTrackElement~ReadyState}\n * @enum {number}\n */\n\nvar NONE = 0;\nvar LOADING = 1;\nvar LOADED = 2;\nvar ERROR = 3;\n/**\n * A single track represented in the DOM.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement}\n * @extends EventTarget\n */\n\nvar HTMLTrackElement = /*#__PURE__*/function (_EventTarget) {\n _inheritsLoose(HTMLTrackElement, _EventTarget);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} options={}\n * Object of option names and values\n *\n * @param {Tech} options.tech\n * A reference to the tech that owns this HTMLTrackElement.\n *\n * @param {TextTrack~Kind} [options.kind='subtitles']\n * A valid text track kind.\n *\n * @param {TextTrack~Mode} [options.mode='disabled']\n * A valid text track mode.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this TextTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {string} [options.srclang='']\n * A valid two character language code. An alternative, but deprioritized\n * version of `options.language`\n *\n * @param {string} [options.src]\n * A url to TextTrack cues.\n *\n * @param {boolean} [options.default]\n * If this track should default to on or off.\n */\n function HTMLTrackElement(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _EventTarget.call(this) || this;\n var readyState;\n var track = new TextTrack(options);\n _this.kind = track.kind;\n _this.src = track.src;\n _this.srclang = track.language;\n _this.label = track.label;\n _this[\"default\"] = track[\"default\"];\n Object.defineProperties(_assertThisInitialized(_this), {\n /**\n * @memberof HTMLTrackElement\n * @member {HTMLTrackElement~ReadyState} readyState\n * The current ready state of the track element.\n * @instance\n */\n readyState: {\n get: function get() {\n return readyState;\n }\n },\n\n /**\n * @memberof HTMLTrackElement\n * @member {TextTrack} track\n * The underlying TextTrack object.\n * @instance\n *\n */\n track: {\n get: function get() {\n return track;\n }\n }\n });\n readyState = NONE;\n /**\n * @listens TextTrack#loadeddata\n * @fires HTMLTrackElement#load\n */\n\n track.addEventListener('loadeddata', function () {\n readyState = LOADED;\n\n _this.trigger({\n type: 'load',\n target: _assertThisInitialized(_this)\n });\n });\n return _this;\n }\n\n return HTMLTrackElement;\n}(EventTarget$2);\n\nHTMLTrackElement.prototype.allowedEvents_ = {\n load: 'load'\n};\nHTMLTrackElement.NONE = NONE;\nHTMLTrackElement.LOADING = LOADING;\nHTMLTrackElement.LOADED = LOADED;\nHTMLTrackElement.ERROR = ERROR;\n\n/*\n * This file contains all track properties that are used in\n * player.js, tech.js, html5.js and possibly other techs in the future.\n */\n\nvar NORMAL = {\n audio: {\n ListClass: AudioTrackList,\n TrackClass: AudioTrack,\n capitalName: 'Audio'\n },\n video: {\n ListClass: VideoTrackList,\n TrackClass: VideoTrack,\n capitalName: 'Video'\n },\n text: {\n ListClass: TextTrackList,\n TrackClass: TextTrack,\n capitalName: 'Text'\n }\n};\nObject.keys(NORMAL).forEach(function (type) {\n NORMAL[type].getterName = type + \"Tracks\";\n NORMAL[type].privateName = type + \"Tracks_\";\n});\nvar REMOTE = {\n remoteText: {\n ListClass: TextTrackList,\n TrackClass: TextTrack,\n capitalName: 'RemoteText',\n getterName: 'remoteTextTracks',\n privateName: 'remoteTextTracks_'\n },\n remoteTextEl: {\n ListClass: HtmlTrackElementList,\n TrackClass: HTMLTrackElement,\n capitalName: 'RemoteTextTrackEls',\n getterName: 'remoteTextTrackEls',\n privateName: 'remoteTextTrackEls_'\n }\n};\n\nvar ALL = _extends({}, NORMAL, REMOTE);\n\nREMOTE.names = Object.keys(REMOTE);\nNORMAL.names = Object.keys(NORMAL);\nALL.names = [].concat(REMOTE.names).concat(NORMAL.names);\n\n/**\n * An Object containing a structure like: `{src: 'url', type: 'mimetype'}` or string\n * that just contains the src url alone.\n * * `var SourceObject = {src: 'http://ex.com/video.mp4', type: 'video/mp4'};`\n * `var SourceString = 'http://example.com/some-video.mp4';`\n *\n * @typedef {Object|string} Tech~SourceObject\n *\n * @property {string} src\n * The url to the source\n *\n * @property {string} type\n * The mime type of the source\n */\n\n/**\n * A function used by {@link Tech} to create a new {@link TextTrack}.\n *\n * @private\n *\n * @param {Tech} self\n * An instance of the Tech class.\n *\n * @param {string} kind\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata)\n *\n * @param {string} [label]\n * Label to identify the text track\n *\n * @param {string} [language]\n * Two letter language abbreviation\n *\n * @param {Object} [options={}]\n * An object with additional text track options\n *\n * @return {TextTrack}\n * The text track that was created.\n */\n\nfunction createTrackHelper(self, kind, label, language, options) {\n if (options === void 0) {\n options = {};\n }\n\n var tracks = self.textTracks();\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n\n if (language) {\n options.language = language;\n }\n\n options.tech = self;\n var track = new ALL.text.TrackClass(options);\n tracks.addTrack(track);\n return track;\n}\n/**\n * This is the base class for media playback technology controllers, such as\n * {@link HTML5}\n *\n * @extends Component\n */\n\n\nvar Tech = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Tech, _Component);\n\n /**\n * Create an instance of this Tech.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} ready\n * Callback function to call when the `HTML5` Tech is ready.\n */\n function Tech(options, ready) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n if (ready === void 0) {\n ready = function ready() {};\n }\n\n // we don't want the tech to report user activity automatically.\n // This is done manually in addControlsListeners\n options.reportTouchActivity = false;\n _this = _Component.call(this, null, options, ready) || this;\n\n _this.onDurationChange_ = function (e) {\n return _this.onDurationChange(e);\n };\n\n _this.trackProgress_ = function (e) {\n return _this.trackProgress(e);\n };\n\n _this.trackCurrentTime_ = function (e) {\n return _this.trackCurrentTime(e);\n };\n\n _this.stopTrackingCurrentTime_ = function (e) {\n return _this.stopTrackingCurrentTime(e);\n };\n\n _this.disposeSourceHandler_ = function (e) {\n return _this.disposeSourceHandler(e);\n };\n\n _this.queuedHanders_ = new Set(); // keep track of whether the current source has played at all to\n // implement a very limited played()\n\n _this.hasStarted_ = false;\n\n _this.on('playing', function () {\n this.hasStarted_ = true;\n });\n\n _this.on('loadstart', function () {\n this.hasStarted_ = false;\n });\n\n ALL.names.forEach(function (name) {\n var props = ALL[name];\n\n if (options && options[props.getterName]) {\n _this[props.privateName] = options[props.getterName];\n }\n }); // Manually track progress in cases where the browser/tech doesn't report it.\n\n if (!_this.featuresProgressEvents) {\n _this.manualProgressOn();\n } // Manually track timeupdates in cases where the browser/tech doesn't report it.\n\n\n if (!_this.featuresTimeupdateEvents) {\n _this.manualTimeUpdatesOn();\n }\n\n ['Text', 'Audio', 'Video'].forEach(function (track) {\n if (options[\"native\" + track + \"Tracks\"] === false) {\n _this[\"featuresNative\" + track + \"Tracks\"] = false;\n }\n });\n\n if (options.nativeCaptions === false || options.nativeTextTracks === false) {\n _this.featuresNativeTextTracks = false;\n } else if (options.nativeCaptions === true || options.nativeTextTracks === true) {\n _this.featuresNativeTextTracks = true;\n }\n\n if (!_this.featuresNativeTextTracks) {\n _this.emulateTextTracks();\n }\n\n _this.preloadTextTracks = options.preloadTextTracks !== false;\n _this.autoRemoteTextTracks_ = new ALL.text.ListClass();\n\n _this.initTrackListeners(); // Turn on component tap events only if not using native controls\n\n\n if (!options.nativeControlsForTouch) {\n _this.emitTapEvents();\n }\n\n if (_this.constructor) {\n _this.name_ = _this.constructor.name || 'Unknown Tech';\n }\n\n return _this;\n }\n /**\n * A special function to trigger source set in a way that will allow player\n * to re-trigger if the player or tech are not ready yet.\n *\n * @fires Tech#sourceset\n * @param {string} src The source string at the time of the source changing.\n */\n\n\n var _proto = Tech.prototype;\n\n _proto.triggerSourceset = function triggerSourceset(src) {\n var _this2 = this;\n\n if (!this.isReady_) {\n // on initial ready we have to trigger source set\n // 1ms after ready so that player can watch for it.\n this.one('ready', function () {\n return _this2.setTimeout(function () {\n return _this2.triggerSourceset(src);\n }, 1);\n });\n }\n /**\n * Fired when the source is set on the tech causing the media element\n * to reload.\n *\n * @see {@link Player#event:sourceset}\n * @event Tech#sourceset\n * @type {EventTarget~Event}\n */\n\n\n this.trigger({\n src: src,\n type: 'sourceset'\n });\n }\n /* Fallbacks for unsupported event types\n ================================================================================ */\n\n /**\n * Polyfill the `progress` event for browsers that don't support it natively.\n *\n * @see {@link Tech#trackProgress}\n */\n ;\n\n _proto.manualProgressOn = function manualProgressOn() {\n this.on('durationchange', this.onDurationChange_);\n this.manualProgress = true; // Trigger progress watching when a source begins loading\n\n this.one('ready', this.trackProgress_);\n }\n /**\n * Turn off the polyfill for `progress` events that was created in\n * {@link Tech#manualProgressOn}\n */\n ;\n\n _proto.manualProgressOff = function manualProgressOff() {\n this.manualProgress = false;\n this.stopTrackingProgress();\n this.off('durationchange', this.onDurationChange_);\n }\n /**\n * This is used to trigger a `progress` event when the buffered percent changes. It\n * sets an interval function that will be called every 500 milliseconds to check if the\n * buffer end percent has changed.\n *\n * > This function is called by {@link Tech#manualProgressOn}\n *\n * @param {EventTarget~Event} event\n * The `ready` event that caused this to run.\n *\n * @listens Tech#ready\n * @fires Tech#progress\n */\n ;\n\n _proto.trackProgress = function trackProgress(event) {\n this.stopTrackingProgress();\n this.progressInterval = this.setInterval(bind(this, function () {\n // Don't trigger unless buffered amount is greater than last time\n var numBufferedPercent = this.bufferedPercent();\n\n if (this.bufferedPercent_ !== numBufferedPercent) {\n /**\n * See {@link Player#progress}\n *\n * @event Tech#progress\n * @type {EventTarget~Event}\n */\n this.trigger('progress');\n }\n\n this.bufferedPercent_ = numBufferedPercent;\n\n if (numBufferedPercent === 1) {\n this.stopTrackingProgress();\n }\n }), 500);\n }\n /**\n * Update our internal duration on a `durationchange` event by calling\n * {@link Tech#duration}.\n *\n * @param {EventTarget~Event} event\n * The `durationchange` event that caused this to run.\n *\n * @listens Tech#durationchange\n */\n ;\n\n _proto.onDurationChange = function onDurationChange(event) {\n this.duration_ = this.duration();\n }\n /**\n * Get and create a `TimeRange` object for buffering.\n *\n * @return {TimeRange}\n * The time range object that was created.\n */\n ;\n\n _proto.buffered = function buffered() {\n return createTimeRanges(0, 0);\n }\n /**\n * Get the percentage of the current video that is currently buffered.\n *\n * @return {number}\n * A number from 0 to 1 that represents the decimal percentage of the\n * video that is buffered.\n *\n */\n ;\n\n _proto.bufferedPercent = function bufferedPercent$1() {\n return bufferedPercent(this.buffered(), this.duration_);\n }\n /**\n * Turn off the polyfill for `progress` events that was created in\n * {@link Tech#manualProgressOn}\n * Stop manually tracking progress events by clearing the interval that was set in\n * {@link Tech#trackProgress}.\n */\n ;\n\n _proto.stopTrackingProgress = function stopTrackingProgress() {\n this.clearInterval(this.progressInterval);\n }\n /**\n * Polyfill the `timeupdate` event for browsers that don't support it.\n *\n * @see {@link Tech#trackCurrentTime}\n */\n ;\n\n _proto.manualTimeUpdatesOn = function manualTimeUpdatesOn() {\n this.manualTimeUpdates = true;\n this.on('play', this.trackCurrentTime_);\n this.on('pause', this.stopTrackingCurrentTime_);\n }\n /**\n * Turn off the polyfill for `timeupdate` events that was created in\n * {@link Tech#manualTimeUpdatesOn}\n */\n ;\n\n _proto.manualTimeUpdatesOff = function manualTimeUpdatesOff() {\n this.manualTimeUpdates = false;\n this.stopTrackingCurrentTime();\n this.off('play', this.trackCurrentTime_);\n this.off('pause', this.stopTrackingCurrentTime_);\n }\n /**\n * Sets up an interval function to track current time and trigger `timeupdate` every\n * 250 milliseconds.\n *\n * @listens Tech#play\n * @triggers Tech#timeupdate\n */\n ;\n\n _proto.trackCurrentTime = function trackCurrentTime() {\n if (this.currentTimeInterval) {\n this.stopTrackingCurrentTime();\n }\n\n this.currentTimeInterval = this.setInterval(function () {\n /**\n * Triggered at an interval of 250ms to indicated that time is passing in the video.\n *\n * @event Tech#timeupdate\n * @type {EventTarget~Event}\n */\n this.trigger({\n type: 'timeupdate',\n target: this,\n manuallyTriggered: true\n }); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n }, 250);\n }\n /**\n * Stop the interval function created in {@link Tech#trackCurrentTime} so that the\n * `timeupdate` event is no longer triggered.\n *\n * @listens {Tech#pause}\n */\n ;\n\n _proto.stopTrackingCurrentTime = function stopTrackingCurrentTime() {\n this.clearInterval(this.currentTimeInterval); // #1002 - if the video ends right before the next timeupdate would happen,\n // the progress bar won't make it all the way to the end\n\n this.trigger({\n type: 'timeupdate',\n target: this,\n manuallyTriggered: true\n });\n }\n /**\n * Turn off all event polyfills, clear the `Tech`s {@link AudioTrackList},\n * {@link VideoTrackList}, and {@link TextTrackList}, and dispose of this Tech.\n *\n * @fires Component#dispose\n */\n ;\n\n _proto.dispose = function dispose() {\n // clear out all tracks because we can't reuse them between techs\n this.clearTracks(NORMAL.names); // Turn off any manual progress or timeupdate tracking\n\n if (this.manualProgress) {\n this.manualProgressOff();\n }\n\n if (this.manualTimeUpdates) {\n this.manualTimeUpdatesOff();\n }\n\n _Component.prototype.dispose.call(this);\n }\n /**\n * Clear out a single `TrackList` or an array of `TrackLists` given their names.\n *\n * > Note: Techs without source handlers should call this between sources for `video`\n * & `audio` tracks. You don't want to use them between tracks!\n *\n * @param {string[]|string} types\n * TrackList names to clear, valid names are `video`, `audio`, and\n * `text`.\n */\n ;\n\n _proto.clearTracks = function clearTracks(types) {\n var _this3 = this;\n\n types = [].concat(types); // clear out all tracks because we can't reuse them between techs\n\n types.forEach(function (type) {\n var list = _this3[type + \"Tracks\"]() || [];\n var i = list.length;\n\n while (i--) {\n var track = list[i];\n\n if (type === 'text') {\n _this3.removeRemoteTextTrack(track);\n }\n\n list.removeTrack(track);\n }\n });\n }\n /**\n * Remove any TextTracks added via addRemoteTextTrack that are\n * flagged for automatic garbage collection\n */\n ;\n\n _proto.cleanupAutoTextTracks = function cleanupAutoTextTracks() {\n var list = this.autoRemoteTextTracks_ || [];\n var i = list.length;\n\n while (i--) {\n var track = list[i];\n this.removeRemoteTextTrack(track);\n }\n }\n /**\n * Reset the tech, which will removes all sources and reset the internal readyState.\n *\n * @abstract\n */\n ;\n\n _proto.reset = function reset() {}\n /**\n * Get the value of `crossOrigin` from the tech.\n *\n * @abstract\n *\n * @see {Html5#crossOrigin}\n */\n ;\n\n _proto.crossOrigin = function crossOrigin() {}\n /**\n * Set the value of `crossOrigin` on the tech.\n *\n * @abstract\n *\n * @param {string} crossOrigin the crossOrigin value\n * @see {Html5#setCrossOrigin}\n */\n ;\n\n _proto.setCrossOrigin = function setCrossOrigin() {}\n /**\n * Get or set an error on the Tech.\n *\n * @param {MediaError} [err]\n * Error to set on the Tech\n *\n * @return {MediaError|null}\n * The current error object on the tech, or null if there isn't one.\n */\n ;\n\n _proto.error = function error(err) {\n if (err !== undefined) {\n this.error_ = new MediaError(err);\n this.trigger('error');\n }\n\n return this.error_;\n }\n /**\n * Returns the `TimeRange`s that have been played through for the current source.\n *\n * > NOTE: This implementation is incomplete. It does not track the played `TimeRange`.\n * It only checks whether the source has played at all or not.\n *\n * @return {TimeRange}\n * - A single time range if this video has played\n * - An empty set of ranges if not.\n */\n ;\n\n _proto.played = function played() {\n if (this.hasStarted_) {\n return createTimeRanges(0, 0);\n }\n\n return createTimeRanges();\n }\n /**\n * Start playback\n *\n * @abstract\n *\n * @see {Html5#play}\n */\n ;\n\n _proto.play = function play() {}\n /**\n * Set whether we are scrubbing or not\n *\n * @abstract\n *\n * @see {Html5#setScrubbing}\n */\n ;\n\n _proto.setScrubbing = function setScrubbing() {}\n /**\n * Get whether we are scrubbing or not\n *\n * @abstract\n *\n * @see {Html5#scrubbing}\n */\n ;\n\n _proto.scrubbing = function scrubbing() {}\n /**\n * Causes a manual time update to occur if {@link Tech#manualTimeUpdatesOn} was\n * previously called.\n *\n * @fires Tech#timeupdate\n */\n ;\n\n _proto.setCurrentTime = function setCurrentTime() {\n // improve the accuracy of manual timeupdates\n if (this.manualTimeUpdates) {\n /**\n * A manual `timeupdate` event.\n *\n * @event Tech#timeupdate\n * @type {EventTarget~Event}\n */\n this.trigger({\n type: 'timeupdate',\n target: this,\n manuallyTriggered: true\n });\n }\n }\n /**\n * Turn on listeners for {@link VideoTrackList}, {@link {AudioTrackList}, and\n * {@link TextTrackList} events.\n *\n * This adds {@link EventTarget~EventListeners} for `addtrack`, and `removetrack`.\n *\n * @fires Tech#audiotrackchange\n * @fires Tech#videotrackchange\n * @fires Tech#texttrackchange\n */\n ;\n\n _proto.initTrackListeners = function initTrackListeners() {\n var _this4 = this;\n\n /**\n * Triggered when tracks are added or removed on the Tech {@link AudioTrackList}\n *\n * @event Tech#audiotrackchange\n * @type {EventTarget~Event}\n */\n\n /**\n * Triggered when tracks are added or removed on the Tech {@link VideoTrackList}\n *\n * @event Tech#videotrackchange\n * @type {EventTarget~Event}\n */\n\n /**\n * Triggered when tracks are added or removed on the Tech {@link TextTrackList}\n *\n * @event Tech#texttrackchange\n * @type {EventTarget~Event}\n */\n NORMAL.names.forEach(function (name) {\n var props = NORMAL[name];\n\n var trackListChanges = function trackListChanges() {\n _this4.trigger(name + \"trackchange\");\n };\n\n var tracks = _this4[props.getterName]();\n\n tracks.addEventListener('removetrack', trackListChanges);\n tracks.addEventListener('addtrack', trackListChanges);\n\n _this4.on('dispose', function () {\n tracks.removeEventListener('removetrack', trackListChanges);\n tracks.removeEventListener('addtrack', trackListChanges);\n });\n });\n }\n /**\n * Emulate TextTracks using vtt.js if necessary\n *\n * @fires Tech#vttjsloaded\n * @fires Tech#vttjserror\n */\n ;\n\n _proto.addWebVttScript_ = function addWebVttScript_() {\n var _this5 = this;\n\n if (window$1.WebVTT) {\n return;\n } // Initially, Tech.el_ is a child of a dummy-div wait until the Component system\n // signals that the Tech is ready at which point Tech.el_ is part of the DOM\n // before inserting the WebVTT script\n\n\n if (document.body.contains(this.el())) {\n // load via require if available and vtt.js script location was not passed in\n // as an option. novtt builds will turn the above require call into an empty object\n // which will cause this if check to always fail.\n if (!this.options_['vtt.js'] && isPlain(vtt) && Object.keys(vtt).length > 0) {\n this.trigger('vttjsloaded');\n return;\n } // load vtt.js via the script location option or the cdn of no location was\n // passed in\n\n\n var script = document.createElement('script');\n script.src = this.options_['vtt.js'] || 'https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js';\n\n script.onload = function () {\n /**\n * Fired when vtt.js is loaded.\n *\n * @event Tech#vttjsloaded\n * @type {EventTarget~Event}\n */\n _this5.trigger('vttjsloaded');\n };\n\n script.onerror = function () {\n /**\n * Fired when vtt.js was not loaded due to an error\n *\n * @event Tech#vttjsloaded\n * @type {EventTarget~Event}\n */\n _this5.trigger('vttjserror');\n };\n\n this.on('dispose', function () {\n script.onload = null;\n script.onerror = null;\n }); // but have not loaded yet and we set it to true before the inject so that\n // we don't overwrite the injected window.WebVTT if it loads right away\n\n window$1.WebVTT = true;\n this.el().parentNode.appendChild(script);\n } else {\n this.ready(this.addWebVttScript_);\n }\n }\n /**\n * Emulate texttracks\n *\n */\n ;\n\n _proto.emulateTextTracks = function emulateTextTracks() {\n var _this6 = this;\n\n var tracks = this.textTracks();\n var remoteTracks = this.remoteTextTracks();\n\n var handleAddTrack = function handleAddTrack(e) {\n return tracks.addTrack(e.track);\n };\n\n var handleRemoveTrack = function handleRemoveTrack(e) {\n return tracks.removeTrack(e.track);\n };\n\n remoteTracks.on('addtrack', handleAddTrack);\n remoteTracks.on('removetrack', handleRemoveTrack);\n this.addWebVttScript_();\n\n var updateDisplay = function updateDisplay() {\n return _this6.trigger('texttrackchange');\n };\n\n var textTracksChanges = function textTracksChanges() {\n updateDisplay();\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n };\n\n textTracksChanges();\n tracks.addEventListener('change', textTracksChanges);\n tracks.addEventListener('addtrack', textTracksChanges);\n tracks.addEventListener('removetrack', textTracksChanges);\n this.on('dispose', function () {\n remoteTracks.off('addtrack', handleAddTrack);\n remoteTracks.off('removetrack', handleRemoveTrack);\n tracks.removeEventListener('change', textTracksChanges);\n tracks.removeEventListener('addtrack', textTracksChanges);\n tracks.removeEventListener('removetrack', textTracksChanges);\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n }\n });\n }\n /**\n * Create and returns a remote {@link TextTrack} object.\n *\n * @param {string} kind\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata)\n *\n * @param {string} [label]\n * Label to identify the text track\n *\n * @param {string} [language]\n * Two letter language abbreviation\n *\n * @return {TextTrack}\n * The TextTrack that gets created.\n */\n ;\n\n _proto.addTextTrack = function addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n }\n /**\n * Create an emulated TextTrack for use by addRemoteTextTrack\n *\n * This is intended to be overridden by classes that inherit from\n * Tech in order to create native or custom TextTracks.\n *\n * @param {Object} options\n * The object should contain the options to initialize the TextTrack with.\n *\n * @param {string} [options.kind]\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata).\n *\n * @param {string} [options.label].\n * Label to identify the text track\n *\n * @param {string} [options.language]\n * Two letter language abbreviation.\n *\n * @return {HTMLTrackElement}\n * The track element that gets created.\n */\n ;\n\n _proto.createRemoteTextTrack = function createRemoteTextTrack(options) {\n var track = mergeOptions$3(options, {\n tech: this\n });\n return new REMOTE.remoteTextEl.TrackClass(track);\n }\n /**\n * Creates a remote text track object and returns an html track element.\n *\n * > Note: This can be an emulated {@link HTMLTrackElement} or a native one.\n *\n * @param {Object} options\n * See {@link Tech#createRemoteTextTrack} for more detailed properties.\n *\n * @param {boolean} [manualCleanup=true]\n * - When false: the TextTrack will be automatically removed from the video\n * element whenever the source changes\n * - When True: The TextTrack will have to be cleaned up manually\n *\n * @return {HTMLTrackElement}\n * An Html Track Element.\n *\n * @deprecated The default functionality for this function will be equivalent\n * to \"manualCleanup=false\" in the future. The manualCleanup parameter will\n * also be removed.\n */\n ;\n\n _proto.addRemoteTextTrack = function addRemoteTextTrack(options, manualCleanup) {\n var _this7 = this;\n\n if (options === void 0) {\n options = {};\n }\n\n var htmlTrackElement = this.createRemoteTextTrack(options);\n\n if (manualCleanup !== true && manualCleanup !== false) {\n // deprecation warning\n log$1.warn('Calling addRemoteTextTrack without explicitly setting the \"manualCleanup\" parameter to `true` is deprecated and default to `false` in future version of video.js');\n manualCleanup = true;\n } // store HTMLTrackElement and TextTrack to remote list\n\n\n this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);\n this.remoteTextTracks().addTrack(htmlTrackElement.track);\n\n if (manualCleanup !== true) {\n // create the TextTrackList if it doesn't exist\n this.ready(function () {\n return _this7.autoRemoteTextTracks_.addTrack(htmlTrackElement.track);\n });\n }\n\n return htmlTrackElement;\n }\n /**\n * Remove a remote text track from the remote `TextTrackList`.\n *\n * @param {TextTrack} track\n * `TextTrack` to remove from the `TextTrackList`\n */\n ;\n\n _proto.removeRemoteTextTrack = function removeRemoteTextTrack(track) {\n var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track); // remove HTMLTrackElement and TextTrack from remote list\n\n this.remoteTextTrackEls().removeTrackElement_(trackElement);\n this.remoteTextTracks().removeTrack(track);\n this.autoRemoteTextTracks_.removeTrack(track);\n }\n /**\n * Gets available media playback quality metrics as specified by the W3C's Media\n * Playback Quality API.\n *\n * @see [Spec]{@link https://wicg.github.io/media-playback-quality}\n *\n * @return {Object}\n * An object with supported media playback quality metrics\n *\n * @abstract\n */\n ;\n\n _proto.getVideoPlaybackQuality = function getVideoPlaybackQuality() {\n return {};\n }\n /**\n * Attempt to create a floating video window always on top of other windows\n * so that users may continue consuming media while they interact with other\n * content sites, or applications on their device.\n *\n * @see [Spec]{@link https://wicg.github.io/picture-in-picture}\n *\n * @return {Promise|undefined}\n * A promise with a Picture-in-Picture window if the browser supports\n * Promises (or one was passed in as an option). It returns undefined\n * otherwise.\n *\n * @abstract\n */\n ;\n\n _proto.requestPictureInPicture = function requestPictureInPicture() {\n var PromiseClass = this.options_.Promise || window$1.Promise;\n\n if (PromiseClass) {\n return PromiseClass.reject();\n }\n }\n /**\n * A method to check for the value of the 'disablePictureInPicture'