@flowplayer/player
Version:
video player for the future
1 lines • 421 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((t="undefined"!=typeof globalThis?globalThis:t||self).flowplayer=t.flowplayer||{},t.flowplayer.hls=e())}(this,(function(){"use strict";function t(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var e={exports:{}};!function(t,e){var s,r,i,n,a;s=/^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/,r=/^(?=([^\/?#]*))\1([^]*)$/,i=/(?:\/|^)\.(?=\/)/g,n=/(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g,a={buildAbsoluteURL:function(t,e,s){if(s=s||{},t=t.trim(),!(e=e.trim())){if(!s.alwaysNormalize)return t;var i=a.parseURL(t);if(!i)throw new Error("Error trying to parse base URL.");return i.path=a.normalizePath(i.path),a.buildURLFromParts(i)}var n=a.parseURL(e);if(!n)throw new Error("Error trying to parse relative URL.");if(n.scheme)return s.alwaysNormalize?(n.path=a.normalizePath(n.path),a.buildURLFromParts(n)):e;var o=a.parseURL(t);if(!o)throw new Error("Error trying to parse base URL.");if(!o.netLoc&&o.path&&"/"!==o.path[0]){var l=r.exec(o.path);o.netLoc=l[1],o.path=l[2]}o.netLoc&&!o.path&&(o.path="/");var h={scheme:o.scheme,netLoc:n.netLoc,path:null,params:n.params,query:n.query,fragment:n.fragment};if(!n.netLoc&&(h.netLoc=o.netLoc,"/"!==n.path[0]))if(n.path){var d=o.path,c=d.substring(0,d.lastIndexOf("/")+1)+n.path;h.path=a.normalizePath(c)}else h.path=o.path,n.params||(h.params=o.params,n.query||(h.query=o.query));return null===h.path&&(h.path=s.alwaysNormalize?a.normalizePath(n.path):n.path),a.buildURLFromParts(h)},parseURL:function(t){var e=s.exec(t);return e?{scheme:e[1]||"",netLoc:e[2]||"",path:e[3]||"",params:e[4]||"",query:e[5]||"",fragment:e[6]||""}:null},normalizePath:function(t){for(t=t.split("").reverse().join("").replace(i,"");t.length!==(t=t.replace(n,"")).length;);return t.split("").reverse().join("")},buildURLFromParts:function(t){return t.scheme+t.netLoc+t.path+t.params+t.query+t.fragment}},t.exports=a}(e);var s=e.exports;function r(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,r)}return s}function i(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[e]?arguments[e]:{};e%2?r(Object(s),!0).forEach((function(e){a(t,e,s[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):r(Object(s)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(s,e))}))}return t}function n(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var r=s.call(t,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}function a(t,e,s){return(e=n(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function o(){return(o=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var s=arguments[e];for(var r in s)Object.prototype.hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t}).apply(this,arguments)}const l=Number.isFinite||function(t){return"number"==typeof t&&isFinite(t)},h=Number.isSafeInteger||function(t){return"number"==typeof t&&Math.abs(t)<=d},d=Number.MAX_SAFE_INTEGER||9007199254740991;let c=function(t){return t.MEDIA_ATTACHING="hlsMediaAttaching",t.MEDIA_ATTACHED="hlsMediaAttached",t.MEDIA_DETACHING="hlsMediaDetaching",t.MEDIA_DETACHED="hlsMediaDetached",t.BUFFER_RESET="hlsBufferReset",t.BUFFER_CODECS="hlsBufferCodecs",t.BUFFER_CREATED="hlsBufferCreated",t.BUFFER_APPENDING="hlsBufferAppending",t.BUFFER_APPENDED="hlsBufferAppended",t.BUFFER_EOS="hlsBufferEos",t.BUFFER_FLUSHING="hlsBufferFlushing",t.BUFFER_FLUSHED="hlsBufferFlushed",t.MANIFEST_LOADING="hlsManifestLoading",t.MANIFEST_LOADED="hlsManifestLoaded",t.MANIFEST_PARSED="hlsManifestParsed",t.LEVEL_SWITCHING="hlsLevelSwitching",t.LEVEL_SWITCHED="hlsLevelSwitched",t.LEVEL_LOADING="hlsLevelLoading",t.LEVEL_LOADED="hlsLevelLoaded",t.LEVEL_UPDATED="hlsLevelUpdated",t.LEVEL_PTS_UPDATED="hlsLevelPtsUpdated",t.LEVELS_UPDATED="hlsLevelsUpdated",t.AUDIO_TRACKS_UPDATED="hlsAudioTracksUpdated",t.AUDIO_TRACK_SWITCHING="hlsAudioTrackSwitching",t.AUDIO_TRACK_SWITCHED="hlsAudioTrackSwitched",t.AUDIO_TRACK_LOADING="hlsAudioTrackLoading",t.AUDIO_TRACK_LOADED="hlsAudioTrackLoaded",t.SUBTITLE_TRACKS_UPDATED="hlsSubtitleTracksUpdated",t.SUBTITLE_TRACKS_CLEARED="hlsSubtitleTracksCleared",t.SUBTITLE_TRACK_SWITCH="hlsSubtitleTrackSwitch",t.SUBTITLE_TRACK_LOADING="hlsSubtitleTrackLoading",t.SUBTITLE_TRACK_LOADED="hlsSubtitleTrackLoaded",t.SUBTITLE_FRAG_PROCESSED="hlsSubtitleFragProcessed",t.CUES_PARSED="hlsCuesParsed",t.NON_NATIVE_TEXT_TRACKS_FOUND="hlsNonNativeTextTracksFound",t.INIT_PTS_FOUND="hlsInitPtsFound",t.FRAG_LOADING="hlsFragLoading",t.FRAG_LOAD_EMERGENCY_ABORTED="hlsFragLoadEmergencyAborted",t.FRAG_LOADED="hlsFragLoaded",t.FRAG_DECRYPTED="hlsFragDecrypted",t.FRAG_PARSING_INIT_SEGMENT="hlsFragParsingInitSegment",t.FRAG_PARSING_USERDATA="hlsFragParsingUserdata",t.FRAG_PARSING_METADATA="hlsFragParsingMetadata",t.FRAG_PARSED="hlsFragParsed",t.FRAG_BUFFERED="hlsFragBuffered",t.FRAG_CHANGED="hlsFragChanged",t.FPS_DROP="hlsFpsDrop",t.FPS_DROP_LEVEL_CAPPING="hlsFpsDropLevelCapping",t.MAX_AUTO_LEVEL_UPDATED="hlsMaxAutoLevelUpdated",t.ERROR="hlsError",t.DESTROYING="hlsDestroying",t.KEY_LOADING="hlsKeyLoading",t.KEY_LOADED="hlsKeyLoaded",t.LIVE_BACK_BUFFER_REACHED="hlsLiveBackBufferReached",t.BACK_BUFFER_REACHED="hlsBackBufferReached",t.STEERING_MANIFEST_LOADED="hlsSteeringManifestLoaded",t}({}),u=function(t){return t.NETWORK_ERROR="networkError",t.MEDIA_ERROR="mediaError",t.KEY_SYSTEM_ERROR="keySystemError",t.MUX_ERROR="muxError",t.OTHER_ERROR="otherError",t}({}),f=function(t){return t.KEY_SYSTEM_NO_KEYS="keySystemNoKeys",t.KEY_SYSTEM_NO_ACCESS="keySystemNoAccess",t.KEY_SYSTEM_NO_SESSION="keySystemNoSession",t.KEY_SYSTEM_NO_CONFIGURED_LICENSE="keySystemNoConfiguredLicense",t.KEY_SYSTEM_LICENSE_REQUEST_FAILED="keySystemLicenseRequestFailed",t.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED="keySystemServerCertificateRequestFailed",t.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED="keySystemServerCertificateUpdateFailed",t.KEY_SYSTEM_SESSION_UPDATE_FAILED="keySystemSessionUpdateFailed",t.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED="keySystemStatusOutputRestricted",t.KEY_SYSTEM_STATUS_INTERNAL_ERROR="keySystemStatusInternalError",t.MANIFEST_LOAD_ERROR="manifestLoadError",t.MANIFEST_LOAD_TIMEOUT="manifestLoadTimeOut",t.MANIFEST_PARSING_ERROR="manifestParsingError",t.MANIFEST_INCOMPATIBLE_CODECS_ERROR="manifestIncompatibleCodecsError",t.LEVEL_EMPTY_ERROR="levelEmptyError",t.LEVEL_LOAD_ERROR="levelLoadError",t.LEVEL_LOAD_TIMEOUT="levelLoadTimeOut",t.LEVEL_PARSING_ERROR="levelParsingError",t.LEVEL_SWITCH_ERROR="levelSwitchError",t.AUDIO_TRACK_LOAD_ERROR="audioTrackLoadError",t.AUDIO_TRACK_LOAD_TIMEOUT="audioTrackLoadTimeOut",t.SUBTITLE_LOAD_ERROR="subtitleTrackLoadError",t.SUBTITLE_TRACK_LOAD_TIMEOUT="subtitleTrackLoadTimeOut",t.FRAG_LOAD_ERROR="fragLoadError",t.FRAG_LOAD_TIMEOUT="fragLoadTimeOut",t.FRAG_DECRYPT_ERROR="fragDecryptError",t.FRAG_PARSING_ERROR="fragParsingError",t.FRAG_GAP="fragGap",t.REMUX_ALLOC_ERROR="remuxAllocError",t.KEY_LOAD_ERROR="keyLoadError",t.KEY_LOAD_TIMEOUT="keyLoadTimeOut",t.BUFFER_ADD_CODEC_ERROR="bufferAddCodecError",t.BUFFER_INCOMPATIBLE_CODECS_ERROR="bufferIncompatibleCodecsError",t.BUFFER_APPEND_ERROR="bufferAppendError",t.BUFFER_APPENDING_ERROR="bufferAppendingError",t.BUFFER_STALLED_ERROR="bufferStalledError",t.BUFFER_FULL_ERROR="bufferFullError",t.BUFFER_SEEK_OVER_HOLE="bufferSeekOverHole",t.BUFFER_NUDGE_ON_STALL="bufferNudgeOnStall",t.INTERNAL_EXCEPTION="internalException",t.INTERNAL_ABORTED="aborted",t.UNKNOWN="unknown",t}({});const g=function(){},m={trace:g,debug:g,log:g,warn:g,info:g,error:g};let p=m;function y(t,...e){e.forEach((function(e){p[e]=t[e]?t[e].bind(t):function(t){const e=self.console[t];return e?e.bind(self.console,`[${t}] >`):g}(e)}))}const E=p,v=/^(\d+)x(\d+)$/,T=/(.+?)=(".*?"|.*?)(?:,|$)/g;class AttrList{constructor(t){"string"==typeof t&&(t=AttrList.parseAttrList(t)),o(this,t)}get clientAttrs(){return Object.keys(this).filter(t=>"X-"===t.substring(0,2))}decimalInteger(t){const e=parseInt(this[t],10);return e>Number.MAX_SAFE_INTEGER?1/0:e}hexadecimalInteger(t){if(this[t]){let e=(this[t]||"0x").slice(2);e=(1&e.length?"0":"")+e;const s=new Uint8Array(e.length/2);for(let t=0;t<e.length/2;t++)s[t]=parseInt(e.slice(2*t,2*t+2),16);return s}return null}hexadecimalIntegerAsNumber(t){const e=parseInt(this[t],16);return e>Number.MAX_SAFE_INTEGER?1/0:e}decimalFloatingPoint(t){return parseFloat(this[t])}optionalFloat(t,e){const s=this[t];return s?parseFloat(s):e}enumeratedString(t){return this[t]}bool(t){return"YES"===this[t]}decimalResolution(t){const e=v.exec(this[t]);if(null!==e)return{width:parseInt(e[1],10),height:parseInt(e[2],10)}}static parseAttrList(t){let e;const s={};for(T.lastIndex=0;null!==(e=T.exec(t));){let t=e[2];0===t.indexOf('"')&&t.lastIndexOf('"')===t.length-1&&(t=t.slice(1,-1));s[e[1].trim()]=t}return s}}function S(t){return"SCTE35-OUT"===t||"SCTE35-IN"===t}class DateRange{constructor(t,e){if(this.attr=void 0,this._startDate=void 0,this._endDate=void 0,this._badValueForSameId=void 0,e){const s=e.attr;for(const e in s)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e]!==s[e]){E.warn(`DATERANGE tag attribute: "${e}" does not match for tags with ID: "${t.ID}"`),this._badValueForSameId=e;break}t=o(new AttrList({}),s,t)}if(this.attr=t,this._startDate=new Date(t["START-DATE"]),"END-DATE"in this.attr){const t=new Date(this.attr["END-DATE"]);l(t.getTime())&&(this._endDate=t)}}get id(){return this.attr.ID}get class(){return this.attr.CLASS}get startDate(){return this._startDate}get endDate(){if(this._endDate)return this._endDate;const t=this.duration;return null!==t?new Date(this._startDate.getTime()+1e3*t):null}get duration(){if("DURATION"in this.attr){const t=this.attr.decimalFloatingPoint("DURATION");if(l(t))return t}else if(this._endDate)return(this._endDate.getTime()-this._startDate.getTime())/1e3;return null}get plannedDuration(){return"PLANNED-DURATION"in this.attr?this.attr.decimalFloatingPoint("PLANNED-DURATION"):null}get endOnNext(){return this.attr.bool("END-ON-NEXT")}get isValid(){return!!this.id&&!this._badValueForSameId&&l(this.startDate.getTime())&&(null===this.duration||this.duration>=0)&&(!this.endOnNext||!!this.class)}}class LoadStats{constructor(){this.aborted=!1,this.loaded=0,this.retry=0,this.total=0,this.chunkCount=0,this.bwEstimate=0,this.loading={start:0,first:0,end:0},this.parsing={start:0,end:0},this.buffering={start:0,first:0,end:0}}}var L="audio",A="video",R="audiovideo";class BaseSegment{constructor(t){this._byteRange=null,this._url=null,this.baseurl=void 0,this.relurl=void 0,this.elementaryStreams={[L]:null,[A]:null,[R]:null},this.baseurl=t}setByteRange(t,e){const s=t.split("@",2);let r;r=1===s.length?(null==e?void 0:e.byteRangeEndOffset)||0:parseInt(s[1]),this._byteRange=[r,parseInt(s[0])+r]}get byteRange(){return this._byteRange?this._byteRange:[]}get byteRangeStartOffset(){return this.byteRange[0]}get byteRangeEndOffset(){return this.byteRange[1]}get url(){return!this._url&&this.baseurl&&this.relurl&&(this._url=s.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url||""}set url(t){this._url=t}}class Fragment extends BaseSegment{constructor(t,e){super(e),this._decryptdata=null,this.rawProgramDateTime=null,this.programDateTime=null,this.tagList=[],this.duration=0,this.sn=0,this.levelkeys=void 0,this.type=void 0,this.loader=null,this.keyLoader=null,this.level=-1,this.cc=0,this.startPTS=void 0,this.endPTS=void 0,this.startDTS=void 0,this.endDTS=void 0,this.start=0,this.deltaPTS=void 0,this.maxStartPTS=void 0,this.minEndPTS=void 0,this.stats=new LoadStats,this.data=void 0,this.bitrateTest=!1,this.title=null,this.initSegment=null,this.endList=void 0,this.gap=void 0,this.urlId=0,this.type=t}get decryptdata(){const{levelkeys:t}=this;if(!t&&!this._decryptdata)return null;if(!this._decryptdata&&this.levelkeys&&!this.levelkeys.NONE){const t=this.levelkeys.identity;if(t)this._decryptdata=t.getDecryptData(this.sn);else{const t=Object.keys(this.levelkeys);if(1===t.length)return this._decryptdata=this.levelkeys[t[0]].getDecryptData(this.sn)}}return this._decryptdata}get end(){return this.start+this.duration}get endProgramDateTime(){if(null===this.programDateTime)return null;if(!l(this.programDateTime))return null;const t=l(this.duration)?this.duration:0;return this.programDateTime+1e3*t}get encrypted(){var t;if(null!=(t=this._decryptdata)&&t.encrypted)return!0;if(this.levelkeys){const t=Object.keys(this.levelkeys),e=t.length;if(e>1||1===e&&this.levelkeys[t[0]].encrypted)return!0}return!1}setKeyFormat(t){if(this.levelkeys){const e=this.levelkeys[t];e&&!this._decryptdata&&(this._decryptdata=e.getDecryptData(this.sn))}}abortRequests(){var t,e;null==(t=this.loader)||t.abort(),null==(e=this.keyLoader)||e.abort()}setElementaryStreamInfo(t,e,s,r,i,n=!1){const{elementaryStreams:a}=this,o=a[t];o?(o.startPTS=Math.min(o.startPTS,e),o.endPTS=Math.max(o.endPTS,s),o.startDTS=Math.min(o.startDTS,r),o.endDTS=Math.max(o.endDTS,i)):a[t]={startPTS:e,endPTS:s,startDTS:r,endDTS:i,partial:n}}clearElementaryStreamInfo(){const{elementaryStreams:t}=this;t[L]=null,t[A]=null,t[R]=null}}class Part extends BaseSegment{constructor(t,e,s,r,i){super(s),this.fragOffset=0,this.duration=0,this.gap=!1,this.independent=!1,this.relurl=void 0,this.fragment=void 0,this.index=void 0,this.stats=new LoadStats,this.duration=t.decimalFloatingPoint("DURATION"),this.gap=t.bool("GAP"),this.independent=t.bool("INDEPENDENT"),this.relurl=t.enumeratedString("URI"),this.fragment=e,this.index=r;const n=t.enumeratedString("BYTERANGE");n&&this.setByteRange(n,i),i&&(this.fragOffset=i.fragOffset+i.duration)}get start(){return this.fragment.start+this.fragOffset}get end(){return this.start+this.duration}get loaded(){const{elementaryStreams:t}=this;return!!(t.audio||t.video||t.audiovideo)}}class LevelDetails{constructor(t){this.PTSKnown=!1,this.alignedSliding=!1,this.averagetargetduration=void 0,this.endCC=0,this.endSN=0,this.fragments=void 0,this.fragmentHint=void 0,this.partList=null,this.dateRanges=void 0,this.live=!0,this.ageHeader=0,this.advancedDateTime=void 0,this.updated=!0,this.advanced=!0,this.availabilityDelay=void 0,this.misses=0,this.startCC=0,this.startSN=0,this.startTimeOffset=null,this.targetduration=0,this.totalduration=0,this.type=null,this.url=void 0,this.m3u8="",this.version=null,this.canBlockReload=!1,this.canSkipUntil=0,this.canSkipDateRanges=!1,this.skippedSegments=0,this.recentlyRemovedDateranges=void 0,this.partHoldBack=0,this.holdBack=0,this.partTarget=0,this.preloadHint=void 0,this.renditionReports=void 0,this.tuneInGoal=0,this.deltaUpdateFailed=void 0,this.driftStartTime=0,this.driftEndTime=0,this.driftStart=0,this.driftEnd=0,this.encryptedFragments=void 0,this.playlistParsingError=null,this.variableList=null,this.hasVariableRefs=!1,this.fragments=[],this.encryptedFragments=[],this.dateRanges={},this.url=t}reloaded(t){if(!t)return this.advanced=!0,void(this.updated=!0);const e=this.lastPartSn-t.lastPartSn,s=this.lastPartIndex-t.lastPartIndex;this.updated=this.endSN!==t.endSN||!!s||!!e||!this.live,this.advanced=this.endSN>t.endSN||e>0||0===e&&s>0,this.updated||this.advanced?this.misses=Math.floor(.6*t.misses):this.misses=t.misses+1,this.availabilityDelay=t.availabilityDelay}get hasProgramDateTime(){return!!this.fragments.length&&l(this.fragments[this.fragments.length-1].programDateTime)}get levelTargetDuration(){return this.averagetargetduration||this.targetduration||10}get drift(){const t=this.driftEndTime-this.driftStartTime;if(t>0){return 1e3*(this.driftEnd-this.driftStart)/t}return 1}get edge(){return this.partEnd||this.fragmentEnd}get partEnd(){var t;return null!=(t=this.partList)&&t.length?this.partList[this.partList.length-1].end:this.fragmentEnd}get fragmentEnd(){var t;return null!=(t=this.fragments)&&t.length?this.fragments[this.fragments.length-1].end:0}get age(){return this.advancedDateTime?Math.max(Date.now()-this.advancedDateTime,0)/1e3:0}get lastPartIndex(){var t;return null!=(t=this.partList)&&t.length?this.partList[this.partList.length-1].index:-1}get lastPartSn(){var t;return null!=(t=this.partList)&&t.length?this.partList[this.partList.length-1].fragment.sn:this.endSN}}function b(t){return Uint8Array.from(atob(t),t=>t.charCodeAt(0))}function k(t){const e=t.split(":");let s=null;if("data"===e[0]&&2===e.length){const t=e[1].split(";"),r=t[t.length-1].split(",");if(2===r.length){const e="base64"===r[0],i=r[1];e?(t.splice(-1,1),s=b(i)):s=function(t){const e=D(t).subarray(0,16),s=new Uint8Array(16);return s.set(e,16-e.length),s}(i)}}return s}function D(t){return Uint8Array.from(unescape(encodeURIComponent(t)),t=>t.charCodeAt(0))}const C="undefined"!=typeof self?self:void 0;var w={CLEARKEY:"org.w3.clearkey",FAIRPLAY:"com.apple.fps",PLAYREADY:"com.microsoft.playready",WIDEVINE:"com.widevine.alpha"},P="org.w3.clearkey",I="com.apple.streamingkeydelivery",_="com.microsoft.playready",M="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed";function x(t){switch(t){case I:return w.FAIRPLAY;case _:return w.PLAYREADY;case M:return w.WIDEVINE;case P:return w.CLEARKEY}}var F="edef8ba979d64acea3c827dcd51d21ed";function O(t){switch(t){case w.FAIRPLAY:return I;case w.PLAYREADY:return _;case w.WIDEVINE:return M;case w.CLEARKEY:return P}}function N(t){const{drmSystems:e,widevineLicenseUrl:s}=t,r=e?[w.FAIRPLAY,w.WIDEVINE,w.PLAYREADY,w.CLEARKEY].filter(t=>!!e[t]):[];return!r[w.WIDEVINE]&&s&&r.push(w.WIDEVINE),r}const U=null!=C&&null!=(B=C.navigator)&&B.requestMediaKeySystemAccess?self.navigator.requestMediaKeySystemAccess.bind(self.navigator):null;var B;function $(t,e,s){return Uint8Array.prototype.slice?t.slice(e,s):new Uint8Array(Array.prototype.slice.call(t,e,s))}const G=(t,e)=>e+10<=t.length&&73===t[e]&&68===t[e+1]&&51===t[e+2]&&t[e+3]<255&&t[e+4]<255&&t[e+6]<128&&t[e+7]<128&&t[e+8]<128&&t[e+9]<128,K=(t,e)=>e+10<=t.length&&51===t[e]&&68===t[e+1]&&73===t[e+2]&&t[e+3]<255&&t[e+4]<255&&t[e+6]<128&&t[e+7]<128&&t[e+8]<128&&t[e+9]<128,H=(t,e)=>{const s=e;let r=0;for(;G(t,e);){r+=10;r+=V(t,e+6),K(t,e+10)&&(r+=10),e+=r}if(r>0)return t.subarray(s,s+r)},V=(t,e)=>{let s=0;return s=(127&t[e])<<21,s|=(127&t[e+1])<<14,s|=(127&t[e+2])<<7,s|=127&t[e+3],s},Y=(t,e)=>G(t,e)&&V(t,e+6)+10<=t.length-e,W=t=>{const e=X(t);for(let t=0;t<e.length;t++){const s=e[t];if(q(s))return tt(s)}},q=t=>t&&"PRIV"===t.key&&"com.apple.streaming.transportStreamTimestamp"===t.info,j=t=>{const e=String.fromCharCode(t[0],t[1],t[2],t[3]),s=V(t,4);return{type:e,size:s,data:t.subarray(10,10+s)}},X=t=>{let e=0;const s=[];for(;G(t,e);){const r=V(t,e+6);e+=10;const i=e+r;for(;e+8<i;){const r=j(t.subarray(e)),i=z(r);i&&s.push(i),e+=r.size+10}K(t,e)&&(e+=10)}return s},z=t=>"PRIV"===t.type?Q(t):"W"===t.type[0]?Z(t):J(t),Q=t=>{if(t.size<2)return;const e=et(t.data,!0),s=new Uint8Array(t.data.subarray(e.length+1));return{key:t.type,info:e,data:s.buffer}},J=t=>{if(t.size<2)return;if("TXXX"===t.type){let e=1;const s=et(t.data.subarray(e),!0);e+=s.length+1;const r=et(t.data.subarray(e));return{key:t.type,info:s,data:r}}const e=et(t.data.subarray(1));return{key:t.type,data:e}},Z=t=>{if("WXXX"===t.type){if(t.size<2)return;let e=1;const s=et(t.data.subarray(e),!0);e+=s.length+1;const r=et(t.data.subarray(e));return{key:t.type,info:s,data:r}}const e=et(t.data);return{key:t.type,data:e}},tt=t=>{if(8===t.data.byteLength){const e=new Uint8Array(t.data),s=1&e[3];let r=(e[4]<<23)+(e[5]<<15)+(e[6]<<7)+e[7];return r/=45,s&&(r+=47721858.84),Math.round(r)}},et=(t,e=!1)=>{const s=rt();if(s){const r=s.decode(t);if(e){const t=r.indexOf("\0");return-1!==t?r.substring(0,t):r}return r.replace(/\0/g,"")}const r=t.length;let i,n,a,o="",l=0;for(;l<r;){if(i=t[l++],0===i&&e)return o;if(0!==i&&3!==i)switch(i>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:o+=String.fromCharCode(i);break;case 12:case 13:n=t[l++],o+=String.fromCharCode((31&i)<<6|63&n);break;case 14:n=t[l++],a=t[l++],o+=String.fromCharCode((15&i)<<12|(63&n)<<6|(63&a)<<0)}}return o};let st;function rt(){if(!navigator.userAgent.includes("PlayStation 4"))return st||void 0===self.TextDecoder||(st=new self.TextDecoder("utf-8")),st}const it=function(t){let e="";for(let s=0;s<t.length;s++){let r=t[s].toString(16);r.length<2&&(r="0"+r),e+=r}return e},nt=Math.pow(2,32)-1,at=[].push,ot={video:1,audio:2,id3:3,text:4};function lt(t){return String.fromCharCode.apply(null,t)}function ht(t,e){const s=t[e]<<8|t[e+1];return s<0?65536+s:s}function dt(t,e){const s=ut(t,e);return s<0?4294967296+s:s}function ct(t,e){let s=dt(t,e);return s*=Math.pow(2,32),s+=dt(t,e+4),s}function ut(t,e){return t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3]}function ft(t,e,s){t[e]=s>>24,t[e+1]=s>>16&255,t[e+2]=s>>8&255,t[e+3]=255&s}function gt(t,e){const s=[];if(!e.length)return s;const r=t.byteLength;for(let i=0;i<r;){const n=dt(t,i),a=n>1?i+n:r;if(lt(t.subarray(i+4,i+8))===e[0])if(1===e.length)s.push(t.subarray(i+8,a));else{const r=gt(t.subarray(i+8,a),e.slice(1));r.length&&at.apply(s,r)}i=a}return s}function mt(t){const e=[],s=t[0];let r=8;const i=dt(t,r);r+=4;let n=0,a=0;0===s?(n=dt(t,r),a=dt(t,r+4),r+=8):(n=ct(t,r),a=ct(t,r+8),r+=16),r+=2;let o=t.length+a;const l=ht(t,r);r+=2;for(let s=0;s<l;s++){let s=r;const n=dt(t,s);s+=4;const a=2147483647&n;if(1===(2147483648&n)>>>31)return E.warn("SIDX has hierarchical references (not supported)"),null;const l=dt(t,s);s+=4,e.push({referenceSize:a,subsegmentDuration:l,info:{duration:l/i,start:o,end:o+a-1}}),o+=a,s+=4,r=s}return{earliestPresentationTime:n,timescale:i,version:s,referencesCount:l,references:e}}function pt(t){const e=[],s=gt(t,["moov","trak"]);for(let t=0;t<s.length;t++){const r=s[t],n=gt(r,["tkhd"])[0];if(n){let t=n[0];const s=dt(n,0===t?12:20),a=gt(r,["mdia","mdhd"])[0];if(a){t=a[0];const n=dt(a,0===t?12:20),o=gt(r,["mdia","hdlr"])[0];if(o){const t=lt(o.subarray(8,12)),a={soun:L,vide:A}[t];if(a){const t=yt(gt(r,["mdia","minf","stbl","stsd"])[0]);e[s]={timescale:n,type:a},e[a]=i({timescale:n,id:s},t)}}}}}return gt(t,["moov","mvex","trex"]).forEach(t=>{const s=dt(t,4),r=e[s];r&&(r.default={duration:dt(t,12),flags:dt(t,20)})}),e}function yt(t){const e=t.subarray(8),s=e.subarray(86),r=lt(e.subarray(4,8));let i=r;const n="enca"===r||"encv"===r;if(n){const t=gt(e,[r])[0];gt(t.subarray("enca"===r?28:78),["sinf"]).forEach(t=>{const e=gt(t,["schm"])[0];if(e){const s=lt(e.subarray(4,8));if("cbcs"===s||"cenc"===s){const e=gt(t,["frma"])[0];e&&(i=lt(e))}}})}switch(i){case"avc1":case"avc2":case"avc3":case"avc4":{const t=gt(s,["avcC"])[0];i+="."+vt(t[1])+vt(t[2])+vt(t[3]);break}case"mp4a":{const t=gt(e,[r])[0],s=gt(t.subarray(28),["esds"])[0];if(s&&s.length>12){let t=4;if(3!==s[t++])break;t=Et(s,t),t+=2;const e=s[t++];if(128&e&&(t+=2),64&e&&(t+=s[t++]),4!==s[t++])break;t=Et(s,t);const r=s[t++];if(64!==r)break;if(i+="."+vt(r),t+=12,5!==s[t++])break;t=Et(s,t);const n=s[t++];let a=(248&n)>>3;31===a&&(a+=1+((7&n)<<3)+((224&s[t])>>5)),i+="."+a}break}case"hvc1":case"hev1":{const t=gt(s,["hvcC"])[0],e=t[1],r=["","A","B","C"][e>>6],n=31&e,a=dt(t,2),o=(32&e)>>5?"H":"L",l=t[12],h=t.subarray(6,12);i+="."+r+n,i+="."+a.toString(16).toUpperCase(),i+="."+o+l;let d="";for(let t=h.length;t--;){const e=h[t];if(e||d){d="."+e.toString(16).toUpperCase()+d}}i+=d;break}case"dvh1":case"dvhe":{const t=gt(s,["dvcC"])[0],e=t[2]>>1&127,r=t[2]<<5&32|t[3]>>3&31;i+="."+Tt(e)+"."+Tt(r);break}case"vp09":{const t=gt(s,["vpcC"])[0],e=t[4],r=t[5],n=t[6]>>4&15;i+="."+Tt(e)+"."+Tt(r)+"."+Tt(n);break}case"av01":{const t=gt(s,["av1C"])[0],e=t[1]>>>5,r=31&t[1],n=t[2]>>>7?"H":"M",a=(64&t[2])>>6,o=(32&t[2])>>5,l=2===e&&a?o?12:10:a?10:8,h=(16&t[2])>>4,d=(8&t[2])>>3,c=(4&t[2])>>2,u=3&t[2],f=1,g=1,m=1,p=0;i+="."+e+"."+Tt(r)+n+"."+Tt(l)+"."+h+"."+d+c+u+"."+Tt(f)+"."+Tt(g)+"."+Tt(m)+"."+p;break}}return{codec:i,encrypted:n}}function Et(t,e){const s=e+5;for(;128&t[e++]&&e<s;);return e}function vt(t){return("0"+t.toString(16).toUpperCase()).slice(-2)}function Tt(t){return(t<10?"0":"")+t}function St(t){const e=gt(t,["schm"])[0];if(e){const s=lt(e.subarray(4,8));if("cbcs"===s||"cenc"===s)return gt(t,["schi","tenc"])[0]}return E.error("[eme] missing 'schm' box"),null}function Lt(t){const e=dt(t,0);let s=8;1&e&&(s+=4),4&e&&(s+=4);let r=0;const i=dt(t,4);for(let n=0;n<i;n++){if(256&e){r+=dt(t,s),s+=4}512&e&&(s+=4),1024&e&&(s+=4),2048&e&&(s+=4)}return r}function At(t,e){const s=new Uint8Array(t.length+e.length);return s.set(t),s.set(e,t.length),s}function Rt(t,e){const s=[],r=e.samples,i=e.timescale,n=e.id;let a=!1;return gt(r,["moof"]).map(o=>{const l=o.byteOffset-8;gt(o,["traf"]).map(o=>{const h=gt(o,["tfdt"]).map(t=>{const e=t[0];let s=dt(t,4);return 1===e&&(s*=Math.pow(2,32),s+=dt(t,8)),s/i})[0];return void 0!==h&&(t=h),gt(o,["tfhd"]).map(h=>{const d=dt(h,4),c=16777215&dt(h,0);let u=0;const f=0!=(16&c);let g=0;const m=0!=(32&c);let p=8;d===n&&(0!=(1&c)&&(p+=8),0!=(2&c)&&(p+=4),0!=(8&c)&&(u=dt(h,p),p+=4),f&&(g=dt(h,p),p+=4),m&&(p+=4),"video"===e.type&&(a=function(t){if(!t)return!1;const e=t.indexOf("."),s=e<0?t:t.substring(0,e);return"hvc1"===s||"hev1"===s||"dvh1"===s||"dvhe"===s}(e.codec)),gt(o,["trun"]).map(n=>{const o=n[0],h=16777215&dt(n,0),d=0!=(1&h);let c=0;const f=0!=(4&h),m=0!=(256&h);let p=0;const y=0!=(512&h);let E=0;const v=0!=(1024&h),T=0!=(2048&h);let S=0;const L=dt(n,4);let R=8;d&&(c=dt(n,R),R+=4),f&&(R+=4);let b=c+l;for(let l=0;l<L;l++){if(m?(p=dt(n,R),R+=4):p=u,y?(E=dt(n,R),R+=4):E=g,v&&(R+=4),T&&(S=0===o?dt(n,R):ut(n,R),R+=4),e.type===A){let e=0;for(;e<E;){const n=dt(r,b);if(b+=4,bt(a,r[b])){kt(r.subarray(b,b+n),a?2:1,t+S/i,s)}b+=n,e+=n+4}}t+=p/i}}))})})}),s}function bt(t,e){if(t){const t=e>>1&63;return 39===t||40===t}return 6===(31&e)}function kt(t,e,s,r){const i=Dt(t);let n=0;n+=e;let a=0,o=0,l=0;for(;n<i.length;){a=0;do{if(n>=i.length)break;l=i[n++],a+=l}while(255===l);o=0;do{if(n>=i.length)break;l=i[n++],o+=l}while(255===l);const t=i.length-n;let e=n;if(o<t)n+=o;else if(o>t){E.error(`Malformed SEI payload. ${o} is too small, only ${t} bytes left to parse.`);break}if(4===a){if(181===i[e++]){const t=ht(i,e);if(e+=2,49===t){const t=dt(i,e);if(e+=4,1195456820===t){const t=i[e++];if(3===t){const n=i[e++],o=31&n,l=64&n,h=l?2+3*o:0,d=new Uint8Array(h);if(l){d[0]=n;for(let t=1;t<h;t++)d[t]=i[e++]}r.push({type:t,payloadType:a,pts:s,bytes:d})}}}}}else if(5===a&&o>16){const t=[];for(let s=0;s<16;s++){const r=i[e++].toString(16);t.push(1==r.length?"0"+r:r),3!==s&&5!==s&&7!==s&&9!==s||t.push("-")}const n=o-16,l=new Uint8Array(n);for(let t=0;t<n;t++)l[t]=i[e++];r.push({payloadType:a,pts:s,uuid:t.join(""),userData:et(l),userDataBytes:l})}}}function Dt(t){const e=t.byteLength,s=[];let r=1;for(;r<e-2;)0===t[r]&&0===t[r+1]&&3===t[r+2]?(s.push(r+2),r+=2):r++;if(0===s.length)return t;const i=e-s.length,n=new Uint8Array(i);let a=0;for(r=0;r<i;a++,r++)a===s[0]&&(a++,s.shift()),n[r]=t[a];return n}function Ct(t,e,s){if(16!==t.byteLength)throw new RangeError("Invalid system id");let r,i,n;if(e){r=1,i=new Uint8Array(16*e.length);for(let t=0;t<e.length;t++){const s=e[t];if(16!==s.byteLength)throw new RangeError("Invalid key");i.set(s,16*t)}}else r=0,i=new Uint8Array;r>0?(n=new Uint8Array(4),e.length>0&&new DataView(n.buffer).setUint32(0,e.length,!1)):n=new Uint8Array;const a=new Uint8Array(4);return s&&s.byteLength>0&&new DataView(a.buffer).setUint32(0,s.byteLength,!1),function(t,...e){const s=e.length;let r=8,i=s;for(;i--;)r+=e[i].byteLength;const n=new Uint8Array(r);for(n[0]=r>>24&255,n[1]=r>>16&255,n[2]=r>>8&255,n[3]=255&r,n.set(t,4),i=0,r=8;i<s;i++)n.set(e[i],r),r+=e[i].byteLength;return n}([112,115,115,104],new Uint8Array([r,0,0,0]),t,n,i,a,s||new Uint8Array)}let wt={};class LevelKey{static clearKeyUriToKeyIdMap(){wt={}}constructor(t,e,s,r=[1],i=null){this.uri=void 0,this.method=void 0,this.keyFormat=void 0,this.keyFormatVersions=void 0,this.encrypted=void 0,this.isCommonEncryption=void 0,this.iv=null,this.key=null,this.keyId=null,this.pssh=null,this.method=t,this.uri=e,this.keyFormat=s,this.keyFormatVersions=r,this.iv=i,this.encrypted=!!t&&"NONE"!==t,this.isCommonEncryption=this.encrypted&&"AES-128"!==t}isSupported(){if(this.method){if("AES-128"===this.method||"NONE"===this.method)return!0;if("identity"===this.keyFormat)return"SAMPLE-AES"===this.method;switch(this.keyFormat){case I:case M:case _:case P:return-1!==["ISO-23001-7","SAMPLE-AES","SAMPLE-AES-CENC","SAMPLE-AES-CTR"].indexOf(this.method)}}return!1}getDecryptData(t){if(!this.encrypted||!this.uri)return null;if("AES-128"===this.method&&this.uri&&!this.iv){"number"!=typeof t&&("AES-128"!==this.method||this.iv||E.warn(`missing IV for initialization segment with method="${this.method}" - compliance issue`),t=0);const e=function(t){const e=new Uint8Array(16);for(let s=12;s<16;s++)e[s]=t>>8*(15-s)&255;return e}(t);return new LevelKey(this.method,this.uri,"identity",this.keyFormatVersions,e)}const e=k(this.uri);if(e)switch(this.keyFormat){case M:this.pssh=e,e.length>=22&&(this.keyId=e.subarray(e.length-22,e.length-6));break;case _:{const t=new Uint8Array([154,4,240,121,152,64,66,134,171,146,230,91,224,136,95,149]);this.pssh=Ct(t,null,e);const s=new Uint16Array(e.buffer,e.byteOffset,e.byteLength/2),r=String.fromCharCode.apply(null,Array.from(s)),i=r.substring(r.indexOf("<"),r.length),n=(new DOMParser).parseFromString(i,"text/xml").getElementsByTagName("KID")[0];if(n){const t=n.childNodes[0]?n.childNodes[0].nodeValue:n.getAttribute("VALUE");if(t){const e=b(t).subarray(0,16);!function(t){const e=function(t,e,s){const r=t[e];t[e]=t[s],t[s]=r};e(t,0,3),e(t,1,2),e(t,4,5),e(t,6,7)}(e),this.keyId=e}}break}default:{let t=e.subarray(0,16);if(16!==t.length){const e=new Uint8Array(16);e.set(t,16-t.length),t=e}this.keyId=t;break}}if(!this.keyId||16!==this.keyId.byteLength){let t=wt[this.uri];if(!t){const e=Object.keys(wt).length%Number.MAX_SAFE_INTEGER;t=new Uint8Array(16);new DataView(t.buffer,12,4).setUint32(0,e),wt[this.uri]=t}this.keyId=t}return this}}const Pt=/\{\$([a-zA-Z0-9-_]+)\}/g;function It(t){return Pt.test(t)}function _t(t,e,s){if(null!==t.variableList||t.hasVariableRefs)for(let r=s.length;r--;){const i=s[r],n=e[i];n&&(e[i]=Mt(t,n))}}function Mt(t,e){if(null!==t.variableList||t.hasVariableRefs){const s=t.variableList;return e.replace(Pt,e=>{const r=e.substring(2,e.length-1),i=null==s?void 0:s[r];return void 0===i?(t.playlistParsingError||(t.playlistParsingError=new Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: "${r}"`)),e):i})}return e}function xt(t,e,s){let r,i,n=t.variableList;if(n||(t.variableList=n={}),"QUERYPARAM"in e){r=e.QUERYPARAM;try{const t=new self.URL(s).searchParams;if(!t.has(r))throw new Error(`"${r}" does not match any query parameter in URI: "${s}"`);i=t.get(r)}catch(e){t.playlistParsingError||(t.playlistParsingError=new Error("EXT-X-DEFINE QUERYPARAM: "+e.message))}}else r=e.NAME,i=e.VALUE;r in n?t.playlistParsingError||(t.playlistParsingError=new Error(`EXT-X-DEFINE duplicate Variable Name declarations: "${r}"`)):n[r]=i||""}function Ft(t,e,s){const r=e.IMPORT;if(s&&r in s){let e=t.variableList;e||(t.variableList=e={}),e[r]=s[r]}else t.playlistParsingError||(t.playlistParsingError=new Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: "${r}"`))}function Ot(t=!0){if("undefined"==typeof self)return;return(t||!self.MediaSource)&&self.ManagedMediaSource||self.MediaSource||self.WebKitMediaSource}const Nt={audio:{a3ds:1,"ac-3":.95,"ac-4":1,alac:.9,alaw:1,dra1:1,"dts+":1,"dts-":1,dtsc:1,dtse:1,dtsh:1,"ec-3":.9,enca:1,fLaC:.9,flac:.9,FLAC:.9,g719:1,g726:1,m4ae:1,mha1:1,mha2:1,mhm1:1,mhm2:1,mlpa:1,mp4a:1,"raw ":1,Opus:1,opus:1,samr:1,sawb:1,sawp:1,sevc:1,sqcp:1,ssmv:1,twos:1,ulaw:1},video:{avc1:1,avc2:1,avc3:1,avc4:1,avcp:1,av01:.8,drac:1,dva1:1,dvav:1,dvh1:.7,dvhe:.7,encv:1,hev1:.75,hvc1:.75,mjp2:1,mp4v:1,mvc1:1,mvc2:1,mvc3:1,mvc4:1,resv:1,rv60:1,s263:1,svc1:1,svc2:1,"vc-1":1,vp08:1,vp09:.9},text:{stpp:1,wvtt:1}};function Ut(t,e,s=!0){return!t.split(",").some(t=>!Bt(t,e,s))}function Bt(t,e,s=!0){var r;const i=Ot(s);return null!=(r=null==i?void 0:i.isTypeSupported($t(t,e)))&&r}function $t(t,e){return`${e}/mp4;codecs="${t}"`}function Gt(t){if(t){const e=t.substring(0,4);return Nt.video[e]}return 2}function Kt(t){return t.split(",").reduce((t,e)=>{const s=Nt.video[e];return s?(2*s+t)/(t?3:2):(Nt.audio[e]+t)/(t?2:1)},0)}const Ht={};const Vt=/flac|opus/i;function Yt(t,e=!0){return t.replace(Vt,t=>function(t,e=!0){if(Ht[t])return Ht[t];const s={flac:["flac","fLaC","FLAC"],opus:["opus","Opus"]}[t];for(let r=0;r<s.length;r++)if(Bt(s[r],"audio",e))return Ht[t]=s[r],s[r];return t}(t.toLowerCase(),e))}function Wt(t,e){return t&&"mp4a"!==t?t:e?e.split(",")[0]:e}const qt=/#EXT-X-STREAM-INF:([^\r\n]*)(?:[\r\n](?:#[^\r\n]*)?)*([^\r\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\r\n]*)[\r\n]+/g,jt=/#EXT-X-MEDIA:(.*)/g,Xt=/^#EXT(?:INF|-X-TARGETDURATION):/m,zt=new RegExp([/#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source,/(?!#) *(\S[\S ]*)/.source,/#EXT-X-BYTERANGE:*(.+)/.source,/#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,/#.*/.source].join("|"),"g"),Qt=new RegExp([/#(EXTM3U)/.source,/#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source,/#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\d+)/.source,/#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source,/(#)([^:]*):(.*)/.source,/(#)(.*)(?:.*)\r?\n?/.source].join("|"));class M3U8Parser{static findGroup(t,e){for(let s=0;s<t.length;s++){const r=t[s];if(r.id===e)return r}}static resolve(t,e){return s.buildAbsoluteURL(e,t,{alwaysNormalize:!0})}static isMediaPlaylist(t){return Xt.test(t)}static parseMasterPlaylist(t,e){const s={contentSteering:null,levels:[],playlistParsingError:null,sessionData:null,sessionKeys:null,startTimeOffset:null,variableList:null,hasVariableRefs:It(t)},r=[];let i;for(qt.lastIndex=0;null!=(i=qt.exec(t));)if(i[1]){var n;const t=new AttrList(i[1]);_t(s,t,["CODECS","SUPPLEMENTAL-CODECS","ALLOWED-CPC","PATHWAY-ID","STABLE-VARIANT-ID","AUDIO","VIDEO","SUBTITLES","CLOSED-CAPTIONS","NAME"]);const a=Mt(s,i[2]),o={attrs:t,bitrate:t.decimalInteger("BANDWIDTH")||t.decimalInteger("AVERAGE-BANDWIDTH"),name:t.NAME,url:M3U8Parser.resolve(a,e)},l=t.decimalResolution("RESOLUTION");l&&(o.width=l.width,o.height=l.height),te(t.CODECS,o),null!=(n=o.unknownCodecs)&&n.length||r.push(o),s.levels.push(o)}else if(i[3]){const t=i[3],r=i[4];switch(t){case"SESSION-DATA":{const t=new AttrList(r);_t(s,t,["DATA-ID","LANGUAGE","VALUE","URI"]);const e=t["DATA-ID"];e&&(null===s.sessionData&&(s.sessionData={}),s.sessionData[e]=t);break}case"SESSION-KEY":{const t=Jt(r,e,s);t.encrypted&&t.isSupported()?(null===s.sessionKeys&&(s.sessionKeys=[]),s.sessionKeys.push(t)):E.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: "${r}"`);break}case"DEFINE":{const t=new AttrList(r);_t(s,t,["NAME","VALUE","QUERYPARAM"]),xt(s,t,e)}break;case"CONTENT-STEERING":{const t=new AttrList(r);_t(s,t,["SERVER-URI","PATHWAY-ID"]),s.contentSteering={uri:M3U8Parser.resolve(t["SERVER-URI"],e),pathwayId:t["PATHWAY-ID"]||"."};break}case"START":s.startTimeOffset=Zt(r)}}const a=r.length>0&&r.length<s.levels.length;return s.levels=a?r:s.levels,0===s.levels.length&&(s.playlistParsingError=new Error("no levels found in manifest")),s}static parseMasterPlaylistMedia(t,e,s){let r;const i={},n=s.levels,a={AUDIO:n.map(t=>({id:t.attrs.AUDIO,audioCodec:t.audioCodec})),SUBTITLES:n.map(t=>({id:t.attrs.SUBTITLES,textCodec:t.textCodec})),"CLOSED-CAPTIONS":[]};let o=0;for(jt.lastIndex=0;null!==(r=jt.exec(t));){const t=new AttrList(r[1]),n=t.TYPE;if(n){const r=a[n],l=i[n]||[];i[n]=l,_t(s,t,["URI","GROUP-ID","LANGUAGE","ASSOC-LANGUAGE","STABLE-RENDITION-ID","NAME","INSTREAM-ID","CHARACTERISTICS","CHANNELS"]);const h=t.LANGUAGE,d=t["ASSOC-LANGUAGE"],c=t.CHANNELS,u=t.CHARACTERISTICS,f=t["INSTREAM-ID"],g={attrs:t,bitrate:0,id:o++,groupId:t["GROUP-ID"]||"",name:t.NAME||h||"",type:n,default:t.bool("DEFAULT"),autoselect:t.bool("AUTOSELECT"),forced:t.bool("FORCED"),lang:h,url:t.URI?M3U8Parser.resolve(t.URI,e):""};if(d&&(g.assocLang=d),c&&(g.channels=c),u&&(g.characteristics=u),f&&(g.instreamId=f),null!=r&&r.length){const t=M3U8Parser.findGroup(r,g.groupId)||r[0];ee(g,t,"audioCodec"),ee(g,t,"textCodec")}l.push(g)}}return i}static parseLevelPlaylist(t,e,s,r,i,n){const a=new LevelDetails(e),h=a.fragments;let d,c,u,f=null,g=0,m=0,p=0,y=0,v=null,T=new Fragment(r,e),S=-1,L=!1,A=null;for(zt.lastIndex=0,a.m3u8=t,a.hasVariableRefs=It(t);null!==(d=zt.exec(t));){L&&(L=!1,T=new Fragment(r,e),T.start=p,T.sn=g,T.cc=y,T.level=s,f&&(T.initSegment=f,T.rawProgramDateTime=f.rawProgramDateTime,f.rawProgramDateTime=null,A&&(T.setByteRange(A),A=null)));const t=d[1];if(t){T.duration=parseFloat(t);const e=(" "+d[2]).slice(1);T.title=e||null,T.tagList.push(e?["INF",t,e]:["INF",t])}else if(d[3]){if(l(T.duration)){T.start=p,u&&ie(T,u,a),T.sn=g,T.level=s,T.cc=y,h.push(T);const t=(" "+d[3]).slice(1);T.relurl=Mt(a,t),se(T,v),v=T,p+=T.duration,g++,m=0,L=!0}}else if(d[4]){const t=(" "+d[4]).slice(1);v?T.setByteRange(t,v):T.setByteRange(t)}else if(d[5])T.rawProgramDateTime=(" "+d[5]).slice(1),T.tagList.push(["PROGRAM-DATE-TIME",T.rawProgramDateTime]),-1===S&&(S=h.length);else{if(d=d[0].match(Qt),!d){E.warn("No matches on slow regex match for level playlist!");continue}for(c=1;c<d.length&&void 0===d[c];c++);const t=(" "+d[c]).slice(1),i=(" "+d[c+1]).slice(1),p=d[c+2]?(" "+d[c+2]).slice(1):"";switch(t){case"PLAYLIST-TYPE":a.type=i.toUpperCase();break;case"MEDIA-SEQUENCE":g=a.startSN=parseInt(i);break;case"SKIP":{const t=new AttrList(i);_t(a,t,["RECENTLY-REMOVED-DATERANGES"]);const e=t.decimalInteger("SKIPPED-SEGMENTS");if(l(e)){a.skippedSegments=e;for(let t=e;t--;)h.unshift(null);g+=e}const s=t.enumeratedString("RECENTLY-REMOVED-DATERANGES");s&&(a.recentlyRemovedDateranges=s.split("\t"));break}case"TARGETDURATION":a.targetduration=Math.max(parseInt(i),1);break;case"VERSION":a.version=parseInt(i);break;case"INDEPENDENT-SEGMENTS":case"EXTM3U":break;case"ENDLIST":a.live=!1;break;case"#":(i||p)&&T.tagList.push(p?[i,p]:[i]);break;case"DISCONTINUITY":y++,T.tagList.push(["DIS"]);break;case"GAP":T.gap=!0,T.tagList.push([t]);break;case"BITRATE":T.tagList.push([t,i]);break;case"DATERANGE":{const t=new AttrList(i);_t(a,t,["ID","CLASS","START-DATE","END-DATE","SCTE35-CMD","SCTE35-OUT","SCTE35-IN"]),_t(a,t,t.clientAttrs);const e=new DateRange(t,a.dateRanges[t.ID]);e.isValid||a.skippedSegments?a.dateRanges[e.id]=e:E.warn(`Ignoring invalid DATERANGE tag: "${i}"`),T.tagList.push(["EXT-X-DATERANGE",i]);break}case"DEFINE":{const t=new AttrList(i);_t(a,t,["NAME","VALUE","IMPORT","QUERYPARAM"]),"IMPORT"in t?Ft(a,t,n):xt(a,t,e)}break;case"DISCONTINUITY-SEQUENCE":y=parseInt(i);break;case"KEY":{const t=Jt(i,e,a);if(t.isSupported()){if("NONE"===t.method){u=void 0;break}u||(u={}),u[t.keyFormat]&&(u=o({},u)),u[t.keyFormat]=t}else E.warn(`[Keys] Ignoring invalid EXT-X-KEY tag: "${i}"`);break}case"START":a.startTimeOffset=Zt(i);break;case"MAP":{const t=new AttrList(i);if(_t(a,t,["BYTERANGE","URI"]),T.duration){const i=new Fragment(r,e);re(i,t,s,u),f=i,T.initSegment=f,f.rawProgramDateTime&&!T.rawProgramDateTime&&(T.rawProgramDateTime=f.rawProgramDateTime)}else{const e=T.byteRangeEndOffset;if(e){const t=T.byteRangeStartOffset;A=`${e-t}@${t}`}else A=null;re(T,t,s,u),f=T,L=!0}break}case"SERVER-CONTROL":{const t=new AttrList(i);a.canBlockReload=t.bool("CAN-BLOCK-RELOAD"),a.canSkipUntil=t.optionalFloat("CAN-SKIP-UNTIL",0),a.canSkipDateRanges=a.canSkipUntil>0&&t.bool("CAN-SKIP-DATERANGES"),a.partHoldBack=t.optionalFloat("PART-HOLD-BACK",0),a.holdBack=t.optionalFloat("HOLD-BACK",0);break}case"PART-INF":{const t=new AttrList(i);a.partTarget=t.decimalFloatingPoint("PART-TARGET");break}case"PART":{let t=a.partList;t||(t=a.partList=[]);const s=m>0?t[t.length-1]:void 0,r=m++,n=new AttrList(i);_t(a,n,["BYTERANGE","URI"]);const o=new Part(n,T,e,r,s);t.push(o),T.duration+=o.duration;break}case"PRELOAD-HINT":{const t=new AttrList(i);_t(a,t,["URI"]),a.preloadHint=t;break}case"RENDITION-REPORT":{const t=new AttrList(i);_t(a,t,["URI"]),a.renditionReports=a.renditionReports||[],a.renditionReports.push(t);break}default:E.warn("line parsed but not handled: "+d)}}}v&&!v.relurl?(h.pop(),p-=v.duration,a.partList&&(a.fragmentHint=v)):a.partList&&(se(T,v),T.cc=y,a.fragmentHint=T,u&&ie(T,u,a));const R=h.length,b=h[0],k=h[R-1];if(p+=a.skippedSegments*a.targetduration,p>0&&R&&k){a.averagetargetduration=p/R;const t=k.sn;a.endSN="initSegment"!==t?t:0,a.live||(k.endList=!0),b&&(a.startCC=b.cc)}else a.endSN=0,a.startCC=0;return a.fragmentHint&&(p+=a.fragmentHint.duration),a.totalduration=p,a.endCC=y,S>0&&function(t,e){let s=t[e];for(let r=e;r--;){const e=t[r];if(!e)return;e.programDateTime=s.programDateTime-1e3*e.duration,s=e}}(h,S),a}}function Jt(t,e,s){var r,i;const n=new AttrList(t);_t(s,n,["KEYFORMAT","KEYFORMATVERSIONS","URI","IV","URI"]);const a=null!=(r=n.METHOD)?r:"",o=n.URI,l=n.hexadecimalInteger("IV"),h=n.KEYFORMATVERSIONS,d=null!=(i=n.KEYFORMAT)?i:"identity";o&&n.IV&&!l&&E.error("Invalid IV: "+n.IV);const c=o?M3U8Parser.resolve(o,e):"",u=(h||"1").split("/").map(Number).filter(Number.isFinite);return new LevelKey(a,c,d,u,l)}function Zt(t){const e=new AttrList(t).decimalFloatingPoint("TIME-OFFSET");return l(e)?e:null}function te(t,e){let s=(t||"").split(/[ ,]+/).filter(t=>t);["video","audio","text"].forEach(t=>{const r=s.filter(e=>function(t,e){const s=Nt[e];return!!s&&!!s[t.slice(0,4)]}(e,t));r.length&&(e[t+"Codec"]=r.join(","),s=s.filter(t=>-1===r.indexOf(t)))}),e.unknownCodecs=s}function ee(t,e,s){const r=e[s];r&&(t[s]=r)}function se(t,e){t.rawProgramDateTime?t.programDateTime=Date.parse(t.rawProgramDateTime):null!=e&&e.programDateTime&&(t.programDateTime=e.endProgramDateTime),l(t.programDateTime)||(t.programDateTime=null,t.rawProgramDateTime=null)}function re(t,e,s,r){t.relurl=e.URI,e.BYTERANGE&&t.setByteRange(e.BYTERANGE),t.level=s,t.sn="initSegment",r&&(t.levelkeys=r),t.initSegment=null}function ie(t,e,s){t.levelkeys=e;const{encryptedFragments:r}=s;r.length&&r[r.length-1].levelkeys===e||!Object.keys(e).some(t=>e[t].isCommonEncryption)||r.push(t)}var ne="manifest",ae="level",oe="audioTrack",le="subtitleTrack",he="main",de="audio",ce="subtitle";function ue(t){const{type:e}=t;switch(e){case oe:return de;case le:return ce;default:return he}}function fe(t,e){let s=t.url;return void 0!==s&&0!==s.indexOf("data:")||(s=e.url),s}class PlaylistLoader{constructor(t){this.hls=void 0,this.loaders=Object.create(null),this.variableList=null,this.hls=t,this.registerListeners()}startLoad(t){}stopLoad(){this.destroyInternalLoaders()}registerListeners(){const{hls:t}=this;t.on(c.MANIFEST_LOADING,this.onManifestLoading,this),t.on(c.LEVEL_LOADING,this.onLevelLoading,this),t.on(c.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),t.on(c.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this)}unregisterListeners(){const{hls:t}=this;t.off(c.MANIFEST_LOADING,this.onManifestLoading,this),t.off(c.LEVEL_LOADING,this.onLevelLoading,this),t.off(c.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),t.off(c.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this)}createInternalLoader(t){const e=this.hls.config,s=e.pLoader,r=e.loader,i=new(s||r)(e);return this.loaders[t.type]=i,i}getInternalLoader(t){return this.loaders[t.type]}resetInternalLoader(t){this.loaders[t]&&delete this.loaders[t]}destroyInternalLoaders(){for(const t in this.loaders){const e=this.loaders[t];e&&e.destroy(),this.resetInternalLoader(t)}}destroy(){this.variableList=null,this.unregisterListeners(),this.destroyInternalLoaders()}onManifestLoading(t,e){const{url:s}=e;this.variableList=null,this.load({id:null,level:0,responseType:"text",type:ne,url:s,deliveryDirectives:null})}onLevelLoading(t,e){const{id:s,level:r,pathwayId:i,url:n,deliveryDirectives:a}=e;this.load({id:s,level:r,pathwayId:i,responseType:"text",type:ae,url:n,deliveryDirectives:a})}onAudioTrackLoading(t,e){const{id:s,groupId:r,url:i,deliveryDirectives:n}=e;this.load({id:s,groupId:r,level:null,responseType:"text",type:oe,url:i,deliveryDirectives:n})}onSubtitleTrackLoading(t,e){const{id:s,groupId:r,url:i,deliveryDirectives:n}=e;this.load({id:s,groupId:r,level:null,responseType:"text",type:le,url:i,deliveryDirectives:n})}load(t){var e;const s=this.hls.config;let r,i=this.getInternalLoader(t);if(i){const e=i.context;if(e&&e.url===t.url&&e.level===t.level)return void E.trace("[playlist-loader]: playlist request ongoing");E.log("[playlist-loader]: aborting previous loader for type: "+t.type),i.abort()}if(r=t.type===ne?s.manifestLoadPolicy.default:o({},s.playlistLoadPolicy.default,{timeoutRetry:null,errorRetry:null}),i=this.createInternalLoader(t),l(null==(e=t.deliveryDirectives)?void 0:e.part)){let e;if(t.type===ae&&null!==t.level?e=this.hls.levels[t.level].details:t.type===oe&&null!==t.id?e=this.hls.audioTracks[t.id].details:t.type===le&&null!==t.id&&(e=this.hls.subtitleTracks[t.id].details),e){const t=e.partTarget,s=e.targetduration;if(t&&s){const e=1e3*Math.max(3*t,.8*s);r=o({},r,{maxTimeToFirstByteMs:Math.min(e,r.maxTimeToFirstByteMs),maxLoadTimeMs:Math.min(e,r.maxTimeToFirstByteMs)})}}}const n=r.errorRetry||r.timeoutRetry||{},a={loadPolicy:r,timeout:r.maxLoadTimeMs,maxRetry:n.maxNumRetry||0,retryDelay:n.retryDelayMs||0,maxRetryDelay:n.maxRetryDelayMs||0},h={onSuccess:(t,e,s,r)=>{const i=this.getInternalLoader(s);this.resetInternalLoader(s.type);const n=t.data;0===n.indexOf("#EXTM3U")?(e.parsing.start=performance.now(),M3U8Parser.isMediaPlaylist(n)?this.handleTrackOrLevelPlaylist(t,e,s,r||null,i):this.handleMasterPlaylist(t,e,s,r)):this.handleManifestParsingError(t,s,new Error("no EXTM3U delimiter"),r||null,e)},onError:(t,e,s,r)=>{this.handleNetworkError(e,s,!1,t,r)},onTimeout:(t,e,s)=>{this.handleNetworkError(e,s,!0,void 0,t)}};i.load(t,a,h)}handleMasterPlaylist(t,e,s,r){const i=this.hls,n=t.data,a=fe(t,s),o=M3U8Parser.parseMasterPlaylist(n,a);if(o.playlistParsingError)return void this.handleManifestParsingError(t,s,o.playlistParsingError,r,e);const{contentSteering:l,levels:h,sessionData:d,sessionKeys:u,startTimeOffset:f,variableList:g}=o;this.variableList=g;const{AUDIO:m=[],SUBTITLES:p,"CLOSED-CAPTIONS":y}=M3U8Parser.parseMasterPlaylistMedia(n,a,o);if(m.length){m.some(t=>!t.url)||!h[0].audioCodec||h[0].attrs.AUDIO||(E.log("[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one"),m.unshift({type:"main",name:"main",groupId:"main",default:!1,autoselect:!1,forced:!1,id:-1,attrs:new AttrList({}),bitrate:0,url:""}))}i.trigger(c.MANIFEST_LOADED,{levels:h,audioTracks:m,subtitles:p,captions:y,contentSteering:l,url:a,stats:e,networkDetails:r,sessionData:d,sessionKeys:u,startTimeOffset:f,variableList:g})}handleTrackOrLevelPlaylist(t,e,s,r,i){const n=this.hls,{id:a,level:o,type:h}=s,d=fe(t,s),u=l(o)?o:l(a)?a:0,f=ue(s),g=M3U8Parser.parseLevelPlaylist(t.data,d,u,f,0,this.variableList);if(h===ne){const t={attrs:new AttrList({}),bitrate:0,details:g,name:"",url:d};n.trigger(c.MANIFEST_LOADED,{levels:[t],audioTracks:[],url:d,stats:e,networkDetails:r,sessionData:null,sessionKeys:null,contentSteering:null,startTimeOffset:null,variableList:null})}e.parsing.end=performance.now(),s.levelDetails=g,this.handlePlaylistLoaded(g,t,e,s,r,i)}handleManifestParsingError(t,e,s,r,i){this.hls.trigger(c.ERROR,{type:u.NETWORK_ERROR,details:f.MANIFEST_PARSING_ERROR,fatal:e.type===ne,url:t.url,err:s,error:s,reason:s.message,response:t,context:e,networkDetails:r,stats:i})}handleNetworkError(t,e,s=!1,r,n){let a=`A network ${s?"timeout":"error"+(r?" (status "+r.code+")":"")} occurred while loading ${t.type}`;t.type===ae?a+=`: ${t.level} id: ${t.id}`:t.type!==oe&&t.type!==le||(a+=` id: ${t.id} group-id: "${t.groupId}"`);const o=new Error(a);E.warn("[playlist-loader]: "+a);let l=f.UNKNOWN,h=!1;const d=this.getInternalLoader(t);switch(t.type){case ne:l=s?f.MANIFEST_LOAD_TIMEOUT:f.MANIFEST_LOAD_ERROR,h=!0;break;case ae:l=s?f.LEVEL_LOAD_TIMEOUT:f.LEVEL_LOAD_ERROR,h=!1;break;case oe:l=s?f.AUDIO_TRACK_LOAD_TIMEOUT:f.AUDIO_TRACK_LOAD_ERROR,h=!1;break;case le:l=s?f.SUBTITLE_TRACK_LOAD_TIMEOUT:f.SUBTITLE_LOAD_ERROR,h=!1}d&&this.resetInternalLoader(t.type);const g={type:u.NETWORK_ERROR,details:l,fatal:h,url:t.url,loader:d,context:t,error:o,networkDetails:e,stats:n};if(r){const s=(null==e?void 0:e.url)||t.url;g.response=i({url:s,data:void 0},r)}this.hls.trigger(c.ERROR,g)}handlePlaylistLoaded(t,e,s,r,i,n){const a=this.hls,{type:o,level:l,id:h,groupId:d,deliveryDirectives:g}=r,m=fe(e,r),p=ue(r),y="number"==typeof r.level&&p===he?l:void 0;if(!t.fragments.length){const t=new Error("No Segments found in Playlist");return void a.trigger(c.ERROR,{type:u.NETWORK_ERROR,details:f.LEVEL_EMPTY_ERROR,fatal:!1,url:m,error:t,reason:t.message,response:e,context:r,level:y,parent:p,networkDetails:i,stats:s})}t.targetduration||(t.playlistParsingError=new Error("Missing Target Duration"));const E=t.playlistParsingError;if(E)a.trigger(c.ERROR,{type:u.NETWORK_ERROR,details:f.LEVEL_PARSING_ERROR,fatal:!1,url:m,error:E,reason:E.message,response:e,context:r,level:y,parent:p,networkDetails:i,stats:s});else switch(t.live&&n&&(n.getCacheAge&&(t.ageHeader=n.getCacheAge()||0),n.getCacheAge&&!isNaN(t.ageHeader)||(t.ageHeader=0)),o){case ne:case ae:a.trigger(c.LEVEL_LOADED,{details:t,level:y||0,id:h||0,stats:s,networkDetails:i,deliveryDirectives:g});break;case oe:a.trigger(c.AUDIO_TRACK_LOADED,{details:t,id:h||0,groupId:d||"",stats:s,networkDetails:i,deliveryDirectives:g});break;case le:a.trigger(c.SUBTITLE_TRACK_LOADED,{details:t,id:h||0,groupId:d||"",stats:s,networkDetails:i,deliveryDirectives:g})}}}function ge(t,e){let s;try{s=new