boss-web-player-sdk 1.1.19 → 1.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/boss-web-player-sdk.css +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.d.ts +5 -17
- package/dist/core.js +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +46 -24
- package/dist/index.js +914 -817
- package/dist/index.js.map +1 -1
- package/dist/{src-IKWezLNW.js → src-B8eoxemB.js} +13 -12
- package/dist/{src-IKWezLNW.js.map → src-B8eoxemB.js.map} +1 -1
- package/dist/{src-Blzb5K-0.cjs → src-BXp0h90r.cjs} +5 -5
- package/dist/{src-Blzb5K-0.cjs.map → src-BXp0h90r.cjs.map} +1 -1
- package/package.json +1 -1
|
@@ -37,13 +37,13 @@ Schedule: ${o.map(e=>Cc(e))} pos: ${this.timelinePos}`),c.length&&this.log(`Remo
|
|
|
37
37
|
`).split(`
|
|
38
38
|
`),l=[],u=t?Pa(t.baseTime,t.timescale):0,d=`00:00.000`,f=0,p=0,m,h=!0;s.oncue=function(e){let a=n[r],o=n.ccOffset,s=(f-u)/9e4;if(a!=null&&a.new&&(p===void 0?dl(n,r,s):o=n.ccOffset=a.start),s){if(!t){m=Error(`Missing initPTS for VTT MPEGTS`);return}o=s-n.presentationOffset}let c=e.endTime-e.startTime,d=Wa((e.startTime+o-p)*9e4,i*9e4)/9e4;e.startTime=Math.max(d,0),e.endTime=Math.max(d+c,0);let h=e.text.trim();e.text=decodeURIComponent(encodeURIComponent(h)),e.id||=ul(e.startTime,e.endTime,h),e.endTime>0&&l.push(e)},s.onparsingerror=function(e){m=e},s.onflush=function(){if(m){o(m);return}a(l)},c.forEach(e=>{if(h)if(cl(e,`X-TIMESTAMP-MAP=`)){h=!1,e.slice(16).split(`,`).forEach(e=>{cl(e,`LOCAL:`)?d=e.slice(6):cl(e,`MPEGTS:`)&&(f=parseInt(e.slice(7)))});try{p=ll(d)/1e3}catch(e){m=e}return}else e===``&&(h=!1);s.parse(e+`
|
|
39
39
|
`)}),s.flush()}var pl=`stpp.ttml.im1t`,ml=/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/,hl=/^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/,gl={left:`start`,center:`center`,right:`end`,start:`start`,end:`end`};function _l(e,t,n,r){let i=B(new Uint8Array(e),[`mdat`]);if(i.length===0){r(Error(`Could not parse IMSC1 mdat`));return}let a=i.map(e=>O(e)),o=Ma(t.baseTime,1,t.timescale);try{a.forEach(e=>n(vl(e,o)))}catch(e){r(e)}}function vl(e,t){let n=new DOMParser().parseFromString(e,`text/xml`).getElementsByTagName(`tt`)[0];if(!n)throw Error(`Invalid ttml`);let r={frameRate:30,subFrameRate:1,frameRateMultiplier:0,tickRate:0},i=Object.keys(r).reduce((e,t)=>(e[t]=n.getAttribute(`ttp:${t}`)||r[t],e),{}),a=n.getAttribute(`xml:space`)!==`preserve`,o=bl(yl(n,`styling`,`style`)),s=bl(yl(n,`layout`,`region`)),c=yl(n,`body`,`[begin]`);return[].map.call(c,e=>{let n=xl(e,a);if(!n||!e.hasAttribute(`begin`))return null;let r=Tl(e.getAttribute(`begin`),i),c=Tl(e.getAttribute(`dur`),i),l=Tl(e.getAttribute(`end`),i);if(r===null)throw wl(e);if(l===null){if(c===null)throw wl(e);l=r+c}let u=new Zc(r-t,l-t,n);u.id=ul(u.startTime,u.endTime,u.text);let f=s[e.getAttribute(`region`)],p=o[e.getAttribute(`style`)],m=Sl(f,p,o),{textAlign:h}=m;if(h){let e=gl[h];e&&(u.lineAlign=e),u.align=h}return d(u,m),u}).filter(e=>e!==null)}function yl(e,t,n){let r=e.getElementsByTagName(t)[0];return r?[].slice.call(r.querySelectorAll(n)):[]}function bl(e){return e.reduce((e,t)=>{let n=t.getAttribute(`xml:id`);return n&&(e[n]=t),e},{})}function xl(e,t){return[].slice.call(e.childNodes).reduce((e,n,r)=>{var i;return n.nodeName===`br`&&r?e+`
|
|
40
|
-
`:(i=n.childNodes)!=null&&i.length?xl(n,t):t?e+n.textContent.trim().replace(/\s+/g,` `):e+n.textContent},``)}function Sl(e,t,n){let r=`http://www.w3.org/ns/ttml#styling`,i=null,a=[`displayAlign`,`textAlign`,`color`,`backgroundColor`,`fontSize`,`fontFamily`],o=e!=null&&e.hasAttribute(`style`)?e.getAttribute(`style`):null;return o&&n.hasOwnProperty(o)&&(i=n[o]),a.reduce((n,a)=>{let o=Cl(t,r,a)||Cl(e,r,a)||Cl(i,r,a);return o&&(n[a]=o),n},{})}function Cl(e,t,n){return e&&e.hasAttributeNS(t,n)?e.getAttributeNS(t,n):null}function wl(e){return Error(`Could not parse ttml timestamp ${e}`)}function Tl(e,t){if(!e)return null;let n=$c(e);return n===null&&(ml.test(e)?n=El(e,t):hl.test(e)&&(n=Dl(e,t))),n}function El(e,t){let n=ml.exec(e),r=(n[4]|0)+(n[5]|0)/t.subFrameRate;return(n[1]|0)*3600+(n[2]|0)*60+(n[3]|0)+r/t.frameRate}function Dl(e,t){let n=hl.exec(e),r=Number(n[1]);switch(n[2]){case`h`:return r*3600;case`m`:return r*60;case`ms`:return r*1e3;case`f`:return r/t.frameRate;case`t`:return r/t.tickRate}return r}var Ol=class{constructor(e,t){this.timelineController=void 0,this.cueRanges=[],this.trackName=void 0,this.startTime=null,this.endTime=null,this.screen=null,this.timelineController=e,this.trackName=t}dispatchCue(){this.startTime!==null&&(this.timelineController.addCues(this.trackName,this.startTime,this.endTime,this.screen,this.cueRanges),this.startTime=null)}newCue(e,t,n){(this.startTime===null||this.startTime>e)&&(this.startTime=e),this.endTime=t,this.screen=n,this.timelineController.createCaptionsTrack(this.trackName)}reset(){this.cueRanges=[],this.startTime=null}},kl=class{constructor(e){this.hls=void 0,this.media=null,this.config=void 0,this.enabled=!0,this.Cues=void 0,this.textTracks=[],this.tracks=[],this.initPTS=[],this.unparsedVttFrags=[],this.captionsTracks={},this.nonNativeCaptionsTracks={},this.cea608Parser1=void 0,this.cea608Parser2=void 0,this.lastCc=-1,this.lastSn=-1,this.lastPartIndex=-1,this.prevCC=-1,this.vttCCs=Nl(),this.captionsProperties=void 0,this.hls=e,this.config=e.config,this.Cues=e.config.cueHandler,this.captionsProperties={textTrack1:{label:this.config.captionsTextTrack1Label,languageCode:this.config.captionsTextTrack1LanguageCode},textTrack2:{label:this.config.captionsTextTrack2Label,languageCode:this.config.captionsTextTrack2LanguageCode},textTrack3:{label:this.config.captionsTextTrack3Label,languageCode:this.config.captionsTextTrack3LanguageCode},textTrack4:{label:this.config.captionsTextTrack4Label,languageCode:this.config.captionsTextTrack4LanguageCode}},e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(a.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.on(a.FRAG_LOADING,this.onFragLoading,this),e.on(a.FRAG_LOADED,this.onFragLoaded,this),e.on(a.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.on(a.FRAG_DECRYPTED,this.onFragDecrypted,this),e.on(a.INIT_PTS_FOUND,this.onInitPtsFound,this),e.on(a.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this)}destroy(){let{hls:e}=this;e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(a.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.off(a.FRAG_LOADING,this.onFragLoading,this),e.off(a.FRAG_LOADED,this.onFragLoaded,this),e.off(a.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.off(a.FRAG_DECRYPTED,this.onFragDecrypted,this),e.off(a.INIT_PTS_FOUND,this.onInitPtsFound,this),e.off(a.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this),this.hls=this.config=this.media=null,this.cea608Parser1=this.cea608Parser2=void 0}initCea608Parsers(){let e=new Ol(this,`textTrack1`),t=new Ol(this,`textTrack2`),n=new Ol(this,`textTrack3`),r=new Ol(this,`textTrack4`);this.cea608Parser1=new qc(1,e,t),this.cea608Parser2=new qc(3,n,r)}addCues(e,t,n,r,i){let o=!1;for(let e=i.length;e--;){let r=i[e],a=Ml(r[0],r[1],t,n);if(a>=0&&(r[0]=Math.min(r[0],t),r[1]=Math.max(r[1],n),o=!0,a/(n-t)>.5))return}if(o||i.push([t,n]),this.config.renderTextTracksNatively){let i=this.captionsTracks[e];this.Cues.newCue(i,t,n,r)}else{let i=this.Cues.newCue(null,t,n,r);this.hls.trigger(a.CUES_PARSED,{type:`captions`,cues:i,track:e})}}onInitPtsFound(e,{frag:t,id:n,initPTS:r,timescale:i,trackId:o}){let{unparsedVttFrags:c}=this;n===s.MAIN&&(this.initPTS[t.cc]={baseTime:r,timescale:i,trackId:o}),c.length&&(this.unparsedVttFrags=[],c.forEach(e=>{this.initPTS[e.frag.cc]?this.onFragLoaded(a.FRAG_LOADED,e):this.hls.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:e.frag,error:Error(`Subtitle discontinuity domain does not match main`)})}))}getExistingTrack(e,t){let{media:n}=this;if(n)for(let r=0;r<n.textTracks.length;r++){let i=n.textTracks[r];if(jl(i,{name:e,lang:t,characteristics:`transcribes-spoken-dialog,describes-music-and-sound`}))return i}return null}createCaptionsTrack(e){this.config.renderTextTracksNatively?this.createNativeTrack(e):this.createNonNativeTrack(e)}createNativeTrack(e){if(this.captionsTracks[e])return;let{captionsProperties:t,captionsTracks:n,media:r}=this,{label:i,languageCode:a}=t[e],o=this.getExistingTrack(i,a);if(o)n[e]=o,rc(n[e]),tc(n[e],r);else{let t=this.createTextTrack(`captions`,i,a);t&&(t[e]=!0,n[e]=t)}}createNonNativeTrack(e){if(this.nonNativeCaptionsTracks[e])return;let t=this.captionsProperties[e];if(!t)return;let n={_id:e,label:t.label,kind:`captions`,default:t.media?!!t.media.default:!1,closedCaptions:t.media};this.nonNativeCaptionsTracks[e]=n,this.hls.trigger(a.NON_NATIVE_TEXT_TRACKS_FOUND,{tracks:[n]})}createTextTrack(e,t,n){let r=this.media;if(r)return r.addTextTrack(e,t,n)}onMediaAttaching(e,t){this.media=t.media,t.mediaSource||this._cleanTracks()}onMediaDetaching(e,t){let n=!!t.transferMedia;if(this.media=null,n)return;let{captionsTracks:r}=this;Object.keys(r).forEach(e=>{rc(r[e]),delete r[e]}),this.nonNativeCaptionsTracks={}}onManifestLoading(){this.lastCc=-1,this.lastSn=-1,this.lastPartIndex=-1,this.prevCC=-1,this.vttCCs=Nl(),this._cleanTracks(),this.tracks=[],this.captionsTracks={},this.nonNativeCaptionsTracks={},this.textTracks=[],this.unparsedVttFrags=[],this.initPTS=[],this.cea608Parser1&&this.cea608Parser2&&(this.cea608Parser1.reset(),this.cea608Parser2.reset())}_cleanTracks(){let{media:e}=this;if(!e)return;let t=e.textTracks;if(t)for(let e=0;e<t.length;e++)rc(t[e])}onSubtitleTracksUpdated(e,t){let n=t.subtitleTracks||[],r=n.some(e=>e.textCodec===pl);if(this.config.enableWebVTT||r&&this.config.enableIMSC1){if(fo(this.tracks,n)){this.tracks=n;return}if(this.textTracks=[],this.tracks=n,this.config.renderTextTracksNatively){let e=this.media,t=e?sc(e.textTracks):null;if(this.tracks.forEach((e,n)=>{let r;if(t){let n=null;for(let r=0;r<t.length;r++)if(t[r]&&jl(t[r],e)){n=t[r],t[r]=null;break}n&&(r=n)}if(r)rc(r);else{let t=Al(e);r=this.createTextTrack(t,e.name,e.lang),r&&(r.mode=`disabled`)}r&&this.textTracks.push(r)}),t!=null&&t.length){let e=t.filter(e=>e!==null).map(e=>e.label);e.length&&this.hls.logger.warn(`Media element contains unused subtitle tracks: ${e.join(`, `)}. Replace media element for each source to clear TextTracks and captions menu.`)}}else if(this.tracks.length){let e=this.tracks.map(e=>({label:e.name,kind:e.type.toLowerCase(),default:e.default,subtitleTrack:e}));this.hls.trigger(a.NON_NATIVE_TEXT_TRACKS_FOUND,{tracks:e})}}}onManifestLoaded(e,t){this.config.enableCEA708Captions&&t.captions&&t.captions.forEach(e=>{let t=/(?:CC|SERVICE)([1-4])/.exec(e.instreamId);if(!t)return;let n=`textTrack${t[1]}`,r=this.captionsProperties[n];r&&(r.label=e.name,e.lang&&(r.languageCode=e.lang),r.media=e)})}closedCaptionsForLevel(e){return this.hls.levels[e.level]?.attrs[`CLOSED-CAPTIONS`]}onFragLoading(e,t){if(this.enabled&&t.frag.type===s.MAIN){let{cea608Parser1:e,cea608Parser2:n,lastSn:r}=this,{cc:i,sn:a}=t.frag,o=t.part?.index??-1;e&&n&&(a!==r+1||a===r&&o!==this.lastPartIndex+1||i!==this.lastCc)&&(e.reset(),n.reset()),this.lastCc=i,this.lastSn=a,this.lastPartIndex=o}}onFragLoaded(e,t){let{frag:n,payload:r}=t;if(n.type===s.SUBTITLE)if(r.byteLength){let e=n.decryptdata,i=`stats`in t;if(e==null||!e.encrypted||i){let e=this.tracks[n.level],i=this.vttCCs;i[n.cc]||(i[n.cc]={start:n.start,prevCC:this.prevCC,new:!0},this.prevCC=n.cc),e&&e.textCodec===pl?this._parseIMSC1(n,r):this._parseVTTs(t)}}else this.hls.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:n,error:Error(`Empty subtitle payload`)})}_parseIMSC1(e,t){let n=this.hls;_l(t,this.initPTS[e.cc],t=>{this._appendCues(t,e.level),n.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:e})},t=>{n.logger.log(`Failed to parse IMSC1: ${t}`),n.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:e,error:t})})}_parseVTTs(e){var t;let{frag:n,payload:r}=e,{initPTS:i,unparsedVttFrags:o}=this,s=i.length-1;if(!i[n.cc]&&s===-1){o.push(e);return}let c=this.hls;fl((t=n.initSegment)!=null&&t.data?De(n.initSegment.data,new Uint8Array(r)).buffer:r,this.initPTS[n.cc],this.vttCCs,n.cc,n.start,e=>{this._appendCues(e,n.level),c.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:n})},t=>{let i=t.message===`Missing initPTS for VTT MPEGTS`;i?o.push(e):this._fallbackToIMSC1(n,r),c.logger.log(`Failed to parse VTT cue: ${t}`),!(i&&s>n.cc)&&c.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:n,error:t})})}_fallbackToIMSC1(e,t){let n=this.tracks[e.level];n.textCodec||_l(t,this.initPTS[e.cc],()=>{n.textCodec=pl,this._parseIMSC1(e,t)},()=>{n.textCodec=`wvtt`})}_appendCues(e,t){let n=this.hls;if(this.config.renderTextTracksNatively){let n=this.textTracks[t];if(!n||n.mode===`disabled`)return;e.forEach(e=>nc(n,e))}else{let r=this.tracks[t];if(!r)return;let i=r.default?`default`:`subtitles`+t;n.trigger(a.CUES_PARSED,{type:`subtitles`,cues:e,track:i})}}onFragDecrypted(e,t){let{frag:n}=t;n.type===s.SUBTITLE&&this.onFragLoaded(a.FRAG_LOADED,t)}onSubtitleTracksCleared(){this.tracks=[],this.captionsTracks={}}onFragParsingUserdata(e,t){if(!this.enabled||!this.config.enableCEA708Captions)return;let{frag:n,samples:r}=t;if(!(n.type===s.MAIN&&this.closedCaptionsForLevel(n)===`NONE`))for(let e=0;e<r.length;e++){let t=r[e].bytes;if(t){this.cea608Parser1||this.initCea608Parsers();let n=this.extractCea608Data(t);this.cea608Parser1.addData(r[e].pts,n[0]),this.cea608Parser2.addData(r[e].pts,n[1])}}}onBufferFlushing(e,{startOffset:t,endOffset:n,endOffsetSubtitles:r,type:i}){let{media:a}=this;if(!(!a||a.currentTime<n)){if(!i||i===`video`){let{captionsTracks:e}=this;Object.keys(e).forEach(r=>ic(e[r],t,n))}if(this.config.renderTextTracksNatively&&t===0&&r!==void 0){let{textTracks:e}=this;Object.keys(e).forEach(n=>ic(e[n],t,r))}}}extractCea608Data(e){let t=[[],[]],n=e[0]&31,r=2;for(let i=0;i<n;i++){let n=e[r++],i=127&e[r++],a=127&e[r++];if(!(i===0&&a===0)&&4&n){let e=3&n;(e===0||e===1)&&(t[e].push(i),t[e].push(a))}}return t}};function Al(e){return e.characteristics&&/transcribes-spoken-dialog/gi.test(e.characteristics)&&/describes-music-and-sound/gi.test(e.characteristics)?`captions`:`subtitles`}function jl(e,t){return!!e&&e.kind===Al(t)&&mo(t,e)}function Ml(e,t,n,r){return Math.min(t,r)-Math.max(e,n)}function Nl(){return{ccOffset:0,presentationOffset:0,0:{start:0,prevCC:-1,new:!0}}}var Pl=/\s/,Fl={newCue(e,t,n,r){let i=[],a,o,s,c,l,u=self.VTTCue||self.TextTrackCue;for(let f=0;f<r.rows.length;f++)if(a=r.rows[f],s=!0,c=0,l=``,!a.isEmpty()){var d;for(let e=0;e<a.chars.length;e++)Pl.test(a.chars[e].uchar)&&s?c++:(l+=a.chars[e].uchar,s=!1);a.cueStartTime=t,t===n&&(n+=1e-4),c>=16?c--:c++;let r=al(l.trim()),p=ul(t,n,r);e!=null&&(d=e.cues)!=null&&d.getCueById(p)||(o=new u(t,n,r),o.id=p,o.line=f+1,o.align=`left`,o.position=10+Math.min(80,Math.floor(c*8/32)*10),i.push(o))}return e&&i.length&&(i.sort((e,t)=>e.line===`auto`||t.line===`auto`?0:e.line>8&&t.line>8?t.line-e.line:e.line-t.line),i.forEach(t=>nc(e,t))),i}};function Il(){if(self.fetch&&self.AbortController&&self.ReadableStream&&self.Request)try{return new self.ReadableStream({}),!0}catch{}return!1}var Ll=/(\d+)-(\d+)\/(\d+)/,Rl=class{constructor(e){this.fetchSetup=void 0,this.requestTimeout=void 0,this.request=null,this.response=null,this.controller=void 0,this.context=null,this.config=null,this.callbacks=null,this.stats=void 0,this.loader=null,this.fetchSetup=e.fetchSetup||Hl,this.controller=new self.AbortController,this.stats=new ee}destroy(){this.loader=this.callbacks=this.context=this.config=this.request=null,this.abortInternal(),this.response=null,this.fetchSetup=this.controller=this.stats=null}abortInternal(){this.controller&&!this.stats.loading.end&&(this.stats.aborted=!0,this.controller.abort())}abort(){var e;this.abortInternal(),(e=this.callbacks)!=null&&e.onAbort&&this.callbacks.onAbort(this.stats,this.context,this.response)}load(t,n,r){let i=this.stats;if(i.loading.start)throw Error(`Loader can only be used once.`);i.loading.start=self.performance.now();let a=zl(t,this.controller.signal),o=t.responseType===`arraybuffer`,s=o?`byteLength`:`length`,{maxTimeToFirstByteMs:c,maxLoadTimeMs:l}=n.loadPolicy;this.context=t,this.config=n,this.callbacks=r,this.request=this.fetchSetup(t,a),self.clearTimeout(this.requestTimeout),n.timeout=c&&e(c)?c:l,this.requestTimeout=self.setTimeout(()=>{this.callbacks&&(this.abortInternal(),this.callbacks.onTimeout(i,t,this.response))},n.timeout),(ro(this.request)?this.request.then(self.fetch):self.fetch(this.request)).then(r=>{this.response=this.loader=r;let a=Math.max(self.performance.now(),i.loading.start);if(self.clearTimeout(this.requestTimeout),n.timeout=l,this.requestTimeout=self.setTimeout(()=>{this.callbacks&&(this.abortInternal(),this.callbacks.onTimeout(i,t,this.response))},l-(a-i.loading.start)),!r.ok){let{status:e,statusText:t}=r;throw new Ul(t||`fetch, bad network response`,e,r)}i.loading.first=a,i.total=Vl(r.headers)||i.total;let s=this.callbacks?.onProgress;return s&&e(n.highWaterMark)?this.loadProgressively(r,i,t,n.highWaterMark,s):o?r.arrayBuffer():t.responseType===`json`?r.json():r.text()}).then(r=>{var a;let o=this.response;if(!o)throw Error(`loader destroyed`);self.clearTimeout(this.requestTimeout),i.loading.end=Math.max(self.performance.now(),i.loading.first);let c=r[s];c&&(i.loaded=i.total=c);let l={url:o.url,data:r,code:o.status},u=this.callbacks?.onProgress;u&&!e(n.highWaterMark)&&u(i,t,r,o),(a=this.callbacks)==null||a.onSuccess(l,i,t,o)}).catch(e=>{var n;if(self.clearTimeout(this.requestTimeout),i.aborted)return;let r=e&&e.code||0,a=e?e.message:null;(n=this.callbacks)==null||n.onError({code:r,text:a},t,e?e.details:null,i)})}getCacheAge(){let e=null;if(this.response){let t=this.response.headers.get(`age`);e=t?parseFloat(t):null}return e}getResponseHeader(e){return this.response?this.response.headers.get(e):null}loadProgressively(e,t,n,r=0,i){let a=new ti,o=e.body.getReader(),s=()=>o.read().then(o=>{if(o.done)return a.dataLength&&i(t,n,a.flush().buffer,e),Promise.resolve(new ArrayBuffer(0));let c=o.value,l=c.length;return t.loaded+=l,l<r||a.dataLength?(a.push(c),a.dataLength>=r&&i(t,n,a.flush().buffer,e)):i(t,n,c.buffer,e),s()}).catch(()=>Promise.reject());return s()}};function zl(e,t){let n={method:`GET`,mode:`cors`,credentials:`same-origin`,signal:t,headers:new self.Headers(d({},e.headers))};return e.rangeEnd&&n.headers.set(`Range`,`bytes=`+e.rangeStart+`-`+String(e.rangeEnd-1)),n}function Bl(e){let t=Ll.exec(e);if(t)return parseInt(t[2])-parseInt(t[1])+1}function Vl(t){let n=t.get(`Content-Range`);if(n){let t=Bl(n);if(e(t))return t}let r=t.get(`Content-Length`);if(r)return parseInt(r)}function Hl(e,t){return new self.Request(e.url,t)}var Ul=class extends Error{constructor(e,t,n){super(e),this.code=void 0,this.details=void 0,this.code=t,this.details=n}},Wl=/^age:\s*[\d.]+\s*$/im,Gl=class{constructor(e){this.xhrSetup=void 0,this.requestTimeout=void 0,this.retryTimeout=void 0,this.retryDelay=void 0,this.config=null,this.callbacks=null,this.context=null,this.loader=null,this.stats=void 0,this.xhrSetup=e&&e.xhrSetup||null,this.stats=new ee,this.retryDelay=0}destroy(){this.callbacks=null,this.abortInternal(),this.loader=null,this.config=null,this.context=null,this.xhrSetup=null}abortInternal(){let e=this.loader;self.clearTimeout(this.requestTimeout),self.clearTimeout(this.retryTimeout),e&&(e.onreadystatechange=null,e.onprogress=null,e.readyState!==4&&(this.stats.aborted=!0,e.abort()))}abort(){var e;this.abortInternal(),(e=this.callbacks)!=null&&e.onAbort&&this.callbacks.onAbort(this.stats,this.context,this.loader)}load(e,t,n){if(this.stats.loading.start)throw Error(`Loader can only be used once.`);this.stats.loading.start=self.performance.now(),this.context=e,this.config=t,this.callbacks=n,this.loadInternal()}loadInternal(){let{config:e,context:t}=this;if(!e||!t)return;let n=this.loader=new self.XMLHttpRequest,r=this.stats;r.loading.first=0,r.loaded=0,r.aborted=!1;let i=this.xhrSetup;i?Promise.resolve().then(()=>{if(!(this.loader!==n||this.stats.aborted))return i(n,t.url)}).catch(e=>{if(!(this.loader!==n||this.stats.aborted))return n.open(`GET`,t.url,!0),i(n,t.url)}).then(()=>{this.loader!==n||this.stats.aborted||this.openAndSendXhr(n,t,e)}).catch(e=>{var i;(i=this.callbacks)==null||i.onError({code:n.status,text:e.message},t,n,r)}):this.openAndSendXhr(n,t,e)}openAndSendXhr(t,n,r){t.readyState||t.open(`GET`,n.url,!0);let i=n.headers,{maxTimeToFirstByteMs:a,maxLoadTimeMs:o}=r.loadPolicy;if(i)for(let e in i)t.setRequestHeader(e,i[e]);n.rangeEnd&&t.setRequestHeader(`Range`,`bytes=`+n.rangeStart+`-`+(n.rangeEnd-1)),t.onreadystatechange=this.readystatechange.bind(this),t.onprogress=this.loadprogress.bind(this),t.responseType=n.responseType,self.clearTimeout(this.requestTimeout),r.timeout=a&&e(a)?a:o,this.requestTimeout=self.setTimeout(this.loadtimeout.bind(this),r.timeout),t.send()}readystatechange(){let{context:e,loader:t,stats:n}=this;if(!e||!t)return;let r=t.readyState,i=this.config;if(!n.aborted&&r>=2&&(n.loading.first===0&&(n.loading.first=Math.max(self.performance.now(),n.loading.start),i.timeout!==i.loadPolicy.maxLoadTimeMs&&(self.clearTimeout(this.requestTimeout),i.timeout=i.loadPolicy.maxLoadTimeMs,this.requestTimeout=self.setTimeout(this.loadtimeout.bind(this),i.loadPolicy.maxLoadTimeMs-(n.loading.first-n.loading.start)))),r===4)){self.clearTimeout(this.requestTimeout),t.onreadystatechange=null,t.onprogress=null;let r=t.status,s=t.responseType===`text`?t.responseText:null;if(r>=200&&r<300){let i=s??t.response;if(i!=null){var a;n.loading.end=Math.max(self.performance.now(),n.loading.first),n.loaded=n.total=t.responseType===`arraybuffer`?i.byteLength:i.length,n.bwEstimate=n.total*8e3/(n.loading.end-n.loading.first);let o=this.callbacks?.onProgress;o&&o(n,e,i,t);let s={url:t.responseURL,data:i,code:r};(a=this.callbacks)==null||a.onSuccess(s,n,e,t);return}}let c=i.loadPolicy.errorRetry,l=n.retry;if($t(c,l,!1,{url:e.url,data:void 0,code:r}))this.retry(c);else{var o;w.error(`${r} while loading ${e.url}`),(o=this.callbacks)==null||o.onError({code:r,text:t.statusText},e,t,n)}}}loadtimeout(){if(!this.config)return;let e=this.config.loadPolicy.timeoutRetry,t=this.stats.retry;if($t(e,t,!0))this.retry(e);else{w.warn(`timeout while loading ${this.context?.url}`);let e=this.callbacks;e&&(this.abortInternal(),e.onTimeout(this.stats,this.context,this.loader))}}retry(e){let{context:t,stats:n}=this;this.retryDelay=Zt(e,n.retry),n.retry++,w.warn(`${status?`HTTP Status `+status:`Timeout`} while loading ${t?.url}, retrying ${n.retry}/${e.maxNumRetry} in ${this.retryDelay}ms`),this.abortInternal(),this.loader=null,self.clearTimeout(this.retryTimeout),this.retryTimeout=self.setTimeout(this.loadInternal.bind(this),this.retryDelay)}loadprogress(e){let t=this.stats;t.loaded=e.loaded,e.lengthComputable&&(t.total=e.total)}getCacheAge(){let e=null;if(this.loader&&Wl.test(this.loader.getAllResponseHeaders())){let t=this.loader.getResponseHeader(`age`);e=t?parseFloat(t):null}return e}getResponseHeader(e){return this.loader&&RegExp(`^${e}:\\s*[\\d.]+\\s*$`,`im`).test(this.loader.getAllResponseHeaders())?this.loader.getResponseHeader(e):null}},Kl=p(p({autoStartLoad:!0,startPosition:-1,defaultAudioCodec:void 0,debug:!1,capLevelOnFPSDrop:!1,capLevelToPlayerSize:!1,ignoreDevicePixelRatio:!1,maxDevicePixelRatio:1/0,preferManagedMediaSource:!0,initialLiveManifestSize:1,maxBufferLength:30,backBufferLength:1/0,frontBufferFlushThreshold:1/0,startOnSegmentBoundary:!1,maxBufferSize:60*1e3*1e3,maxFragLookUpTolerance:.25,maxBufferHole:.1,detectStallWithCurrentTimeMs:1250,highBufferWatchdogPeriod:2,nudgeOffset:.1,nudgeMaxRetry:3,nudgeOnVideoHole:!0,liveSyncMode:`edge`,liveSyncDurationCount:3,liveSyncOnStallIncrease:1,liveMaxLatencyDurationCount:1/0,liveSyncDuration:void 0,liveMaxLatencyDuration:void 0,maxLiveSyncPlaybackRate:1,liveDurationInfinity:!1,liveBackBufferLength:null,maxMaxBufferLength:600,enableWorker:!0,workerPath:null,enableSoftwareAES:!0,startLevel:void 0,startFragPrefetch:!1,fpsDroppedMonitoringPeriod:5e3,fpsDroppedMonitoringThreshold:.2,appendErrorMaxRetry:3,ignorePlaylistParsingErrors:!1,loader:Gl,fLoader:void 0,pLoader:void 0,xhrSetup:void 0,licenseXhrSetup:void 0,licenseResponseCallback:void 0,abrController:zt,bufferController:bo,capLevelController:wo,errorController:rn,fpsController:ec,stretchShortVideoTrack:!1,maxAudioFramesDrift:1,forceKeyFrameOnDiscontinuity:!0,abrEwmaFastLive:3,abrEwmaSlowLive:9,abrEwmaFastVoD:3,abrEwmaSlowVoD:9,abrEwmaDefaultEstimate:5e5,abrEwmaDefaultEstimateMax:5e6,abrBandWidthFactor:.95,abrBandWidthUpFactor:.7,abrMaxWithRealBitrate:!1,maxStarvationDelay:4,maxLoadingDelay:4,minAutoBitrate:0,emeEnabled:!1,widevineLicenseUrl:void 0,drmSystems:{},drmSystemOptions:{},requestMediaKeySystemAccessFunc:er,requireKeySystemAccessOnStart:!1,testBandwidth:!0,progressive:!1,lowLatencyMode:!0,cmcd:void 0,enableDateRangeMetadataCues:!0,enableEmsgMetadataCues:!0,enableEmsgKLVMetadata:!1,enableID3MetadataCues:!0,enableInterstitialPlayback:!0,interstitialAppendInPlace:!0,interstitialLiveLookAhead:10,useMediaCapabilities:!0,preserveManualLevelOnError:!1,certLoadPolicy:{default:{maxTimeToFirstByteMs:8e3,maxLoadTimeMs:2e4,timeoutRetry:null,errorRetry:null}},keyLoadPolicy:{default:{maxTimeToFirstByteMs:8e3,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:2e4,backoff:`linear`},errorRetry:{maxNumRetry:8,retryDelayMs:1e3,maxRetryDelayMs:2e4,backoff:`linear`}}},manifestLoadPolicy:{default:{maxTimeToFirstByteMs:1/0,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},playlistLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:2,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},fragLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:12e4,timeoutRetry:{maxNumRetry:4,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:6,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},steeringManifestLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},interstitialAssetListLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:3e4,timeoutRetry:{maxNumRetry:0,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:0,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3},ql()),{},{subtitleStreamController:kc,subtitleTrackController:cc,timelineController:kl,audioStreamController:lo,audioTrackController:ho,emeController:Ys,cmcdController:Ws,contentSteeringController:Ks,interstitialsController:Dc});function ql(){return{cueHandler:Fl,enableWebVTT:!0,enableIMSC1:!0,enableCEA708Captions:!0,captionsTextTrack1Label:`English`,captionsTextTrack1LanguageCode:`en`,captionsTextTrack2Label:`Spanish`,captionsTextTrack2LanguageCode:`es`,captionsTextTrack3Label:`Unknown CC`,captionsTextTrack3LanguageCode:``,captionsTextTrack4Label:`Unknown CC`,captionsTextTrack4LanguageCode:``,renderTextTracksNatively:!0}}function Jl(e,t,n){if((t.liveSyncDurationCount||t.liveMaxLatencyDurationCount)&&(t.liveSyncDuration||t.liveMaxLatencyDuration))throw Error(`Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration`);if(t.liveMaxLatencyDurationCount!==void 0&&(t.liveSyncDurationCount===void 0||t.liveMaxLatencyDurationCount<=t.liveSyncDurationCount))throw Error(`Illegal hls.js config: "liveMaxLatencyDurationCount" must be greater than "liveSyncDurationCount"`);if(t.liveMaxLatencyDuration!==void 0&&(t.liveSyncDuration===void 0||t.liveMaxLatencyDuration<=t.liveSyncDuration))throw Error(`Illegal hls.js config: "liveMaxLatencyDuration" must be greater than "liveSyncDuration"`);let r=Yl(e),i=[`manifest`,`level`,`frag`],a=[`TimeOut`,`MaxRetry`,`RetryDelay`,`MaxRetryTimeout`];return i.forEach(e=>{let i=`${e===`level`?`playlist`:e}LoadPolicy`,o=t[i]===void 0,s=[];a.forEach(n=>{let a=`${e}Loading${n}`,c=t[a];if(c!==void 0&&o){s.push(a);let e=r[i].default;switch(t[i]={default:e},n){case`TimeOut`:e.maxLoadTimeMs=c,e.maxTimeToFirstByteMs=c;break;case`MaxRetry`:e.errorRetry.maxNumRetry=c,e.timeoutRetry.maxNumRetry=c;break;case`RetryDelay`:e.errorRetry.retryDelayMs=c,e.timeoutRetry.retryDelayMs=c;break;case`MaxRetryTimeout`:e.errorRetry.maxRetryDelayMs=c,e.timeoutRetry.maxRetryDelayMs=c;break}}}),s.length&&n.warn(`hls.js config: "${s.join(`", "`)}" setting(s) are deprecated, use "${i}": ${V(t[i])}`)}),p(p({},r),t)}function Yl(e){return e&&typeof e==`object`?Array.isArray(e)?e.map(Yl):Object.keys(e).reduce((t,n)=>(t[n]=Yl(e[n]),t),{}):e}function Xl(e,t){let n=e.loader;n!==Rl&&n!==Gl?(t.log(`[config]: Custom loader detected, cannot enable progressive streaming`),e.progressive=!1):Il()&&(e.loader=Rl,e.progressive=!0,e.enableSoftwareAES=!0,t.log(`[config]: Progressive streaming enabled, using FetchLoader`))}var Zl=2,Ql=.1,$l=.05,eu=100,tu=class extends wn{constructor(e,t){super(`gap-controller`,e.logger),this.hls=void 0,this.fragmentTracker=void 0,this.media=null,this.mediaSource=void 0,this.nudgeRetry=0,this.stallReported=!1,this.stalled=null,this.moved=!1,this.seeking=!1,this.buffered={},this.lastCurrentTime=0,this.ended=0,this.waiting=0,this.onMediaPlaying=()=>{this.ended=0,this.waiting=0},this.onMediaWaiting=()=>{var e;(e=this.media)!=null&&e.seeking||(this.waiting=self.performance.now(),this.tick())},this.onMediaEnded=()=>{this.hls&&(this.ended=this.media?.currentTime||1,this.hls.trigger(a.MEDIA_ENDED,{stalled:!1}))},this.hls=e,this.fragmentTracker=t,this.registerListeners()}registerListeners(){let{hls:e}=this;e&&(e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.BUFFER_APPENDED,this.onBufferAppended,this))}unregisterListeners(){let{hls:e}=this;e&&(e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.BUFFER_APPENDED,this.onBufferAppended,this))}destroy(){super.destroy(),this.unregisterListeners(),this.media=this.hls=this.fragmentTracker=null,this.mediaSource=void 0}onMediaAttached(e,t){this.setInterval(eu),this.mediaSource=t.mediaSource;let n=this.media=t.media;J(n,`playing`,this.onMediaPlaying),J(n,`waiting`,this.onMediaWaiting),J(n,`ended`,this.onMediaEnded)}onMediaDetaching(e,t){this.clearInterval();let{media:n}=this;n&&(Zr(n,`playing`,this.onMediaPlaying),Zr(n,`waiting`,this.onMediaWaiting),Zr(n,`ended`,this.onMediaEnded),this.media=null),this.mediaSource=void 0}onBufferAppended(e,t){this.buffered=t.timeRanges}get hasBuffered(){return Object.keys(this.buffered).length>0}tick(){var e;if(!((e=this.media)!=null&&e.readyState)||!this.hasBuffered)return;let t=this.media.currentTime;this.poll(t,this.lastCurrentTime),this.lastCurrentTime=t}poll(e,t){let n=this.hls?.config;if(!n)return;let r=this.media;if(!r)return;let{seeking:i}=r,o=this.seeking&&!i,s=!this.seeking&&i,c=r.paused&&!i||r.ended||r.playbackRate===0;if(this.seeking=i,e!==t){t&&(this.ended=0),this.moved=!0,i||(this.nudgeRetry=0,n.nudgeOnVideoHole&&!c&&e>t&&this.nudgeOnVideoHole(e,t)),this.waiting===0&&this.stallResolved(e);return}if(s||o){o&&this.stallResolved(e);return}if(c){this.nudgeRetry=0,this.stallResolved(e),!this.ended&&r.ended&&this.hls&&(this.ended=e||1,this.hls.trigger(a.MEDIA_ENDED,{stalled:!1}));return}if(!W.getBuffered(r).length){this.nudgeRetry=0;return}let l=W.bufferInfo(r,e,0),u=l.nextStart||0,d=this.fragmentTracker;if(i&&d&&this.hls){let t=nu(this.hls.inFlightFragments,e),n=l.len>Zl,r=!u||t||u-e>Zl&&!d.getPartialFragment(e);if(n||r)return;this.moved=!1}let f=this.hls?.latestLevelDetails;if(!this.moved&&this.stalled!==null&&d){if(!(l.len>0)&&!u)return;let t=Math.max(u,l.start||0)-e,n=f!=null&&f.live?f.targetduration*2:Zl,i=iu(e,d);if(t>0&&(t<=n||i)){r.paused||this._trySkipBufferHole(i);return}}let p=n.detectStallWithCurrentTimeMs,m=self.performance.now(),h=this.waiting,g=this.stalled;if(g===null)if(h>0&&m-h<p)g=this.stalled=h;else{this.stalled=m;return}let _=m-g;if(!i&&(_>=p||h)&&this.hls){if(this.mediaSource?.readyState===`ended`&&!(f!=null&&f.live)&&Math.abs(e-(f?.edge||0))<1){if(this.ended)return;this.ended=e||1,this.hls.trigger(a.MEDIA_ENDED,{stalled:!0});return}if(this._reportStall(l),!this.media||!this.hls)return}let v=W.bufferInfo(r,e,n.maxBufferHole);this._tryFixBufferStall(v,_,e)}stallResolved(e){let t=this.stalled;if(t&&this.hls&&(this.stalled=null,this.stallReported)){let n=self.performance.now()-t;this.log(`playback not stuck anymore @${e}, after ${Math.round(n)}ms`),this.stallReported=!1,this.waiting=0,this.hls.trigger(a.STALL_RESOLVED,{})}}nudgeOnVideoHole(e,t){var n;let o=this.buffered.video;if(this.hls&&this.media&&this.fragmentTracker&&(n=this.buffered.audio)!=null&&n.length&&o&&o.length>1&&e>o.end(0)){let n=W.bufferedInfo(W.timeRangesToArray(this.buffered.audio),e,0);if(n.len>1&&t>=n.start){let n=W.timeRangesToArray(o),s=W.bufferedInfo(n,t,0).bufferedIndex;if(s>-1&&s<n.length-1){let t=W.bufferedInfo(n,e,0).bufferedIndex,o=n[s].end,c=n[s+1].start;if((t===-1||t>s)&&c-o<1&&e-o<2){let n=Error(`nudging playhead to flush pipeline after video hole. currentTime: ${e} hole: ${o} -> ${c} buffered index: ${t}`);this.warn(n.message),this.media.currentTime+=1e-6;let s=iu(e,this.fragmentTracker);s&&`fragment`in s?s=s.fragment:s||=void 0;let l=W.bufferInfo(this.media,e,0);this.hls.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.BUFFER_SEEK_OVER_HOLE,fatal:!1,error:n,reason:n.message,frag:s,buffer:l.len,bufferInfo:l})}}}}}_tryFixBufferStall(e,t,n){let{fragmentTracker:r,media:i}=this,a=this.hls?.config;if(!i||!r||!a)return;let o=this.hls?.latestLevelDetails,s=iu(n,r);if((s||o!=null&&o.live&&n<o.fragmentStart)&&(this._trySkipBufferHole(s)||!this.media))return;let c=e.buffered,l=this.adjacentTraversal(e,n);(c&&c.length>1&&e.len>a.maxBufferHole||e.nextStart&&(e.nextStart-n<a.maxBufferHole||l))&&(t>a.highBufferWatchdogPeriod*1e3||this.waiting)&&(this.warn(`Trying to nudge playhead over buffer-hole`),this._tryNudgeBuffer(e))}adjacentTraversal(e,t){let n=this.fragmentTracker,r=e.nextStart;if(n&&r){let e=n.getFragAtPos(t,s.MAIN),i=n.getFragAtPos(r,s.MAIN);if(e&&i)return i.sn-e.sn<2}return!1}_reportStall(e){let{hls:t,media:n,stallReported:o,stalled:s}=this;if(!o&&s!==null&&n&&t){this.stallReported=!0;let o=Error(`Playback stalling at @${n.currentTime} due to low buffer (${V(e)})`);this.warn(o.message),t.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.BUFFER_STALLED_ERROR,fatal:!1,error:o,buffer:e.len,bufferInfo:e,stalled:{start:s}})}}_trySkipBufferHole(e){let{fragmentTracker:t,media:n}=this,o=this.hls?.config;if(!n||!t||!o)return 0;let c=n.currentTime,l=W.bufferInfo(n,c,0),u=c<l.start?l.start:l.nextStart;if(u&&this.hls){let f=l.len<=o.maxBufferHole,p=l.len>0&&l.len<1&&n.readyState<3,m=u-c;if(m>0&&(f||p)){if(m>o.maxBufferHole){let n=!1;if(c===0){let e=t.getAppendedFrag(0,s.MAIN);e&&u<e.end&&(n=!0)}if(!n&&e){var d;if(!((d=this.hls.loadLevelObj)!=null&&d.details)||nu(this.hls.inFlightFragments,u))return 0;let n=!1,r=e.end;for(;r<u;){let e=iu(r,t);if(e)r+=e.duration;else{n=!0;break}}if(n)return 0}}let f=Math.max(u+$l,c+Ql);if(this.warn(`skipping hole, adjusting currentTime from ${c} to ${f}`),this.moved=!0,n.currentTime=f,!(e!=null&&e.gap)){let t=Error(`fragment loaded with buffer holes, seeking from ${c} to ${f}`),n={type:r.MEDIA_ERROR,details:i.BUFFER_SEEK_OVER_HOLE,fatal:!1,error:t,reason:t.message,buffer:l.len,bufferInfo:l};e&&(`fragment`in e?n.part=e:n.frag=e),this.hls.trigger(a.ERROR,n)}return f}}return 0}_tryNudgeBuffer(e){let{hls:t,media:n,nudgeRetry:o}=this,s=t?.config;if(!n||!s)return 0;let c=n.currentTime;if(this.nudgeRetry++,o<s.nudgeMaxRetry){let l=c+(o+1)*s.nudgeOffset,u=Error(`Nudging 'currentTime' from ${c} to ${l}`);this.warn(u.message),n.currentTime=l,t.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.BUFFER_NUDGE_ON_STALL,error:u,fatal:!1,buffer:e.len,bufferInfo:e})}else{let n=Error(`Playhead still not moving while enough data buffered @${c} after ${s.nudgeMaxRetry} nudges`);this.error(n.message),t.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.BUFFER_STALLED_ERROR,error:n,fatal:!0,buffer:e.len,bufferInfo:e})}}};function nu(e,t){let n=ru(e.main);if(n&&n.start<=t)return n;let r=ru(e.audio);return r&&r.start<=t?r:null}function ru(e){if(!e)return null;switch(e.state){case Y.IDLE:case Y.STOPPED:case Y.ENDED:case Y.ERROR:return null}return e.frag}function iu(e,t){return t.getAppendedFrag(e,s.MAIN)||t.getPartialFragment(e)}var au=.25;function ou(){if(!(typeof self>`u`))return self.VTTCue||self.TextTrackCue}function su(e,t,n,r,i){let a=new e(t,n,``);try{a.value=r,i&&(a.type=i)}catch{a=new e(t,n,V(i?p({type:i},r):r))}return a}var cu=(()=>{let e=ou();try{e&&new e(0,1/0,``)}catch{return Number.MAX_VALUE}return 1/0})(),lu=class{constructor(e){this.hls=void 0,this.id3Track=null,this.media=null,this.dateRangeCuesAppended={},this.removeCues=!0,this.assetCue=void 0,this.onEventCueEnter=()=>{this.hls&&this.hls.trigger(a.EVENT_CUE_ENTER,{})},this.hls=e,this._registerListeners()}destroy(){this._unregisterListeners(),this.id3Track=null,this.media=null,this.dateRangeCuesAppended={},this.hls=this.onEventCueEnter=null}_registerListeners(){let{hls:e}=this;e&&(e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.FRAG_PARSING_METADATA,this.onFragParsingMetadata,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(a.LEVEL_PTS_UPDATED,this.onLevelPtsUpdated,this))}_unregisterListeners(){let{hls:e}=this;e&&(e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.FRAG_PARSING_METADATA,this.onFragParsingMetadata,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(a.LEVEL_PTS_UPDATED,this.onLevelPtsUpdated,this))}onMediaAttaching(e,t){this.media=t.media,t.overrides?.cueRemoval===!1&&(this.removeCues=!1)}onMediaAttached(){let e=this.hls?.latestLevelDetails;e&&this.updateDateRangeCues(e)}onMediaDetaching(e,t){this.media=null,!t.transferMedia&&(this.id3Track&&=(this.removeCues&&rc(this.id3Track,this.onEventCueEnter),null),this.dateRangeCuesAppended={})}onManifestLoading(){this.dateRangeCuesAppended={}}createTrack(e){let t=this.getID3Track(e.textTracks);return t.mode=`hidden`,t}getID3Track(e){if(this.media){for(let t=0;t<e.length;t++){let n=e[t];if(n.kind===`metadata`&&n.label===`id3`)return tc(n,this.media),n}return this.media.addTextTrack(`metadata`,`id3`)}}onFragParsingMetadata(e,t){if(!this.media||!this.hls)return;let{enableEmsgMetadataCues:n,enableID3MetadataCues:r}=this.hls.config;if(!n&&!r)return;let{samples:i}=t;this.id3Track||=this.createTrack(this.media);let a=ou();if(a)for(let e=0;e<i.length;e++){let t=i[e].type;if(t===qi.emsg&&!n||!r)continue;let o=Ui(i[e].data),s=i[e].pts,c=s+i[e].duration;c>cu&&(c=cu),c-s<=0&&(c=s+au);for(let e=0;e<o.length;e++){let n=o[e];if(!Wi(n)){this.updateId3CueEnds(s,t);let e=su(a,s,c,n,t);e&&this.id3Track.addCue(e)}}}}updateId3CueEnds(e,t){let n=this.id3Track?.cues;if(n)for(let r=n.length;r--;){let i=n[r];i.type===t&&i.startTime<e&&i.endTime===cu&&(i.endTime=e)}}onBufferFlushing(e,{startOffset:t,endOffset:n,type:r}){let{id3Track:i,hls:a}=this;if(!a)return;let{config:{enableEmsgMetadataCues:o,enableID3MetadataCues:s}}=a;if(i&&(o||s)){let e;e=r===`audio`?e=>e.type===qi.audioId3&&s:r===`video`?e=>e.type===qi.emsg&&o:e=>e.type===qi.audioId3&&s||e.type===qi.emsg&&o,ic(i,t,n,e)}}onLevelUpdated(e,{details:t}){this.updateDateRangeCues(t,!0)}onLevelPtsUpdated(e,t){Math.abs(t.drift)>.01&&this.updateDateRangeCues(t.details)}updateDateRangeCues(t,n){if(!this.hls||!this.media)return;let{assetPlayerId:r,timelineOffset:i,enableDateRangeMetadataCues:a,interstitialsController:o}=this.hls.config;if(!a)return;let s=ou();if(r&&i&&!o){let{fragmentStart:e,fragmentEnd:n}=t,i=this.assetCue;i?(i.startTime=e,i.endTime=n):s&&(i=this.assetCue=su(s,e,n,{assetPlayerId:this.hls.config.assetPlayerId},`hlsjs.interstitial.asset`),i&&(i.id=r,this.id3Track||=this.createTrack(this.media),this.id3Track.addCue(i),i.addEventListener(`enter`,this.onEventCueEnter)))}if(!t.hasProgramDateTime)return;let{id3Track:c}=this,{dateRanges:l}=t,u=Object.keys(l),d=this.dateRangeCuesAppended;if(c&&n){var f;if((f=c.cues)!=null&&f.length){let e=Object.keys(d).filter(e=>!u.includes(e));for(let t=e.length;t--;){let n=e[t],r=d[n]?.cues;delete d[n],r&&Object.keys(r).forEach(e=>{let t=r[e];if(t){t.removeEventListener(`enter`,this.onEventCueEnter);try{c.removeCue(t)}catch{}}})}}else d=this.dateRangeCuesAppended={}}let p=t.fragments[t.fragments.length-1];if(!(u.length===0||!e(p?.programDateTime))){this.id3Track||=this.createTrack(this.media);for(let e=0;e<u.length;e++){let t=u[e],n=l[t],r=n.startTime,i=d[t],a=i?.cues||{},c=i?.durationKnown||!1,f=cu,{duration:p,endDate:m}=n;if(m&&p!==null)f=r+p,c=!0;else if(n.endOnNext&&!c){let e=u.reduce((e,t)=>{if(t!==n.id){let r=l[t];if(r.class===n.class&&r.startDate>n.startDate&&(!e||n.startDate<e.startDate))return r}return e},null);e&&(f=e.startTime,c=!0)}let h=Object.keys(n.attr);for(let e=0;e<h.length;e++){let l=h[e];if(!In(l))continue;let u=a[l];if(u)c&&!(i!=null&&i.durationKnown)?u.endTime=f:Math.abs(u.startTime-r)>.01&&(u.startTime=r,u.endTime=f);else if(s){let e=n.attr[l];Ln(l)&&(e=A(e));let i=su(s,r,f,{key:l,data:e},qi.dateRange);i&&(i.id=t,this.id3Track.addCue(i),a[l]=i,o&&(l===`X-ASSET-LIST`||l===`X-ASSET-URL`)&&i.addEventListener(`enter`,this.onEventCueEnter))}}d[t]={cues:a,dateRange:n,durationKnown:c}}}}},uu=class{constructor(e){this.hls=void 0,this.config=void 0,this.media=null,this.currentTime=0,this.stallCount=0,this._latency=null,this._targetLatencyUpdated=!1,this.onTimeupdate=()=>{let{media:e}=this,t=this.levelDetails;if(!e||!t)return;this.currentTime=e.currentTime;let n=this.computeLatency();if(n===null)return;this._latency=n;let{lowLatencyMode:r,maxLiveSyncPlaybackRate:i}=this.config;if(!r||i===1||!t.live)return;let a=this.targetLatency;if(a===null)return;let o=n-a;if(o<Math.min(this.maxLatency,a+t.targetduration)&&o>.05&&this.forwardBufferLength>1){let t=Math.min(2,Math.max(1,i)),n=Math.round(2/(1+Math.exp(-.75*o-this.edgeStalled))*20)/20,r=Math.min(t,Math.max(1,n));this.changeMediaPlaybackRate(e,r)}else e.playbackRate!==1&&e.playbackRate!==0&&this.changeMediaPlaybackRate(e,1)},this.hls=e,this.config=e.config,this.registerListeners()}get levelDetails(){return this.hls?.latestLevelDetails||null}get latency(){return this._latency||0}get maxLatency(){let{config:e}=this;if(e.liveMaxLatencyDuration!==void 0)return e.liveMaxLatencyDuration;let t=this.levelDetails;return t?e.liveMaxLatencyDurationCount*t.targetduration:0}get targetLatency(){let e=this.levelDetails;if(e===null||this.hls===null)return null;let{holdBack:t,partHoldBack:n,targetduration:r}=e,{liveSyncDuration:i,liveSyncDurationCount:a,lowLatencyMode:o}=this.config,s=this.hls.userConfig,c=o&&n||t;(this._targetLatencyUpdated||s.liveSyncDuration||s.liveSyncDurationCount||c===0)&&(c=i===void 0?a*r:i);let l=r;return c+Math.min(this.stallCount*this.config.liveSyncOnStallIncrease,l)}set targetLatency(e){this.stallCount=0,this.config.liveSyncDuration=e,this._targetLatencyUpdated=!0}get liveSyncPosition(){let e=this.estimateLiveEdge(),t=this.targetLatency;if(e===null||t===null)return null;let n=this.levelDetails;if(n===null)return null;let r=n.edge,i=e-t-this.edgeStalled,a=r-n.totalduration,o=r-(this.config.lowLatencyMode&&n.partTarget||n.targetduration);return Math.min(Math.max(a,i),o)}get drift(){let e=this.levelDetails;return e===null?1:e.drift}get edgeStalled(){let e=this.levelDetails;if(e===null)return 0;let t=(this.config.lowLatencyMode&&e.partTarget||e.targetduration)*3;return Math.max(e.age-t,0)}get forwardBufferLength(){let{media:e}=this,t=this.levelDetails;if(!e||!t)return 0;let n=e.buffered.length;return(n?e.buffered.end(n-1):t.edge)-this.currentTime}destroy(){this.unregisterListeners(),this.onMediaDetaching(),this.hls=null}registerListeners(){let{hls:e}=this;e&&(e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(a.ERROR,this.onError,this))}unregisterListeners(){let{hls:e}=this;e&&(e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(a.ERROR,this.onError,this))}onMediaAttached(e,t){this.media=t.media,this.media.addEventListener(`timeupdate`,this.onTimeupdate)}onMediaDetaching(){this.media&&=(this.media.removeEventListener(`timeupdate`,this.onTimeupdate),null)}onManifestLoading(){this._latency=null,this.stallCount=0}onLevelUpdated(e,{details:t}){t.advanced&&this.onTimeupdate(),!t.live&&this.media&&this.media.removeEventListener(`timeupdate`,this.onTimeupdate)}onError(e,t){var n;t.details===i.BUFFER_STALLED_ERROR&&(this.stallCount++,this.hls&&(n=this.levelDetails)!=null&&n.live&&this.hls.logger.warn(`[latency-controller]: Stall detected, adjusting target latency`))}changeMediaPlaybackRate(e,t){var n;e.playbackRate!==t&&((n=this.hls)==null||n.logger.debug(`[latency-controller]: latency=${this.latency.toFixed(3)}, targetLatency=${this.targetLatency?.toFixed(3)}, forwardBufferLength=${this.forwardBufferLength.toFixed(3)}: adjusting playback rate from ${e.playbackRate} to ${t}`),e.playbackRate=t)}estimateLiveEdge(){let e=this.levelDetails;return e===null?null:e.edge+e.age}computeLatency(){let e=this.estimateLiveEdge();return e===null?null:e-this.currentTime}},du=class extends uo{constructor(e,t){super(e,`level-controller`),this._levels=[],this._firstLevel=-1,this._maxAutoLevel=-1,this._startLevel=void 0,this.currentLevel=null,this.currentLevelIndex=-1,this.manualLevelIndex=-1,this.steering=void 0,this.onParsedComplete=void 0,this.steering=t,this._registerListeners()}_registerListeners(){let{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this),e.on(a.ERROR,this.onError,this)}_unregisterListeners(){let{hls:e}=this;e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this),e.off(a.ERROR,this.onError,this)}destroy(){this._unregisterListeners(),this.steering=null,this.resetLevels(),super.destroy()}stopLoad(){this._levels.forEach(e=>{e.loadError=0,e.fragmentError=0}),super.stopLoad()}resetLevels(){this._startLevel=void 0,this.manualLevelIndex=-1,this.currentLevelIndex=-1,this.currentLevel=null,this._levels=[],this._maxAutoLevel=-1}onManifestLoading(e,t){this.resetLevels()}onManifestLoaded(e,t){let n=this.hls.config.preferManagedMediaSource,r=[],i={},a={},o=!1,s=!1,c=!1;t.levels.forEach(e=>{let t=e.attrs,{audioCodec:l,videoCodec:u}=e;l&&(e.audioCodec=l=Ye(l,n)||void 0),u&&=e.videoCodec=$e(u);let{width:d,height:f,unknownCodecs:p}=e,m=p?.length||0;if(o||=!!(d&&f),s||=!!u,c||=!!l,m||l&&!this.isAudioSupported(l)||u&&!this.isVideoSupported(u)){this.log(`Some or all CODECS not supported "${t.CODECS}"`);return}let{CODECS:h,"FRAME-RATE":g,"HDCP-LEVEL":_,"PATHWAY-ID":v,RESOLUTION:y,"VIDEO-RANGE":b}=t,x=`${`${v||`.`}-`}${e.bitrate}-${y}-${g}-${h}-${b}-${_}`;if(!i[x]){let t=this.createLevel(e);i[x]=t,a[x]=1,r.push(t)}else if(i[x].uri!==e.url&&!e.attrs[`PATHWAY-ID`]){let t=a[x]+=1;e.attrs[`PATHWAY-ID`]=Array(t+1).join(`.`);let n=this.createLevel(e);i[x]=n,r.push(n)}else i[x].addGroupId(`audio`,t.AUDIO),i[x].addGroupId(`text`,t.SUBTITLES)}),this.filterAndSortMediaOptions(r,t,o,s,c)}createLevel(e){let t=new xt(e),n=e.supplemental;if(n!=null&&n.videoCodec&&!this.isVideoSupported(n.videoCodec)){let e=Error(`SUPPLEMENTAL-CODECS not supported "${n.videoCodec}"`);this.log(e.message),t.supportedResult=ot(e,[])}return t}isAudioSupported(e){return Ve(e,`audio`,this.hls.config.preferManagedMediaSource)}isVideoSupported(e){return Ve(e,`video`,this.hls.config.preferManagedMediaSource)}filterAndSortMediaOptions(e,t,n,o,s){let c=[],l=[],u=e,d=t.stats?.parsing||{};if((n||o)&&s&&(u=u.filter(({videoCodec:e,videoRange:t,width:n,height:r})=>(!!e||!!(n&&r))&&_t(t))),u.length===0){Promise.resolve().then(()=>{if(this.hls){let e=`no level with compatible codecs found in manifest`,n=e;t.levels.length&&(n=`one or more CODECS in variant not supported: ${V(t.levels.map(e=>e.attrs.CODECS).filter((e,t,n)=>n.indexOf(e)===t))}`,this.warn(n),e+=` (${n})`);let o=Error(e);this.hls.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:t.url,error:o,reason:n})}}),d.end=performance.now();return}t.audioTracks&&(c=t.audioTracks.filter(e=>!e.audioCodec||this.isAudioSupported(e.audioCodec)),fu(c)),t.subtitles&&(l=t.subtitles,fu(l));let f=u.slice(0);u.sort((e,t)=>{if(e.attrs[`HDCP-LEVEL`]!==t.attrs[`HDCP-LEVEL`])return(e.attrs[`HDCP-LEVEL`]||``)>(t.attrs[`HDCP-LEVEL`]||``)?1:-1;if(n&&e.height!==t.height)return e.height-t.height;if(e.frameRate!==t.frameRate)return e.frameRate-t.frameRate;if(e.videoRange!==t.videoRange)return gt.indexOf(e.videoRange)-gt.indexOf(t.videoRange);if(e.videoCodec!==t.videoCodec){let n=We(e.videoCodec),r=We(t.videoCodec);if(n!==r)return r-n}if(e.uri===t.uri&&e.codecSet!==t.codecSet){let n=Ge(e.codecSet),r=Ge(t.codecSet);if(n!==r)return r-n}return e.averageBitrate===t.averageBitrate?0:e.averageBitrate-t.averageBitrate});let p=f[0];if(this.steering&&(u=this.steering.filterParsedLevels(u),u.length!==f.length)){for(let e=0;e<f.length;e++)if(f[e].pathwayId===u[0].pathwayId){p=f[e];break}}this._levels=u;for(let e=0;e<u.length;e++)if(u[e]===p){this._firstLevel=e;let t=p.bitrate,n=this.hls.bandwidthEstimate;if(this.log(`manifest loaded, ${u.length} level(s) found, first bitrate: ${t}`),this.hls.userConfig?.abrEwmaDefaultEstimate===void 0){let e=Math.min(t,this.hls.config.abrEwmaDefaultEstimateMax);e>n&&n===this.hls.abrEwmaDefaultEstimate&&(this.hls.bandwidthEstimate=e)}break}let m=s&&!o,h=this.hls.config,g=!!(h.audioStreamController&&h.audioTrackController),_={levels:u,audioTracks:c,subtitleTracks:l,sessionData:t.sessionData,sessionKeys:t.sessionKeys,firstLevel:this._firstLevel,stats:t.stats,audio:s,video:o,altAudio:g&&!m&&c.some(e=>!!e.url)};d.end=performance.now(),this.hls.trigger(a.MANIFEST_PARSED,_)}get levels(){return this._levels.length===0?null:this._levels}get loadLevelObj(){return this.currentLevel}get level(){return this.currentLevelIndex}set level(e){let t=this._levels;if(t.length===0)return;if(e<0||e>=t.length){let n=Error(`invalid level idx`),o=e<0;if(this.hls.trigger(a.ERROR,{type:r.OTHER_ERROR,details:i.LEVEL_SWITCH_ERROR,level:e,fatal:o,error:n,reason:n.message}),o)return;e=Math.min(e,t.length-1)}let n=this.currentLevelIndex,o=this.currentLevel,s=o?o.attrs[`PATHWAY-ID`]:void 0,c=t[e],l=c.attrs[`PATHWAY-ID`];if(this.currentLevelIndex=e,this.currentLevel=c,n===e&&o&&s===l)return;this.log(`Switching to level ${e} (${c.height?c.height+`p `:``}${c.videoRange?c.videoRange+` `:``}${c.codecSet?c.codecSet+` `:``}@${c.bitrate})${l?` with Pathway `+l:``} from level ${n}${s?` with Pathway `+s:``}`);let u={level:e,attrs:c.attrs,details:c.details,bitrate:c.bitrate,averageBitrate:c.averageBitrate,maxBitrate:c.maxBitrate,realBitrate:c.realBitrate,width:c.width,height:c.height,codecSet:c.codecSet,audioCodec:c.audioCodec,videoCodec:c.videoCodec,audioGroups:c.audioGroups,subtitleGroups:c.subtitleGroups,loaded:c.loaded,loadError:c.loadError,fragmentError:c.fragmentError,name:c.name,id:c.id,uri:c.uri,url:c.url,urlId:0,audioGroupIds:c.audioGroupIds,textGroupIds:c.textGroupIds};this.hls.trigger(a.LEVEL_SWITCHING,u);let d=c.details;if(!d||d.live){let e=this.switchParams(c.uri,o?.details,d);this.loadPlaylist(e)}}get manualLevel(){return this.manualLevelIndex}set manualLevel(e){this.manualLevelIndex=e,this._startLevel===void 0&&(this._startLevel=e),e!==-1&&(this.level=e)}get firstLevel(){return this._firstLevel}set firstLevel(e){this._firstLevel=e}get startLevel(){if(this._startLevel===void 0){let e=this.hls.config.startLevel;return e===void 0?this.hls.firstAutoLevel:e}return this._startLevel}set startLevel(e){this._startLevel=e}get pathways(){return this.steering?this.steering.pathways():[]}get pathwayPriority(){return this.steering?this.steering.pathwayPriority:null}set pathwayPriority(e){if(this.steering){let t=this.steering.pathways(),n=e.filter(e=>t.indexOf(e)!==-1);if(e.length<1){this.warn(`pathwayPriority ${e} should contain at least one pathway from list: ${t}`);return}this.steering.pathwayPriority=n}}onError(e,t){t.fatal||!t.context||t.context.type===o.LEVEL&&t.context.level===this.level&&this.checkRetry(t)}onFragBuffered(e,{frag:t}){if(t!==void 0&&t.type===s.MAIN){let e=t.elementaryStreams;if(!Object.keys(e).some(t=>!!e[t]))return;let n=this._levels[t.level];n!=null&&n.loadError&&(this.log(`Resetting level error count of ${n.loadError} on frag buffered`),n.loadError=0)}}onLevelLoaded(e,t){var n;let{level:r,details:i}=t,a=t.levelInfo;if(!a){var o;this.warn(`Invalid level index ${r}`),(o=t.deliveryDirectives)!=null&&o.skip&&(i.deltaUpdateFailed=!0);return}if(a===this.currentLevel||t.withoutMultiVariant){a.fragmentError===0&&(a.loadError=0);let e=a.details;e===t.details&&e.advanced&&(e=void 0),this.playlistLoaded(r,t,e)}else (n=t.deliveryDirectives)!=null&&n.skip&&(i.deltaUpdateFailed=!0)}loadPlaylist(e){super.loadPlaylist(),this.shouldLoadPlaylist(this.currentLevel)&&this.scheduleLoading(this.currentLevel,e)}loadingPlaylist(e,t){super.loadingPlaylist(e,t);let n=this.getUrlWithDirectives(e.uri,t),r=this.currentLevelIndex,i=e.attrs[`PATHWAY-ID`],o=e.details,s=o?.age;this.log(`Loading level index ${r}${t?.msn===void 0?``:` at sn `+t.msn+` part `+t.part}${i?` Pathway `+i:``}${s&&o.live?` age `+s.toFixed(1)+(o.type&&` `+o.type||``):``} ${n}`),this.hls.trigger(a.LEVEL_LOADING,{url:n,level:r,levelInfo:e,pathwayId:e.attrs[`PATHWAY-ID`],id:0,deliveryDirectives:t||null})}get nextLoadLevel(){return this.manualLevelIndex===-1?this.hls.nextAutoLevel:this.manualLevelIndex}set nextLoadLevel(e){this.level=e,this.manualLevelIndex===-1&&(this.hls.nextAutoLevel=e)}removeLevel(e){var t;if(this._levels.length===1)return;let n=this._levels.filter((t,n)=>n===e?(this.steering&&this.steering.removeLevel(t),t===this.currentLevel&&(this.currentLevel=null,this.currentLevelIndex=-1,t.details&&t.details.fragments.forEach(e=>e.level=-1)),!1):!0);Vr(n),this._levels=n,this.currentLevelIndex>-1&&(t=this.currentLevel)!=null&&t.details&&(this.currentLevelIndex=this.currentLevel.details.fragments[0].level),this.manualLevelIndex>-1&&(this.manualLevelIndex=this.currentLevelIndex);let r=n.length-1;this._firstLevel=Math.min(this._firstLevel,r),this._startLevel&&=Math.min(this._startLevel,r),this.hls.trigger(a.LEVELS_UPDATED,{levels:n})}onLevelsUpdated(e,{levels:t}){this._levels=t}checkMaxAutoUpdated(){let{autoLevelCapping:e,maxAutoLevel:t,maxHdcpLevel:n}=this.hls;this._maxAutoLevel!==t&&(this._maxAutoLevel=t,this.hls.trigger(a.MAX_AUTO_LEVEL_UPDATED,{autoLevelCapping:e,levels:this.levels,maxAutoLevel:t,minAutoLevel:this.hls.minAutoLevel,maxHdcpLevel:n}))}};function fu(e){let t={};e.forEach(e=>{let n=e.groupId||``;e.id=t[n]=t[n]||0,t[n]++})}function pu(){return self.SourceBuffer||self.WebKitSourceBuffer}function mu(){if(!T())return!1;let e=pu();return!e||e.prototype&&typeof e.prototype.appendBuffer==`function`&&typeof e.prototype.remove==`function`}function hu(){if(!mu())return!1;let e=T();return typeof e?.isTypeSupported==`function`&&([`avc1.42E01E,mp4a.40.2`,`av01.0.01M.08`,`vp09.00.50.08`].some(t=>e.isTypeSupported(Ue(t,`video`)))||[`mp4a.40.2`,`fLaC`].some(t=>e.isTypeSupported(Ue(t,`audio`))))}function gu(){var e;let t=pu();return typeof(t==null||(e=t.prototype)==null?void 0:e.changeType)==`function`}var _u=100,vu=class extends $r{constructor(t,n,r){super(t,n,r,`stream-controller`,s.MAIN),this.audioCodecSwap=!1,this.level=-1,this._forceStartLoad=!1,this._hasEnoughToStart=!1,this.altAudio=0,this.audioOnly=!1,this.fragPlaying=null,this.fragLastKbps=0,this.couldBacktrack=!1,this.backtrackFragment=null,this.audioCodecSwitch=!1,this.videoBuffer=null,this.onMediaPlaying=()=>{this.tick()},this.onMediaSeeked=()=>{let t=this.media,n=t?t.currentTime:null;if(n===null||!e(n)||(this.log(`Media seeked to ${n.toFixed(3)}`),!this.getBufferedFrag(n)))return;let r=this.getFwdBufferInfoAtPos(t,n,s.MAIN,0);if(r===null||r.len===0){this.warn(`Main forward buffer length at ${n} on "seeked" event ${r?r.len:`empty`})`);return}this.tick()},this.registerListeners()}registerListeners(){super.registerListeners();let{hls:e}=this;e.on(a.MANIFEST_PARSED,this.onManifestParsed,this),e.on(a.LEVEL_LOADING,this.onLevelLoading,this),e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.FRAG_LOAD_EMERGENCY_ABORTED,this.onFragLoadEmergencyAborted,this),e.on(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.on(a.AUDIO_TRACK_SWITCHED,this.onAudioTrackSwitched,this),e.on(a.BUFFER_CREATED,this.onBufferCreated,this),e.on(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this)}unregisterListeners(){super.unregisterListeners();let{hls:e}=this;e.off(a.MANIFEST_PARSED,this.onManifestParsed,this),e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.FRAG_LOAD_EMERGENCY_ABORTED,this.onFragLoadEmergencyAborted,this),e.off(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.off(a.AUDIO_TRACK_SWITCHED,this.onAudioTrackSwitched,this),e.off(a.BUFFER_CREATED,this.onBufferCreated,this),e.off(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this)}onHandlerDestroying(){this.onMediaPlaying=this.onMediaSeeked=null,this.unregisterListeners(),super.onHandlerDestroying()}startLoad(e,t){if(this.levels){let{lastCurrentTime:n,hls:r}=this;if(this.stopLoad(),this.setInterval(_u),this.level=-1,!this.startFragRequested){let e=r.startLevel;e===-1&&(r.config.testBandwidth&&this.levels.length>1?(e=0,this.bitrateTest=!0):e=r.firstAutoLevel),r.nextLoadLevel=e,this.level=r.loadLevel,this._hasEnoughToStart=!!t}n>0&&e===-1&&!t&&(this.log(`Override startPosition with lastCurrentTime @${n.toFixed(3)}`),e=n),this.state=Y.IDLE,this.nextLoadPosition=this.lastCurrentTime=e+this.timelineOffset,this.startPosition=t?-1:e,this.tick()}else this._forceStartLoad=!0,this.state=Y.STOPPED}stopLoad(){this._forceStartLoad=!1,super.stopLoad()}doTick(){switch(this.state){case Y.WAITING_LEVEL:{let{levels:e,level:t}=this,n=e?.[t],r=n?.details;if(r&&(!r.live||this.levelLastLoaded===n&&!this.waitForLive(n))){if(this.waitForCdnTuneIn(r))break;this.state=Y.IDLE;break}else if(this.hls.nextLoadLevel!==this.level){this.state=Y.IDLE;break}break}case Y.FRAG_LOADING_WAITING_RETRY:this.checkRetryDate();break}this.state===Y.IDLE&&this.doTickIdle(),this.onTickEnd()}onTickEnd(){var e;super.onTickEnd(),(e=this.media)!=null&&e.readyState&&this.media.seeking===!1&&(this.lastCurrentTime=this.media.currentTime),this.checkFragmentChanged()}doTickIdle(){let{hls:e,levelLastLoaded:t,levels:n,media:r}=this;if(t===null||!r&&!this.primaryPrefetch&&(this.startFragRequested||!e.config.startFragPrefetch)||this.altAudio&&this.audioOnly)return;let i=this.buffering?e.nextLoadLevel:e.loadLevel;if(!(n!=null&&n[i]))return;let o=n[i],c=this.getMainFwdBufferInfo();if(c===null)return;let l=this.getLevelDetails();if(l&&this._streamEnded(c,l)){let e={};this.altAudio===2&&(e.type=`video`),this.hls.trigger(a.BUFFER_EOS,e),this.state=Y.ENDED;return}if(!this.buffering)return;e.loadLevel!==i&&e.manualLevel===-1&&this.log(`Adapting to level ${i} from level ${this.level}`),this.level=e.nextLoadLevel=i;let u=o.details;if(!u||this.state===Y.WAITING_LEVEL||this.waitForLive(o)){this.level=i,this.state=Y.WAITING_LEVEL,this.startFragRequested=!1;return}let d=c.len,f=this.getMaxBufferLength(o.maxBitrate);if(d>=f)return;this.backtrackFragment&&this.backtrackFragment.start>c.end&&(this.backtrackFragment=null);let p=this.backtrackFragment?this.backtrackFragment.start:c.end,m=this.getNextFragment(p,u);if(this.couldBacktrack&&!this.fragPrevious&&m&&L(m)&&this.fragmentTracker.getState(m)!==U.OK){let e=(this.backtrackFragment??m).sn-u.startSN,t=u.fragments[e-1];t&&m.cc===t.cc&&(m=t,this.fragmentTracker.removeFragment(t))}else this.backtrackFragment&&c.len&&(this.backtrackFragment=null);if(m&&this.isLoopLoading(m,p)){if(!m.gap){let e=this.audioOnly&&!this.altAudio?I.AUDIO:I.VIDEO,t=(e===I.VIDEO?this.videoBuffer:this.mediaBuffer)||this.media;t&&this.afterBufferFlushed(t,e,s.MAIN)}m=this.getNextFragmentLoopLoading(m,u,c,s.MAIN,f)}m&&(this.exceedsMaxBuffer(c,f,m)||(m.initSegment&&!m.initSegment.data&&!this.bitrateTest&&(m=m.initSegment),this.loadFragment(m,o,p)))}loadFragment(e,t,n){let r=this.fragmentTracker.getState(e);r===U.NOT_LOADED||r===U.PARTIAL?L(e)?this.bitrateTest?(this.log(`Fragment ${e.sn} of level ${e.level} is being downloaded to test bitrate and will not be buffered`),this._loadBitrateTestFrag(e,t)):super.loadFragment(e,t,n):this._loadInitSegment(e,t):this.clearTrackerIfNeeded(e)}getBufferedFrag(e){return this.fragmentTracker.getBufferedFrag(e,s.MAIN)}followingBufferedFrag(e){return e?this.getBufferedFrag(e.end+.5):null}immediateLevelSwitch(){this.abortCurrentFrag(),this.flushMainBuffer(0,1/0),this.altAudio!==0&&(this.getLevelDetails()?.fragmentStart||0)>this.lastCurrentTime&&super.flushMainBuffer(0,1/0,`audio`)}nextLevelSwitch(){let{levels:e,media:t}=this;if(t!=null&&t.readyState){let n,r=this.getAppendedFrag(t.currentTime);r&&r.start>1&&this.flushMainBuffer(0,r.start-1);let i=this.getLevelDetails();if(i!=null&&i.live){let e=this.getMainFwdBufferInfo();if(!e||e.len<i.targetduration*2)return}if(!t.paused&&e){let t=e[this.hls.nextLoadLevel],r=this.fragLastKbps;n=r&&this.fragCurrent?this.fragCurrent.duration*t.maxBitrate/(1e3*r)+1:0}else n=0;let a=this.getBufferedFrag(t.currentTime+n);if(a){let e=this.followingBufferedFrag(a);if(e){this.abortCurrentFrag();let t=e.maxStartPTS?e.maxStartPTS:e.start,n=e.duration,r=Math.max(a.end,t+Math.min(Math.max(n-this.config.maxFragLookUpTolerance,n*(this.couldBacktrack?.5:.125)),n*(this.couldBacktrack?.75:.25)));this.flushMainBuffer(r,1/0)}}}}abortCurrentFrag(){let e=this.fragCurrent;switch(this.fragCurrent=null,this.backtrackFragment=null,e&&(e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.state){case Y.KEY_LOADING:case Y.FRAG_LOADING:case Y.FRAG_LOADING_WAITING_RETRY:case Y.PARSING:case Y.PARSED:this.state=Y.IDLE;break}this.nextLoadPosition=this.getLoadPosition()}flushMainBuffer(e,t){super.flushMainBuffer(e,t,this.altAudio===2?`video`:null)}onMediaAttached(e,t){super.onMediaAttached(e,t);let n=t.media;J(n,`playing`,this.onMediaPlaying),J(n,`seeked`,this.onMediaSeeked)}onMediaDetaching(e,t){let{media:n}=this;n&&(Zr(n,`playing`,this.onMediaPlaying),Zr(n,`seeked`,this.onMediaSeeked)),this.videoBuffer=null,this.fragPlaying=null,super.onMediaDetaching(e,t),!t.transferMedia&&(this._hasEnoughToStart=!1)}onManifestLoading(){super.onManifestLoading(),this.log(`Trigger BUFFER_RESET`),this.hls.trigger(a.BUFFER_RESET,void 0),this.couldBacktrack=!1,this.fragLastKbps=0,this.fragPlaying=this.backtrackFragment=null,this.altAudio=0,this.audioOnly=!1}onManifestParsed(e,t){let n=!1,r=!1;for(let e=0;e<t.levels.length;e++){let i=t.levels[e].audioCodec;i&&(n||=i.indexOf(`mp4a.40.2`)!==-1,r||=i.indexOf(`mp4a.40.5`)!==-1)}this.audioCodecSwitch=n&&r&&!gu(),this.audioCodecSwitch&&this.log(`Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC`),this.levels=t.levels,this.startFragRequested=!1}onLevelLoading(e,t){let{levels:n}=this;if(!n||this.state!==Y.IDLE)return;let r=t.levelInfo;(!r.details||r.details.live&&(this.levelLastLoaded!==r||r.details.expired)||this.waitForCdnTuneIn(r.details))&&(this.state=Y.WAITING_LEVEL)}onLevelLoaded(e,t){var n;let{levels:r,startFragRequested:i}=this,o=t.level,s=t.details,c=s.totalduration;if(!r){this.warn(`Levels were reset while loading level ${o}`);return}this.log(`Level ${o} loaded [${s.startSN},${s.endSN}]${s.lastPartSn?`[part-${s.lastPartSn}-${s.lastPartIndex}]`:``}, cc [${s.startCC}, ${s.endCC}] duration:${c}`);let l=t.levelInfo,u=this.fragCurrent;u&&(this.state===Y.FRAG_LOADING||this.state===Y.FRAG_LOADING_WAITING_RETRY)&&u.level!==t.level&&u.loader&&this.abortCurrentFrag();let d=0;if(s.live||(n=l.details)!=null&&n.live){if(this.checkLiveUpdate(s),s.deltaUpdateFailed)return;d=this.alignPlaylists(s,l.details,this.levelLastLoaded?.details)}if(l.details=s,this.levelLastLoaded=l,i||this.setStartPosition(s,d),this.hls.trigger(a.LEVEL_UPDATED,{details:s,level:o}),this.state===Y.WAITING_LEVEL){if(this.waitForCdnTuneIn(s))return;this.state=Y.IDLE}i&&s.live&&this.synchronizeToLiveEdge(s),this.tick()}synchronizeToLiveEdge(e){let{config:t,media:n}=this;if(!n)return;let r=this.hls.liveSyncPosition,i=this.getLoadPosition(),a=e.fragmentStart,o=e.edge,s=i>=a-t.maxFragLookUpTolerance&&i<=o;if(r!==null&&n.duration>r&&(i<r||!s)){let a=t.liveMaxLatencyDuration===void 0?t.liveMaxLatencyDurationCount*e.targetduration:t.liveMaxLatencyDuration;if((!s&&n.readyState<4||i<o-a)&&(this._hasEnoughToStart||(this.nextLoadPosition=r),n.readyState))if(this.warn(`Playback: ${i.toFixed(3)} is located too far from the end of live sliding playlist: ${o}, reset currentTime to : ${r.toFixed(3)}`),this.config.liveSyncMode===`buffered`){var c;let e=W.bufferInfo(n,r,0);if(!((c=e.buffered)!=null&&c.length)){n.currentTime=r;return}if(e.start<=i){n.currentTime=r;return}let{nextStart:t}=W.bufferedInfo(e.buffered,i,0);t&&(n.currentTime=t)}else n.currentTime=r}}_handleFragmentLoadProgress(e){let t=e.frag,{part:n,payload:r}=e,{levels:i}=this;if(!i){this.warn(`Levels were reset while fragment load was in progress. Fragment ${t.sn} of level ${t.level} will not be buffered`);return}let a=i[t.level];if(!a){this.warn(`Level ${t.level} not found on progress`);return}let o=a.details;if(!o){this.warn(`Dropping fragment ${t.sn} of level ${t.level} after level details were reset`),this.fragmentTracker.removeFragment(t);return}let c=a.videoCodec,l=o.PTSKnown||!o.live,u=t.initSegment?.data,d=this._getAudioCodec(a),f=this.transmuxer=this.transmuxer||new so(this.hls,s.MAIN,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this)),p=n?n.index:-1,m=p!==-1,h=new Tn(t.level,t.sn,t.stats.chunkCount,r.byteLength,p,m),g=this.initPTS[t.cc];f.push(r,u,d,c,t,n,o.totalduration,l,h,g)}onAudioTrackSwitching(e,t){let n=this.hls,r=this.altAudio!==0;if(Rt(t.url,n))this.altAudio=1;else{if(this.mediaBuffer!==this.media){this.log(`Switching on main audio, use media.buffered to schedule main fragment loading`),this.mediaBuffer=this.media;let e=this.fragCurrent;e&&(this.log(`Switching to main audio track, cancel main fragment load`),e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.resetTransmuxer(),this.resetLoadingState()}else this.audioOnly&&this.resetTransmuxer();if(r){this.altAudio=0,this.fragmentTracker.removeAllFragments(),n.once(a.BUFFER_FLUSHED,()=>{this.hls&&this.hls.trigger(a.AUDIO_TRACK_SWITCHED,t)}),n.trigger(a.BUFFER_FLUSHING,{startOffset:0,endOffset:1/0,type:null});return}n.trigger(a.AUDIO_TRACK_SWITCHED,t)}}onAudioTrackSwitched(e,t){let n=Rt(t.url,this.hls);if(n){let e=this.videoBuffer;e&&this.mediaBuffer!==e&&(this.log(`Switching on alternate audio, use video.buffered to schedule main fragment loading`),this.mediaBuffer=e)}this.altAudio=n?2:0,this.tick()}onBufferCreated(e,t){let n=t.tracks,r,i,a=!1;for(let e in n){let t=n[e];if(t.id===`main`){if(i=e,r=t,e===`video`){let t=n[e];t&&(this.videoBuffer=t.buffer)}}else a=!0}a&&r?(this.log(`Alternate track found, use ${i}.buffered to schedule main fragment loading`),this.mediaBuffer=r.buffer):this.mediaBuffer=this.media}onFragBuffered(e,t){let{frag:n,part:r}=t,i=n.type===s.MAIN;if(i){if(this.fragContextChanged(n)){this.warn(`Fragment ${n.sn}${r?` p: `+r.index:``} of level ${n.level} finished buffering, but was aborted. state: ${this.state}`),this.state===Y.PARSED&&(this.state=Y.IDLE);return}let e=r?r.stats:n.stats;this.fragLastKbps=Math.round(8*e.total/(e.buffering.end-e.loading.first)),L(n)&&(this.fragPrevious=n),this.fragBufferedComplete(n,r)}let a=this.media;a&&(!this._hasEnoughToStart&&W.getBuffered(a).length&&(this._hasEnoughToStart=!0,this.seekToStartPos()),i&&this.tick())}get hasEnoughToStart(){return this._hasEnoughToStart}onError(e,t){if(t.fatal){this.state=Y.ERROR;return}switch(t.details){case i.FRAG_GAP:case i.FRAG_PARSING_ERROR:case i.FRAG_DECRYPT_ERROR:case i.FRAG_LOAD_ERROR:case i.FRAG_LOAD_TIMEOUT:case i.KEY_LOAD_ERROR:case i.KEY_LOAD_TIMEOUT:this.onFragmentOrKeyLoadError(s.MAIN,t);break;case i.LEVEL_LOAD_ERROR:case i.LEVEL_LOAD_TIMEOUT:case i.LEVEL_PARSING_ERROR:!t.levelRetry&&this.state===Y.WAITING_LEVEL&&t.context?.type===o.LEVEL&&(this.state=Y.IDLE);break;case i.BUFFER_ADD_CODEC_ERROR:case i.BUFFER_APPEND_ERROR:if(t.parent!==`main`)return;this.reduceLengthAndFlushBuffer(t)&&this.resetLoadingState();break;case i.BUFFER_FULL_ERROR:if(t.parent!==`main`)return;this.reduceLengthAndFlushBuffer(t)&&(!this.config.interstitialsController&&this.config.assetPlayerId?this._hasEnoughToStart=!0:this.flushMainBuffer(0,1/0));break;case i.INTERNAL_EXCEPTION:this.recoverWorkerError(t);break}}onFragLoadEmergencyAborted(){this.state=Y.IDLE,this._hasEnoughToStart||(this.startFragRequested=!1,this.nextLoadPosition=this.lastCurrentTime),this.tickImmediate()}onBufferFlushed(e,{type:t}){if(t!==I.AUDIO||!this.altAudio){let e=(t===I.VIDEO?this.videoBuffer:this.mediaBuffer)||this.media;e&&(this.afterBufferFlushed(e,t,s.MAIN),this.tick())}}onLevelsUpdated(e,t){this.level>-1&&this.fragCurrent&&(this.level=this.fragCurrent.level,this.level===-1&&this.resetWhenMissingContext(this.fragCurrent)),this.levels=t.levels}swapAudioCodec(){this.audioCodecSwap=!this.audioCodecSwap}seekToStartPos(){let{media:e}=this;if(!e)return;let t=e.currentTime,n=this.startPosition;if(n>=0&&t<n){if(e.seeking){this.log(`could not seek to ${n}, already seeking at ${t}`);return}let r=this.timelineOffset;r&&n&&(n+=r);let i=this.getLevelDetails(),a=W.getBuffered(e),o=a.length?a.start(0):0,s=o-n,c=Math.max(this.config.maxBufferHole,this.config.maxFragLookUpTolerance);(this.config.startOnSegmentBoundary||s>0&&(s<c||this.loadingParts&&s<2*(i?.partTarget||0)))&&(this.log(`adjusting start position by ${s} to match buffer start`),n+=s,this.startPosition=n),t<n&&(this.log(`seek to target start position ${n} from current time ${t} buffer start ${o}`),e.currentTime=n)}}_getAudioCodec(e){let t=this.config.defaultAudioCodec||e.audioCodec;return this.audioCodecSwap&&t&&(this.log(`Swapping audio codec`),t=t.indexOf(`mp4a.40.5`)===-1?`mp4a.40.5`:`mp4a.40.2`),t}_loadBitrateTestFrag(e,t){e.bitrateTest=!0,this._doFragLoad(e,t).then(e=>{let{hls:n}=this,r=e?.frag;if(!r||this.fragContextChanged(r))return;t.fragmentError=0,this.state=Y.IDLE,this.startFragRequested=!1,this.bitrateTest=!1;let i=r.stats;i.parsing.start=i.parsing.end=i.buffering.start=i.buffering.end=self.performance.now(),n.trigger(a.FRAG_LOADED,e),r.bitrateTest=!1}).catch(t=>{this.state===Y.STOPPED||this.state===Y.ERROR||(this.warn(t),this.resetFragmentLoading(e))})}_handleTransmuxComplete(t){let n=this.playlistType,{hls:r}=this,{remuxResult:i,chunkMeta:o}=t,s=this.getCurrentContext(o);if(!s){this.resetWhenMissingContext(o);return}let{frag:c,part:l,level:u}=s,{video:d,text:f,id3:p,initSegment:m}=i,{details:h}=u,g=this.altAudio?void 0:i.audio;if(this.fragContextChanged(c)){this.fragmentTracker.removeFragment(c);return}if(this.state=Y.PARSING,m){let t=m.tracks;if(t){let e=c.initSegment||c;if(this.unhandledEncryptionError(m,c))return;this._bufferInitSegment(u,t,e,o),r.trigger(a.FRAG_PARSING_INIT_SEGMENT,{frag:e,id:n,tracks:t})}let i=m.initPTS,s=m.timescale,l=this.initPTS[c.cc];if(e(i)&&(!l||l.baseTime!==i||l.timescale!==s)){let e=m.trackId;this.initPTS[c.cc]={baseTime:i,timescale:s,trackId:e},r.trigger(a.INIT_PTS_FOUND,{frag:c,id:n,initPTS:i,timescale:s,trackId:e})}}if(d&&h){g&&d.type===`audiovideo`&&this.logMuxedErr(c);let e=h.fragments[c.sn-1-h.startSN],t=c.sn===h.startSN,n=!e||c.cc>e.cc;if(i.independent!==!1){let{startPTS:e,endPTS:r,startDTS:i,endDTS:a}=d;if(l)l.elementaryStreams[d.type]={startPTS:e,endPTS:r,startDTS:i,endDTS:a};else if(d.firstKeyFrame&&d.independent&&o.id===1&&!n&&(this.couldBacktrack=!0),d.dropped&&d.independent){let i=this.getMainFwdBufferInfo(),o=(i?i.end:this.getLoadPosition())+this.config.maxBufferHole,s=d.firstKeyFramePTS?d.firstKeyFramePTS:e;if(!t&&o<s-this.config.maxBufferHole&&!n){this.backtrack(c);return}else n&&(c.gap=!0);c.setElementaryStreamInfo(d.type,c.start,r,c.start,a,!0)}else t&&e-(h.appliedTimelineOffset||0)>Zl&&(c.gap=!0);c.setElementaryStreamInfo(d.type,e,r,i,a),this.backtrackFragment&&=c,this.bufferFragmentData(d,c,l,o,t||n)}else if(t||n)c.gap=!0;else{this.backtrack(c);return}}if(g){let{startPTS:e,endPTS:t,startDTS:n,endDTS:r}=g;l&&(l.elementaryStreams[I.AUDIO]={startPTS:e,endPTS:t,startDTS:n,endDTS:r}),c.setElementaryStreamInfo(I.AUDIO,e,t,n,r),this.bufferFragmentData(g,c,l,o)}if(h&&p!=null&&p.samples.length){let e={id:n,frag:c,details:h,samples:p.samples};r.trigger(a.FRAG_PARSING_METADATA,e)}if(h&&f){let e={id:n,frag:c,details:h,samples:f.samples};r.trigger(a.FRAG_PARSING_USERDATA,e)}}logMuxedErr(e){this.warn(`${L(e)?`Media`:`Init`} segment with muxed audiovideo where only video expected: ${e.url}`)}_bufferInitSegment(e,t,n,r){if(this.state!==Y.PARSING)return;this.audioOnly=!!t.audio&&!t.video,this.altAudio&&!this.audioOnly&&(delete t.audio,t.audiovideo&&this.logMuxedErr(n));let{audio:i,video:o,audiovideo:c}=t;if(i){let n=e.audioCodec,r=Ze(i.codec,n);r===`mp4a`&&(r=`mp4a.40.5`);let a=navigator.userAgent.toLowerCase();if(this.audioCodecSwitch){r&&=r.indexOf(`mp4a.40.5`)===-1?`mp4a.40.5`:`mp4a.40.2`;let e=i.metadata;e&&`channelCount`in e&&(e.channelCount||1)!==1&&a.indexOf(`firefox`)===-1&&(r=`mp4a.40.5`)}r&&r.indexOf(`mp4a.40.5`)!==-1&&a.indexOf(`android`)!==-1&&i.container!==`audio/mpeg`&&(r=`mp4a.40.2`,this.log(`Android: force audio codec to ${r}`)),n&&n!==r&&this.log(`Swapping manifest audio codec "${n}" for "${r}"`),i.levelCodec=r,i.id=s.MAIN,this.log(`Init audio buffer, container:${i.container}, codecs[selected/level/parsed]=[${r||``}/${n||``}/${i.codec}]`),delete t.audiovideo}if(o){o.levelCodec=e.videoCodec,o.id=s.MAIN;let n=o.codec;if(n?.length===4)switch(n){case`hvc1`:case`hev1`:o.codec=`hvc1.1.6.L120.90`;break;case`av01`:o.codec=`av01.0.04M.08`;break;case`avc1`:o.codec=`avc1.42e01e`;break}this.log(`Init video buffer, container:${o.container}, codecs[level/parsed]=[${e.videoCodec||``}/${n}]${o.codec===n?``:` parsed-corrected=`+o.codec}${o.supplemental?` supplemental=`+o.supplemental:``}`),delete t.audiovideo}c&&(this.log(`Init audiovideo buffer, container:${c.container}, codecs[level/parsed]=[${e.codecs}/${c.codec}]`),delete t.video,delete t.audio);let l=Object.keys(t);if(l.length){if(this.hls.trigger(a.BUFFER_CODECS,t),!this.hls)return;l.forEach(e=>{let i=t[e].initSegment;i!=null&&i.byteLength&&this.hls.trigger(a.BUFFER_APPENDING,{type:e,data:i,frag:n,part:null,chunkMeta:r,parent:n.type})})}this.tickImmediate()}getMainFwdBufferInfo(){let e=this.mediaBuffer&&this.altAudio===2?this.mediaBuffer:this.media;return this.getFwdBufferInfo(e,s.MAIN)}get maxBufferLength(){let{levels:e,level:t}=this,n=e?.[t];return n?this.getMaxBufferLength(n.maxBitrate):this.config.maxBufferLength}backtrack(e){this.couldBacktrack=!0,this.backtrackFragment=e,this.resetTransmuxer(),this.flushBufferGap(e),this.fragmentTracker.removeFragment(e),this.fragPrevious=null,this.nextLoadPosition=e.start,this.state=Y.IDLE}checkFragmentChanged(){let e=this.media,t=null;if(e&&e.readyState>1&&e.seeking===!1){let n=e.currentTime;if(W.isBuffered(e,n)?t=this.getAppendedFrag(n):W.isBuffered(e,n+.1)&&(t=this.getAppendedFrag(n+.1)),t){this.backtrackFragment=null;let e=this.fragPlaying,n=t.level;(!e||t.sn!==e.sn||e.level!==n)&&(this.fragPlaying=t,this.hls.trigger(a.FRAG_CHANGED,{frag:t}),(!e||e.level!==n)&&this.hls.trigger(a.LEVEL_SWITCHED,{level:n}))}}}get nextLevel(){let e=this.nextBufferedFrag;return e?e.level:-1}get currentFrag(){if(this.fragPlaying)return this.fragPlaying;let t=this.media?.currentTime||this.lastCurrentTime;return e(t)?this.getAppendedFrag(t):null}get currentProgramDateTime(){let t=this.media?.currentTime||this.lastCurrentTime;if(e(t)){let e=this.getLevelDetails(),n=this.currentFrag||(e?Ht(null,e.fragments,t):null);if(n){let e=n.programDateTime;if(e!==null){let r=e+(t-n.start)*1e3;return new Date(r)}}}return null}get currentLevel(){let e=this.currentFrag;return e?e.level:-1}get nextBufferedFrag(){let e=this.currentFrag;return e?this.followingBufferedFrag(e):null}get forceStartLoad(){return this._forceStartLoad}},yu=class extends g{constructor(e,t){super(`key-loader`,t),this.config=void 0,this.keyIdToKeyInfo={},this.emeController=null,this.config=e}abort(e){for(let t in this.keyIdToKeyInfo){let n=this.keyIdToKeyInfo[t].loader;if(n){if(e&&e!==n.context?.frag.type)return;n.abort()}}}detach(){for(let e in this.keyIdToKeyInfo){let t=this.keyIdToKeyInfo[e];(t.mediaKeySessionContext||t.decryptdata.isCommonEncryption)&&delete this.keyIdToKeyInfo[e]}}destroy(){this.detach();for(let e in this.keyIdToKeyInfo){let t=this.keyIdToKeyInfo[e].loader;t&&t.destroy()}this.keyIdToKeyInfo={}}createKeyLoadError(e,t=i.KEY_LOAD_ERROR,n,a,o){return new Cn({type:r.NETWORK_ERROR,details:t,fatal:!1,frag:e,response:o,error:n,networkDetails:a})}loadClear(e,t,n){if(this.emeController&&this.config.emeEnabled&&!this.emeController.getSelectedKeySystemFormats().length){if(t.length)for(let r=0,i=t.length;r<i;r++){let a=t[r];if(e.cc<=a.cc&&(!L(e)||!L(a)||e.sn<a.sn)||!n&&r==i-1)return this.emeController.selectKeySystemFormat(a).then(e=>{if(!this.emeController)return;a.setKeyFormat(e);let t=Zn(e);if(t)return this.emeController.getKeySystemAccess([t])})}if(this.config.requireKeySystemAccessOnStart){let e=$n(this.config);if(e.length)return this.emeController.getKeySystemAccess(e)}}return null}load(e){return!e.decryptdata&&e.encrypted&&this.emeController&&this.config.emeEnabled?this.emeController.selectKeySystemFormat(e).then(t=>this.loadInternal(e,t)):this.loadInternal(e)}loadInternal(e,t){var n,r;t&&e.setKeyFormat(t);let a=e.decryptdata;if(!a){let n=Error(t?`Expected frag.decryptdata to be defined after setting format ${t}`:`Missing decryption data on fragment in onKeyLoading (emeEnabled with controller: ${this.emeController&&this.config.emeEnabled})`);return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,n))}let o=a.uri;if(!o)return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,Error(`Invalid key URI: "${o}"`)));let s=bu(a),c=this.keyIdToKeyInfo[s];if((n=c)!=null&&n.decryptdata.key)return a.key=c.decryptdata.key,Promise.resolve({frag:e,keyInfo:c});if(this.emeController&&(r=c)!=null&&r.keyLoadPromise)switch(this.emeController.getKeyStatus(c.decryptdata)){case`usable`:case`usable-in-future`:return c.keyLoadPromise.then(t=>{let{keyInfo:n}=t;return a.key=n.decryptdata.key,{frag:e,keyInfo:n}})}switch(this.log(`${this.keyIdToKeyInfo[s]?`Rel`:`L`}oading${a.keyId?` keyId: `+k(a.keyId):``} URI: ${a.uri} from ${e.type} ${e.level}`),c=this.keyIdToKeyInfo[s]={decryptdata:a,keyLoadPromise:null,loader:null,mediaKeySessionContext:null},a.method){case`SAMPLE-AES`:case`SAMPLE-AES-CENC`:case`SAMPLE-AES-CTR`:return a.keyFormat===`identity`?this.loadKeyHTTP(c,e):this.loadKeyEME(c,e);case`AES-128`:case`AES-256`:case`AES-256-CTR`:return this.loadKeyHTTP(c,e);default:return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,Error(`Key supplied with unsupported METHOD: "${a.method}"`)))}}loadKeyEME(e,t){let n={frag:t,keyInfo:e};if(this.emeController&&this.config.emeEnabled){var r;if(!e.decryptdata.keyId&&(r=t.initSegment)!=null&&r.data){let n=Se(t.initSegment.data);if(n.length){let t=n[0];t.some(e=>e!==0)?(this.log(`Using keyId found in init segment ${k(t)}`),or.setKeyIdForUri(e.decryptdata.uri,t)):(t=or.addKeyIdForUri(e.decryptdata.uri),this.log(`Generating keyId to patch media ${k(t)}`)),e.decryptdata.keyId=t}}return!e.decryptdata.keyId&&!L(t)?Promise.resolve(n):(e.keyLoadPromise=this.emeController.loadKey(n).then(t=>(e.mediaKeySessionContext=t,n))).catch(n=>{throw e.keyLoadPromise=null,`data`in n&&(n.data.frag=t),n})}return Promise.resolve(n)}loadKeyHTTP(e,t){let n=this.config,r=n.loader,a=new r(n);return t.keyLoader=e.loader=a,e.keyLoadPromise=new Promise((r,o)=>{let s={keyInfo:e,frag:t,responseType:`arraybuffer`,url:e.decryptdata.uri},c=n.keyLoadPolicy.default,l={loadPolicy:c,timeout:c.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0};a.load(s,l,{onSuccess:(e,t,n,a)=>{let{frag:s,keyInfo:c}=n,l=bu(c.decryptdata);if(!s.decryptdata||c!==this.keyIdToKeyInfo[l])return o(this.createKeyLoadError(s,i.KEY_LOAD_ERROR,Error(`after key load, decryptdata unset or changed`),a));c.decryptdata.key=s.decryptdata.key=new Uint8Array(e.data),s.keyLoader=null,c.loader=null,r({frag:s,keyInfo:c})},onError:(e,n,r,a)=>{this.resetLoader(n),o(this.createKeyLoadError(t,i.KEY_LOAD_ERROR,Error(`HTTP Error ${e.code} loading key ${e.text}`),r,p({url:s.url,data:void 0},e)))},onTimeout:(e,n,r)=>{this.resetLoader(n),o(this.createKeyLoadError(t,i.KEY_LOAD_TIMEOUT,Error(`key loading timed out`),r))},onAbort:(e,n,r)=>{this.resetLoader(n),o(this.createKeyLoadError(t,i.INTERNAL_ABORTED,Error(`key loading aborted`),r))}})})}resetLoader(e){let{frag:t,keyInfo:n,url:r}=e,i=n.loader;t.keyLoader===i&&(t.keyLoader=null,n.loader=null);let a=bu(n.decryptdata)||r;delete this.keyIdToKeyInfo[a],i&&i.destroy()}};function bu(e){if(e.keyFormat!==q.FAIRPLAY){let t=e.keyId;if(t)return k(t)}return e.uri}function xu(e){let{type:t}=e;switch(t){case o.AUDIO_TRACK:return s.AUDIO;case o.SUBTITLE_TRACK:return s.SUBTITLE;default:return s.MAIN}}function Su(e,t){let n=e.url;return(n===void 0||n.indexOf(`data:`)===0)&&(n=t.url),n}var Cu=class{constructor(e){this.hls=void 0,this.loaders=Object.create(null),this.variableList=null,this.onManifestLoaded=this.checkAutostartLoad,this.hls=e,this.registerListeners()}startLoad(e){}stopLoad(){this.destroyInternalLoaders()}registerListeners(){let{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.LEVEL_LOADING,this.onLevelLoading,this),e.on(a.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),e.on(a.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this)}unregisterListeners(){let{hls:e}=this;e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.LEVEL_LOADING,this.onLevelLoading,this),e.off(a.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),e.off(a.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this)}createInternalLoader(e){let t=this.hls.config,n=t.pLoader,r=t.loader,i=new(n||r)(t);return this.loaders[e.type]=i,i}getInternalLoader(e){return this.loaders[e.type]}resetInternalLoader(e){this.loaders[e]&&delete this.loaders[e]}destroyInternalLoaders(){for(let e in this.loaders){let t=this.loaders[e];t&&t.destroy(),this.resetInternalLoader(e)}}destroy(){this.variableList=null,this.unregisterListeners(),this.destroyInternalLoaders()}onManifestLoading(e,t){let{url:n}=t;this.variableList=null,this.load({id:null,level:0,responseType:`text`,type:o.MANIFEST,url:n,deliveryDirectives:null,levelOrTrack:null})}onLevelLoading(e,t){let{id:n,level:r,pathwayId:i,url:a,deliveryDirectives:s,levelInfo:c}=t;this.load({id:n,level:r,pathwayId:i,responseType:`text`,type:o.LEVEL,url:a,deliveryDirectives:s,levelOrTrack:c})}onAudioTrackLoading(e,t){let{id:n,groupId:r,url:i,deliveryDirectives:a,track:s}=t;this.load({id:n,groupId:r,level:null,responseType:`text`,type:o.AUDIO_TRACK,url:i,deliveryDirectives:a,levelOrTrack:s})}onSubtitleTrackLoading(e,t){let{id:n,groupId:r,url:i,deliveryDirectives:a,track:s}=t;this.load({id:n,groupId:r,level:null,responseType:`text`,type:o.SUBTITLE_TRACK,url:i,deliveryDirectives:a,levelOrTrack:s})}onLevelsUpdated(e,t){let n=this.loaders[o.LEVEL];if(n){let e=n.context;e&&!t.levels.some(t=>t===e.levelOrTrack)&&(n.abort(),delete this.loaders[o.LEVEL])}}load(t){let n=this.hls.config,r=this.getInternalLoader(t);if(r){let e=this.hls.logger,n=r.context;if(n&&n.levelOrTrack===t.levelOrTrack&&(n.url===t.url||n.deliveryDirectives&&!t.deliveryDirectives)){n.url===t.url?e.log(`[playlist-loader]: ignore ${t.url} ongoing request`):e.log(`[playlist-loader]: ignore ${t.url} in favor of ${n.url}`);return}e.log(`[playlist-loader]: aborting previous loader for type: ${t.type}`),r.abort()}let i;if(i=t.type===o.MANIFEST?n.manifestLoadPolicy.default:d({},n.playlistLoadPolicy.default,{timeoutRetry:null,errorRetry:null}),r=this.createInternalLoader(t),e(t.deliveryDirectives?.part)){let e;if(t.type===o.LEVEL&&t.level!==null?e=this.hls.levels[t.level].details:t.type===o.AUDIO_TRACK&&t.id!==null?e=this.hls.audioTracks[t.id].details:t.type===o.SUBTITLE_TRACK&&t.id!==null&&(e=this.hls.subtitleTracks[t.id].details),e){let t=e.partTarget,n=e.targetduration;if(t&&n){let e=Math.max(t*3,n*.8)*1e3;i=d({},i,{maxTimeToFirstByteMs:Math.min(e,i.maxTimeToFirstByteMs),maxLoadTimeMs:Math.min(e,i.maxTimeToFirstByteMs)})}}}let a=i.errorRetry||i.timeoutRetry||{},s={loadPolicy:i,timeout:i.maxLoadTimeMs,maxRetry:a.maxNumRetry||0,retryDelay:a.retryDelayMs||0,maxRetryDelay:a.maxRetryDelayMs||0};r.load(t,s,{onSuccess:(e,t,n,r)=>{let i=this.getInternalLoader(n);this.resetInternalLoader(n.type);let a=e.data;t.parsing.start=performance.now(),hr.isMediaPlaylist(a)||n.type!==o.MANIFEST?this.handleTrackOrLevelPlaylist(e,t,n,r||null,i):this.handleMasterPlaylist(e,t,n,r)},onError:(e,t,n,r)=>{this.handleNetworkError(t,n,!1,e,r)},onTimeout:(e,t,n)=>{this.handleNetworkError(t,n,!0,void 0,e)}})}checkAutostartLoad(){if(!this.hls)return;let{config:{autoStartLoad:e,startPosition:t},forceStartLoad:n}=this.hls;(e||n)&&(this.hls.logger.log(`${e?`auto`:`force`} startLoad with configured startPosition ${t}`),this.hls.startLoad(t))}handleMasterPlaylist(e,t,n,r){let i=this.hls,o=e.data,s=Su(e,n),c=hr.parseMasterPlaylist(o,s);if(c.playlistParsingError){t.parsing.end=performance.now(),this.handleManifestParsingError(e,n,c.playlistParsingError,r,t);return}let{contentSteering:l,levels:u,sessionData:d,sessionKeys:f,startTimeOffset:p,variableList:m}=c;this.variableList=m,u.forEach(e=>{let{unknownCodecs:t}=e;if(t){let{preferManagedMediaSource:n}=this.hls.config,{audioCodec:r,videoCodec:i}=e;for(let a=t.length;a--;){let o=t[a];Ve(o,`audio`,n)?(e.audioCodec=r=r?`${r},${o}`:o,ze.audio[r.substring(0,4)]=2,t.splice(a,1)):Ve(o,`video`,n)&&(e.videoCodec=i=i?`${i},${o}`:o,ze.video[i.substring(0,4)]=2,t.splice(a,1))}}});let{AUDIO:h=[],SUBTITLES:g,"CLOSED-CAPTIONS":_}=hr.parseMasterPlaylistMedia(o,s,c);h.length&&!h.some(e=>!e.url)&&u[0].audioCodec&&!u[0].attrs.AUDIO&&(this.hls.logger.log(`[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one`),h.unshift({type:`main`,name:`main`,groupId:`main`,default:!1,autoselect:!1,forced:!1,id:-1,attrs:new G({}),bitrate:0,url:``})),i.trigger(a.MANIFEST_LOADED,{levels:u,audioTracks:h,subtitles:g,captions:_,contentSteering:l,url:s,stats:t,networkDetails:r,sessionData:d,sessionKeys:f,startTimeOffset:p,variableList:m})}handleTrackOrLevelPlaylist(t,n,r,i,s){let c=this.hls,{id:l,level:u,type:d}=r,f=Su(t,r),p=e(u)?u:e(l)?l:0,m=xu(r),h=hr.parseLevelPlaylist(t.data,f,p,m,0,this.variableList);if(d===o.MANIFEST){let e={attrs:new G({}),bitrate:0,details:h,name:``,url:f};h.requestScheduled=n.loading.start+Lr(h,0),c.trigger(a.MANIFEST_LOADED,{levels:[e],audioTracks:[],url:f,stats:n,networkDetails:i,sessionData:null,sessionKeys:null,contentSteering:null,startTimeOffset:null,variableList:null})}n.parsing.end=performance.now(),r.levelDetails=h,this.handlePlaylistLoaded(h,t,n,r,i,s)}handleManifestParsingError(e,t,n,s,c){this.hls.trigger(a.ERROR,{type:r.NETWORK_ERROR,details:i.MANIFEST_PARSING_ERROR,fatal:t.type===o.MANIFEST,url:e.url,err:n,error:n,reason:n.message,response:e,context:t,networkDetails:s,stats:c})}handleNetworkError(e,t,n=!1,s,c){let l=`A network ${n?`timeout`:`error`+(s?` (status `+s.code+`)`:``)} occurred while loading ${e.type}`;e.type===o.LEVEL?l+=`: ${e.level} id: ${e.id}`:(e.type===o.AUDIO_TRACK||e.type===o.SUBTITLE_TRACK)&&(l+=` id: ${e.id} group-id: "${e.groupId}"`);let u=Error(l);this.hls.logger.warn(`[playlist-loader]: ${l}`);let d=i.UNKNOWN,f=!1,m=this.getInternalLoader(e);switch(e.type){case o.MANIFEST:d=n?i.MANIFEST_LOAD_TIMEOUT:i.MANIFEST_LOAD_ERROR,f=!0;break;case o.LEVEL:d=n?i.LEVEL_LOAD_TIMEOUT:i.LEVEL_LOAD_ERROR,f=!1;break;case o.AUDIO_TRACK:d=n?i.AUDIO_TRACK_LOAD_TIMEOUT:i.AUDIO_TRACK_LOAD_ERROR,f=!1;break;case o.SUBTITLE_TRACK:d=n?i.SUBTITLE_TRACK_LOAD_TIMEOUT:i.SUBTITLE_LOAD_ERROR,f=!1;break}m&&this.resetInternalLoader(e.type);let h={type:r.NETWORK_ERROR,details:d,fatal:f,url:e.url,loader:m,context:e,error:u,networkDetails:t,stats:c};s&&(h.response=p({url:t?.url||e.url,data:void 0},s)),this.hls.trigger(a.ERROR,h)}handlePlaylistLoaded(e,t,n,c,l,u){let d=this.hls,{type:f,level:p,levelOrTrack:m,id:h,groupId:g,deliveryDirectives:_}=c,v=Su(t,c),y=xu(c),b=typeof c.level==`number`&&y===s.MAIN?p:void 0,x=e.playlistParsingError;if(x){if(this.hls.logger.warn(`${x} ${e.url}`),!d.config.ignorePlaylistParsingErrors){d.trigger(a.ERROR,{type:r.NETWORK_ERROR,details:i.LEVEL_PARSING_ERROR,fatal:!1,url:v,error:x,reason:x.message,response:t,context:c,level:b,parent:y,networkDetails:l,stats:n});return}e.playlistParsingError=null}if(!e.fragments.length){let o=e.playlistParsingError=Error(`No Segments found in Playlist`);d.trigger(a.ERROR,{type:r.NETWORK_ERROR,details:i.LEVEL_EMPTY_ERROR,fatal:!1,url:v,error:o,reason:o.message,response:t,context:c,level:b,parent:y,networkDetails:l,stats:n});return}switch(e.live&&u&&(u.getCacheAge&&(e.ageHeader=u.getCacheAge()||0),(!u.getCacheAge||isNaN(e.ageHeader))&&(e.ageHeader=0)),f){case o.MANIFEST:case o.LEVEL:if(b){if(!m)b=0;else if(m!==d.levels[b]){let e=d.levels.indexOf(m);e>-1&&(b=e)}}d.trigger(a.LEVEL_LOADED,{details:e,levelInfo:m||d.levels[0],level:b||0,id:h||0,stats:n,networkDetails:l,deliveryDirectives:_,withoutMultiVariant:f===o.MANIFEST});break;case o.AUDIO_TRACK:d.trigger(a.AUDIO_TRACK_LOADED,{details:e,track:m,id:h||0,groupId:g||``,stats:n,networkDetails:l,deliveryDirectives:_});break;case o.SUBTITLE_TRACK:d.trigger(a.SUBTITLE_TRACK_LOADED,{details:e,track:m,id:h||0,groupId:g||``,stats:n,networkDetails:l,deliveryDirectives:_});break}}},$=class e{static get version(){return si}static isMSESupported(){return mu()}static isSupported(){return hu()}static getMediaSource(){return T()}static get Events(){return a}static get MetadataSchema(){return qi}static get ErrorTypes(){return r}static get ErrorDetails(){return i}static get DefaultConfig(){return e.defaultConfig?e.defaultConfig:Kl}static set DefaultConfig(t){e.defaultConfig=t}constructor(t={}){this.config=void 0,this.userConfig=void 0,this.logger=void 0,this.coreComponents=void 0,this.networkControllers=void 0,this._emitter=new oi,this._autoLevelCapping=-1,this._maxHdcpLevel=null,this.abrController=void 0,this.bufferController=void 0,this.capLevelController=void 0,this.latencyController=void 0,this.levelController=void 0,this.streamController=void 0,this.audioStreamController=void 0,this.subtititleStreamController=void 0,this.audioTrackController=void 0,this.subtitleTrackController=void 0,this.interstitialsController=void 0,this.gapController=void 0,this.emeController=void 0,this.cmcdController=void 0,this._media=null,this._url=null,this._sessionId=void 0,this.triggeringException=void 0,this.started=!1;let n=this.logger=C(t.debug||!1,`Hls instance`,t.assetPlayerId),r=this.config=Jl(e.DefaultConfig,t,n);this.userConfig=t,r.progressive&&Xl(r,n);let{abrController:i,bufferController:o,capLevelController:s,errorController:c,fpsController:l}=r,u=new c(this),d=this.abrController=new i(this),f=new on(this),p=r.interstitialsController,m=p?this.interstitialsController=new p(this,e):null,h=this.bufferController=new o(this,f),g=this.capLevelController=new s(this),_=new l(this),v=new Cu(this),y=r.contentSteeringController,b=y?new y(this):null,x=this.levelController=new du(this,b),S=new lu(this),w=new yu(this.config,this.logger),T=this.streamController=new vu(this,f,w),E=this.gapController=new tu(this,f);g.setStreamController(T),_.setStreamController(T);let D=[v,x,T];m&&D.splice(1,0,m),b&&D.splice(1,0,b),this.networkControllers=D;let O=[d,h,E,g,_,S,f];this.audioTrackController=this.createController(r.audioTrackController,D);let k=r.audioStreamController;k&&D.push(this.audioStreamController=new k(this,f,w)),this.subtitleTrackController=this.createController(r.subtitleTrackController,D);let A=r.subtitleStreamController;A&&D.push(this.subtititleStreamController=new A(this,f,w)),this.createController(r.timelineController,O),w.emeController=this.emeController=this.createController(r.emeController,O),this.cmcdController=this.createController(r.cmcdController,O),this.latencyController=this.createController(uu,O),this.coreComponents=O,D.push(u);let j=u.onErrorOut;typeof j==`function`&&this.on(a.ERROR,j,u),this.on(a.MANIFEST_LOADED,v.onManifestLoaded,v)}createController(e,t){if(e){let n=new e(this);return t&&t.push(n),n}return null}on(e,t,n=this){this._emitter.on(e,t,n)}once(e,t,n=this){this._emitter.once(e,t,n)}removeAllListeners(e){this._emitter.removeAllListeners(e)}off(e,t,n=this,r){this._emitter.off(e,t,n,r)}listeners(e){return this._emitter.listeners(e)}emit(e,t,n){return this._emitter.emit(e,t,n)}trigger(e,t){if(this.config.debug)return this.emit(e,e,t);try{return this.emit(e,e,t)}catch(t){if(this.logger.error(`An internal error happened while handling event `+e+`. Error message: "`+t.message+`". Here is a stacktrace:`,t),!this.triggeringException){this.triggeringException=!0;let n=e===a.ERROR;this.trigger(a.ERROR,{type:r.OTHER_ERROR,details:i.INTERNAL_EXCEPTION,fatal:n,event:e,error:t}),this.triggeringException=!1}}return!1}listenerCount(e){return this._emitter.listenerCount(e)}destroy(){this.logger.log(`destroy`),this.trigger(a.DESTROYING,void 0),this.detachMedia(),this.removeAllListeners(),this._autoLevelCapping=-1,this._url=null,this.networkControllers.forEach(e=>e.destroy()),this.networkControllers.length=0,this.coreComponents.forEach(e=>e.destroy()),this.coreComponents.length=0;let e=this.config;e.xhrSetup=e.fetchSetup=void 0,this.userConfig=null}attachMedia(e){if(!e||`media`in e&&!e.media){let t=Error(`attachMedia failed: invalid argument (${e})`);this.trigger(a.ERROR,{type:r.OTHER_ERROR,details:i.ATTACH_MEDIA_ERROR,fatal:!0,error:t});return}this.logger.log(`attachMedia`),this._media&&(this.logger.warn(`media must be detached before attaching`),this.detachMedia());let t=`media`in e,n=t?e.media:e,o=t?e:{media:n};this._media=n,this.trigger(a.MEDIA_ATTACHING,o)}detachMedia(){this.logger.log(`detachMedia`),this.trigger(a.MEDIA_DETACHING,{}),this._media=null}transferMedia(){this._media=null;let e=this.bufferController.transferMedia();return this.trigger(a.MEDIA_DETACHING,{transferMedia:e}),e}loadSource(e){this.stopLoad();let t=this.media,n=this._url,r=this._url=F.buildAbsoluteURL(self.location.href,e,{alwaysNormalize:!0});this._autoLevelCapping=-1,this._maxHdcpLevel=null,this.logger.log(`loadSource:${r}`),t&&n&&(n!==r||this.bufferController.hasSourceTypes())&&(this.detachMedia(),this.attachMedia(t)),this.trigger(a.MANIFEST_LOADING,{url:e})}get url(){return this._url}get hasEnoughToStart(){return this.streamController.hasEnoughToStart}get startPosition(){return this.streamController.startPositionValue}startLoad(e=-1,t){this.logger.log(`startLoad(${e+(t?`, <skip seek to start>`:``)})`),this.started=!0,this.resumeBuffering();for(let n=0;n<this.networkControllers.length&&(this.networkControllers[n].startLoad(e,t),!(!this.started||!this.networkControllers));n++);}stopLoad(){this.logger.log(`stopLoad`),this.started=!1;for(let e=0;e<this.networkControllers.length&&(this.networkControllers[e].stopLoad(),!(this.started||!this.networkControllers));e++);}get loadingEnabled(){return this.started}get bufferingEnabled(){return this.streamController.bufferingEnabled}resumeBuffering(){this.bufferingEnabled||(this.logger.log(`resume buffering`),this.networkControllers.forEach(e=>{e.resumeBuffering&&e.resumeBuffering()}))}pauseBuffering(){this.bufferingEnabled&&(this.logger.log(`pause buffering`),this.networkControllers.forEach(e=>{e.pauseBuffering&&e.pauseBuffering()}))}get inFlightFragments(){let e={[s.MAIN]:this.streamController.inFlightFrag};return this.audioStreamController&&(e[s.AUDIO]=this.audioStreamController.inFlightFrag),this.subtititleStreamController&&(e[s.SUBTITLE]=this.subtititleStreamController.inFlightFrag),e}swapAudioCodec(){this.logger.log(`swapAudioCodec`),this.streamController.swapAudioCodec()}recoverMediaError(){this.logger.log(`recoverMediaError`);let e=this._media,t=e?.currentTime;this.detachMedia(),e&&(this.attachMedia(e),t&&this.startLoad(t))}removeLevel(e){this.levelController.removeLevel(e)}get sessionId(){let e=this._sessionId;return e||=this._sessionId=lc(),e}get levels(){return this.levelController.levels||[]}get latestLevelDetails(){return this.streamController.getLevelDetails()||null}get loadLevelObj(){return this.levelController.loadLevelObj}get currentLevel(){return this.streamController.currentLevel}set currentLevel(e){this.logger.log(`set currentLevel:${e}`),this.levelController.manualLevel=e,this.streamController.immediateLevelSwitch()}get nextLevel(){return this.streamController.nextLevel}set nextLevel(e){this.logger.log(`set nextLevel:${e}`),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}get loadLevel(){return this.levelController.level}set loadLevel(e){this.logger.log(`set loadLevel:${e}`),this.levelController.manualLevel=e}get nextLoadLevel(){return this.levelController.nextLoadLevel}set nextLoadLevel(e){this.levelController.nextLoadLevel=e}get firstLevel(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)}set firstLevel(e){this.logger.log(`set firstLevel:${e}`),this.levelController.firstLevel=e}get startLevel(){let e=this.levelController.startLevel;return e===-1&&this.abrController.forcedAutoLevel>-1?this.abrController.forcedAutoLevel:e}set startLevel(e){this.logger.log(`set startLevel:${e}`),e!==-1&&(e=Math.max(e,this.minAutoLevel)),this.levelController.startLevel=e}get capLevelToPlayerSize(){return this.config.capLevelToPlayerSize}set capLevelToPlayerSize(e){let t=!!e;t!==this.config.capLevelToPlayerSize&&(t?this.capLevelController.startCapping():(this.capLevelController.stopCapping(),this.autoLevelCapping=-1,this.streamController.nextLevelSwitch()),this.config.capLevelToPlayerSize=t)}get autoLevelCapping(){return this._autoLevelCapping}get bandwidthEstimate(){let{bwEstimator:e}=this.abrController;return e?e.getEstimate():NaN}set bandwidthEstimate(e){this.abrController.resetEstimator(e)}get abrEwmaDefaultEstimate(){let{bwEstimator:e}=this.abrController;return e?e.defaultEstimate:NaN}get ttfbEstimate(){let{bwEstimator:e}=this.abrController;return e?e.getEstimateTTFB():NaN}set autoLevelCapping(e){this._autoLevelCapping!==e&&(this.logger.log(`set autoLevelCapping:${e}`),this._autoLevelCapping=e,this.levelController.checkMaxAutoUpdated())}get maxHdcpLevel(){return this._maxHdcpLevel}set maxHdcpLevel(e){ht(e)&&this._maxHdcpLevel!==e&&(this._maxHdcpLevel=e,this.levelController.checkMaxAutoUpdated())}get autoLevelEnabled(){return this.levelController.manualLevel===-1}get manualLevel(){return this.levelController.manualLevel}get minAutoLevel(){let{levels:e,config:{minAutoBitrate:t}}=this;if(!e)return 0;let n=e.length;for(let r=0;r<n;r++)if(e[r].maxBitrate>=t)return r;return 0}get maxAutoLevel(){let{levels:e,autoLevelCapping:t,maxHdcpLevel:n}=this,r;if(r=t===-1&&e!=null&&e.length?e.length-1:t,n)for(let t=r;t--;){let r=e[t].attrs[`HDCP-LEVEL`];if(r&&r<=n)return t}return r}get firstAutoLevel(){return this.abrController.firstAutoLevel}get nextAutoLevel(){return this.abrController.nextAutoLevel}set nextAutoLevel(e){this.abrController.nextAutoLevel=e}get playingDate(){return this.streamController.currentProgramDateTime}get mainForwardBufferInfo(){return this.streamController.getMainFwdBufferInfo()}get maxBufferLength(){return this.streamController.maxBufferLength}setAudioOption(e){return this.audioTrackController?.setAudioOption(e)||null}setSubtitleOption(e){return this.subtitleTrackController?.setSubtitleOption(e)||null}get allAudioTracks(){let e=this.audioTrackController;return e?e.allAudioTracks:[]}get audioTracks(){let e=this.audioTrackController;return e?e.audioTracks:[]}get audioTrack(){let e=this.audioTrackController;return e?e.audioTrack:-1}set audioTrack(e){let t=this.audioTrackController;t&&(t.audioTrack=e)}get allSubtitleTracks(){let e=this.subtitleTrackController;return e?e.allSubtitleTracks:[]}get subtitleTracks(){let e=this.subtitleTrackController;return e?e.subtitleTracks:[]}get subtitleTrack(){let e=this.subtitleTrackController;return e?e.subtitleTrack:-1}get media(){return this._media}set subtitleTrack(e){let t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}get subtitleDisplay(){let e=this.subtitleTrackController;return e?e.subtitleDisplay:!1}set subtitleDisplay(e){let t=this.subtitleTrackController;t&&(t.subtitleDisplay=e)}get lowLatencyMode(){return this.config.lowLatencyMode}set lowLatencyMode(e){this.config.lowLatencyMode=e}get liveSyncPosition(){return this.latencyController.liveSyncPosition}get latency(){return this.latencyController.latency}get maxLatency(){return this.latencyController.maxLatency}get targetLatency(){return this.latencyController.targetLatency}set targetLatency(e){this.latencyController.targetLatency=e}get drift(){return this.latencyController.drift}get forceStartLoad(){return this.streamController.forceStartLoad}get pathways(){return this.levelController.pathways}get pathwayPriority(){return this.levelController.pathwayPriority}set pathwayPriority(e){this.levelController.pathwayPriority=e}get bufferedToEnd(){var e;return!!((e=this.bufferController)!=null&&e.bufferedToEnd)}get interstitialsManager(){return this.interstitialsController?.interstitialsManager||null}getMediaDecodingInfo(e,t=this.allAudioTracks){return ct(e,Ot(t),navigator.mediaCapabilities)}};$.defaultConfig=void 0;var wu=class{callback;heartbeatInterval;watchProgressTimer;isBuffering=!1;sessionId;videoId;deviceType;networkType;adBreaks=[];isFirstPlay=!0;watchStartTime=null;totalWatchTime=0;streamingWindowStart=null;streamingTime=0;isInAdBreak=!1;adWatchWindowStart=null;adWatchTime=0;bufferingCount=0;totalBufferingTime=0;bufferingStartTime=null;milestonesHit=new Set;lastHeartbeatPosition=null;lastHeartbeatAt=null;constructor(e,t,n){this.callback=e,this.sessionId=n?.sessionId??this.generateSessionId(),this.videoId=t?this.extractVideoId(t):``,this.deviceType=this.getDeviceType(),this.networkType=this.getNetworkType(),n&&(this.isFirstPlay=!n.sessionStartFired,this.totalWatchTime=n.totalWatchTime,this.streamingTime=n.streamingTime,this.adWatchTime=n.adWatchTime,this.bufferingCount=n.bufferingCount,this.totalBufferingTime=n.totalBufferingTime,this.milestonesHit=new Set(n.milestonesHit))}getSessionSnapshot(){let e=this.totalBufferingTime;return this.bufferingStartTime!==null&&(e+=(Date.now()-this.bufferingStartTime)/1e3),{sessionId:this.sessionId,sessionStartFired:!this.isFirstPlay,totalWatchTime:this.getTotalWatchTime(),streamingTime:this.getStreamingTime(),adWatchTime:this.getAdWatchTime(),bufferingCount:this.bufferingCount,totalBufferingTime:e,milestonesHit:[...this.milestonesHit]}}registerCallback(e){this.callback=e}setAdBreaks(e){this.adBreaks=e}getTotalAdDuration(){return this.adBreaks.reduce((e,t)=>e+(t.endTime-t.startTime),0)}getElapsedAdTime(e){return this.adBreaks.reduce((t,n)=>e>=n.endTime?t+(n.endTime-n.startTime):e>n.startTime?t+(e-n.startTime):t,0)}track(e,t,n={}){e===`play`&&this.isFirstPlay&&(this.isFirstPlay=!1,this.dispatchRaw({eventType:`session_start`,timestamp:Date.now(),currentTime:t.currentTime,duration:t.duration||0,sessionId:this.sessionId,videoId:this.videoId,deviceType:this.deviceType,networkType:this.networkType,watchPercentage:0,totalWatchTime:0,streamingTime:0,bufferingCount:0,totalBufferingTime:0})),e===`play`&&(this.watchStartTime=Date.now(),!this.isBuffering&&!this.isInAdBreak&&(this.streamingWindowStart=Date.now())),(e===`pause`||e===`ended`)&&(this.watchStartTime!==null&&(this.totalWatchTime+=(Date.now()-this.watchStartTime)/1e3,this.watchStartTime=null),this.streamingWindowStart!==null&&(this.streamingTime+=(Date.now()-this.streamingWindowStart)/1e3,this.streamingWindowStart=null),this.adWatchWindowStart!==null&&(this.adWatchTime+=(Date.now()-this.adWatchWindowStart)/1e3,this.adWatchWindowStart=null));let r=(t.duration||0)-this.getTotalAdDuration(),i=t.currentTime-this.getElapsedAdTime(t.currentTime),a=r>0?Math.min(100,Math.round(i/r*100)):0,o={eventType:e,timestamp:Date.now(),currentTime:t.currentTime,duration:t.duration||0,volume:t.volume,speed:t.playbackRate,sessionId:this.sessionId,videoId:this.videoId,deviceType:this.deviceType,networkType:this.networkType,watchPercentage:a,totalWatchTime:Math.round(this.getTotalWatchTime()),streamingTime:Math.round(this.getStreamingTime()),adWatchTime:Math.round(this.getAdWatchTime()),bufferingCount:this.bufferingCount,totalBufferingTime:Math.round(this.totalBufferingTime),...n};this.dispatchRaw(o),(e===`pause`||e===`ended`||e===`complete`)&&this.dispatchRaw({...o,eventType:`streaming_time`})}startHeartbeat(e,t,n=3e4){this.stopHeartbeat(),this.heartbeatInterval=window.setInterval(()=>{!e.paused&&!this.isBuffering&&(this.checkMilestones(e,t),this.checkStall(e,t),this.track(`heartbeat`,e,t())),this.lastHeartbeatPosition=e.currentTime,this.lastHeartbeatAt=Date.now()},5e3),this.watchProgressTimer=window.setInterval(()=>{!e.paused&&!this.isBuffering&&(this.track(`watch_progress`,e,t()),this.track(`streaming_time`,e,t()))},n)}stopHeartbeat(){this.heartbeatInterval&&=(window.clearInterval(this.heartbeatInterval),void 0),this.watchProgressTimer&&=(window.clearInterval(this.watchProgressTimer),void 0)}setBuffering(e,t,n){this.isBuffering!==e&&(this.isBuffering=e,e?(this.bufferingCount++,this.bufferingStartTime=Date.now(),this.streamingWindowStart!==null&&(this.streamingTime+=(Date.now()-this.streamingWindowStart)/1e3,this.streamingWindowStart=null)):(this.bufferingStartTime!==null&&(this.totalBufferingTime+=(Date.now()-this.bufferingStartTime)/1e3,this.bufferingStartTime=null),!t.paused&&!this.isInAdBreak&&(this.streamingWindowStart=Date.now())),this.track(e?`buffering_start`:`buffering_end`,t,n()))}setAdBreak(e,t){this.isInAdBreak!==e&&(this.isInAdBreak=e,e?(this.streamingWindowStart!==null&&(this.streamingTime+=(Date.now()-this.streamingWindowStart)/1e3,this.streamingWindowStart=null),t.paused||(this.adWatchWindowStart=Date.now())):(this.adWatchWindowStart!==null&&(this.adWatchTime+=(Date.now()-this.adWatchWindowStart)/1e3,this.adWatchWindowStart=null),!t.paused&&!this.isBuffering&&(this.streamingWindowStart=Date.now())))}checkMilestones(e,t){let{currentTime:n,duration:r}=e;if(!r)return;let i=r-this.getTotalAdDuration(),a=n-this.getElapsedAdTime(n);if(i<=0)return;let o=a/i;for(let[n,r]of[[.25,`first_quartile`],[.5,`midpoint`],[.75,`third_quartile`]])o>=n&&!this.milestonesHit.has(r)&&(this.milestonesHit.add(r),this.track(r,e,{...t(),watchPercentage:n*100}))}checkStall(e,t){this.lastHeartbeatPosition!==null&&this.lastHeartbeatAt!==null&&e.currentTime-this.lastHeartbeatPosition<.1&&Date.now()-this.lastHeartbeatAt>=4500&&this.track(`stall`,e,t())}getTotalWatchTime(){return this.watchStartTime===null?this.totalWatchTime:this.totalWatchTime+(Date.now()-this.watchStartTime)/1e3}getStreamingTime(){return this.streamingWindowStart===null?this.streamingTime:this.streamingTime+(Date.now()-this.streamingWindowStart)/1e3}getAdWatchTime(){return this.adWatchWindowStart===null?this.adWatchTime:this.adWatchTime+(Date.now()-this.adWatchWindowStart)/1e3}dispatchRaw(e){if(this.callback)try{this.callback(e)}catch(e){console.error(`[PlayerSDK Analytics] Callback failed:`,e)}}generateSessionId(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`sess-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}extractVideoId(e){try{let t=new URL(e),n=t.pathname.split(`/`).filter(Boolean);return n.length>0&&n[n.length-1].includes(`.`)&&n.pop(),n[n.length-1]||t.hostname}catch{let t=e.split(`/`).filter(Boolean);return t.length>=2&&t[t.length-1].includes(`.`)?t[t.length-2]:t[t.length-1]||`unknown`}}getDeviceType(){let e=navigator.userAgent;return/mobile/i.test(e)?`mobile`:/tablet|ipad/i.test(e)?`tablet`:`desktop`}getNetworkType(){let e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return e&&(e.effectiveType||e.type)||`unknown`}},Tu={session_start:`player_session_start`,error:`player_error`},Eu=new Set([`heartbeat`]),Du=class{analytics=null;logEventFn=null;pendingEvents=[];constructor(e){this.init(e)}async init(e){try{let[{initializeApp:t,getApps:n},{getAnalytics:r,logEvent:i,isSupported:a}]=await Promise.all([import(`firebase/app`),import(`firebase/analytics`)]);if(!await a()){console.warn(`[FirebaseAnalytics] Not supported in this environment.`);return}let o=n(),s=o.length===0?t(e):o[0];this.analytics=r(s),this.logEventFn=i,this.flushPending()}catch(e){console.error("[FirebaseAnalytics] Initialization failed (is the `firebase` package installed?):",e)}}flushPending(){let e=this.pendingEvents.splice(0);for(let t of e)this.logToFirebase(t)}createCallback(){return e=>this.handleEvent(e)}handleEvent(e){if(!Eu.has(e.eventType)){if(!this.analytics){this.pendingEvents.push(e);return}this.logToFirebase(e)}}logToFirebase(e){if(!this.analytics||!this.logEventFn)return;let t=Tu[e.eventType]??e.eventType,n=this.buildParams(e);try{this.logEventFn(this.analytics,t,n)}catch(e){console.error(`[FirebaseAnalytics] logEvent failed:`,e)}}buildParams(e){let t={session_id:(e.sessionId??``).slice(0,100),video_id:(e.videoId??``).slice(0,100),device_type:e.deviceType??`unknown`,network_type:e.networkType??`unknown`,current_time:Math.round(e.currentTime),duration:Math.round(e.duration),watch_percentage:e.watchPercentage??0,total_watch_time:e.totalWatchTime??0,streaming_time:e.streamingTime??0,ad_watch_time:e.adWatchTime??0,buffering_count:e.bufferingCount??0,total_buffering_time:e.totalBufferingTime??0};return e.rendition&&(t.rendition=e.rendition.slice(0,100)),e.bitrate&&(t.bitrate=e.bitrate),e.fromRendition&&(t.from_rendition=e.fromRendition.slice(0,100)),e.volume!==void 0&&(t.volume=Math.round(e.volume*100)),e.speed!==void 0&&(t.speed=e.speed),e.errorMessage&&(t.error_message=e.errorMessage.slice(0,100)),e.errorCode&&(t.error_code=e.errorCode),e.seekFrom!==void 0&&(t.seek_from=Math.round(e.seekFrom)),e.pipState&&(t.pip_state=e.pipState),t}destroy(){return Promise.resolve()}},Ou=class{keyMoments=[];currentMomentIndex=-1;onMomentChangeCallback;constructor(e=[]){this.setKeyMoments(e)}setKeyMoments(e){this.keyMoments=[...e].sort((e,t)=>e.startTime-t.startTime),this.currentMomentIndex=-1}getKeyMoments(){return this.keyMoments}getCurrentMoment(e){let t=this.keyMoments.findIndex(t=>e>=t.startTime&&e<t.endTime);return t===-1?{keyMoment:null,index:-1}:{keyMoment:this.keyMoments[t],index:t}}updateTime(e){let{keyMoment:t,index:n}=this.getCurrentMoment(e);n!==this.currentMomentIndex&&(this.currentMomentIndex=n,this.onMomentChangeCallback&&this.onMomentChangeCallback(t,n))}onMomentChange(e){this.onMomentChangeCallback=e}setChapters(e){this.setKeyMoments(e)}getChapters(){return this.getKeyMoments()}getCurrentChapter(e){let t=this.getCurrentMoment(e);return{chapter:t.keyMoment,index:t.index}}onChapterChange(e){this.onMomentChange(e)}},ku=class extends Ou{},Au=class{tracks=[];activeTrackId=`off`;currentCues=[];activeText=``;onSubtitleChangeCallback;onTrackSwitchCallback;constructor(e=[]){this.tracks=e;let t=e.find(e=>e.isDefault);t&&this.setActiveTrack(t.id)}getTracks(){return this.tracks}getActiveTrackId(){return this.activeTrackId}setHlsTracks(e){let t=this.tracks.filter(e=>!e.isHls&&!e.isNative);this.tracks=[...t,...e]}addTrack(e){this.tracks.find(t=>t.id===e.id)||this.tracks.push(e)}onTrackSwitch(e){this.onTrackSwitchCallback=e}setCustomSubtitleText(e){e!==this.activeText&&(this.activeText=e,this.onSubtitleChangeCallback&&this.onSubtitleChangeCallback(e))}async setActiveTrack(e){if(this.activeTrackId=e,e===`off`){this.currentCues=[],this.updateActiveText(0),this.onTrackSwitchCallback&&this.onTrackSwitchCallback(null);return}let t=this.tracks.find(t=>t.id===e);if(!t){this.currentCues=[],this.updateActiveText(0),this.onTrackSwitchCallback&&this.onTrackSwitchCallback(null);return}if(t.isHls||t.isNative){this.currentCues=[],this.updateActiveText(0),this.onTrackSwitchCallback&&this.onTrackSwitchCallback(t);return}if(this.onTrackSwitchCallback&&this.onTrackSwitchCallback(t),t.cues){this.currentCues=t.cues;return}if(t.src)try{let n=await fetch(t.src);if(!n.ok)throw Error(`HTTP error ${n.status}`);let r=await n.text(),i=this.parseVttOrSrt(r);t.cues=i,this.activeTrackId===e&&(this.currentCues=i)}catch(e){console.error(`[PlayerSDK Subtitles] Failed to fetch track ${t.label}:`,e),this.currentCues=[]}}updateTime(e){if(this.activeTrackId===`off`||this.currentCues.length===0){let e=this.tracks.find(e=>e.id===this.activeTrackId);(!e||!e.isHls&&!e.isNative)&&this.activeText!==``&&(this.activeText=``,this.onSubtitleChangeCallback&&this.onSubtitleChangeCallback(``));return}this.updateActiveText(e)}updateActiveText(e){let t=this.currentCues.filter(t=>e>=t.startTime&&e<=t.endTime).map(e=>e.text).join(`<br />`);t!==this.activeText&&(this.activeText=t,this.onSubtitleChangeCallback&&this.onSubtitleChangeCallback(t))}onSubtitleChange(e){this.onSubtitleChangeCallback=e}parseVttOrSrt(e){let t=e.replace(/^/,``);if(t.trimStart().startsWith(`#EXTM3U`))return[];let n=[],r=t.split(/\r?\n/),i=0,a=0,o=[],s=!1,c=!1,l=/(\d+):(\d{2}):(\d{2})[.,](\d{3})\s*-->\s*(\d+):(\d{2}):(\d{2})[.,](\d{3})/,u=/^(\d{2}):(\d{2})[.,](\d{3})\s*-->\s*(\d{2}):(\d{2})[.,](\d{3})/,d=(e,t,n,r)=>parseInt(e,10)*3600+parseInt(t,10)*60+parseInt(n,10)+parseInt(r,10)/1e3,f=e=>e.replace(/<\d{2}[:.]\d{2}[:.]\d{2}\.\d{3}>/g,``).replace(/<[^>]+>/g,``),p=()=>{s&&o.length>0&&n.push({startTime:i,endTime:a,text:o.map(f).join(`
|
|
41
|
-
`)}),o=[],s=!1};for(let e of r){let t=e.trim();if(!t){s&&p(),c=!1;continue}let n=t.toUpperCase();if(n===`WEBVTT`||n.startsWith(`NOTE`)||n.startsWith(`X-TIMESTAMP-MAP`)||n.startsWith(`STYLE`)||n.startsWith(`REGION`)){c=!0;continue}if(c)continue;let r=t.match(l);if(r){p(),i=d(r[1],r[2],r[3],r[4]),a=d(r[5],r[6],r[7],r[8]),s=!0;continue}let f=t.match(u);if(f){p(),i=parseInt(f[1],10)*60+parseInt(f[2],10)+parseInt(f[3],10)/1e3,a=parseInt(f[4],10)*60+parseInt(f[5],10)+parseInt(f[6],10)/1e3,s=!0;continue}s&&o.push(t)}return p(),n}},ju=class{config;watermarkElement;floatInterval;constructor(e){this.config=e}validateDomain(e){return!this.config||!this.config.allowedDomains||this.config.allowedDomains.length===0?!0:this.config.allowedDomains.includes(e)||this.config.allowedDomains.some(t=>e.endsWith(`.${t}`))}getAuthToken(){return this.config?.authToken}getAuthHeader(){return this.config?.authHeader}getRequestHeaders(){let e={};return this.config?.authToken&&this.config?.authHeader&&(e[this.config.authHeader]=this.config.authToken),e}setupWatermark(e){if(this.removeWatermark(),!this.config||!this.config.watermarkText)return;let t=this.config.watermarkText,n=document.createElement(`div`);n.className=`sdk-watermark-overlay`,n.innerText=t,n.style.position=`absolute`,n.style.pointerEvents=`none`,n.style.userSelect=`none`,n.style.color=`rgba(255, 255, 255, 0.4)`,n.style.fontSize=`12px`,n.style.fontFamily=`monospace`,n.style.fontWeight=`bold`,n.style.zIndex=`9`,n.style.padding=`4px 8px`,n.style.borderRadius=`4px`,n.style.background=`rgba(0, 0, 0, 0.4)`,n.style.backdropFilter=`blur(2px)`,n.style.top=`20px`,n.style.right=`20px`,e.appendChild(n),this.watermarkElement=n}removeWatermark(){this.floatInterval&&=(window.clearInterval(this.floatInterval),void 0),this.watermarkElement&&this.watermarkElement.parentElement&&this.watermarkElement.parentElement.removeChild(this.watermarkElement),this.watermarkElement=void 0}isDRMProtected(){return!!(this.config?.widevineLicenseUrl||this.config?.playreadyLicenseUrl||this.config?.fairplayLicenseUrl)}getDRMDetails(){return{widevine:this.config?.widevineLicenseUrl||null,playready:this.config?.playreadyLicenseUrl||null,fairplay:this.config?.fairplayLicenseUrl||null,authTokenPresent:!!this.config?.authToken,allowedDomains:this.config?.allowedDomains||[]}}},Mu=class{isCasting=!1;castDeviceName=``;onCastStateChangeCallback;onRemoteStateChangeCallback;castContext=null;remotePlayer=null;remotePlayerController=null;constructor(){this.initCastApi()}initCastApi(){let e=()=>{try{if(!window.cast?.framework||!window.chrome?.cast?.media)return;this.castContext=window.cast.framework.CastContext.getInstance(),this.castContext.setOptions({receiverApplicationId:window.chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,autoJoinPolicy:window.chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}),this.remotePlayer=new window.cast.framework.RemotePlayer,this.remotePlayerController=new window.cast.framework.RemotePlayerController(this.remotePlayer),this.remotePlayerController.addEventListener(window.cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,()=>{this.isCasting=this.remotePlayer.isConnected;let e=this.castContext.getCurrentSession();this.castDeviceName=e?e.getCastDevice().friendlyName:``,this.onCastStateChangeCallback&&this.onCastStateChangeCallback(this.isCasting,this.castDeviceName)});let e=()=>{this.onRemoteStateChangeCallback&&this.remotePlayer&&this.isCasting&&this.onRemoteStateChangeCallback({currentTime:this.remotePlayer.currentTime??0,duration:this.remotePlayer.duration??0,isPaused:this.remotePlayer.isPaused??!0,volumeLevel:this.remotePlayer.volumeLevel??1,isMuted:this.remotePlayer.isMuted??!1})},t=window.cast.framework.RemotePlayerEventType;this.remotePlayerController.addEventListener(t.CURRENT_TIME_CHANGED,e),this.remotePlayerController.addEventListener(t.IS_PAUSED_CHANGED,e),this.remotePlayerController.addEventListener(t.VOLUME_LEVEL_CHANGED,e),this.remotePlayerController.addEventListener(t.IS_MUTED_CHANGED,e),this.remotePlayerController.addEventListener(t.DURATION_CHANGED,e),this.remotePlayerController.addEventListener(t.PLAYER_STATE_CHANGED,e)}catch(e){console.warn(`[PlayerSDK Cast] Failed to initialize Cast API:`,e)}};window.cast?.framework?e():(window.__onGCastApiAvailable=t=>{t&&e()},window.__castApiAvailable===!0&&e())}getCastingState(){return{isCasting:this.isCasting,deviceName:this.castDeviceName}}getRemoteState(){return!this.remotePlayer||!this.isCasting?null:{currentTime:this.remotePlayer.currentTime??0,duration:this.remotePlayer.duration??0,isPaused:this.remotePlayer.isPaused??!0,volumeLevel:this.remotePlayer.volumeLevel??1,isMuted:this.remotePlayer.isMuted??!1}}getContentType(e){let t=e.split(/[?#]/)[0].toLowerCase();return t.endsWith(`.m3u8`)?`application/x-mpegurl`:t.endsWith(`.mpd`)?`application/dash+xml`:`video/mp4`}async requestSession(e,t){if(!this.castContext){console.error(`[PlayerSDK Cast] Google Cast Framework not loaded.`);return}try{await this.castContext.requestSession();let n=this.castContext.getCurrentSession();if(n&&e){let r=new window.chrome.cast.media.MediaInfo(e,this.getContentType(e)),i=new window.chrome.cast.media.LoadRequest(r);i.currentTime=t,i.autoplay=!0,await n.loadMedia(i)}}catch(e){console.warn(`[PlayerSDK Cast] Session request failed or cancelled by user.`,e)}}stopCasting(){if(this.castContext)try{this.castContext.endCurrentSession(!0)}catch(e){console.warn(`[PlayerSDK Cast] Failed to disconnect session`,e)}}remotePlayPause(){if(this.remotePlayerController)try{this.remotePlayerController.playOrPause()}catch(e){console.warn(`[PlayerSDK Cast] remotePlayPause failed:`,e)}}remoteSeek(e){if(this.remotePlayer&&this.remotePlayerController)try{this.remotePlayer.currentTime=Math.max(0,e),this.remotePlayerController.seek()}catch(e){console.warn(`[PlayerSDK Cast] remoteSeek failed:`,e)}}remoteSetVolume(e){if(this.remotePlayer&&this.remotePlayerController)try{this.remotePlayer.volumeLevel=Math.max(0,Math.min(1,e)),this.remotePlayerController.setVolumeLevel()}catch(e){console.warn(`[PlayerSDK Cast] remoteSetVolume failed:`,e)}}remoteSetMute(e){if(this.remotePlayer&&this.remotePlayerController)try{this.remotePlayer.isMuted!==e&&this.remotePlayerController.muteOrUnmute()}catch(e){console.warn(`[PlayerSDK Cast] remoteSetMute failed:`,e)}}onCastStateChange(e){this.onCastStateChangeCallback=e}onRemoteStateChange(e){this.onRemoteStateChangeCallback=e}requestAirPlaySession(e){let t=e;typeof t.webkitShowPlaybackTargetPicker==`function`?t.webkitShowPlaybackTargetPicker():console.warn(`[PlayerSDK AirPlay] AirPlay request is not supported on this device.`)}stopAirPlay(e){let t=e;typeof t.webkitShowPlaybackTargetPicker==`function`?t.webkitShowPlaybackTargetPicker():console.warn(`[PlayerSDK AirPlay] AirPlay stop is not supported on this device.`)}isAirPlayAvailable(){return!!window.WebKitPlaybackTargetAvailabilityEvent||navigator.userAgent.includes(`Safari`)&&!navigator.userAgent.includes(`Chrome`)}},Nu=class{config;constructor(e){this.config=e}getThumbnail(e){if(!this.config)return null;let{spriteUrl:t,tileWidth:n,tileHeight:r,columns:i,interval:a,totalCount:o}=this.config,s=Math.floor(e/a);s<0&&(s=0),s>=o&&(s=o-1);let c=s%i,l=Math.floor(s/i);return{url:t,x:c*n,y:l*r,width:n,height:r}}hasThumbnails(){return!!this.config}},Pu=class e{options;videoElement;hlsInstance=null;dashInstance=null;activeQuality={id:-1,height:0,width:0,bitrate:0,label:`Auto`};qualityLevels=[];analytics;keyMoments;chapters;subtitles;drm;casting;thumbnails;hlsSubtitleCues=new Map;hlsActiveSubtitleKey=null;audioTrackList=[];adBreaks=[];isAdBreak=!1;adBreaksFromAvails=!1;contentPlaybackRate=1;networkErrorRetries=0;mediaErrorRecovered=!1;static MAX_NETWORK_RETRIES=2;static TERMINAL_HTTP_STATUSES=[401,403,404,410];static STALL_TIMEOUT_MS=15e3;stallTimer=null;isBuffering=!1;progressTick=0;hasFailed=!1;lastPlaybackPos=0;pendingSeekAttribution=null;eventListeners={};constructor(e){this.options={autoplay:!1,muted:!1,themeColor:`#6366f1`,...e},this.analytics=new wu(this.options.analyticsCallback,this.options.src,this.options.analyticsSessionSeed),this.keyMoments=new Ou(this.options.keyMoments||this.options.chapters||[]),this.chapters=this.keyMoments,this.subtitles=new Au(this.options.subtitles),this.drm=new ju(this.options.drm),this.casting=new Mu,this.thumbnails=new Nu(this.options.thumbnails),this.initializePlayer()}initializePlayer(){let e=window.location.hostname;if(!this.drm.validateDomain(e)){let t=`Domain Blocked: Access to streaming content is restricted on ${e}.`;throw console.error(t),this.options.container.innerHTML=`
|
|
40
|
+
`:(i=n.childNodes)!=null&&i.length?xl(n,t):t?e+n.textContent.trim().replace(/\s+/g,` `):e+n.textContent},``)}function Sl(e,t,n){let r=`http://www.w3.org/ns/ttml#styling`,i=null,a=[`displayAlign`,`textAlign`,`color`,`backgroundColor`,`fontSize`,`fontFamily`],o=e!=null&&e.hasAttribute(`style`)?e.getAttribute(`style`):null;return o&&n.hasOwnProperty(o)&&(i=n[o]),a.reduce((n,a)=>{let o=Cl(t,r,a)||Cl(e,r,a)||Cl(i,r,a);return o&&(n[a]=o),n},{})}function Cl(e,t,n){return e&&e.hasAttributeNS(t,n)?e.getAttributeNS(t,n):null}function wl(e){return Error(`Could not parse ttml timestamp ${e}`)}function Tl(e,t){if(!e)return null;let n=$c(e);return n===null&&(ml.test(e)?n=El(e,t):hl.test(e)&&(n=Dl(e,t))),n}function El(e,t){let n=ml.exec(e),r=(n[4]|0)+(n[5]|0)/t.subFrameRate;return(n[1]|0)*3600+(n[2]|0)*60+(n[3]|0)+r/t.frameRate}function Dl(e,t){let n=hl.exec(e),r=Number(n[1]);switch(n[2]){case`h`:return r*3600;case`m`:return r*60;case`ms`:return r*1e3;case`f`:return r/t.frameRate;case`t`:return r/t.tickRate}return r}var Ol=class{constructor(e,t){this.timelineController=void 0,this.cueRanges=[],this.trackName=void 0,this.startTime=null,this.endTime=null,this.screen=null,this.timelineController=e,this.trackName=t}dispatchCue(){this.startTime!==null&&(this.timelineController.addCues(this.trackName,this.startTime,this.endTime,this.screen,this.cueRanges),this.startTime=null)}newCue(e,t,n){(this.startTime===null||this.startTime>e)&&(this.startTime=e),this.endTime=t,this.screen=n,this.timelineController.createCaptionsTrack(this.trackName)}reset(){this.cueRanges=[],this.startTime=null}},kl=class{constructor(e){this.hls=void 0,this.media=null,this.config=void 0,this.enabled=!0,this.Cues=void 0,this.textTracks=[],this.tracks=[],this.initPTS=[],this.unparsedVttFrags=[],this.captionsTracks={},this.nonNativeCaptionsTracks={},this.cea608Parser1=void 0,this.cea608Parser2=void 0,this.lastCc=-1,this.lastSn=-1,this.lastPartIndex=-1,this.prevCC=-1,this.vttCCs=Nl(),this.captionsProperties=void 0,this.hls=e,this.config=e.config,this.Cues=e.config.cueHandler,this.captionsProperties={textTrack1:{label:this.config.captionsTextTrack1Label,languageCode:this.config.captionsTextTrack1LanguageCode},textTrack2:{label:this.config.captionsTextTrack2Label,languageCode:this.config.captionsTextTrack2LanguageCode},textTrack3:{label:this.config.captionsTextTrack3Label,languageCode:this.config.captionsTextTrack3LanguageCode},textTrack4:{label:this.config.captionsTextTrack4Label,languageCode:this.config.captionsTextTrack4LanguageCode}},e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(a.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.on(a.FRAG_LOADING,this.onFragLoading,this),e.on(a.FRAG_LOADED,this.onFragLoaded,this),e.on(a.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.on(a.FRAG_DECRYPTED,this.onFragDecrypted,this),e.on(a.INIT_PTS_FOUND,this.onInitPtsFound,this),e.on(a.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this)}destroy(){let{hls:e}=this;e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(a.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.off(a.FRAG_LOADING,this.onFragLoading,this),e.off(a.FRAG_LOADED,this.onFragLoaded,this),e.off(a.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.off(a.FRAG_DECRYPTED,this.onFragDecrypted,this),e.off(a.INIT_PTS_FOUND,this.onInitPtsFound,this),e.off(a.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this),this.hls=this.config=this.media=null,this.cea608Parser1=this.cea608Parser2=void 0}initCea608Parsers(){let e=new Ol(this,`textTrack1`),t=new Ol(this,`textTrack2`),n=new Ol(this,`textTrack3`),r=new Ol(this,`textTrack4`);this.cea608Parser1=new qc(1,e,t),this.cea608Parser2=new qc(3,n,r)}addCues(e,t,n,r,i){let o=!1;for(let e=i.length;e--;){let r=i[e],a=Ml(r[0],r[1],t,n);if(a>=0&&(r[0]=Math.min(r[0],t),r[1]=Math.max(r[1],n),o=!0,a/(n-t)>.5))return}if(o||i.push([t,n]),this.config.renderTextTracksNatively){let i=this.captionsTracks[e];this.Cues.newCue(i,t,n,r)}else{let i=this.Cues.newCue(null,t,n,r);this.hls.trigger(a.CUES_PARSED,{type:`captions`,cues:i,track:e})}}onInitPtsFound(e,{frag:t,id:n,initPTS:r,timescale:i,trackId:o}){let{unparsedVttFrags:c}=this;n===s.MAIN&&(this.initPTS[t.cc]={baseTime:r,timescale:i,trackId:o}),c.length&&(this.unparsedVttFrags=[],c.forEach(e=>{this.initPTS[e.frag.cc]?this.onFragLoaded(a.FRAG_LOADED,e):this.hls.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:e.frag,error:Error(`Subtitle discontinuity domain does not match main`)})}))}getExistingTrack(e,t){let{media:n}=this;if(n)for(let r=0;r<n.textTracks.length;r++){let i=n.textTracks[r];if(jl(i,{name:e,lang:t,characteristics:`transcribes-spoken-dialog,describes-music-and-sound`}))return i}return null}createCaptionsTrack(e){this.config.renderTextTracksNatively?this.createNativeTrack(e):this.createNonNativeTrack(e)}createNativeTrack(e){if(this.captionsTracks[e])return;let{captionsProperties:t,captionsTracks:n,media:r}=this,{label:i,languageCode:a}=t[e],o=this.getExistingTrack(i,a);if(o)n[e]=o,rc(n[e]),tc(n[e],r);else{let t=this.createTextTrack(`captions`,i,a);t&&(t[e]=!0,n[e]=t)}}createNonNativeTrack(e){if(this.nonNativeCaptionsTracks[e])return;let t=this.captionsProperties[e];if(!t)return;let n={_id:e,label:t.label,kind:`captions`,default:t.media?!!t.media.default:!1,closedCaptions:t.media};this.nonNativeCaptionsTracks[e]=n,this.hls.trigger(a.NON_NATIVE_TEXT_TRACKS_FOUND,{tracks:[n]})}createTextTrack(e,t,n){let r=this.media;if(r)return r.addTextTrack(e,t,n)}onMediaAttaching(e,t){this.media=t.media,t.mediaSource||this._cleanTracks()}onMediaDetaching(e,t){let n=!!t.transferMedia;if(this.media=null,n)return;let{captionsTracks:r}=this;Object.keys(r).forEach(e=>{rc(r[e]),delete r[e]}),this.nonNativeCaptionsTracks={}}onManifestLoading(){this.lastCc=-1,this.lastSn=-1,this.lastPartIndex=-1,this.prevCC=-1,this.vttCCs=Nl(),this._cleanTracks(),this.tracks=[],this.captionsTracks={},this.nonNativeCaptionsTracks={},this.textTracks=[],this.unparsedVttFrags=[],this.initPTS=[],this.cea608Parser1&&this.cea608Parser2&&(this.cea608Parser1.reset(),this.cea608Parser2.reset())}_cleanTracks(){let{media:e}=this;if(!e)return;let t=e.textTracks;if(t)for(let e=0;e<t.length;e++)rc(t[e])}onSubtitleTracksUpdated(e,t){let n=t.subtitleTracks||[],r=n.some(e=>e.textCodec===pl);if(this.config.enableWebVTT||r&&this.config.enableIMSC1){if(fo(this.tracks,n)){this.tracks=n;return}if(this.textTracks=[],this.tracks=n,this.config.renderTextTracksNatively){let e=this.media,t=e?sc(e.textTracks):null;if(this.tracks.forEach((e,n)=>{let r;if(t){let n=null;for(let r=0;r<t.length;r++)if(t[r]&&jl(t[r],e)){n=t[r],t[r]=null;break}n&&(r=n)}if(r)rc(r);else{let t=Al(e);r=this.createTextTrack(t,e.name,e.lang),r&&(r.mode=`disabled`)}r&&this.textTracks.push(r)}),t!=null&&t.length){let e=t.filter(e=>e!==null).map(e=>e.label);e.length&&this.hls.logger.warn(`Media element contains unused subtitle tracks: ${e.join(`, `)}. Replace media element for each source to clear TextTracks and captions menu.`)}}else if(this.tracks.length){let e=this.tracks.map(e=>({label:e.name,kind:e.type.toLowerCase(),default:e.default,subtitleTrack:e}));this.hls.trigger(a.NON_NATIVE_TEXT_TRACKS_FOUND,{tracks:e})}}}onManifestLoaded(e,t){this.config.enableCEA708Captions&&t.captions&&t.captions.forEach(e=>{let t=/(?:CC|SERVICE)([1-4])/.exec(e.instreamId);if(!t)return;let n=`textTrack${t[1]}`,r=this.captionsProperties[n];r&&(r.label=e.name,e.lang&&(r.languageCode=e.lang),r.media=e)})}closedCaptionsForLevel(e){return this.hls.levels[e.level]?.attrs[`CLOSED-CAPTIONS`]}onFragLoading(e,t){if(this.enabled&&t.frag.type===s.MAIN){let{cea608Parser1:e,cea608Parser2:n,lastSn:r}=this,{cc:i,sn:a}=t.frag,o=t.part?.index??-1;e&&n&&(a!==r+1||a===r&&o!==this.lastPartIndex+1||i!==this.lastCc)&&(e.reset(),n.reset()),this.lastCc=i,this.lastSn=a,this.lastPartIndex=o}}onFragLoaded(e,t){let{frag:n,payload:r}=t;if(n.type===s.SUBTITLE)if(r.byteLength){let e=n.decryptdata,i=`stats`in t;if(e==null||!e.encrypted||i){let e=this.tracks[n.level],i=this.vttCCs;i[n.cc]||(i[n.cc]={start:n.start,prevCC:this.prevCC,new:!0},this.prevCC=n.cc),e&&e.textCodec===pl?this._parseIMSC1(n,r):this._parseVTTs(t)}}else this.hls.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:n,error:Error(`Empty subtitle payload`)})}_parseIMSC1(e,t){let n=this.hls;_l(t,this.initPTS[e.cc],t=>{this._appendCues(t,e.level),n.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:e})},t=>{n.logger.log(`Failed to parse IMSC1: ${t}`),n.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:e,error:t})})}_parseVTTs(e){var t;let{frag:n,payload:r}=e,{initPTS:i,unparsedVttFrags:o}=this,s=i.length-1;if(!i[n.cc]&&s===-1){o.push(e);return}let c=this.hls;fl((t=n.initSegment)!=null&&t.data?De(n.initSegment.data,new Uint8Array(r)).buffer:r,this.initPTS[n.cc],this.vttCCs,n.cc,n.start,e=>{this._appendCues(e,n.level),c.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:n})},t=>{let i=t.message===`Missing initPTS for VTT MPEGTS`;i?o.push(e):this._fallbackToIMSC1(n,r),c.logger.log(`Failed to parse VTT cue: ${t}`),!(i&&s>n.cc)&&c.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:n,error:t})})}_fallbackToIMSC1(e,t){let n=this.tracks[e.level];n.textCodec||_l(t,this.initPTS[e.cc],()=>{n.textCodec=pl,this._parseIMSC1(e,t)},()=>{n.textCodec=`wvtt`})}_appendCues(e,t){let n=this.hls;if(this.config.renderTextTracksNatively){let n=this.textTracks[t];if(!n||n.mode===`disabled`)return;e.forEach(e=>nc(n,e))}else{let r=this.tracks[t];if(!r)return;let i=r.default?`default`:`subtitles`+t;n.trigger(a.CUES_PARSED,{type:`subtitles`,cues:e,track:i})}}onFragDecrypted(e,t){let{frag:n}=t;n.type===s.SUBTITLE&&this.onFragLoaded(a.FRAG_LOADED,t)}onSubtitleTracksCleared(){this.tracks=[],this.captionsTracks={}}onFragParsingUserdata(e,t){if(!this.enabled||!this.config.enableCEA708Captions)return;let{frag:n,samples:r}=t;if(!(n.type===s.MAIN&&this.closedCaptionsForLevel(n)===`NONE`))for(let e=0;e<r.length;e++){let t=r[e].bytes;if(t){this.cea608Parser1||this.initCea608Parsers();let n=this.extractCea608Data(t);this.cea608Parser1.addData(r[e].pts,n[0]),this.cea608Parser2.addData(r[e].pts,n[1])}}}onBufferFlushing(e,{startOffset:t,endOffset:n,endOffsetSubtitles:r,type:i}){let{media:a}=this;if(!(!a||a.currentTime<n)){if(!i||i===`video`){let{captionsTracks:e}=this;Object.keys(e).forEach(r=>ic(e[r],t,n))}if(this.config.renderTextTracksNatively&&t===0&&r!==void 0){let{textTracks:e}=this;Object.keys(e).forEach(n=>ic(e[n],t,r))}}}extractCea608Data(e){let t=[[],[]],n=e[0]&31,r=2;for(let i=0;i<n;i++){let n=e[r++],i=127&e[r++],a=127&e[r++];if(!(i===0&&a===0)&&4&n){let e=3&n;(e===0||e===1)&&(t[e].push(i),t[e].push(a))}}return t}};function Al(e){return e.characteristics&&/transcribes-spoken-dialog/gi.test(e.characteristics)&&/describes-music-and-sound/gi.test(e.characteristics)?`captions`:`subtitles`}function jl(e,t){return!!e&&e.kind===Al(t)&&mo(t,e)}function Ml(e,t,n,r){return Math.min(t,r)-Math.max(e,n)}function Nl(){return{ccOffset:0,presentationOffset:0,0:{start:0,prevCC:-1,new:!0}}}var Pl=/\s/,Fl={newCue(e,t,n,r){let i=[],a,o,s,c,l,u=self.VTTCue||self.TextTrackCue;for(let f=0;f<r.rows.length;f++)if(a=r.rows[f],s=!0,c=0,l=``,!a.isEmpty()){var d;for(let e=0;e<a.chars.length;e++)Pl.test(a.chars[e].uchar)&&s?c++:(l+=a.chars[e].uchar,s=!1);a.cueStartTime=t,t===n&&(n+=1e-4),c>=16?c--:c++;let r=al(l.trim()),p=ul(t,n,r);e!=null&&(d=e.cues)!=null&&d.getCueById(p)||(o=new u(t,n,r),o.id=p,o.line=f+1,o.align=`left`,o.position=10+Math.min(80,Math.floor(c*8/32)*10),i.push(o))}return e&&i.length&&(i.sort((e,t)=>e.line===`auto`||t.line===`auto`?0:e.line>8&&t.line>8?t.line-e.line:e.line-t.line),i.forEach(t=>nc(e,t))),i}};function Il(){if(self.fetch&&self.AbortController&&self.ReadableStream&&self.Request)try{return new self.ReadableStream({}),!0}catch{}return!1}var Ll=/(\d+)-(\d+)\/(\d+)/,Rl=class{constructor(e){this.fetchSetup=void 0,this.requestTimeout=void 0,this.request=null,this.response=null,this.controller=void 0,this.context=null,this.config=null,this.callbacks=null,this.stats=void 0,this.loader=null,this.fetchSetup=e.fetchSetup||Hl,this.controller=new self.AbortController,this.stats=new ee}destroy(){this.loader=this.callbacks=this.context=this.config=this.request=null,this.abortInternal(),this.response=null,this.fetchSetup=this.controller=this.stats=null}abortInternal(){this.controller&&!this.stats.loading.end&&(this.stats.aborted=!0,this.controller.abort())}abort(){var e;this.abortInternal(),(e=this.callbacks)!=null&&e.onAbort&&this.callbacks.onAbort(this.stats,this.context,this.response)}load(t,n,r){let i=this.stats;if(i.loading.start)throw Error(`Loader can only be used once.`);i.loading.start=self.performance.now();let a=zl(t,this.controller.signal),o=t.responseType===`arraybuffer`,s=o?`byteLength`:`length`,{maxTimeToFirstByteMs:c,maxLoadTimeMs:l}=n.loadPolicy;this.context=t,this.config=n,this.callbacks=r,this.request=this.fetchSetup(t,a),self.clearTimeout(this.requestTimeout),n.timeout=c&&e(c)?c:l,this.requestTimeout=self.setTimeout(()=>{this.callbacks&&(this.abortInternal(),this.callbacks.onTimeout(i,t,this.response))},n.timeout),(ro(this.request)?this.request.then(self.fetch):self.fetch(this.request)).then(r=>{this.response=this.loader=r;let a=Math.max(self.performance.now(),i.loading.start);if(self.clearTimeout(this.requestTimeout),n.timeout=l,this.requestTimeout=self.setTimeout(()=>{this.callbacks&&(this.abortInternal(),this.callbacks.onTimeout(i,t,this.response))},l-(a-i.loading.start)),!r.ok){let{status:e,statusText:t}=r;throw new Ul(t||`fetch, bad network response`,e,r)}i.loading.first=a,i.total=Vl(r.headers)||i.total;let s=this.callbacks?.onProgress;return s&&e(n.highWaterMark)?this.loadProgressively(r,i,t,n.highWaterMark,s):o?r.arrayBuffer():t.responseType===`json`?r.json():r.text()}).then(r=>{var a;let o=this.response;if(!o)throw Error(`loader destroyed`);self.clearTimeout(this.requestTimeout),i.loading.end=Math.max(self.performance.now(),i.loading.first);let c=r[s];c&&(i.loaded=i.total=c);let l={url:o.url,data:r,code:o.status},u=this.callbacks?.onProgress;u&&!e(n.highWaterMark)&&u(i,t,r,o),(a=this.callbacks)==null||a.onSuccess(l,i,t,o)}).catch(e=>{var n;if(self.clearTimeout(this.requestTimeout),i.aborted)return;let r=e&&e.code||0,a=e?e.message:null;(n=this.callbacks)==null||n.onError({code:r,text:a},t,e?e.details:null,i)})}getCacheAge(){let e=null;if(this.response){let t=this.response.headers.get(`age`);e=t?parseFloat(t):null}return e}getResponseHeader(e){return this.response?this.response.headers.get(e):null}loadProgressively(e,t,n,r=0,i){let a=new ti,o=e.body.getReader(),s=()=>o.read().then(o=>{if(o.done)return a.dataLength&&i(t,n,a.flush().buffer,e),Promise.resolve(new ArrayBuffer(0));let c=o.value,l=c.length;return t.loaded+=l,l<r||a.dataLength?(a.push(c),a.dataLength>=r&&i(t,n,a.flush().buffer,e)):i(t,n,c.buffer,e),s()}).catch(()=>Promise.reject());return s()}};function zl(e,t){let n={method:`GET`,mode:`cors`,credentials:`same-origin`,signal:t,headers:new self.Headers(d({},e.headers))};return e.rangeEnd&&n.headers.set(`Range`,`bytes=`+e.rangeStart+`-`+String(e.rangeEnd-1)),n}function Bl(e){let t=Ll.exec(e);if(t)return parseInt(t[2])-parseInt(t[1])+1}function Vl(t){let n=t.get(`Content-Range`);if(n){let t=Bl(n);if(e(t))return t}let r=t.get(`Content-Length`);if(r)return parseInt(r)}function Hl(e,t){return new self.Request(e.url,t)}var Ul=class extends Error{constructor(e,t,n){super(e),this.code=void 0,this.details=void 0,this.code=t,this.details=n}},Wl=/^age:\s*[\d.]+\s*$/im,Gl=class{constructor(e){this.xhrSetup=void 0,this.requestTimeout=void 0,this.retryTimeout=void 0,this.retryDelay=void 0,this.config=null,this.callbacks=null,this.context=null,this.loader=null,this.stats=void 0,this.xhrSetup=e&&e.xhrSetup||null,this.stats=new ee,this.retryDelay=0}destroy(){this.callbacks=null,this.abortInternal(),this.loader=null,this.config=null,this.context=null,this.xhrSetup=null}abortInternal(){let e=this.loader;self.clearTimeout(this.requestTimeout),self.clearTimeout(this.retryTimeout),e&&(e.onreadystatechange=null,e.onprogress=null,e.readyState!==4&&(this.stats.aborted=!0,e.abort()))}abort(){var e;this.abortInternal(),(e=this.callbacks)!=null&&e.onAbort&&this.callbacks.onAbort(this.stats,this.context,this.loader)}load(e,t,n){if(this.stats.loading.start)throw Error(`Loader can only be used once.`);this.stats.loading.start=self.performance.now(),this.context=e,this.config=t,this.callbacks=n,this.loadInternal()}loadInternal(){let{config:e,context:t}=this;if(!e||!t)return;let n=this.loader=new self.XMLHttpRequest,r=this.stats;r.loading.first=0,r.loaded=0,r.aborted=!1;let i=this.xhrSetup;i?Promise.resolve().then(()=>{if(!(this.loader!==n||this.stats.aborted))return i(n,t.url)}).catch(e=>{if(!(this.loader!==n||this.stats.aborted))return n.open(`GET`,t.url,!0),i(n,t.url)}).then(()=>{this.loader!==n||this.stats.aborted||this.openAndSendXhr(n,t,e)}).catch(e=>{var i;(i=this.callbacks)==null||i.onError({code:n.status,text:e.message},t,n,r)}):this.openAndSendXhr(n,t,e)}openAndSendXhr(t,n,r){t.readyState||t.open(`GET`,n.url,!0);let i=n.headers,{maxTimeToFirstByteMs:a,maxLoadTimeMs:o}=r.loadPolicy;if(i)for(let e in i)t.setRequestHeader(e,i[e]);n.rangeEnd&&t.setRequestHeader(`Range`,`bytes=`+n.rangeStart+`-`+(n.rangeEnd-1)),t.onreadystatechange=this.readystatechange.bind(this),t.onprogress=this.loadprogress.bind(this),t.responseType=n.responseType,self.clearTimeout(this.requestTimeout),r.timeout=a&&e(a)?a:o,this.requestTimeout=self.setTimeout(this.loadtimeout.bind(this),r.timeout),t.send()}readystatechange(){let{context:e,loader:t,stats:n}=this;if(!e||!t)return;let r=t.readyState,i=this.config;if(!n.aborted&&r>=2&&(n.loading.first===0&&(n.loading.first=Math.max(self.performance.now(),n.loading.start),i.timeout!==i.loadPolicy.maxLoadTimeMs&&(self.clearTimeout(this.requestTimeout),i.timeout=i.loadPolicy.maxLoadTimeMs,this.requestTimeout=self.setTimeout(this.loadtimeout.bind(this),i.loadPolicy.maxLoadTimeMs-(n.loading.first-n.loading.start)))),r===4)){self.clearTimeout(this.requestTimeout),t.onreadystatechange=null,t.onprogress=null;let r=t.status,s=t.responseType===`text`?t.responseText:null;if(r>=200&&r<300){let i=s??t.response;if(i!=null){var a;n.loading.end=Math.max(self.performance.now(),n.loading.first),n.loaded=n.total=t.responseType===`arraybuffer`?i.byteLength:i.length,n.bwEstimate=n.total*8e3/(n.loading.end-n.loading.first);let o=this.callbacks?.onProgress;o&&o(n,e,i,t);let s={url:t.responseURL,data:i,code:r};(a=this.callbacks)==null||a.onSuccess(s,n,e,t);return}}let c=i.loadPolicy.errorRetry,l=n.retry;if($t(c,l,!1,{url:e.url,data:void 0,code:r}))this.retry(c);else{var o;w.error(`${r} while loading ${e.url}`),(o=this.callbacks)==null||o.onError({code:r,text:t.statusText},e,t,n)}}}loadtimeout(){if(!this.config)return;let e=this.config.loadPolicy.timeoutRetry,t=this.stats.retry;if($t(e,t,!0))this.retry(e);else{w.warn(`timeout while loading ${this.context?.url}`);let e=this.callbacks;e&&(this.abortInternal(),e.onTimeout(this.stats,this.context,this.loader))}}retry(e){let{context:t,stats:n}=this;this.retryDelay=Zt(e,n.retry),n.retry++,w.warn(`${status?`HTTP Status `+status:`Timeout`} while loading ${t?.url}, retrying ${n.retry}/${e.maxNumRetry} in ${this.retryDelay}ms`),this.abortInternal(),this.loader=null,self.clearTimeout(this.retryTimeout),this.retryTimeout=self.setTimeout(this.loadInternal.bind(this),this.retryDelay)}loadprogress(e){let t=this.stats;t.loaded=e.loaded,e.lengthComputable&&(t.total=e.total)}getCacheAge(){let e=null;if(this.loader&&Wl.test(this.loader.getAllResponseHeaders())){let t=this.loader.getResponseHeader(`age`);e=t?parseFloat(t):null}return e}getResponseHeader(e){return this.loader&&RegExp(`^${e}:\\s*[\\d.]+\\s*$`,`im`).test(this.loader.getAllResponseHeaders())?this.loader.getResponseHeader(e):null}},Kl=p(p({autoStartLoad:!0,startPosition:-1,defaultAudioCodec:void 0,debug:!1,capLevelOnFPSDrop:!1,capLevelToPlayerSize:!1,ignoreDevicePixelRatio:!1,maxDevicePixelRatio:1/0,preferManagedMediaSource:!0,initialLiveManifestSize:1,maxBufferLength:30,backBufferLength:1/0,frontBufferFlushThreshold:1/0,startOnSegmentBoundary:!1,maxBufferSize:60*1e3*1e3,maxFragLookUpTolerance:.25,maxBufferHole:.1,detectStallWithCurrentTimeMs:1250,highBufferWatchdogPeriod:2,nudgeOffset:.1,nudgeMaxRetry:3,nudgeOnVideoHole:!0,liveSyncMode:`edge`,liveSyncDurationCount:3,liveSyncOnStallIncrease:1,liveMaxLatencyDurationCount:1/0,liveSyncDuration:void 0,liveMaxLatencyDuration:void 0,maxLiveSyncPlaybackRate:1,liveDurationInfinity:!1,liveBackBufferLength:null,maxMaxBufferLength:600,enableWorker:!0,workerPath:null,enableSoftwareAES:!0,startLevel:void 0,startFragPrefetch:!1,fpsDroppedMonitoringPeriod:5e3,fpsDroppedMonitoringThreshold:.2,appendErrorMaxRetry:3,ignorePlaylistParsingErrors:!1,loader:Gl,fLoader:void 0,pLoader:void 0,xhrSetup:void 0,licenseXhrSetup:void 0,licenseResponseCallback:void 0,abrController:zt,bufferController:bo,capLevelController:wo,errorController:rn,fpsController:ec,stretchShortVideoTrack:!1,maxAudioFramesDrift:1,forceKeyFrameOnDiscontinuity:!0,abrEwmaFastLive:3,abrEwmaSlowLive:9,abrEwmaFastVoD:3,abrEwmaSlowVoD:9,abrEwmaDefaultEstimate:5e5,abrEwmaDefaultEstimateMax:5e6,abrBandWidthFactor:.95,abrBandWidthUpFactor:.7,abrMaxWithRealBitrate:!1,maxStarvationDelay:4,maxLoadingDelay:4,minAutoBitrate:0,emeEnabled:!1,widevineLicenseUrl:void 0,drmSystems:{},drmSystemOptions:{},requestMediaKeySystemAccessFunc:er,requireKeySystemAccessOnStart:!1,testBandwidth:!0,progressive:!1,lowLatencyMode:!0,cmcd:void 0,enableDateRangeMetadataCues:!0,enableEmsgMetadataCues:!0,enableEmsgKLVMetadata:!1,enableID3MetadataCues:!0,enableInterstitialPlayback:!0,interstitialAppendInPlace:!0,interstitialLiveLookAhead:10,useMediaCapabilities:!0,preserveManualLevelOnError:!1,certLoadPolicy:{default:{maxTimeToFirstByteMs:8e3,maxLoadTimeMs:2e4,timeoutRetry:null,errorRetry:null}},keyLoadPolicy:{default:{maxTimeToFirstByteMs:8e3,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:2e4,backoff:`linear`},errorRetry:{maxNumRetry:8,retryDelayMs:1e3,maxRetryDelayMs:2e4,backoff:`linear`}}},manifestLoadPolicy:{default:{maxTimeToFirstByteMs:1/0,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},playlistLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:2,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},fragLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:12e4,timeoutRetry:{maxNumRetry:4,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:6,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},steeringManifestLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},interstitialAssetListLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:3e4,timeoutRetry:{maxNumRetry:0,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:0,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3},ql()),{},{subtitleStreamController:kc,subtitleTrackController:cc,timelineController:kl,audioStreamController:lo,audioTrackController:ho,emeController:Ys,cmcdController:Ws,contentSteeringController:Ks,interstitialsController:Dc});function ql(){return{cueHandler:Fl,enableWebVTT:!0,enableIMSC1:!0,enableCEA708Captions:!0,captionsTextTrack1Label:`English`,captionsTextTrack1LanguageCode:`en`,captionsTextTrack2Label:`Spanish`,captionsTextTrack2LanguageCode:`es`,captionsTextTrack3Label:`Unknown CC`,captionsTextTrack3LanguageCode:``,captionsTextTrack4Label:`Unknown CC`,captionsTextTrack4LanguageCode:``,renderTextTracksNatively:!0}}function Jl(e,t,n){if((t.liveSyncDurationCount||t.liveMaxLatencyDurationCount)&&(t.liveSyncDuration||t.liveMaxLatencyDuration))throw Error(`Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration`);if(t.liveMaxLatencyDurationCount!==void 0&&(t.liveSyncDurationCount===void 0||t.liveMaxLatencyDurationCount<=t.liveSyncDurationCount))throw Error(`Illegal hls.js config: "liveMaxLatencyDurationCount" must be greater than "liveSyncDurationCount"`);if(t.liveMaxLatencyDuration!==void 0&&(t.liveSyncDuration===void 0||t.liveMaxLatencyDuration<=t.liveSyncDuration))throw Error(`Illegal hls.js config: "liveMaxLatencyDuration" must be greater than "liveSyncDuration"`);let r=Yl(e),i=[`manifest`,`level`,`frag`],a=[`TimeOut`,`MaxRetry`,`RetryDelay`,`MaxRetryTimeout`];return i.forEach(e=>{let i=`${e===`level`?`playlist`:e}LoadPolicy`,o=t[i]===void 0,s=[];a.forEach(n=>{let a=`${e}Loading${n}`,c=t[a];if(c!==void 0&&o){s.push(a);let e=r[i].default;switch(t[i]={default:e},n){case`TimeOut`:e.maxLoadTimeMs=c,e.maxTimeToFirstByteMs=c;break;case`MaxRetry`:e.errorRetry.maxNumRetry=c,e.timeoutRetry.maxNumRetry=c;break;case`RetryDelay`:e.errorRetry.retryDelayMs=c,e.timeoutRetry.retryDelayMs=c;break;case`MaxRetryTimeout`:e.errorRetry.maxRetryDelayMs=c,e.timeoutRetry.maxRetryDelayMs=c;break}}}),s.length&&n.warn(`hls.js config: "${s.join(`", "`)}" setting(s) are deprecated, use "${i}": ${V(t[i])}`)}),p(p({},r),t)}function Yl(e){return e&&typeof e==`object`?Array.isArray(e)?e.map(Yl):Object.keys(e).reduce((t,n)=>(t[n]=Yl(e[n]),t),{}):e}function Xl(e,t){let n=e.loader;n!==Rl&&n!==Gl?(t.log(`[config]: Custom loader detected, cannot enable progressive streaming`),e.progressive=!1):Il()&&(e.loader=Rl,e.progressive=!0,e.enableSoftwareAES=!0,t.log(`[config]: Progressive streaming enabled, using FetchLoader`))}var Zl=2,Ql=.1,$l=.05,eu=100,tu=class extends wn{constructor(e,t){super(`gap-controller`,e.logger),this.hls=void 0,this.fragmentTracker=void 0,this.media=null,this.mediaSource=void 0,this.nudgeRetry=0,this.stallReported=!1,this.stalled=null,this.moved=!1,this.seeking=!1,this.buffered={},this.lastCurrentTime=0,this.ended=0,this.waiting=0,this.onMediaPlaying=()=>{this.ended=0,this.waiting=0},this.onMediaWaiting=()=>{var e;(e=this.media)!=null&&e.seeking||(this.waiting=self.performance.now(),this.tick())},this.onMediaEnded=()=>{this.hls&&(this.ended=this.media?.currentTime||1,this.hls.trigger(a.MEDIA_ENDED,{stalled:!1}))},this.hls=e,this.fragmentTracker=t,this.registerListeners()}registerListeners(){let{hls:e}=this;e&&(e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.BUFFER_APPENDED,this.onBufferAppended,this))}unregisterListeners(){let{hls:e}=this;e&&(e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.BUFFER_APPENDED,this.onBufferAppended,this))}destroy(){super.destroy(),this.unregisterListeners(),this.media=this.hls=this.fragmentTracker=null,this.mediaSource=void 0}onMediaAttached(e,t){this.setInterval(eu),this.mediaSource=t.mediaSource;let n=this.media=t.media;J(n,`playing`,this.onMediaPlaying),J(n,`waiting`,this.onMediaWaiting),J(n,`ended`,this.onMediaEnded)}onMediaDetaching(e,t){this.clearInterval();let{media:n}=this;n&&(Zr(n,`playing`,this.onMediaPlaying),Zr(n,`waiting`,this.onMediaWaiting),Zr(n,`ended`,this.onMediaEnded),this.media=null),this.mediaSource=void 0}onBufferAppended(e,t){this.buffered=t.timeRanges}get hasBuffered(){return Object.keys(this.buffered).length>0}tick(){var e;if(!((e=this.media)!=null&&e.readyState)||!this.hasBuffered)return;let t=this.media.currentTime;this.poll(t,this.lastCurrentTime),this.lastCurrentTime=t}poll(e,t){let n=this.hls?.config;if(!n)return;let r=this.media;if(!r)return;let{seeking:i}=r,o=this.seeking&&!i,s=!this.seeking&&i,c=r.paused&&!i||r.ended||r.playbackRate===0;if(this.seeking=i,e!==t){t&&(this.ended=0),this.moved=!0,i||(this.nudgeRetry=0,n.nudgeOnVideoHole&&!c&&e>t&&this.nudgeOnVideoHole(e,t)),this.waiting===0&&this.stallResolved(e);return}if(s||o){o&&this.stallResolved(e);return}if(c){this.nudgeRetry=0,this.stallResolved(e),!this.ended&&r.ended&&this.hls&&(this.ended=e||1,this.hls.trigger(a.MEDIA_ENDED,{stalled:!1}));return}if(!W.getBuffered(r).length){this.nudgeRetry=0;return}let l=W.bufferInfo(r,e,0),u=l.nextStart||0,d=this.fragmentTracker;if(i&&d&&this.hls){let t=nu(this.hls.inFlightFragments,e),n=l.len>Zl,r=!u||t||u-e>Zl&&!d.getPartialFragment(e);if(n||r)return;this.moved=!1}let f=this.hls?.latestLevelDetails;if(!this.moved&&this.stalled!==null&&d){if(!(l.len>0)&&!u)return;let t=Math.max(u,l.start||0)-e,n=f!=null&&f.live?f.targetduration*2:Zl,i=iu(e,d);if(t>0&&(t<=n||i)){r.paused||this._trySkipBufferHole(i);return}}let p=n.detectStallWithCurrentTimeMs,m=self.performance.now(),h=this.waiting,g=this.stalled;if(g===null)if(h>0&&m-h<p)g=this.stalled=h;else{this.stalled=m;return}let _=m-g;if(!i&&(_>=p||h)&&this.hls){if(this.mediaSource?.readyState===`ended`&&!(f!=null&&f.live)&&Math.abs(e-(f?.edge||0))<1){if(this.ended)return;this.ended=e||1,this.hls.trigger(a.MEDIA_ENDED,{stalled:!0});return}if(this._reportStall(l),!this.media||!this.hls)return}let v=W.bufferInfo(r,e,n.maxBufferHole);this._tryFixBufferStall(v,_,e)}stallResolved(e){let t=this.stalled;if(t&&this.hls&&(this.stalled=null,this.stallReported)){let n=self.performance.now()-t;this.log(`playback not stuck anymore @${e}, after ${Math.round(n)}ms`),this.stallReported=!1,this.waiting=0,this.hls.trigger(a.STALL_RESOLVED,{})}}nudgeOnVideoHole(e,t){var n;let o=this.buffered.video;if(this.hls&&this.media&&this.fragmentTracker&&(n=this.buffered.audio)!=null&&n.length&&o&&o.length>1&&e>o.end(0)){let n=W.bufferedInfo(W.timeRangesToArray(this.buffered.audio),e,0);if(n.len>1&&t>=n.start){let n=W.timeRangesToArray(o),s=W.bufferedInfo(n,t,0).bufferedIndex;if(s>-1&&s<n.length-1){let t=W.bufferedInfo(n,e,0).bufferedIndex,o=n[s].end,c=n[s+1].start;if((t===-1||t>s)&&c-o<1&&e-o<2){let n=Error(`nudging playhead to flush pipeline after video hole. currentTime: ${e} hole: ${o} -> ${c} buffered index: ${t}`);this.warn(n.message),this.media.currentTime+=1e-6;let s=iu(e,this.fragmentTracker);s&&`fragment`in s?s=s.fragment:s||=void 0;let l=W.bufferInfo(this.media,e,0);this.hls.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.BUFFER_SEEK_OVER_HOLE,fatal:!1,error:n,reason:n.message,frag:s,buffer:l.len,bufferInfo:l})}}}}}_tryFixBufferStall(e,t,n){let{fragmentTracker:r,media:i}=this,a=this.hls?.config;if(!i||!r||!a)return;let o=this.hls?.latestLevelDetails,s=iu(n,r);if((s||o!=null&&o.live&&n<o.fragmentStart)&&(this._trySkipBufferHole(s)||!this.media))return;let c=e.buffered,l=this.adjacentTraversal(e,n);(c&&c.length>1&&e.len>a.maxBufferHole||e.nextStart&&(e.nextStart-n<a.maxBufferHole||l))&&(t>a.highBufferWatchdogPeriod*1e3||this.waiting)&&(this.warn(`Trying to nudge playhead over buffer-hole`),this._tryNudgeBuffer(e))}adjacentTraversal(e,t){let n=this.fragmentTracker,r=e.nextStart;if(n&&r){let e=n.getFragAtPos(t,s.MAIN),i=n.getFragAtPos(r,s.MAIN);if(e&&i)return i.sn-e.sn<2}return!1}_reportStall(e){let{hls:t,media:n,stallReported:o,stalled:s}=this;if(!o&&s!==null&&n&&t){this.stallReported=!0;let o=Error(`Playback stalling at @${n.currentTime} due to low buffer (${V(e)})`);this.warn(o.message),t.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.BUFFER_STALLED_ERROR,fatal:!1,error:o,buffer:e.len,bufferInfo:e,stalled:{start:s}})}}_trySkipBufferHole(e){let{fragmentTracker:t,media:n}=this,o=this.hls?.config;if(!n||!t||!o)return 0;let c=n.currentTime,l=W.bufferInfo(n,c,0),u=c<l.start?l.start:l.nextStart;if(u&&this.hls){let f=l.len<=o.maxBufferHole,p=l.len>0&&l.len<1&&n.readyState<3,m=u-c;if(m>0&&(f||p)){if(m>o.maxBufferHole){let n=!1;if(c===0){let e=t.getAppendedFrag(0,s.MAIN);e&&u<e.end&&(n=!0)}if(!n&&e){var d;if(!((d=this.hls.loadLevelObj)!=null&&d.details)||nu(this.hls.inFlightFragments,u))return 0;let n=!1,r=e.end;for(;r<u;){let e=iu(r,t);if(e)r+=e.duration;else{n=!0;break}}if(n)return 0}}let f=Math.max(u+$l,c+Ql);if(this.warn(`skipping hole, adjusting currentTime from ${c} to ${f}`),this.moved=!0,n.currentTime=f,!(e!=null&&e.gap)){let t=Error(`fragment loaded with buffer holes, seeking from ${c} to ${f}`),n={type:r.MEDIA_ERROR,details:i.BUFFER_SEEK_OVER_HOLE,fatal:!1,error:t,reason:t.message,buffer:l.len,bufferInfo:l};e&&(`fragment`in e?n.part=e:n.frag=e),this.hls.trigger(a.ERROR,n)}return f}}return 0}_tryNudgeBuffer(e){let{hls:t,media:n,nudgeRetry:o}=this,s=t?.config;if(!n||!s)return 0;let c=n.currentTime;if(this.nudgeRetry++,o<s.nudgeMaxRetry){let l=c+(o+1)*s.nudgeOffset,u=Error(`Nudging 'currentTime' from ${c} to ${l}`);this.warn(u.message),n.currentTime=l,t.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.BUFFER_NUDGE_ON_STALL,error:u,fatal:!1,buffer:e.len,bufferInfo:e})}else{let n=Error(`Playhead still not moving while enough data buffered @${c} after ${s.nudgeMaxRetry} nudges`);this.error(n.message),t.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.BUFFER_STALLED_ERROR,error:n,fatal:!0,buffer:e.len,bufferInfo:e})}}};function nu(e,t){let n=ru(e.main);if(n&&n.start<=t)return n;let r=ru(e.audio);return r&&r.start<=t?r:null}function ru(e){if(!e)return null;switch(e.state){case Y.IDLE:case Y.STOPPED:case Y.ENDED:case Y.ERROR:return null}return e.frag}function iu(e,t){return t.getAppendedFrag(e,s.MAIN)||t.getPartialFragment(e)}var au=.25;function ou(){if(!(typeof self>`u`))return self.VTTCue||self.TextTrackCue}function su(e,t,n,r,i){let a=new e(t,n,``);try{a.value=r,i&&(a.type=i)}catch{a=new e(t,n,V(i?p({type:i},r):r))}return a}var cu=(()=>{let e=ou();try{e&&new e(0,1/0,``)}catch{return Number.MAX_VALUE}return 1/0})(),lu=class{constructor(e){this.hls=void 0,this.id3Track=null,this.media=null,this.dateRangeCuesAppended={},this.removeCues=!0,this.assetCue=void 0,this.onEventCueEnter=()=>{this.hls&&this.hls.trigger(a.EVENT_CUE_ENTER,{})},this.hls=e,this._registerListeners()}destroy(){this._unregisterListeners(),this.id3Track=null,this.media=null,this.dateRangeCuesAppended={},this.hls=this.onEventCueEnter=null}_registerListeners(){let{hls:e}=this;e&&(e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.FRAG_PARSING_METADATA,this.onFragParsingMetadata,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(a.LEVEL_PTS_UPDATED,this.onLevelPtsUpdated,this))}_unregisterListeners(){let{hls:e}=this;e&&(e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.FRAG_PARSING_METADATA,this.onFragParsingMetadata,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(a.LEVEL_PTS_UPDATED,this.onLevelPtsUpdated,this))}onMediaAttaching(e,t){this.media=t.media,t.overrides?.cueRemoval===!1&&(this.removeCues=!1)}onMediaAttached(){let e=this.hls?.latestLevelDetails;e&&this.updateDateRangeCues(e)}onMediaDetaching(e,t){this.media=null,!t.transferMedia&&(this.id3Track&&=(this.removeCues&&rc(this.id3Track,this.onEventCueEnter),null),this.dateRangeCuesAppended={})}onManifestLoading(){this.dateRangeCuesAppended={}}createTrack(e){let t=this.getID3Track(e.textTracks);return t.mode=`hidden`,t}getID3Track(e){if(this.media){for(let t=0;t<e.length;t++){let n=e[t];if(n.kind===`metadata`&&n.label===`id3`)return tc(n,this.media),n}return this.media.addTextTrack(`metadata`,`id3`)}}onFragParsingMetadata(e,t){if(!this.media||!this.hls)return;let{enableEmsgMetadataCues:n,enableID3MetadataCues:r}=this.hls.config;if(!n&&!r)return;let{samples:i}=t;this.id3Track||=this.createTrack(this.media);let a=ou();if(a)for(let e=0;e<i.length;e++){let t=i[e].type;if(t===qi.emsg&&!n||!r)continue;let o=Ui(i[e].data),s=i[e].pts,c=s+i[e].duration;c>cu&&(c=cu),c-s<=0&&(c=s+au);for(let e=0;e<o.length;e++){let n=o[e];if(!Wi(n)){this.updateId3CueEnds(s,t);let e=su(a,s,c,n,t);e&&this.id3Track.addCue(e)}}}}updateId3CueEnds(e,t){let n=this.id3Track?.cues;if(n)for(let r=n.length;r--;){let i=n[r];i.type===t&&i.startTime<e&&i.endTime===cu&&(i.endTime=e)}}onBufferFlushing(e,{startOffset:t,endOffset:n,type:r}){let{id3Track:i,hls:a}=this;if(!a)return;let{config:{enableEmsgMetadataCues:o,enableID3MetadataCues:s}}=a;if(i&&(o||s)){let e;e=r===`audio`?e=>e.type===qi.audioId3&&s:r===`video`?e=>e.type===qi.emsg&&o:e=>e.type===qi.audioId3&&s||e.type===qi.emsg&&o,ic(i,t,n,e)}}onLevelUpdated(e,{details:t}){this.updateDateRangeCues(t,!0)}onLevelPtsUpdated(e,t){Math.abs(t.drift)>.01&&this.updateDateRangeCues(t.details)}updateDateRangeCues(t,n){if(!this.hls||!this.media)return;let{assetPlayerId:r,timelineOffset:i,enableDateRangeMetadataCues:a,interstitialsController:o}=this.hls.config;if(!a)return;let s=ou();if(r&&i&&!o){let{fragmentStart:e,fragmentEnd:n}=t,i=this.assetCue;i?(i.startTime=e,i.endTime=n):s&&(i=this.assetCue=su(s,e,n,{assetPlayerId:this.hls.config.assetPlayerId},`hlsjs.interstitial.asset`),i&&(i.id=r,this.id3Track||=this.createTrack(this.media),this.id3Track.addCue(i),i.addEventListener(`enter`,this.onEventCueEnter)))}if(!t.hasProgramDateTime)return;let{id3Track:c}=this,{dateRanges:l}=t,u=Object.keys(l),d=this.dateRangeCuesAppended;if(c&&n){var f;if((f=c.cues)!=null&&f.length){let e=Object.keys(d).filter(e=>!u.includes(e));for(let t=e.length;t--;){let n=e[t],r=d[n]?.cues;delete d[n],r&&Object.keys(r).forEach(e=>{let t=r[e];if(t){t.removeEventListener(`enter`,this.onEventCueEnter);try{c.removeCue(t)}catch{}}})}}else d=this.dateRangeCuesAppended={}}let p=t.fragments[t.fragments.length-1];if(!(u.length===0||!e(p?.programDateTime))){this.id3Track||=this.createTrack(this.media);for(let e=0;e<u.length;e++){let t=u[e],n=l[t],r=n.startTime,i=d[t],a=i?.cues||{},c=i?.durationKnown||!1,f=cu,{duration:p,endDate:m}=n;if(m&&p!==null)f=r+p,c=!0;else if(n.endOnNext&&!c){let e=u.reduce((e,t)=>{if(t!==n.id){let r=l[t];if(r.class===n.class&&r.startDate>n.startDate&&(!e||n.startDate<e.startDate))return r}return e},null);e&&(f=e.startTime,c=!0)}let h=Object.keys(n.attr);for(let e=0;e<h.length;e++){let l=h[e];if(!In(l))continue;let u=a[l];if(u)c&&!(i!=null&&i.durationKnown)?u.endTime=f:Math.abs(u.startTime-r)>.01&&(u.startTime=r,u.endTime=f);else if(s){let e=n.attr[l];Ln(l)&&(e=A(e));let i=su(s,r,f,{key:l,data:e},qi.dateRange);i&&(i.id=t,this.id3Track.addCue(i),a[l]=i,o&&(l===`X-ASSET-LIST`||l===`X-ASSET-URL`)&&i.addEventListener(`enter`,this.onEventCueEnter))}}d[t]={cues:a,dateRange:n,durationKnown:c}}}}},uu=class{constructor(e){this.hls=void 0,this.config=void 0,this.media=null,this.currentTime=0,this.stallCount=0,this._latency=null,this._targetLatencyUpdated=!1,this.onTimeupdate=()=>{let{media:e}=this,t=this.levelDetails;if(!e||!t)return;this.currentTime=e.currentTime;let n=this.computeLatency();if(n===null)return;this._latency=n;let{lowLatencyMode:r,maxLiveSyncPlaybackRate:i}=this.config;if(!r||i===1||!t.live)return;let a=this.targetLatency;if(a===null)return;let o=n-a;if(o<Math.min(this.maxLatency,a+t.targetduration)&&o>.05&&this.forwardBufferLength>1){let t=Math.min(2,Math.max(1,i)),n=Math.round(2/(1+Math.exp(-.75*o-this.edgeStalled))*20)/20,r=Math.min(t,Math.max(1,n));this.changeMediaPlaybackRate(e,r)}else e.playbackRate!==1&&e.playbackRate!==0&&this.changeMediaPlaybackRate(e,1)},this.hls=e,this.config=e.config,this.registerListeners()}get levelDetails(){return this.hls?.latestLevelDetails||null}get latency(){return this._latency||0}get maxLatency(){let{config:e}=this;if(e.liveMaxLatencyDuration!==void 0)return e.liveMaxLatencyDuration;let t=this.levelDetails;return t?e.liveMaxLatencyDurationCount*t.targetduration:0}get targetLatency(){let e=this.levelDetails;if(e===null||this.hls===null)return null;let{holdBack:t,partHoldBack:n,targetduration:r}=e,{liveSyncDuration:i,liveSyncDurationCount:a,lowLatencyMode:o}=this.config,s=this.hls.userConfig,c=o&&n||t;(this._targetLatencyUpdated||s.liveSyncDuration||s.liveSyncDurationCount||c===0)&&(c=i===void 0?a*r:i);let l=r;return c+Math.min(this.stallCount*this.config.liveSyncOnStallIncrease,l)}set targetLatency(e){this.stallCount=0,this.config.liveSyncDuration=e,this._targetLatencyUpdated=!0}get liveSyncPosition(){let e=this.estimateLiveEdge(),t=this.targetLatency;if(e===null||t===null)return null;let n=this.levelDetails;if(n===null)return null;let r=n.edge,i=e-t-this.edgeStalled,a=r-n.totalduration,o=r-(this.config.lowLatencyMode&&n.partTarget||n.targetduration);return Math.min(Math.max(a,i),o)}get drift(){let e=this.levelDetails;return e===null?1:e.drift}get edgeStalled(){let e=this.levelDetails;if(e===null)return 0;let t=(this.config.lowLatencyMode&&e.partTarget||e.targetduration)*3;return Math.max(e.age-t,0)}get forwardBufferLength(){let{media:e}=this,t=this.levelDetails;if(!e||!t)return 0;let n=e.buffered.length;return(n?e.buffered.end(n-1):t.edge)-this.currentTime}destroy(){this.unregisterListeners(),this.onMediaDetaching(),this.hls=null}registerListeners(){let{hls:e}=this;e&&(e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(a.ERROR,this.onError,this))}unregisterListeners(){let{hls:e}=this;e&&(e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(a.ERROR,this.onError,this))}onMediaAttached(e,t){this.media=t.media,this.media.addEventListener(`timeupdate`,this.onTimeupdate)}onMediaDetaching(){this.media&&=(this.media.removeEventListener(`timeupdate`,this.onTimeupdate),null)}onManifestLoading(){this._latency=null,this.stallCount=0}onLevelUpdated(e,{details:t}){t.advanced&&this.onTimeupdate(),!t.live&&this.media&&this.media.removeEventListener(`timeupdate`,this.onTimeupdate)}onError(e,t){var n;t.details===i.BUFFER_STALLED_ERROR&&(this.stallCount++,this.hls&&(n=this.levelDetails)!=null&&n.live&&this.hls.logger.warn(`[latency-controller]: Stall detected, adjusting target latency`))}changeMediaPlaybackRate(e,t){var n;e.playbackRate!==t&&((n=this.hls)==null||n.logger.debug(`[latency-controller]: latency=${this.latency.toFixed(3)}, targetLatency=${this.targetLatency?.toFixed(3)}, forwardBufferLength=${this.forwardBufferLength.toFixed(3)}: adjusting playback rate from ${e.playbackRate} to ${t}`),e.playbackRate=t)}estimateLiveEdge(){let e=this.levelDetails;return e===null?null:e.edge+e.age}computeLatency(){let e=this.estimateLiveEdge();return e===null?null:e-this.currentTime}},du=class extends uo{constructor(e,t){super(e,`level-controller`),this._levels=[],this._firstLevel=-1,this._maxAutoLevel=-1,this._startLevel=void 0,this.currentLevel=null,this.currentLevelIndex=-1,this.manualLevelIndex=-1,this.steering=void 0,this.onParsedComplete=void 0,this.steering=t,this._registerListeners()}_registerListeners(){let{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this),e.on(a.ERROR,this.onError,this)}_unregisterListeners(){let{hls:e}=this;e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this),e.off(a.ERROR,this.onError,this)}destroy(){this._unregisterListeners(),this.steering=null,this.resetLevels(),super.destroy()}stopLoad(){this._levels.forEach(e=>{e.loadError=0,e.fragmentError=0}),super.stopLoad()}resetLevels(){this._startLevel=void 0,this.manualLevelIndex=-1,this.currentLevelIndex=-1,this.currentLevel=null,this._levels=[],this._maxAutoLevel=-1}onManifestLoading(e,t){this.resetLevels()}onManifestLoaded(e,t){let n=this.hls.config.preferManagedMediaSource,r=[],i={},a={},o=!1,s=!1,c=!1;t.levels.forEach(e=>{let t=e.attrs,{audioCodec:l,videoCodec:u}=e;l&&(e.audioCodec=l=Ye(l,n)||void 0),u&&=e.videoCodec=$e(u);let{width:d,height:f,unknownCodecs:p}=e,m=p?.length||0;if(o||=!!(d&&f),s||=!!u,c||=!!l,m||l&&!this.isAudioSupported(l)||u&&!this.isVideoSupported(u)){this.log(`Some or all CODECS not supported "${t.CODECS}"`);return}let{CODECS:h,"FRAME-RATE":g,"HDCP-LEVEL":_,"PATHWAY-ID":v,RESOLUTION:y,"VIDEO-RANGE":b}=t,x=`${`${v||`.`}-`}${e.bitrate}-${y}-${g}-${h}-${b}-${_}`;if(!i[x]){let t=this.createLevel(e);i[x]=t,a[x]=1,r.push(t)}else if(i[x].uri!==e.url&&!e.attrs[`PATHWAY-ID`]){let t=a[x]+=1;e.attrs[`PATHWAY-ID`]=Array(t+1).join(`.`);let n=this.createLevel(e);i[x]=n,r.push(n)}else i[x].addGroupId(`audio`,t.AUDIO),i[x].addGroupId(`text`,t.SUBTITLES)}),this.filterAndSortMediaOptions(r,t,o,s,c)}createLevel(e){let t=new xt(e),n=e.supplemental;if(n!=null&&n.videoCodec&&!this.isVideoSupported(n.videoCodec)){let e=Error(`SUPPLEMENTAL-CODECS not supported "${n.videoCodec}"`);this.log(e.message),t.supportedResult=ot(e,[])}return t}isAudioSupported(e){return Ve(e,`audio`,this.hls.config.preferManagedMediaSource)}isVideoSupported(e){return Ve(e,`video`,this.hls.config.preferManagedMediaSource)}filterAndSortMediaOptions(e,t,n,o,s){let c=[],l=[],u=e,d=t.stats?.parsing||{};if((n||o)&&s&&(u=u.filter(({videoCodec:e,videoRange:t,width:n,height:r})=>(!!e||!!(n&&r))&&_t(t))),u.length===0){Promise.resolve().then(()=>{if(this.hls){let e=`no level with compatible codecs found in manifest`,n=e;t.levels.length&&(n=`one or more CODECS in variant not supported: ${V(t.levels.map(e=>e.attrs.CODECS).filter((e,t,n)=>n.indexOf(e)===t))}`,this.warn(n),e+=` (${n})`);let o=Error(e);this.hls.trigger(a.ERROR,{type:r.MEDIA_ERROR,details:i.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:t.url,error:o,reason:n})}}),d.end=performance.now();return}t.audioTracks&&(c=t.audioTracks.filter(e=>!e.audioCodec||this.isAudioSupported(e.audioCodec)),fu(c)),t.subtitles&&(l=t.subtitles,fu(l));let f=u.slice(0);u.sort((e,t)=>{if(e.attrs[`HDCP-LEVEL`]!==t.attrs[`HDCP-LEVEL`])return(e.attrs[`HDCP-LEVEL`]||``)>(t.attrs[`HDCP-LEVEL`]||``)?1:-1;if(n&&e.height!==t.height)return e.height-t.height;if(e.frameRate!==t.frameRate)return e.frameRate-t.frameRate;if(e.videoRange!==t.videoRange)return gt.indexOf(e.videoRange)-gt.indexOf(t.videoRange);if(e.videoCodec!==t.videoCodec){let n=We(e.videoCodec),r=We(t.videoCodec);if(n!==r)return r-n}if(e.uri===t.uri&&e.codecSet!==t.codecSet){let n=Ge(e.codecSet),r=Ge(t.codecSet);if(n!==r)return r-n}return e.averageBitrate===t.averageBitrate?0:e.averageBitrate-t.averageBitrate});let p=f[0];if(this.steering&&(u=this.steering.filterParsedLevels(u),u.length!==f.length)){for(let e=0;e<f.length;e++)if(f[e].pathwayId===u[0].pathwayId){p=f[e];break}}this._levels=u;for(let e=0;e<u.length;e++)if(u[e]===p){this._firstLevel=e;let t=p.bitrate,n=this.hls.bandwidthEstimate;if(this.log(`manifest loaded, ${u.length} level(s) found, first bitrate: ${t}`),this.hls.userConfig?.abrEwmaDefaultEstimate===void 0){let e=Math.min(t,this.hls.config.abrEwmaDefaultEstimateMax);e>n&&n===this.hls.abrEwmaDefaultEstimate&&(this.hls.bandwidthEstimate=e)}break}let m=s&&!o,h=this.hls.config,g=!!(h.audioStreamController&&h.audioTrackController),_={levels:u,audioTracks:c,subtitleTracks:l,sessionData:t.sessionData,sessionKeys:t.sessionKeys,firstLevel:this._firstLevel,stats:t.stats,audio:s,video:o,altAudio:g&&!m&&c.some(e=>!!e.url)};d.end=performance.now(),this.hls.trigger(a.MANIFEST_PARSED,_)}get levels(){return this._levels.length===0?null:this._levels}get loadLevelObj(){return this.currentLevel}get level(){return this.currentLevelIndex}set level(e){let t=this._levels;if(t.length===0)return;if(e<0||e>=t.length){let n=Error(`invalid level idx`),o=e<0;if(this.hls.trigger(a.ERROR,{type:r.OTHER_ERROR,details:i.LEVEL_SWITCH_ERROR,level:e,fatal:o,error:n,reason:n.message}),o)return;e=Math.min(e,t.length-1)}let n=this.currentLevelIndex,o=this.currentLevel,s=o?o.attrs[`PATHWAY-ID`]:void 0,c=t[e],l=c.attrs[`PATHWAY-ID`];if(this.currentLevelIndex=e,this.currentLevel=c,n===e&&o&&s===l)return;this.log(`Switching to level ${e} (${c.height?c.height+`p `:``}${c.videoRange?c.videoRange+` `:``}${c.codecSet?c.codecSet+` `:``}@${c.bitrate})${l?` with Pathway `+l:``} from level ${n}${s?` with Pathway `+s:``}`);let u={level:e,attrs:c.attrs,details:c.details,bitrate:c.bitrate,averageBitrate:c.averageBitrate,maxBitrate:c.maxBitrate,realBitrate:c.realBitrate,width:c.width,height:c.height,codecSet:c.codecSet,audioCodec:c.audioCodec,videoCodec:c.videoCodec,audioGroups:c.audioGroups,subtitleGroups:c.subtitleGroups,loaded:c.loaded,loadError:c.loadError,fragmentError:c.fragmentError,name:c.name,id:c.id,uri:c.uri,url:c.url,urlId:0,audioGroupIds:c.audioGroupIds,textGroupIds:c.textGroupIds};this.hls.trigger(a.LEVEL_SWITCHING,u);let d=c.details;if(!d||d.live){let e=this.switchParams(c.uri,o?.details,d);this.loadPlaylist(e)}}get manualLevel(){return this.manualLevelIndex}set manualLevel(e){this.manualLevelIndex=e,this._startLevel===void 0&&(this._startLevel=e),e!==-1&&(this.level=e)}get firstLevel(){return this._firstLevel}set firstLevel(e){this._firstLevel=e}get startLevel(){if(this._startLevel===void 0){let e=this.hls.config.startLevel;return e===void 0?this.hls.firstAutoLevel:e}return this._startLevel}set startLevel(e){this._startLevel=e}get pathways(){return this.steering?this.steering.pathways():[]}get pathwayPriority(){return this.steering?this.steering.pathwayPriority:null}set pathwayPriority(e){if(this.steering){let t=this.steering.pathways(),n=e.filter(e=>t.indexOf(e)!==-1);if(e.length<1){this.warn(`pathwayPriority ${e} should contain at least one pathway from list: ${t}`);return}this.steering.pathwayPriority=n}}onError(e,t){t.fatal||!t.context||t.context.type===o.LEVEL&&t.context.level===this.level&&this.checkRetry(t)}onFragBuffered(e,{frag:t}){if(t!==void 0&&t.type===s.MAIN){let e=t.elementaryStreams;if(!Object.keys(e).some(t=>!!e[t]))return;let n=this._levels[t.level];n!=null&&n.loadError&&(this.log(`Resetting level error count of ${n.loadError} on frag buffered`),n.loadError=0)}}onLevelLoaded(e,t){var n;let{level:r,details:i}=t,a=t.levelInfo;if(!a){var o;this.warn(`Invalid level index ${r}`),(o=t.deliveryDirectives)!=null&&o.skip&&(i.deltaUpdateFailed=!0);return}if(a===this.currentLevel||t.withoutMultiVariant){a.fragmentError===0&&(a.loadError=0);let e=a.details;e===t.details&&e.advanced&&(e=void 0),this.playlistLoaded(r,t,e)}else (n=t.deliveryDirectives)!=null&&n.skip&&(i.deltaUpdateFailed=!0)}loadPlaylist(e){super.loadPlaylist(),this.shouldLoadPlaylist(this.currentLevel)&&this.scheduleLoading(this.currentLevel,e)}loadingPlaylist(e,t){super.loadingPlaylist(e,t);let n=this.getUrlWithDirectives(e.uri,t),r=this.currentLevelIndex,i=e.attrs[`PATHWAY-ID`],o=e.details,s=o?.age;this.log(`Loading level index ${r}${t?.msn===void 0?``:` at sn `+t.msn+` part `+t.part}${i?` Pathway `+i:``}${s&&o.live?` age `+s.toFixed(1)+(o.type&&` `+o.type||``):``} ${n}`),this.hls.trigger(a.LEVEL_LOADING,{url:n,level:r,levelInfo:e,pathwayId:e.attrs[`PATHWAY-ID`],id:0,deliveryDirectives:t||null})}get nextLoadLevel(){return this.manualLevelIndex===-1?this.hls.nextAutoLevel:this.manualLevelIndex}set nextLoadLevel(e){this.level=e,this.manualLevelIndex===-1&&(this.hls.nextAutoLevel=e)}removeLevel(e){var t;if(this._levels.length===1)return;let n=this._levels.filter((t,n)=>n===e?(this.steering&&this.steering.removeLevel(t),t===this.currentLevel&&(this.currentLevel=null,this.currentLevelIndex=-1,t.details&&t.details.fragments.forEach(e=>e.level=-1)),!1):!0);Vr(n),this._levels=n,this.currentLevelIndex>-1&&(t=this.currentLevel)!=null&&t.details&&(this.currentLevelIndex=this.currentLevel.details.fragments[0].level),this.manualLevelIndex>-1&&(this.manualLevelIndex=this.currentLevelIndex);let r=n.length-1;this._firstLevel=Math.min(this._firstLevel,r),this._startLevel&&=Math.min(this._startLevel,r),this.hls.trigger(a.LEVELS_UPDATED,{levels:n})}onLevelsUpdated(e,{levels:t}){this._levels=t}checkMaxAutoUpdated(){let{autoLevelCapping:e,maxAutoLevel:t,maxHdcpLevel:n}=this.hls;this._maxAutoLevel!==t&&(this._maxAutoLevel=t,this.hls.trigger(a.MAX_AUTO_LEVEL_UPDATED,{autoLevelCapping:e,levels:this.levels,maxAutoLevel:t,minAutoLevel:this.hls.minAutoLevel,maxHdcpLevel:n}))}};function fu(e){let t={};e.forEach(e=>{let n=e.groupId||``;e.id=t[n]=t[n]||0,t[n]++})}function pu(){return self.SourceBuffer||self.WebKitSourceBuffer}function mu(){if(!T())return!1;let e=pu();return!e||e.prototype&&typeof e.prototype.appendBuffer==`function`&&typeof e.prototype.remove==`function`}function hu(){if(!mu())return!1;let e=T();return typeof e?.isTypeSupported==`function`&&([`avc1.42E01E,mp4a.40.2`,`av01.0.01M.08`,`vp09.00.50.08`].some(t=>e.isTypeSupported(Ue(t,`video`)))||[`mp4a.40.2`,`fLaC`].some(t=>e.isTypeSupported(Ue(t,`audio`))))}function gu(){var e;let t=pu();return typeof(t==null||(e=t.prototype)==null?void 0:e.changeType)==`function`}var _u=100,vu=class extends $r{constructor(t,n,r){super(t,n,r,`stream-controller`,s.MAIN),this.audioCodecSwap=!1,this.level=-1,this._forceStartLoad=!1,this._hasEnoughToStart=!1,this.altAudio=0,this.audioOnly=!1,this.fragPlaying=null,this.fragLastKbps=0,this.couldBacktrack=!1,this.backtrackFragment=null,this.audioCodecSwitch=!1,this.videoBuffer=null,this.onMediaPlaying=()=>{this.tick()},this.onMediaSeeked=()=>{let t=this.media,n=t?t.currentTime:null;if(n===null||!e(n)||(this.log(`Media seeked to ${n.toFixed(3)}`),!this.getBufferedFrag(n)))return;let r=this.getFwdBufferInfoAtPos(t,n,s.MAIN,0);if(r===null||r.len===0){this.warn(`Main forward buffer length at ${n} on "seeked" event ${r?r.len:`empty`})`);return}this.tick()},this.registerListeners()}registerListeners(){super.registerListeners();let{hls:e}=this;e.on(a.MANIFEST_PARSED,this.onManifestParsed,this),e.on(a.LEVEL_LOADING,this.onLevelLoading,this),e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.FRAG_LOAD_EMERGENCY_ABORTED,this.onFragLoadEmergencyAborted,this),e.on(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.on(a.AUDIO_TRACK_SWITCHED,this.onAudioTrackSwitched,this),e.on(a.BUFFER_CREATED,this.onBufferCreated,this),e.on(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this)}unregisterListeners(){super.unregisterListeners();let{hls:e}=this;e.off(a.MANIFEST_PARSED,this.onManifestParsed,this),e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.FRAG_LOAD_EMERGENCY_ABORTED,this.onFragLoadEmergencyAborted,this),e.off(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.off(a.AUDIO_TRACK_SWITCHED,this.onAudioTrackSwitched,this),e.off(a.BUFFER_CREATED,this.onBufferCreated,this),e.off(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this)}onHandlerDestroying(){this.onMediaPlaying=this.onMediaSeeked=null,this.unregisterListeners(),super.onHandlerDestroying()}startLoad(e,t){if(this.levels){let{lastCurrentTime:n,hls:r}=this;if(this.stopLoad(),this.setInterval(_u),this.level=-1,!this.startFragRequested){let e=r.startLevel;e===-1&&(r.config.testBandwidth&&this.levels.length>1?(e=0,this.bitrateTest=!0):e=r.firstAutoLevel),r.nextLoadLevel=e,this.level=r.loadLevel,this._hasEnoughToStart=!!t}n>0&&e===-1&&!t&&(this.log(`Override startPosition with lastCurrentTime @${n.toFixed(3)}`),e=n),this.state=Y.IDLE,this.nextLoadPosition=this.lastCurrentTime=e+this.timelineOffset,this.startPosition=t?-1:e,this.tick()}else this._forceStartLoad=!0,this.state=Y.STOPPED}stopLoad(){this._forceStartLoad=!1,super.stopLoad()}doTick(){switch(this.state){case Y.WAITING_LEVEL:{let{levels:e,level:t}=this,n=e?.[t],r=n?.details;if(r&&(!r.live||this.levelLastLoaded===n&&!this.waitForLive(n))){if(this.waitForCdnTuneIn(r))break;this.state=Y.IDLE;break}else if(this.hls.nextLoadLevel!==this.level){this.state=Y.IDLE;break}break}case Y.FRAG_LOADING_WAITING_RETRY:this.checkRetryDate();break}this.state===Y.IDLE&&this.doTickIdle(),this.onTickEnd()}onTickEnd(){var e;super.onTickEnd(),(e=this.media)!=null&&e.readyState&&this.media.seeking===!1&&(this.lastCurrentTime=this.media.currentTime),this.checkFragmentChanged()}doTickIdle(){let{hls:e,levelLastLoaded:t,levels:n,media:r}=this;if(t===null||!r&&!this.primaryPrefetch&&(this.startFragRequested||!e.config.startFragPrefetch)||this.altAudio&&this.audioOnly)return;let i=this.buffering?e.nextLoadLevel:e.loadLevel;if(!(n!=null&&n[i]))return;let o=n[i],c=this.getMainFwdBufferInfo();if(c===null)return;let l=this.getLevelDetails();if(l&&this._streamEnded(c,l)){let e={};this.altAudio===2&&(e.type=`video`),this.hls.trigger(a.BUFFER_EOS,e),this.state=Y.ENDED;return}if(!this.buffering)return;e.loadLevel!==i&&e.manualLevel===-1&&this.log(`Adapting to level ${i} from level ${this.level}`),this.level=e.nextLoadLevel=i;let u=o.details;if(!u||this.state===Y.WAITING_LEVEL||this.waitForLive(o)){this.level=i,this.state=Y.WAITING_LEVEL,this.startFragRequested=!1;return}let d=c.len,f=this.getMaxBufferLength(o.maxBitrate);if(d>=f)return;this.backtrackFragment&&this.backtrackFragment.start>c.end&&(this.backtrackFragment=null);let p=this.backtrackFragment?this.backtrackFragment.start:c.end,m=this.getNextFragment(p,u);if(this.couldBacktrack&&!this.fragPrevious&&m&&L(m)&&this.fragmentTracker.getState(m)!==U.OK){let e=(this.backtrackFragment??m).sn-u.startSN,t=u.fragments[e-1];t&&m.cc===t.cc&&(m=t,this.fragmentTracker.removeFragment(t))}else this.backtrackFragment&&c.len&&(this.backtrackFragment=null);if(m&&this.isLoopLoading(m,p)){if(!m.gap){let e=this.audioOnly&&!this.altAudio?I.AUDIO:I.VIDEO,t=(e===I.VIDEO?this.videoBuffer:this.mediaBuffer)||this.media;t&&this.afterBufferFlushed(t,e,s.MAIN)}m=this.getNextFragmentLoopLoading(m,u,c,s.MAIN,f)}m&&(this.exceedsMaxBuffer(c,f,m)||(m.initSegment&&!m.initSegment.data&&!this.bitrateTest&&(m=m.initSegment),this.loadFragment(m,o,p)))}loadFragment(e,t,n){let r=this.fragmentTracker.getState(e);r===U.NOT_LOADED||r===U.PARTIAL?L(e)?this.bitrateTest?(this.log(`Fragment ${e.sn} of level ${e.level} is being downloaded to test bitrate and will not be buffered`),this._loadBitrateTestFrag(e,t)):super.loadFragment(e,t,n):this._loadInitSegment(e,t):this.clearTrackerIfNeeded(e)}getBufferedFrag(e){return this.fragmentTracker.getBufferedFrag(e,s.MAIN)}followingBufferedFrag(e){return e?this.getBufferedFrag(e.end+.5):null}immediateLevelSwitch(){this.abortCurrentFrag(),this.flushMainBuffer(0,1/0),this.altAudio!==0&&(this.getLevelDetails()?.fragmentStart||0)>this.lastCurrentTime&&super.flushMainBuffer(0,1/0,`audio`)}nextLevelSwitch(){let{levels:e,media:t}=this;if(t!=null&&t.readyState){let n,r=this.getAppendedFrag(t.currentTime);r&&r.start>1&&this.flushMainBuffer(0,r.start-1);let i=this.getLevelDetails();if(i!=null&&i.live){let e=this.getMainFwdBufferInfo();if(!e||e.len<i.targetduration*2)return}if(!t.paused&&e){let t=e[this.hls.nextLoadLevel],r=this.fragLastKbps;n=r&&this.fragCurrent?this.fragCurrent.duration*t.maxBitrate/(1e3*r)+1:0}else n=0;let a=this.getBufferedFrag(t.currentTime+n);if(a){let e=this.followingBufferedFrag(a);if(e){this.abortCurrentFrag();let t=e.maxStartPTS?e.maxStartPTS:e.start,n=e.duration,r=Math.max(a.end,t+Math.min(Math.max(n-this.config.maxFragLookUpTolerance,n*(this.couldBacktrack?.5:.125)),n*(this.couldBacktrack?.75:.25)));this.flushMainBuffer(r,1/0)}}}}abortCurrentFrag(){let e=this.fragCurrent;switch(this.fragCurrent=null,this.backtrackFragment=null,e&&(e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.state){case Y.KEY_LOADING:case Y.FRAG_LOADING:case Y.FRAG_LOADING_WAITING_RETRY:case Y.PARSING:case Y.PARSED:this.state=Y.IDLE;break}this.nextLoadPosition=this.getLoadPosition()}flushMainBuffer(e,t){super.flushMainBuffer(e,t,this.altAudio===2?`video`:null)}onMediaAttached(e,t){super.onMediaAttached(e,t);let n=t.media;J(n,`playing`,this.onMediaPlaying),J(n,`seeked`,this.onMediaSeeked)}onMediaDetaching(e,t){let{media:n}=this;n&&(Zr(n,`playing`,this.onMediaPlaying),Zr(n,`seeked`,this.onMediaSeeked)),this.videoBuffer=null,this.fragPlaying=null,super.onMediaDetaching(e,t),!t.transferMedia&&(this._hasEnoughToStart=!1)}onManifestLoading(){super.onManifestLoading(),this.log(`Trigger BUFFER_RESET`),this.hls.trigger(a.BUFFER_RESET,void 0),this.couldBacktrack=!1,this.fragLastKbps=0,this.fragPlaying=this.backtrackFragment=null,this.altAudio=0,this.audioOnly=!1}onManifestParsed(e,t){let n=!1,r=!1;for(let e=0;e<t.levels.length;e++){let i=t.levels[e].audioCodec;i&&(n||=i.indexOf(`mp4a.40.2`)!==-1,r||=i.indexOf(`mp4a.40.5`)!==-1)}this.audioCodecSwitch=n&&r&&!gu(),this.audioCodecSwitch&&this.log(`Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC`),this.levels=t.levels,this.startFragRequested=!1}onLevelLoading(e,t){let{levels:n}=this;if(!n||this.state!==Y.IDLE)return;let r=t.levelInfo;(!r.details||r.details.live&&(this.levelLastLoaded!==r||r.details.expired)||this.waitForCdnTuneIn(r.details))&&(this.state=Y.WAITING_LEVEL)}onLevelLoaded(e,t){var n;let{levels:r,startFragRequested:i}=this,o=t.level,s=t.details,c=s.totalduration;if(!r){this.warn(`Levels were reset while loading level ${o}`);return}this.log(`Level ${o} loaded [${s.startSN},${s.endSN}]${s.lastPartSn?`[part-${s.lastPartSn}-${s.lastPartIndex}]`:``}, cc [${s.startCC}, ${s.endCC}] duration:${c}`);let l=t.levelInfo,u=this.fragCurrent;u&&(this.state===Y.FRAG_LOADING||this.state===Y.FRAG_LOADING_WAITING_RETRY)&&u.level!==t.level&&u.loader&&this.abortCurrentFrag();let d=0;if(s.live||(n=l.details)!=null&&n.live){if(this.checkLiveUpdate(s),s.deltaUpdateFailed)return;d=this.alignPlaylists(s,l.details,this.levelLastLoaded?.details)}if(l.details=s,this.levelLastLoaded=l,i||this.setStartPosition(s,d),this.hls.trigger(a.LEVEL_UPDATED,{details:s,level:o}),this.state===Y.WAITING_LEVEL){if(this.waitForCdnTuneIn(s))return;this.state=Y.IDLE}i&&s.live&&this.synchronizeToLiveEdge(s),this.tick()}synchronizeToLiveEdge(e){let{config:t,media:n}=this;if(!n)return;let r=this.hls.liveSyncPosition,i=this.getLoadPosition(),a=e.fragmentStart,o=e.edge,s=i>=a-t.maxFragLookUpTolerance&&i<=o;if(r!==null&&n.duration>r&&(i<r||!s)){let a=t.liveMaxLatencyDuration===void 0?t.liveMaxLatencyDurationCount*e.targetduration:t.liveMaxLatencyDuration;if((!s&&n.readyState<4||i<o-a)&&(this._hasEnoughToStart||(this.nextLoadPosition=r),n.readyState))if(this.warn(`Playback: ${i.toFixed(3)} is located too far from the end of live sliding playlist: ${o}, reset currentTime to : ${r.toFixed(3)}`),this.config.liveSyncMode===`buffered`){var c;let e=W.bufferInfo(n,r,0);if(!((c=e.buffered)!=null&&c.length)){n.currentTime=r;return}if(e.start<=i){n.currentTime=r;return}let{nextStart:t}=W.bufferedInfo(e.buffered,i,0);t&&(n.currentTime=t)}else n.currentTime=r}}_handleFragmentLoadProgress(e){let t=e.frag,{part:n,payload:r}=e,{levels:i}=this;if(!i){this.warn(`Levels were reset while fragment load was in progress. Fragment ${t.sn} of level ${t.level} will not be buffered`);return}let a=i[t.level];if(!a){this.warn(`Level ${t.level} not found on progress`);return}let o=a.details;if(!o){this.warn(`Dropping fragment ${t.sn} of level ${t.level} after level details were reset`),this.fragmentTracker.removeFragment(t);return}let c=a.videoCodec,l=o.PTSKnown||!o.live,u=t.initSegment?.data,d=this._getAudioCodec(a),f=this.transmuxer=this.transmuxer||new so(this.hls,s.MAIN,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this)),p=n?n.index:-1,m=p!==-1,h=new Tn(t.level,t.sn,t.stats.chunkCount,r.byteLength,p,m),g=this.initPTS[t.cc];f.push(r,u,d,c,t,n,o.totalduration,l,h,g)}onAudioTrackSwitching(e,t){let n=this.hls,r=this.altAudio!==0;if(Rt(t.url,n))this.altAudio=1;else{if(this.mediaBuffer!==this.media){this.log(`Switching on main audio, use media.buffered to schedule main fragment loading`),this.mediaBuffer=this.media;let e=this.fragCurrent;e&&(this.log(`Switching to main audio track, cancel main fragment load`),e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.resetTransmuxer(),this.resetLoadingState()}else this.audioOnly&&this.resetTransmuxer();if(r){this.altAudio=0,this.fragmentTracker.removeAllFragments(),n.once(a.BUFFER_FLUSHED,()=>{this.hls&&this.hls.trigger(a.AUDIO_TRACK_SWITCHED,t)}),n.trigger(a.BUFFER_FLUSHING,{startOffset:0,endOffset:1/0,type:null});return}n.trigger(a.AUDIO_TRACK_SWITCHED,t)}}onAudioTrackSwitched(e,t){let n=Rt(t.url,this.hls);if(n){let e=this.videoBuffer;e&&this.mediaBuffer!==e&&(this.log(`Switching on alternate audio, use video.buffered to schedule main fragment loading`),this.mediaBuffer=e)}this.altAudio=n?2:0,this.tick()}onBufferCreated(e,t){let n=t.tracks,r,i,a=!1;for(let e in n){let t=n[e];if(t.id===`main`){if(i=e,r=t,e===`video`){let t=n[e];t&&(this.videoBuffer=t.buffer)}}else a=!0}a&&r?(this.log(`Alternate track found, use ${i}.buffered to schedule main fragment loading`),this.mediaBuffer=r.buffer):this.mediaBuffer=this.media}onFragBuffered(e,t){let{frag:n,part:r}=t,i=n.type===s.MAIN;if(i){if(this.fragContextChanged(n)){this.warn(`Fragment ${n.sn}${r?` p: `+r.index:``} of level ${n.level} finished buffering, but was aborted. state: ${this.state}`),this.state===Y.PARSED&&(this.state=Y.IDLE);return}let e=r?r.stats:n.stats;this.fragLastKbps=Math.round(8*e.total/(e.buffering.end-e.loading.first)),L(n)&&(this.fragPrevious=n),this.fragBufferedComplete(n,r)}let a=this.media;a&&(!this._hasEnoughToStart&&W.getBuffered(a).length&&(this._hasEnoughToStart=!0,this.seekToStartPos()),i&&this.tick())}get hasEnoughToStart(){return this._hasEnoughToStart}onError(e,t){if(t.fatal){this.state=Y.ERROR;return}switch(t.details){case i.FRAG_GAP:case i.FRAG_PARSING_ERROR:case i.FRAG_DECRYPT_ERROR:case i.FRAG_LOAD_ERROR:case i.FRAG_LOAD_TIMEOUT:case i.KEY_LOAD_ERROR:case i.KEY_LOAD_TIMEOUT:this.onFragmentOrKeyLoadError(s.MAIN,t);break;case i.LEVEL_LOAD_ERROR:case i.LEVEL_LOAD_TIMEOUT:case i.LEVEL_PARSING_ERROR:!t.levelRetry&&this.state===Y.WAITING_LEVEL&&t.context?.type===o.LEVEL&&(this.state=Y.IDLE);break;case i.BUFFER_ADD_CODEC_ERROR:case i.BUFFER_APPEND_ERROR:if(t.parent!==`main`)return;this.reduceLengthAndFlushBuffer(t)&&this.resetLoadingState();break;case i.BUFFER_FULL_ERROR:if(t.parent!==`main`)return;this.reduceLengthAndFlushBuffer(t)&&(!this.config.interstitialsController&&this.config.assetPlayerId?this._hasEnoughToStart=!0:this.flushMainBuffer(0,1/0));break;case i.INTERNAL_EXCEPTION:this.recoverWorkerError(t);break}}onFragLoadEmergencyAborted(){this.state=Y.IDLE,this._hasEnoughToStart||(this.startFragRequested=!1,this.nextLoadPosition=this.lastCurrentTime),this.tickImmediate()}onBufferFlushed(e,{type:t}){if(t!==I.AUDIO||!this.altAudio){let e=(t===I.VIDEO?this.videoBuffer:this.mediaBuffer)||this.media;e&&(this.afterBufferFlushed(e,t,s.MAIN),this.tick())}}onLevelsUpdated(e,t){this.level>-1&&this.fragCurrent&&(this.level=this.fragCurrent.level,this.level===-1&&this.resetWhenMissingContext(this.fragCurrent)),this.levels=t.levels}swapAudioCodec(){this.audioCodecSwap=!this.audioCodecSwap}seekToStartPos(){let{media:e}=this;if(!e)return;let t=e.currentTime,n=this.startPosition;if(n>=0&&t<n){if(e.seeking){this.log(`could not seek to ${n}, already seeking at ${t}`);return}let r=this.timelineOffset;r&&n&&(n+=r);let i=this.getLevelDetails(),a=W.getBuffered(e),o=a.length?a.start(0):0,s=o-n,c=Math.max(this.config.maxBufferHole,this.config.maxFragLookUpTolerance);(this.config.startOnSegmentBoundary||s>0&&(s<c||this.loadingParts&&s<2*(i?.partTarget||0)))&&(this.log(`adjusting start position by ${s} to match buffer start`),n+=s,this.startPosition=n),t<n&&(this.log(`seek to target start position ${n} from current time ${t} buffer start ${o}`),e.currentTime=n)}}_getAudioCodec(e){let t=this.config.defaultAudioCodec||e.audioCodec;return this.audioCodecSwap&&t&&(this.log(`Swapping audio codec`),t=t.indexOf(`mp4a.40.5`)===-1?`mp4a.40.5`:`mp4a.40.2`),t}_loadBitrateTestFrag(e,t){e.bitrateTest=!0,this._doFragLoad(e,t).then(e=>{let{hls:n}=this,r=e?.frag;if(!r||this.fragContextChanged(r))return;t.fragmentError=0,this.state=Y.IDLE,this.startFragRequested=!1,this.bitrateTest=!1;let i=r.stats;i.parsing.start=i.parsing.end=i.buffering.start=i.buffering.end=self.performance.now(),n.trigger(a.FRAG_LOADED,e),r.bitrateTest=!1}).catch(t=>{this.state===Y.STOPPED||this.state===Y.ERROR||(this.warn(t),this.resetFragmentLoading(e))})}_handleTransmuxComplete(t){let n=this.playlistType,{hls:r}=this,{remuxResult:i,chunkMeta:o}=t,s=this.getCurrentContext(o);if(!s){this.resetWhenMissingContext(o);return}let{frag:c,part:l,level:u}=s,{video:d,text:f,id3:p,initSegment:m}=i,{details:h}=u,g=this.altAudio?void 0:i.audio;if(this.fragContextChanged(c)){this.fragmentTracker.removeFragment(c);return}if(this.state=Y.PARSING,m){let t=m.tracks;if(t){let e=c.initSegment||c;if(this.unhandledEncryptionError(m,c))return;this._bufferInitSegment(u,t,e,o),r.trigger(a.FRAG_PARSING_INIT_SEGMENT,{frag:e,id:n,tracks:t})}let i=m.initPTS,s=m.timescale,l=this.initPTS[c.cc];if(e(i)&&(!l||l.baseTime!==i||l.timescale!==s)){let e=m.trackId;this.initPTS[c.cc]={baseTime:i,timescale:s,trackId:e},r.trigger(a.INIT_PTS_FOUND,{frag:c,id:n,initPTS:i,timescale:s,trackId:e})}}if(d&&h){g&&d.type===`audiovideo`&&this.logMuxedErr(c);let e=h.fragments[c.sn-1-h.startSN],t=c.sn===h.startSN,n=!e||c.cc>e.cc;if(i.independent!==!1){let{startPTS:e,endPTS:r,startDTS:i,endDTS:a}=d;if(l)l.elementaryStreams[d.type]={startPTS:e,endPTS:r,startDTS:i,endDTS:a};else if(d.firstKeyFrame&&d.independent&&o.id===1&&!n&&(this.couldBacktrack=!0),d.dropped&&d.independent){let i=this.getMainFwdBufferInfo(),o=(i?i.end:this.getLoadPosition())+this.config.maxBufferHole,s=d.firstKeyFramePTS?d.firstKeyFramePTS:e;if(!t&&o<s-this.config.maxBufferHole&&!n){this.backtrack(c);return}else n&&(c.gap=!0);c.setElementaryStreamInfo(d.type,c.start,r,c.start,a,!0)}else t&&e-(h.appliedTimelineOffset||0)>Zl&&(c.gap=!0);c.setElementaryStreamInfo(d.type,e,r,i,a),this.backtrackFragment&&=c,this.bufferFragmentData(d,c,l,o,t||n)}else if(t||n)c.gap=!0;else{this.backtrack(c);return}}if(g){let{startPTS:e,endPTS:t,startDTS:n,endDTS:r}=g;l&&(l.elementaryStreams[I.AUDIO]={startPTS:e,endPTS:t,startDTS:n,endDTS:r}),c.setElementaryStreamInfo(I.AUDIO,e,t,n,r),this.bufferFragmentData(g,c,l,o)}if(h&&p!=null&&p.samples.length){let e={id:n,frag:c,details:h,samples:p.samples};r.trigger(a.FRAG_PARSING_METADATA,e)}if(h&&f){let e={id:n,frag:c,details:h,samples:f.samples};r.trigger(a.FRAG_PARSING_USERDATA,e)}}logMuxedErr(e){this.warn(`${L(e)?`Media`:`Init`} segment with muxed audiovideo where only video expected: ${e.url}`)}_bufferInitSegment(e,t,n,r){if(this.state!==Y.PARSING)return;this.audioOnly=!!t.audio&&!t.video,this.altAudio&&!this.audioOnly&&(delete t.audio,t.audiovideo&&this.logMuxedErr(n));let{audio:i,video:o,audiovideo:c}=t;if(i){let n=e.audioCodec,r=Ze(i.codec,n);r===`mp4a`&&(r=`mp4a.40.5`);let a=navigator.userAgent.toLowerCase();if(this.audioCodecSwitch){r&&=r.indexOf(`mp4a.40.5`)===-1?`mp4a.40.5`:`mp4a.40.2`;let e=i.metadata;e&&`channelCount`in e&&(e.channelCount||1)!==1&&a.indexOf(`firefox`)===-1&&(r=`mp4a.40.5`)}r&&r.indexOf(`mp4a.40.5`)!==-1&&a.indexOf(`android`)!==-1&&i.container!==`audio/mpeg`&&(r=`mp4a.40.2`,this.log(`Android: force audio codec to ${r}`)),n&&n!==r&&this.log(`Swapping manifest audio codec "${n}" for "${r}"`),i.levelCodec=r,i.id=s.MAIN,this.log(`Init audio buffer, container:${i.container}, codecs[selected/level/parsed]=[${r||``}/${n||``}/${i.codec}]`),delete t.audiovideo}if(o){o.levelCodec=e.videoCodec,o.id=s.MAIN;let n=o.codec;if(n?.length===4)switch(n){case`hvc1`:case`hev1`:o.codec=`hvc1.1.6.L120.90`;break;case`av01`:o.codec=`av01.0.04M.08`;break;case`avc1`:o.codec=`avc1.42e01e`;break}this.log(`Init video buffer, container:${o.container}, codecs[level/parsed]=[${e.videoCodec||``}/${n}]${o.codec===n?``:` parsed-corrected=`+o.codec}${o.supplemental?` supplemental=`+o.supplemental:``}`),delete t.audiovideo}c&&(this.log(`Init audiovideo buffer, container:${c.container}, codecs[level/parsed]=[${e.codecs}/${c.codec}]`),delete t.video,delete t.audio);let l=Object.keys(t);if(l.length){if(this.hls.trigger(a.BUFFER_CODECS,t),!this.hls)return;l.forEach(e=>{let i=t[e].initSegment;i!=null&&i.byteLength&&this.hls.trigger(a.BUFFER_APPENDING,{type:e,data:i,frag:n,part:null,chunkMeta:r,parent:n.type})})}this.tickImmediate()}getMainFwdBufferInfo(){let e=this.mediaBuffer&&this.altAudio===2?this.mediaBuffer:this.media;return this.getFwdBufferInfo(e,s.MAIN)}get maxBufferLength(){let{levels:e,level:t}=this,n=e?.[t];return n?this.getMaxBufferLength(n.maxBitrate):this.config.maxBufferLength}backtrack(e){this.couldBacktrack=!0,this.backtrackFragment=e,this.resetTransmuxer(),this.flushBufferGap(e),this.fragmentTracker.removeFragment(e),this.fragPrevious=null,this.nextLoadPosition=e.start,this.state=Y.IDLE}checkFragmentChanged(){let e=this.media,t=null;if(e&&e.readyState>1&&e.seeking===!1){let n=e.currentTime;if(W.isBuffered(e,n)?t=this.getAppendedFrag(n):W.isBuffered(e,n+.1)&&(t=this.getAppendedFrag(n+.1)),t){this.backtrackFragment=null;let e=this.fragPlaying,n=t.level;(!e||t.sn!==e.sn||e.level!==n)&&(this.fragPlaying=t,this.hls.trigger(a.FRAG_CHANGED,{frag:t}),(!e||e.level!==n)&&this.hls.trigger(a.LEVEL_SWITCHED,{level:n}))}}}get nextLevel(){let e=this.nextBufferedFrag;return e?e.level:-1}get currentFrag(){if(this.fragPlaying)return this.fragPlaying;let t=this.media?.currentTime||this.lastCurrentTime;return e(t)?this.getAppendedFrag(t):null}get currentProgramDateTime(){let t=this.media?.currentTime||this.lastCurrentTime;if(e(t)){let e=this.getLevelDetails(),n=this.currentFrag||(e?Ht(null,e.fragments,t):null);if(n){let e=n.programDateTime;if(e!==null){let r=e+(t-n.start)*1e3;return new Date(r)}}}return null}get currentLevel(){let e=this.currentFrag;return e?e.level:-1}get nextBufferedFrag(){let e=this.currentFrag;return e?this.followingBufferedFrag(e):null}get forceStartLoad(){return this._forceStartLoad}},yu=class extends g{constructor(e,t){super(`key-loader`,t),this.config=void 0,this.keyIdToKeyInfo={},this.emeController=null,this.config=e}abort(e){for(let t in this.keyIdToKeyInfo){let n=this.keyIdToKeyInfo[t].loader;if(n){if(e&&e!==n.context?.frag.type)return;n.abort()}}}detach(){for(let e in this.keyIdToKeyInfo){let t=this.keyIdToKeyInfo[e];(t.mediaKeySessionContext||t.decryptdata.isCommonEncryption)&&delete this.keyIdToKeyInfo[e]}}destroy(){this.detach();for(let e in this.keyIdToKeyInfo){let t=this.keyIdToKeyInfo[e].loader;t&&t.destroy()}this.keyIdToKeyInfo={}}createKeyLoadError(e,t=i.KEY_LOAD_ERROR,n,a,o){return new Cn({type:r.NETWORK_ERROR,details:t,fatal:!1,frag:e,response:o,error:n,networkDetails:a})}loadClear(e,t,n){if(this.emeController&&this.config.emeEnabled&&!this.emeController.getSelectedKeySystemFormats().length){if(t.length)for(let r=0,i=t.length;r<i;r++){let a=t[r];if(e.cc<=a.cc&&(!L(e)||!L(a)||e.sn<a.sn)||!n&&r==i-1)return this.emeController.selectKeySystemFormat(a).then(e=>{if(!this.emeController)return;a.setKeyFormat(e);let t=Zn(e);if(t)return this.emeController.getKeySystemAccess([t])})}if(this.config.requireKeySystemAccessOnStart){let e=$n(this.config);if(e.length)return this.emeController.getKeySystemAccess(e)}}return null}load(e){return!e.decryptdata&&e.encrypted&&this.emeController&&this.config.emeEnabled?this.emeController.selectKeySystemFormat(e).then(t=>this.loadInternal(e,t)):this.loadInternal(e)}loadInternal(e,t){var n,r;t&&e.setKeyFormat(t);let a=e.decryptdata;if(!a){let n=Error(t?`Expected frag.decryptdata to be defined after setting format ${t}`:`Missing decryption data on fragment in onKeyLoading (emeEnabled with controller: ${this.emeController&&this.config.emeEnabled})`);return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,n))}let o=a.uri;if(!o)return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,Error(`Invalid key URI: "${o}"`)));let s=bu(a),c=this.keyIdToKeyInfo[s];if((n=c)!=null&&n.decryptdata.key)return a.key=c.decryptdata.key,Promise.resolve({frag:e,keyInfo:c});if(this.emeController&&(r=c)!=null&&r.keyLoadPromise)switch(this.emeController.getKeyStatus(c.decryptdata)){case`usable`:case`usable-in-future`:return c.keyLoadPromise.then(t=>{let{keyInfo:n}=t;return a.key=n.decryptdata.key,{frag:e,keyInfo:n}})}switch(this.log(`${this.keyIdToKeyInfo[s]?`Rel`:`L`}oading${a.keyId?` keyId: `+k(a.keyId):``} URI: ${a.uri} from ${e.type} ${e.level}`),c=this.keyIdToKeyInfo[s]={decryptdata:a,keyLoadPromise:null,loader:null,mediaKeySessionContext:null},a.method){case`SAMPLE-AES`:case`SAMPLE-AES-CENC`:case`SAMPLE-AES-CTR`:return a.keyFormat===`identity`?this.loadKeyHTTP(c,e):this.loadKeyEME(c,e);case`AES-128`:case`AES-256`:case`AES-256-CTR`:return this.loadKeyHTTP(c,e);default:return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,Error(`Key supplied with unsupported METHOD: "${a.method}"`)))}}loadKeyEME(e,t){let n={frag:t,keyInfo:e};if(this.emeController&&this.config.emeEnabled){var r;if(!e.decryptdata.keyId&&(r=t.initSegment)!=null&&r.data){let n=Se(t.initSegment.data);if(n.length){let t=n[0];t.some(e=>e!==0)?(this.log(`Using keyId found in init segment ${k(t)}`),or.setKeyIdForUri(e.decryptdata.uri,t)):(t=or.addKeyIdForUri(e.decryptdata.uri),this.log(`Generating keyId to patch media ${k(t)}`)),e.decryptdata.keyId=t}}return!e.decryptdata.keyId&&!L(t)?Promise.resolve(n):(e.keyLoadPromise=this.emeController.loadKey(n).then(t=>(e.mediaKeySessionContext=t,n))).catch(n=>{throw e.keyLoadPromise=null,`data`in n&&(n.data.frag=t),n})}return Promise.resolve(n)}loadKeyHTTP(e,t){let n=this.config,r=n.loader,a=new r(n);return t.keyLoader=e.loader=a,e.keyLoadPromise=new Promise((r,o)=>{let s={keyInfo:e,frag:t,responseType:`arraybuffer`,url:e.decryptdata.uri},c=n.keyLoadPolicy.default,l={loadPolicy:c,timeout:c.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0};a.load(s,l,{onSuccess:(e,t,n,a)=>{let{frag:s,keyInfo:c}=n,l=bu(c.decryptdata);if(!s.decryptdata||c!==this.keyIdToKeyInfo[l])return o(this.createKeyLoadError(s,i.KEY_LOAD_ERROR,Error(`after key load, decryptdata unset or changed`),a));c.decryptdata.key=s.decryptdata.key=new Uint8Array(e.data),s.keyLoader=null,c.loader=null,r({frag:s,keyInfo:c})},onError:(e,n,r,a)=>{this.resetLoader(n),o(this.createKeyLoadError(t,i.KEY_LOAD_ERROR,Error(`HTTP Error ${e.code} loading key ${e.text}`),r,p({url:s.url,data:void 0},e)))},onTimeout:(e,n,r)=>{this.resetLoader(n),o(this.createKeyLoadError(t,i.KEY_LOAD_TIMEOUT,Error(`key loading timed out`),r))},onAbort:(e,n,r)=>{this.resetLoader(n),o(this.createKeyLoadError(t,i.INTERNAL_ABORTED,Error(`key loading aborted`),r))}})})}resetLoader(e){let{frag:t,keyInfo:n,url:r}=e,i=n.loader;t.keyLoader===i&&(t.keyLoader=null,n.loader=null);let a=bu(n.decryptdata)||r;delete this.keyIdToKeyInfo[a],i&&i.destroy()}};function bu(e){if(e.keyFormat!==q.FAIRPLAY){let t=e.keyId;if(t)return k(t)}return e.uri}function xu(e){let{type:t}=e;switch(t){case o.AUDIO_TRACK:return s.AUDIO;case o.SUBTITLE_TRACK:return s.SUBTITLE;default:return s.MAIN}}function Su(e,t){let n=e.url;return(n===void 0||n.indexOf(`data:`)===0)&&(n=t.url),n}var Cu=class{constructor(e){this.hls=void 0,this.loaders=Object.create(null),this.variableList=null,this.onManifestLoaded=this.checkAutostartLoad,this.hls=e,this.registerListeners()}startLoad(e){}stopLoad(){this.destroyInternalLoaders()}registerListeners(){let{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.LEVEL_LOADING,this.onLevelLoading,this),e.on(a.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),e.on(a.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this)}unregisterListeners(){let{hls:e}=this;e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.LEVEL_LOADING,this.onLevelLoading,this),e.off(a.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),e.off(a.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this)}createInternalLoader(e){let t=this.hls.config,n=t.pLoader,r=t.loader,i=new(n||r)(t);return this.loaders[e.type]=i,i}getInternalLoader(e){return this.loaders[e.type]}resetInternalLoader(e){this.loaders[e]&&delete this.loaders[e]}destroyInternalLoaders(){for(let e in this.loaders){let t=this.loaders[e];t&&t.destroy(),this.resetInternalLoader(e)}}destroy(){this.variableList=null,this.unregisterListeners(),this.destroyInternalLoaders()}onManifestLoading(e,t){let{url:n}=t;this.variableList=null,this.load({id:null,level:0,responseType:`text`,type:o.MANIFEST,url:n,deliveryDirectives:null,levelOrTrack:null})}onLevelLoading(e,t){let{id:n,level:r,pathwayId:i,url:a,deliveryDirectives:s,levelInfo:c}=t;this.load({id:n,level:r,pathwayId:i,responseType:`text`,type:o.LEVEL,url:a,deliveryDirectives:s,levelOrTrack:c})}onAudioTrackLoading(e,t){let{id:n,groupId:r,url:i,deliveryDirectives:a,track:s}=t;this.load({id:n,groupId:r,level:null,responseType:`text`,type:o.AUDIO_TRACK,url:i,deliveryDirectives:a,levelOrTrack:s})}onSubtitleTrackLoading(e,t){let{id:n,groupId:r,url:i,deliveryDirectives:a,track:s}=t;this.load({id:n,groupId:r,level:null,responseType:`text`,type:o.SUBTITLE_TRACK,url:i,deliveryDirectives:a,levelOrTrack:s})}onLevelsUpdated(e,t){let n=this.loaders[o.LEVEL];if(n){let e=n.context;e&&!t.levels.some(t=>t===e.levelOrTrack)&&(n.abort(),delete this.loaders[o.LEVEL])}}load(t){let n=this.hls.config,r=this.getInternalLoader(t);if(r){let e=this.hls.logger,n=r.context;if(n&&n.levelOrTrack===t.levelOrTrack&&(n.url===t.url||n.deliveryDirectives&&!t.deliveryDirectives)){n.url===t.url?e.log(`[playlist-loader]: ignore ${t.url} ongoing request`):e.log(`[playlist-loader]: ignore ${t.url} in favor of ${n.url}`);return}e.log(`[playlist-loader]: aborting previous loader for type: ${t.type}`),r.abort()}let i;if(i=t.type===o.MANIFEST?n.manifestLoadPolicy.default:d({},n.playlistLoadPolicy.default,{timeoutRetry:null,errorRetry:null}),r=this.createInternalLoader(t),e(t.deliveryDirectives?.part)){let e;if(t.type===o.LEVEL&&t.level!==null?e=this.hls.levels[t.level].details:t.type===o.AUDIO_TRACK&&t.id!==null?e=this.hls.audioTracks[t.id].details:t.type===o.SUBTITLE_TRACK&&t.id!==null&&(e=this.hls.subtitleTracks[t.id].details),e){let t=e.partTarget,n=e.targetduration;if(t&&n){let e=Math.max(t*3,n*.8)*1e3;i=d({},i,{maxTimeToFirstByteMs:Math.min(e,i.maxTimeToFirstByteMs),maxLoadTimeMs:Math.min(e,i.maxTimeToFirstByteMs)})}}}let a=i.errorRetry||i.timeoutRetry||{},s={loadPolicy:i,timeout:i.maxLoadTimeMs,maxRetry:a.maxNumRetry||0,retryDelay:a.retryDelayMs||0,maxRetryDelay:a.maxRetryDelayMs||0};r.load(t,s,{onSuccess:(e,t,n,r)=>{let i=this.getInternalLoader(n);this.resetInternalLoader(n.type);let a=e.data;t.parsing.start=performance.now(),hr.isMediaPlaylist(a)||n.type!==o.MANIFEST?this.handleTrackOrLevelPlaylist(e,t,n,r||null,i):this.handleMasterPlaylist(e,t,n,r)},onError:(e,t,n,r)=>{this.handleNetworkError(t,n,!1,e,r)},onTimeout:(e,t,n)=>{this.handleNetworkError(t,n,!0,void 0,e)}})}checkAutostartLoad(){if(!this.hls)return;let{config:{autoStartLoad:e,startPosition:t},forceStartLoad:n}=this.hls;(e||n)&&(this.hls.logger.log(`${e?`auto`:`force`} startLoad with configured startPosition ${t}`),this.hls.startLoad(t))}handleMasterPlaylist(e,t,n,r){let i=this.hls,o=e.data,s=Su(e,n),c=hr.parseMasterPlaylist(o,s);if(c.playlistParsingError){t.parsing.end=performance.now(),this.handleManifestParsingError(e,n,c.playlistParsingError,r,t);return}let{contentSteering:l,levels:u,sessionData:d,sessionKeys:f,startTimeOffset:p,variableList:m}=c;this.variableList=m,u.forEach(e=>{let{unknownCodecs:t}=e;if(t){let{preferManagedMediaSource:n}=this.hls.config,{audioCodec:r,videoCodec:i}=e;for(let a=t.length;a--;){let o=t[a];Ve(o,`audio`,n)?(e.audioCodec=r=r?`${r},${o}`:o,ze.audio[r.substring(0,4)]=2,t.splice(a,1)):Ve(o,`video`,n)&&(e.videoCodec=i=i?`${i},${o}`:o,ze.video[i.substring(0,4)]=2,t.splice(a,1))}}});let{AUDIO:h=[],SUBTITLES:g,"CLOSED-CAPTIONS":_}=hr.parseMasterPlaylistMedia(o,s,c);h.length&&!h.some(e=>!e.url)&&u[0].audioCodec&&!u[0].attrs.AUDIO&&(this.hls.logger.log(`[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one`),h.unshift({type:`main`,name:`main`,groupId:`main`,default:!1,autoselect:!1,forced:!1,id:-1,attrs:new G({}),bitrate:0,url:``})),i.trigger(a.MANIFEST_LOADED,{levels:u,audioTracks:h,subtitles:g,captions:_,contentSteering:l,url:s,stats:t,networkDetails:r,sessionData:d,sessionKeys:f,startTimeOffset:p,variableList:m})}handleTrackOrLevelPlaylist(t,n,r,i,s){let c=this.hls,{id:l,level:u,type:d}=r,f=Su(t,r),p=e(u)?u:e(l)?l:0,m=xu(r),h=hr.parseLevelPlaylist(t.data,f,p,m,0,this.variableList);if(d===o.MANIFEST){let e={attrs:new G({}),bitrate:0,details:h,name:``,url:f};h.requestScheduled=n.loading.start+Lr(h,0),c.trigger(a.MANIFEST_LOADED,{levels:[e],audioTracks:[],url:f,stats:n,networkDetails:i,sessionData:null,sessionKeys:null,contentSteering:null,startTimeOffset:null,variableList:null})}n.parsing.end=performance.now(),r.levelDetails=h,this.handlePlaylistLoaded(h,t,n,r,i,s)}handleManifestParsingError(e,t,n,s,c){this.hls.trigger(a.ERROR,{type:r.NETWORK_ERROR,details:i.MANIFEST_PARSING_ERROR,fatal:t.type===o.MANIFEST,url:e.url,err:n,error:n,reason:n.message,response:e,context:t,networkDetails:s,stats:c})}handleNetworkError(e,t,n=!1,s,c){let l=`A network ${n?`timeout`:`error`+(s?` (status `+s.code+`)`:``)} occurred while loading ${e.type}`;e.type===o.LEVEL?l+=`: ${e.level} id: ${e.id}`:(e.type===o.AUDIO_TRACK||e.type===o.SUBTITLE_TRACK)&&(l+=` id: ${e.id} group-id: "${e.groupId}"`);let u=Error(l);this.hls.logger.warn(`[playlist-loader]: ${l}`);let d=i.UNKNOWN,f=!1,m=this.getInternalLoader(e);switch(e.type){case o.MANIFEST:d=n?i.MANIFEST_LOAD_TIMEOUT:i.MANIFEST_LOAD_ERROR,f=!0;break;case o.LEVEL:d=n?i.LEVEL_LOAD_TIMEOUT:i.LEVEL_LOAD_ERROR,f=!1;break;case o.AUDIO_TRACK:d=n?i.AUDIO_TRACK_LOAD_TIMEOUT:i.AUDIO_TRACK_LOAD_ERROR,f=!1;break;case o.SUBTITLE_TRACK:d=n?i.SUBTITLE_TRACK_LOAD_TIMEOUT:i.SUBTITLE_LOAD_ERROR,f=!1;break}m&&this.resetInternalLoader(e.type);let h={type:r.NETWORK_ERROR,details:d,fatal:f,url:e.url,loader:m,context:e,error:u,networkDetails:t,stats:c};s&&(h.response=p({url:t?.url||e.url,data:void 0},s)),this.hls.trigger(a.ERROR,h)}handlePlaylistLoaded(e,t,n,c,l,u){let d=this.hls,{type:f,level:p,levelOrTrack:m,id:h,groupId:g,deliveryDirectives:_}=c,v=Su(t,c),y=xu(c),b=typeof c.level==`number`&&y===s.MAIN?p:void 0,x=e.playlistParsingError;if(x){if(this.hls.logger.warn(`${x} ${e.url}`),!d.config.ignorePlaylistParsingErrors){d.trigger(a.ERROR,{type:r.NETWORK_ERROR,details:i.LEVEL_PARSING_ERROR,fatal:!1,url:v,error:x,reason:x.message,response:t,context:c,level:b,parent:y,networkDetails:l,stats:n});return}e.playlistParsingError=null}if(!e.fragments.length){let o=e.playlistParsingError=Error(`No Segments found in Playlist`);d.trigger(a.ERROR,{type:r.NETWORK_ERROR,details:i.LEVEL_EMPTY_ERROR,fatal:!1,url:v,error:o,reason:o.message,response:t,context:c,level:b,parent:y,networkDetails:l,stats:n});return}switch(e.live&&u&&(u.getCacheAge&&(e.ageHeader=u.getCacheAge()||0),(!u.getCacheAge||isNaN(e.ageHeader))&&(e.ageHeader=0)),f){case o.MANIFEST:case o.LEVEL:if(b){if(!m)b=0;else if(m!==d.levels[b]){let e=d.levels.indexOf(m);e>-1&&(b=e)}}d.trigger(a.LEVEL_LOADED,{details:e,levelInfo:m||d.levels[0],level:b||0,id:h||0,stats:n,networkDetails:l,deliveryDirectives:_,withoutMultiVariant:f===o.MANIFEST});break;case o.AUDIO_TRACK:d.trigger(a.AUDIO_TRACK_LOADED,{details:e,track:m,id:h||0,groupId:g||``,stats:n,networkDetails:l,deliveryDirectives:_});break;case o.SUBTITLE_TRACK:d.trigger(a.SUBTITLE_TRACK_LOADED,{details:e,track:m,id:h||0,groupId:g||``,stats:n,networkDetails:l,deliveryDirectives:_});break}}},$=class e{static get version(){return si}static isMSESupported(){return mu()}static isSupported(){return hu()}static getMediaSource(){return T()}static get Events(){return a}static get MetadataSchema(){return qi}static get ErrorTypes(){return r}static get ErrorDetails(){return i}static get DefaultConfig(){return e.defaultConfig?e.defaultConfig:Kl}static set DefaultConfig(t){e.defaultConfig=t}constructor(t={}){this.config=void 0,this.userConfig=void 0,this.logger=void 0,this.coreComponents=void 0,this.networkControllers=void 0,this._emitter=new oi,this._autoLevelCapping=-1,this._maxHdcpLevel=null,this.abrController=void 0,this.bufferController=void 0,this.capLevelController=void 0,this.latencyController=void 0,this.levelController=void 0,this.streamController=void 0,this.audioStreamController=void 0,this.subtititleStreamController=void 0,this.audioTrackController=void 0,this.subtitleTrackController=void 0,this.interstitialsController=void 0,this.gapController=void 0,this.emeController=void 0,this.cmcdController=void 0,this._media=null,this._url=null,this._sessionId=void 0,this.triggeringException=void 0,this.started=!1;let n=this.logger=C(t.debug||!1,`Hls instance`,t.assetPlayerId),r=this.config=Jl(e.DefaultConfig,t,n);this.userConfig=t,r.progressive&&Xl(r,n);let{abrController:i,bufferController:o,capLevelController:s,errorController:c,fpsController:l}=r,u=new c(this),d=this.abrController=new i(this),f=new on(this),p=r.interstitialsController,m=p?this.interstitialsController=new p(this,e):null,h=this.bufferController=new o(this,f),g=this.capLevelController=new s(this),_=new l(this),v=new Cu(this),y=r.contentSteeringController,b=y?new y(this):null,x=this.levelController=new du(this,b),S=new lu(this),w=new yu(this.config,this.logger),T=this.streamController=new vu(this,f,w),E=this.gapController=new tu(this,f);g.setStreamController(T),_.setStreamController(T);let D=[v,x,T];m&&D.splice(1,0,m),b&&D.splice(1,0,b),this.networkControllers=D;let O=[d,h,E,g,_,S,f];this.audioTrackController=this.createController(r.audioTrackController,D);let k=r.audioStreamController;k&&D.push(this.audioStreamController=new k(this,f,w)),this.subtitleTrackController=this.createController(r.subtitleTrackController,D);let A=r.subtitleStreamController;A&&D.push(this.subtititleStreamController=new A(this,f,w)),this.createController(r.timelineController,O),w.emeController=this.emeController=this.createController(r.emeController,O),this.cmcdController=this.createController(r.cmcdController,O),this.latencyController=this.createController(uu,O),this.coreComponents=O,D.push(u);let j=u.onErrorOut;typeof j==`function`&&this.on(a.ERROR,j,u),this.on(a.MANIFEST_LOADED,v.onManifestLoaded,v)}createController(e,t){if(e){let n=new e(this);return t&&t.push(n),n}return null}on(e,t,n=this){this._emitter.on(e,t,n)}once(e,t,n=this){this._emitter.once(e,t,n)}removeAllListeners(e){this._emitter.removeAllListeners(e)}off(e,t,n=this,r){this._emitter.off(e,t,n,r)}listeners(e){return this._emitter.listeners(e)}emit(e,t,n){return this._emitter.emit(e,t,n)}trigger(e,t){if(this.config.debug)return this.emit(e,e,t);try{return this.emit(e,e,t)}catch(t){if(this.logger.error(`An internal error happened while handling event `+e+`. Error message: "`+t.message+`". Here is a stacktrace:`,t),!this.triggeringException){this.triggeringException=!0;let n=e===a.ERROR;this.trigger(a.ERROR,{type:r.OTHER_ERROR,details:i.INTERNAL_EXCEPTION,fatal:n,event:e,error:t}),this.triggeringException=!1}}return!1}listenerCount(e){return this._emitter.listenerCount(e)}destroy(){this.logger.log(`destroy`),this.trigger(a.DESTROYING,void 0),this.detachMedia(),this.removeAllListeners(),this._autoLevelCapping=-1,this._url=null,this.networkControllers.forEach(e=>e.destroy()),this.networkControllers.length=0,this.coreComponents.forEach(e=>e.destroy()),this.coreComponents.length=0;let e=this.config;e.xhrSetup=e.fetchSetup=void 0,this.userConfig=null}attachMedia(e){if(!e||`media`in e&&!e.media){let t=Error(`attachMedia failed: invalid argument (${e})`);this.trigger(a.ERROR,{type:r.OTHER_ERROR,details:i.ATTACH_MEDIA_ERROR,fatal:!0,error:t});return}this.logger.log(`attachMedia`),this._media&&(this.logger.warn(`media must be detached before attaching`),this.detachMedia());let t=`media`in e,n=t?e.media:e,o=t?e:{media:n};this._media=n,this.trigger(a.MEDIA_ATTACHING,o)}detachMedia(){this.logger.log(`detachMedia`),this.trigger(a.MEDIA_DETACHING,{}),this._media=null}transferMedia(){this._media=null;let e=this.bufferController.transferMedia();return this.trigger(a.MEDIA_DETACHING,{transferMedia:e}),e}loadSource(e){this.stopLoad();let t=this.media,n=this._url,r=this._url=F.buildAbsoluteURL(self.location.href,e,{alwaysNormalize:!0});this._autoLevelCapping=-1,this._maxHdcpLevel=null,this.logger.log(`loadSource:${r}`),t&&n&&(n!==r||this.bufferController.hasSourceTypes())&&(this.detachMedia(),this.attachMedia(t)),this.trigger(a.MANIFEST_LOADING,{url:e})}get url(){return this._url}get hasEnoughToStart(){return this.streamController.hasEnoughToStart}get startPosition(){return this.streamController.startPositionValue}startLoad(e=-1,t){this.logger.log(`startLoad(${e+(t?`, <skip seek to start>`:``)})`),this.started=!0,this.resumeBuffering();for(let n=0;n<this.networkControllers.length&&(this.networkControllers[n].startLoad(e,t),!(!this.started||!this.networkControllers));n++);}stopLoad(){this.logger.log(`stopLoad`),this.started=!1;for(let e=0;e<this.networkControllers.length&&(this.networkControllers[e].stopLoad(),!(this.started||!this.networkControllers));e++);}get loadingEnabled(){return this.started}get bufferingEnabled(){return this.streamController.bufferingEnabled}resumeBuffering(){this.bufferingEnabled||(this.logger.log(`resume buffering`),this.networkControllers.forEach(e=>{e.resumeBuffering&&e.resumeBuffering()}))}pauseBuffering(){this.bufferingEnabled&&(this.logger.log(`pause buffering`),this.networkControllers.forEach(e=>{e.pauseBuffering&&e.pauseBuffering()}))}get inFlightFragments(){let e={[s.MAIN]:this.streamController.inFlightFrag};return this.audioStreamController&&(e[s.AUDIO]=this.audioStreamController.inFlightFrag),this.subtititleStreamController&&(e[s.SUBTITLE]=this.subtititleStreamController.inFlightFrag),e}swapAudioCodec(){this.logger.log(`swapAudioCodec`),this.streamController.swapAudioCodec()}recoverMediaError(){this.logger.log(`recoverMediaError`);let e=this._media,t=e?.currentTime;this.detachMedia(),e&&(this.attachMedia(e),t&&this.startLoad(t))}removeLevel(e){this.levelController.removeLevel(e)}get sessionId(){let e=this._sessionId;return e||=this._sessionId=lc(),e}get levels(){return this.levelController.levels||[]}get latestLevelDetails(){return this.streamController.getLevelDetails()||null}get loadLevelObj(){return this.levelController.loadLevelObj}get currentLevel(){return this.streamController.currentLevel}set currentLevel(e){this.logger.log(`set currentLevel:${e}`),this.levelController.manualLevel=e,this.streamController.immediateLevelSwitch()}get nextLevel(){return this.streamController.nextLevel}set nextLevel(e){this.logger.log(`set nextLevel:${e}`),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}get loadLevel(){return this.levelController.level}set loadLevel(e){this.logger.log(`set loadLevel:${e}`),this.levelController.manualLevel=e}get nextLoadLevel(){return this.levelController.nextLoadLevel}set nextLoadLevel(e){this.levelController.nextLoadLevel=e}get firstLevel(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)}set firstLevel(e){this.logger.log(`set firstLevel:${e}`),this.levelController.firstLevel=e}get startLevel(){let e=this.levelController.startLevel;return e===-1&&this.abrController.forcedAutoLevel>-1?this.abrController.forcedAutoLevel:e}set startLevel(e){this.logger.log(`set startLevel:${e}`),e!==-1&&(e=Math.max(e,this.minAutoLevel)),this.levelController.startLevel=e}get capLevelToPlayerSize(){return this.config.capLevelToPlayerSize}set capLevelToPlayerSize(e){let t=!!e;t!==this.config.capLevelToPlayerSize&&(t?this.capLevelController.startCapping():(this.capLevelController.stopCapping(),this.autoLevelCapping=-1,this.streamController.nextLevelSwitch()),this.config.capLevelToPlayerSize=t)}get autoLevelCapping(){return this._autoLevelCapping}get bandwidthEstimate(){let{bwEstimator:e}=this.abrController;return e?e.getEstimate():NaN}set bandwidthEstimate(e){this.abrController.resetEstimator(e)}get abrEwmaDefaultEstimate(){let{bwEstimator:e}=this.abrController;return e?e.defaultEstimate:NaN}get ttfbEstimate(){let{bwEstimator:e}=this.abrController;return e?e.getEstimateTTFB():NaN}set autoLevelCapping(e){this._autoLevelCapping!==e&&(this.logger.log(`set autoLevelCapping:${e}`),this._autoLevelCapping=e,this.levelController.checkMaxAutoUpdated())}get maxHdcpLevel(){return this._maxHdcpLevel}set maxHdcpLevel(e){ht(e)&&this._maxHdcpLevel!==e&&(this._maxHdcpLevel=e,this.levelController.checkMaxAutoUpdated())}get autoLevelEnabled(){return this.levelController.manualLevel===-1}get manualLevel(){return this.levelController.manualLevel}get minAutoLevel(){let{levels:e,config:{minAutoBitrate:t}}=this;if(!e)return 0;let n=e.length;for(let r=0;r<n;r++)if(e[r].maxBitrate>=t)return r;return 0}get maxAutoLevel(){let{levels:e,autoLevelCapping:t,maxHdcpLevel:n}=this,r;if(r=t===-1&&e!=null&&e.length?e.length-1:t,n)for(let t=r;t--;){let r=e[t].attrs[`HDCP-LEVEL`];if(r&&r<=n)return t}return r}get firstAutoLevel(){return this.abrController.firstAutoLevel}get nextAutoLevel(){return this.abrController.nextAutoLevel}set nextAutoLevel(e){this.abrController.nextAutoLevel=e}get playingDate(){return this.streamController.currentProgramDateTime}get mainForwardBufferInfo(){return this.streamController.getMainFwdBufferInfo()}get maxBufferLength(){return this.streamController.maxBufferLength}setAudioOption(e){return this.audioTrackController?.setAudioOption(e)||null}setSubtitleOption(e){return this.subtitleTrackController?.setSubtitleOption(e)||null}get allAudioTracks(){let e=this.audioTrackController;return e?e.allAudioTracks:[]}get audioTracks(){let e=this.audioTrackController;return e?e.audioTracks:[]}get audioTrack(){let e=this.audioTrackController;return e?e.audioTrack:-1}set audioTrack(e){let t=this.audioTrackController;t&&(t.audioTrack=e)}get allSubtitleTracks(){let e=this.subtitleTrackController;return e?e.allSubtitleTracks:[]}get subtitleTracks(){let e=this.subtitleTrackController;return e?e.subtitleTracks:[]}get subtitleTrack(){let e=this.subtitleTrackController;return e?e.subtitleTrack:-1}get media(){return this._media}set subtitleTrack(e){let t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}get subtitleDisplay(){let e=this.subtitleTrackController;return e?e.subtitleDisplay:!1}set subtitleDisplay(e){let t=this.subtitleTrackController;t&&(t.subtitleDisplay=e)}get lowLatencyMode(){return this.config.lowLatencyMode}set lowLatencyMode(e){this.config.lowLatencyMode=e}get liveSyncPosition(){return this.latencyController.liveSyncPosition}get latency(){return this.latencyController.latency}get maxLatency(){return this.latencyController.maxLatency}get targetLatency(){return this.latencyController.targetLatency}set targetLatency(e){this.latencyController.targetLatency=e}get drift(){return this.latencyController.drift}get forceStartLoad(){return this.streamController.forceStartLoad}get pathways(){return this.levelController.pathways}get pathwayPriority(){return this.levelController.pathwayPriority}set pathwayPriority(e){this.levelController.pathwayPriority=e}get bufferedToEnd(){var e;return!!((e=this.bufferController)!=null&&e.bufferedToEnd)}get interstitialsManager(){return this.interstitialsController?.interstitialsManager||null}getMediaDecodingInfo(e,t=this.allAudioTracks){return ct(e,Ot(t),navigator.mediaCapabilities)}};$.defaultConfig=void 0;var wu=class{callback;heartbeatInterval;watchProgressTimer;isBuffering=!1;sessionId;videoId;deviceType;networkType;adBreaks=[];isFirstPlay=!0;watchStartTime=null;totalWatchTime=0;streamingWindowStart=null;streamingTime=0;isInAdBreak=!1;adWatchWindowStart=null;adWatchTime=0;bufferingCount=0;totalBufferingTime=0;bufferingStartTime=null;milestonesHit=new Set;lastHeartbeatPosition=null;lastHeartbeatAt=null;constructor(e,t,n,r){this.callback=e,this.sessionId=n?.sessionId??this.generateSessionId(),this.videoId=r||(t?this.extractVideoId(t):``),this.deviceType=this.getDeviceType(),this.networkType=this.getNetworkType(),n&&(this.isFirstPlay=!n.sessionStartFired,this.totalWatchTime=n.totalWatchTime,this.streamingTime=n.streamingTime,this.adWatchTime=n.adWatchTime,this.bufferingCount=n.bufferingCount,this.totalBufferingTime=n.totalBufferingTime,this.milestonesHit=new Set(n.milestonesHit))}getSessionSnapshot(){let e=this.totalBufferingTime;return this.bufferingStartTime!==null&&(e+=(Date.now()-this.bufferingStartTime)/1e3),{sessionId:this.sessionId,sessionStartFired:!this.isFirstPlay,totalWatchTime:this.getTotalWatchTime(),streamingTime:this.getStreamingTime(),adWatchTime:this.getAdWatchTime(),bufferingCount:this.bufferingCount,totalBufferingTime:e,milestonesHit:[...this.milestonesHit]}}registerCallback(e){this.callback=e}setAdBreaks(e){this.adBreaks=e}getTotalAdDuration(){return this.adBreaks.reduce((e,t)=>e+(t.endTime-t.startTime),0)}getElapsedAdTime(e){return this.adBreaks.reduce((t,n)=>e>=n.endTime?t+(n.endTime-n.startTime):e>n.startTime?t+(e-n.startTime):t,0)}track(e,t,n={}){e===`play`&&this.isFirstPlay&&(this.isFirstPlay=!1,this.dispatchRaw({eventType:`session_start`,timestamp:Date.now(),currentTime:t.currentTime,duration:t.duration||0,sessionId:this.sessionId,videoId:this.videoId,deviceType:this.deviceType,networkType:this.networkType,watchPercentage:0,totalWatchTime:0,streamingTime:0,bufferingCount:0,totalBufferingTime:0})),e===`play`&&(this.watchStartTime=Date.now(),!this.isBuffering&&!this.isInAdBreak&&(this.streamingWindowStart=Date.now())),(e===`pause`||e===`ended`)&&(this.watchStartTime!==null&&(this.totalWatchTime+=(Date.now()-this.watchStartTime)/1e3,this.watchStartTime=null),this.streamingWindowStart!==null&&(this.streamingTime+=(Date.now()-this.streamingWindowStart)/1e3,this.streamingWindowStart=null),this.adWatchWindowStart!==null&&(this.adWatchTime+=(Date.now()-this.adWatchWindowStart)/1e3,this.adWatchWindowStart=null));let r=(t.duration||0)-this.getTotalAdDuration(),i=t.currentTime-this.getElapsedAdTime(t.currentTime),a=r>0?Math.min(100,Math.round(i/r*100)):0,o={eventType:e,timestamp:Date.now(),currentTime:t.currentTime,duration:t.duration||0,volume:t.volume,speed:t.playbackRate,sessionId:this.sessionId,videoId:this.videoId,deviceType:this.deviceType,networkType:this.networkType,watchPercentage:a,totalWatchTime:Math.round(this.getTotalWatchTime()),streamingTime:Math.round(this.getStreamingTime()),adWatchTime:Math.round(this.getAdWatchTime()),bufferingCount:this.bufferingCount,totalBufferingTime:Math.round(this.totalBufferingTime),...n};this.dispatchRaw(o),(e===`pause`||e===`ended`||e===`complete`)&&this.dispatchRaw({...o,eventType:`streaming_time`})}startHeartbeat(e,t,n=3e4){this.stopHeartbeat(),this.heartbeatInterval=window.setInterval(()=>{!e.paused&&!this.isBuffering&&(this.checkMilestones(e,t),this.checkStall(e,t),this.track(`heartbeat`,e,t())),this.lastHeartbeatPosition=e.currentTime,this.lastHeartbeatAt=Date.now()},5e3),this.watchProgressTimer=window.setInterval(()=>{!e.paused&&!this.isBuffering&&(this.track(`watch_progress`,e,t()),this.track(`streaming_time`,e,t()))},n)}stopHeartbeat(){this.heartbeatInterval&&=(window.clearInterval(this.heartbeatInterval),void 0),this.watchProgressTimer&&=(window.clearInterval(this.watchProgressTimer),void 0)}setBuffering(e,t,n){this.isBuffering!==e&&(this.isBuffering=e,e?(this.bufferingCount++,this.bufferingStartTime=Date.now(),this.streamingWindowStart!==null&&(this.streamingTime+=(Date.now()-this.streamingWindowStart)/1e3,this.streamingWindowStart=null)):(this.bufferingStartTime!==null&&(this.totalBufferingTime+=(Date.now()-this.bufferingStartTime)/1e3,this.bufferingStartTime=null),!t.paused&&!this.isInAdBreak&&(this.streamingWindowStart=Date.now())),this.track(e?`buffering_start`:`buffering_end`,t,n()))}setAdBreak(e,t){this.isInAdBreak!==e&&(this.isInAdBreak=e,e?(this.streamingWindowStart!==null&&(this.streamingTime+=(Date.now()-this.streamingWindowStart)/1e3,this.streamingWindowStart=null),t.paused||(this.adWatchWindowStart=Date.now())):(this.adWatchWindowStart!==null&&(this.adWatchTime+=(Date.now()-this.adWatchWindowStart)/1e3,this.adWatchWindowStart=null),!t.paused&&!this.isBuffering&&(this.streamingWindowStart=Date.now())))}checkMilestones(e,t){let{currentTime:n,duration:r}=e;if(!r)return;let i=r-this.getTotalAdDuration(),a=n-this.getElapsedAdTime(n);if(i<=0)return;let o=a/i;for(let[n,r]of[[.25,`first_quartile`],[.5,`midpoint`],[.75,`third_quartile`]])o>=n&&!this.milestonesHit.has(r)&&(this.milestonesHit.add(r),this.track(r,e,{...t(),watchPercentage:n*100}))}checkStall(e,t){this.lastHeartbeatPosition!==null&&this.lastHeartbeatAt!==null&&e.currentTime-this.lastHeartbeatPosition<.1&&Date.now()-this.lastHeartbeatAt>=4500&&this.track(`stall`,e,t())}getTotalWatchTime(){return this.watchStartTime===null?this.totalWatchTime:this.totalWatchTime+(Date.now()-this.watchStartTime)/1e3}getStreamingTime(){return this.streamingWindowStart===null?this.streamingTime:this.streamingTime+(Date.now()-this.streamingWindowStart)/1e3}getAdWatchTime(){return this.adWatchWindowStart===null?this.adWatchTime:this.adWatchTime+(Date.now()-this.adWatchWindowStart)/1e3}dispatchRaw(e){if(this.callback)try{this.callback(e)}catch(e){console.error(`[PlayerSDK Analytics] Callback failed:`,e)}}generateSessionId(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`sess-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}extractVideoId(e){try{let t=new URL(e),n=t.pathname.split(`/`).filter(Boolean);return n.length>0&&n[n.length-1].includes(`.`)&&n.pop(),n[n.length-1]||t.hostname}catch{let t=e.split(`/`).filter(Boolean);return t.length>=2&&t[t.length-1].includes(`.`)?t[t.length-2]:t[t.length-1]||`unknown`}}getDeviceType(){let e=navigator.userAgent;return/mobile/i.test(e)?`mobile`:/tablet|ipad/i.test(e)?`tablet`:`desktop`}getNetworkType(){let e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return e&&(e.effectiveType||e.type)||`unknown`}},Tu={session_start:`player_session_start`,error:`player_error`},Eu=new Set([`heartbeat`]),Du=class{analytics=null;logEventFn=null;pendingEvents=[];constructor(e){this.init(e)}async init(e){try{let[{initializeApp:t,getApps:n},{getAnalytics:r,logEvent:i,isSupported:a}]=await Promise.all([import(`firebase/app`),import(`firebase/analytics`)]);if(!await a()){console.warn(`[FirebaseAnalytics] Not supported in this environment.`);return}let o=n(),s=o.length===0?t(e):o[0];this.analytics=r(s),this.logEventFn=i,this.flushPending()}catch(e){console.error("[FirebaseAnalytics] Initialization failed (is the `firebase` package installed?):",e)}}flushPending(){let e=this.pendingEvents.splice(0);for(let t of e)this.logToFirebase(t)}createCallback(){return e=>this.handleEvent(e)}handleEvent(e){if(!Eu.has(e.eventType)){if(!this.analytics){this.pendingEvents.push(e);return}this.logToFirebase(e)}}logToFirebase(e){if(!this.analytics||!this.logEventFn)return;let t=Tu[e.eventType]??e.eventType,n=this.buildParams(e);try{this.logEventFn(this.analytics,t,n)}catch(e){console.error(`[FirebaseAnalytics] logEvent failed:`,e)}}buildParams(e){let t={session_id:(e.sessionId??``).slice(0,100),video_id:(e.videoId??``).slice(0,100),device_type:e.deviceType??`unknown`,network_type:e.networkType??`unknown`,current_time:Math.round(e.currentTime),duration:Math.round(e.duration),watch_percentage:e.watchPercentage??0,total_watch_time:e.totalWatchTime??0,streaming_time:e.streamingTime??0,ad_watch_time:e.adWatchTime??0,buffering_count:e.bufferingCount??0,total_buffering_time:e.totalBufferingTime??0};return e.rendition&&(t.rendition=e.rendition.slice(0,100)),e.bitrate&&(t.bitrate=e.bitrate),e.fromRendition&&(t.from_rendition=e.fromRendition.slice(0,100)),e.volume!==void 0&&(t.volume=Math.round(e.volume*100)),e.speed!==void 0&&(t.speed=e.speed),e.errorMessage&&(t.error_message=e.errorMessage.slice(0,100)),e.errorCode&&(t.error_code=e.errorCode),e.seekFrom!==void 0&&(t.seek_from=Math.round(e.seekFrom)),e.pipState&&(t.pip_state=e.pipState),t}destroy(){return Promise.resolve()}},Ou=class{keyMoments=[];currentMomentIndex=-1;onMomentChangeCallback;constructor(e=[]){this.setKeyMoments(e)}setKeyMoments(e){this.keyMoments=[...e].sort((e,t)=>e.startTime-t.startTime),this.currentMomentIndex=-1}getKeyMoments(){return this.keyMoments}getCurrentMoment(e){let t=this.keyMoments.findIndex(t=>e>=t.startTime&&e<t.endTime);return t===-1?{keyMoment:null,index:-1}:{keyMoment:this.keyMoments[t],index:t}}updateTime(e){let{keyMoment:t,index:n}=this.getCurrentMoment(e);n!==this.currentMomentIndex&&(this.currentMomentIndex=n,this.onMomentChangeCallback&&this.onMomentChangeCallback(t,n))}onMomentChange(e){this.onMomentChangeCallback=e}setChapters(e){this.setKeyMoments(e)}getChapters(){return this.getKeyMoments()}getCurrentChapter(e){let t=this.getCurrentMoment(e);return{chapter:t.keyMoment,index:t.index}}onChapterChange(e){this.onMomentChange(e)}},ku=class extends Ou{},Au=class{tracks=[];activeTrackId=`off`;currentCues=[];activeText=``;onSubtitleChangeCallback;onTrackSwitchCallback;constructor(e=[]){this.tracks=e;let t=e.find(e=>e.isDefault);t&&this.setActiveTrack(t.id)}getTracks(){return this.tracks}getActiveTrackId(){return this.activeTrackId}setHlsTracks(e){let t=this.tracks.filter(e=>!e.isHls&&!e.isNative);this.tracks=[...t,...e]}addTrack(e){this.tracks.find(t=>t.id===e.id)||this.tracks.push(e)}onTrackSwitch(e){this.onTrackSwitchCallback=e}setCustomSubtitleText(e){e!==this.activeText&&(this.activeText=e,this.onSubtitleChangeCallback&&this.onSubtitleChangeCallback(e))}async setActiveTrack(e){if(this.activeTrackId=e,e===`off`){this.currentCues=[],this.updateActiveText(0),this.onTrackSwitchCallback&&this.onTrackSwitchCallback(null);return}let t=this.tracks.find(t=>t.id===e);if(!t){this.currentCues=[],this.updateActiveText(0),this.onTrackSwitchCallback&&this.onTrackSwitchCallback(null);return}if(t.isHls||t.isNative){this.currentCues=[],this.updateActiveText(0),this.onTrackSwitchCallback&&this.onTrackSwitchCallback(t);return}if(this.onTrackSwitchCallback&&this.onTrackSwitchCallback(t),t.cues){this.currentCues=t.cues;return}if(t.src)try{let n=await fetch(t.src);if(!n.ok)throw Error(`HTTP error ${n.status}`);let r=await n.text(),i=this.parseVttOrSrt(r);t.cues=i,this.activeTrackId===e&&(this.currentCues=i)}catch(e){console.error(`[PlayerSDK Subtitles] Failed to fetch track ${t.label}:`,e),this.currentCues=[]}}updateTime(e){if(this.activeTrackId===`off`||this.currentCues.length===0){let e=this.tracks.find(e=>e.id===this.activeTrackId);(!e||!e.isHls&&!e.isNative)&&this.activeText!==``&&(this.activeText=``,this.onSubtitleChangeCallback&&this.onSubtitleChangeCallback(``));return}this.updateActiveText(e)}updateActiveText(e){let t=this.currentCues.filter(t=>e>=t.startTime&&e<=t.endTime).map(e=>e.text).join(`<br />`);t!==this.activeText&&(this.activeText=t,this.onSubtitleChangeCallback&&this.onSubtitleChangeCallback(t))}onSubtitleChange(e){this.onSubtitleChangeCallback=e}parseVttOrSrt(e){let t=e.replace(/^/,``);if(t.trimStart().startsWith(`#EXTM3U`))return[];let n=[],r=t.split(/\r?\n/),i=0,a=0,o=[],s=!1,c=!1,l=/(\d+):(\d{2}):(\d{2})[.,](\d{3})\s*-->\s*(\d+):(\d{2}):(\d{2})[.,](\d{3})/,u=/^(\d{2}):(\d{2})[.,](\d{3})\s*-->\s*(\d{2}):(\d{2})[.,](\d{3})/,d=(e,t,n,r)=>parseInt(e,10)*3600+parseInt(t,10)*60+parseInt(n,10)+parseInt(r,10)/1e3,f=e=>e.replace(/<\d{2}[:.]\d{2}[:.]\d{2}\.\d{3}>/g,``).replace(/<[^>]+>/g,``),p=()=>{s&&o.length>0&&n.push({startTime:i,endTime:a,text:o.map(f).join(`
|
|
41
|
+
`)}),o=[],s=!1};for(let e of r){let t=e.trim();if(!t){s&&p(),c=!1;continue}let n=t.toUpperCase();if(n===`WEBVTT`||n.startsWith(`NOTE`)||n.startsWith(`X-TIMESTAMP-MAP`)||n.startsWith(`STYLE`)||n.startsWith(`REGION`)){c=!0;continue}if(c)continue;let r=t.match(l);if(r){p(),i=d(r[1],r[2],r[3],r[4]),a=d(r[5],r[6],r[7],r[8]),s=!0;continue}let f=t.match(u);if(f){p(),i=parseInt(f[1],10)*60+parseInt(f[2],10)+parseInt(f[3],10)/1e3,a=parseInt(f[4],10)*60+parseInt(f[5],10)+parseInt(f[6],10)/1e3,s=!0;continue}s&&o.push(t)}return p(),n}},ju=class{config;watermarkElement;floatInterval;constructor(e){this.config=e}validateDomain(e){return!this.config||!this.config.allowedDomains||this.config.allowedDomains.length===0?!0:this.config.allowedDomains.includes(e)||this.config.allowedDomains.some(t=>e.endsWith(`.${t}`))}getAuthToken(){return this.config?.authToken}getAuthHeader(){return this.config?.authHeader}getRequestHeaders(){let e={};return this.config?.authToken&&this.config?.authHeader&&(e[this.config.authHeader]=this.config.authToken),e}setupWatermark(e){if(this.removeWatermark(),!this.config||!this.config.watermarkText)return;let t=this.config.watermarkText,n=document.createElement(`div`);n.className=`sdk-watermark-overlay`,n.innerText=t,n.style.position=`absolute`,n.style.pointerEvents=`none`,n.style.userSelect=`none`,n.style.color=`rgba(255, 255, 255, 0.4)`,n.style.fontSize=`12px`,n.style.fontFamily=`monospace`,n.style.fontWeight=`bold`,n.style.zIndex=`9`,n.style.padding=`4px 8px`,n.style.borderRadius=`4px`,n.style.background=`rgba(0, 0, 0, 0.4)`,n.style.backdropFilter=`blur(2px)`,n.style.top=`20px`,n.style.right=`20px`,e.appendChild(n),this.watermarkElement=n}removeWatermark(){this.floatInterval&&=(window.clearInterval(this.floatInterval),void 0),this.watermarkElement&&this.watermarkElement.parentElement&&this.watermarkElement.parentElement.removeChild(this.watermarkElement),this.watermarkElement=void 0}isDRMProtected(){return!!(this.config?.widevineLicenseUrl||this.config?.playreadyLicenseUrl||this.config?.fairplayLicenseUrl)}getDRMDetails(){return{widevine:this.config?.widevineLicenseUrl||null,playready:this.config?.playreadyLicenseUrl||null,fairplay:this.config?.fairplayLicenseUrl||null,authTokenPresent:!!this.config?.authToken,allowedDomains:this.config?.allowedDomains||[]}}},Mu=class{isCasting=!1;castDeviceName=``;onCastStateChangeCallback;onRemoteStateChangeCallback;castContext=null;remotePlayer=null;remotePlayerController=null;constructor(){this.initCastApi()}initCastApi(){let e=()=>{try{if(!window.cast?.framework||!window.chrome?.cast?.media)return;this.castContext=window.cast.framework.CastContext.getInstance(),this.castContext.setOptions({receiverApplicationId:window.chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,autoJoinPolicy:window.chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}),this.remotePlayer=new window.cast.framework.RemotePlayer,this.remotePlayerController=new window.cast.framework.RemotePlayerController(this.remotePlayer),this.remotePlayerController.addEventListener(window.cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,()=>{this.isCasting=this.remotePlayer.isConnected;let e=this.castContext.getCurrentSession();this.castDeviceName=e?e.getCastDevice().friendlyName:``,this.onCastStateChangeCallback&&this.onCastStateChangeCallback(this.isCasting,this.castDeviceName)});let e=()=>{this.onRemoteStateChangeCallback&&this.remotePlayer&&this.isCasting&&this.onRemoteStateChangeCallback({currentTime:this.remotePlayer.currentTime??0,duration:this.remotePlayer.duration??0,isPaused:this.remotePlayer.isPaused??!0,volumeLevel:this.remotePlayer.volumeLevel??1,isMuted:this.remotePlayer.isMuted??!1})},t=window.cast.framework.RemotePlayerEventType;this.remotePlayerController.addEventListener(t.CURRENT_TIME_CHANGED,e),this.remotePlayerController.addEventListener(t.IS_PAUSED_CHANGED,e),this.remotePlayerController.addEventListener(t.VOLUME_LEVEL_CHANGED,e),this.remotePlayerController.addEventListener(t.IS_MUTED_CHANGED,e),this.remotePlayerController.addEventListener(t.DURATION_CHANGED,e),this.remotePlayerController.addEventListener(t.PLAYER_STATE_CHANGED,e)}catch(e){console.warn(`[PlayerSDK Cast] Failed to initialize Cast API:`,e)}};window.cast?.framework?e():(window.__onGCastApiAvailable=t=>{t&&e()},window.__castApiAvailable===!0&&e())}getCastingState(){return{isCasting:this.isCasting,deviceName:this.castDeviceName}}getRemoteState(){return!this.remotePlayer||!this.isCasting?null:{currentTime:this.remotePlayer.currentTime??0,duration:this.remotePlayer.duration??0,isPaused:this.remotePlayer.isPaused??!0,volumeLevel:this.remotePlayer.volumeLevel??1,isMuted:this.remotePlayer.isMuted??!1}}getContentType(e){let t=e.split(/[?#]/)[0].toLowerCase();return t.endsWith(`.m3u8`)?`application/x-mpegurl`:t.endsWith(`.mpd`)?`application/dash+xml`:`video/mp4`}async requestSession(e,t){if(!this.castContext){console.error(`[PlayerSDK Cast] Google Cast Framework not loaded.`);return}try{await this.castContext.requestSession();let n=this.castContext.getCurrentSession();if(n&&e){let r=new window.chrome.cast.media.MediaInfo(e,this.getContentType(e)),i=new window.chrome.cast.media.LoadRequest(r);i.currentTime=t,i.autoplay=!0,await n.loadMedia(i)}}catch(e){console.warn(`[PlayerSDK Cast] Session request failed or cancelled by user.`,e)}}stopCasting(){if(this.castContext)try{this.castContext.endCurrentSession(!0)}catch(e){console.warn(`[PlayerSDK Cast] Failed to disconnect session`,e)}}remotePlayPause(){if(this.remotePlayerController)try{this.remotePlayerController.playOrPause()}catch(e){console.warn(`[PlayerSDK Cast] remotePlayPause failed:`,e)}}remoteSeek(e){if(this.remotePlayer&&this.remotePlayerController)try{this.remotePlayer.currentTime=Math.max(0,e),this.remotePlayerController.seek()}catch(e){console.warn(`[PlayerSDK Cast] remoteSeek failed:`,e)}}remoteSetVolume(e){if(this.remotePlayer&&this.remotePlayerController)try{this.remotePlayer.volumeLevel=Math.max(0,Math.min(1,e)),this.remotePlayerController.setVolumeLevel()}catch(e){console.warn(`[PlayerSDK Cast] remoteSetVolume failed:`,e)}}remoteSetMute(e){if(this.remotePlayer&&this.remotePlayerController)try{this.remotePlayer.isMuted!==e&&this.remotePlayerController.muteOrUnmute()}catch(e){console.warn(`[PlayerSDK Cast] remoteSetMute failed:`,e)}}onCastStateChange(e){this.onCastStateChangeCallback=e}onRemoteStateChange(e){this.onRemoteStateChangeCallback=e}requestAirPlaySession(e){let t=e;typeof t.webkitShowPlaybackTargetPicker==`function`?t.webkitShowPlaybackTargetPicker():console.warn(`[PlayerSDK AirPlay] AirPlay request is not supported on this device.`)}stopAirPlay(e){let t=e;typeof t.webkitShowPlaybackTargetPicker==`function`?t.webkitShowPlaybackTargetPicker():console.warn(`[PlayerSDK AirPlay] AirPlay stop is not supported on this device.`)}isAirPlayAvailable(){return!!window.WebKitPlaybackTargetAvailabilityEvent||navigator.userAgent.includes(`Safari`)&&!navigator.userAgent.includes(`Chrome`)}},Nu=class{config;constructor(e){this.config=e}getThumbnail(e){if(!this.config)return null;let{spriteUrl:t,tileWidth:n,tileHeight:r,columns:i,interval:a,totalCount:o}=this.config,s=Math.floor(e/a);s<0&&(s=0),s>=o&&(s=o-1);let c=s%i,l=Math.floor(s/i);return{url:t,x:c*n,y:l*r,width:n,height:r}}hasThumbnails(){return!!this.config}},Pu=class e{options;videoElement;hlsInstance=null;dashInstance=null;activeQuality={id:-1,height:0,width:0,bitrate:0,label:`Auto`};qualityLevels=[];analytics;keyMoments;chapters;subtitles;drm;casting;thumbnails;hlsSubtitleCues=new Map;hlsActiveSubtitleKey=null;audioTrackList=[];adBreaks=[];isAdBreak=!1;adBreaksFromAvails=!1;contentPlaybackRate=1;networkErrorRetries=0;mediaErrorRecovered=!1;static MAX_NETWORK_RETRIES=2;static TERMINAL_HTTP_STATUSES=[401,403,404,410];static STALL_TIMEOUT_MS=15e3;stallTimer=null;isBuffering=!1;progressTick=0;hasFailed=!1;lastPlaybackPos=0;pendingSeekAttribution=null;eventListeners={};constructor(e){this.options={autoplay:!1,muted:!1,themeColor:`#6366f1`,...e},this.analytics=new wu(this.options.analyticsCallback,this.options.src,this.options.analyticsSessionSeed,this.options.videoId),this.keyMoments=new Ou(this.options.keyMoments||this.options.chapters||[]),this.chapters=this.keyMoments,this.subtitles=new Au(this.options.subtitles),this.drm=new ju(this.options.drm),this.casting=new Mu,this.thumbnails=new Nu(this.options.thumbnails),this.initializePlayer()}initializePlayer(){let e=window.location.hostname;if(!this.drm.validateDomain(e)){let t=`Domain Blocked: Access to streaming content is restricted on ${e}.`;throw console.error(t),this.options.container.innerHTML=`
|
|
42
42
|
<div style="background:#0f172a; color:#f43f5e; padding:20px; text-align:center; font-family:sans-serif; border-radius:12px; border:1px solid #e11d48; margin: 10px;">
|
|
43
43
|
<h4 style="margin:0 0 10px 0;">Content Protection Alert</h4>
|
|
44
44
|
<p style="font-size:13px; margin:0; opacity:0.8;">${t}</p>
|
|
45
45
|
</div>
|
|
46
|
-
`,Error(t)}this.videoElement=document.createElement(`video`),this.videoElement.className=`sdk-html5-video`,this.videoElement.style.width=`100%`,this.videoElement.style.height=`100%`,this.videoElement.style.display=`block`,this.videoElement.style.backgroundColor=`#000000`,this.videoElement.playsInline=!0,this.videoElement.controls=!1,this.videoElement.muted=!!this.options.muted,this.options.container.appendChild(this.videoElement),this.drm.setupWatermark(this.options.container),this.bindMediaEvents(),this.loadSource(this.options.src),this.setupBackgroundControls()}bindMediaEvents(){let e=this.videoElement;e.addEventListener(`play`,()=>{this.analytics.track(`play`,e,this.getAnalyticsPayload()),this.analytics.startHeartbeat(e,()=>this.getAnalyticsPayload(),this.options.watchProgressInterval),this.emit(`play`,null)}),e.addEventListener(`pause`,()=>{this.clearStallWatchdog(),this.analytics.track(`pause`,e,this.getAnalyticsPayload()),this.analytics.stopHeartbeat(),this.emit(`pause`,null)}),e.addEventListener(`progress`,()=>{this.progressTick++}),e.addEventListener(`timeupdate`,()=>{let t=e.currentTime;if(e.seeking||(this.lastPlaybackPos=t),this.chapters.updateTime(t),this.refreshAdBreakState(t),this.isAdBreak)this.subtitles.setCustomSubtitleText(``);else if(this.subtitles.updateTime(this.videoTimeToContentTime(t)),this.hlsActiveSubtitleKey!==null){let e=(this.hlsSubtitleCues.get(this.hlsActiveSubtitleKey)??[]).filter(e=>t>=e.startTime&&t<e.endTime);this.subtitles.setCustomSubtitleText(e.map(e=>e.text).join(`<br />`))}this.emit(`timeupdate`,t)}),e.addEventListener(`seeking`,()=>{let t=this.lastPlaybackPos,n=e.currentTime,r=this.pendingSeekAttribution&&Date.now()<this.pendingSeekAttribution.expiresAt?this.pendingSeekAttribution:null;this.pendingSeekAttribution=null,r?this.analytics.track(r.eventType,e,{...this.getAnalyticsPayload(),...r.extras}):this.analytics.track(`seek`,e,{...this.getAnalyticsPayload(),seekFrom:t,seekTo:n}),this.lastPlaybackPos=n,this.emit(`seeking`,e.currentTime)}),e.addEventListener(`waiting`,()=>{this.isBuffering=!0,this.armStallWatchdog(),this.analytics.setBuffering(!0,e,()=>this.getAnalyticsPayload()),this.emit(`buffering`,!0)}),e.addEventListener(`playing`,()=>{this.isBuffering=!1,this.clearStallWatchdog(),this.analytics.setBuffering(!1,e,()=>this.getAnalyticsPayload()),this.emit(`buffering`,!1)}),e.addEventListener(`volumechange`,()=>{this.analytics.track(`volume_change`,e,this.getAnalyticsPayload()),this.emit(`volumechange`,{volume:e.volume,muted:e.muted})}),e.addEventListener(`ratechange`,()=>{this.analytics.track(`speed_change`,e,this.getAnalyticsPayload()),this.emit(`ratechange`,e.playbackRate)}),e.addEventListener(`ended`,()=>{this.refreshAdBreakState(1/0),this.analytics.track(`ended`,e,this.getAnalyticsPayload()),this.analytics.track(`complete`,e,{...this.getAnalyticsPayload(),watchPercentage:100}),this.analytics.stopHeartbeat(),this.emit(`ended`,null)}),e.addEventListener(`enterpictureinpicture`,()=>{this.analytics.track(`pip_toggle`,e,{...this.getAnalyticsPayload(),errorMessage:`entered`}),this.emit(`pipchange`,!0)}),e.addEventListener(`leavepictureinpicture`,()=>{this.analytics.track(`pip_toggle`,e,{...this.getAnalyticsPayload(),errorMessage:`exited`}),this.emit(`pipchange`,!1)}),e.addEventListener(`error`,()=>{let t=e.error;this.analytics.track(`error`,e,{...this.getAnalyticsPayload(),errorMessage:t?`${t.code}: ${t.message}`:`Unknown HTML5 video playback error`,errorCode:t?.code,isRecoverable:!1}),this.fail(t instanceof Error?t:Error(t?`${t.code}: ${t.message}`:`Unknown HTML5 video playback error`))});let t=e.textTracks;if(t){let n=(e,t)=>{if(e.kind!==`subtitles`&&e.kind!==`captions`||this.subtitles.getTracks().some(e=>e.isNative&&e.nativeTrackIndex===t))return;let n=e.kind===`captions`;this.subtitles.addTrack({id:`native-${t}`,label:e.label||e.language||(n?`CC ${t+1}`:`Track ${t+1}`),lang:e.language||`und`,isDefault:!this.hlsInstance&&(e.default||e.mode===`showing`),isNative:!0,nativeTrackIndex:t})};e.addEventListener(`loadedmetadata`,()=>{this.analytics.track(`video_loaded`,e,this.getAnalyticsPayload()),this.refreshAdBreakState(e.currentTime);let r=0,i=this.hlsInstance?[`captions`]:[`subtitles`,`captions`];for(let e=0;e<t.length;e++){if(!i.includes(t[e].kind))continue;let a=this.subtitles.getTracks().length;n(t[e],e),this.subtitles.getTracks().length>a&&r++}r>0&&this.emit(`subtitlesloaded`,this.subtitles.getTracks())}),t.addEventListener(`addtrack`,e=>{let r=e.track;if(r)for(let e=0;e<t.length;e++){if(t[e]!==r)continue;let i=this.subtitles.getTracks().length;n(r,e),this.subtitles.getTracks().length>i&&this.emit(`subtitlesloaded`,this.subtitles.getTracks());break}})}this.subtitles.onTrackSwitch(e=>{if(this.analytics.track(`subtitle_change`,this.videoElement,{...this.getAnalyticsPayload(),subtitleEnabled:e!==null,subtitleLanguage:e?.lang??``}),e===null||!e.isHls&&!e.isNative){if(this.hlsInstance)this.hlsInstance.subtitleTrack=-1;else if(t){for(let e=0;e<t.length;e++)t[e].mode=`disabled`,t[e].oncuechange=null;this.subtitles.setCustomSubtitleText(``)}}else if(e.isHls)this.hlsInstance&&e.hlsTrackId!==void 0&&(this.hlsInstance.subtitleTrack=e.hlsTrackId);else if(e.isNative&&t&&e.nativeTrackIndex!==void 0&&t[e.nativeTrackIndex])for(let n=0;n<t.length;n++)if(t[n].oncuechange=null,n===e.nativeTrackIndex){t[n].mode=`hidden`;let e=t[n];e.oncuechange=()=>{if(this.isAdBreak){this.subtitles.setCustomSubtitleText(``);return}let t=e.activeCues;if(t&&t.length>0){let e=Array.from(t).map(e=>e.text).join(`<br />`);this.subtitles.setCustomSubtitleText(e)}else this.subtitles.setCustomSubtitleText(``)}}else t[n].mode=`disabled`})}rewriteToProxy(e){return this.options.urlTransformer?this.options.urlTransformer(e):e}async loadSource(t){this.armStallWatchdog(),this.adBreaksFromAvails=!1,this.extractKeyMomentsFromManifest(t),this.extractAdBreaksFromManifest(t),this.extractSubtitlesFromManifest(t);let n=this.rewriteToProxy(t),r=n.endsWith(`.m3u8`)||n.includes(`.m3u8`),i=n.endsWith(`.mpd`)||n.includes(`.mpd`);if(r)if($.isSupported()){let r=new $({enableWorker:!0,lowLatencyMode:!0,backBufferLength:90,maxMaxBufferLength:30,renderTextTracksNatively:!1,xhrSetup:(e,n)=>{let r=this.drm.getAuthToken();if(!r)try{let e=new URL(t),n=e.searchParams.get(`token`)||e.searchParams.get(`key`)||e.searchParams.get(`auth`)||e.searchParams.get(`authToken`);n&&(r=n)}catch{}let i=this.drm.getAuthHeader();try{let t=this.rewriteToProxy(n),a=new URL(t,window.location.origin);r&&(i?e.setRequestHeader(i,r):a.searchParams.set(`token`,r)),e.open(`GET`,a.toString(),!0)}catch(e){console.error(`[PlayerSDK Core] Error in xhrSetup URL parsing:`,e)}}});this.hlsInstance=r,r.loadSource(n),r.attachMedia(this.videoElement),r.on($.Events.LEVEL_LOADED,(e,t)=>{if(this.adBreaksFromAvails)return;let n=this.parseAdBreaksFromFragments(t.details.fragments);this.sameAdBreaks(n,this.adBreaks)||(this.adBreaks=n,this.analytics.setAdBreaks(n),this.emit(`adbreaksloaded`,n),this.refreshAdBreakState(this.videoElement.currentTime))}),r.on($.Events.SUBTITLE_TRACKS_UPDATED,()=>{if(r.subtitleTracks.length===0)return;let e=r.subtitleTracks.map((e,t)=>({id:`subtitle-hls-${t}`,label:e.name||e.lang||`Track ${t+1}`,lang:e.lang||`und`,isDefault:!!e.default,isHls:!0,hlsTrackId:t}));this.subtitles.setHlsTracks(e),this.emit(`subtitlesloaded`,this.subtitles.getTracks())}),r.on($.Events.SUBTITLE_TRACK_SWITCH,(e,t)=>{if(this.hlsActiveSubtitleKey=null,this.subtitles.setCustomSubtitleText(``),t.id!==-1){let e=r.subtitleTracks[t.id];this.hlsActiveSubtitleKey=e?.default?`default`:`subtitles${t.id}`}}),r.on($.Events.CUES_PARSED,(e,t)=>{let n=this.hlsSubtitleCues.get(t.track)??[],r=t.cues.filter(e=>!n.some(t=>t.startTime===e.startTime&&t.endTime===e.endTime));r.length>0&&this.hlsSubtitleCues.set(t.track,[...n,...r])}),r.on($.Events.FRAG_LOADED,()=>{this.networkErrorRetries=0,this.mediaErrorRecovered=!1,this.progressTick++}),r.on($.Events.MANIFEST_LOADED,()=>{this.progressTick++}),r.on($.Events.LEVEL_LOADED,()=>{this.progressTick++}),r.on($.Events.MANIFEST_PARSED,()=>{this.qualityLevels=r.levels.map((e,t)=>({id:t,height:e.height,width:e.width,bitrate:e.bitrate,label:e.height?`${e.height}p`:`Option ${t+1}`}));let e={id:-1,height:0,width:0,bitrate:0,label:`Auto`};this.qualityLevels.unshift(e),this.activeQuality=e,this.emit(`qualitylevels`,this.qualityLevels),r.levels.length>0&&!this.hasPlayableLevel(r.levels)&&this.emit(`unsupportedcodec`,null),this.options.autoplay&&this.play()}),r.on($.Events.AUDIO_TRACKS_UPDATED,()=>{r.audioTracks.length>1&&(this.audioTrackList=r.audioTracks.map((e,t)=>({id:t,label:e.name||e.lang||`Audio ${t+1}`,lang:e.lang||``})),this.emit(`audiotracksloaded`,this.audioTrackList))}),r.on($.Events.AUDIO_TRACK_SWITCHED,(e,t)=>{let n=this.audioTrackList.find(e=>e.id===t.id);this.analytics.track(`audio_track_change`,this.videoElement,{...this.getAnalyticsPayload(),audioTrack:n?.label??``}),this.emit(`audiotrackchange`,t.id)}),r.on($.Events.LEVEL_SWITCHED,(e,t)=>{let n=this.qualityLevels.find(e=>e.id===t.level);n&&(this.analytics.track(`quality_change`,this.videoElement,{...this.getAnalyticsPayload(),rendition:n.label,bitrate:n.bitrate,isAutoSwitch:r.autoLevelEnabled}),this.emit(`qualitychange`,n))}),r.on($.Events.ERROR,(t,n)=>{let i=n.response?.code;if(i&&e.TERMINAL_HTTP_STATUSES.includes(i)){this.analytics.track(`network_error`,this.videoElement,{...this.getAnalyticsPayload(),errorMessage:n.details,errorCode:i,isRecoverable:!1}),this.fail(Error(`Network error ${i}: ${n.details}`));return}n.fatal&&(n.type===$.ErrorTypes.NETWORK_ERROR?(this.analytics.track(`network_error`,this.videoElement,{...this.getAnalyticsPayload(),errorMessage:n.details,errorCode:i??0,isRecoverable:this.networkErrorRetries<e.MAX_NETWORK_RETRIES}),this.networkErrorRetries<e.MAX_NETWORK_RETRIES?(this.networkErrorRetries++,r.startLoad()):this.fail(Error(`Network error: ${n.details}`))):n.type===$.ErrorTypes.MEDIA_ERROR?this.mediaErrorRecovered?this.fail(Error(`Media error: ${n.details}`)):(this.mediaErrorRecovered=!0,r.recoverMediaError()):this.fail(Error(`Playback error: ${n.details}`)))})}else this.videoElement.canPlayType(`application/vnd.apple.mpegurl`)&&(this.videoElement.src=t,this.qualityLevels=[{id:0,height:720,width:1280,bitrate:2e6,label:`720p (Native)`}],this.activeQuality=this.qualityLevels[0],this.options.autoplay&&this.videoElement.play().catch(console.error));else if(i){let e=await Promise.resolve().then(()=>require("./dash.all.min-CkVT4O2X.cjs")).catch(()=>null);if(!e){console.error(`[SDK] dashjs not installed — install it to use DASH streams`);return}let n=e.MediaPlayer().create();this.dashInstance=n,n.initialize(this.videoElement,t,!!this.options.autoplay),n.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:!0,audio:!0}},buffer:{bufferTimeAtTopQuality:30}}}),this.qualityLevels=[{id:0,height:0,width:0,bitrate:0,label:`Auto (DASH)`}],this.activeQuality=this.qualityLevels[0],this.emit(`qualitylevels`,this.qualityLevels)}else this.videoElement.src=t,this.qualityLevels=[{id:0,height:1080,width:1920,bitrate:45e5,label:`1080p (Source)`}],this.activeQuality=this.qualityLevels[0],this.options.autoplay&&this.videoElement.play().catch(console.error)}setupBackgroundControls(){if(`mediaSession`in navigator){navigator.mediaSession.metadata=new MediaMetadata({title:`Video Player`,album:`Video Player`,artwork:[{src:`https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=512&q=80`,sizes:`512x512`,type:`image/jpeg`}]});try{navigator.mediaSession.setActionHandler(`play`,()=>this.play()),navigator.mediaSession.setActionHandler(`pause`,()=>this.pause()),navigator.mediaSession.setActionHandler(`seekbackward`,e=>{let t=e.seekOffset||10;this.attributeNextSeek(`fast_backward`,{skipSeconds:t}),this.seek(this.videoElement.currentTime-t)}),navigator.mediaSession.setActionHandler(`seekforward`,e=>{let t=e.seekOffset||10;this.attributeNextSeek(`fast_forward`,{skipSeconds:t}),this.seek(this.videoElement.currentTime+t)})}catch{console.warn(`[PlayerSDK Session] Action handler binding is unsupported by browser.`)}}}play(){this.videoElement.play().catch(e=>{console.warn(`[PlayerSDK Play] Autoplay blocked, wait for user interaction:`,e)})}pause(){this.videoElement.pause()}seek(e){let t=Math.max(0,Math.min(e,this.getDuration()));this.videoElement.currentTime=t}attributeNextSeek(e,t={}){this.pendingSeekAttribution={eventType:e,extras:t,expiresAt:Date.now()+1500}}setVolume(e){let t=Math.max(0,Math.min(e,1));this.videoElement.volume=t,this.videoElement.muted=t===0}setMute(e){this.videoElement.muted!==e&&this.analytics.track(`mute`,this.videoElement,{...this.getAnalyticsPayload(),isMuted:e}),this.videoElement.muted=e}setPlaybackRate(e){this.contentPlaybackRate=e,this.isAdBreak||(this.videoElement.playbackRate=e)}setQuality(e){let t=this.qualityLevels.find(t=>t.id===e);t&&(this.activeQuality=t,this.hlsInstance?this.hlsInstance.currentLevel=e:console.warn(`[PlayerSDK Core] Manual rendition switching is not supported by standard native players.`))}async togglePictureInPicture(){if(!document.pictureInPictureEnabled)return console.warn(`[PlayerSDK Core] Picture-in-Picture is disabled or unsupported.`),!1;try{return document.pictureInPictureElement?(await document.exitPictureInPicture(),!1):(await this.videoElement.requestPictureInPicture(),!0)}catch(e){return console.error(`[PlayerSDK Core] PiP toggle failed:`,e),!1}}toggleFullscreen(){let e=this.options.container;document.fullscreenElement?document.exitFullscreen():e.requestFullscreen().catch(e=>{console.error(`[PlayerSDK Fullscreen] Failed entering fullscreen:`,e)})}getVideoElement(){return this.videoElement}getCurrentTime(){return this.videoElement.currentTime}getDuration(){return this.videoElement.duration||0}getVolume(){return this.videoElement.volume}isMuted(){return this.videoElement.muted}getPlaybackRate(){return this.videoElement.playbackRate}getActiveQuality(){return this.activeQuality}getQualityLevels(){return this.qualityLevels}getBufferLength(){let e=this.videoElement.buffered,t=this.videoElement.currentTime;for(let n=0;n<e.length;n++)if(t>=e.start(n)&&t<=e.end(n))return e.end(n)-t;return 0}getBufferedRanges(){let e=this.videoElement.buffered,t=[];for(let n=0;n<e.length;n++)t.push({start:e.start(n),end:e.end(n)});return t}hasPlayableLevel(e){if(typeof MediaSource>`u`||!MediaSource.isTypeSupported)return!0;let t=(e,t)=>{if(!t)return!0;try{return MediaSource.isTypeSupported(`${e}; codecs="${t}"`)}catch{return!0}};return e.some(e=>t(`video/mp4`,e.videoCodec)&&t(`audio/mp4`,e.audioCodec))}getAnalyticsPayload(){return{rendition:this.activeQuality.label,bitrate:this.activeQuality.bitrate,volume:this.videoElement.volume,speed:this.videoElement.playbackRate}}on(e,t){this.eventListeners[e]||(this.eventListeners[e]=[]),this.eventListeners[e].push(t)}off(e,t){this.eventListeners[e]&&(this.eventListeners[e]=this.eventListeners[e].filter(e=>e!==t))}emit(e,...t){this.eventListeners[e]&&this.eventListeners[e].forEach(e=>e(...t))}async extractSubtitlesFromManifest(e){try{let t=await this.buildManifestUrl(e),n=await fetch(t,{headers:this.drm.getRequestHeaders()});if(!n.ok)return;let r=(await n.text()).split(`
|
|
46
|
+
`,Error(t)}this.videoElement=document.createElement(`video`),this.videoElement.className=`sdk-html5-video`,this.videoElement.style.width=`100%`,this.videoElement.style.height=`100%`,this.videoElement.style.display=`block`,this.videoElement.style.backgroundColor=`#000000`,this.videoElement.playsInline=!0,this.videoElement.controls=!1,this.videoElement.muted=!!this.options.muted,this.options.container.appendChild(this.videoElement),this.drm.setupWatermark(this.options.container),this.bindMediaEvents(),this.loadSource(this.options.src),this.setupBackgroundControls()}bindMediaEvents(){let e=this.videoElement;e.addEventListener(`play`,()=>{this.analytics.track(`play`,e,this.getAnalyticsPayload()),this.analytics.startHeartbeat(e,()=>this.getAnalyticsPayload(),this.options.watchProgressInterval),this.emit(`play`,null)}),e.addEventListener(`pause`,()=>{this.clearStallWatchdog(),this.analytics.track(`pause`,e,this.getAnalyticsPayload()),this.analytics.stopHeartbeat(),this.emit(`pause`,null)}),e.addEventListener(`progress`,()=>{this.progressTick++}),e.addEventListener(`timeupdate`,()=>{let t=e.currentTime;if(e.seeking||(this.lastPlaybackPos=t),this.chapters.updateTime(t),this.refreshAdBreakState(t),this.isAdBreak)this.subtitles.setCustomSubtitleText(``);else if(this.subtitles.updateTime(this.videoTimeToContentTime(t)),this.hlsActiveSubtitleKey!==null){let e=(this.hlsSubtitleCues.get(this.hlsActiveSubtitleKey)??[]).filter(e=>t>=e.startTime&&t<e.endTime);this.subtitles.setCustomSubtitleText(e.map(e=>e.text).join(`<br />`))}this.emit(`timeupdate`,t)}),e.addEventListener(`seeking`,()=>{let t=this.lastPlaybackPos,n=e.currentTime,r=this.pendingSeekAttribution&&Date.now()<this.pendingSeekAttribution.expiresAt?this.pendingSeekAttribution:null;this.pendingSeekAttribution=null,r?this.analytics.track(r.eventType,e,{...this.getAnalyticsPayload(),...r.extras}):this.analytics.track(`seek`,e,{...this.getAnalyticsPayload(),seekFrom:t,seekTo:n}),this.lastPlaybackPos=n,this.emit(`seeking`,e.currentTime)}),e.addEventListener(`waiting`,()=>{this.isBuffering=!0,this.armStallWatchdog(),this.analytics.setBuffering(!0,e,()=>this.getAnalyticsPayload()),this.emit(`buffering`,!0)}),e.addEventListener(`playing`,()=>{this.isBuffering=!1,this.clearStallWatchdog(),this.analytics.setBuffering(!1,e,()=>this.getAnalyticsPayload()),this.emit(`buffering`,!1)}),e.addEventListener(`volumechange`,()=>{this.analytics.track(`volume_change`,e,this.getAnalyticsPayload()),this.emit(`volumechange`,{volume:e.volume,muted:e.muted})}),e.addEventListener(`ratechange`,()=>{this.analytics.track(`speed_change`,e,this.getAnalyticsPayload()),this.emit(`ratechange`,e.playbackRate)}),e.addEventListener(`ended`,()=>{this.refreshAdBreakState(1/0),this.analytics.track(`ended`,e,this.getAnalyticsPayload()),this.analytics.track(`complete`,e,{...this.getAnalyticsPayload(),watchPercentage:100}),this.analytics.stopHeartbeat(),this.emit(`ended`,null)}),e.addEventListener(`enterpictureinpicture`,()=>{this.analytics.track(`pip_toggle`,e,{...this.getAnalyticsPayload(),errorMessage:`entered`}),this.emit(`pipchange`,!0)}),e.addEventListener(`leavepictureinpicture`,()=>{this.analytics.track(`pip_toggle`,e,{...this.getAnalyticsPayload(),errorMessage:`exited`}),this.emit(`pipchange`,!1)}),e.addEventListener(`error`,()=>{let t=e.error;this.analytics.track(`error`,e,{...this.getAnalyticsPayload(),errorMessage:t?`${t.code}: ${t.message}`:`Unknown HTML5 video playback error`,errorCode:t?.code,isRecoverable:!1}),this.fail(t instanceof Error?t:Error(t?`${t.code}: ${t.message}`:`Unknown HTML5 video playback error`))});let t=e.textTracks;if(t){let n=(e,t)=>{if(e.kind!==`subtitles`&&e.kind!==`captions`||this.subtitles.getTracks().some(e=>e.isNative&&e.nativeTrackIndex===t))return;let n=e.kind===`captions`;this.subtitles.addTrack({id:`native-${t}`,label:e.label||e.language||(n?`CC ${t+1}`:`Track ${t+1}`),lang:e.language||`und`,isDefault:!this.hlsInstance&&(e.default||e.mode===`showing`),isNative:!0,nativeTrackIndex:t})};e.addEventListener(`loadedmetadata`,()=>{this.analytics.track(`video_loaded`,e,this.getAnalyticsPayload()),this.refreshAdBreakState(e.currentTime);let r=0,i=this.hlsInstance?[`captions`]:[`subtitles`,`captions`];for(let e=0;e<t.length;e++){if(!i.includes(t[e].kind))continue;let a=this.subtitles.getTracks().length;n(t[e],e),this.subtitles.getTracks().length>a&&r++}r>0&&this.emit(`subtitlesloaded`,this.subtitles.getTracks())}),t.addEventListener(`addtrack`,e=>{let r=e.track;if(r)for(let e=0;e<t.length;e++){if(t[e]!==r)continue;let i=this.subtitles.getTracks().length;n(r,e),this.subtitles.getTracks().length>i&&this.emit(`subtitlesloaded`,this.subtitles.getTracks());break}})}this.subtitles.onTrackSwitch(e=>{if(this.analytics.track(`subtitle_change`,this.videoElement,{...this.getAnalyticsPayload(),subtitleEnabled:e!==null,subtitleLanguage:e?.lang??``}),e===null||!e.isHls&&!e.isNative){if(this.hlsInstance)this.hlsInstance.subtitleTrack=-1;else if(t){for(let e=0;e<t.length;e++)t[e].mode=`disabled`,t[e].oncuechange=null;this.subtitles.setCustomSubtitleText(``)}}else if(e.isHls)this.hlsInstance&&e.hlsTrackId!==void 0&&(this.hlsInstance.subtitleTrack=e.hlsTrackId);else if(e.isNative&&t&&e.nativeTrackIndex!==void 0&&t[e.nativeTrackIndex])for(let n=0;n<t.length;n++)if(t[n].oncuechange=null,n===e.nativeTrackIndex){t[n].mode=`hidden`;let e=t[n];e.oncuechange=()=>{if(this.isAdBreak){this.subtitles.setCustomSubtitleText(``);return}let t=e.activeCues;if(t&&t.length>0){let e=Array.from(t).map(e=>e.text).join(`<br />`);this.subtitles.setCustomSubtitleText(e)}else this.subtitles.setCustomSubtitleText(``)}}else t[n].mode=`disabled`})}rewriteToProxy(e){return this.options.urlTransformer?this.options.urlTransformer(e):e}async loadSource(t){this.armStallWatchdog(),this.adBreaksFromAvails=!1,this.extractKeyMomentsFromManifest(t),this.extractAdBreaksFromManifest(t),this.extractSubtitlesFromManifest(t);let n=this.rewriteToProxy(t),r=n.endsWith(`.m3u8`)||n.includes(`.m3u8`),i=n.endsWith(`.mpd`)||n.includes(`.mpd`);if(r)if($.isSupported()){let r=new $({enableWorker:!0,lowLatencyMode:!0,backBufferLength:90,maxMaxBufferLength:600,renderTextTracksNatively:!1,xhrSetup:(e,n)=>{let r=this.drm.getAuthToken();if(!r)try{let e=new URL(t),n=e.searchParams.get(`token`)||e.searchParams.get(`key`)||e.searchParams.get(`auth`)||e.searchParams.get(`authToken`);n&&(r=n)}catch{}let i=this.drm.getAuthHeader();try{let t=this.rewriteToProxy(n),a=new URL(t,window.location.origin);r&&(i?e.setRequestHeader(i,r):a.searchParams.set(`token`,r)),e.open(`GET`,a.toString(),!0)}catch(e){console.error(`[PlayerSDK Core] Error in xhrSetup URL parsing:`,e)}}});this.hlsInstance=r,r.loadSource(n),r.attachMedia(this.videoElement),r.on($.Events.LEVEL_LOADED,(e,t)=>{if(this.adBreaksFromAvails)return;let n=this.parseAdBreaksFromFragments(t.details.fragments);this.sameAdBreaks(n,this.adBreaks)||(this.adBreaks=n,this.analytics.setAdBreaks(n),this.emit(`adbreaksloaded`,n),this.refreshAdBreakState(this.videoElement.currentTime))}),r.on($.Events.SUBTITLE_TRACKS_UPDATED,()=>{if(r.subtitleTracks.length===0)return;let e=r.subtitleTracks.map((e,t)=>({id:`subtitle-hls-${t}`,label:e.name||e.lang||`Track ${t+1}`,lang:e.lang||`und`,isDefault:!!e.default,isHls:!0,hlsTrackId:t}));this.subtitles.setHlsTracks(e),this.emit(`subtitlesloaded`,this.subtitles.getTracks())}),r.on($.Events.SUBTITLE_TRACK_SWITCH,(e,t)=>{if(this.hlsActiveSubtitleKey=null,this.subtitles.setCustomSubtitleText(``),t.id!==-1){let e=r.subtitleTracks[t.id];this.hlsActiveSubtitleKey=e?.default?`default`:`subtitles${t.id}`}}),r.on($.Events.CUES_PARSED,(e,t)=>{let n=this.hlsSubtitleCues.get(t.track)??[],r=t.cues.filter(e=>!n.some(t=>t.startTime===e.startTime&&t.endTime===e.endTime));r.length>0&&this.hlsSubtitleCues.set(t.track,[...n,...r])}),r.on($.Events.FRAG_LOADED,()=>{this.networkErrorRetries=0,this.mediaErrorRecovered=!1,this.progressTick++}),r.on($.Events.MANIFEST_LOADED,()=>{this.progressTick++}),r.on($.Events.LEVEL_LOADED,()=>{this.progressTick++}),r.on($.Events.MANIFEST_PARSED,()=>{this.qualityLevels=r.levels.map((e,t)=>({id:t,height:e.height,width:e.width,bitrate:e.bitrate,label:e.height?`${e.height}p`:`Option ${t+1}`}));let e={id:-1,height:0,width:0,bitrate:0,label:`Auto`};this.qualityLevels.unshift(e),this.activeQuality=e,this.emit(`qualitylevels`,this.qualityLevels),r.levels.length>0&&!this.hasPlayableLevel(r.levels)&&this.emit(`unsupportedcodec`,null),this.options.autoplay&&this.play()}),r.on($.Events.AUDIO_TRACKS_UPDATED,()=>{r.audioTracks.length>1&&(this.audioTrackList=r.audioTracks.map((e,t)=>({id:t,label:e.name||e.lang||`Audio ${t+1}`,lang:e.lang||``})),this.emit(`audiotracksloaded`,this.audioTrackList))}),r.on($.Events.AUDIO_TRACK_SWITCHED,(e,t)=>{let n=this.audioTrackList.find(e=>e.id===t.id);this.analytics.track(`audio_track_change`,this.videoElement,{...this.getAnalyticsPayload(),audioTrack:n?.label??``}),this.emit(`audiotrackchange`,t.id)}),r.on($.Events.LEVEL_SWITCHED,(e,t)=>{let n=this.qualityLevels.find(e=>e.id===t.level);n&&(this.analytics.track(`quality_change`,this.videoElement,{...this.getAnalyticsPayload(),rendition:n.label,bitrate:n.bitrate,isAutoSwitch:r.autoLevelEnabled}),this.emit(`qualitychange`,n))}),r.on($.Events.ERROR,(t,n)=>{let i=n.response?.code;if(i&&e.TERMINAL_HTTP_STATUSES.includes(i)){this.analytics.track(`network_error`,this.videoElement,{...this.getAnalyticsPayload(),errorMessage:n.details,errorCode:i,isRecoverable:!1}),this.fail(Error(`Network error ${i}: ${n.details}`));return}n.fatal&&(n.type===$.ErrorTypes.NETWORK_ERROR?(this.analytics.track(`network_error`,this.videoElement,{...this.getAnalyticsPayload(),errorMessage:n.details,errorCode:i??0,isRecoverable:this.networkErrorRetries<e.MAX_NETWORK_RETRIES}),this.networkErrorRetries<e.MAX_NETWORK_RETRIES?(this.networkErrorRetries++,r.startLoad()):this.fail(Error(`Network error: ${n.details}`))):n.type===$.ErrorTypes.MEDIA_ERROR?this.mediaErrorRecovered?this.fail(Error(`Media error: ${n.details}`)):(this.mediaErrorRecovered=!0,r.recoverMediaError()):this.fail(Error(`Playback error: ${n.details}`)))})}else this.videoElement.canPlayType(`application/vnd.apple.mpegurl`)&&(this.videoElement.src=t,this.qualityLevels=[{id:0,height:720,width:1280,bitrate:2e6,label:`720p (Native)`}],this.activeQuality=this.qualityLevels[0],this.options.autoplay&&this.videoElement.play().catch(console.error));else if(i){let e=await Promise.resolve().then(()=>require("./dash.all.min-CkVT4O2X.cjs")).catch(()=>null);if(!e){console.error(`[SDK] dashjs not installed — install it to use DASH streams`);return}let n=e.MediaPlayer().create();this.dashInstance=n,n.initialize(this.videoElement,t,!!this.options.autoplay),n.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:!0,audio:!0}},buffer:{bufferTimeAtTopQuality:30}}}),this.qualityLevels=[{id:0,height:0,width:0,bitrate:0,label:`Auto (DASH)`}],this.activeQuality=this.qualityLevels[0],this.emit(`qualitylevels`,this.qualityLevels)}else this.videoElement.src=t,this.qualityLevels=[{id:0,height:1080,width:1920,bitrate:45e5,label:`1080p (Source)`}],this.activeQuality=this.qualityLevels[0],this.options.autoplay&&this.videoElement.play().catch(console.error)}setupBackgroundControls(){if(`mediaSession`in navigator){navigator.mediaSession.metadata=new MediaMetadata({title:`Video Player`,album:`Video Player`,artwork:[{src:`https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=512&q=80`,sizes:`512x512`,type:`image/jpeg`}]});try{navigator.mediaSession.setActionHandler(`play`,()=>this.play()),navigator.mediaSession.setActionHandler(`pause`,()=>this.pause()),navigator.mediaSession.setActionHandler(`seekbackward`,e=>{let t=e.seekOffset||10;this.attributeNextSeek(`fast_backward`,{skipSeconds:t}),this.seek(this.videoElement.currentTime-t)}),navigator.mediaSession.setActionHandler(`seekforward`,e=>{let t=e.seekOffset||10;this.attributeNextSeek(`fast_forward`,{skipSeconds:t}),this.seek(this.videoElement.currentTime+t)})}catch{console.warn(`[PlayerSDK Session] Action handler binding is unsupported by browser.`)}}}play(){this.videoElement.play().catch(e=>{console.warn(`[PlayerSDK Play] Autoplay blocked, wait for user interaction:`,e)})}pause(){this.videoElement.pause()}seek(e){let t=Math.max(0,Math.min(e,this.getDuration()));this.videoElement.currentTime=t}attributeNextSeek(e,t={}){this.pendingSeekAttribution={eventType:e,extras:t,expiresAt:Date.now()+1500}}setVolume(e){let t=Math.max(0,Math.min(e,1));this.videoElement.volume=t,this.videoElement.muted=t===0}setMute(e){this.videoElement.muted!==e&&this.analytics.track(`mute`,this.videoElement,{...this.getAnalyticsPayload(),isMuted:e}),this.videoElement.muted=e}setPlaybackRate(e){this.contentPlaybackRate=e,this.isAdBreak||(this.videoElement.playbackRate=e)}setQuality(e){let t=this.qualityLevels.find(t=>t.id===e);t&&(this.activeQuality=t,this.hlsInstance?this.hlsInstance.currentLevel=e:console.warn(`[PlayerSDK Core] Manual rendition switching is not supported by standard native players.`))}async togglePictureInPicture(){if(!document.pictureInPictureEnabled)return console.warn(`[PlayerSDK Core] Picture-in-Picture is disabled or unsupported.`),!1;try{return document.pictureInPictureElement?(await document.exitPictureInPicture(),!1):(await this.videoElement.requestPictureInPicture(),!0)}catch(e){return console.error(`[PlayerSDK Core] PiP toggle failed:`,e),!1}}toggleFullscreen(){let e=this.options.container;document.fullscreenElement?document.exitFullscreen():e.requestFullscreen().catch(e=>{console.error(`[PlayerSDK Fullscreen] Failed entering fullscreen:`,e)})}getVideoElement(){return this.videoElement}getCurrentTime(){return this.videoElement.currentTime}getDuration(){return this.videoElement.duration||0}getVolume(){return this.videoElement.volume}isMuted(){return this.videoElement.muted}getPlaybackRate(){return this.videoElement.playbackRate}getActiveQuality(){return this.activeQuality}getQualityLevels(){return this.qualityLevels}getBufferLength(){let e=this.videoElement.buffered,t=this.videoElement.currentTime;for(let n=0;n<e.length;n++)if(t>=e.start(n)&&t<=e.end(n))return e.end(n)-t;return 0}getBufferedRanges(){let e=this.videoElement.buffered,t=[];for(let n=0;n<e.length;n++)t.push({start:e.start(n),end:e.end(n)});return t}hasPlayableLevel(e){if(typeof MediaSource>`u`||!MediaSource.isTypeSupported)return!0;let t=(e,t)=>{if(!t)return!0;try{return MediaSource.isTypeSupported(`${e}; codecs="${t}"`)}catch{return!0}};return e.some(e=>t(`video/mp4`,e.videoCodec)&&t(`audio/mp4`,e.audioCodec))}getAnalyticsPayload(){return{rendition:this.activeQuality.label,bitrate:this.activeQuality.bitrate,volume:this.videoElement.volume,speed:this.videoElement.playbackRate}}on(e,t){this.eventListeners[e]||(this.eventListeners[e]=[]),this.eventListeners[e].push(t)}off(e,t){this.eventListeners[e]&&(this.eventListeners[e]=this.eventListeners[e].filter(e=>e!==t))}emit(e,...t){this.eventListeners[e]&&this.eventListeners[e].forEach(e=>e(...t))}async extractSubtitlesFromManifest(e){try{let t=await this.buildManifestUrl(e),n=await fetch(t,{headers:this.drm.getRequestHeaders()});if(!n.ok)return;let r=(await n.text()).split(`
|
|
47
47
|
`),i=this.drm.getAuthToken()||void 0;if(!i)try{let t=new URL(e);i=t.searchParams.get(`token`)||t.searchParams.get(`key`)||t.searchParams.get(`auth`)||t.searchParams.get(`authToken`)||void 0}catch{}let a=e.substring(0,e.lastIndexOf(`/`)+1),o=e.includes(`.m3u8`)&&$.isSupported(),s=[];for(let e of r){if(!e.startsWith(`#EXT-X-MEDIA:`)||!/[,:]TYPE=SUBTITLES\b/i.test(e))continue;let t=e.match(/NAME="([^"]+)"/),n=e.match(/LANGUAGE="([^"]+)"/),r=e.match(/URI="([^"]+)"/),c=/DEFAULT=YES/i.test(e);if(!r)continue;let l=r[1],u=s.length,d=t?t[1]:n?n[1]:`Track ${u+1}`,f=n?n[1]:`und`;if(/\.m3u8?(\?|$)/i.test(l)){o||s.push({id:`subtitle-${u}`,label:d,lang:f,isDefault:c,isHls:!0,hlsTrackId:u});continue}let p=l.startsWith(`http`)?l:a+l,m=this.rewriteToProxy(p);if(i)try{let e=new URL(m,window.location.origin);e.searchParams.set(`token`,i),m=e.toString()}catch{}s.push({id:`subtitle-${u}`,label:d,lang:f,isDefault:c,src:m})}s.length>0&&(this.subtitles.setHlsTracks(s),this.emit(`subtitlesloaded`,this.subtitles.getTracks()))}catch(e){console.error(`[PlayerSDK] Error extracting subtitles from manifest:`,e)}}async extractKeyMomentsFromManifest(e){try{let t=await this.buildManifestUrl(e),n=await fetch(t);if(!n.ok)return;let r=(await n.text()).split(`
|
|
48
|
-
`),i=[];for(let e of r)if(e.startsWith(`#EXT-X-DATERANGE:`)){let t=e.match(/ID="([^"]+)"/),n=e.match(/START-DATE="([^"]+)"/),r=e.match(/X-TITLE="([^"]+)"/);t&&n&&r&&(i.some(e=>e.id===t[1])||i.push({id:t[1],startDate:n[1],title:r[1]}))}if(i.length>0){i.sort((e,t)=>e.startDate.localeCompare(t.startDate));let e=new Date(i[0].startDate).getTime(),t=i.map(t=>{let n=(new Date(t.startDate).getTime()-e)/1e3;return{title:t.title,startTime:n,endTime:0}});for(let e=0;e<t.length;e++)e<t.length-1?t[e].endTime=t[e+1].startTime:t[e].endTime=99999;this.keyMoments.setKeyMoments(t),this.emit(`keymomentsloaded`,t),this.emit(`chaptersloaded`,t)}}catch(e){console.error(`Error parsing manifest key moments:`,e)}}async extractAdBreaksFromManifest(e){try{let t=await this.buildManifestUrl(e),n=await fetch(t);if(!n.ok)return;let r=await n.text(),i=r.split(/\r?\n/).map(e=>e.trim());if(i.some(e=>e.startsWith(`#EXT-X-STREAM-INF`))){let t=this.findFirstVariantUri(i);if(t){let n=this.resolveUrl(e,t),i=await this.buildManifestUrl(n),a=await fetch(i,{headers:this.drm.getRequestHeaders()});a.ok&&(r=await a.text())}}if(this.adBreaksFromAvails)return;this.adBreaks=this.parseAdBreaksFromPlaylist(r),this.analytics.setAdBreaks(this.adBreaks),this.adBreaks.length>0&&this.emit(`adbreaksloaded`,this.adBreaks),this.refreshAdBreakState(this.videoElement.currentTime)}catch(e){console.error(`Error parsing manifest ad breaks:`,e)}}async buildManifestUrl(e){let t=this.drm.getAuthToken()||void 0;if(!t)try{let n=new URL(e);t=n.searchParams.get(`token`)||n.searchParams.get(`key`)||n.searchParams.get(`auth`)||n.searchParams.get(`authToken`)||void 0}catch{}let n=this.rewriteToProxy(e);try{let e=new URL(n,window.location.origin);return t&&e.searchParams.set(`token`,t),e.toString()}catch{return n}}findFirstVariantUri(e){for(let t=0;t<e.length;t++)if(e[t].startsWith(`#EXT-X-STREAM-INF`)){let n=e[t+1]?.trim();if(n&&!n.startsWith(`#`))return n}return null}resolveUrl(e,t){try{return new URL(t,e).toString()}catch{return t}}static AD_HOST_PATTERNS=[/segments\.mediatailor\./i,/(^|[.-])ads?([.-]|$)/i,/(^|[.-])ad(server|serving|tech|system)/i,/doubleclick\.net$/i];static
|
|
49
|
-
//# sourceMappingURL=src-
|
|
48
|
+
`),i=[];for(let e of r)if(e.startsWith(`#EXT-X-DATERANGE:`)){let t=e.match(/ID="([^"]+)"/),n=e.match(/START-DATE="([^"]+)"/),r=e.match(/X-TITLE="([^"]+)"/);t&&n&&r&&(i.some(e=>e.id===t[1])||i.push({id:t[1],startDate:n[1],title:r[1]}))}if(i.length>0){i.sort((e,t)=>e.startDate.localeCompare(t.startDate));let e=new Date(i[0].startDate).getTime(),t=i.map(t=>{let n=(new Date(t.startDate).getTime()-e)/1e3;return{title:t.title,startTime:n,endTime:0}});for(let e=0;e<t.length;e++)e<t.length-1?t[e].endTime=t[e+1].startTime:t[e].endTime=99999;this.keyMoments.setKeyMoments(t),this.emit(`keymomentsloaded`,t),this.emit(`chaptersloaded`,t)}}catch(e){console.error(`Error parsing manifest key moments:`,e)}}async extractAdBreaksFromManifest(e){try{let t=await this.buildManifestUrl(e),n=await fetch(t);if(!n.ok)return;let r=await n.text(),i=r.split(/\r?\n/).map(e=>e.trim());if(i.some(e=>e.startsWith(`#EXT-X-STREAM-INF`))){let t=this.findFirstVariantUri(i);if(t){let n=this.resolveUrl(e,t),i=await this.buildManifestUrl(n),a=await fetch(i,{headers:this.drm.getRequestHeaders()});a.ok&&(r=await a.text())}}if(this.adBreaksFromAvails)return;this.adBreaks=this.parseAdBreaksFromPlaylist(r),this.analytics.setAdBreaks(this.adBreaks),this.adBreaks.length>0&&this.emit(`adbreaksloaded`,this.adBreaks),this.refreshAdBreakState(this.videoElement.currentTime)}catch(e){console.error(`Error parsing manifest ad breaks:`,e)}}async buildManifestUrl(e){let t=this.drm.getAuthToken()||void 0;if(!t)try{let n=new URL(e);t=n.searchParams.get(`token`)||n.searchParams.get(`key`)||n.searchParams.get(`auth`)||n.searchParams.get(`authToken`)||void 0}catch{}let n=this.rewriteToProxy(e);try{let e=new URL(n,window.location.origin);return t&&e.searchParams.set(`token`,t),e.toString()}catch{return n}}findFirstVariantUri(e){for(let t=0;t<e.length;t++)if(e[t].startsWith(`#EXT-X-STREAM-INF`)){let n=e[t+1]?.trim();if(n&&!n.startsWith(`#`))return n}return null}resolveUrl(e,t){try{return new URL(t,e).toString()}catch{return t}}static AD_HOST_PATTERNS=[/segments\.mediatailor\./i,/(^|[.-])ads?([.-]|$)/i,/(^|[.-])ad(server|serving|tech|system)/i,/doubleclick\.net$/i];static AD_STITCHER_PATH_PATTERNS=[/\/v1\/segment\//i];static AD_PATH_HINT_PATTERNS=[/\/ads?\//i,/\/creatives?\//i];parseSegmentUrl(e){try{let t=new URL(e,window.location.origin);return{host:t.host,path:t.pathname}}catch{return{host:``,path:e}}}isKnownAdSegment(t){let{host:n,path:r}=this.parseSegmentUrl(t);return e.AD_HOST_PATTERNS.some(e=>e.test(n))||e.AD_STITCHER_PATH_PATTERNS.some(e=>e.test(r))}hasAdPathHint(t){let{path:n}=this.parseSegmentUrl(t);return e.AD_PATH_HINT_PATTERNS.some(e=>e.test(n))}classifyAdGroups(e){let t=e.map(e=>this.isKnownAdSegment(e.url));if(t.some(Boolean)&&!t.every(Boolean))return e.map((e,n)=>t[n]||this.hasAdPathHint(e.url));let n=e.map(e=>this.parseSegmentUrl(e.url).host),r=n[0];return n.some(e=>e!==r)?n.map(e=>e!==r):e.map(e=>e.cc%2==1)}mergeAdjacentRanges(e){let t=[];for(let n of e){let e=t[t.length-1];e&&n.startTime-e.endTime<.5?e.endTime=Math.max(e.endTime,n.endTime):t.push({...n})}return t}parseAdBreaksFromFragments(e){if(e.length===0)return[];let t=[];for(let n of e){let e=n.cc??0,r=n.start??0,i=r+(n.duration??0),a=t[t.length-1];a&&a.cc===e?a.endTime=i:t.push({cc:e,startTime:r,endTime:i,url:n.url??n.relurl??``})}let n=this.classifyAdGroups(t);return this.mergeAdjacentRanges(t.filter((e,t)=>n[t]).map(e=>({startTime:e.startTime,endTime:e.endTime})))}parseAdBreaksFromPlaylist(e){let t=e.split(/\r?\n/).map(e=>e.trim()),n=[],r=[],i=0,a=null,o=null,s=null,c=0,l=e=>{let t=e.substring(e.indexOf(`:`)+1),n=t.match(/DURATION=([0-9.]+)/i)?.[1]??t,r=parseFloat(n);return Number.isFinite(r)?r:null};for(let e of t)if(e.startsWith(`#EXT-X-CUE-OUT`))a=i,o=l(e);else if(e.startsWith(`#EXT-X-CUE-IN`)){if(a!==null){let e=o===null?i:a+o;e>a&&n.push({startTime:a,endTime:e}),a=null,o=null}}else if(e===`#EXT-X-DISCONTINUITY`)c++;else if(e.startsWith(`#EXTINF:`)){let t=parseFloat(e.substring(8).split(`,`)[0]);Number.isFinite(t)&&(s=t)}else if(!e.startsWith(`#`)&&e.length>0){let t=i;s!==null&&(i+=s,s=null);let n=r[r.length-1];n&&n.cc===c?n.endTime=i:r.push({cc:c,startTime:t,endTime:i,url:e})}if(a!==null){let e=o===null?i:a+o;e>a&&n.push({startTime:a,endTime:e})}if(n.length>0)return this.mergeAdjacentRanges(n);if(r.length===0)return[];let u=this.classifyAdGroups(r);return this.mergeAdjacentRanges(r.filter((e,t)=>u[t]).map(e=>({startTime:e.startTime,endTime:e.endTime})))}sameAdBreaks(e,t){return e.length===t.length?e.every((e,n)=>Math.abs(e.startTime-t[n].startTime)<.01&&Math.abs(e.endTime-t[n].endTime)<.01):!1}isTimeInAdBreak(e){return this.adBreaks.some(t=>e>=t.startTime&&e<t.endTime)}refreshAdBreakState(e){let t=this.videoElement,n=this.isTimeInAdBreak(e);n!==this.isAdBreak&&(this.isAdBreak=n,this.analytics.setAdBreak(n,t),n?(this.contentPlaybackRate=t.playbackRate,t.playbackRate=1):t.playbackRate=this.contentPlaybackRate,this.emit(`adbreakchange`,n))}videoTimeToContentTime(e){let t=e;for(let n of this.adBreaks)e>=n.endTime?t-=n.endTime-n.startTime:e>=n.startTime&&(t-=e-n.startTime);return Math.max(0,t)}getAdBreaks(){return this.adBreaks}setAdBreaks(e){this.adBreaksFromAvails=e.length>0,this.adBreaks=e,this.analytics.setAdBreaks(e),this.emit(`adbreaksloaded`,e),this.refreshAdBreakState(this.videoElement.currentTime)}isInAdBreak(){return this.isAdBreak}getAudioTracks(){return this.audioTrackList}setAudioTrack(e){this.hlsInstance&&(this.hlsInstance.audioTrack=e)}armStallWatchdog(){if(this.hasFailed||this.stallTimer)return;let t=this.progressTick;this.stallTimer=setTimeout(()=>{if(this.stallTimer=null,this.hasFailed)return;let e=this.progressTick!==t,n=this.progressTick===0;if(!(!this.isBuffering&&!n)){if(e){this.armStallWatchdog();return}this.fail(Error(n?`Playback failed: stream could not be loaded`:`Playback stalled: no data received`))}},e.STALL_TIMEOUT_MS)}clearStallWatchdog(){this.stallTimer&&=(clearTimeout(this.stallTimer),null)}fail(e){this.hasFailed||(this.hasFailed=!0,this.clearStallWatchdog(),this.emit(`error`,e),this.destroy())}destroy(){this.clearStallWatchdog(),this.hlsSubtitleCues.clear(),this.hlsActiveSubtitleKey=null,this.analytics.stopHeartbeat(),this.drm.removeWatermark(),this.hlsInstance&&=(this.hlsInstance.destroy(),null),this.dashInstance&&=(this.dashInstance.reset(),null),this.videoElement&&(this.videoElement.pause(),this.videoElement.removeAttribute(`src`),this.videoElement.load(),this.videoElement.parentElement&&this.videoElement.parentElement.removeChild(this.videoElement)),this.eventListeners={}}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Au}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return Du}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return ju}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return wu}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Nu}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return ku}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Mu}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return Ou}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Pu}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return $}});
|
|
49
|
+
//# sourceMappingURL=src-BXp0h90r.cjs.map
|