@goboss/web-video-player-sdk 1.0.0 → 1.0.5
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/dist/index.d.ts +5 -0
- package/dist/index.js +19196 -444
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +43 -4
- package/dist/index.umd.js.map +1 -1
- package/package.json +4 -22
package/dist/index.umd.js
CHANGED
|
@@ -1,10 +1,49 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("react-dom/client"),require("hls.js"),require("lucide-react"),require("dashjs"),require("firebase/app"),require("firebase/analytics"),require("react/jsx-runtime")):typeof define==`function`&&define.amd?define([`exports`,`react`,`react-dom/client`,`hls.js`,`lucide-react`,`dashjs`,`firebase/app`,`firebase/analytics`,`react/jsx-runtime`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.WebVideoPlayerSDK={},e.React,e.ReactDOM,e.Hls,e.lucide,e.dashjs,e.firebase,e.firebase,e.ReactJsxRuntime))})(this,function(e,t,n,r,i,a,o,s,c){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var l=Object.create,u=Object.defineProperty,d=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,p=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty,ee=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=f(t),a=0,o=i.length,s;a<o;a++)s=i[a],!m.call(e,s)&&s!==n&&u(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=d(t,s))||r.enumerable});return e},h=(e,t,n)=>(n=e==null?{}:l(p(e)),ee(t||!e||!e.__esModule?u(n,`default`,{value:e,enumerable:!0}):n,e));t=h(t,1),r=h(r,1),a=h(a,1);var te=class{callback;heartbeatInterval;isBuffering=!1;sessionId;videoId;deviceType;networkType;isFirstPlay=!0;watchStartTime=null;totalWatchTime=0;bufferingCount=0;totalBufferingTime=0;bufferingStartTime=null;milestonesHit=new Set;lastHeartbeatPosition=null;lastHeartbeatAt=null;constructor(e,t){this.callback=e,this.sessionId=this.generateSessionId(),this.videoId=t?this.extractVideoId(t):``,this.deviceType=this.getDeviceType(),this.networkType=this.getNetworkType()}registerCallback(e){this.callback=e}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,bufferingCount:0,totalBufferingTime:0})),e===`play`&&(this.watchStartTime=Date.now()),(e===`pause`||e===`ended`)&&this.watchStartTime!==null&&(this.totalWatchTime+=(Date.now()-this.watchStartTime)/1e3,this.watchStartTime=null);let r=t.duration?Math.min(100,Math.round(t.currentTime/t.duration*100)):0,i={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:r,totalWatchTime:Math.round(this.totalWatchTime),bufferingCount:this.bufferingCount,totalBufferingTime:Math.round(this.totalBufferingTime),...n};this.dispatchRaw(i)}startHeartbeat(e,t){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)}stopHeartbeat(){this.heartbeatInterval&&=(window.clearInterval(this.heartbeatInterval),void 0)}setBuffering(e,t,n){this.isBuffering!==e&&(this.isBuffering=e,e?(this.bufferingCount++,this.bufferingStartTime=Date.now()):this.bufferingStartTime!==null&&(this.totalBufferingTime+=(Date.now()-this.bufferingStartTime)/1e3,this.bufferingStartTime=null),this.track(e?`buffering_start`:`buffering_end`,t,n()))}checkMilestones(e,t){let{currentTime:n,duration:r}=e;if(!r)return;let i=n/r;for(let[n,r]of[[.25,`first_quartile`],[.5,`midpoint`],[.75,`third_quartile`]])i>=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())}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`}},ne={session_start:`player_session_start`,error:`player_error`},re=new Set([`heartbeat`]),ie=class{analytics=null;constructor(e){this.init(e)}async init(e){try{if(!await(0,s.isSupported)()){console.warn(`[FirebaseAnalytics] Not supported in this environment.`);return}let t=(0,o.getApps)(),n=t.length===0?(0,o.initializeApp)(e):t[0];this.analytics=(0,s.getAnalytics)(n)}catch(e){console.error(`[FirebaseAnalytics] Initialization failed:`,e)}}createCallback(){return e=>this.handleEvent(e)}handleEvent(e){if(!this.analytics||re.has(e.eventType))return;let t=ne[e.eventType]??e.eventType,n=this.buildParams(e);try{(0,s.logEvent)(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,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()}},ae=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)}},oe=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(null),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(`
|
|
2
|
-
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("react-dom/client"),require("firebase/app"),require("firebase/analytics"),require("react/jsx-runtime")):typeof define==`function`&&define.amd?define([`exports`,`react`,`react-dom/client`,`firebase/app`,`firebase/analytics`,`react/jsx-runtime`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.WebVideoPlayerSDK={},e.React,e.ReactDOM,e.firebase,e.firebase,e.ReactJsxRuntime))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var o=Object.create,s=Object.defineProperty,c=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,u=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty,f=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=l(t),a=0,o=i.length,u;a<o;a++)u=i[a],!d.call(e,u)&&u!==n&&s(e,u,{get:(e=>t[e]).bind(null,u),enumerable:!(r=c(t,u))||r.enumerable});return e};t=((e,t,n)=>(n=e==null?{}:o(u(e)),f(t||!e||!e.__esModule?s(n,`default`,{value:e,enumerable:!0}):n,e)))(t,1);var p=Number.isFinite||function(e){return typeof e==`number`&&isFinite(e)},m=Number.isSafeInteger||function(e){return typeof e==`number`&&Math.abs(e)<=h},h=2**53-1||9007199254740991,g=function(e){return e.NETWORK_ERROR=`networkError`,e.MEDIA_ERROR=`mediaError`,e.KEY_SYSTEM_ERROR=`keySystemError`,e.MUX_ERROR=`muxError`,e.OTHER_ERROR=`otherError`,e}({}),_=function(e){return e.KEY_SYSTEM_NO_KEYS=`keySystemNoKeys`,e.KEY_SYSTEM_NO_ACCESS=`keySystemNoAccess`,e.KEY_SYSTEM_NO_SESSION=`keySystemNoSession`,e.KEY_SYSTEM_NO_CONFIGURED_LICENSE=`keySystemNoConfiguredLicense`,e.KEY_SYSTEM_LICENSE_REQUEST_FAILED=`keySystemLicenseRequestFailed`,e.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED=`keySystemServerCertificateRequestFailed`,e.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED=`keySystemServerCertificateUpdateFailed`,e.KEY_SYSTEM_SESSION_UPDATE_FAILED=`keySystemSessionUpdateFailed`,e.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED=`keySystemStatusOutputRestricted`,e.KEY_SYSTEM_STATUS_INTERNAL_ERROR=`keySystemStatusInternalError`,e.KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR=`keySystemDestroyMediaKeysError`,e.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR=`keySystemDestroyCloseSessionError`,e.KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR=`keySystemDestroyRemoveSessionError`,e.MANIFEST_LOAD_ERROR=`manifestLoadError`,e.MANIFEST_LOAD_TIMEOUT=`manifestLoadTimeOut`,e.MANIFEST_PARSING_ERROR=`manifestParsingError`,e.MANIFEST_INCOMPATIBLE_CODECS_ERROR=`manifestIncompatibleCodecsError`,e.LEVEL_EMPTY_ERROR=`levelEmptyError`,e.LEVEL_LOAD_ERROR=`levelLoadError`,e.LEVEL_LOAD_TIMEOUT=`levelLoadTimeOut`,e.LEVEL_PARSING_ERROR=`levelParsingError`,e.LEVEL_SWITCH_ERROR=`levelSwitchError`,e.AUDIO_TRACK_LOAD_ERROR=`audioTrackLoadError`,e.AUDIO_TRACK_LOAD_TIMEOUT=`audioTrackLoadTimeOut`,e.SUBTITLE_LOAD_ERROR=`subtitleTrackLoadError`,e.SUBTITLE_TRACK_LOAD_TIMEOUT=`subtitleTrackLoadTimeOut`,e.FRAG_LOAD_ERROR=`fragLoadError`,e.FRAG_LOAD_TIMEOUT=`fragLoadTimeOut`,e.FRAG_DECRYPT_ERROR=`fragDecryptError`,e.FRAG_PARSING_ERROR=`fragParsingError`,e.FRAG_GAP=`fragGap`,e.REMUX_ALLOC_ERROR=`remuxAllocError`,e.KEY_LOAD_ERROR=`keyLoadError`,e.KEY_LOAD_TIMEOUT=`keyLoadTimeOut`,e.BUFFER_ADD_CODEC_ERROR=`bufferAddCodecError`,e.BUFFER_INCOMPATIBLE_CODECS_ERROR=`bufferIncompatibleCodecsError`,e.BUFFER_APPEND_ERROR=`bufferAppendError`,e.BUFFER_APPENDING_ERROR=`bufferAppendingError`,e.BUFFER_STALLED_ERROR=`bufferStalledError`,e.BUFFER_FULL_ERROR=`bufferFullError`,e.BUFFER_SEEK_OVER_HOLE=`bufferSeekOverHole`,e.BUFFER_NUDGE_ON_STALL=`bufferNudgeOnStall`,e.ASSET_LIST_LOAD_ERROR=`assetListLoadError`,e.ASSET_LIST_LOAD_TIMEOUT=`assetListLoadTimeout`,e.ASSET_LIST_PARSING_ERROR=`assetListParsingError`,e.INTERSTITIAL_ASSET_ITEM_ERROR=`interstitialAssetItemError`,e.INTERNAL_EXCEPTION=`internalException`,e.INTERNAL_ABORTED=`aborted`,e.ATTACH_MEDIA_ERROR=`attachMediaError`,e.UNKNOWN=`unknown`,e}({}),v=function(e){return e.MEDIA_ATTACHING=`hlsMediaAttaching`,e.MEDIA_ATTACHED=`hlsMediaAttached`,e.MEDIA_DETACHING=`hlsMediaDetaching`,e.MEDIA_DETACHED=`hlsMediaDetached`,e.MEDIA_ENDED=`hlsMediaEnded`,e.STALL_RESOLVED=`hlsStallResolved`,e.BUFFER_RESET=`hlsBufferReset`,e.BUFFER_CODECS=`hlsBufferCodecs`,e.BUFFER_CREATED=`hlsBufferCreated`,e.BUFFER_APPENDING=`hlsBufferAppending`,e.BUFFER_APPENDED=`hlsBufferAppended`,e.BUFFER_EOS=`hlsBufferEos`,e.BUFFERED_TO_END=`hlsBufferedToEnd`,e.BUFFER_FLUSHING=`hlsBufferFlushing`,e.BUFFER_FLUSHED=`hlsBufferFlushed`,e.MANIFEST_LOADING=`hlsManifestLoading`,e.MANIFEST_LOADED=`hlsManifestLoaded`,e.MANIFEST_PARSED=`hlsManifestParsed`,e.LEVEL_SWITCHING=`hlsLevelSwitching`,e.LEVEL_SWITCHED=`hlsLevelSwitched`,e.LEVEL_LOADING=`hlsLevelLoading`,e.LEVEL_LOADED=`hlsLevelLoaded`,e.LEVEL_UPDATED=`hlsLevelUpdated`,e.LEVEL_PTS_UPDATED=`hlsLevelPtsUpdated`,e.LEVELS_UPDATED=`hlsLevelsUpdated`,e.AUDIO_TRACKS_UPDATED=`hlsAudioTracksUpdated`,e.AUDIO_TRACK_SWITCHING=`hlsAudioTrackSwitching`,e.AUDIO_TRACK_SWITCHED=`hlsAudioTrackSwitched`,e.AUDIO_TRACK_LOADING=`hlsAudioTrackLoading`,e.AUDIO_TRACK_LOADED=`hlsAudioTrackLoaded`,e.AUDIO_TRACK_UPDATED=`hlsAudioTrackUpdated`,e.SUBTITLE_TRACKS_UPDATED=`hlsSubtitleTracksUpdated`,e.SUBTITLE_TRACKS_CLEARED=`hlsSubtitleTracksCleared`,e.SUBTITLE_TRACK_SWITCH=`hlsSubtitleTrackSwitch`,e.SUBTITLE_TRACK_LOADING=`hlsSubtitleTrackLoading`,e.SUBTITLE_TRACK_LOADED=`hlsSubtitleTrackLoaded`,e.SUBTITLE_TRACK_UPDATED=`hlsSubtitleTrackUpdated`,e.SUBTITLE_FRAG_PROCESSED=`hlsSubtitleFragProcessed`,e.CUES_PARSED=`hlsCuesParsed`,e.NON_NATIVE_TEXT_TRACKS_FOUND=`hlsNonNativeTextTracksFound`,e.INIT_PTS_FOUND=`hlsInitPtsFound`,e.FRAG_LOADING=`hlsFragLoading`,e.FRAG_LOAD_EMERGENCY_ABORTED=`hlsFragLoadEmergencyAborted`,e.FRAG_LOADED=`hlsFragLoaded`,e.FRAG_DECRYPTED=`hlsFragDecrypted`,e.FRAG_PARSING_INIT_SEGMENT=`hlsFragParsingInitSegment`,e.FRAG_PARSING_USERDATA=`hlsFragParsingUserdata`,e.FRAG_PARSING_METADATA=`hlsFragParsingMetadata`,e.FRAG_PARSED=`hlsFragParsed`,e.FRAG_BUFFERED=`hlsFragBuffered`,e.FRAG_CHANGED=`hlsFragChanged`,e.FPS_DROP=`hlsFpsDrop`,e.FPS_DROP_LEVEL_CAPPING=`hlsFpsDropLevelCapping`,e.MAX_AUTO_LEVEL_UPDATED=`hlsMaxAutoLevelUpdated`,e.ERROR=`hlsError`,e.DESTROYING=`hlsDestroying`,e.KEY_LOADING=`hlsKeyLoading`,e.KEY_LOADED=`hlsKeyLoaded`,e.LIVE_BACK_BUFFER_REACHED=`hlsLiveBackBufferReached`,e.BACK_BUFFER_REACHED=`hlsBackBufferReached`,e.STEERING_MANIFEST_LOADED=`hlsSteeringManifestLoaded`,e.ASSET_LIST_LOADING=`hlsAssetListLoading`,e.ASSET_LIST_LOADED=`hlsAssetListLoaded`,e.INTERSTITIALS_UPDATED=`hlsInterstitialsUpdated`,e.INTERSTITIALS_BUFFERED_TO_BOUNDARY=`hlsInterstitialsBufferedToBoundary`,e.INTERSTITIAL_ASSET_PLAYER_CREATED=`hlsInterstitialAssetPlayerCreated`,e.INTERSTITIAL_STARTED=`hlsInterstitialStarted`,e.INTERSTITIAL_ASSET_STARTED=`hlsInterstitialAssetStarted`,e.INTERSTITIAL_ASSET_ENDED=`hlsInterstitialAssetEnded`,e.INTERSTITIAL_ASSET_ERROR=`hlsInterstitialAssetError`,e.INTERSTITIAL_ENDED=`hlsInterstitialEnded`,e.INTERSTITIALS_PRIMARY_RESUMED=`hlsInterstitialsPrimaryResumed`,e.PLAYOUT_LIMIT_REACHED=`hlsPlayoutLimitReached`,e.EVENT_CUE_ENTER=`hlsEventCueEnter`,e}({}),y={MANIFEST:`manifest`,LEVEL:`level`,AUDIO_TRACK:`audioTrack`,SUBTITLE_TRACK:`subtitleTrack`},b={MAIN:`main`,AUDIO:`audio`,SUBTITLE:`subtitle`},x=class{constructor(e,t=0,n=0){this.halfLife=void 0,this.alpha_=void 0,this.estimate_=void 0,this.totalWeight_=void 0,this.halfLife=e,this.alpha_=e?Math.exp(Math.log(.5)/e):0,this.estimate_=t,this.totalWeight_=n}sample(e,t){let n=this.alpha_**+e;this.estimate_=t*(1-n)+n*this.estimate_,this.totalWeight_+=e}getTotalWeight(){return this.totalWeight_}getEstimate(){if(this.alpha_){let e=1-this.alpha_**+this.totalWeight_;if(e)return this.estimate_/e}return this.estimate_}},S=class{constructor(e,t,n,r=100){this.defaultEstimate_=void 0,this.minWeight_=void 0,this.minDelayMs_=void 0,this.slow_=void 0,this.fast_=void 0,this.defaultTTFB_=void 0,this.ttfb_=void 0,this.defaultEstimate_=n,this.minWeight_=.001,this.minDelayMs_=50,this.slow_=new x(e),this.fast_=new x(t),this.defaultTTFB_=r,this.ttfb_=new x(e)}update(e,t){let{slow_:n,fast_:r,ttfb_:i}=this;n.halfLife!==e&&(this.slow_=new x(e,n.getEstimate(),n.getTotalWeight())),r.halfLife!==t&&(this.fast_=new x(t,r.getEstimate(),r.getTotalWeight())),i.halfLife!==e&&(this.ttfb_=new x(e,i.getEstimate(),i.getTotalWeight()))}sample(e,t){e=Math.max(e,this.minDelayMs_);let n=8*t,r=e/1e3,i=n/r;this.fast_.sample(r,i),this.slow_.sample(r,i)}sampleTTFB(e){let t=e/1e3,n=Math.sqrt(2)*Math.exp(-(t**2)/2);this.ttfb_.sample(n,Math.max(e,5))}canEstimate(){return this.fast_.getTotalWeight()>=this.minWeight_}getEstimate(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_}getEstimateTTFB(){return this.ttfb_.getTotalWeight()>=this.minWeight_?this.ttfb_.getEstimate():this.defaultTTFB_}get defaultEstimate(){return this.defaultEstimate_}destroy(){}};function C(e,t,n){return(t=O(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(){return w=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},w.apply(null,arguments)}function T(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function E(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?T(Object(n),!0).forEach(function(t){C(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):T(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function D(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function O(e){var t=D(e,`string`);return typeof t==`symbol`?t:t+``}var k=class{constructor(e,t){this.trace=void 0,this.debug=void 0,this.log=void 0,this.warn=void 0,this.info=void 0,this.error=void 0;let n=`[${e}]:`;this.trace=A,this.debug=t.debug.bind(null,n),this.log=t.log.bind(null,n),this.warn=t.warn.bind(null,n),this.info=t.info.bind(null,n),this.error=t.error.bind(null,n)}},A=function(){},j={trace:A,debug:A,log:A,warn:A,info:A,error:A};function M(){return w({},j)}function N(e,t){let n=self.console[e];return n?n.bind(self.console,`${t?`[`+t+`] `:``}[${e}] >`):A}function P(e,t,n){return t[e]?t[e].bind(t):N(e,n)}var F=M();function ee(e,t,n){let r=M();if(typeof console==`object`&&e===!0||typeof e==`object`){let i=[`debug`,`log`,`info`,`warn`,`error`];i.forEach(t=>{r[t]=P(t,e,n)});try{r.log(`Debug logs enabled for "${t}" in hls.js version 1.6.16`)}catch{return M()}i.forEach(t=>{F[t]=P(t,e)})}else w(F,r);return r}var I=F;function te(e=!0){if(!(typeof self>`u`))return(e||!self.MediaSource)&&self.ManagedMediaSource||self.MediaSource||self.WebKitMediaSource}function ne(e){return typeof self<`u`&&e===self.ManagedMediaSource}function re(e,t){let n=Object.keys(e),r=Object.keys(t),i=n.length,a=r.length;return!i||!a||i===a&&!n.some(e=>r.indexOf(e)===-1)}function L(e,t=!1){if(typeof TextDecoder<`u`){let n=new TextDecoder(`utf-8`).decode(e);if(t){let e=n.indexOf(`\0`);return e===-1?n:n.substring(0,e)}return n.replace(/\0/g,``)}let n=e.length,r,i,a,o=``,s=0;for(;s<n;){if(r=e[s++],r===0&&t)return o;if(!(r===0||r===3))switch(r>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:o+=String.fromCharCode(r);break;case 12:case 13:i=e[s++],o+=String.fromCharCode((r&31)<<6|i&63);break;case 14:i=e[s++],a=e[s++],o+=String.fromCharCode((r&15)<<12|(i&63)<<6|(a&63)<<0);break}}return o}function R(e){let t=``;for(let n=0;n<e.length;n++){let r=e[n].toString(16);r.length<2&&(r=`0`+r),t+=r}return t}function ie(e){return Uint8Array.from(e.replace(/^0x/,``).replace(/([\da-fA-F]{2}) ?/g,`0x$1 `).replace(/ +$/,``).split(` `)).buffer}function ae(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,`default`)?e.default:e}var oe={exports:{}},se;function ce(){return se?oe.exports:(se=1,(function(e,t){(function(t){var n=/^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/,r=/^(?=([^\/?#]*))\1([^]*)$/,i=/(?:\/|^)\.(?=\/)/g,a=/(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g,o={buildAbsoluteURL:function(e,t,n){if(n||={},e=e.trim(),t=t.trim(),!t){if(!n.alwaysNormalize)return e;var i=o.parseURL(e);if(!i)throw Error(`Error trying to parse base URL.`);return i.path=o.normalizePath(i.path),o.buildURLFromParts(i)}var a=o.parseURL(t);if(!a)throw Error(`Error trying to parse relative URL.`);if(a.scheme)return n.alwaysNormalize?(a.path=o.normalizePath(a.path),o.buildURLFromParts(a)):t;var s=o.parseURL(e);if(!s)throw Error(`Error trying to parse base URL.`);if(!s.netLoc&&s.path&&s.path[0]!==`/`){var c=r.exec(s.path);s.netLoc=c[1],s.path=c[2]}s.netLoc&&!s.path&&(s.path=`/`);var l={scheme:s.scheme,netLoc:a.netLoc,path:null,params:a.params,query:a.query,fragment:a.fragment};if(!a.netLoc&&(l.netLoc=s.netLoc,a.path[0]!==`/`))if(!a.path)l.path=s.path,a.params||(l.params=s.params,a.query||(l.query=s.query));else{var u=s.path,d=u.substring(0,u.lastIndexOf(`/`)+1)+a.path;l.path=o.normalizePath(d)}return l.path===null&&(l.path=n.alwaysNormalize?o.normalizePath(a.path):a.path),o.buildURLFromParts(l)},parseURL:function(e){var t=n.exec(e);return t?{scheme:t[1]||``,netLoc:t[2]||``,path:t[3]||``,params:t[4]||``,query:t[5]||``,fragment:t[6]||``}:null},normalizePath:function(e){for(e=e.split(``).reverse().join(``).replace(i,``);e.length!==(e=e.replace(a,``)).length;);return e.split(``).reverse().join(``)},buildURLFromParts:function(e){return e.scheme+e.netLoc+e.path+e.params+e.query+e.fragment}};e.exports=o})()})(oe),oe.exports)}var le=ce(),ue=class{constructor(){this.aborted=!1,this.loaded=0,this.retry=0,this.total=0,this.chunkCount=0,this.bwEstimate=0,this.loading={start:0,first:0,end:0},this.parsing={start:0,end:0},this.buffering={start:0,first:0,end:0}}},z={AUDIO:`audio`,VIDEO:`video`,AUDIOVIDEO:`audiovideo`},de=class{constructor(e){this._byteRange=null,this._url=null,this._stats=null,this._streams=null,this.base=void 0,this.relurl=void 0,typeof e==`string`&&(e={url:e}),this.base=e,he(this,`stats`)}setByteRange(e,t){let n=e.split(`@`,2),r;r=n.length===1?t?.byteRangeEndOffset||0:parseInt(n[1]),this._byteRange=[r,parseInt(n[0])+r]}get baseurl(){return this.base.url}get byteRange(){return this._byteRange===null?[]:this._byteRange}get byteRangeStartOffset(){return this.byteRange[0]}get byteRangeEndOffset(){return this.byteRange[1]}get elementaryStreams(){return this._streams===null&&(this._streams={[z.AUDIO]:null,[z.VIDEO]:null,[z.AUDIOVIDEO]:null}),this._streams}set elementaryStreams(e){this._streams=e}get hasStats(){return this._stats!==null}get hasStreams(){return this._streams!==null}get stats(){return this._stats===null&&(this._stats=new ue),this._stats}set stats(e){this._stats=e}get url(){return!this._url&&this.baseurl&&this.relurl&&(this._url=le.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url||``}set url(e){this._url=e}clearElementaryStreamInfo(){let{elementaryStreams:e}=this;e[z.AUDIO]=null,e[z.VIDEO]=null,e[z.AUDIOVIDEO]=null}};function B(e){return e.sn!==`initSegment`}var fe=class extends de{constructor(e,t){super(t),this._decryptdata=null,this._programDateTime=null,this._ref=null,this._bitrate=void 0,this.rawProgramDateTime=null,this.tagList=[],this.duration=0,this.sn=0,this.levelkeys=void 0,this.type=void 0,this.loader=null,this.keyLoader=null,this.level=-1,this.cc=0,this.startPTS=void 0,this.endPTS=void 0,this.startDTS=void 0,this.endDTS=void 0,this.start=0,this.playlistOffset=0,this.deltaPTS=void 0,this.maxStartPTS=void 0,this.minEndPTS=void 0,this.data=void 0,this.bitrateTest=!1,this.title=null,this.initSegment=null,this.endList=void 0,this.gap=void 0,this.urlId=0,this.type=e}get byteLength(){if(this.hasStats){let e=this.stats.total;if(e)return e}if(this.byteRange.length){let e=this.byteRange[0],t=this.byteRange[1];if(p(e)&&p(t))return t-e}return null}get bitrate(){return this.byteLength?this.byteLength*8/this.duration:this._bitrate?this._bitrate:null}set bitrate(e){this._bitrate=e}get decryptdata(){var e;let{levelkeys:t}=this;if(!t||t.NONE)return null;if(t.identity)this._decryptdata||=t.identity.getDecryptData(this.sn);else if(!((e=this._decryptdata)!=null&&e.keyId)){let e=Object.keys(t);if(e.length===1){let n=this._decryptdata=t[e[0]]||null;n&&(this._decryptdata=n.getDecryptData(this.sn,t))}}return this._decryptdata}get end(){return this.start+this.duration}get endProgramDateTime(){if(this.programDateTime===null)return null;let e=p(this.duration)?this.duration:0;return this.programDateTime+e*1e3}get encrypted(){var e;if((e=this._decryptdata)!=null&&e.encrypted)return!0;if(this.levelkeys){var t;let e=Object.keys(this.levelkeys),n=e.length;if(n>1||n===1&&(t=this.levelkeys[e[0]])!=null&&t.encrypted)return!0}return!1}get programDateTime(){return this._programDateTime===null&&this.rawProgramDateTime&&(this.programDateTime=Date.parse(this.rawProgramDateTime)),this._programDateTime}set programDateTime(e){if(!p(e)){this._programDateTime=this.rawProgramDateTime=null;return}this._programDateTime=e}get ref(){return B(this)?(this._ref||={base:this.base,start:this.start,duration:this.duration,sn:this.sn,programDateTime:this.programDateTime},this._ref):null}addStart(e){this.setStart(this.start+e)}setStart(e){this.start=e,this._ref&&(this._ref.start=e)}setDuration(e){this.duration=e,this._ref&&(this._ref.duration=e)}setKeyFormat(e){let t=this.levelkeys;if(t){var n;let r=t[e];r&&!((n=this._decryptdata)!=null&&n.keyId)&&(this._decryptdata=r.getDecryptData(this.sn,t))}}abortRequests(){var e,t;(e=this.loader)==null||e.abort(),(t=this.keyLoader)==null||t.abort()}setElementaryStreamInfo(e,t,n,r,i,a=!1){let{elementaryStreams:o}=this,s=o[e];if(!s){o[e]={startPTS:t,endPTS:n,startDTS:r,endDTS:i,partial:a};return}s.startPTS=Math.min(s.startPTS,t),s.endPTS=Math.max(s.endPTS,n),s.startDTS=Math.min(s.startDTS,r),s.endDTS=Math.max(s.endDTS,i)}},pe=class extends de{constructor(e,t,n,r,i){super(n),this.fragOffset=0,this.duration=0,this.gap=!1,this.independent=!1,this.relurl=void 0,this.fragment=void 0,this.index=void 0,this.duration=e.decimalFloatingPoint(`DURATION`),this.gap=e.bool(`GAP`),this.independent=e.bool(`INDEPENDENT`),this.relurl=e.enumeratedString(`URI`),this.fragment=t,this.index=r;let a=e.enumeratedString(`BYTERANGE`);a&&this.setByteRange(a,i),i&&(this.fragOffset=i.fragOffset+i.duration)}get start(){return this.fragment.start+this.fragOffset}get end(){return this.start+this.duration}get loaded(){let{elementaryStreams:e}=this;return!!(e.audio||e.video||e.audiovideo)}};function me(e,t){let n=Object.getPrototypeOf(e);if(n)return Object.getOwnPropertyDescriptor(n,t)||me(n,t)}function he(e,t){let n=me(e,t);n&&(n.enumerable=!0,Object.defineProperty(e,t,n))}var ge=2**32-1,_e=[].push,ve={video:1,audio:2,id3:3,text:4};function V(e){return String.fromCharCode.apply(null,e)}function ye(e,t){let n=e[t]<<8|e[t+1];return n<0?65536+n:n}function H(e,t){let n=xe(e,t);return n<0?4294967296+n:n}function be(e,t){let n=H(e,t);return n*=2**32,n+=H(e,t+4),n}function xe(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]}function Se(e){let t=e.byteLength;for(let n=0;n<t;){let r=H(e,n);if(r>8&&e[n+4]===109&&e[n+5]===111&&e[n+6]===111&&e[n+7]===102)return!0;n=r>1?n+r:t}return!1}function U(e,t){let n=[];if(!t.length)return n;let r=e.byteLength;for(let i=0;i<r;){let a=H(e,i),o=V(e.subarray(i+4,i+8)),s=a>1?i+a:r;if(o===t[0])if(t.length===1)n.push(e.subarray(i+8,s));else{let r=U(e.subarray(i+8,s),t.slice(1));r.length&&_e.apply(n,r)}i=s}return n}function Ce(e){let t=[],n=e[0],r=8,i=H(e,r);r+=4;let a=0,o=0;n===0?(a=H(e,r),o=H(e,r+4),r+=8):(a=be(e,r),o=be(e,r+8),r+=16),r+=2;let s=e.length+o,c=ye(e,r);r+=2;for(let n=0;n<c;n++){let n=r,a=H(e,n);n+=4;let o=a&2147483647;if((a&2147483648)>>>31==1)return I.warn(`SIDX has hierarchical references (not supported)`),null;let c=H(e,n);n+=4,t.push({referenceSize:o,subsegmentDuration:c,info:{duration:c/i,start:s,end:s+o-1}}),s+=o,n+=4,r=n}return{earliestPresentationTime:a,timescale:i,version:n,referencesCount:c,references:t}}function we(e){let t=[],n=U(e,[`moov`,`trak`]);for(let e=0;e<n.length;e++){let r=n[e],i=U(r,[`tkhd`])[0];if(i){let e=i[0],n=H(i,e===0?12:20),a=U(r,[`mdia`,`mdhd`])[0];if(a){e=a[0];let i=H(a,e===0?12:20),o=U(r,[`mdia`,`hdlr`])[0];if(o){let e=V(o.subarray(8,12)),a={soun:z.AUDIO,vide:z.VIDEO}[e],s=U(r,[`mdia`,`minf`,`stbl`,`stsd`])[0],c=Te(s);a?(t[n]={timescale:i,type:a,stsd:c},t[a]=E({timescale:i,id:n},c)):t[n]={timescale:i,type:e,stsd:c}}}}}return U(e,[`moov`,`mvex`,`trex`]).forEach(e=>{let n=t[H(e,4)];n&&(n.default={duration:H(e,12),flags:H(e,20)})}),t}function Te(e){let t=e.subarray(8),n=t.subarray(86),r=V(t.subarray(4,8)),i=r,a,o=r===`enca`||r===`encv`;o&&U(U(t,[r])[0].subarray(r===`enca`?28:78),[`sinf`]).forEach(e=>{let t=U(e,[`schm`])[0];if(t){let n=V(t.subarray(4,8));if(n===`cbcs`||n===`cenc`){let t=U(e,[`frma`])[0];t&&(i=V(t))}}});let s=i;switch(i){case`avc1`:case`avc2`:case`avc3`:case`avc4`:{let e=U(n,[`avcC`])[0];e&&e.length>3&&(i+=`.`+ke(e[1])+ke(e[2])+ke(e[3]),a=Ee(s===`avc1`?`dva1`:`dvav`,n));break}case`mp4a`:{let e=U(t,[r])[0],n=U(e.subarray(28),[`esds`])[0];if(n&&n.length>7){let e=4;if(n[e++]!==3)break;e=Oe(n,e),e+=2;let t=n[e++];if(t&128&&(e+=2),t&64&&(e+=n[e++]),n[e++]!==4)break;e=Oe(n,e);let r=n[e++];if(r===64)i+=`.`+ke(r);else break;if(e+=12,n[e++]!==5)break;e=Oe(n,e);let a=n[e++],o=(a&248)>>3;o===31&&(o+=1+((a&7)<<3)+((n[e]&224)>>5)),i+=`.`+o}break}case`hvc1`:case`hev1`:{let e=U(n,[`hvcC`])[0];if(e&&e.length>12){let t=e[1],n=[``,`A`,`B`,`C`][t>>6],r=t&31,a=H(e,2),o=(t&32)>>5?`H`:`L`,s=e[12],c=e.subarray(6,12);i+=`.`+n+r,i+=`.`+De(a).toString(16).toUpperCase(),i+=`.`+o+s;let l=``;for(let e=c.length;e--;){let t=c[e];(t||l)&&(l=`.`+t.toString(16).toUpperCase()+l)}i+=l}a=Ee(s==`hev1`?`dvhe`:`dvh1`,n);break}case`dvh1`:case`dvhe`:case`dvav`:case`dva1`:case`dav1`:i=Ee(i,n)||i;break;case`vp09`:{let e=U(n,[`vpcC`])[0];if(e&&e.length>6){let t=e[4],n=e[5],r=e[6]>>4&15;i+=`.`+Ae(t)+`.`+Ae(n)+`.`+Ae(r)}break}case`av01`:{let e=U(n,[`av1C`])[0];if(e&&e.length>2){let t=e[1]>>>5,r=e[1]&31,o=e[2]>>>7?`H`:`M`,s=(e[2]&64)>>6,c=(e[2]&32)>>5,l=t===2&&s?c?12:10:s?10:8,u=(e[2]&16)>>4,d=(e[2]&8)>>3,f=(e[2]&4)>>2,p=e[2]&3;i+=`.`+t+`.`+Ae(r)+o+`.`+Ae(l)+`.`+u+`.`+d+f+p+`.`+Ae(1)+`.`+Ae(1)+`.`+Ae(1)+`.0`,a=Ee(`dav1`,n)}break}}return{codec:i,encrypted:o,supplemental:a}}function Ee(e,t){let n=U(t,[`dvvC`]),r=n.length?n[0]:U(t,[`dvcC`])[0];if(r){let t=r[2]>>1&127,n=r[2]<<5&32|r[3]>>3&31;return e+`.`+Ae(t)+`.`+Ae(n)}}function De(e){let t=0;for(let n=0;n<32;n++)t|=(e>>n&1)<<31-n;return t>>>0}function Oe(e,t){let n=t+5;for(;e[t++]&128&&t<n;);return t}function ke(e){return(`0`+e.toString(16).toUpperCase()).slice(-2)}function Ae(e){return(e<10?`0`:``)+e}function je(e,t){if(!e||!t)return;let n=t.keyId;n&&t.isCommonEncryption&&Ne(e,(e,t)=>{let r=e.subarray(8,24);r.some(e=>e!==0)||(I.log(`[eme] Patching keyId in 'enc${t?`a`:`v`}>sinf>>tenc' box: ${R(r)} -> ${R(n)}`),e.set(n,8))})}function Me(e){let t=[];return Ne(e,e=>t.push(e.subarray(8,24))),t}function Ne(e,t){U(e,[`moov`,`trak`]).forEach(e=>{let n=U(e,[`mdia`,`minf`,`stbl`,`stsd`])[0];if(!n)return;let r=n.subarray(8),i=U(r,[`enca`]),a=i.length>0;a||(i=U(r,[`encv`])),i.forEach(e=>{U(a?e.subarray(28):e.subarray(78),[`sinf`]).forEach(e=>{let n=Pe(e);n&&t(n,a)})})})}function Pe(e){let t=U(e,[`schm`])[0];if(t){let n=V(t.subarray(4,8));if(n===`cbcs`||n===`cenc`){let t=U(e,[`schi`,`tenc`])[0];if(t)return t}}}function Fe(e,t,n){let r={},i=U(e,[`moof`,`traf`]);for(let e=0;e<i.length;e++){let a=i[e],o=U(a,[`tfhd`])[0],s=H(o,4),c=t[s];if(!c)continue;r[s]||(r[s]={start:NaN,duration:0,sampleCount:0,timescale:c.timescale,type:c.type});let l=r[s],u=U(a,[`tfdt`])[0];if(u){let e=u[0],t=H(u,4);e===1&&(t===ge?n.warn(`[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time`):(t*=ge+1,t+=H(u,8))),p(t)&&(!p(l.start)||t<l.start)&&(l.start=t)}let d=c.default,f=H(o,0)|d?.flags,m=d?.duration||0;f&8&&(m=f&2?H(o,12):H(o,8));let h=U(a,[`trun`]),g=l.start||0,_=0,v=m;for(let e=0;e<h.length;e++){let t=h[e],n=H(t,4),r=l.sampleCount;l.sampleCount+=n;let i=t[3]&1,a=t[3]&4,o=t[2]&1,s=t[2]&2,c=t[2]&4,u=t[2]&8,d=8,f=n;for(i&&(d+=4),a&&n&&(!(t[d+1]&1)&&l.keyFrameIndex===void 0&&(l.keyFrameIndex=r),d+=4,o?(v=H(t,d),d+=4):v=m,s&&(d+=4),u&&(d+=4),g+=v,_+=v,f--);f--;)o?(v=H(t,d),d+=4):v=m,s&&(d+=4),c&&(t[d+1]&1||l.keyFrameIndex===void 0&&(l.keyFrameIndex=l.sampleCount-(f+1),l.keyFrameStart=g),d+=4),u&&(d+=4),g+=v,_+=v;!_&&m&&(_+=m*n)}l.duration+=_}if(!Object.keys(r).some(e=>r[e].duration)){let t=1/0,n=0,i=U(e,[`sidx`]);for(let e=0;e<i.length;e++){let r=Ce(i[e]);if(r!=null&&r.references){t=Math.min(t,r.earliestPresentationTime/r.timescale);let e=r.references.reduce((e,t)=>e+t.info.duration||0,0);n=Math.max(n,e+r.earliestPresentationTime/r.timescale)}}n&&p(n)&&Object.keys(r).forEach(e=>{r[e].duration||(r[e].duration=n*r[e].timescale-r[e].start)})}return r}function Ie(e){let t={valid:null,remainder:null},n=U(e,[`moof`]);if(n.length<2)return t.remainder=e,t;let r=n[n.length-1];return t.valid=e.slice(0,r.byteOffset-8),t.remainder=e.slice(r.byteOffset-8),t}function Le(e,t){let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n}function Re(e,t){let n=[],r=t.samples,i=t.timescale,a=t.id,o=!1;return U(r,[`moof`]).map(s=>{let c=s.byteOffset-8;U(s,[`traf`]).map(s=>{let l=U(s,[`tfdt`]).map(e=>{let t=e[0],n=H(e,4);return t===1&&(n*=2**32,n+=H(e,8)),n/i})[0];return l!==void 0&&(e=l),U(s,[`tfhd`]).map(l=>{let u=H(l,4),d=H(l,0)&16777215,f=(d&1)!=0,p=(d&2)!=0,m=(d&8)!=0,h=0,g=(d&16)!=0,_=0,v=(d&32)!=0,y=8;u===a&&(f&&(y+=8),p&&(y+=4),m&&(h=H(l,y),y+=4),g&&(_=H(l,y),y+=4),v&&(y+=4),t.type===`video`&&(o=ze(t.codec)),U(s,[`trun`]).map(a=>{let s=a[0],l=H(a,0)&16777215,u=(l&1)!=0,d=0,f=(l&4)!=0,p=(l&256)!=0,m=0,g=(l&512)!=0,v=0,y=(l&1024)!=0,b=(l&2048)!=0,x=0,S=H(a,4),C=8;u&&(d=H(a,C),C+=4),f&&(C+=4);let w=d+c;for(let c=0;c<S;c++){if(p?(m=H(a,C),C+=4):m=h,g?(v=H(a,C),C+=4):v=_,y&&(C+=4),b&&(x=s===0?H(a,C):xe(a,C),C+=4),t.type===z.VIDEO){let t=0;for(;t<v;){let a=H(r,w);w+=4,Be(o,r[w])&&Ve(r.subarray(w,w+a),o?2:1,e+x/i,n),w+=a,t+=a+4}}e+=m/i}}))})})}),n}function ze(e){if(!e)return!1;let t=e.substring(0,4);return t===`hvc1`||t===`hev1`||t===`dvh1`||t===`dvhe`}function Be(e,t){if(e){let e=t>>1&63;return e===39||e===40}else return(t&31)==6}function Ve(e,t,n,r){let i=He(e),a=0;a+=t;let o=0,s=0,c=0;for(;a<i.length;){o=0;do{if(a>=i.length)break;c=i[a++],o+=c}while(c===255);s=0;do{if(a>=i.length)break;c=i[a++],s+=c}while(c===255);let e=i.length-a,t=a;if(s<e)a+=s;else if(s>e){I.error(`Malformed SEI payload. ${s} is too small, only ${e} bytes left to parse.`);break}if(o===4){if(i[t++]===181){let e=ye(i,t);if(t+=2,e===49){let e=H(i,t);if(t+=4,e===1195456820){let e=i[t++];if(e===3){let a=i[t++],s=31&a,c=64&a,l=c?2+s*3:0,u=new Uint8Array(l);if(c){u[0]=a;for(let e=1;e<l;e++)u[e]=i[t++]}r.push({type:e,payloadType:o,pts:n,bytes:u})}}}}}else if(o===5&&s>16){let e=[];for(let n=0;n<16;n++){let r=i[t++].toString(16);e.push(r.length==1?`0`+r:r),(n===3||n===5||n===7||n===9)&&e.push(`-`)}let a=s-16,c=new Uint8Array(a);for(let e=0;e<a;e++)c[e]=i[t++];r.push({payloadType:o,pts:n,uuid:e.join(``),userData:L(c),userDataBytes:c})}}}function He(e){let t=e.byteLength,n=[],r=1;for(;r<t-2;)e[r]===0&&e[r+1]===0&&e[r+2]===3?(n.push(r+2),r+=2):r++;if(n.length===0)return e;let i=t-n.length,a=new Uint8Array(i),o=0;for(r=0;r<i;o++,r++)o===n[0]&&(o++,n.shift()),a[r]=e[o];return a}function Ue(e){let t=e[0],n=``,r=``,i=0,a=0,o=0,s=0,c=0,l=0;if(t===0){for(;V(e.subarray(l,l+1))!==`\0`;)n+=V(e.subarray(l,l+1)),l+=1;for(n+=V(e.subarray(l,l+1)),l+=1;V(e.subarray(l,l+1))!==`\0`;)r+=V(e.subarray(l,l+1)),l+=1;r+=V(e.subarray(l,l+1)),l+=1,i=H(e,12),a=H(e,16),s=H(e,20),c=H(e,24),l=28}else if(t===1){l+=4,i=H(e,l),l+=4;let t=H(e,l);l+=4;let a=H(e,l);for(l+=4,o=2**32*t+a,m(o)||(o=2**53-1,I.warn(`Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box`)),s=H(e,l),l+=4,c=H(e,l),l+=4;V(e.subarray(l,l+1))!==`\0`;)n+=V(e.subarray(l,l+1)),l+=1;for(n+=V(e.subarray(l,l+1)),l+=1;V(e.subarray(l,l+1))!==`\0`;)r+=V(e.subarray(l,l+1)),l+=1;r+=V(e.subarray(l,l+1)),l+=1}let u=e.subarray(l,e.byteLength);return{schemeIdUri:n,value:r,timeScale:i,presentationTime:o,presentationTimeDelta:a,eventDuration:s,id:c,payload:u}}function We(e,...t){let n=t.length,r=8,i=n;for(;i--;)r+=t[i].byteLength;let a=new Uint8Array(r);for(a[0]=r>>24&255,a[1]=r>>16&255,a[2]=r>>8&255,a[3]=r&255,a.set(e,4),i=0,r=8;i<n;i++)a.set(t[i],r),r+=t[i].byteLength;return a}function Ge(e,t,n){if(e.byteLength!==16)throw RangeError(`Invalid system id`);let r,i;r=0,i=new Uint8Array;let a;r>0?(a=new Uint8Array(4),t.length>0&&new DataView(a.buffer).setUint32(0,t.length,!1)):a=new Uint8Array;let o=new Uint8Array(4);return n.byteLength>0&&new DataView(o.buffer).setUint32(0,n.byteLength,!1),We([112,115,115,104],new Uint8Array([r,0,0,0]),e,a,i,o,n)}function Ke(e){let t=[];if(e instanceof ArrayBuffer){let n=e.byteLength,r=0;for(;r+32<n;){let n=qe(new DataView(e,r));t.push(n),r+=n.size}}return t}function qe(e){let t=e.getUint32(0),n=e.byteOffset,r=e.byteLength;if(r<t)return{offset:n,size:r};if(e.getUint32(4)!==1886614376)return{offset:n,size:t};let i=e.getUint32(8)>>>24;if(i!==0&&i!==1)return{offset:n,size:t};let a=e.buffer,o=R(new Uint8Array(a,n+12,16)),s=null,c=null,l=0;if(i===0)l=28;else{let i=e.getUint32(28);if(!i||r<32+i*16)return{offset:n,size:t};s=[];for(let e=0;e<i;e++)s.push(new Uint8Array(a,n+32+e*16,16));l=32+i*16}if(!l)return{offset:n,size:t};let u=e.getUint32(l);return t-32<u?{offset:n,size:t}:(c=new Uint8Array(a,n+l+4,u),{version:i,systemId:o,kids:s,data:c,offset:n,size:t})}var Je=()=>/\(Windows.+Firefox\//i.test(navigator.userAgent),Ye={audio:{a3ds:1,"ac-3":.95,"ac-4":1,alac:.9,alaw:1,dra1:1,"dts+":1,"dts-":1,dtsc:1,dtse:1,dtsh:1,"ec-3":.9,enca:1,fLaC:.9,flac:.9,FLAC:.9,g719:1,g726:1,m4ae:1,mha1:1,mha2:1,mhm1:1,mhm2:1,mlpa:1,mp4a:1,"raw ":1,Opus:1,opus:1,samr:1,sawb:1,sawp:1,sevc:1,sqcp:1,ssmv:1,twos:1,ulaw:1},video:{avc1:1,avc2:1,avc3:1,avc4:1,avcp:1,av01:.8,dav1:.8,drac:1,dva1:1,dvav:1,dvh1:.7,dvhe:.7,encv:1,hev1:.75,hvc1:.75,mjp2:1,mp4v:1,mvc1:1,mvc2:1,mvc3:1,mvc4:1,resv:1,rv60:1,s263:1,svc1:1,svc2:1,"vc-1":1,vp08:1,vp09:.9},text:{stpp:1,wvtt:1}};function Xe(e,t){let n=Ye[t];return!!n&&!!n[e.slice(0,4)]}function Ze(e,t,n=!0){return!e.split(`,`).some(e=>!Qe(e,t,n))}function Qe(e,t,n=!0){return te(n)?.isTypeSupported($e(e,t))??!1}function $e(e,t){return`${t}/mp4;codecs=${e}`}function et(e){if(e){let t=e.substring(0,4);return Ye.video[t]}return 2}function tt(e){let t=Je();return e.split(`,`).reduce((e,n)=>{let r=t&&ze(n)?9:Ye.video[n];return r?(r*2+e)/(e?3:2):(Ye.audio[n]+e)/(e?2:1)},0)}var nt={};function rt(e,t=!0){if(nt[e])return nt[e];let n={flac:[`flac`,`fLaC`,`FLAC`],opus:[`opus`,`Opus`],"mp4a.40.34":[`mp3`]}[e];for(let i=0;i<n.length;i++){var r;if(Qe(n[i],`audio`,t))return nt[e]=n[i],n[i];if(n[i]===`mp3`&&(r=te(t))!=null&&r.isTypeSupported(`audio/mpeg`))return``}return e}var it=/flac|opus|mp4a\.40\.34/i;function at(e,t=!0){return e.replace(it,e=>rt(e.toLowerCase(),t))}function ot(e,t){let n=[];if(e){let t=e.split(`,`);for(let e=0;e<t.length;e++)Xe(t[e],`video`)||n.push(t[e])}return t&&n.push(t),n.join(`,`)}function st(e,t){if(e&&(e.length>4||[`ac-3`,`ec-3`,`alac`,`fLaC`,`Opus`].indexOf(e)!==-1)&&(ct(e,`audio`)||ct(e,`video`)))return e;if(t){let n=t.split(`,`);if(n.length>1){if(e){for(let t=n.length;t--;)if(n[t].substring(0,4)===e.substring(0,4))return n[t]}return n[0]}}return t||e}function ct(e,t){return Xe(e,t)&&Qe(e,t)}function lt(e){let t=e.split(`,`);for(let e=0;e<t.length;e++){let n=t[e].split(`.`);n.length>2&&n[0]===`avc1`&&(t[e]=`avc1.${parseInt(n[1]).toString(16)}${(`000`+parseInt(n[2]).toString(16)).slice(-4)}`)}return t.join(`,`)}function ut(e){if(e.startsWith(`av01.`)){let t=e.split(`.`),n=[`0`,`111`,`01`,`01`,`01`,`0`];for(let e=t.length;e>4&&e<10;e++)t[e]=n[e-4];return t.join(`.`)}return e}function dt(e){let t=te(e)||{isTypeSupported:()=>!1};return{mpeg:t.isTypeSupported(`audio/mpeg`),mp3:t.isTypeSupported(`audio/mp4; codecs="mp3"`),ac3:t.isTypeSupported(`audio/mp4; codecs="ac-3"`)}}function ft(e){return e.replace(/^.+codecs=["']?([^"']+).*$/,`$1`)}var pt={supported:!0,powerEfficient:!0,smooth:!0},mt={supported:!1,smooth:!1,powerEfficient:!1},ht={supported:!0,configurations:[],decodingInfoResults:[pt]};function gt(e,t){return{supported:!1,configurations:t,decodingInfoResults:[mt],error:e}}function _t(e,t,n,r,i,a){let o=e.videoCodec,s=e.audioCodec?e.audioGroups:null,c=a?.audioCodec,l=a?.channels,u=l?parseInt(l):c?1/0:2,d=null;if(s!=null&&s.length)try{d=s.length===1&&s[0]?t.groups[s[0]].channels:s.reduce((e,n)=>{if(n){let r=t.groups[n];if(!r)throw Error(`Audio track group ${n} not found`);Object.keys(r.channels).forEach(t=>{e[t]=(e[t]||0)+r.channels[t]})}return e},{2:0})}catch{return!0}return o!==void 0&&(o.split(`,`).some(e=>ze(e))||e.width>1920&&e.height>1088||e.height>1920&&e.width>1088||e.frameRate>Math.max(r,30)||e.videoRange!==`SDR`&&e.videoRange!==n||e.bitrate>Math.max(i,8e6))||!!d&&p(u)&&Object.keys(d).some(e=>parseInt(e)>u)}function vt(e,t,n,r={}){let i=e.videoCodec;if(!i&&!e.audioCodec||!n)return Promise.resolve(ht);let a=[],o=yt(e),s=o.length,c=bt(e,t,s>0),l=c.length;for(let e=s||1*l||1;e--;){let t={type:`media-source`};if(s&&(t.video=o[e%s]),l){t.audio=c[e%l];let n=t.audio.bitrate;t.video&&n&&(t.video.bitrate-=n)}a.push(t)}if(i){let e=navigator.userAgent;if(i.split(`,`).some(e=>ze(e))&&Je())return Promise.resolve(gt(Error(`Overriding Windows Firefox HEVC MediaCapabilities result based on user-agent string: (${e})`),a))}return Promise.all(a.map(e=>{let t=Ct(e);return r[t]||(r[t]=n.decodingInfo(e))})).then(e=>({supported:!e.some(e=>!e.supported),configurations:a,decodingInfoResults:e})).catch(e=>({supported:!1,configurations:a,decodingInfoResults:[],error:e}))}function yt(e){let t=e.videoCodec?.split(`,`),n=St(e),r=e.width||640,i=e.height||480,a=e.frameRate||30,o=e.videoRange.toLowerCase();return t?t.map(e=>{let t={contentType:$e(ut(e),`video`),width:r,height:i,bitrate:n,framerate:a};return o!==`sdr`&&(t.transferFunction=o),t}):[]}function bt(e,t,n){let r=e.audioCodec?.split(`,`),i=St(e);return r&&e.audioGroups?e.audioGroups.reduce((e,a)=>{let o=a?t.groups[a]?.tracks:null;return o?o.reduce((e,t)=>{if(t.groupId===a){let a=parseFloat(t.channels||``);r.forEach(t=>{let r={contentType:$e(t,`audio`),bitrate:n?xt(t,i):i};a&&(r.channels=``+a),e.push(r)})}return e},e):e},[]):[]}function xt(e,t){if(t<=1)return 1;let n=128e3;return e===`ec-3`?n=768e3:e===`ac-3`&&(n=64e4),Math.min(t/2,n)}function St(e){return Math.ceil(Math.max(e.bitrate*.9,e.averageBitrate)/1e3)*1e3||1}function Ct(e){let t=``,{audio:n,video:r}=e;if(r){let e=ft(r.contentType);t+=`${e}_r${r.height}x${r.width}f${Math.ceil(r.framerate)}${r.transferFunction||`sd`}_${Math.ceil(r.bitrate/1e5)}`}if(n){let e=ft(n.contentType);t+=`${r?`_`:``}${e}_c${n.channels}`}return t}var wt=[`NONE`,`TYPE-0`,`TYPE-1`,null];function Tt(e){return wt.indexOf(e)>-1}var Et=[`SDR`,`PQ`,`HLG`];function Dt(e){return!!e&&Et.indexOf(e)>-1}var Ot={No:``,Yes:`YES`,v2:`v2`};function kt(e){let{canSkipUntil:t,canSkipDateRanges:n,age:r}=e,i=r<t/2;return t&&i?n?Ot.v2:Ot.Yes:Ot.No}var At=class{constructor(e,t,n){this.msn=void 0,this.part=void 0,this.skip=void 0,this.msn=e,this.part=t,this.skip=n}addDirectives(e){let t=new self.URL(e);return this.msn!==void 0&&t.searchParams.set(`_HLS_msn`,this.msn.toString()),this.part!==void 0&&t.searchParams.set(`_HLS_part`,this.part.toString()),this.skip&&t.searchParams.set(`_HLS_skip`,this.skip),t.href}},jt=class{constructor(e){if(this._attrs=void 0,this.audioCodec=void 0,this.bitrate=void 0,this.codecSet=void 0,this.url=void 0,this.frameRate=void 0,this.height=void 0,this.id=void 0,this.name=void 0,this.supplemental=void 0,this.videoCodec=void 0,this.width=void 0,this.details=void 0,this.fragmentError=0,this.loadError=0,this.loaded=void 0,this.realBitrate=0,this.supportedPromise=void 0,this.supportedResult=void 0,this._avgBitrate=0,this._audioGroups=void 0,this._subtitleGroups=void 0,this._urlId=0,this.url=[e.url],this._attrs=[e.attrs],this.bitrate=e.bitrate,e.details&&(this.details=e.details),this.id=e.id||0,this.name=e.name,this.width=e.width||0,this.height=e.height||0,this.frameRate=e.attrs.optionalFloat(`FRAME-RATE`,0),this._avgBitrate=e.attrs.decimalInteger(`AVERAGE-BANDWIDTH`),this.audioCodec=e.audioCodec,this.videoCodec=e.videoCodec,this.codecSet=[e.videoCodec,e.audioCodec].filter(e=>!!e).map(e=>e.substring(0,4)).join(`,`),`supplemental`in e){this.supplemental=e.supplemental;let t=e.supplemental?.videoCodec;t&&t!==e.videoCodec&&(this.codecSet+=`,${t.substring(0,4)}`)}this.addGroupId(`audio`,e.attrs.AUDIO),this.addGroupId(`text`,e.attrs.SUBTITLES)}get maxBitrate(){return Math.max(this.realBitrate,this.bitrate)}get averageBitrate(){return this._avgBitrate||this.realBitrate||this.bitrate}get attrs(){return this._attrs[0]}get codecs(){return this.attrs.CODECS||``}get pathwayId(){return this.attrs[`PATHWAY-ID`]||`.`}get videoRange(){return this.attrs[`VIDEO-RANGE`]||`SDR`}get score(){return this.attrs.optionalFloat(`SCORE`,0)}get uri(){return this.url[0]||``}hasAudioGroup(e){return Mt(this._audioGroups,e)}hasSubtitleGroup(e){return Mt(this._subtitleGroups,e)}get audioGroups(){return this._audioGroups}get subtitleGroups(){return this._subtitleGroups}addGroupId(e,t){if(t){if(e===`audio`){let e=this._audioGroups;e||=this._audioGroups=[],e.indexOf(t)===-1&&e.push(t)}else if(e===`text`){let e=this._subtitleGroups;e||=this._subtitleGroups=[],e.indexOf(t)===-1&&e.push(t)}}}get urlId(){return 0}set urlId(e){}get audioGroupIds(){return this.audioGroups?[this.audioGroupId]:void 0}get textGroupIds(){return this.subtitleGroups?[this.textGroupId]:void 0}get audioGroupId(){return this.audioGroups?.[0]}get textGroupId(){return this.subtitleGroups?.[0]}addFallback(){}};function Mt(e,t){return!t||!e?!1:e.indexOf(t)!==-1}function Nt(){if(typeof matchMedia==`function`){let e=matchMedia(`(dynamic-range: high)`),t=matchMedia(`bad query`);if(e.media!==t.media)return e.matches===!0}return!1}function Pt(e,t){let n=!1,r=[];if(e&&(n=e!==`SDR`,r=[e]),t){r=t.allowedVideoRanges||Et.slice(0);let e=r.join(``)!==`SDR`&&!t.videoCodec;n=t.preferHDR===void 0?e&&Nt():t.preferHDR,n||(r=[`SDR`])}return{preferHDR:n,allowedVideoRanges:r}}var Ft=e=>{let t=new WeakSet;return(n,r)=>{if(e&&(r=e(n,r)),typeof r==`object`&&r){if(t.has(r))return;t.add(r)}return r}},W=(e,t)=>JSON.stringify(e,Ft(t));function It(e,t,n,r,i){let a=Object.keys(e),o=r?.channels,s=r?.audioCodec,c=i?.videoCodec,l=o&&parseInt(o)===2,u=!1,d=!1,f=1/0,m=1/0,h=1/0,g=1/0,_=0,v=[],{preferHDR:y,allowedVideoRanges:b}=Pt(t,i);for(let t=a.length;t--;){let n=e[a[t]];u||=n.channels[2]>0,f=Math.min(f,n.minHeight),m=Math.min(m,n.minFramerate),h=Math.min(h,n.minBitrate),b.filter(e=>n.videoRanges[e]>0).length>0&&(d=!0)}f=p(f)?f:0,m=p(m)?m:0;let x=Math.max(1080,f),S=Math.max(30,m);h=p(h)?h:n,n=Math.max(h,n),d||(t=void 0);let C=a.length>1;return{codecSet:a.reduce((t,r)=>{let i=e[r];if(r===t)return t;if(v=d?b.filter(e=>i.videoRanges[e]>0):[],C){if(i.minBitrate>n)return Lt(r,`min bitrate of ${i.minBitrate} > current estimate of ${n}`),t;if(!i.hasDefaultAudio)return Lt(r,`no renditions with default or auto-select sound found`),t;if(s&&r.indexOf(s.substring(0,4))%5!=0)return Lt(r,`audio codec preference "${s}" not found`),t;if(o&&!l){if(!i.channels[o])return Lt(r,`no renditions with ${o} channel sound found (channels options: ${Object.keys(i.channels)})`),t}else if((!s||l)&&u&&i.channels[2]===0)return Lt(r,`no renditions with stereo sound found`),t;if(i.minHeight>x)return Lt(r,`min resolution of ${i.minHeight} > maximum of ${x}`),t;if(i.minFramerate>S)return Lt(r,`min framerate of ${i.minFramerate} > maximum of ${S}`),t;if(!v.some(e=>i.videoRanges[e]>0))return Lt(r,`no variants with VIDEO-RANGE of ${W(v)} found`),t;if(c&&r.indexOf(c.substring(0,4))%5!=0)return Lt(r,`video codec preference "${c}" not found`),t;if(i.maxScore<_)return Lt(r,`max score of ${i.maxScore} < selected max of ${_}`),t}return t&&(tt(r)>=tt(t)||i.fragmentError>e[t].fragmentError)?t:(g=i.minIndex,_=i.maxScore,r)},void 0),videoRanges:v,preferHDR:y,minFramerate:m,minBitrate:h,minIndex:g}}function Lt(e,t){I.log(`[abr] start candidates with "${e}" ignored because ${t}`)}function Rt(e){return e.reduce((e,t)=>{let n=e.groups[t.groupId];n||=e.groups[t.groupId]={tracks:[],channels:{2:0},hasDefault:!1,hasAutoSelect:!1},n.tracks.push(t);let r=t.channels||`2`;return n.channels[r]=(n.channels[r]||0)+1,n.hasDefault=n.hasDefault||t.default,n.hasAutoSelect=n.hasAutoSelect||t.autoselect,n.hasDefault&&(e.hasDefaultAudio=!0),n.hasAutoSelect&&(e.hasAutoSelectAudio=!0),e},{hasDefaultAudio:!1,hasAutoSelectAudio:!1,groups:{}})}function zt(e,t,n,r){return e.slice(n,r+1).reduce((e,n,r)=>{if(!n.codecSet)return e;let i=n.audioGroups,a=e[n.codecSet];a||(e[n.codecSet]=a={minBitrate:1/0,minHeight:1/0,minFramerate:1/0,minIndex:r,maxScore:0,videoRanges:{SDR:0},channels:{2:0},hasDefaultAudio:!i,fragmentError:0}),a.minBitrate=Math.min(a.minBitrate,n.bitrate);let o=Math.min(n.height,n.width);return a.minHeight=Math.min(a.minHeight,o),a.minFramerate=Math.min(a.minFramerate,n.frameRate),a.minIndex=Math.min(a.minIndex,r),a.maxScore=Math.max(a.maxScore,n.score),a.fragmentError+=n.fragmentError,a.videoRanges[n.videoRange]=(a.videoRanges[n.videoRange]||0)+1,i&&i.forEach(e=>{if(!e)return;let n=t.groups[e];n&&(a.hasDefaultAudio=a.hasDefaultAudio||t.hasDefaultAudio?n.hasDefault:n.hasAutoSelect||!t.hasDefaultAudio&&!t.hasAutoSelectAudio,Object.keys(n.channels).forEach(e=>{a.channels[e]=(a.channels[e]||0)+n.channels[e]}))}),e},{})}function Bt(e){if(!e)return e;let{lang:t,assocLang:n,characteristics:r,channels:i,audioCodec:a}=e;return{lang:t,assocLang:n,characteristics:r,channels:i,audioCodec:a}}function Vt(e,t,n){if(`attrs`in e){let n=t.indexOf(e);if(n!==-1)return n}for(let r=0;r<t.length;r++){let i=t[r];if(Ht(e,i,n))return r}return-1}function Ht(e,t,n){let{groupId:r,name:i,lang:a,assocLang:o,default:s}=e,c=e.forced;return(r===void 0||t.groupId===r)&&(i===void 0||t.name===i)&&(a===void 0||Ut(a,t.lang))&&(a===void 0||t.assocLang===o)&&(s===void 0||t.default===s)&&(c===void 0||t.forced===c)&&(!(`characteristics`in e)||Wt(e.characteristics||``,t.characteristics))&&(n===void 0||n(e,t))}function Ut(e,t=`--`){return e.length===t.length?e===t:e.startsWith(t)||t.startsWith(e)}function Wt(e,t=``){let n=e.split(`,`),r=t.split(`,`);return n.length===r.length&&!n.some(e=>r.indexOf(e)===-1)}function Gt(e,t){let{audioCodec:n,channels:r}=e;return(n===void 0||(t.audioCodec||``).substring(0,4)===n.substring(0,4))&&(r===void 0||r===(t.channels||`2`))}function Kt(e,t,n,r,i){let a=t[r],o=t.reduce((e,t,n)=>{let r=t.uri;return(e[r]||(e[r]=[])).push(n),e},{})[a.uri];o.length>1&&(r=Math.max.apply(Math,o));let s=a.videoRange,c=a.frameRate,l=a.codecSet.substring(0,4),u=qt(t,r,t=>{if(t.videoRange!==s||t.frameRate!==c||t.codecSet.substring(0,4)!==l)return!1;let r=t.audioGroups;return Vt(e,n.filter(e=>!r||r.indexOf(e.groupId)!==-1),i)>-1});return u>-1?u:qt(t,r,t=>{let r=t.audioGroups;return Vt(e,n.filter(e=>!r||r.indexOf(e.groupId)!==-1),i)>-1})}function qt(e,t,n){for(let r=t;r>-1;r--)if(n(e[r]))return r;for(let r=t+1;r<e.length;r++)if(n(e[r]))return r;return-1}function Jt(e,t){return!!e&&e!==t.loadLevelObj?.uri}var Yt=class extends k{constructor(e){super(`abr`,e.logger),this.hls=void 0,this.lastLevelLoadSec=0,this.lastLoadedFragLevel=-1,this.firstSelection=-1,this._nextAutoLevel=-1,this.nextAutoLevelKey=``,this.audioTracksByGroup=null,this.codecTiers=null,this.timer=-1,this.fragCurrent=null,this.partCurrent=null,this.bitrateTestDelay=0,this.rebufferNotice=-1,this.supportedCache={},this.bwEstimator=void 0,this._abandonRulesCheck=e=>{let{fragCurrent:t,partCurrent:n,hls:r}=this,{autoLevelEnabled:i,media:a}=r;if(!t||!a)return;let o=performance.now(),s=n?n.stats:t.stats,c=n?n.duration:t.duration,l=o-s.loading.start,u=r.minAutoLevel,d=t.level,f=this._nextAutoLevel;if(s.aborted||s.loaded&&s.loaded===s.total||d<=u){this.clearTimer(),this._nextAutoLevel=-1;return}if(!i)return;let m=f>-1&&f!==d,h=!!e||m;if(!h&&(a.paused||!a.playbackRate||!a.readyState))return;let g=r.mainForwardBufferInfo;if(!h&&g===null)return;let _=this.bwEstimator.getEstimateTTFB(),y=Math.abs(a.playbackRate);if(l<=Math.max(_,1e3*(c/(y*2))))return;let b=g?g.len/y:0,x=s.loading.first?s.loading.first-s.loading.start:-1,S=s.loaded&&x>-1,C=this.getBwEstimate(),w=r.levels,T=w[d],E=Math.max(s.loaded,Math.round(c*(t.bitrate||T.averageBitrate)/8)),D=S?l-x:l;D<1&&S&&(D=Math.min(l,s.loaded*8/C));let O=S?s.loaded*1e3/D:0,k=_/1e3,A=O?(E-s.loaded)/O:E*8/C+k;if(A<=b)return;let j=O?O*8:C,M=(e?.details||this.hls.latestLevelDetails)?.live===!0,N=this.hls.config.abrBandWidthUpFactor,P=1/0,F;for(F=d-1;F>u;F--){let e=w[F].maxBitrate,t=!w[F].details||M;if(P=this.getTimeToLoadFrag(k,j,c*e,t),P<Math.min(b,c+k))break}if(P>=A||P>c*10)return;S?this.bwEstimator.sample(l-Math.min(_,x),s.loaded):this.bwEstimator.sampleTTFB(l);let ee=w[F].maxBitrate;this.getBwEstimate()*N>ee&&this.resetEstimator(ee);let I=this.findBestLevel(ee,u,F,0,b,1,1);I>-1&&(F=I),this.warn(`Fragment ${t.sn}${n?` part `+n.index:``} of level ${d} is loading too slowly;
|
|
2
|
+
Fragment duration: ${t.duration.toFixed(3)}
|
|
3
|
+
Time to underbuffer: ${b.toFixed(3)} s
|
|
4
|
+
Estimated load time for current fragment: ${A.toFixed(3)} s
|
|
5
|
+
Estimated load time for down switch fragment: ${P.toFixed(3)} s
|
|
6
|
+
TTFB estimate: ${x|0} ms
|
|
7
|
+
Current BW estimate: ${p(C)?C|0:`Unknown`} bps
|
|
8
|
+
New BW estimate: ${this.getBwEstimate()|0} bps
|
|
9
|
+
Switching to level ${F} @ ${ee|0} bps`),r.nextLoadLevel=r.nextAutoLevel=F,this.clearTimer();let te=()=>{if(this.clearTimer(),this.fragCurrent===t&&this.hls.loadLevel===F&&F>0){let e=this.getStarvationDelay();if(this.warn(`Aborting inflight request ${F>0?`and switching down`:``}
|
|
10
|
+
Fragment duration: ${t.duration.toFixed(3)} s
|
|
11
|
+
Time to underbuffer: ${e.toFixed(3)} s`),t.abortRequests(),this.fragCurrent=this.partCurrent=null,F>u){let t=this.findBestLevel(this.hls.levels[u].bitrate,u,F,0,e,1,1);t===-1&&(t=u),this.hls.nextLoadLevel=this.hls.nextAutoLevel=t,this.resetEstimator(this.hls.levels[t].bitrate)}}};m||A>P*2?te():this.timer=self.setInterval(te,P*1e3),r.trigger(v.FRAG_LOAD_EMERGENCY_ABORTED,{frag:t,part:n,stats:s})},this.hls=e,this.bwEstimator=this.initEstimator(),this.registerListeners()}resetEstimator(e){e&&(this.log(`setting initial bwe to ${e}`),this.hls.config.abrEwmaDefaultEstimate=e),this.firstSelection=-1,this.bwEstimator=this.initEstimator()}initEstimator(){let e=this.hls.config;return new S(e.abrEwmaSlowVoD,e.abrEwmaFastVoD,e.abrEwmaDefaultEstimate)}registerListeners(){let{hls:e}=this;e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.FRAG_LOADING,this.onFragLoading,this),e.on(v.FRAG_LOADED,this.onFragLoaded,this),e.on(v.FRAG_BUFFERED,this.onFragBuffered,this),e.on(v.LEVEL_SWITCHING,this.onLevelSwitching,this),e.on(v.LEVEL_LOADED,this.onLevelLoaded,this),e.on(v.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(v.MAX_AUTO_LEVEL_UPDATED,this.onMaxAutoLevelUpdated,this),e.on(v.ERROR,this.onError,this)}unregisterListeners(){let{hls:e}=this;e&&(e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.FRAG_LOADING,this.onFragLoading,this),e.off(v.FRAG_LOADED,this.onFragLoaded,this),e.off(v.FRAG_BUFFERED,this.onFragBuffered,this),e.off(v.LEVEL_SWITCHING,this.onLevelSwitching,this),e.off(v.LEVEL_LOADED,this.onLevelLoaded,this),e.off(v.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(v.MAX_AUTO_LEVEL_UPDATED,this.onMaxAutoLevelUpdated,this),e.off(v.ERROR,this.onError,this))}destroy(){this.unregisterListeners(),this.clearTimer(),this.hls=this._abandonRulesCheck=this.supportedCache=null,this.fragCurrent=this.partCurrent=null}onManifestLoading(e,t){this.lastLoadedFragLevel=-1,this.firstSelection=-1,this.lastLevelLoadSec=0,this.supportedCache={},this.fragCurrent=this.partCurrent=null,this.onLevelsUpdated(),this.clearTimer()}onLevelsUpdated(){this.lastLoadedFragLevel>-1&&this.fragCurrent&&(this.lastLoadedFragLevel=this.fragCurrent.level),this._nextAutoLevel=-1,this.onMaxAutoLevelUpdated(),this.codecTiers=null,this.audioTracksByGroup=null}onMaxAutoLevelUpdated(){this.firstSelection=-1,this.nextAutoLevelKey=``}onFragLoading(e,t){let n=t.frag;this.ignoreFragment(n)||(n.bitrateTest||(this.fragCurrent=n,this.partCurrent=t.part??null),this.clearTimer(),this.timer=self.setInterval(this._abandonRulesCheck,100))}onLevelSwitching(e,t){this.clearTimer()}onError(e,t){if(!t.fatal)switch(t.details){case _.BUFFER_ADD_CODEC_ERROR:case _.BUFFER_APPEND_ERROR:this.lastLoadedFragLevel=-1,this.firstSelection=-1;break;case _.FRAG_LOAD_TIMEOUT:{let e=t.frag,{fragCurrent:n,partCurrent:r}=this;if(e&&n&&e.sn===n.sn&&e.level===n.level){let t=performance.now(),n=r?r.stats:e.stats,i=t-n.loading.start,a=n.loading.first?n.loading.first-n.loading.start:-1;if(n.loaded&&a>-1){let e=this.bwEstimator.getEstimateTTFB();this.bwEstimator.sample(i-Math.min(e,a),n.loaded)}else this.bwEstimator.sampleTTFB(i)}break}}}getTimeToLoadFrag(e,t,n,r){return e+n/t+(r?e+this.lastLevelLoadSec:0)}onLevelLoaded(e,t){let n=this.hls.config,{loading:r}=t.stats,i=r.end-r.first;p(i)&&(this.lastLevelLoadSec=i/1e3),t.details.live?this.bwEstimator.update(n.abrEwmaSlowLive,n.abrEwmaFastLive):this.bwEstimator.update(n.abrEwmaSlowVoD,n.abrEwmaFastVoD),this.timer>-1&&this._abandonRulesCheck(t.levelInfo)}onFragLoaded(e,{frag:t,part:n}){let r=n?n.stats:t.stats;if(t.type===b.MAIN&&this.bwEstimator.sampleTTFB(r.loading.first-r.loading.start),!this.ignoreFragment(t)){if(this.clearTimer(),t.level===this._nextAutoLevel&&(this._nextAutoLevel=-1),this.firstSelection=-1,this.hls.config.abrMaxWithRealBitrate){let e=n?n.duration:t.duration,i=this.hls.levels[t.level],a=(i.loaded?i.loaded.bytes:0)+r.loaded,o=(i.loaded?i.loaded.duration:0)+e;i.loaded={bytes:a,duration:o},i.realBitrate=Math.round(8*a/o)}if(t.bitrateTest){let e={stats:r,frag:t,part:n,id:t.type};this.onFragBuffered(v.FRAG_BUFFERED,e),t.bitrateTest=!1}else this.lastLoadedFragLevel=t.level}}onFragBuffered(e,t){let{frag:n,part:r}=t,i=r!=null&&r.stats.loaded?r.stats:n.stats;if(i.aborted||this.ignoreFragment(n))return;let a=i.parsing.end-i.loading.start-Math.min(i.loading.first-i.loading.start,this.bwEstimator.getEstimateTTFB());this.bwEstimator.sample(a,i.loaded),i.bwEstimate=this.getBwEstimate(),n.bitrateTest?this.bitrateTestDelay=a/1e3:this.bitrateTestDelay=0}ignoreFragment(e){return e.type!==b.MAIN||e.sn===`initSegment`}clearTimer(){this.timer>-1&&(self.clearInterval(this.timer),this.timer=-1)}get firstAutoLevel(){let{maxAutoLevel:e,minAutoLevel:t}=this.hls,n=this.getBwEstimate(),r=this.hls.config.maxStarvationDelay,i=this.findBestLevel(n,t,e,0,r,1,1);if(i>-1)return i;let a=this.hls.firstLevel,o=Math.min(Math.max(a,t),e);return this.warn(`Could not find best starting auto level. Defaulting to first in playlist ${a} clamped to ${o}`),o}get forcedAutoLevel(){return this.nextAutoLevelKey?-1:this._nextAutoLevel}get nextAutoLevel(){let e=this.forcedAutoLevel,t=this.bwEstimator.canEstimate(),n=this.lastLoadedFragLevel>-1;if(e!==-1&&(!t||!n||this.nextAutoLevelKey===this.getAutoLevelKey()))return e;let r=t&&n?this.getNextABRAutoLevel():this.firstAutoLevel;if(e!==-1){let t=this.hls.levels;if(t.length>Math.max(e,r)&&t[e].loadError<=t[r].loadError)return e}return this._nextAutoLevel=r,this.nextAutoLevelKey=this.getAutoLevelKey(),r}getAutoLevelKey(){return`${this.getBwEstimate()}_${this.getStarvationDelay().toFixed(2)}`}getNextABRAutoLevel(){let{fragCurrent:e,partCurrent:t,hls:n}=this;if(n.levels.length<=1)return n.loadLevel;let{maxAutoLevel:r,config:i,minAutoLevel:a}=n,o=t?t.duration:e?e.duration:0,s=this.getBwEstimate(),c=this.getStarvationDelay(),l=i.abrBandWidthFactor,u=i.abrBandWidthUpFactor;if(c){let e=this.findBestLevel(s,a,r,c,0,l,u);if(e>=0)return this.rebufferNotice=-1,e}let d=o?Math.min(o,i.maxStarvationDelay):i.maxStarvationDelay;if(!c){let e=this.bitrateTestDelay;e&&(d=(o?Math.min(o,i.maxLoadingDelay):i.maxLoadingDelay)-e,this.info(`bitrate test took ${Math.round(1e3*e)}ms, set first fragment max fetchDuration to ${Math.round(1e3*d)} ms`),l=u=1)}let f=this.findBestLevel(s,a,r,c,d,l,u);if(this.rebufferNotice!==f&&(this.rebufferNotice=f,this.info(`${c?`rebuffering expected`:`buffer is empty`}, optimal quality level ${f}`)),f>-1)return f;let p=n.levels[a],m=n.loadLevelObj;return m&&p?.bitrate<m.bitrate?a:n.loadLevel}getStarvationDelay(){let e=this.hls,t=e.media;if(!t)return 1/0;let n=t&&t.playbackRate!==0?Math.abs(t.playbackRate):1,r=e.mainForwardBufferInfo;return(r?r.len:0)/n}getBwEstimate(){return this.bwEstimator.canEstimate()?this.bwEstimator.getEstimate():this.hls.config.abrEwmaDefaultEstimate}findBestLevel(e,t,n,r,i,a,o){var s;let c=r+i,l=this.lastLoadedFragLevel,u=l===-1?this.hls.firstLevel:l,{fragCurrent:d,partCurrent:f}=this,{levels:m,allAudioTracks:h,loadLevel:g,config:_}=this.hls;if(m.length===1)return 0;let v=m[u],y=!!((s=this.hls.latestLevelDetails)!=null&&s.live),b=g===-1||l===-1,x,S=`SDR`,C=v?.frameRate||0,{audioPreference:w,videoPreference:T}=_,E=this.audioTracksByGroup||=Rt(h),D=-1;if(b){if(this.firstSelection!==-1)return this.firstSelection;let r=It(this.codecTiers||=zt(m,E,t,n),S,e,w,T),{codecSet:i,videoRanges:a,minFramerate:o,minBitrate:s,minIndex:c,preferHDR:l}=r;D=c,x=i,S=l?a[a.length-1]:a[0],C=o,e=Math.max(e,s),this.log(`picked start tier ${W(r)}`)}else x=v?.codecSet,S=v?.videoRange;let O=f?f.duration:d?d.duration:0,k=this.bwEstimator.getEstimateTTFB()/1e3,A=[];for(let s=n;s>=t;s--){var j;let t=m[s],d=s>u;if(!t)continue;if(_.useMediaCapabilities&&!t.supportedResult&&!t.supportedPromise){let n=navigator.mediaCapabilities;typeof n?.decodingInfo==`function`&&_t(t,E,S,C,e,w)?(t.supportedPromise=vt(t,E,n,this.supportedCache),t.supportedPromise.then(e=>{if(!this.hls)return;t.supportedResult=e;let n=this.hls.levels,r=n.indexOf(t);e.error?this.warn(`MediaCapabilities decodingInfo error: "${e.error}" for level ${r} ${W(e)}`):e.supported?e.decodingInfoResults.some(e=>e.smooth===!1||e.powerEfficient===!1)&&this.log(`MediaCapabilities decodingInfo for level ${r} not smooth or powerEfficient: ${W(e)}`):(this.warn(`Unsupported MediaCapabilities decodingInfo result for level ${r} ${W(e)}`),r>-1&&n.length>1&&(this.log(`Removing unsupported level ${r}`),this.hls.removeLevel(r),this.hls.loadLevel===-1&&(this.hls.nextLoadLevel=0)))}).catch(e=>{this.warn(`Error handling MediaCapabilities decodingInfo: ${e}`)})):t.supportedResult=ht}if((x&&t.codecSet!==x||S&&t.videoRange!==S||d&&C>t.frameRate||!d&&C>0&&C<t.frameRate||(j=t.supportedResult)!=null&&(j=j.decodingInfoResults)!=null&&j.some(e=>e.smooth===!1))&&(!b||s!==D)){A.push(s);continue}let h=t.details,v=(f?h?.partTarget:h?.averagetargetduration)||O,T;T=d?o*e:a*e;let M=O&&r>=O*2&&i===0?t.averageBitrate:t.maxBitrate,N=this.getTimeToLoadFrag(k,T,M*v,h===void 0);if(T>=M&&(s===l||t.loadError===0&&t.fragmentError===0)&&(N<=k||!p(N)||y&&!this.bitrateTestDelay||N<c)){let e=this.forcedAutoLevel;return s!==g&&(e===-1||e!==g)&&(A.length&&this.trace(`Skipped level(s) ${A.join(`,`)} of ${n} max with CODECS and VIDEO-RANGE:"${m[A[0]].codecs}" ${m[A[0]].videoRange}; not compatible with "${x}" ${S}`),this.info(`switch candidate:${u}->${s} adjustedbw(${Math.round(T)})-bitrate=${Math.round(T-M)} ttfb:${k.toFixed(1)} avgDuration:${v.toFixed(1)} maxFetchDuration:${c.toFixed(1)} fetchDuration:${N.toFixed(1)} firstSelection:${b} codecSet:${t.codecSet} videoRange:${t.videoRange} hls.loadLevel:${g}`)),b&&(this.firstSelection=s),s}}return-1}set nextAutoLevel(e){let t=this.deriveNextAutoLevel(e);this._nextAutoLevel!==t&&(this.nextAutoLevelKey=``,this._nextAutoLevel=t)}deriveNextAutoLevel(e){let{maxAutoLevel:t,minAutoLevel:n}=this.hls;return Math.min(Math.max(e,n),t)}},Xt={search:function(e,t){let n=0,r=e.length-1,i=null,a=null;for(;n<=r;){i=(n+r)/2|0,a=e[i];let o=t(a);if(o>0)n=i+1;else if(o<0)r=i-1;else return a}return null}};function Zt(e,t,n){if(t===null||!Array.isArray(e)||!e.length||!p(t)||t<(e[0].programDateTime||0)||t>=(e[e.length-1].endProgramDateTime||0))return null;for(let r=0;r<e.length;++r){let i=e[r];if(tn(t,n,i))return i}return null}function Qt(e,t,n=0,r=0,i=.005){let a=null;if(e){a=t[1+e.sn-t[0].sn]||null;let r=e.endDTS-n;r>0&&r<15e-7&&(n+=15e-7),a&&e.level!==a.level&&a.end<=e.end&&(a=t[2+e.sn-t[0].sn]||null)}else n===0&&t[0].start===0&&(a=t[0]);if(a&&((!e||e.level===a.level)&&en(n,r,a)===0||$t(a,e,Math.min(i,r))))return a;let o=Xt.search(t,en.bind(null,n,r));return o&&(o!==e||!a)?o:a}function $t(e,t,n){if(t&&t.start===0&&t.level<e.level&&(t.endPTS||0)>0){let r=t.tagList.reduce((e,t)=>(t[0]===`INF`&&(e+=parseFloat(t[1])),e),n);return e.start<=r}return!1}function en(e=0,t=0,n){if(n.start<=e&&n.start+n.duration>e)return 0;let r=Math.min(t,n.duration+(n.deltaPTS?n.deltaPTS:0));return n.start+n.duration-r<=e?1:n.start-r>e&&n.start?-1:0}function tn(e,t,n){let r=Math.min(t,n.duration+(n.deltaPTS?n.deltaPTS:0))*1e3;return(n.endProgramDateTime||0)-r>e}function nn(e,t,n){if(e&&e.startCC<=t&&e.endCC>=t){let r=e.fragments,{fragmentHint:i}=e;i&&(r=r.concat(i));let a;return Xt.search(r,e=>e.cc<t?1:e.cc>t?-1:(a=e,e.end<=n?1:e.start>n?-1:0)),a||null}return null}function rn(e){switch(e.details){case _.FRAG_LOAD_TIMEOUT:case _.KEY_LOAD_TIMEOUT:case _.LEVEL_LOAD_TIMEOUT:case _.MANIFEST_LOAD_TIMEOUT:return!0}return!1}function an(e){return e.details.startsWith(`key`)}function on(e){return an(e)&&!!e.frag&&!e.frag.decryptdata}function sn(e,t){let n=rn(t);return e.default[`${n?`timeout`:`error`}Retry`]}function cn(e,t){let n=e.backoff===`linear`?1:2**t;return Math.min(n*e.retryDelayMs,e.maxRetryDelayMs)}function ln(e){return E(E({},e),{errorRetry:null,timeoutRetry:null})}function un(e,t,n,r){if(!e)return!1;let i=r?.code,a=t<e.maxNumRetry&&(dn(i)||!!n);return e.shouldRetry?e.shouldRetry(e,t,n,r,a):a}function dn(e){return fn(e)||!!e&&(e<400||e>499)}function fn(e){return e===0&&navigator.onLine===!1}var G={DoNothing:0,SendEndCallback:1,SendAlternateToPenaltyBox:2,RemoveAlternatePermanently:3,InsertDiscontinuity:4,RetryRequest:5},pn={None:0,MoveAllAlternatesMatchingHost:1,MoveAllAlternatesMatchingHDCP:2,MoveAllAlternatesMatchingKey:4,SwitchToSDR:8},mn=class extends k{constructor(e){super(`error-controller`,e.logger),this.hls=void 0,this.playlistError=0,this.hls=e,this.registerListeners()}registerListeners(){let e=this.hls;e.on(v.ERROR,this.onError,this),e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.LEVEL_UPDATED,this.onLevelUpdated,this)}unregisterListeners(){let e=this.hls;e&&(e.off(v.ERROR,this.onError,this),e.off(v.ERROR,this.onErrorOut,this),e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.LEVEL_UPDATED,this.onLevelUpdated,this))}destroy(){this.unregisterListeners(),this.hls=null}startLoad(e){}stopLoad(){this.playlistError=0}getVariantLevelIndex(e){return e?.type===b.MAIN?e.level:this.getVariantIndex()}getVariantIndex(){var e;let t=this.hls,n=t.currentLevel;return(e=t.loadLevelObj)!=null&&e.details||n===-1?t.loadLevel:n}variantHasKey(e,t){if(e){var n;if((n=e.details)!=null&&n.hasKey(t))return!0;let r=e.audioGroups;if(r)return this.hls.allAudioTracks.filter(e=>r.indexOf(e.groupId)>=0).some(e=>e.details?.hasKey(t))}return!1}onManifestLoading(){this.playlistError=0}onLevelUpdated(){this.playlistError=0}onError(e,t){var n;if(t.fatal)return;let r=this.hls,i=t.context;switch(t.details){case _.FRAG_LOAD_ERROR:case _.FRAG_LOAD_TIMEOUT:case _.KEY_LOAD_ERROR:case _.KEY_LOAD_TIMEOUT:t.errorAction=this.getFragRetryOrSwitchAction(t);return;case _.FRAG_PARSING_ERROR:if((n=t.frag)!=null&&n.gap){t.errorAction=hn();return}case _.FRAG_GAP:case _.FRAG_DECRYPT_ERROR:t.errorAction=this.getFragRetryOrSwitchAction(t),t.errorAction.action=G.SendAlternateToPenaltyBox;return;case _.LEVEL_EMPTY_ERROR:case _.LEVEL_PARSING_ERROR:{var a;let e=t.parent===b.MAIN?t.level:r.loadLevel;t.details===_.LEVEL_EMPTY_ERROR&&(a=t.context)!=null&&(a=a.levelDetails)!=null&&a.live?t.errorAction=this.getPlaylistRetryOrSwitchAction(t,e):(t.levelRetry=!1,t.errorAction=this.getLevelSwitchAction(t,e))}return;case _.LEVEL_LOAD_ERROR:case _.LEVEL_LOAD_TIMEOUT:typeof i?.level==`number`&&(t.errorAction=this.getPlaylistRetryOrSwitchAction(t,i.level));return;case _.AUDIO_TRACK_LOAD_ERROR:case _.AUDIO_TRACK_LOAD_TIMEOUT:case _.SUBTITLE_LOAD_ERROR:case _.SUBTITLE_TRACK_LOAD_TIMEOUT:if(i){let e=r.loadLevelObj;if(e&&(i.type===y.AUDIO_TRACK&&e.hasAudioGroup(i.groupId)||i.type===y.SUBTITLE_TRACK&&e.hasSubtitleGroup(i.groupId))){t.errorAction=this.getPlaylistRetryOrSwitchAction(t,r.loadLevel),t.errorAction.action=G.SendAlternateToPenaltyBox,t.errorAction.flags=pn.MoveAllAlternatesMatchingHost;return}}return;case _.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:t.errorAction={action:G.SendAlternateToPenaltyBox,flags:pn.MoveAllAlternatesMatchingHDCP};return;case _.KEY_SYSTEM_SESSION_UPDATE_FAILED:case _.KEY_SYSTEM_STATUS_INTERNAL_ERROR:case _.KEY_SYSTEM_NO_SESSION:t.errorAction={action:G.SendAlternateToPenaltyBox,flags:pn.MoveAllAlternatesMatchingKey};return;case _.BUFFER_ADD_CODEC_ERROR:case _.REMUX_ALLOC_ERROR:case _.BUFFER_APPEND_ERROR:t.errorAction||=this.getLevelSwitchAction(t,t.level??r.loadLevel);return;case _.INTERNAL_EXCEPTION:case _.BUFFER_APPENDING_ERROR:case _.BUFFER_FULL_ERROR:case _.LEVEL_SWITCH_ERROR:case _.BUFFER_STALLED_ERROR:case _.BUFFER_SEEK_OVER_HOLE:case _.BUFFER_NUDGE_ON_STALL:t.errorAction=hn();return}t.type===g.KEY_SYSTEM_ERROR&&(t.levelRetry=!1,t.errorAction=hn())}getPlaylistRetryOrSwitchAction(e,t){let n=this.hls,r=sn(n.config.playlistLoadPolicy,e),i=this.playlistError++;if(un(r,i,rn(e),e.response))return{action:G.RetryRequest,flags:pn.None,retryConfig:r,retryCount:i};let a=this.getLevelSwitchAction(e,t);return r&&(a.retryConfig=r,a.retryCount=i),a}getFragRetryOrSwitchAction(e){let t=this.hls,n=this.getVariantLevelIndex(e.frag),r=t.levels[n],{fragLoadPolicy:i,keyLoadPolicy:a}=t.config,o=sn(an(e)?a:i,e),s=t.levels.reduce((e,t)=>e+t.fragmentError,0);if(r&&(e.details!==_.FRAG_GAP&&r.fragmentError++,!on(e)&&un(o,s,rn(e),e.response)))return{action:G.RetryRequest,flags:pn.None,retryConfig:o,retryCount:s};let c=this.getLevelSwitchAction(e,n);return o&&(c.retryConfig=o,c.retryCount=s),c}getLevelSwitchAction(e,t){let n=this.hls;t??=n.loadLevel;let r=this.hls.levels[t];if(r){let t=e.details;r.loadError++,t===_.BUFFER_APPEND_ERROR&&r.fragmentError++;let o=-1,{levels:s,loadLevel:c,minAutoLevel:l,maxAutoLevel:u}=n;!n.autoLevelEnabled&&!n.config.preserveManualLevelOnError&&(n.loadLevel=-1);let d=e.frag?.type,f=(d===b.AUDIO&&t===_.FRAG_PARSING_ERROR||e.sourceBufferName===`audio`&&(t===_.BUFFER_ADD_CODEC_ERROR||t===_.BUFFER_APPEND_ERROR))&&s.some(({audioCodec:e})=>r.audioCodec!==e),p=e.sourceBufferName===`video`&&(t===_.BUFFER_ADD_CODEC_ERROR||t===_.BUFFER_APPEND_ERROR)&&s.some(({codecSet:e,audioCodec:t})=>r.codecSet!==e&&r.audioCodec===t),{type:m,groupId:h}=e.context??{};for(let n=s.length;n--;){let g=(n+c)%s.length;if(g!==c&&g>=l&&g<=u&&s[g].loadError===0){var i,a;let n=s[g];if(t===_.FRAG_GAP&&d===b.MAIN&&e.frag){let t=s[g].details;if(t){let n=Qt(e.frag,t.fragments,e.frag.start);if(n!=null&&n.gap)continue}}else if(m===y.AUDIO_TRACK&&n.hasAudioGroup(h)||m===y.SUBTITLE_TRACK&&n.hasSubtitleGroup(h))continue;else if(d===b.AUDIO&&(i=r.audioGroups)!=null&&i.some(e=>n.hasAudioGroup(e))||d===b.SUBTITLE&&(a=r.subtitleGroups)!=null&&a.some(e=>n.hasSubtitleGroup(e))||f&&r.audioCodec===n.audioCodec||p&&r.codecSet===n.codecSet||!f&&r.codecSet!==n.codecSet)continue;o=g;break}}if(o>-1&&n.loadLevel!==o)return e.levelRetry=!0,this.playlistError=0,{action:G.SendAlternateToPenaltyBox,flags:pn.None,nextAutoLevel:o}}return{action:G.SendAlternateToPenaltyBox,flags:pn.MoveAllAlternatesMatchingHost}}onErrorOut(e,t){switch(t.errorAction?.action){case G.DoNothing:break;case G.SendAlternateToPenaltyBox:this.sendAlternateToPenaltyBox(t),!t.errorAction.resolved&&t.details!==_.FRAG_GAP?t.fatal=!0:/MediaSource readyState: ended/.test(t.error.message)&&(this.warn(`MediaSource ended after "${t.sourceBufferName}" sourceBuffer append error. Attempting to recover from media error.`),this.hls.recoverMediaError());break;case G.RetryRequest:break}if(t.fatal){this.hls.stopLoad();return}}sendAlternateToPenaltyBox(e){let t=this.hls,n=e.errorAction;if(!n)return;let{flags:r}=n,i=n.nextAutoLevel;switch(r){case pn.None:this.switchLevel(e,i);break;case pn.MoveAllAlternatesMatchingHDCP:{let r=this.getVariantLevelIndex(e.frag),i=t.levels[r]?.attrs[`HDCP-LEVEL`];if(n.hdcpLevel=i,i===`NONE`)this.warn(`HDCP policy resticted output with HDCP-LEVEL=NONE`);else if(i){t.maxHdcpLevel=wt[wt.indexOf(i)-1],n.resolved=!0,this.warn(`Restricting playback to HDCP-LEVEL of "${t.maxHdcpLevel}" or lower`);break}}case pn.MoveAllAlternatesMatchingKey:{let t=e.decryptdata;if(t){let r=this.hls.levels,i=r.length;for(let n=i;n--;)this.variantHasKey(r[n],t)&&(this.log(`Banned key found in level ${n} (${r[n].bitrate}bps) or audio group "${r[n].audioGroups?.join(`,`)}" (${e.frag?.type} fragment) ${R(t.keyId||[])}`),r[n].fragmentError++,r[n].loadError++,this.log(`Removing level ${n} with key error (${e.error})`),this.hls.removeLevel(n));let a=e.frag;if(this.hls.levels.length<i)n.resolved=!0;else if(a&&a.type!==b.MAIN){let e=a.decryptdata;e&&!t.matches(e)&&(n.resolved=!0)}}break}}n.resolved||this.switchLevel(e,i)}switchLevel(e,t){if(t!==void 0&&e.errorAction&&(this.warn(`switching to level ${t} after ${e.details}`),this.hls.nextAutoLevel=t,e.errorAction.resolved=!0,this.hls.nextLoadLevel=this.hls.nextAutoLevel,e.details===_.BUFFER_ADD_CODEC_ERROR&&e.mimeType&&e.sourceBufferName!==`audiovideo`)){let t=ft(e.mimeType),n=this.hls.levels;for(let r=n.length;r--;)n[r][`${e.sourceBufferName}Codec`]===t&&(this.log(`Removing level ${r} for ${e.details} ("${t}" not supported)`),this.hls.removeLevel(r))}}};function hn(e){let t={action:G.DoNothing,flags:pn.None};return e&&(t.resolved=!0),t}var K={NOT_LOADED:`NOT_LOADED`,APPENDING:`APPENDING`,PARTIAL:`PARTIAL`,OK:`OK`},gn=class{constructor(e){this.activePartLists=Object.create(null),this.endListFragments=Object.create(null),this.fragments=Object.create(null),this.timeRanges=Object.create(null),this.bufferPadding=.2,this.hls=void 0,this.hasGaps=!1,this.hls=e,this._registerListeners()}_registerListeners(){let{hls:e}=this;e&&(e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.BUFFER_APPENDED,this.onBufferAppended,this),e.on(v.FRAG_BUFFERED,this.onFragBuffered,this),e.on(v.FRAG_LOADED,this.onFragLoaded,this))}_unregisterListeners(){let{hls:e}=this;e&&(e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.BUFFER_APPENDED,this.onBufferAppended,this),e.off(v.FRAG_BUFFERED,this.onFragBuffered,this),e.off(v.FRAG_LOADED,this.onFragLoaded,this))}destroy(){this._unregisterListeners(),this.hls=this.fragments=this.activePartLists=this.endListFragments=this.timeRanges=null}getAppendedFrag(e,t){let n=this.activePartLists[t];if(n)for(let t=n.length;t--;){let r=n[t];if(!r)break;if(r.start<=e&&e<=r.end&&r.loaded)return r}return this.getBufferedFrag(e,t)}getBufferedFrag(e,t){return this.getFragAtPos(e,t,!0)}getFragAtPos(e,t,n){let{fragments:r}=this,i=Object.keys(r);for(let a=i.length;a--;){let o=r[i[a]];if(o?.body.type===t&&(!n||o.buffered)){let t=o.body;if(t.start<=e&&e<=t.end)return t}}return null}detectEvictedFragments(e,t,n,r,i){this.timeRanges&&(this.timeRanges[e]=t);let a=r?.fragment.sn||-1;Object.keys(this.fragments).forEach(r=>{let o=this.fragments[r];if(!o||a>=o.body.sn)return;if(!o.buffered&&(!o.loaded||i)){o.body.type===n&&this.removeFragment(o.body);return}let s=o.range[e];if(s){if(s.time.length===0){this.removeFragment(o.body);return}s.time.some(e=>{let n=!this.isTimeBuffered(e.startPTS,e.endPTS,t);return n&&this.removeFragment(o.body),n})}})}detectPartialFragments(e){let t=this.timeRanges;if(!t||e.frag.sn===`initSegment`)return;let n=e.frag,r=vn(n),i=this.fragments[r];if(!i||i.buffered&&n.gap)return;let a=!n.relurl;Object.keys(t).forEach(r=>{let o=n.elementaryStreams[r];if(!o)return;let s=t[r],c=a||o.partial===!0;i.range[r]=this.getBufferedTimes(n,e.part,c,s)}),i.loaded=null,Object.keys(i.range).length?(this.bufferedEnd(i,n),_n(i)||this.removeParts(n.sn-1,n.type)):this.removeFragment(i.body)}bufferedEnd(e,t){e.buffered=!0,(e.body.endList=t.endList||e.body.endList)&&(this.endListFragments[e.body.type]=e)}removeParts(e,t){let n=this.activePartLists[t];n&&(this.activePartLists[t]=yn(n,t=>t.fragment.sn>=e))}fragBuffered(e,t){let n=vn(e),r=this.fragments[n];!r&&t&&(r=this.fragments[n]={body:e,appendedPTS:null,loaded:null,buffered:!1,range:Object.create(null)},e.gap&&(this.hasGaps=!0)),r&&(r.loaded=null,this.bufferedEnd(r,e))}getBufferedTimes(e,t,n,r){let i={time:[],partial:n},a=e.start,o=e.end,s=e.minEndPTS||o,c=e.maxStartPTS||a;for(let e=0;e<r.length;e++){let t=r.start(e)-this.bufferPadding,n=r.end(e)+this.bufferPadding;if(c>=t&&s<=n){i.time.push({startPTS:Math.max(a,r.start(e)),endPTS:Math.min(o,r.end(e))});break}else if(a<n&&o>t){let t=Math.max(a,r.start(e)),n=Math.min(o,r.end(e));n>t&&(i.partial=!0,i.time.push({startPTS:t,endPTS:n}))}else if(o<=t)break}return i}getPartialFragment(e){let t=null,n,r,i,a=0,{bufferPadding:o,fragments:s}=this;return Object.keys(s).forEach(c=>{let l=s[c];l&&_n(l)&&(r=l.body.start-o,i=l.body.end+o,e>=r&&e<=i&&(n=Math.min(e-r,i-e),a<=n&&(t=l.body,a=n)))}),t}isEndListAppended(e){let t=this.endListFragments[e];return t!==void 0&&(t.buffered||_n(t))}getState(e){let t=vn(e),n=this.fragments[t];return n?n.buffered?_n(n)?K.PARTIAL:K.OK:K.APPENDING:K.NOT_LOADED}isTimeBuffered(e,t,n){let r,i;for(let a=0;a<n.length;a++){if(r=n.start(a)-this.bufferPadding,i=n.end(a)+this.bufferPadding,e>=r&&t<=i)return!0;if(t<=r)return!1}return!1}onManifestLoading(){this.removeAllFragments()}onFragLoaded(e,t){if(t.frag.sn===`initSegment`||t.frag.bitrateTest)return;let n=t.frag,r=t.part?null:t,i=vn(n);this.fragments[i]={body:n,appendedPTS:null,loaded:r,buffered:!1,range:Object.create(null)}}onBufferAppended(e,t){let{frag:n,part:r,timeRanges:i,type:a}=t;if(n.sn===`initSegment`)return;let o=n.type;if(r){let e=this.activePartLists[o];e||(this.activePartLists[o]=e=[]),e.push(r)}this.timeRanges=i;let s=i[a];this.detectEvictedFragments(a,s,o,r)}onFragBuffered(e,t){this.detectPartialFragments(t)}hasFragment(e){let t=vn(e);return!!this.fragments[t]}hasFragments(e){let{fragments:t}=this,n=Object.keys(t);if(!e)return n.length>0;for(let r=n.length;r--;)if(t[n[r]]?.body.type===e)return!0;return!1}hasParts(e){var t;return!!((t=this.activePartLists[e])!=null&&t.length)}removeFragmentsInRange(e,t,n,r,i){r&&!this.hasGaps||Object.keys(this.fragments).forEach(a=>{let o=this.fragments[a];if(!o)return;let s=o.body;s.type!==n||r&&!s.gap||s.start<t&&s.end>e&&(o.buffered||i)&&this.removeFragment(s)})}removeFragment(e){let t=vn(e);e.clearElementaryStreamInfo();let n=this.activePartLists[e.type];if(n){let t=e.sn;this.activePartLists[e.type]=yn(n,e=>e.fragment.sn!==t)}delete this.fragments[t],e.endList&&delete this.endListFragments[e.type]}removeAllFragments(){var e;this.fragments=Object.create(null),this.endListFragments=Object.create(null),this.activePartLists=Object.create(null),this.hasGaps=!1;let t=(e=this.hls)==null||(e=e.latestLevelDetails)==null?void 0:e.partList;t&&t.forEach(e=>e.clearElementaryStreamInfo())}};function _n(e){var t,n,r;return e.buffered&&!!(e.body.gap||(t=e.range.video)!=null&&t.partial||(n=e.range.audio)!=null&&n.partial||(r=e.range.audiovideo)!=null&&r.partial)}function vn(e){return`${e.type}_${e.level}_${e.sn}`}function yn(e,t){return e.filter(e=>{let n=t(e);return n||e.clearElementaryStreamInfo(),n})}var bn={cbc:0,ctr:1},xn=class{constructor(e,t,n){this.subtle=void 0,this.aesIV=void 0,this.aesMode=void 0,this.subtle=e,this.aesIV=t,this.aesMode=n}decrypt(e,t){switch(this.aesMode){case bn.cbc:return this.subtle.decrypt({name:`AES-CBC`,iv:this.aesIV},t,e);case bn.ctr:return this.subtle.decrypt({name:`AES-CTR`,counter:this.aesIV,length:64},t,e);default:throw Error(`[AESCrypto] invalid aes mode ${this.aesMode}`)}}};function Sn(e){let t=e.byteLength,n=t&&new DataView(e.buffer).getUint8(t-1);return n?e.slice(0,t-n):e}var Cn=class{constructor(){this.rcon=[0,1,2,4,8,16,32,64,128,27,54],this.subMix=[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],this.invSubMix=[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],this.sBox=new Uint32Array(256),this.invSBox=new Uint32Array(256),this.key=new Uint32Array,this.ksRows=0,this.keySize=0,this.keySchedule=void 0,this.invKeySchedule=void 0,this.initTable()}uint8ArrayToUint32Array_(e){let t=new DataView(e),n=new Uint32Array(4);for(let e=0;e<4;e++)n[e]=t.getUint32(e*4);return n}initTable(){let e=this.sBox,t=this.invSBox,n=this.subMix,r=n[0],i=n[1],a=n[2],o=n[3],s=this.invSubMix,c=s[0],l=s[1],u=s[2],d=s[3],f=new Uint32Array(256),p=0,m=0,h=0;for(h=0;h<256;h++)h<128?f[h]=h<<1:f[h]=h<<1^283;for(h=0;h<256;h++){let n=m^m<<1^m<<2^m<<3^m<<4;n=n>>>8^n&255^99,e[p]=n,t[n]=p;let s=f[p],h=f[s],g=f[h],_=f[n]*257^n*16843008;r[p]=_<<24|_>>>8,i[p]=_<<16|_>>>16,a[p]=_<<8|_>>>24,o[p]=_,_=g*16843009^h*65537^s*257^p*16843008,c[n]=_<<24|_>>>8,l[n]=_<<16|_>>>16,u[n]=_<<8|_>>>24,d[n]=_,p?(p=s^f[f[f[g^s]]],m^=f[f[m]]):p=m=1}}expandKey(e){let t=this.uint8ArrayToUint32Array_(e),n=!0,r=0;for(;r<t.length&&n;)n=t[r]===this.key[r],r++;if(n)return;this.key=t;let i=this.keySize=t.length;if(i!==4&&i!==6&&i!==8)throw Error(`Invalid aes key size=`+i);let a=this.ksRows=(i+6+1)*4,o,s,c=this.keySchedule=new Uint32Array(a),l=this.invKeySchedule=new Uint32Array(a),u=this.sBox,d=this.rcon,f=this.invSubMix,p=f[0],m=f[1],h=f[2],g=f[3],_,v;for(o=0;o<a;o++){if(o<i){_=c[o]=t[o];continue}v=_,o%i===0?(v=v<<8|v>>>24,v=u[v>>>24]<<24|u[v>>>16&255]<<16|u[v>>>8&255]<<8|u[v&255],v^=d[o/i|0]<<24):i>6&&o%i===4&&(v=u[v>>>24]<<24|u[v>>>16&255]<<16|u[v>>>8&255]<<8|u[v&255]),c[o]=_=(c[o-i]^v)>>>0}for(s=0;s<a;s++)o=a-s,v=s&3?c[o]:c[o-4],s<4||o<=4?l[s]=v:l[s]=p[u[v>>>24]]^m[u[v>>>16&255]]^h[u[v>>>8&255]]^g[u[v&255]],l[s]=l[s]>>>0}networkToHostOrderSwap(e){return e<<24|(e&65280)<<8|(e&16711680)>>8|e>>>24}decrypt(e,t,n){let r=this.keySize+6,i=this.invKeySchedule,a=this.invSBox,o=this.invSubMix,s=o[0],c=o[1],l=o[2],u=o[3],d=this.uint8ArrayToUint32Array_(n),f=d[0],p=d[1],m=d[2],h=d[3],g=new Int32Array(e),_=new Int32Array(g.length),v,y,b,x,S,C,w,T,E,D,O,k,A,j,M=this.networkToHostOrderSwap;for(;t<g.length;){for(E=M(g[t]),D=M(g[t+1]),O=M(g[t+2]),k=M(g[t+3]),S=E^i[0],C=k^i[1],w=O^i[2],T=D^i[3],A=4,j=1;j<r;j++)v=s[S>>>24]^c[C>>16&255]^l[w>>8&255]^u[T&255]^i[A],y=s[C>>>24]^c[w>>16&255]^l[T>>8&255]^u[S&255]^i[A+1],b=s[w>>>24]^c[T>>16&255]^l[S>>8&255]^u[C&255]^i[A+2],x=s[T>>>24]^c[S>>16&255]^l[C>>8&255]^u[w&255]^i[A+3],S=v,C=y,w=b,T=x,A+=4;v=a[S>>>24]<<24^a[C>>16&255]<<16^a[w>>8&255]<<8^a[T&255]^i[A],y=a[C>>>24]<<24^a[w>>16&255]<<16^a[T>>8&255]<<8^a[S&255]^i[A+1],b=a[w>>>24]<<24^a[T>>16&255]<<16^a[S>>8&255]<<8^a[C&255]^i[A+2],x=a[T>>>24]<<24^a[S>>16&255]<<16^a[C>>8&255]<<8^a[w&255]^i[A+3],_[t]=M(v^f),_[t+1]=M(x^p),_[t+2]=M(b^m),_[t+3]=M(y^h),f=E,p=D,m=O,h=k,t+=4}return _.buffer}},wn=class{constructor(e,t,n){this.subtle=void 0,this.key=void 0,this.aesMode=void 0,this.subtle=e,this.key=t,this.aesMode=n}expandKey(){let e=Tn(this.aesMode);return this.subtle.importKey(`raw`,this.key,{name:e},!1,[`encrypt`,`decrypt`])}};function Tn(e){switch(e){case bn.cbc:return`AES-CBC`;case bn.ctr:return`AES-CTR`;default:throw Error(`[FastAESKey] invalid aes mode ${e}`)}}var En=16,Dn=class{constructor(e,{removePKCS7Padding:t=!0}={}){if(this.logEnabled=!0,this.removePKCS7Padding=void 0,this.subtle=null,this.softwareDecrypter=null,this.key=null,this.fastAesKey=null,this.remainderData=null,this.currentIV=null,this.currentResult=null,this.useSoftware=void 0,this.enableSoftwareAES=void 0,this.enableSoftwareAES=e.enableSoftwareAES,this.removePKCS7Padding=t,t)try{let e=self.crypto;e&&(this.subtle=e.subtle||e.webkitSubtle)}catch{}this.useSoftware=!this.subtle}destroy(){this.subtle=null,this.softwareDecrypter=null,this.key=null,this.fastAesKey=null,this.remainderData=null,this.currentIV=null,this.currentResult=null}isSync(){return this.useSoftware}flush(){let{currentResult:e,remainderData:t}=this;if(!e||t)return this.reset(),null;let n=new Uint8Array(e);return this.reset(),this.removePKCS7Padding?Sn(n):n}reset(){this.currentResult=null,this.currentIV=null,this.remainderData=null,this.softwareDecrypter&&=null}decrypt(e,t,n,r){return this.useSoftware?new Promise((i,a)=>{let o=ArrayBuffer.isView(e)?e:new Uint8Array(e);this.softwareDecrypt(o,t,n,r);let s=this.flush();s?i(s.buffer):a(Error(`[softwareDecrypt] Failed to decrypt data`))}):this.webCryptoDecrypt(new Uint8Array(e),t,n,r)}softwareDecrypt(e,t,n,r){let{currentIV:i,currentResult:a,remainderData:o}=this;if(r!==bn.cbc||t.byteLength!==16)return I.warn(`SoftwareDecrypt: can only handle AES-128-CBC`),null;this.logOnce(`JS AES decrypt`),o&&(e=Le(o,e),this.remainderData=null);let s=this.getValidChunk(e);if(!s.length)return null;i&&(n=i);let c=this.softwareDecrypter;c||=this.softwareDecrypter=new Cn,c.expandKey(t);let l=a;return this.currentResult=c.decrypt(s.buffer,0,n),this.currentIV=s.slice(-16).buffer,l||null}webCryptoDecrypt(e,t,n,r){if(this.key!==t||!this.fastAesKey){if(!this.subtle)return Promise.resolve(this.onWebCryptoError(e,t,n,r));this.key=t,this.fastAesKey=new wn(this.subtle,t,r)}return this.fastAesKey.expandKey().then(t=>this.subtle?(this.logOnce(`WebCrypto AES decrypt`),new xn(this.subtle,new Uint8Array(n),r).decrypt(e.buffer,t)):Promise.reject(Error(`web crypto not initialized`))).catch(i=>(I.warn(`[decrypter]: WebCrypto Error, disable WebCrypto API, ${i.name}: ${i.message}`),this.onWebCryptoError(e,t,n,r)))}onWebCryptoError(e,t,n,r){let i=this.enableSoftwareAES;if(i){this.useSoftware=!0,this.logEnabled=!0,this.softwareDecrypt(e,t,n,r);let i=this.flush();if(i)return i.buffer}throw Error(`WebCrypto`+(i?` and softwareDecrypt`:``)+`: failed to decrypt data`)}getValidChunk(e){let t=e,n=e.length-e.length%En;return n!==e.length&&(t=e.slice(0,n),this.remainderData=e.slice(n)),t}logOnce(e){this.logEnabled&&=(I.log(`[decrypter]: ${e}`),!1)}},On=2**17,kn=class{constructor(e){this.config=void 0,this.loader=null,this.partLoadTimeout=-1,this.config=e}destroy(){this.loader&&=(this.loader.destroy(),null)}abort(){this.loader&&this.loader.abort()}load(e,t){let n=e.url;if(!n)return Promise.reject(new Nn({type:g.NETWORK_ERROR,details:_.FRAG_LOAD_ERROR,fatal:!1,frag:e,error:Error(`Fragment does not have a ${n?`part list`:`url`}`),networkDetails:null}));this.abort();let r=this.config,i=r.fLoader,a=r.loader;return new Promise((o,s)=>{if(this.loader&&this.loader.destroy(),e.gap)if(e.tagList.some(e=>e[0]===`GAP`)){s(jn(e));return}else e.gap=!1;let c=this.loader=i?new i(r):new a(r),l=An(e);e.loader=c;let u=ln(r.fragLoadPolicy.default),d={loadPolicy:u,timeout:u.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0,highWaterMark:e.sn===`initSegment`?1/0:On};e.stats=c.stats;let f={onSuccess:(t,n,r,i)=>{this.resetLoader(e,c);let a=t.data;r.resetIV&&e.decryptdata&&(e.decryptdata.iv=new Uint8Array(a.slice(0,16)),a=a.slice(16)),o({frag:e,part:null,payload:a,networkDetails:i})},onError:(t,r,i,a)=>{this.resetLoader(e,c),s(new Nn({type:g.NETWORK_ERROR,details:_.FRAG_LOAD_ERROR,fatal:!1,frag:e,response:E({url:n,data:void 0},t),error:Error(`HTTP Error ${t.code} ${t.text}`),networkDetails:i,stats:a}))},onAbort:(t,n,r)=>{this.resetLoader(e,c),s(new Nn({type:g.NETWORK_ERROR,details:_.INTERNAL_ABORTED,fatal:!1,frag:e,error:Error(`Aborted`),networkDetails:r,stats:t}))},onTimeout:(t,n,r)=>{this.resetLoader(e,c),s(new Nn({type:g.NETWORK_ERROR,details:_.FRAG_LOAD_TIMEOUT,fatal:!1,frag:e,error:Error(`Timeout after ${d.timeout}ms`),networkDetails:r,stats:t}))}};t&&(f.onProgress=(n,r,i,a)=>t({frag:e,part:null,payload:i,networkDetails:a})),c.load(l,d,f)})}loadPart(e,t,n){this.abort();let r=this.config,i=r.fLoader,a=r.loader;return new Promise((o,s)=>{if(this.loader&&this.loader.destroy(),e.gap||t.gap){s(jn(e,t));return}let c=this.loader=i?new i(r):new a(r),l=An(e,t);e.loader=c;let u=ln(r.fragLoadPolicy.default),d={loadPolicy:u,timeout:u.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0,highWaterMark:On};t.stats=c.stats,c.load(l,d,{onSuccess:(r,i,a,s)=>{this.resetLoader(e,c),this.updateStatsFromPart(e,t);let l={frag:e,part:t,payload:r.data,networkDetails:s};n(l),o(l)},onError:(n,r,i,a)=>{this.resetLoader(e,c),s(new Nn({type:g.NETWORK_ERROR,details:_.FRAG_LOAD_ERROR,fatal:!1,frag:e,part:t,response:E({url:l.url,data:void 0},n),error:Error(`HTTP Error ${n.code} ${n.text}`),networkDetails:i,stats:a}))},onAbort:(n,r,i)=>{e.stats.aborted=t.stats.aborted,this.resetLoader(e,c),s(new Nn({type:g.NETWORK_ERROR,details:_.INTERNAL_ABORTED,fatal:!1,frag:e,part:t,error:Error(`Aborted`),networkDetails:i,stats:n}))},onTimeout:(n,r,i)=>{this.resetLoader(e,c),s(new Nn({type:g.NETWORK_ERROR,details:_.FRAG_LOAD_TIMEOUT,fatal:!1,frag:e,part:t,error:Error(`Timeout after ${d.timeout}ms`),networkDetails:i,stats:n}))}})})}updateStatsFromPart(e,t){let n=e.stats,r=t.stats,i=r.total;if(n.loaded+=r.loaded,i){let r=Math.round(e.duration/t.duration),a=Math.min(Math.round(n.loaded/i),r),o=(r-a)*Math.round(n.loaded/a);n.total=n.loaded+o}else n.total=Math.max(n.loaded,n.total);let a=n.loading,o=r.loading;a.start?a.first+=o.first-o.start:(a.start=o.start,a.first=o.first),a.end=o.end}resetLoader(e,t){e.loader=null,this.loader===t&&(self.clearTimeout(this.partLoadTimeout),this.loader=null),t.destroy()}};function An(e,t=null){let n=t||e,r={frag:e,part:t,responseType:`arraybuffer`,url:n.url,headers:{},rangeStart:0,rangeEnd:0},i=n.byteRangeStartOffset,a=n.byteRangeEndOffset;if(p(i)&&p(a)){let t=i,n=a;if(e.sn===`initSegment`&&Mn(e.decryptdata?.method)){let e=a-i;e%16&&(n=a+(16-e%16)),i!==0&&(r.resetIV=!0,t=i-16)}r.rangeStart=t,r.rangeEnd=n}return r}function jn(e,t){let n=Error(`GAP ${e.gap?`tag`:`attribute`} found`),r={type:g.MEDIA_ERROR,details:_.FRAG_GAP,fatal:!1,frag:e,error:n,networkDetails:null};return t&&(r.part=t),(t||e).stats.aborted=!0,new Nn(r)}function Mn(e){return e===`AES-128`||e===`AES-256`}var Nn=class extends Error{constructor(e){super(e.error.message),this.data=void 0,this.data=e}},Pn=class extends k{constructor(e,t){super(e,t),this._boundTick=void 0,this._tickTimer=null,this._tickInterval=null,this._tickCallCount=0,this._boundTick=this.tick.bind(this)}destroy(){this.onHandlerDestroying(),this.onHandlerDestroyed()}onHandlerDestroying(){this.clearNextTick(),this.clearInterval()}onHandlerDestroyed(){}hasInterval(){return!!this._tickInterval}hasNextTick(){return!!this._tickTimer}setInterval(e){return this._tickInterval?!1:(this._tickCallCount=0,this._tickInterval=self.setInterval(this._boundTick,e),!0)}clearInterval(){return this._tickInterval?(self.clearInterval(this._tickInterval),this._tickInterval=null,!0):!1}clearNextTick(){return this._tickTimer?(self.clearTimeout(this._tickTimer),this._tickTimer=null,!0):!1}tick(){this._tickCallCount++,this._tickCallCount===1&&(this.doTick(),this._tickCallCount>1&&this.tickImmediate(),this._tickCallCount=0)}tickImmediate(){this.clearNextTick(),this._tickTimer=self.setTimeout(this._boundTick,0)}doTick(){}},Fn=class{constructor(e,t,n,r=0,i=-1,a=!1){this.level=void 0,this.sn=void 0,this.part=void 0,this.id=void 0,this.size=void 0,this.partial=void 0,this.transmuxing=In(),this.buffering={audio:In(),video:In(),audiovideo:In()},this.level=e,this.sn=t,this.id=n,this.size=r,this.part=i,this.partial=a}};function In(){return{start:0,executeStart:0,executeEnd:0,end:0}}var Ln={length:0,start:()=>0,end:()=>0},q=class e{static isBuffered(t,n){if(t){let r=e.getBuffered(t);for(let e=r.length;e--;)if(n>=r.start(e)&&n<=r.end(e))return!0}return!1}static bufferedRanges(t){if(t){let n=e.getBuffered(t);return e.timeRangesToArray(n)}return[]}static timeRangesToArray(e){let t=[];for(let n=0;n<e.length;n++)t.push({start:e.start(n),end:e.end(n)});return t}static bufferInfo(t,n,r){if(t){let i=e.bufferedRanges(t);if(i.length)return e.bufferedInfo(i,n,r)}return{len:0,start:n,end:n,bufferedIndex:-1}}static bufferedInfo(e,t,n){t=Math.max(0,t),e.length>1&&e.sort((e,t)=>e.start-t.start||t.end-e.end);let r=-1,i=[];if(n)for(let a=0;a<e.length;a++){t>=e[a].start&&t<=e[a].end&&(r=a);let o=i.length;if(o){let t=i[o-1].end;e[a].start-t<n?e[a].end>t&&(i[o-1].end=e[a].end):i.push(e[a])}else i.push(e[a])}else i=e;let a=0,o,s=t,c=t;for(let e=0;e<i.length;e++){let l=i[e].start,u=i[e].end;if(r===-1&&t>=l&&t<=u&&(r=e),t+n>=l&&t<u)s=l,c=u,a=c-t;else if(t+n<l){o=l;break}}return{len:a,start:s||0,end:c||0,nextStart:o,buffered:e,bufferedIndex:r}}static getBuffered(e){try{return e.buffered||Ln}catch(e){return I.log(`failed to get media.buffered`,e),Ln}}},Rn=/\{\$([a-zA-Z0-9-_]+)\}/g;function zn(e){return Rn.test(e)}function Bn(e,t){if(e.variableList!==null||e.hasVariableRefs){let n=e.variableList;return t.replace(Rn,t=>{let r=t.substring(2,t.length-1),i=n?.[r];return i===void 0?(e.playlistParsingError||=Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: "${r}"`),t):i})}return t}function Vn(e,t,n){let r=e.variableList;r||(e.variableList=r={});let i,a;if(`QUERYPARAM`in t){i=t.QUERYPARAM;try{let e=new self.URL(n).searchParams;if(e.has(i))a=e.get(i);else throw Error(`"${i}" does not match any query parameter in URI: "${n}"`)}catch(t){e.playlistParsingError||=Error(`EXT-X-DEFINE QUERYPARAM: ${t.message}`)}}else i=t.NAME,a=t.VALUE;i in r?e.playlistParsingError||=Error(`EXT-X-DEFINE duplicate Variable Name declarations: "${i}"`):r[i]=a||``}function Hn(e,t,n){let r=t.IMPORT;if(n&&r in n){let t=e.variableList;t||(e.variableList=t={}),t[r]=n[r]}else e.playlistParsingError||=Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: "${r}"`)}var Un=/^(\d+)x(\d+)$/,Wn=/(.+?)=(".*?"|.*?)(?:,|$)/g,J=class e{constructor(t,n){typeof t==`string`&&(t=e.parseAttrList(t,n)),w(this,t)}get clientAttrs(){return Object.keys(this).filter(e=>e.substring(0,2)===`X-`)}decimalInteger(e){let t=parseInt(this[e],10);return t>2**53-1?1/0:t}hexadecimalInteger(e){if(this[e]){let t=(this[e]||`0x`).slice(2);t=(t.length&1?`0`:``)+t;let n=new Uint8Array(t.length/2);for(let e=0;e<t.length/2;e++)n[e]=parseInt(t.slice(e*2,e*2+2),16);return n}return null}hexadecimalIntegerAsNumber(e){let t=parseInt(this[e],16);return t>2**53-1?1/0:t}decimalFloatingPoint(e){return parseFloat(this[e])}optionalFloat(e,t){let n=this[e];return n?parseFloat(n):t}enumeratedString(e){return this[e]}enumeratedStringList(e,t){let n=this[e];return(n?n.split(/[ ,]+/):[]).reduce((e,t)=>(e[t.toLowerCase()]=!0,e),t)}bool(e){return this[e]===`YES`}decimalResolution(e){let t=Un.exec(this[e]);if(t!==null)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}}static parseAttrList(e,t){let n,r={};for(Wn.lastIndex=0;(n=Wn.exec(e))!==null;){let i=n[1].trim(),a=n[2],o=a.indexOf(`"`)===0&&a.lastIndexOf(`"`)===a.length-1,s=!1;if(o)a=a.slice(1,-1);else switch(i){case`IV`:case`SCTE35-CMD`:case`SCTE35-IN`:case`SCTE35-OUT`:s=!0}if(t&&(o||s))a=Bn(t,a);else if(!s&&!o)switch(i){case`CLOSED-CAPTIONS`:if(a===`NONE`)break;case`ALLOWED-CPC`:case`CLASS`:case`ASSOC-LANGUAGE`:case`AUDIO`:case`BYTERANGE`:case`CHANNELS`:case`CHARACTERISTICS`:case`CODECS`:case`DATA-ID`:case`END-DATE`:case`GROUP-ID`:case`ID`:case`IMPORT`:case`INSTREAM-ID`:case`KEYFORMAT`:case`KEYFORMATVERSIONS`:case`LANGUAGE`:case`NAME`:case`PATHWAY-ID`:case`QUERYPARAM`:case`RECENTLY-REMOVED-DATERANGES`:case`SERVER-URI`:case`STABLE-RENDITION-ID`:case`STABLE-VARIANT-ID`:case`START-DATE`:case`SUBTITLES`:case`SUPPLEMENTAL-CODECS`:case`URI`:case`VALUE`:case`VIDEO`:case`X-ASSET-LIST`:case`X-ASSET-URI`:I.warn(`${e}: attribute ${i} is missing quotes`)}r[i]=a}return r}},Gn=`com.apple.hls.interstitial`;function Kn(e){return e!==`ID`&&e!==`CLASS`&&e!==`CUE`&&e!==`START-DATE`&&e!==`DURATION`&&e!==`END-DATE`&&e!==`END-ON-NEXT`}function qn(e){return e===`SCTE35-OUT`||e===`SCTE35-IN`||e===`SCTE35-CMD`}var Jn=class{constructor(e,t,n=0){if(this.attr=void 0,this.tagAnchor=void 0,this.tagOrder=void 0,this._startDate=void 0,this._endDate=void 0,this._dateAtEnd=void 0,this._cue=void 0,this._badValueForSameId=void 0,this.tagAnchor=t?.tagAnchor||null,this.tagOrder=t?.tagOrder??n,t){let n=t.attr;for(let t in n)if(Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==n[t]){I.warn(`DATERANGE tag attribute: "${t}" does not match for tags with ID: "${e.ID}"`),this._badValueForSameId=t;break}e=w(new J({}),n,e)}if(this.attr=e,t?(this._startDate=t._startDate,this._cue=t._cue,this._endDate=t._endDate,this._dateAtEnd=t._dateAtEnd):this._startDate=new Date(e[`START-DATE`]),`END-DATE`in this.attr){let e=t?.endDate||new Date(this.attr[`END-DATE`]);p(e.getTime())&&(this._endDate=e)}}get id(){return this.attr.ID}get class(){return this.attr.CLASS}get cue(){let e=this._cue;return e===void 0?this._cue=this.attr.enumeratedStringList(this.attr.CUE?`CUE`:`X-CUE`,{pre:!1,post:!1,once:!1}):e}get startTime(){let{tagAnchor:e}=this;return e===null||e.programDateTime===null?(I.warn(`Expected tagAnchor Fragment with PDT set for DateRange "${this.id}": ${e}`),NaN):e.start+(this.startDate.getTime()-e.programDateTime)/1e3}get startDate(){return this._startDate}get endDate(){let e=this._endDate||this._dateAtEnd;if(e)return e;let t=this.duration;return t===null?null:this._dateAtEnd=new Date(this._startDate.getTime()+t*1e3)}get duration(){if(`DURATION`in this.attr){let e=this.attr.decimalFloatingPoint(`DURATION`);if(p(e))return e}else if(this._endDate)return(this._endDate.getTime()-this._startDate.getTime())/1e3;return null}get plannedDuration(){return`PLANNED-DURATION`in this.attr?this.attr.decimalFloatingPoint(`PLANNED-DURATION`):null}get endOnNext(){return this.attr.bool(`END-ON-NEXT`)}get isInterstitial(){return this.class===Gn}get isValid(){return!!this.id&&!this._badValueForSameId&&p(this.startDate.getTime())&&(this.duration===null||this.duration>=0)&&(!this.endOnNext||!!this.class)&&(!this.attr.CUE||!this.cue.pre&&!this.cue.post||this.cue.pre!==this.cue.post)&&(!this.isInterstitial||`X-ASSET-URI`in this.attr||`X-ASSET-LIST`in this.attr)}},Yn=10,Xn=class{constructor(e){this.PTSKnown=!1,this.alignedSliding=!1,this.averagetargetduration=void 0,this.endCC=0,this.endSN=0,this.fragments=void 0,this.fragmentHint=void 0,this.partList=null,this.dateRanges=void 0,this.dateRangeTagCount=0,this.live=!0,this.requestScheduled=-1,this.ageHeader=0,this.advancedDateTime=void 0,this.updated=!0,this.advanced=!0,this.misses=0,this.startCC=0,this.startSN=0,this.startTimeOffset=null,this.targetduration=0,this.totalduration=0,this.type=null,this.url=void 0,this.m3u8=``,this.version=null,this.canBlockReload=!1,this.canSkipUntil=0,this.canSkipDateRanges=!1,this.skippedSegments=0,this.recentlyRemovedDateranges=void 0,this.partHoldBack=0,this.holdBack=0,this.partTarget=0,this.preloadHint=void 0,this.renditionReports=void 0,this.tuneInGoal=0,this.deltaUpdateFailed=void 0,this.driftStartTime=0,this.driftEndTime=0,this.driftStart=0,this.driftEnd=0,this.encryptedFragments=void 0,this.playlistParsingError=null,this.variableList=null,this.hasVariableRefs=!1,this.appliedTimelineOffset=void 0,this.fragments=[],this.encryptedFragments=[],this.dateRanges={},this.url=e}reloaded(e){if(!e){this.advanced=!0,this.updated=!0;return}let t=this.lastPartSn-e.lastPartSn,n=this.lastPartIndex-e.lastPartIndex;this.updated=this.endSN!==e.endSN||!!n||!!t||!this.live,this.advanced=this.endSN>e.endSN||t>0||t===0&&n>0,this.updated||this.advanced?this.misses=Math.floor(e.misses*.6):this.misses=e.misses+1}hasKey(e){return this.encryptedFragments.some(t=>{let n=t.decryptdata;return n||=(t.setKeyFormat(e.keyFormat),t.decryptdata),!!n&&e.matches(n)})}get hasProgramDateTime(){return this.fragments.length?p(this.fragments[this.fragments.length-1].programDateTime):!1}get levelTargetDuration(){return this.averagetargetduration||this.targetduration||Yn}get drift(){let e=this.driftEndTime-this.driftStartTime;return e>0?(this.driftEnd-this.driftStart)*1e3/e:1}get edge(){return this.partEnd||this.fragmentEnd}get partEnd(){var e;return(e=this.partList)!=null&&e.length?this.partList[this.partList.length-1].end:this.fragmentEnd}get fragmentEnd(){return this.fragments.length?this.fragments[this.fragments.length-1].end:0}get fragmentStart(){return this.fragments.length?this.fragments[0].start:0}get age(){return this.advancedDateTime?Math.max(Date.now()-this.advancedDateTime,0)/1e3:0}get lastPartIndex(){var e;return(e=this.partList)!=null&&e.length?this.partList[this.partList.length-1].index:-1}get maxPartIndex(){let e=this.partList;if(e){let t=this.lastPartIndex;if(t!==-1){for(let n=e.length;n--;)if(e[n].index>t)return e[n].index;return t}}return 0}get lastPartSn(){var e;return(e=this.partList)!=null&&e.length?this.partList[this.partList.length-1].fragment.sn:this.endSN}get expired(){if(this.live&&this.age&&this.misses<3){let e=this.partEnd-this.fragmentStart;return this.age>Math.max(e,this.totalduration)+this.levelTargetDuration}return!1}};function Zn(e,t){return e.length===t.length?!e.some((e,n)=>e!==t[n]):!1}function Qn(e,t){return!e&&!t?!0:!e||!t?!1:Zn(e,t)}function $n(e){return e===`AES-128`||e===`AES-256`||e===`AES-256-CTR`}function er(e){switch(e){case`AES-128`:case`AES-256`:return bn.cbc;case`AES-256-CTR`:return bn.ctr;default:throw Error(`invalid full segment method ${e}`)}}function tr(e){return Uint8Array.from(atob(e),e=>e.charCodeAt(0))}function nr(e){return Uint8Array.from(unescape(encodeURIComponent(e)),e=>e.charCodeAt(0))}function rr(e){let t=nr(e).subarray(0,16),n=new Uint8Array(16);return n.set(t,16-t.length),n}function ir(e){let t=function(e,t,n){let r=e[t];e[t]=e[n],e[n]=r};t(e,0,3),t(e,1,2),t(e,4,5),t(e,6,7)}function ar(e){let t=e.split(`:`),n=null;if(t[0]===`data`&&t.length===2){let e=t[1].split(`;`),r=e[e.length-1].split(`,`);if(r.length===2){let t=r[0]===`base64`,i=r[1];t?(e.splice(-1,1),n=tr(i)):n=rr(i)}}return n}var or=typeof self<`u`?self:void 0,Y={CLEARKEY:`org.w3.clearkey`,FAIRPLAY:`com.apple.fps`,PLAYREADY:`com.microsoft.playready`,WIDEVINE:`com.widevine.alpha`},sr={CLEARKEY:`org.w3.clearkey`,FAIRPLAY:`com.apple.streamingkeydelivery`,PLAYREADY:`com.microsoft.playready`,WIDEVINE:`urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`};function cr(e){switch(e){case sr.FAIRPLAY:return Y.FAIRPLAY;case sr.PLAYREADY:return Y.PLAYREADY;case sr.WIDEVINE:return Y.WIDEVINE;case sr.CLEARKEY:return Y.CLEARKEY}}function lr(e){switch(e){case Y.FAIRPLAY:return sr.FAIRPLAY;case Y.PLAYREADY:return sr.PLAYREADY;case Y.WIDEVINE:return sr.WIDEVINE;case Y.CLEARKEY:return sr.CLEARKEY}}function ur(e){let{drmSystems:t,widevineLicenseUrl:n}=e,r=t?[Y.FAIRPLAY,Y.WIDEVINE,Y.PLAYREADY,Y.CLEARKEY].filter(e=>!!t[e]):[];return!r[Y.WIDEVINE]&&n&&r.push(Y.WIDEVINE),r}var dr=function(e){return or!=null&&(e=or.navigator)!=null&&e.requestMediaKeySystemAccess?self.navigator.requestMediaKeySystemAccess.bind(self.navigator):null}();function fr(e,t,n,r){let i;switch(e){case Y.FAIRPLAY:i=[`cenc`,`sinf`];break;case Y.WIDEVINE:case Y.PLAYREADY:i=[`cenc`];break;case Y.CLEARKEY:i=[`cenc`,`keyids`];break;default:throw Error(`Unknown key-system: ${e}`)}return pr(i,t,n,r)}function pr(e,t,n,r){return[{initDataTypes:e,persistentState:r.persistentState||`optional`,distinctiveIdentifier:r.distinctiveIdentifier||`optional`,sessionTypes:r.sessionTypes||[r.sessionType||`temporary`],audioCapabilities:t.map(e=>({contentType:`audio/mp4; codecs=${e}`,robustness:r.audioRobustness||``,encryptionScheme:r.audioEncryptionScheme||null})),videoCapabilities:n.map(e=>({contentType:`video/mp4; codecs=${e}`,robustness:r.videoRobustness||``,encryptionScheme:r.videoEncryptionScheme||null}))}]}function mr(e){var t;return!!e&&(e.sessionType===`persistent-license`||!!((t=e.sessionTypes)!=null&&t.some(e=>e===`persistent-license`)))}function hr(e){let t=new Uint16Array(e.buffer,e.byteOffset,e.byteLength/2),n=String.fromCharCode.apply(null,Array.from(t)),r=n.substring(n.indexOf(`<`),n.length),i=new DOMParser().parseFromString(r,`text/xml`).getElementsByTagName(`KID`)[0];if(i){let e=i.childNodes[0]?i.childNodes[0].nodeValue:i.getAttribute(`VALUE`);if(e){let t=tr(e).subarray(0,16);return ir(t),t}}return null}var gr={},_r=class e{static clearKeyUriToKeyIdMap(){gr={}}static setKeyIdForUri(e,t){gr[e]=t}static addKeyIdForUri(e){let t=Object.keys(gr).length%(2**53-1),n=new Uint8Array(16);return new DataView(n.buffer,12,4).setUint32(0,t),gr[e]=n,n}constructor(e,t,n,r=[1],i=null,a){this.uri=void 0,this.method=void 0,this.keyFormat=void 0,this.keyFormatVersions=void 0,this.encrypted=void 0,this.isCommonEncryption=void 0,this.iv=null,this.key=null,this.keyId=null,this.pssh=null,this.method=e,this.uri=t,this.keyFormat=n,this.keyFormatVersions=r,this.iv=i,this.encrypted=e?e!==`NONE`:!1,this.isCommonEncryption=this.encrypted&&!$n(e),a!=null&&a.startsWith(`0x`)&&(this.keyId=new Uint8Array(ie(a)))}matches(e){return e.uri===this.uri&&e.method===this.method&&e.encrypted===this.encrypted&&e.keyFormat===this.keyFormat&&Zn(e.keyFormatVersions,this.keyFormatVersions)&&Qn(e.iv,this.iv)&&Qn(e.keyId,this.keyId)}isSupported(){if(this.method){if($n(this.method)||this.method===`NONE`)return!0;if(this.keyFormat===`identity`)return this.method===`SAMPLE-AES`;switch(this.keyFormat){case sr.FAIRPLAY:case sr.WIDEVINE:case sr.PLAYREADY:case sr.CLEARKEY:return[`SAMPLE-AES`,`SAMPLE-AES-CENC`,`SAMPLE-AES-CTR`].indexOf(this.method)!==-1}}return!1}getDecryptData(t,n){if(!this.encrypted||!this.uri)return null;if($n(this.method)){let n=this.iv;return n||=(typeof t!=`number`&&(I.warn(`missing IV for initialization segment with method="${this.method}" - compliance issue`),t=0),br(t)),new e(this.method,this.uri,`identity`,this.keyFormatVersions,n)}if(this.keyId){let t=gr[this.uri];if(t&&!Zn(this.keyId,t)&&e.setKeyIdForUri(this.uri,this.keyId),this.pssh)return this}let r=ar(this.uri);if(r)switch(this.keyFormat){case sr.WIDEVINE:if(this.pssh=r,!this.keyId){let e=Ke(r.buffer);if(e.length){var i;let t=e[0];this.keyId=(i=t.kids)!=null&&i.length?t.kids[0]:null}}this.keyId||=yr(n);break;case sr.PLAYREADY:{let e=new Uint8Array([154,4,240,121,152,64,66,134,171,146,230,91,224,136,95,149]);this.pssh=Ge(e,null,r),this.keyId=hr(r);break}default:{let e=r.subarray(0,16);if(e.length!==16){let t=new Uint8Array(16);t.set(e,16-e.length),e=t}this.keyId=e;break}}if(!this.keyId||this.keyId.byteLength!==16){let t;t=vr(n),t||(t=yr(n),t||=gr[this.uri]),t&&(this.keyId=t,e.setKeyIdForUri(this.uri,t))}return this}};function vr(e){let t=e?.[sr.WIDEVINE];return t?t.keyId:null}function yr(e){let t=e?.[sr.PLAYREADY];if(t){let e=ar(t.uri);if(e)return hr(e)}return null}function br(e){let t=new Uint8Array(16);for(let n=12;n<16;n++)t[n]=e>>8*(15-n)&255;return t}var xr=/#EXT-X-STREAM-INF:([^\r\n]*)(?:[\r\n](?:#[^\r\n]*)?)*([^\r\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\r\n]*)[\r\n]+/g,Sr=/#EXT-X-MEDIA:(.*)/g,Cr=/^#EXT(?:INF|-X-TARGETDURATION):/m,wr=new RegExp([`#EXTINF:\\s*(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?`,`(?!#) *(\\S[^\\r\\n]*)`,`#.*`].join(`|`),`g`),Tr=new RegExp([`#EXT-X-(PROGRAM-DATE-TIME|BYTERANGE|DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)`,`#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\\d+)`,`#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)`,`(#)([^:]*):(.*)`,`(#)(.*)(?:.*)\\r?\\n?`].join(`|`)),Er=class e{static findGroup(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(r.id===t)return r}}static resolve(e,t){return le.buildAbsoluteURL(t,e,{alwaysNormalize:!0})}static isMediaPlaylist(e){return Cr.test(e)}static parseMasterPlaylist(t,n){let r={contentSteering:null,levels:[],playlistParsingError:null,sessionData:null,sessionKeys:null,startTimeOffset:null,variableList:null,hasVariableRefs:zn(t)},i=[];if(xr.lastIndex=0,!t.startsWith(`#EXTM3U`))return r.playlistParsingError=Error(`no EXTM3U delimiter`),r;let a;for(;(a=xr.exec(t))!=null;)if(a[1]){var o;let t=new J(a[1],r),s=Bn(r,a[2]),c={attrs:t,bitrate:t.decimalInteger(`BANDWIDTH`)||t.decimalInteger(`AVERAGE-BANDWIDTH`),name:t.NAME,url:e.resolve(s,n)},l=t.decimalResolution(`RESOLUTION`);l&&(c.width=l.width,c.height=l.height),jr(t.CODECS,c);let u=t[`SUPPLEMENTAL-CODECS`];u&&(c.supplemental={},jr(u,c.supplemental)),(o=c.unknownCodecs)!=null&&o.length||i.push(c),r.levels.push(c)}else if(a[3]){let t=a[3],i=a[4];switch(t){case`SESSION-DATA`:{let e=new J(i,r),t=e[`DATA-ID`];t&&(r.sessionData===null&&(r.sessionData={}),r.sessionData[t]=e);break}case`SESSION-KEY`:{let e=kr(i,n,r);e.encrypted&&e.isSupported()?(r.sessionKeys===null&&(r.sessionKeys=[]),r.sessionKeys.push(e)):I.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: "${i}"`);break}case`DEFINE`:Vn(r,new J(i,r),n);break;case`CONTENT-STEERING`:{let t=new J(i,r);r.contentSteering={uri:e.resolve(t[`SERVER-URI`],n),pathwayId:t[`PATHWAY-ID`]||`.`};break}case`START`:r.startTimeOffset=Ar(i);break}}return r.levels=i.length>0&&i.length<r.levels.length?i:r.levels,r.levels.length===0&&(r.playlistParsingError=Error(`no levels found in manifest`)),r}static parseMasterPlaylistMedia(t,n,r){let i,a={},o=r.levels,s={AUDIO:o.map(e=>({id:e.attrs.AUDIO,audioCodec:e.audioCodec})),SUBTITLES:o.map(e=>({id:e.attrs.SUBTITLES,textCodec:e.textCodec})),"CLOSED-CAPTIONS":[]},c=0;for(Sr.lastIndex=0;(i=Sr.exec(t))!==null;){let t=new J(i[1],r),o=t.TYPE;if(o){let r=s[o],i=a[o]||[];a[o]=i;let l=t.LANGUAGE,u=t[`ASSOC-LANGUAGE`],d=t.CHANNELS,f=t.CHARACTERISTICS,p=t[`INSTREAM-ID`],m={attrs:t,bitrate:0,id:c++,groupId:t[`GROUP-ID`]||``,name:t.NAME||l||``,type:o,default:t.bool(`DEFAULT`),autoselect:t.bool(`AUTOSELECT`),forced:t.bool(`FORCED`),lang:l,url:t.URI?e.resolve(t.URI,n):``};if(u&&(m.assocLang=u),d&&(m.channels=d),f&&(m.characteristics=f),p&&(m.instreamId=p),r!=null&&r.length){let t=e.findGroup(r,m.groupId)||r[0];Mr(m,t,`audioCodec`),Mr(m,t,`textCodec`)}i.push(m)}}return a}static parseLevelPlaylist(e,t,n,r,i,a){let o={url:t},s=new Xn(t),c=s.fragments,l=[],u=null,d=0,f=0,m=0,h=0,g=0,_=null,v=new fe(r,o),y,b,x,S=-1,C=!1,T=null,E;if(wr.lastIndex=0,s.m3u8=e,s.hasVariableRefs=zn(e),wr.exec(e)?.[0]!==`#EXTM3U`)return s.playlistParsingError=Error(`Missing format identifier #EXTM3U`),s;for(;(y=wr.exec(e))!==null;){C&&(C=!1,v=new fe(r,o),v.playlistOffset=m,v.setStart(m),v.sn=d,v.cc=h,g&&(v.bitrate=g),v.level=n,u&&(v.initSegment=u,u.rawProgramDateTime&&(v.rawProgramDateTime=u.rawProgramDateTime,u.rawProgramDateTime=null),T&&=(v.setByteRange(T),null)));let e=y[1];if(e){v.duration=parseFloat(e);let t=(` `+y[2]).slice(1);v.title=t||null,v.tagList.push(t?[`INF`,e,t]:[`INF`,e])}else if(y[3]){if(p(v.duration)){v.playlistOffset=m,v.setStart(m),x&&Ir(v,x,s),v.sn=d,v.level=n,v.cc=h,c.push(v);let e=(` `+y[3]).slice(1);v.relurl=Bn(s,e),Pr(v,_,l),_=v,m+=v.duration,d++,f=0,C=!0}}else{if(y=y[0].match(Tr),!y){I.warn(`No matches on slow regex match for level playlist!`);continue}for(b=1;b<y.length&&y[b]===void 0;b++);let e=(` `+y[b]).slice(1),i=(` `+y[b+1]).slice(1),l=y[b+2]?(` `+y[b+2]).slice(1):null;switch(e){case`BYTERANGE`:_?v.setByteRange(i,_):v.setByteRange(i);break;case`PROGRAM-DATE-TIME`:v.rawProgramDateTime=i,v.tagList.push([`PROGRAM-DATE-TIME`,i]),S===-1&&(S=c.length);break;case`PLAYLIST-TYPE`:s.type&&Lr(s,e,y),s.type=i.toUpperCase();break;case`MEDIA-SEQUENCE`:s.startSN===0?c.length>0&&Rr(s,e,y):Lr(s,e,y),d=s.startSN=parseInt(i);break;case`SKIP`:{s.skippedSegments&&Lr(s,e,y);let t=new J(i,s),n=t.decimalInteger(`SKIPPED-SEGMENTS`);if(p(n)){s.skippedSegments+=n;for(let e=n;e--;)c.push(null);d+=n}let r=t.enumeratedString(`RECENTLY-REMOVED-DATERANGES`);r&&(s.recentlyRemovedDateranges=(s.recentlyRemovedDateranges||[]).concat(r.split(` `)));break}case`TARGETDURATION`:s.targetduration!==0&&Lr(s,e,y),s.targetduration=Math.max(parseInt(i),1);break;case`VERSION`:s.version!==null&&Lr(s,e,y),s.version=parseInt(i);break;case`INDEPENDENT-SEGMENTS`:break;case`ENDLIST`:s.live||Lr(s,e,y),s.live=!1;break;case`#`:(i||l)&&v.tagList.push(l?[i,l]:[i]);break;case`DISCONTINUITY`:h++,v.tagList.push([`DIS`]);break;case`GAP`:v.gap=!0,v.tagList.push([e]);break;case`BITRATE`:v.tagList.push([e,i]),g=parseInt(i)*1e3,p(g)?v.bitrate=g:g=0;break;case`DATERANGE`:{let e=new J(i,s),t=new Jn(e,s.dateRanges[e.ID],s.dateRangeTagCount);s.dateRangeTagCount++,t.isValid||s.skippedSegments?s.dateRanges[t.id]=t:I.warn(`Ignoring invalid DATERANGE tag: "${i}"`),v.tagList.push([`EXT-X-DATERANGE`,i]);break}case`DEFINE`:{let e=new J(i,s);`IMPORT`in e?Hn(s,e,a):Vn(s,e,t)}break;case`DISCONTINUITY-SEQUENCE`:s.startCC===0?c.length>0&&Rr(s,e,y):Lr(s,e,y),s.startCC=h=parseInt(i);break;case`KEY`:{let e=kr(i,t,s);if(e.isSupported()){if(e.method===`NONE`){x=void 0;break}x||={};let t=x[e.keyFormat];t!=null&&t.matches(e)||(t&&(x=w({},x)),x[e.keyFormat]=e)}else I.warn(`[Keys] Ignoring unsupported EXT-X-KEY tag: "${i}"`);break}case`START`:s.startTimeOffset=Ar(i);break;case`MAP`:{let e=new J(i,s);if(v.duration){let t=new fe(r,o);Fr(t,e,n,x),u=t,v.initSegment=u,u.rawProgramDateTime&&!v.rawProgramDateTime&&(v.rawProgramDateTime=u.rawProgramDateTime)}else{let t=v.byteRangeEndOffset;if(t){let e=v.byteRangeStartOffset;T=`${t-e}@${e}`}else T=null;Fr(v,e,n,x),u=v,C=!0}u.cc=h;break}case`SERVER-CONTROL`:E&&Lr(s,e,y),E=new J(i),s.canBlockReload=E.bool(`CAN-BLOCK-RELOAD`),s.canSkipUntil=E.optionalFloat(`CAN-SKIP-UNTIL`,0),s.canSkipDateRanges=s.canSkipUntil>0&&E.bool(`CAN-SKIP-DATERANGES`),s.partHoldBack=E.optionalFloat(`PART-HOLD-BACK`,0),s.holdBack=E.optionalFloat(`HOLD-BACK`,0);break;case`PART-INF`:s.partTarget&&Lr(s,e,y),s.partTarget=new J(i).decimalFloatingPoint(`PART-TARGET`);break;case`PART`:{let e=s.partList;e||=s.partList=[];let t=f>0?e[e.length-1]:void 0,n=f++,r=new pe(new J(i,s),v,o,n,t);e.push(r),v.duration+=r.duration;break}case`PRELOAD-HINT`:s.preloadHint=new J(i,s);break;case`RENDITION-REPORT`:{let e=new J(i,s);s.renditionReports=s.renditionReports||[],s.renditionReports.push(e);break}default:I.warn(`line parsed but not handled: ${y}`);break}}}_&&!_.relurl?(c.pop(),m-=_.duration,s.partList&&(s.fragmentHint=_)):s.partList&&(Pr(v,_,l),v.cc=h,s.fragmentHint=v,x&&Ir(v,x,s)),s.targetduration||(s.playlistParsingError=Error(`Missing Target Duration`));let D=c.length,O=c[0],k=c[D-1];if(m+=s.skippedSegments*s.targetduration,m>0&&D&&k){s.averagetargetduration=m/D;let e=k.sn;s.endSN=e===`initSegment`?0:e,s.live||(k.endList=!0),S>0&&(Nr(c,S),O&&l.unshift(O))}return s.fragmentHint&&(m+=s.fragmentHint.duration),s.totalduration=m,l.length&&s.dateRangeTagCount&&O&&Dr(l,s),s.endCC=h,s}};function Dr(e,t){let n=e.length;if(!n)if(t.hasProgramDateTime){let r=t.fragments[t.fragments.length-1];e.push(r),n++}else return;let r=e[n-1],i=t.live?1/0:t.totalduration,a=Object.keys(t.dateRanges);for(let o=a.length;o--;){let s=t.dateRanges[a[o]],c=s.startDate.getTime();s.tagAnchor=r.ref;for(let r=n;r--&&!(e[r]?.sn<t.startSN);){let n=Or(t,c,e,r,i);if(n!==-1){s.tagAnchor=t.fragments[n].ref;break}}}}function Or(e,t,n,r,i){let a=n[r];if(a){let o=a.programDateTime;if((t>=o||r===0)&&t<=o+((n[r+1]?.start||i)-a.start)*1e3){let i=n[r].sn-e.startSN;if(i<0)return-1;let a=e.fragments;if(a.length>n.length){let o=(n[r+1]||a[a.length-1]).sn-e.startSN;for(let e=o;e>i;e--){let n=a[e].programDateTime;if(t>=n&&t<n+a[e].duration*1e3)return e}}return i}}return-1}function kr(e,t,n){let r=new J(e,n),i=r.METHOD??``,a=r.URI,o=r.hexadecimalInteger(`IV`),s=r.KEYFORMATVERSIONS,c=r.KEYFORMAT??`identity`;return a&&r.IV&&!o&&I.error(`Invalid IV: ${r.IV}`),new _r(i,a?Er.resolve(a,t):``,c,(s||`1`).split(`/`).map(Number).filter(Number.isFinite),o,r.KEYID)}function Ar(e){let t=new J(e).decimalFloatingPoint(`TIME-OFFSET`);return p(t)?t:null}function jr(e,t){let n=(e||``).split(/[ ,]+/).filter(e=>e);[`video`,`audio`,`text`].forEach(e=>{let r=n.filter(t=>Xe(t,e));r.length&&(t[`${e}Codec`]=r.map(e=>e.split(`/`)[0]).join(`,`),n=n.filter(e=>r.indexOf(e)===-1))}),t.unknownCodecs=n}function Mr(e,t,n){let r=t[n];r&&(e[n]=r)}function Nr(e,t){let n=e[t];for(let r=t;r--;){let t=e[r];if(!t)return;t.programDateTime=n.programDateTime-t.duration*1e3,n=t}}function Pr(e,t,n){e.rawProgramDateTime?n.push(e):t!=null&&t.programDateTime&&(e.programDateTime=t.endProgramDateTime)}function Fr(e,t,n,r){e.relurl=t.URI,t.BYTERANGE&&e.setByteRange(t.BYTERANGE),e.level=n,e.sn=`initSegment`,r&&(e.levelkeys=r),e.initSegment=null}function Ir(e,t,n){e.levelkeys=t;let{encryptedFragments:r}=n;(!r.length||r[r.length-1].levelkeys!==t)&&Object.keys(t).some(e=>t[e].isCommonEncryption)&&r.push(e)}function Lr(e,t,n){e.playlistParsingError=Error(`#EXT-X-${t} must not appear more than once (${n[0]})`)}function Rr(e,t,n){e.playlistParsingError=Error(`#EXT-X-${t} must appear before the first Media Segment (${n[0]})`)}function zr(e,t){let n=t.startPTS;if(p(n)){let r=0,i;t.sn>e.sn?(r=n-e.start,i=e):(r=e.start-n,i=t),i.duration!==r&&i.setDuration(r)}else t.sn>e.sn?e.cc===t.cc&&e.minEndPTS?t.setStart(e.start+(e.minEndPTS-e.start)):t.setStart(e.start+e.duration):t.setStart(Math.max(e.start-t.duration,0))}function Br(e,t,n,r,i,a,o){r-n<=0&&(o.warn(`Fragment should have a positive duration`,t),r=n+t.duration,a=i+t.duration);let s=n,c=r,l=t.startPTS,u=t.endPTS;if(p(l)){let d=Math.abs(l-n);e&&d>e.totalduration?o.warn(`media timestamps and playlist times differ by ${d}s for level ${t.level} ${e.url}`):p(t.deltaPTS)?t.deltaPTS=Math.max(d,t.deltaPTS):t.deltaPTS=d,s=Math.max(n,l),n=Math.min(n,l),i=t.startDTS===void 0?i:Math.min(i,t.startDTS),c=Math.min(r,u),r=Math.max(r,u),a=t.endDTS===void 0?a:Math.max(a,t.endDTS)}let d=n-t.start;t.start!==0&&t.setStart(n),t.setDuration(r-t.start),t.startPTS=n,t.maxStartPTS=s,t.startDTS=i,t.endPTS=r,t.minEndPTS=c,t.endDTS=a;let f=t.sn;if(!e||f<e.startSN||f>e.endSN)return 0;let m,h=f-e.startSN,g=e.fragments;for(g[h]=t,m=h;m>0;m--)zr(g[m],g[m-1]);for(m=h;m<g.length-1;m++)zr(g[m],g[m+1]);return e.fragmentHint&&zr(g[g.length-1],e.fragmentHint),e.PTSKnown=e.alignedSliding=!0,d}function Vr(e,t,n){if(e===t)return;let r=null,i=e.fragments;for(let e=i.length-1;e>=0;e--){let t=i[e].initSegment;if(t){r=t;break}}e.fragmentHint&&delete e.fragmentHint.endPTS;let a;Wr(e,t,(e,n,i,o)=>{if((!t.startCC||t.skippedSegments)&&n.cc!==e.cc){let r=e.cc-n.cc;for(let e=i;e<o.length;e++)o[e].cc+=r;t.endCC=o[o.length-1].cc}p(e.startPTS)&&p(e.endPTS)&&(n.setStart(n.startPTS=e.startPTS),n.startDTS=e.startDTS,n.maxStartPTS=e.maxStartPTS,n.endPTS=e.endPTS,n.endDTS=e.endDTS,n.minEndPTS=e.minEndPTS,n.setDuration(e.endPTS-e.startPTS),n.duration&&(a=n),t.PTSKnown=t.alignedSliding=!0),e.hasStreams&&(n.elementaryStreams=e.elementaryStreams),n.loader=e.loader,e.hasStats&&(n.stats=e.stats),e.initSegment&&(n.initSegment=e.initSegment,r=e.initSegment)});let o=t.fragments,s=t.fragmentHint?o.concat(t.fragmentHint):o;if(r&&s.forEach(e=>{e&&(!e.initSegment||e.initSegment.relurl===r?.relurl)&&(e.initSegment=r)}),t.skippedSegments){if(t.deltaUpdateFailed=o.some(e=>!e),t.deltaUpdateFailed){n.warn(`[level-helper] Previous playlist missing segments skipped in delta playlist`);for(let e=t.skippedSegments;e--;)o.shift();t.startSN=o[0].sn}else{t.canSkipDateRanges&&(t.dateRanges=Hr(e.dateRanges,t,n));let r=e.fragments.filter(e=>e.rawProgramDateTime);if(e.hasProgramDateTime&&!t.hasProgramDateTime)for(let e=1;e<s.length;e++)s[e].programDateTime===null&&Pr(s[e],s[e-1],r);Dr(r,t)}t.endCC=o[o.length-1].cc}t.startCC||=Yr(e,t.startSN-1)?.cc??o[0].cc,Ur(e.partList,t.partList,(e,t)=>{t.elementaryStreams=e.elementaryStreams,t.stats=e.stats}),a?Br(t,a,a.startPTS,a.endPTS,a.startDTS,a.endDTS,n):Kr(e,t),o.length&&(t.totalduration=t.edge-o[0].start),t.driftStartTime=e.driftStartTime,t.driftStart=e.driftStart;let c=t.advancedDateTime;if(t.advanced&&c){let e=t.edge;t.driftStart||=(t.driftStartTime=c,e),t.driftEndTime=c,t.driftEnd=e}else t.driftEndTime=e.driftEndTime,t.driftEnd=e.driftEnd,t.advancedDateTime=e.advancedDateTime;t.requestScheduled===-1&&(t.requestScheduled=e.requestScheduled)}function Hr(e,t,n){let{dateRanges:r,recentlyRemovedDateranges:i}=t,a=w({},e);i&&i.forEach(e=>{delete a[e]});let o=Object.keys(a).length;return o?(Object.keys(r).forEach(e=>{let t=a[e],i=new Jn(r[e].attr,t);i.isValid?(a[e]=i,t||(i.tagOrder+=o)):n.warn(`Ignoring invalid Playlist Delta Update DATERANGE tag: "${W(r[e].attr)}"`)}),a):r}function Ur(e,t,n){if(e&&t){let r=0;for(let i=0,a=e.length;i<=a;i++){let a=e[i],o=t[i+r];a&&o&&a.index===o.index&&a.fragment.sn===o.fragment.sn?n(a,o):r--}}}function Wr(e,t,n){let r=t.skippedSegments,i=Math.max(e.startSN,t.startSN)-t.startSN,a=+!!e.fragmentHint+(r?t.endSN:Math.min(e.endSN,t.endSN))-t.startSN,o=t.startSN-e.startSN,s=t.fragmentHint?t.fragments.concat(t.fragmentHint):t.fragments,c=e.fragmentHint?e.fragments.concat(e.fragmentHint):e.fragments;for(let l=i;l<=a;l++){let i=c[o+l],a=s[l];if(r&&!a&&i&&(a=t.fragments[l]=i),i&&a){n(i,a,l,s);let r=i.relurl,o=a.relurl;if(r&&$r(r,o)){t.playlistParsingError=Gr(`media sequence mismatch ${a.sn}:`,e,t,i,a);return}else if(i.cc!==a.cc){t.playlistParsingError=Gr(`discontinuity sequence mismatch (${i.cc}!=${a.cc})`,e,t,i,a);return}}}}function Gr(e,t,n,r,i){return Error(`${e} ${i.url}
|
|
12
|
+
Playlist starting @${t.startSN}
|
|
13
|
+
${t.m3u8}
|
|
14
|
+
|
|
15
|
+
Playlist starting @${n.startSN}
|
|
16
|
+
${n.m3u8}`)}function Kr(e,t,n=!0){let r=t.startSN+t.skippedSegments-e.startSN,i=e.fragments,a=r>=0,o=0;if(a&&r<i.length)o=i[r].start;else if(a&&t.startSN===e.endSN+1)o=e.fragmentEnd;else if(a&&n)o=e.fragmentStart+r*t.levelTargetDuration;else if(!t.skippedSegments&&t.fragmentStart===0)o=e.fragmentStart;else return;qr(t,o)}function qr(e,t){if(t){let n=e.fragments;for(let r=e.skippedSegments;r<n.length;r++)n[r].addStart(t);e.fragmentHint&&e.fragmentHint.addStart(t)}}function Jr(e,t=1/0){let n=1e3*e.targetduration;if(e.updated){let r=e.fragments;if(r.length&&n*4>t){let e=r[r.length-1].duration*1e3;e<n&&(n=e)}}else n/=2;return Math.round(n)}function Yr(e,t,n){if(!e)return null;let r=e.fragments[t-e.startSN];return r||(r=e.fragmentHint,r&&r.sn===t)?r:t<e.startSN&&n&&n.sn===t?n:null}function Xr(e,t,n){return e?Zr(e.partList,t,n):null}function Zr(e,t,n){if(e)for(let r=e.length;r--;){let i=e[r];if(i.index===n&&i.fragment.sn===t)return i}return null}function Qr(e){e.forEach((e,t)=>{var n;(n=e.details)==null||n.fragments.forEach(e=>{e.level=t,e.initSegment&&(e.initSegment.level=t)})})}function $r(e,t){return e!==t&&t?ei(e)!==ei(t):!1}function ei(e){return e.replace(/\?[^?]*$/,``)}function ti(e,t){for(let n=0,r=e.length;n<r;n++)if(e[n]?.cc===t)return e[n];return null}function ni(e,t){return!!(e&&t.startCC<e.endCC&&t.endCC>e.startCC)}function ri(e,t){let n=e.start+t;e.startPTS=n,e.setStart(n),e.endPTS=n+e.duration}function ii(e,t){let n=t.fragments;for(let t=0,r=n.length;t<r;t++)ri(n[t],e);t.fragmentHint&&ri(t.fragmentHint,e),t.alignedSliding=!0}function ai(e,t){e&&(oi(t,e),t.alignedSliding||si(t,e),!t.alignedSliding&&!t.skippedSegments&&Kr(e,t,!1))}function oi(e,t){if(!ni(t,e))return;let n=Math.min(t.endCC,e.endCC),r=ti(t.fragments,n),i=ti(e.fragments,n);!r||!i||(I.log(`Aligning playlist at start of dicontinuity sequence ${n}`),ii(r.start-i.start,e))}function si(e,t){if(!e.hasProgramDateTime||!t.hasProgramDateTime)return;let n=e.fragments,r=t.fragments;if(!n.length||!r.length)return;let i,a,o=Math.min(t.endCC,e.endCC);t.startCC<o&&e.startCC<o&&(i=ti(r,o),a=ti(n,o)),(!i||!a)&&(i=r[Math.floor(r.length/2)],a=ti(n,i.cc)||n[Math.floor(n.length/2)]);let s=i.programDateTime,c=a.programDateTime;!s||!c||ii((c-s)/1e3-(a.start-i.start),e)}function ci(e,t,n){li(e,t,n),e.addEventListener(t,n)}function li(e,t,n){e.removeEventListener(t,n)}var ui={toString:function(e){let t=``,n=e.length;for(let r=0;r<n;r++)t+=`[${e.start(r).toFixed(3)}-${e.end(r).toFixed(3)}]`;return t}},X={STOPPED:`STOPPED`,IDLE:`IDLE`,KEY_LOADING:`KEY_LOADING`,FRAG_LOADING:`FRAG_LOADING`,FRAG_LOADING_WAITING_RETRY:`FRAG_LOADING_WAITING_RETRY`,WAITING_TRACK:`WAITING_TRACK`,PARSING:`PARSING`,PARSED:`PARSED`,ENDED:`ENDED`,ERROR:`ERROR`,WAITING_INIT_PTS:`WAITING_INIT_PTS`,WAITING_LEVEL:`WAITING_LEVEL`},di=class extends Pn{constructor(e,t,n,r,i){super(r,e.logger),this.hls=void 0,this.fragPrevious=null,this.fragCurrent=null,this.fragmentTracker=void 0,this.transmuxer=null,this._state=X.STOPPED,this.playlistType=void 0,this.media=null,this.mediaBuffer=null,this.config=void 0,this.bitrateTest=!1,this.lastCurrentTime=0,this.nextLoadPosition=0,this.startPosition=0,this.startTimeOffset=null,this.retryDate=0,this.levels=null,this.fragmentLoader=void 0,this.keyLoader=void 0,this.levelLastLoaded=null,this.startFragRequested=!1,this.decrypter=void 0,this.initPTS=[],this.buffering=!0,this.loadingParts=!1,this.loopSn=void 0,this.onMediaSeeking=()=>{let{config:e,fragCurrent:t,media:n,mediaBuffer:r,state:i}=this,a=n?n.currentTime:0,o=q.bufferInfo(r||n,a,e.maxBufferHole),s=!o.len;if(this.log(`Media seeking to ${p(a)?a.toFixed(3):a}, state: ${i}, ${s?`out of`:`in`} buffer`),this.state===X.ENDED)this.resetLoadingState();else if(t){let n=e.maxFragLookUpTolerance,r=t.start-n,i=t.start+t.duration+n;if(s||i<o.start||r>o.end){let e=a>i;(a<r||e)&&(e&&t.loader&&(this.log(`Cancelling fragment load for seek (sn: ${t.sn})`),t.abortRequests(),this.resetLoadingState()),this.fragPrevious=null)}}if(n&&(this.fragmentTracker.removeFragmentsInRange(a,1/0,this.playlistType,!0),a>this.lastCurrentTime&&(this.lastCurrentTime=a),!this.loadingParts)){let e=Math.max(o.end,a),t=this.shouldLoadParts(this.getLevelDetails(),e);t&&(this.log(`LL-Part loading ON after seeking to ${a.toFixed(2)} with buffer @${e.toFixed(2)}`),this.loadingParts=t)}this.hls.hasEnoughToStart||(this.log(`Setting ${s?`startPosition`:`nextLoadPosition`} to ${a} for seek without enough to start`),this.nextLoadPosition=a,s&&(this.startPosition=a)),s&&this.state===X.IDLE&&this.tickImmediate()},this.onMediaEnded=()=>{this.log(`setting startPosition to 0 because media ended`),this.startPosition=this.lastCurrentTime=0},this.playlistType=i,this.hls=e,this.fragmentLoader=new kn(e.config),this.keyLoader=n,this.fragmentTracker=t,this.config=e.config,this.decrypter=new Dn(e.config)}registerListeners(){let{hls:e}=this;e.on(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(v.ERROR,this.onError,this)}unregisterListeners(){let{hls:e}=this;e.off(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(v.ERROR,this.onError,this)}doTick(){this.onTickEnd()}onTickEnd(){}startLoad(e){}stopLoad(){if(this.state===X.STOPPED)return;this.fragmentLoader.abort(),this.keyLoader.abort(this.playlistType);let e=this.fragCurrent;e!=null&&e.loader&&(e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.resetTransmuxer(),this.fragCurrent=null,this.fragPrevious=null,this.clearInterval(),this.clearNextTick(),this.state=X.STOPPED}get startPositionValue(){let{nextLoadPosition:e,startPosition:t}=this;return t===-1&&e?e:t}get bufferingEnabled(){return this.buffering}pauseBuffering(){this.buffering=!1}resumeBuffering(){this.buffering=!0}get inFlightFrag(){return{frag:this.fragCurrent,state:this.state}}_streamEnded(e,t){if(t.live||!this.media)return!1;let n=e.end||0,r=this.config.timelineOffset||0;if(n<=r)return!1;let i=e.buffered;this.config.maxBufferHole&&i&&i.length>1&&(e=q.bufferedInfo(i,e.start,0));let a=e.nextStart;if(a&&a>r&&a<t.edge||this.media.currentTime<e.start)return!1;let o=t.partList;if(o!=null&&o.length){let e=o[o.length-1];return q.isBuffered(this.media,e.start+e.duration/2)}let s=t.fragments[t.fragments.length-1].type;return this.fragmentTracker.isEndListAppended(s)}getLevelDetails(){if(this.levels&&this.levelLastLoaded!==null)return this.levelLastLoaded.details}get timelineOffset(){let e=this.config.timelineOffset;return e?this.getLevelDetails()?.appliedTimelineOffset||e:0}onMediaAttached(e,t){let n=this.media=this.mediaBuffer=t.media;ci(n,`seeking`,this.onMediaSeeking),ci(n,`ended`,this.onMediaEnded);let r=this.config;this.levels&&r.autoStartLoad&&this.state===X.STOPPED&&this.startLoad(r.startPosition)}onMediaDetaching(e,t){let n=!!t.transferMedia,r=this.media;if(r!==null){if(r.ended&&(this.log(`MSE detaching and video ended, reset startPosition`),this.startPosition=this.lastCurrentTime=0),li(r,`seeking`,this.onMediaSeeking),li(r,`ended`,this.onMediaEnded),this.keyLoader&&!n&&this.keyLoader.detach(),this.media=this.mediaBuffer=null,this.loopSn=void 0,n){this.resetLoadingState(),this.resetTransmuxer();return}this.loadingParts=!1,this.fragmentTracker.removeAllFragments(),this.stopLoad()}}onManifestLoading(){this.initPTS=[],this.levels=this.levelLastLoaded=this.fragCurrent=null,this.lastCurrentTime=this.startPosition=0,this.startFragRequested=!1}onError(e,t){}onManifestLoaded(e,t){this.startTimeOffset=t.startTimeOffset}onHandlerDestroying(){this.stopLoad(),this.transmuxer&&=(this.transmuxer.destroy(),null),super.onHandlerDestroying(),this.hls=this.onMediaSeeking=this.onMediaEnded=null}onHandlerDestroyed(){this.state=X.STOPPED,this.fragmentLoader&&this.fragmentLoader.destroy(),this.keyLoader&&this.keyLoader.destroy(),this.decrypter&&this.decrypter.destroy(),this.hls=this.log=this.warn=this.decrypter=this.keyLoader=this.fragmentLoader=this.fragmentTracker=null,super.onHandlerDestroyed()}loadFragment(e,t,n){this.startFragRequested=!0,this._loadFragForPlayback(e,t,n)}_loadFragForPlayback(e,t,n){this._doFragLoad(e,t,n,e=>{let t=e.frag;if(this.fragContextChanged(t)){this.warn(`${t.type} sn: ${t.sn}${e.part?` part: `+e.part.index:``} of ${this.fragInfo(t,!1,e.part)}) was dropped during download.`),this.fragmentTracker.removeFragment(t);return}t.stats.chunkCount++,this._handleFragmentLoadProgress(e)}).then(e=>{if(!e)return;let t=this.state,n=e.frag;if(this.fragContextChanged(n)){(t===X.FRAG_LOADING||!this.fragCurrent&&t===X.PARSING)&&(this.fragmentTracker.removeFragment(n),this.state=X.IDLE);return}`payload`in e&&(this.log(`Loaded ${n.type} sn: ${n.sn} of ${this.playlistLabel()} ${n.level}`),this.hls.trigger(v.FRAG_LOADED,e)),this._handleFragmentLoadComplete(e)}).catch(t=>{this.state===X.STOPPED||this.state===X.ERROR||(this.warn(`Frag error: ${t?.message||t}`),this.resetFragmentLoading(e))})}clearTrackerIfNeeded(e){let{fragmentTracker:t}=this;if(t.getState(e)===K.APPENDING){let n=e.type,r=this.getFwdBufferInfo(this.mediaBuffer,n),i=Math.max(e.duration,r?r.len:this.config.maxBufferLength),a=this.backtrackFragment;((a?e.sn-a.sn:0)===1||this.reduceMaxBufferLength(i,e.duration))&&t.removeFragment(e)}else this.mediaBuffer?.buffered.length===0?t.removeAllFragments():t.hasParts(e.type)&&(t.detectPartialFragments({frag:e,part:null,stats:e.stats,id:e.type}),t.getState(e)===K.PARTIAL&&t.removeFragment(e))}checkLiveUpdate(e){if(e.updated&&!e.live){let t=e.fragments[e.fragments.length-1];this.fragmentTracker.detectPartialFragments({frag:t,part:null,stats:t.stats,id:t.type})}e.fragments[0]||(e.deltaUpdateFailed=!0)}waitForLive(e){let t=e.details;return t?.live&&t.type!==`EVENT`&&(this.levelLastLoaded!==e||t.expired)}flushMainBuffer(e,t,n=null){if(!(e-t))return;let r={startOffset:e,endOffset:t,type:n};this.hls.trigger(v.BUFFER_FLUSHING,r)}_loadInitSegment(e,t){this._doFragLoad(e,t).then(e=>{let t=e?.frag;if(!t||this.fragContextChanged(t)||!this.levels)throw Error(`init load aborted`);return e}).then(e=>{let{hls:t}=this,{frag:n,payload:r}=e,i=n.decryptdata;if(r&&r.byteLength>0&&i!=null&&i.key&&i.iv&&$n(i.method)){let a=self.performance.now();return this.decrypter.decrypt(new Uint8Array(r),i.key.buffer,i.iv.buffer,er(i.method)).catch(e=>{throw t.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.FRAG_DECRYPT_ERROR,fatal:!1,error:e,reason:e.message,frag:n}),e}).then(r=>{let i=self.performance.now();return t.trigger(v.FRAG_DECRYPTED,{frag:n,payload:r,stats:{tstart:a,tdecrypt:i}}),e.payload=r,this.completeInitSegmentLoad(e)})}return this.completeInitSegmentLoad(e)}).catch(t=>{this.state===X.STOPPED||this.state===X.ERROR||(this.warn(t),this.resetFragmentLoading(e))})}completeInitSegmentLoad(e){let{levels:t}=this;if(!t)throw Error(`init load aborted, missing levels`);let n=e.frag.stats;this.state!==X.STOPPED&&(this.state=X.IDLE),e.frag.data=new Uint8Array(e.payload),n.parsing.start=n.buffering.start=self.performance.now(),n.parsing.end=n.buffering.end=self.performance.now(),this.tick()}unhandledEncryptionError(e,t){var n,r;let i=e.tracks;if(i&&!t.encrypted&&((n=i.audio)!=null&&n.encrypted||(r=i.video)!=null&&r.encrypted)&&(!this.config.emeEnabled||!this.keyLoader.emeController)){let e=this.media,n=Error(`Encrypted track with no key in ${this.fragInfo(t)} (media ${e?`attached mediaKeys: `+e.mediaKeys:`detached`})`);return this.warn(n.message),!e||e.mediaKeys?!1:(this.hls.trigger(v.ERROR,{type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_NO_KEYS,fatal:!1,error:n,frag:t}),this.resetTransmuxer(),!0)}return!1}fragContextChanged(e){let{fragCurrent:t}=this;return!e||!t||e.sn!==t.sn||e.level!==t.level}fragBufferedComplete(e,t){let n=this.mediaBuffer?this.mediaBuffer:this.media;if(this.log(`Buffered ${e.type} sn: ${e.sn}${t?` part: `+t.index:``} of ${this.fragInfo(e,!1,t)} > buffer:${n?ui.toString(q.getBuffered(n)):`(detached)`})`),B(e)){if(e.type!==b.SUBTITLE){let t=e.elementaryStreams;if(!Object.keys(t).some(e=>!!t[e])){this.state=X.IDLE;return}}let t=this.levels?.[e.level];t!=null&&t.fragmentError&&(this.log(`Resetting level fragment error count of ${t.fragmentError} on frag buffered`),t.fragmentError=0)}this.state=X.IDLE}_handleFragmentLoadComplete(e){let{transmuxer:t}=this;if(!t)return;let{frag:n,part:r,partsLoaded:i}=e,a=!i||i.length===0||i.some(e=>!e),o=new Fn(n.level,n.sn,n.stats.chunkCount+1,0,r?r.index:-1,!a);t.flush(o)}_handleFragmentLoadProgress(e){}_doFragLoad(e,t,n=null,r){var i;this.fragCurrent=e;let a=t.details;if(!this.levels||!a)throw Error(`frag load aborted, missing level${a?``:` detail`}s`);let o=null;if(e.encrypted&&!((i=e.decryptdata)!=null&&i.key)){if(this.log(`Loading key for ${e.sn} of [${a.startSN}-${a.endSN}], ${this.playlistLabel()} ${e.level}`),this.state=X.KEY_LOADING,this.fragCurrent=e,o=this.keyLoader.load(e).then(e=>{if(!this.fragContextChanged(e.frag))return this.hls.trigger(v.KEY_LOADED,e),this.state===X.KEY_LOADING&&(this.state=X.IDLE),e}),this.hls.trigger(v.KEY_LOADING,{frag:e}),this.fragCurrent===null)return this.log(`context changed in KEY_LOADING`),Promise.resolve(null)}else e.encrypted||(o=this.keyLoader.loadClear(e,a.encryptedFragments,this.startFragRequested),o&&this.log(`[eme] blocking frag load until media-keys acquired`));let s=this.fragPrevious;if(B(e)&&(!s||e.sn!==s.sn)){let n=this.shouldLoadParts(t.details,e.end);n!==this.loadingParts&&(this.log(`LL-Part loading ${n?`ON`:`OFF`} loading sn ${s?.sn}->${e.sn}`),this.loadingParts=n)}if(n=Math.max(e.start,n||0),this.loadingParts&&B(e)){let i=a.partList;if(i&&r){n>a.fragmentEnd&&a.fragmentHint&&(e=a.fragmentHint);let s=this.getNextPart(i,e,n);if(s>-1){let c=i[s];e=this.fragCurrent=c.fragment,this.log(`Loading ${e.type} sn: ${e.sn} part: ${c.index} (${s}/${i.length-1}) of ${this.fragInfo(e,!1,c)}) cc: ${e.cc} [${a.startSN}-${a.endSN}], target: ${parseFloat(n.toFixed(3))}`),this.nextLoadPosition=c.start+c.duration,this.state=X.FRAG_LOADING;let l;return l=o?o.then(n=>!n||this.fragContextChanged(n.frag)?null:this.doFragPartsLoad(e,c,t,r)).catch(e=>this.handleFragLoadError(e)):this.doFragPartsLoad(e,c,t,r).catch(e=>this.handleFragLoadError(e)),this.hls.trigger(v.FRAG_LOADING,{frag:e,part:c,targetBufferTime:n}),this.fragCurrent===null?Promise.reject(Error(`frag load aborted, context changed in FRAG_LOADING parts`)):l}else if(!e.url||this.loadedEndOfParts(i,n))return Promise.resolve(null)}}if(B(e)&&this.loadingParts)this.log(`LL-Part loading OFF after next part miss @${n.toFixed(2)} Check buffer at sn: ${e.sn} loaded parts: ${a.partList?.filter(e=>e.loaded).map(e=>`[${e.start}-${e.end}]`)}`),this.loadingParts=!1;else if(!e.url)return Promise.resolve(null);this.log(`Loading ${e.type} sn: ${e.sn} of ${this.fragInfo(e,!1)}) cc: ${e.cc} ${`[`+a.startSN+`-`+a.endSN+`]`}, target: ${parseFloat(n.toFixed(3))}`),p(e.sn)&&!this.bitrateTest&&(this.nextLoadPosition=e.start+e.duration),this.state=X.FRAG_LOADING;let c=this.config.progressive&&e.type!==b.SUBTITLE,l;return l=c&&o?o.then(t=>!t||this.fragContextChanged(t.frag)?null:this.fragmentLoader.load(e,r)).catch(e=>this.handleFragLoadError(e)):Promise.all([this.fragmentLoader.load(e,c?r:void 0),o]).then(([e])=>(!c&&r&&r(e),e)).catch(e=>this.handleFragLoadError(e)),this.hls.trigger(v.FRAG_LOADING,{frag:e,targetBufferTime:n}),this.fragCurrent===null?Promise.reject(Error(`frag load aborted, context changed in FRAG_LOADING`)):l}doFragPartsLoad(e,t,n,r){return new Promise((i,a)=>{let o=[],s=n.details?.partList,c=t=>{this.fragmentLoader.loadPart(e,t,r).then(r=>{o[t.index]=r;let a=r.part;this.hls.trigger(v.FRAG_LOADED,r);let l=Xr(n.details,e.sn,t.index+1)||Zr(s,e.sn,t.index+1);if(l)c(l);else return i({frag:e,part:a,partsLoaded:o})}).catch(a)};c(t)})}handleFragLoadError(e){if(`data`in e){let t=e.data;t.frag&&t.details===_.INTERNAL_ABORTED?this.handleFragLoadAborted(t.frag,t.part):t.frag&&t.type===g.KEY_SYSTEM_ERROR?(t.frag.abortRequests(),this.resetStartWhenNotLoaded(),this.resetFragmentLoading(t.frag)):this.hls.trigger(v.ERROR,t)}else this.hls.trigger(v.ERROR,{type:g.OTHER_ERROR,details:_.INTERNAL_EXCEPTION,err:e,error:e,fatal:!0});return null}_handleTransmuxerFlush(e){let t=this.getCurrentContext(e);if(!t||this.state!==X.PARSING){!this.fragCurrent&&this.state!==X.STOPPED&&this.state!==X.ERROR&&(this.state=X.IDLE);return}let{frag:n,part:r,level:i}=t,a=self.performance.now();n.stats.parsing.end=a,r&&(r.stats.parsing.end=a);let o=this.getLevelDetails(),s=o&&n.sn>o.endSN||this.shouldLoadParts(o,n.end);s!==this.loadingParts&&(this.log(`LL-Part loading ${s?`ON`:`OFF`} after parsing segment ending @${n.end.toFixed(2)}`),this.loadingParts=s),this.updateLevelTiming(n,r,i,e.partial)}shouldLoadParts(e,t){if(this.config.lowLatencyMode){if(!e)return this.loadingParts;if(e.partList){let n=e.partList[0];if(n.fragment.type===b.SUBTITLE)return!1;if(t>=n.end+(e.fragmentHint?.duration||0)&&(this.hls.hasEnoughToStart?this.media?.currentTime||this.lastCurrentTime:this.getLoadPosition())>n.start-n.fragment.duration)return!0}}return!1}getCurrentContext(e){let{levels:t,fragCurrent:n}=this,{level:r,sn:i,part:a}=e;if(!(t!=null&&t[r]))return this.warn(`Levels object was unset while buffering fragment ${i} of ${this.playlistLabel()} ${r}. The current chunk will not be buffered.`),null;let o=t[r],s=o.details,c=a>-1?Xr(s,i,a):null,l=c?c.fragment:Yr(s,i,n);return l?(n&&n!==l&&(l.stats=n.stats),{frag:l,part:c,level:o}):null}bufferFragmentData(e,t,n,r,i){if(this.state!==X.PARSING)return;let{data1:a,data2:o}=e,s=a;if(o&&(s=Le(a,o)),!s.length)return;let c=this.initPTS[t.cc],l=c?-c.baseTime/c.timescale:void 0,u={type:e.type,frag:t,part:n,chunkMeta:r,offset:l,parent:t.type,data:s};if(this.hls.trigger(v.BUFFER_APPENDING,u),e.dropped&&e.independent&&!n){if(i)return;this.flushBufferGap(t)}}flushBufferGap(e){let t=this.media;if(!t)return;if(!q.isBuffered(t,t.currentTime)){this.flushMainBuffer(0,e.start);return}let n=t.currentTime,r=q.bufferInfo(t,n,0),i=e.duration,a=Math.min(this.config.maxFragLookUpTolerance*2,i*.25),o=Math.max(Math.min(e.start-a,r.end-a),n+a);e.start-o>a&&this.flushMainBuffer(o,e.start)}getFwdBufferInfo(e,t){var n;let r=this.getLoadPosition();if(!p(r))return null;let i=this.lastCurrentTime>r||(n=this.media)!=null&&n.paused?0:this.config.maxBufferHole;return this.getFwdBufferInfoAtPos(e,r,t,i)}getFwdBufferInfoAtPos(e,t,n,r){let i=q.bufferInfo(e,t,r);if(i.len===0&&i.nextStart!==void 0){let a=this.fragmentTracker.getBufferedFrag(t,n);if(a&&(i.nextStart<=a.end||a.gap)){let n=Math.max(Math.min(i.nextStart,a.end)-t,r);return q.bufferInfo(e,t,n)}}return i}getMaxBufferLength(e){let{config:t}=this,n;return n=e?Math.max(8*t.maxBufferSize/e,t.maxBufferLength):t.maxBufferLength,Math.min(n,t.maxMaxBufferLength)}exceedsMaxBuffer(e,t,n){let r=e.nextStart;if(r&&n.start>r){let r=e.buffered;if(r){let i=e.len,a=e.bufferedIndex;for(let e=r.length-1;e>a;e--)r[e].start<n.start&&(i+=r[e].end-r[e].start);return i>=t}}return!1}reduceMaxBufferLength(e,t){let n=this.config,r=Math.max(Math.min(e-t,n.maxBufferLength),t),i=Math.max(e-t*3,n.maxMaxBufferLength/2,r);return i>=r?(n.maxMaxBufferLength=i,this.warn(`Reduce max buffer length to ${i}s`),!0):!1}getAppendedFrag(e,t=b.MAIN){let n=this.fragmentTracker?this.fragmentTracker.getAppendedFrag(e,t):null;return n&&`fragment`in n?n.fragment:n}getNextFragment(e,t){let n=t.fragments,r=n.length;if(!r)return null;let{config:i}=this,a=t.fragmentStart,o=i.lowLatencyMode&&!!t.partList,s=null;if(t.live){let n=i.initialLiveManifestSize;if(r<n)return this.warn(`Not enough fragments to start playback (have: ${r}, need: ${n})`),null;if(!t.PTSKnown&&!this.startFragRequested&&this.startPosition===-1||e<a){o&&!this.loadingParts&&(this.log(`LL-Part loading ON for initial live fragment`),this.loadingParts=!0),s=this.getInitialLiveFragment(t);let n=this.config.startPosition,r=this.hls.startPosition,i=this.hls.liveSyncPosition,c=s?.start||0,l,u;r!==-1&&r>=a?(l=r,u=r===n?`config`:`next load start`):i===null?(l=e,u=`buffer pos`):(l=i,u=`live edge`),l<c&&(l=c,u=`live frag start`),l<a&&(l=a,u=`playlist start`),(this.startPosition!=l||this.nextLoadPosition!=l)&&(this.log(`Setting startPosition to ${l.toFixed(3)} ${r===-1?``:`(from ${n}) `}based on ${u}. live edge: ${i} live frag start: ${c.toFixed(3)} playlist start: ${a.toFixed(3)} buffer pos: ${e}`),this.startPosition=this.nextLoadPosition=l)}}else e<=a&&(s=n[0]);if(!s){let n=this.loadingParts?t.partEnd:t.fragmentEnd;s=this.getFragmentAtPosition(e,n,t)}let c=this.filterReplacedPrimary(s,t);if(!c&&s){let e=s.sn-t.startSN;c=this.filterReplacedPrimary(n[e+1]||null,t)}return this.mapToInitFragWhenRequired(c)}isLoopLoading(e,t){if(this.nextLoadPosition<=t)return!1;let n=this.fragmentTracker.getState(e);return n===K.OK||n===K.PARTIAL&&!!e.gap}getNextFragmentLoopLoading(e,t,n,r,i){let a=null;if(e.gap&&(a=this.getNextFragment(this.nextLoadPosition,t),a&&!a.gap&&n.nextStart)){let e=this.getFwdBufferInfoAtPos(this.mediaBuffer?this.mediaBuffer:this.media,n.nextStart,r,0);if(e!==null&&n.len+e.len>=i){let e=a.sn;return this.loopSn!==e&&(this.log(`buffer full after gaps in "${r}" playlist starting at sn: ${e}`),this.loopSn=e),null}}return this.loopSn=void 0,a}get primaryPrefetch(){if(fi(this.config)){var e;if(!((e=this.hls.interstitialsManager)==null||(e=e.playingItem)==null)&&e.event)return!0}return!1}filterReplacedPrimary(e,t){if(!e)return e;if(fi(this.config)&&e.type!==b.SUBTITLE){let n=this.hls.interstitialsManager,r=n?.bufferingItem;if(r){let n=r.event;if(n){if(n.appendInPlace||Math.abs(e.start-r.start)>1||r.start===0)return null}else if(e.end<=r.start&&t?.live===!1||e.start>r.end&&r.nextEvent&&(r.nextEvent.appendInPlace||e.start-r.end>1))return null}let i=n?.playerQueue;if(i)for(let t=i.length;t--;){let n=i[t].interstitial;if(n.appendInPlace&&e.start>=n.startTime&&e.end<=n.resumeTime)return null}}return e}mapToInitFragWhenRequired(e){return e!=null&&e.initSegment&&!e.initSegment.data&&!this.bitrateTest?e.initSegment:e}getNextPart(e,t,n){let r=-1,i=!1,a=!0;for(let o=0,s=e.length;o<s;o++){let s=e[o];if(a&&=!s.independent,r>-1&&n<s.start)break;let c=s.loaded;c?r=-1:(i||(s.independent||a)&&s.fragment===t)&&(s.fragment!==t&&this.warn(`Need buffer at ${n} but next unloaded part starts at ${s.start}`),r=o),i=c}return r}loadedEndOfParts(e,t){let n;for(let r=e.length;r--;){if(n=e[r],!n.loaded)return!1;if(t>n.start)return!0}return!1}getInitialLiveFragment(e){let t=e.fragments,n=this.fragPrevious,r=null;if(n){if(e.hasProgramDateTime&&(r=Zt(t,n.endProgramDateTime,this.config.maxFragLookUpTolerance),r&&this.log(`Live playlist, switching playlist, load frag with same PDT: ${n.programDateTime}`)),!r){let i=n.sn+1;if(i>=e.startSN&&i<=e.endSN){let a=t[i-e.startSN];n.cc===a.cc&&(r=a,this.log(`Live playlist, switching playlist, load frag with next SN: ${r.sn}`))}r||(r=nn(e,n.cc,n.end),r&&this.log(`Live playlist, switching playlist, load frag with same CC: ${r.sn}`))}}else{let t=this.hls.liveSyncPosition;t!==null&&(r=this.getFragmentAtPosition(t,this.bitrateTest?e.fragmentEnd:e.edge,e))}return r}getFragmentAtPosition(e,t,n){let{config:r}=this,{fragPrevious:i}=this,{fragments:a,endSN:o}=n,{fragmentHint:s}=n,{maxFragLookUpTolerance:c}=r,l=n.partList,u=!!(this.loadingParts&&l!=null&&l.length&&s);u&&!this.bitrateTest&&l[l.length-1].fragment.sn===s.sn&&(a=a.concat(s),o=s.sn);let d;if(e<t){var f;let n=e<this.lastCurrentTime||e>t-c||(f=this.media)!=null&&f.paused||!this.startFragRequested?0:c;d=Qt(i,a,e,n)}else d=a[a.length-1];if(d){let e=d.sn-n.startSN,t=this.fragmentTracker.getState(d);if((t===K.OK||t===K.PARTIAL&&d.gap)&&(i=d),i&&d.sn===i.sn&&(!u||l[0].fragment.sn>d.sn||!n.live)&&d.level===i.level){let t=a[e+1];d=d.sn<o&&this.fragmentTracker.getState(t)!==K.OK?t:null}}return d}alignPlaylists(e,t,n){let r=e.fragments.length;if(!r)return this.warn(`No fragments in live playlist`),0;let i=e.fragmentStart,a=!t,o=e.alignedSliding&&p(i);if(a||!o&&!i){ai(n,e);let i=e.fragmentStart;return this.log(`Live playlist sliding: ${i.toFixed(2)} start-sn: ${t?t.startSN:`na`}->${e.startSN} fragments: ${r}`),i}return i}waitForCdnTuneIn(e){return e.live&&e.canBlockReload&&e.partTarget&&e.tuneInGoal>Math.max(e.partHoldBack,e.partTarget*3)}setStartPosition(e,t){let n=this.startPosition;n<t&&(n=-1);let r=this.timelineOffset;if(n===-1){let i=this.startTimeOffset!==null,a=i?this.startTimeOffset:e.startTimeOffset;a!==null&&p(a)?(n=t+a,a<0&&(n+=e.edge),n=Math.min(Math.max(t,n),t+e.totalduration),this.log(`Setting startPosition to ${n} for start time offset ${a} found in ${i?`multivariant`:`media`} playlist`),this.startPosition=n):e.live?(n=this.hls.liveSyncPosition||t,this.log(`Setting startPosition to -1 to start at live edge ${n}`),this.startPosition=-1):(this.log(`setting startPosition to 0 by default`),this.startPosition=n=0),this.lastCurrentTime=n+r}this.nextLoadPosition=n+r}getLoadPosition(){var e;let{media:t}=this,n=0;return(e=this.hls)!=null&&e.hasEnoughToStart&&t?n=t.currentTime:this.nextLoadPosition>=0&&(n=this.nextLoadPosition),n}handleFragLoadAborted(e,t){this.transmuxer&&e.type===this.playlistType&&B(e)&&e.stats.aborted&&(this.log(`Fragment ${e.sn}${t?` part `+t.index:``} of ${this.playlistLabel()} ${e.level} was aborted`),this.resetFragmentLoading(e))}resetFragmentLoading(e){(!this.fragCurrent||!this.fragContextChanged(e)&&this.state!==X.FRAG_LOADING_WAITING_RETRY)&&(this.state=X.IDLE)}onFragmentOrKeyLoadError(e,t){if(t.chunkMeta&&!t.frag){let e=this.getCurrentContext(t.chunkMeta);e&&(t.frag=e.frag)}let n=t.frag;if(!n||n.type!==e||!this.levels)return;if(this.fragContextChanged(n)){this.warn(`Frag load error must match current frag to retry ${n.url} > ${this.fragCurrent?.url}`);return}let r=t.details===_.FRAG_GAP;r&&this.fragmentTracker.fragBuffered(n,!0);let i=t.errorAction;if(!i){this.state=X.ERROR;return}let{action:a,flags:o,retryCount:s=0,retryConfig:c}=i,l=!!c,u=l&&a===G.RetryRequest,d=l&&!i.resolved&&o===pn.MoveAllAlternatesMatchingHost,f=this.hls.latestLevelDetails?.live;if(!u&&d&&B(n)&&!n.endList&&f&&!on(t))this.resetFragmentErrors(e),this.treatAsGap(n),i.resolved=!0;else if((u||d)&&s<c.maxNumRetry){let r=fn(t.response?.code),a=cn(c,s);if(this.resetStartWhenNotLoaded(),this.retryDate=self.performance.now()+a,this.state=X.FRAG_LOADING_WAITING_RETRY,i.resolved=!0,r){this.log(`Waiting for connection (offline)`),this.retryDate=1/0,t.reason=`offline`;return}this.warn(`Fragment ${n.sn} of ${e} ${n.level} errored with ${t.details}, retrying loading ${s+1}/${c.maxNumRetry} in ${a}ms`)}else if(c)if(this.resetFragmentErrors(e),s<c.maxNumRetry)!r&&a!==G.RemoveAlternatePermanently&&(i.resolved=!0);else{this.warn(`${t.details} reached or exceeded max retry (${s})`);return}else a===G.SendAlternateToPenaltyBox?this.state=X.WAITING_LEVEL:this.state=X.ERROR;this.tickImmediate()}checkRetryDate(){let e=self.performance.now(),t=this.retryDate,n=t===1/0;(!t||e>=t||n&&!fn(0))&&(n&&this.log(`Connection restored (online)`),this.resetStartWhenNotLoaded(),this.state=X.IDLE)}reduceLengthAndFlushBuffer(e){if(this.state===X.PARSING||this.state===X.PARSED){let t=e.frag,n=e.parent,r=this.getFwdBufferInfo(this.mediaBuffer,n),i=r&&r.len>.5;i&&this.reduceMaxBufferLength(r.len,t?.duration||10);let a=!i;return a&&this.warn(`Buffer full error while media.currentTime (${this.getLoadPosition()}) is not buffered, flush ${n} buffer`),t&&(this.fragmentTracker.removeFragment(t),this.nextLoadPosition=t.start),this.resetLoadingState(),a}return!1}resetFragmentErrors(e){e===b.AUDIO&&(this.fragCurrent=null),this.hls.hasEnoughToStart||(this.startFragRequested=!1),this.state!==X.STOPPED&&(this.state=X.IDLE)}afterBufferFlushed(e,t,n){if(!e)return;let r=q.getBuffered(e);this.fragmentTracker.detectEvictedFragments(t,r,n),this.state===X.ENDED&&this.resetLoadingState()}resetLoadingState(){this.log(`Reset loading state`),this.fragCurrent=null,this.fragPrevious=null,this.state!==X.STOPPED&&(this.state=X.IDLE)}resetStartWhenNotLoaded(){if(!this.hls.hasEnoughToStart){this.startFragRequested=!1;let e=this.levelLastLoaded,t=e?e.details:null;t!=null&&t.live?(this.log(`resetting startPosition for live start`),this.startPosition=-1,this.setStartPosition(t,t.fragmentStart),this.resetLoadingState()):this.nextLoadPosition=this.startPosition}}resetWhenMissingContext(e){this.log(`Loading context changed while buffering sn ${e.sn} of ${this.playlistLabel()} ${e.level===-1?`<removed>`:e.level}. This chunk will not be buffered.`),this.removeUnbufferedFrags(),this.resetStartWhenNotLoaded(),this.resetLoadingState()}removeUnbufferedFrags(e=0){this.fragmentTracker.removeFragmentsInRange(e,1/0,this.playlistType,!1,!0)}updateLevelTiming(e,t,n,r){let i=n.details;if(!i){this.warn(`level.details undefined`);return}if(!Object.keys(e.elementaryStreams).reduce((t,a)=>{let o=e.elementaryStreams[a];if(o){let s=o.endPTS-o.startPTS;if(s<=0)return this.warn(`Could not parse fragment ${e.sn} ${a} duration reliably (${s})`),t||!1;let c=r?0:Br(i,e,o.startPTS,o.endPTS,o.startDTS,o.endDTS,this);return this.hls.trigger(v.LEVEL_PTS_UPDATED,{details:i,level:n,drift:c,type:a,frag:e,start:o.startPTS,end:o.endPTS}),!0}return t},!1)){let t=this.transmuxer?.error===null;if((n.fragmentError===0||t&&(n.fragmentError<2||e.endList))&&this.treatAsGap(e,n),t){let t=Error(`Found no media in fragment ${e.sn} of ${this.playlistLabel()} ${e.level} resetting transmuxer to fallback to playlist timing`);if(this.warn(t.message),this.hls.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.FRAG_PARSING_ERROR,fatal:!1,error:t,frag:e,reason:`Found no media in msn ${e.sn} of ${this.playlistLabel()} "${n.url}"`}),!this.hls)return;this.resetTransmuxer()}}this.state=X.PARSED,this.log(`Parsed ${e.type} sn: ${e.sn}${t?` part: `+t.index:``} of ${this.fragInfo(e,!1,t)})`),this.hls.trigger(v.FRAG_PARSED,{frag:e,part:t})}playlistLabel(){return this.playlistType===b.MAIN?`level`:`track`}fragInfo(e,t=!0,n){return`${this.playlistLabel()} ${e.level} (${n?`part`:`frag`}:[${((t&&!n?e.startPTS:(n||e).start)??NaN).toFixed(3)}-${((t&&!n?e.endPTS:(n||e).end)??NaN).toFixed(3)}]${n&&e.type===`main`?`INDEPENDENT=`+(n.independent?`YES`:`NO`):``}`}treatAsGap(e,t){t&&t.fragmentError++,e.gap=!0,this.fragmentTracker.removeFragment(e),this.fragmentTracker.fragBuffered(e,!0)}resetTransmuxer(){var e;(e=this.transmuxer)==null||e.reset()}recoverWorkerError(e){e.event===`demuxerWorker`&&(this.fragmentTracker.removeAllFragments(),this.transmuxer&&=(this.transmuxer.destroy(),null),this.resetStartWhenNotLoaded(),this.resetLoadingState())}set state(e){let t=this._state;t!==e&&(this._state=e,this.log(`${t}->${e}`))}get state(){return this._state}};function fi(e){return!!e.interstitialsController&&e.enableInterstitialPlayback!==!1}var pi=class{constructor(){this.chunks=[],this.dataLength=0}push(e){this.chunks.push(e),this.dataLength+=e.length}flush(){let{chunks:e,dataLength:t}=this,n;if(e.length)n=e.length===1?e[0]:mi(e,t);else return new Uint8Array;return this.reset(),n}reset(){this.chunks.length=0,this.dataLength=0}};function mi(e,t){let n=new Uint8Array(t),r=0;for(let t=0;t<e.length;t++){let i=e[t];n.set(i,r),r+=i.length}return n}var hi={exports:{}},gi;function _i(){return gi?hi.exports:(gi=1,(function(e){var t=Object.prototype.hasOwnProperty,n=`~`;function r(){}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1));function i(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function a(e,t,r,a,o){if(typeof r!=`function`)throw TypeError(`The listener must be a function`);var s=new i(r,a||e,o),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],s]:e._events[c].push(s):(e._events[c]=s,e._eventsCount++),e}function o(e,t){--e._eventsCount===0?e._events=new r:delete e._events[t]}function s(){this._events=new r,this._eventsCount=0}s.prototype.eventNames=function(){var e=[],r,i;if(this._eventsCount===0)return e;for(i in r=this._events)t.call(r,i)&&e.push(n?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e},s.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,a=r.length,o=Array(a);i<a;i++)o[i]=r[i].fn;return o},s.prototype.listenerCount=function(e){var t=n?n+e:e,r=this._events[t];return r?r.fn?1:r.length:0},s.prototype.emit=function(e,t,r,i,a,o){var s=n?n+e:e;if(!this._events[s])return!1;var c=this._events[s],l=arguments.length,u,d;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,i),!0;case 5:return c.fn.call(c.context,t,r,i,a),!0;case 6:return c.fn.call(c.context,t,r,i,a,o),!0}for(d=1,u=Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f=c.length,p;for(d=0;d<f;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,r);break;case 4:c[d].fn.call(c[d].context,t,r,i);break;default:if(!u)for(p=1,u=Array(l-1);p<l;p++)u[p-1]=arguments[p];c[d].fn.apply(c[d].context,u)}}return!0},s.prototype.on=function(e,t,n){return a(this,e,t,n,!1)},s.prototype.once=function(e,t,n){return a(this,e,t,n,!0)},s.prototype.removeListener=function(e,t,r,i){var a=n?n+e:e;if(!this._events[a])return this;if(!t)return o(this,a),this;var s=this._events[a];if(s.fn)s.fn===t&&(!i||s.once)&&(!r||s.context===r)&&o(this,a);else{for(var c=0,l=[],u=s.length;c<u;c++)(s[c].fn!==t||i&&!s[c].once||r&&s[c].context!==r)&&l.push(s[c]);l.length?this._events[a]=l.length===1?l[0]:l:o(this,a)}return this},s.prototype.removeAllListeners=function(e){var t;return e?(t=n?n+e:e,this._events[t]&&o(this,t)):(this._events=new r,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prefixed=n,s.EventEmitter=s,e.exports=s})(hi),hi.exports)}var vi=ae(_i()),yi=`1.6.16`,bi={};function xi(){return typeof __HLS_WORKER_BUNDLE__==`function`}function Si(){let e=bi[yi];if(e)return e.clientCount++,e;let t=new self.Blob([`var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(${__HLS_WORKER_BUNDLE__.toString()})(true);`],{type:`text/javascript`}),n=self.URL.createObjectURL(t),r={worker:new self.Worker(n),objectURL:n,clientCount:1};return bi[yi]=r,r}function Ci(e){let t=bi[e];if(t)return t.clientCount++,t;let n=new self.URL(e,self.location.href).href,r={worker:new self.Worker(n),scriptURL:n,clientCount:1};return bi[e]=r,r}function wi(e){let t=bi[e||yi];if(t&&t.clientCount--===1){let{worker:n,objectURL:r}=t;delete bi[e||yi],r&&self.URL.revokeObjectURL(r),n.terminate()}}function Ti(e,t){return t+10<=e.length&&e[t]===51&&e[t+1]===68&&e[t+2]===73&&e[t+3]<255&&e[t+4]<255&&e[t+6]<128&&e[t+7]<128&&e[t+8]<128&&e[t+9]<128}function Ei(e,t){return t+10<=e.length&&e[t]===73&&e[t+1]===68&&e[t+2]===51&&e[t+3]<255&&e[t+4]<255&&e[t+6]<128&&e[t+7]<128&&e[t+8]<128&&e[t+9]<128}function Di(e,t){let n=0;return n=(e[t]&127)<<21,n|=(e[t+1]&127)<<14,n|=(e[t+2]&127)<<7,n|=e[t+3]&127,n}function Oi(e,t){let n=t,r=0;for(;Ei(e,t);){r+=10;let n=Di(e,t+6);r+=n,Ti(e,t+10)&&(r+=10),t+=r}if(r>0)return e.subarray(n,n+r)}function ki(e,t,n,r){let i=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],a=t[n+2],o=a>>2&15;if(o>12){let t=Error(`invalid ADTS sampling index:${o}`);e.emit(v.ERROR,v.ERROR,{type:g.MEDIA_ERROR,details:_.FRAG_PARSING_ERROR,fatal:!0,error:t,reason:t.message});return}let s=(a>>6&3)+1,c=t[n+3]>>6&3|(a&1)<<2,l=`mp4a.40.`+s,u=i[o],d=o;(s===5||s===29)&&(d-=3);let f=[s<<3|(d&14)>>1,(d&1)<<7|c<<3];return I.log(`manifest codec:${r}, parsed codec:${l}, channels:${c}, rate:${u} (ADTS object type:${s} sampling index:${o})`),{config:f,samplerate:u,channelCount:c,codec:l,parsedCodec:l,manifestCodec:r}}function Ai(e,t){return e[t]===255&&(e[t+1]&246)==240}function ji(e,t){return e[t+1]&1?7:9}function Mi(e,t){return(e[t+3]&3)<<11|e[t+4]<<3|(e[t+5]&224)>>>5}function Ni(e,t){return t+5<e.length}function Pi(e,t){return t+1<e.length&&Ai(e,t)}function Fi(e,t){return Ni(e,t)&&Ai(e,t)&&Mi(e,t)<=e.length-t}function Ii(e,t){if(Pi(e,t)){let n=ji(e,t);if(t+n>=e.length)return!1;let r=Mi(e,t);if(r<=n)return!1;let i=t+r;return i===e.length||Pi(e,i)}return!1}function Li(e,t,n,r,i){if(!e.samplerate){let a=ki(t,n,r,i);if(!a)return;w(e,a)}}function Ri(e){return 1024*9e4/e}function zi(e,t){let n=ji(e,t);if(t+n<=e.length){let r=Mi(e,t)-n;if(r>0)return{headerLength:n,frameLength:r}}}function Bi(e,t,n,r,i){let a=r+i*Ri(e.samplerate),o=zi(t,n),s;if(o){let{frameLength:r,headerLength:i}=o,c=i+r,l=Math.max(0,n+c-t.length);l?(s=new Uint8Array(c-i),s.set(t.subarray(n+i,t.length),0)):s=t.subarray(n+i,n+c);let u={unit:s,pts:a};return l||e.samples.push(u),{sample:u,length:c,missing:l}}let c=t.length-n;return s=new Uint8Array(c),s.set(t.subarray(n,t.length),0),{sample:{unit:s,pts:a},length:c,missing:-1}}function Vi(e,t){return Ei(e,t)&&Di(e,t+6)+10<=e.length-t}function Hi(e){return e instanceof ArrayBuffer?e:e.byteOffset==0&&e.byteLength==e.buffer.byteLength?e.buffer:new Uint8Array(e).buffer}function Ui(e,t=0,n=1/0){return Wi(e,t,n,Uint8Array)}function Wi(e,t,n,r){let i=Gi(e),a=1;`BYTES_PER_ELEMENT`in r&&(a=r.BYTES_PER_ELEMENT);let o=Ki(e)?e.byteOffset:0,s=(o+e.byteLength)/a,c=(o+t)/a,l=Math.floor(Math.max(0,Math.min(c,s)));return new r(i,l,Math.floor(Math.min(l+Math.max(n,0),s))-l)}function Gi(e){return e instanceof ArrayBuffer?e:e.buffer}function Ki(e){return e&&e.buffer instanceof ArrayBuffer&&e.byteLength!==void 0&&e.byteOffset!==void 0}function qi(e){let t={key:e.type,description:``,data:``,mimeType:null,pictureType:null};if(e.size<2)return;if(e.data[0]!==3){console.log(`Ignore frame with unrecognized character encoding`);return}let n=e.data.subarray(1).indexOf(0);if(n===-1)return;let r=L(Ui(e.data,1,n)),i=e.data[2+n],a=e.data.subarray(3+n).indexOf(0);if(a===-1)return;let o=L(Ui(e.data,3+n,a)),s;return s=r===`-->`?L(Ui(e.data,4+n+a)):Hi(e.data.subarray(4+n+a)),t.mimeType=r,t.pictureType=i,t.description=o,t.data=s,t}function Ji(e){if(e.size<2)return;let t=L(e.data,!0),n=new Uint8Array(e.data.subarray(t.length+1));return{key:e.type,info:t,data:n.buffer}}function Yi(e){if(e.size<2)return;if(e.type===`TXXX`){let t=1,n=L(e.data.subarray(t),!0);t+=n.length+1;let r=L(e.data.subarray(t));return{key:e.type,info:n,data:r}}let t=L(e.data.subarray(1));return{key:e.type,info:``,data:t}}function Xi(e){if(e.type===`WXXX`){if(e.size<2)return;let t=1,n=L(e.data.subarray(t),!0);t+=n.length+1;let r=L(e.data.subarray(t));return{key:e.type,info:n,data:r}}let t=L(e.data);return{key:e.type,info:``,data:t}}function Zi(e){return e.type===`PRIV`?Ji(e):e.type[0]===`W`?Xi(e):e.type===`APIC`?qi(e):Yi(e)}function Qi(e){let t=String.fromCharCode(e[0],e[1],e[2],e[3]),n=Di(e,4);return{type:t,size:n,data:e.subarray(10,10+n)}}var $i=10,ea=10;function ta(e){let t=0,n=[];for(;Ei(e,t);){let r=Di(e,t+6);e[t+5]>>6&1&&(t+=$i),t+=$i;let i=t+r;for(;t+ea<i;){let r=Qi(e.subarray(t)),i=Zi(r);i&&n.push(i),t+=r.size+$i}Ti(e,t)&&(t+=$i)}return n}function na(e){return e&&e.key===`PRIV`&&e.info===`com.apple.streaming.transportStreamTimestamp`}function ra(e){if(e.data.byteLength===8){let t=new Uint8Array(e.data),n=t[3]&1,r=(t[4]<<23)+(t[5]<<15)+(t[6]<<7)+t[7];return r/=45,n&&(r+=47721858.84),Math.round(r)}}function ia(e){let t=ta(e);for(let e=0;e<t.length;e++){let n=t[e];if(na(n))return ra(n)}}var aa=function(e){return e.audioId3=`org.id3`,e.dateRange=`com.apple.quicktime.HLS`,e.emsg=`https://aomedia.org/emsg/ID3`,e.misbklv=`urn:misb:KLV:bin:1910.1`,e}({});function oa(e=``,t=9e4){return{type:e,id:-1,pid:-1,inputTimeScale:t,sequenceNumber:-1,samples:[],dropped:0}}var sa=class{constructor(){this._audioTrack=void 0,this._id3Track=void 0,this.frameIndex=0,this.cachedData=null,this.basePTS=null,this.initPTS=null,this.lastPTS=null}resetInitSegment(e,t,n,r){this._id3Track={type:`id3`,id:3,pid:-1,inputTimeScale:9e4,sequenceNumber:0,samples:[],dropped:0}}resetTimeStamp(e){this.initPTS=e,this.resetContiguity()}resetContiguity(){this.basePTS=null,this.lastPTS=null,this.frameIndex=0}canParse(e,t){return!1}appendFrame(e,t,n){}demux(e,t){this.cachedData&&=(e=Le(this.cachedData,e),null);let n=Oi(e,0),r=n?n.length:0,i,a=this._audioTrack,o=this._id3Track,s=n?ia(n):void 0,c=e.length;for((this.basePTS===null||this.frameIndex===0&&p(s))&&(this.basePTS=ca(s,t,this.initPTS),this.lastPTS=this.basePTS),this.lastPTS===null&&(this.lastPTS=this.basePTS),n&&n.length>0&&o.samples.push({pts:this.lastPTS,dts:this.lastPTS,data:n,type:aa.audioId3,duration:1/0});r<c;){if(this.canParse(e,r)){let t=this.appendFrame(a,e,r);t?(this.frameIndex++,this.lastPTS=t.sample.pts,r+=t.length,i=r):r=c}else Vi(e,r)?(n=Oi(e,r),o.samples.push({pts:this.lastPTS,dts:this.lastPTS,data:n,type:aa.audioId3,duration:1/0}),r+=n.length,i=r):r++;if(r===c&&i!==c){let t=e.slice(i);this.cachedData?this.cachedData=Le(this.cachedData,t):this.cachedData=t}}return{audioTrack:a,videoTrack:oa(),id3Track:o,textTrack:oa()}}demuxSampleAes(e,t,n){return Promise.reject(Error(`[${this}] This demuxer does not support Sample-AES decryption`))}flush(e){let t=this.cachedData;return t&&(this.cachedData=null,this.demux(t,0)),{audioTrack:this._audioTrack,videoTrack:oa(),id3Track:this._id3Track,textTrack:oa()}}destroy(){this.cachedData=null,this._audioTrack=this._id3Track=void 0}},ca=(e,t,n)=>{if(p(e))return e*90;let r=n?n.baseTime*9e4/n.timescale:0;return t*9e4+r},la=null,ua=[32,64,96,128,160,192,224,256,288,320,352,384,416,448,32,48,56,64,80,96,112,128,160,192,224,256,320,384,32,40,48,56,64,80,96,112,128,160,192,224,256,320,32,48,56,64,80,96,112,128,144,160,176,192,224,256,8,16,24,32,40,48,56,64,80,96,112,128,144,160],da=[44100,48e3,32e3,22050,24e3,16e3,11025,12e3,8e3],fa=[[0,72,144,12],[0,0,0,0],[0,72,144,12],[0,144,144,12]],pa=[0,1,1,4];function ma(e,t,n,r,i){if(n+24>t.length)return;let a=ha(t,n);if(a&&n+a.frameLength<=t.length){let o=r+i*(a.samplesPerFrame*9e4/a.sampleRate),s={unit:t.subarray(n,n+a.frameLength),pts:o,dts:o};return e.config=[],e.channelCount=a.channelCount,e.samplerate=a.sampleRate,e.samples.push(s),{sample:s,length:a.frameLength,missing:0}}}function ha(e,t){let n=e[t+1]>>3&3,r=e[t+1]>>1&3,i=e[t+2]>>4&15,a=e[t+2]>>2&3;if(n!==1&&i!==0&&i!==15&&a!==3){let o=e[t+2]>>1&1,s=e[t+3]>>6,c=ua[(n===3?3-r:r===3?3:4)*14+i-1]*1e3,l=da[(n===3?0:n===2?1:2)*3+a],u=s===3?1:2,d=fa[n][r],f=pa[r],p=d*8*f,m=Math.floor(d*c/l+o)*f;if(la===null){let e=(navigator.userAgent||``).match(/Chrome\/(\d+)/i);la=e?parseInt(e[1]):0}return la&&la<=87&&r===2&&c>=224e3&&s===0&&(e[t+3]=e[t+3]|128),{sampleRate:l,channelCount:u,frameLength:m,samplesPerFrame:p}}}function ga(e,t){return e[t]===255&&(e[t+1]&224)==224&&(e[t+1]&6)!=0}function _a(e,t){return t+1<e.length&&ga(e,t)}function va(e,t){return ga(e,t)&&4<=e.length-t}function ya(e,t){if(t+1<e.length&&ga(e,t)){let n=ha(e,t),r=4;n!=null&&n.frameLength&&(r=n.frameLength);let i=t+r;return i===e.length||_a(e,i)}return!1}var ba=class extends sa{constructor(e,t){super(),this.observer=void 0,this.config=void 0,this.observer=e,this.config=t}resetInitSegment(e,t,n,r){super.resetInitSegment(e,t,n,r),this._audioTrack={container:`audio/adts`,type:`audio`,id:2,pid:-1,sequenceNumber:0,segmentCodec:`aac`,samples:[],manifestCodec:t,duration:r,inputTimeScale:9e4,dropped:0}}static probe(e,t){if(!e)return!1;let n=Oi(e,0)?.length||0;if(ya(e,n))return!1;for(let r=e.length;n<r;n++)if(Ii(e,n))return t.log(`ADTS sync word found !`),!0;return!1}canParse(e,t){return Fi(e,t)}appendFrame(e,t,n){Li(e,this.observer,t,n,e.manifestCodec);let r=Bi(e,t,n,this.basePTS,this.frameIndex);if(r&&r.missing===0)return r}},xa=(e,t)=>{let n=0,r=5;t+=r;let i=new Uint32Array(1),a=new Uint32Array(1),o=new Uint8Array(1);for(;r>0;){o[0]=e[t];let s=Math.min(r,8),c=8-s;a[0]=4278190080>>>24+c<<c,i[0]=(o[0]&a[0])>>c,n=n?n<<s|i[0]:i[0],t+=1,r-=s}return n},Sa=class extends sa{constructor(e){super(),this.observer=void 0,this.observer=e}resetInitSegment(e,t,n,r){super.resetInitSegment(e,t,n,r),this._audioTrack={container:`audio/ac-3`,type:`audio`,id:2,pid:-1,sequenceNumber:0,segmentCodec:`ac3`,samples:[],manifestCodec:t,duration:r,inputTimeScale:9e4,dropped:0}}canParse(e,t){return t+64<e.length}appendFrame(e,t,n){let r=Ca(e,t,n,this.basePTS,this.frameIndex);if(r!==-1)return{sample:e.samples[e.samples.length-1],length:r,missing:0}}static probe(e){if(!e)return!1;let t=Oi(e,0);if(!t)return!1;let n=t.length;return e[n]===11&&e[n+1]===119&&ia(t)!==void 0&&xa(e,n)<16}};function Ca(e,t,n,r,i){if(n+8>t.length||t[n]!==11||t[n+1]!==119)return-1;let a=t[n+4]>>6;if(a>=3)return-1;let o=[48e3,44100,32e3][a],s=t[n+4]&63,c=[64,69,96,64,70,96,80,87,120,80,88,120,96,104,144,96,105,144,112,121,168,112,122,168,128,139,192,128,140,192,160,174,240,160,175,240,192,208,288,192,209,288,224,243,336,224,244,336,256,278,384,256,279,384,320,348,480,320,349,480,384,417,576,384,418,576,448,487,672,448,488,672,512,557,768,512,558,768,640,696,960,640,697,960,768,835,1152,768,836,1152,896,975,1344,896,976,1344,1024,1114,1536,1024,1115,1536,1152,1253,1728,1152,1254,1728,1280,1393,1920,1280,1394,1920][s*3+a]*2;if(n+c>t.length)return-1;let l=t[n+6]>>5,u=0;l===2?u+=2:(l&1&&l!==1&&(u+=2),l&4&&(u+=2));let d=(t[n+6]<<8|t[n+7])>>12-u&1,f=[2,1,2,3,3,4,4,5][l]+d,p=t[n+5]>>3,m=t[n+5]&7,h=new Uint8Array([a<<6|p<<1|m>>2,(m&3)<<6|l<<3|d<<2|s>>4,s<<4&224]),g=r+i*(1536/o*9e4),_=t.subarray(n,n+c);return e.config=h,e.channelCount=f,e.samplerate=o,e.samples.push({unit:_,pts:g}),c}var wa=class extends sa{resetInitSegment(e,t,n,r){super.resetInitSegment(e,t,n,r),this._audioTrack={container:`audio/mpeg`,type:`audio`,id:2,pid:-1,sequenceNumber:0,segmentCodec:`mp3`,samples:[],manifestCodec:t,duration:r,inputTimeScale:9e4,dropped:0}}static probe(e){if(!e)return!1;let t=Oi(e,0),n=t?.length||0;if(t&&e[n]===11&&e[n+1]===119&&ia(t)!==void 0&&xa(e,n)<=16)return!1;for(let t=e.length;n<t;n++)if(ya(e,n))return I.log(`MPEG Audio sync word found !`),!0;return!1}canParse(e,t){return va(e,t)}appendFrame(e,t,n){if(this.basePTS!==null)return ma(e,t,n,this.basePTS,this.frameIndex)}},Ta=/\/emsg[-/]ID3/i,Ea=class{constructor(e,t){this.remainderData=null,this.timeOffset=0,this.config=void 0,this.videoTrack=void 0,this.audioTrack=void 0,this.id3Track=void 0,this.txtTrack=void 0,this.config=t}resetTimeStamp(){}resetInitSegment(e,t,n,r){let i=this.videoTrack=oa(`video`,1),a=this.audioTrack=oa(`audio`,1),o=this.txtTrack=oa(`text`,1);if(this.id3Track=oa(`id3`,1),this.timeOffset=0,!(e!=null&&e.byteLength))return;let s=we(e);if(s.video){let{id:e,timescale:t,codec:n,supplemental:r}=s.video;i.id=e,i.timescale=o.timescale=t,i.codec=n,i.supplemental=r}if(s.audio){let{id:e,timescale:t,codec:n}=s.audio;a.id=e,a.timescale=t,a.codec=n}o.id=ve.text,i.sampleDuration=0,i.duration=a.duration=r}resetContiguity(){this.remainderData=null}static probe(e){return Se(e)}demux(e,t){this.timeOffset=t;let n=e,r=this.videoTrack,i=this.txtTrack;if(this.config.progressive){this.remainderData&&(n=Le(this.remainderData,e));let t=Ie(n);this.remainderData=t.remainder,r.samples=t.valid||new Uint8Array}else r.samples=n;let a=this.extractID3Track(r,t);return i.samples=Re(t,r),{videoTrack:r,audioTrack:this.audioTrack,id3Track:a,textTrack:this.txtTrack}}flush(){let e=this.timeOffset,t=this.videoTrack,n=this.txtTrack;t.samples=this.remainderData||new Uint8Array,this.remainderData=null;let r=this.extractID3Track(t,this.timeOffset);return n.samples=Re(e,t),{videoTrack:t,audioTrack:oa(),id3Track:r,textTrack:oa()}}extractID3Track(e,t){let n=this.id3Track;if(e.samples.length){let r=U(e.samples,[`emsg`]);r&&r.forEach(e=>{let r=Ue(e);if(Ta.test(r.schemeIdUri)){let e=Da(r,t),i=r.eventDuration===4294967295?1/0:r.eventDuration/r.timeScale;i<=.001&&(i=1/0);let a=r.payload;n.samples.push({data:a,len:a.byteLength,dts:e,pts:e,type:aa.emsg,duration:i})}else if(this.config.enableEmsgKLVMetadata&&r.schemeIdUri.startsWith(`urn:misb:KLV:bin:1910.1`)){let e=Da(r,t);n.samples.push({data:r.payload,len:r.payload.byteLength,dts:e,pts:e,type:aa.misbklv,duration:1/0})}})}return n}demuxSampleAes(e,t,n){return Promise.reject(Error(`The MP4 demuxer does not support SAMPLE-AES decryption`))}destroy(){this.config=null,this.remainderData=null,this.videoTrack=this.audioTrack=this.id3Track=this.txtTrack=void 0}};function Da(e,t){return p(e.presentationTime)?e.presentationTime/e.timeScale:t+e.presentationTimeDelta/e.timeScale}var Oa=class{constructor(e,t,n){this.keyData=void 0,this.decrypter=void 0,this.keyData=n,this.decrypter=new Dn(t,{removePKCS7Padding:!1})}decryptBuffer(e){return this.decrypter.decrypt(e,this.keyData.key.buffer,this.keyData.iv.buffer,bn.cbc)}decryptAacSample(e,t,n){let r=e[t].unit;if(r.length<=16)return;let i=r.subarray(16,r.length-r.length%16),a=i.buffer.slice(i.byteOffset,i.byteOffset+i.length);this.decryptBuffer(a).then(i=>{let a=new Uint8Array(i);r.set(a,16),this.decrypter.isSync()||this.decryptAacSamples(e,t+1,n)}).catch(n)}decryptAacSamples(e,t,n){for(;;t++){if(t>=e.length){n();return}if(!(e[t].unit.length<32)&&(this.decryptAacSample(e,t,n),!this.decrypter.isSync()))return}}getAvcEncryptedData(e){let t=Math.floor((e.length-48)/160)*16+16,n=new Int8Array(t),r=0;for(let t=32;t<e.length-16;t+=160,r+=16)n.set(e.subarray(t,t+16),r);return n}getAvcDecryptedUnit(e,t){let n=new Uint8Array(t),r=0;for(let t=32;t<e.length-16;t+=160,r+=16)e.set(n.subarray(r,r+16),t);return e}decryptAvcSample(e,t,n,r,i){let a=He(i.data),o=this.getAvcEncryptedData(a);this.decryptBuffer(o.buffer).then(o=>{i.data=this.getAvcDecryptedUnit(a,o),this.decrypter.isSync()||this.decryptAvcSamples(e,t,n+1,r)}).catch(r)}decryptAvcSamples(e,t,n,r){if(e instanceof Uint8Array)throw Error(`Cannot decrypt samples of type Uint8Array`);for(;;t++,n=0){if(t>=e.length){r();return}let i=e[t].units;for(;!(n>=i.length);n++){let a=i[n];if(!(a.data.length<=48||a.type!==1&&a.type!==5)&&(this.decryptAvcSample(e,t,n,r,a),!this.decrypter.isSync()))return}}}},ka=class{constructor(){this.VideoSample=null}createVideoSample(e,t,n){return{key:e,frame:!1,pts:t,dts:n,units:[],length:0}}getLastNalUnit(e){var t;let n=this.VideoSample,r;if((!n||n.units.length===0)&&(n=e[e.length-1]),(t=n)!=null&&t.units){let e=n.units;r=e[e.length-1]}return r}pushAccessUnit(e,t){if(e.units.length&&e.frame){if(e.pts===void 0){let n=t.samples,r=n.length;if(r){let t=n[r-1];e.pts=t.pts,e.dts=t.dts}else{t.dropped++;return}}t.samples.push(e)}}parseNALu(e,t,n){let r=t.byteLength,i=e.naluState||0,a=i,o=[],s=0,c,l,u,d=-1,f=0;for(i===-1&&(d=0,f=this.getNALuType(t,0),i=0,s=1);s<r;){if(c=t[s++],!i){i=+!c;continue}if(i===1){i=c?0:2;continue}if(!c)i=3;else if(c===1){if(l=s-i-1,d>=0){let e={data:t.subarray(d,l),type:f};o.push(e)}else{let n=this.getLastNalUnit(e.samples);n&&(a&&s<=4-a&&n.state&&(n.data=n.data.subarray(0,n.data.byteLength-a)),l>0&&(n.data=Le(n.data,t.subarray(0,l)),n.state=0))}s<r?(u=this.getNALuType(t,s),d=s,f=u,i=0):i=-1}else i=0}if(d>=0&&i>=0){let e={data:t.subarray(d,r),type:f,state:i};o.push(e)}if(o.length===0){let n=this.getLastNalUnit(e.samples);n&&(n.data=Le(n.data,t))}return e.naluState=i,o}},Aa=class{constructor(e){this.data=void 0,this.bytesAvailable=void 0,this.word=void 0,this.bitsAvailable=void 0,this.data=e,this.bytesAvailable=e.byteLength,this.word=0,this.bitsAvailable=0}loadWord(){let e=this.data,t=this.bytesAvailable,n=e.byteLength-t,r=new Uint8Array(4),i=Math.min(4,t);if(i===0)throw Error(`no bytes available`);r.set(e.subarray(n,n+i)),this.word=new DataView(r.buffer).getUint32(0),this.bitsAvailable=i*8,this.bytesAvailable-=i}skipBits(e){let t;e=Math.min(e,this.bytesAvailable*8+this.bitsAvailable),this.bitsAvailable>e?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t<<3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}readBits(e){let t=Math.min(this.bitsAvailable,e),n=this.word>>>32-t;if(e>32&&I.error(`Cannot read more than 32 bits at a time`),this.bitsAvailable-=t,this.bitsAvailable>0)this.word<<=t;else if(this.bytesAvailable>0)this.loadWord();else throw Error(`no bits available`);return t=e-t,t>0&&this.bitsAvailable?n<<t|this.readBits(t):n}skipLZ(){let e;for(e=0;e<this.bitsAvailable;++e)if(this.word&2147483648>>>e)return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}skipUEG(){this.skipBits(1+this.skipLZ())}skipEG(){this.skipBits(1+this.skipLZ())}readUEG(){let e=this.skipLZ();return this.readBits(e+1)-1}readEG(){let e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}readBoolean(){return this.readBits(1)===1}readUByte(){return this.readBits(8)}readUShort(){return this.readBits(16)}readUInt(){return this.readBits(32)}},ja=class extends ka{parsePES(e,t,n,r){let i=this.parseNALu(e,n.data,r),a=this.VideoSample,o,s=!1;n.data=null,a&&i.length&&!e.audFound&&(this.pushAccessUnit(a,e),a=this.VideoSample=this.createVideoSample(!1,n.pts,n.dts)),i.forEach(r=>{var i,c;switch(r.type){case 1:{let t=!1;o=!0;let i=r.data;if(s&&i.length>4){let e=this.readSliceType(i);(e===2||e===4||e===7||e===9)&&(t=!0)}if(t){var l;(l=a)!=null&&l.frame&&!a.key&&(this.pushAccessUnit(a,e),a=this.VideoSample=null)}a||=this.VideoSample=this.createVideoSample(!0,n.pts,n.dts),a.frame=!0,a.key=t;break}case 5:o=!0,(i=a)!=null&&i.frame&&!a.key&&(this.pushAccessUnit(a,e),a=this.VideoSample=null),a||=this.VideoSample=this.createVideoSample(!0,n.pts,n.dts),a.key=!0,a.frame=!0;break;case 6:o=!0,Ve(r.data,1,n.pts,t.samples);break;case 7:{o=!0,s=!0;let t=r.data,n=this.readSPS(t);if(!e.sps||e.width!==n.width||e.height!==n.height||e.pixelRatio?.[0]!==n.pixelRatio[0]||e.pixelRatio?.[1]!==n.pixelRatio[1]){e.width=n.width,e.height=n.height,e.pixelRatio=n.pixelRatio,e.sps=[t];let r=t.subarray(1,4),i=`avc1.`;for(let e=0;e<3;e++){let t=r[e].toString(16);t.length<2&&(t=`0`+t),i+=t}e.codec=i}break}case 8:o=!0,e.pps=[r.data];break;case 9:o=!0,e.audFound=!0,(c=a)!=null&&c.frame&&(this.pushAccessUnit(a,e),a=null),a||=this.VideoSample=this.createVideoSample(!1,n.pts,n.dts);break;case 12:o=!0;break;default:o=!1;break}a&&o&&a.units.push(r)}),r&&a&&(this.pushAccessUnit(a,e),this.VideoSample=null)}getNALuType(e,t){return e[t]&31}readSliceType(e){let t=new Aa(e);return t.readUByte(),t.readUEG(),t.readUEG()}skipScalingList(e,t){let n=8,r=8,i;for(let a=0;a<e;a++)r!==0&&(i=t.readEG(),r=(n+i+256)%256),n=r===0?n:r}readSPS(e){let t=new Aa(e),n=0,r=0,i=0,a=0,o,s,c,l=t.readUByte.bind(t),u=t.readBits.bind(t),d=t.readUEG.bind(t),f=t.readBoolean.bind(t),p=t.skipBits.bind(t),m=t.skipEG.bind(t),h=t.skipUEG.bind(t),g=this.skipScalingList.bind(this);l();let _=l();if(u(5),p(3),l(),h(),_===100||_===110||_===122||_===244||_===44||_===83||_===86||_===118||_===128){let e=d();if(e===3&&p(1),h(),h(),p(1),f())for(s=e===3?12:8,c=0;c<s;c++)f()&&g(c<6?16:64,t)}h();let v=d();if(v===0)d();else if(v===1)for(p(1),m(),m(),o=d(),c=0;c<o;c++)m();h(),p(1);let y=d(),b=d(),x=u(1);x===0&&p(1),p(1),f()&&(n=d(),r=d(),i=d(),a=d());let S=[1,1];if(f()&&f())switch(l()){case 1:S=[1,1];break;case 2:S=[12,11];break;case 3:S=[10,11];break;case 4:S=[16,11];break;case 5:S=[40,33];break;case 6:S=[24,11];break;case 7:S=[20,11];break;case 8:S=[32,11];break;case 9:S=[80,33];break;case 10:S=[18,11];break;case 11:S=[15,11];break;case 12:S=[64,33];break;case 13:S=[160,99];break;case 14:S=[4,3];break;case 15:S=[3,2];break;case 16:S=[2,1];break;case 255:S=[l()<<8|l(),l()<<8|l()];break}return{width:Math.ceil((y+1)*16-n*2-r*2),height:(2-x)*(b+1)*16-(x?2:4)*(i+a),pixelRatio:S}}},Ma=class extends ka{constructor(...e){super(...e),this.initVPS=null}parsePES(e,t,n,r){let i=this.parseNALu(e,n.data,r),a=this.VideoSample,o,s=!1;n.data=null,a&&i.length&&!e.audFound&&(this.pushAccessUnit(a,e),a=this.VideoSample=this.createVideoSample(!1,n.pts,n.dts)),i.forEach(r=>{var i,c;switch(r.type){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:a||=this.VideoSample=this.createVideoSample(!1,n.pts,n.dts),a.frame=!0,o=!0;break;case 16:case 17:case 18:case 21:if(o=!0,s){var l;(l=a)!=null&&l.frame&&!a.key&&(this.pushAccessUnit(a,e),a=this.VideoSample=null)}a||=this.VideoSample=this.createVideoSample(!0,n.pts,n.dts),a.key=!0,a.frame=!0;break;case 19:case 20:o=!0,(i=a)!=null&&i.frame&&!a.key&&(this.pushAccessUnit(a,e),a=this.VideoSample=null),a||=this.VideoSample=this.createVideoSample(!0,n.pts,n.dts),a.key=!0,a.frame=!0;break;case 39:o=!0,Ve(r.data,2,n.pts,t.samples);break;case 32:o=!0,e.vps||(typeof e.params!=`object`&&(e.params={}),e.params=w(e.params,this.readVPS(r.data)),this.initVPS=r.data),e.vps=[r.data];break;case 33:if(o=!0,s=!0,e.vps!==void 0&&e.vps[0]!==this.initVPS&&e.sps!==void 0&&!this.matchSPS(e.sps[0],r.data)&&(this.initVPS=e.vps[0],e.sps=e.pps=void 0),!e.sps){let t=this.readSPS(r.data);e.width=t.width,e.height=t.height,e.pixelRatio=t.pixelRatio,e.codec=t.codecString,e.sps=[],typeof e.params!=`object`&&(e.params={});for(let n in t.params)e.params[n]=t.params[n]}this.pushParameterSet(e.sps,r.data,e.vps),a||=this.VideoSample=this.createVideoSample(!0,n.pts,n.dts),a.key=!0;break;case 34:if(o=!0,typeof e.params==`object`){if(!e.pps){e.pps=[];let t=this.readPPS(r.data);for(let n in t)e.params[n]=t[n]}this.pushParameterSet(e.pps,r.data,e.vps)}break;case 35:o=!0,e.audFound=!0,(c=a)!=null&&c.frame&&(this.pushAccessUnit(a,e),a=null),a||=this.VideoSample=this.createVideoSample(!1,n.pts,n.dts);break;default:o=!1;break}a&&o&&a.units.push(r)}),r&&a&&(this.pushAccessUnit(a,e),this.VideoSample=null)}pushParameterSet(e,t,n){(n&&n[0]===this.initVPS||!n&&!e.length)&&e.push(t)}getNALuType(e,t){return(e[t]&126)>>>1}ebsp2rbsp(e){let t=new Uint8Array(e.byteLength),n=0;for(let r=0;r<e.byteLength;r++)r>=2&&e[r]===3&&e[r-1]===0&&e[r-2]===0||(t[n]=e[r],n++);return new Uint8Array(t.buffer,0,n)}pushAccessUnit(e,t){super.pushAccessUnit(e,t),this.initVPS&&=null}readVPS(e){let t=new Aa(e);t.readUByte(),t.readUByte(),t.readBits(4),t.skipBits(2),t.readBits(6);let n=t.readBits(3),r=t.readBoolean();return{numTemporalLayers:n+1,temporalIdNested:r}}readSPS(e){let t=new Aa(this.ebsp2rbsp(e));t.readUByte(),t.readUByte(),t.readBits(4);let n=t.readBits(3);t.readBoolean();let r=t.readBits(2),i=t.readBoolean(),a=t.readBits(5),o=t.readUByte(),s=t.readUByte(),c=t.readUByte(),l=t.readUByte(),u=t.readUByte(),d=t.readUByte(),f=t.readUByte(),p=t.readUByte(),m=t.readUByte(),h=t.readUByte(),g=t.readUByte(),_=[],v=[];for(let e=0;e<n;e++)_.push(t.readBoolean()),v.push(t.readBoolean());if(n>0)for(let e=n;e<8;e++)t.readBits(2);for(let e=0;e<n;e++)_[e]&&(t.readUByte(),t.readUByte(),t.readUByte(),t.readUByte(),t.readUByte(),t.readUByte(),t.readUByte(),t.readUByte(),t.readUByte(),t.readUByte(),t.readUByte()),v[e]&&t.readUByte();t.readUEG();let y=t.readUEG();y==3&&t.skipBits(1);let b=t.readUEG(),x=t.readUEG(),S=t.readBoolean(),C=0,w=0,T=0,E=0;S&&(C+=t.readUEG(),w+=t.readUEG(),T+=t.readUEG(),E+=t.readUEG());let D=t.readUEG(),O=t.readUEG(),k=t.readUEG(),A=t.readBoolean();for(let e=A?0:n;e<=n;e++)t.skipUEG(),t.skipUEG(),t.skipUEG();if(t.skipUEG(),t.skipUEG(),t.skipUEG(),t.skipUEG(),t.skipUEG(),t.skipUEG(),t.readBoolean()&&t.readBoolean())for(let e=0;e<4;e++)for(let n=0;n<(e===3?2:6);n++)if(!t.readBoolean())t.readUEG();else{let n=Math.min(64,1<<4+(e<<1));e>1&&t.readEG();for(let e=0;e<n;e++)t.readEG()}t.readBoolean(),t.readBoolean(),t.readBoolean()&&(t.readUByte(),t.skipUEG(),t.skipUEG(),t.readBoolean());let j=t.readUEG(),M=0;for(let e=0;e<j;e++){let n=!1;if(e!==0&&(n=t.readBoolean()),n){e===j&&t.readUEG(),t.readBoolean(),t.readUEG();let n=0;for(let e=0;e<=M;e++){let e=t.readBoolean(),r=!1;e||(r=t.readBoolean()),(e||r)&&n++}M=n}else{let e=t.readUEG(),n=t.readUEG();M=e+n;for(let n=0;n<e;n++)t.readUEG(),t.readBoolean();for(let e=0;e<n;e++)t.readUEG(),t.readBoolean()}}if(t.readBoolean()){let e=t.readUEG();for(let n=0;n<e;n++){for(let e=0;e<k+4;e++)t.readBits(1);t.readBits(1)}}let N=0,P=1,F=1,ee=!0,I=1,te=0;t.readBoolean(),t.readBoolean();let ne=!1;if(t.readBoolean()){if(t.readBoolean()){let e=t.readUByte();e>0&&e<16?(P=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2][e-1],F=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1][e-1]):e===255&&(P=t.readBits(16),F=t.readBits(16))}if(t.readBoolean()&&t.readBoolean(),t.readBoolean()&&(t.readBits(3),t.readBoolean(),t.readBoolean()&&(t.readUByte(),t.readUByte(),t.readUByte())),t.readBoolean()&&(t.readUEG(),t.readUEG()),t.readBoolean(),t.readBoolean(),t.readBoolean(),ne=t.readBoolean(),ne&&(t.skipUEG(),t.skipUEG(),t.skipUEG(),t.skipUEG()),t.readBoolean()&&(I=t.readBits(32),te=t.readBits(32),t.readBoolean()&&t.readUEG(),t.readBoolean())){let e=t.readBoolean(),r=t.readBoolean(),i=!1;(e||r)&&(i=t.readBoolean(),i&&(t.readUByte(),t.readBits(5),t.readBoolean(),t.readBits(5)),t.readBits(4),t.readBits(4),i&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5));for(let a=0;a<=n;a++){ee=t.readBoolean();let n=ee||t.readBoolean(),a=!1;n?t.readEG():a=t.readBoolean();let o=a?1:t.readUEG()+1;if(e)for(let e=0;e<o;e++)t.readUEG(),t.readUEG(),i&&(t.readUEG(),t.readUEG()),t.skipBits(1);if(r)for(let e=0;e<o;e++)t.readUEG(),t.readUEG(),i&&(t.readUEG(),t.readUEG()),t.skipBits(1)}}t.readBoolean()&&(t.readBoolean(),t.readBoolean(),t.readBoolean(),N=t.readUEG())}let re=b,L=x;if(S){let e=1,t=1;y===1?e=t=2:y==2&&(e=2),re=b-e*w-e*C,L=x-t*E-t*T}let R=r?[`A`,`B`,`C`][r]:``,ie=o<<24|s<<16|c<<8|l,ae=0;for(let e=0;e<32;e++)ae=(ae|(ie>>e&1)<<31-e)>>>0;let oe=ae.toString(16);return a===1&&oe===`2`&&(oe=`6`),{codecString:`hvc1.${R}${a}.${oe}.${i?`H`:`L`}${g}.B0`,params:{general_tier_flag:i,general_profile_idc:a,general_profile_space:r,general_profile_compatibility_flags:[o,s,c,l],general_constraint_indicator_flags:[u,d,f,p,m,h],general_level_idc:g,bit_depth:D+8,bit_depth_luma_minus8:D,bit_depth_chroma_minus8:O,min_spatial_segmentation_idc:N,chroma_format_idc:y,frame_rate:{fixed:ee,fps:te/I}},width:re,height:L,pixelRatio:[P,F]}}readPPS(e){let t=new Aa(this.ebsp2rbsp(e));t.readUByte(),t.readUByte(),t.skipUEG(),t.skipUEG(),t.skipBits(2),t.skipBits(3),t.skipBits(2),t.skipUEG(),t.skipUEG(),t.skipEG(),t.skipBits(2),t.readBoolean()&&t.skipUEG(),t.skipEG(),t.skipEG(),t.skipBits(4);let n=t.readBoolean(),r=t.readBoolean(),i=1;return r&&n?i=0:r?i=3:n&&(i=2),{parallelismType:i}}matchSPS(e,t){return String.fromCharCode.apply(null,e).substr(3)===String.fromCharCode.apply(null,t).substr(3)}},Z=188,Na=class e{constructor(e,t,n,r){this.logger=void 0,this.observer=void 0,this.config=void 0,this.typeSupported=void 0,this.sampleAes=null,this.pmtParsed=!1,this.audioCodec=void 0,this.videoCodec=void 0,this._pmtId=-1,this._videoTrack=void 0,this._audioTrack=void 0,this._id3Track=void 0,this._txtTrack=void 0,this.aacOverFlow=null,this.remainderData=null,this.videoParser=void 0,this.observer=e,this.config=t,this.typeSupported=n,this.logger=r,this.videoParser=null}static probe(t,n){let r=e.syncOffset(t);return r>0&&n.warn(`MPEG2-TS detected but first sync word found @ offset ${r}`),r!==-1}static syncOffset(e){let t=e.length,n=Math.min(Z*5,t-Z)+1,r=0;for(;r<n;){let i=!1,a=-1,o=0;for(let s=r;s<t;s+=Z)if(e[s]===71&&(t-s===Z||e[s+Z]===71)){if(o++,a===-1&&(a=s,a!==0&&(n=Math.min(a+Z*99,e.length-Z)+1)),i||=Pa(e,s)===0,i&&o>1&&(a===0&&o>2||s+Z>n))return a}else if(o)return-1;else break;r++}return-1}static createTrack(e,t){return{container:e===`video`||e===`audio`?`video/mp2t`:void 0,type:e,id:ve[e],pid:-1,inputTimeScale:9e4,sequenceNumber:0,samples:[],dropped:0,duration:e===`audio`?t:void 0}}resetInitSegment(t,n,r,i){this.pmtParsed=!1,this._pmtId=-1,this._videoTrack=e.createTrack(`video`),this._videoTrack.duration=i,this._audioTrack=e.createTrack(`audio`,i),this._id3Track=e.createTrack(`id3`),this._txtTrack=e.createTrack(`text`),this._audioTrack.segmentCodec=`aac`,this.videoParser=null,this.aacOverFlow=null,this.remainderData=null,this.audioCodec=n,this.videoCodec=r}resetTimeStamp(){}resetContiguity(){let{_audioTrack:e,_videoTrack:t,_id3Track:n}=this;e&&(e.pesData=null),t&&(t.pesData=null),n&&(n.pesData=null),this.aacOverFlow=null,this.remainderData=null}demux(t,n,r=!1,i=!1){r||(this.sampleAes=null);let a,o=this._videoTrack,s=this._audioTrack,c=this._id3Track,l=this._txtTrack,u=o.pid,d=o.pesData,f=s.pid,p=c.pid,m=s.pesData,h=c.pesData,g=null,_=this.pmtParsed,v=this._pmtId,y=t.length;if(this.remainderData&&=(t=Le(this.remainderData,t),y=t.length,null),y<Z&&!i)return this.remainderData=t,{audioTrack:s,videoTrack:o,id3Track:c,textTrack:l};let b=Math.max(0,e.syncOffset(t));y-=(y-b)%Z,y<t.byteLength&&!i&&(this.remainderData=new Uint8Array(t.buffer,y,t.buffer.byteLength-y));let x=0;for(let e=b;e<y;e+=Z)if(t[e]===71){let n=!!(t[e+1]&64),i=Pa(t,e),y=(t[e+3]&48)>>4,x;if(y>1){if(x=e+5+t[e+4],x===e+Z)continue}else x=e+4;switch(i){case u:n&&(d&&(a=za(d,this.logger))&&(this.readyVideoParser(o.segmentCodec),this.videoParser!==null&&this.videoParser.parsePES(o,l,a,!1)),d={data:[],size:0}),d&&(d.data.push(t.subarray(x,e+Z)),d.size+=e+Z-x);break;case f:if(n){if(m&&(a=za(m,this.logger)))switch(s.segmentCodec){case`aac`:this.parseAACPES(s,a);break;case`mp3`:this.parseMPEGPES(s,a);break;case`ac3`:this.parseAC3PES(s,a);break}m={data:[],size:0}}m&&(m.data.push(t.subarray(x,e+Z)),m.size+=e+Z-x);break;case p:n&&(h&&(a=za(h,this.logger))&&this.parseID3PES(c,a),h={data:[],size:0}),h&&(h.data.push(t.subarray(x,e+Z)),h.size+=e+Z-x);break;case 0:n&&(x+=t[x]+1),v=this._pmtId=Fa(t,x);break;case v:{n&&(x+=t[x]+1);let i=Ia(t,x,this.typeSupported,r,this.observer,this.logger);u=i.videoPid,u>0&&(o.pid=u,o.segmentCodec=i.segmentVideoCodec),f=i.audioPid,f>0&&(s.pid=f,s.segmentCodec=i.segmentAudioCodec),p=i.id3Pid,p>0&&(c.pid=p),g!==null&&!_&&(this.logger.warn(`MPEG-TS PMT found at ${e} after unknown PID '${g}'. Backtracking to sync byte @${b} to parse all TS packets.`),g=null,e=b-188),_=this.pmtParsed=!0;break}case 17:case 8191:break;default:g=i;break}}else x++;x>0&&La(this.observer,Error(`Found ${x} TS packet/s that do not start with 0x47`),void 0,this.logger),o.pesData=d,s.pesData=m,c.pesData=h;let S={audioTrack:s,videoTrack:o,id3Track:c,textTrack:l};return i&&this.extractRemainingSamples(S),S}flush(){let{remainderData:e}=this;this.remainderData=null;let t;return t=e?this.demux(e,-1,!1,!0):{videoTrack:this._videoTrack,audioTrack:this._audioTrack,id3Track:this._id3Track,textTrack:this._txtTrack},this.extractRemainingSamples(t),this.sampleAes?this.decrypt(t,this.sampleAes):t}extractRemainingSamples(e){let{audioTrack:t,videoTrack:n,id3Track:r,textTrack:i}=e,a=n.pesData,o=t.pesData,s=r.pesData,c;if(a&&(c=za(a,this.logger))?(this.readyVideoParser(n.segmentCodec),this.videoParser!==null&&(this.videoParser.parsePES(n,i,c,!0),n.pesData=null)):n.pesData=a,o&&(c=za(o,this.logger))){switch(t.segmentCodec){case`aac`:this.parseAACPES(t,c);break;case`mp3`:this.parseMPEGPES(t,c);break;case`ac3`:this.parseAC3PES(t,c);break}t.pesData=null}else o!=null&&o.size&&this.logger.log(`last AAC PES packet truncated,might overlap between fragments`),t.pesData=o;s&&(c=za(s,this.logger))?(this.parseID3PES(r,c),r.pesData=null):r.pesData=s}demuxSampleAes(e,t,n){let r=this.demux(e,n,!0,!this.config.progressive),i=this.sampleAes=new Oa(this.observer,this.config,t);return this.decrypt(r,i)}readyVideoParser(e){this.videoParser===null&&(e===`avc`?this.videoParser=new ja:e===`hevc`&&(this.videoParser=new Ma))}decrypt(e,t){return new Promise(n=>{let{audioTrack:r,videoTrack:i}=e;r.samples&&r.segmentCodec===`aac`?t.decryptAacSamples(r.samples,0,()=>{i.samples?t.decryptAvcSamples(i.samples,0,0,()=>{n(e)}):n(e)}):i.samples&&t.decryptAvcSamples(i.samples,0,0,()=>{n(e)})})}destroy(){this.observer&&this.observer.removeAllListeners(),this.config=this.logger=this.observer=null,this.aacOverFlow=this.videoParser=this.remainderData=this.sampleAes=null,this._videoTrack=this._audioTrack=this._id3Track=this._txtTrack=void 0}parseAACPES(e,t){let n=0,r=this.aacOverFlow,i=t.data;if(r){this.aacOverFlow=null;let t=r.missing,a=r.sample.unit.byteLength;if(t===-1)i=Le(r.sample.unit,i);else{let o=a-t;r.sample.unit.set(i.subarray(0,t),o),e.samples.push(r.sample),n=r.missing}}let a,o;for(a=n,o=i.length;a<o-1&&!Pi(i,a);a++);if(a!==n){let e,t=a<o-1;if(e=t?`AAC PES did not start with ADTS header,offset:${a}`:`No ADTS header found in AAC PES`,La(this.observer,Error(e),t,this.logger),!t)return}Li(e,this.observer,i,a,this.audioCodec);let s;if(t.pts!==void 0)s=t.pts;else if(r){let t=Ri(e.samplerate);s=r.sample.pts+t}else{this.logger.warn(`[tsdemuxer]: AAC PES unknown PTS`);return}let c=0,l;for(;a<o;)if(l=Bi(e,i,a,s,c),a+=l.length,l.missing){this.aacOverFlow=l;break}else for(c++;a<o-1&&!Pi(i,a);a++);}parseMPEGPES(e,t){let n=t.data,r=n.length,i=0,a=0,o=t.pts;if(o===void 0){this.logger.warn(`[tsdemuxer]: MPEG PES unknown PTS`);return}for(;a<r;)if(_a(n,a)){let t=ma(e,n,a,o,i);if(t)a+=t.length,i++;else break}else a++}parseAC3PES(e,t){{let n=t.data,r=t.pts;if(r===void 0){this.logger.warn(`[tsdemuxer]: AC3 PES unknown PTS`);return}let i=n.length,a=0,o=0,s;for(;o<i&&(s=Ca(e,n,o,r,a++))>0;)o+=s}}parseID3PES(e,t){if(t.pts===void 0){this.logger.warn(`[tsdemuxer]: ID3 PES unknown PTS`);return}let n=w({},t,{type:this._videoTrack?aa.emsg:aa.audioId3,duration:1/0});e.samples.push(n)}};function Pa(e,t){return((e[t+1]&31)<<8)+e[t+2]}function Fa(e,t){return(e[t+10]&31)<<8|e[t+11]}function Ia(e,t,n,r,i,a){let o={audioPid:-1,videoPid:-1,id3Pid:-1,segmentVideoCodec:`avc`,segmentAudioCodec:`aac`},s=(e[t+1]&15)<<8|e[t+2],c=t+3+s-4,l=(e[t+10]&15)<<8|e[t+11];for(t+=12+l;t<c;){let s=Pa(e,t),c=(e[t+3]&15)<<8|e[t+4];switch(e[t]){case 207:if(!r){Ra(`ADTS AAC`,a);break}case 15:o.audioPid===-1&&(o.audioPid=s);break;case 21:o.id3Pid===-1&&(o.id3Pid=s);break;case 219:if(!r){Ra(`H.264`,a);break}case 27:o.videoPid===-1&&(o.videoPid=s);break;case 3:case 4:!n.mpeg&&!n.mp3?a.log(`MPEG audio found, not supported in this browser`):o.audioPid===-1&&(o.audioPid=s,o.segmentAudioCodec=`mp3`);break;case 193:if(!r){Ra(`AC-3`,a);break}case 129:n.ac3?o.audioPid===-1&&(o.audioPid=s,o.segmentAudioCodec=`ac3`):a.log(`AC-3 audio found, not supported in this browser`);break;case 6:if(o.audioPid===-1&&c>0){let r=t+5,i=c;for(;i>2;){switch(e[r]){case 106:n.ac3===!0?(o.audioPid=s,o.segmentAudioCodec=`ac3`):a.log(`AC-3 audio found, not supported in this browser for now`);break}let t=e[r+1]+2;r+=t,i-=t}}break;case 194:case 135:return La(i,Error(`Unsupported EC-3 in M2TS found`),void 0,a),o;case 36:o.videoPid===-1&&(o.videoPid=s,o.segmentVideoCodec=`hevc`,a.log(`HEVC in M2TS found`));break}t+=c+5}return o}function La(e,t,n,r){r.warn(`parsing error: ${t.message}`),e.emit(v.ERROR,v.ERROR,{type:g.MEDIA_ERROR,details:_.FRAG_PARSING_ERROR,fatal:!1,levelRetry:n,error:t,reason:t.message})}function Ra(e,t){t.log(`${e} with AES-128-CBC encryption found in unencrypted stream`)}function za(e,t){let n=0,r,i,a,o,s,c=e.data;if(!e||e.size===0)return null;for(;c[0].length<19&&c.length>1;)c[0]=Le(c[0],c[1]),c.splice(1,1);if(r=c[0],(r[0]<<16)+(r[1]<<8)+r[2]===1){if(i=(r[4]<<8)+r[5],i&&i>e.size-6)return null;let l=r[7];l&192&&(o=(r[9]&14)*536870912+(r[10]&255)*4194304+(r[11]&254)*16384+(r[12]&255)*128+(r[13]&254)/2,l&64?(s=(r[14]&14)*536870912+(r[15]&255)*4194304+(r[16]&254)*16384+(r[17]&255)*128+(r[18]&254)/2,o-s>60*9e4&&(t.warn(`${Math.round((o-s)/9e4)}s delta between PTS and DTS, align them`),o=s)):s=o),a=r[8];let u=a+9;if(e.size<=u)return null;e.size-=u;let d=new Uint8Array(e.size);for(let e=0,t=c.length;e<t;e++){r=c[e];let t=r.byteLength;if(u)if(u>t){u-=t;continue}else r=r.subarray(u),t-=u,u=0;d.set(r,n),n+=t}return i&&(i-=a+3),{data:d,pts:o,dts:s,len:i}}return null}var Ba=class{static getSilentFrame(e,t){switch(e){case`mp4a.40.2`:if(t===1)return new Uint8Array([0,200,0,128,35,128]);if(t===2)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(t===3)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(t===4)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(t===5)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(t===6)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224]);break;default:if(t===1)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(t===2||t===3)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);break}}},Va=2**32-1,Ha=class e{static init(){e.types={avc1:[],avcC:[],hvc1:[],hvcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],".mp3":[],dac3:[],"ac-3":[],mvex:[],mvhd:[],pasp:[],sdtp:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[],smhd:[]};let t;for(t in e.types)e.types.hasOwnProperty(t)&&(e.types[t]=[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]);e.HDLR_TYPES={video:new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),audio:new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0])};let n=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]);e.STTS=e.STSC=e.STCO=new Uint8Array([0,0,0,0,0,0,0,0]),e.STSZ=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),e.VMHD=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]),e.SMHD=new Uint8Array([0,0,0,0,0,0,0,0]),e.STSD=new Uint8Array([0,0,0,0,0,0,0,1]);let r=new Uint8Array([105,115,111,109]),i=new Uint8Array([97,118,99,49]),a=new Uint8Array([0,0,0,1]);e.FTYP=e.box(e.types.ftyp,r,a,r,i),e.DINF=e.box(e.types.dinf,e.box(e.types.dref,n))}static box(e,...t){let n=8,r=t.length,i=r;for(;r--;)n+=t[r].byteLength;let a=new Uint8Array(n);for(a[0]=n>>24&255,a[1]=n>>16&255,a[2]=n>>8&255,a[3]=n&255,a.set(e,4),r=0,n=8;r<i;r++)a.set(t[r],n),n+=t[r].byteLength;return a}static hdlr(t){return e.box(e.types.hdlr,e.HDLR_TYPES[t])}static mdat(t){return e.box(e.types.mdat,t)}static mdhd(t,n){n*=t;let r=Math.floor(n/(Va+1)),i=Math.floor(n%(Va+1));return e.box(e.types.mdhd,new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,t&255,r>>24,r>>16&255,r>>8&255,r&255,i>>24,i>>16&255,i>>8&255,i&255,85,196,0,0]))}static mdia(t){return e.box(e.types.mdia,e.mdhd(t.timescale||0,t.duration||0),e.hdlr(t.type),e.minf(t))}static mfhd(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,t&255]))}static minf(t){return t.type===`audio`?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}static moof(t,n,r){return e.box(e.types.moof,e.mfhd(t),e.traf(r,n))}static moov(t){let n=t.length,r=[];for(;n--;)r[n]=e.trak(t[n]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale||0,t[0].duration||0)].concat(r,e.mvex(t)))}static mvex(t){let n=t.length,r=[];for(;n--;)r[n]=e.trex(t[n]);return e.box.apply(null,[e.types.mvex,...r])}static mvhd(t,n){n*=t;let r=Math.floor(n/(Va+1)),i=Math.floor(n%(Va+1)),a=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,t&255,r>>24,r>>16&255,r>>8&255,r&255,i>>24,i>>16&255,i>>8&255,i&255,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,a)}static sdtp(t){let n=t.samples||[],r=new Uint8Array(4+n.length),i,a;for(i=0;i<n.length;i++)a=n[i].flags,r[i+4]=a.dependsOn<<4|a.isDependedOn<<2|a.hasRedundancy;return e.box(e.types.sdtp,r)}static stbl(t){return e.box(e.types.stbl,e.stsd(t),e.box(e.types.stts,e.STTS),e.box(e.types.stsc,e.STSC),e.box(e.types.stsz,e.STSZ),e.box(e.types.stco,e.STCO))}static avc1(t){let n=[],r=[],i,a,o;for(i=0;i<t.sps.length;i++)a=t.sps[i],o=a.byteLength,n.push(o>>>8&255),n.push(o&255),n=n.concat(Array.prototype.slice.call(a));for(i=0;i<t.pps.length;i++)a=t.pps[i],o=a.byteLength,r.push(o>>>8&255),r.push(o&255),r=r.concat(Array.prototype.slice.call(a));let s=e.box(e.types.avcC,new Uint8Array([1,n[3],n[4],n[5],255,224|t.sps.length].concat(n,[t.pps.length],r))),c=t.width,l=t.height,u=t.pixelRatio[0],d=t.pixelRatio[1];return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,c>>8&255,c&255,l>>8&255,l&255,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),s,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),e.box(e.types.pasp,new Uint8Array([u>>24,u>>16&255,u>>8&255,u&255,d>>24,d>>16&255,d>>8&255,d&255])))}static esds(e){let t=e.config;return new Uint8Array([0,0,0,0,3,25,0,1,0,4,17,64,21,0,0,0,0,0,0,0,0,0,0,0,5,2,...t,6,1,2])}static audioStsd(e){let t=e.samplerate||0;return new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,e.channelCount||0,0,16,0,0,0,0,t>>8&255,t&255,0,0])}static mp4a(t){return e.box(e.types.mp4a,e.audioStsd(t),e.box(e.types.esds,e.esds(t)))}static mp3(t){return e.box(e.types[`.mp3`],e.audioStsd(t))}static ac3(t){return e.box(e.types[`ac-3`],e.audioStsd(t),e.box(e.types.dac3,t.config))}static stsd(t){let{segmentCodec:n}=t;if(t.type===`audio`){if(n===`aac`)return e.box(e.types.stsd,e.STSD,e.mp4a(t));if(n===`ac3`&&t.config)return e.box(e.types.stsd,e.STSD,e.ac3(t));if(n===`mp3`&&t.codec===`mp3`)return e.box(e.types.stsd,e.STSD,e.mp3(t))}else if(t.pps&&t.sps){if(n===`avc`)return e.box(e.types.stsd,e.STSD,e.avc1(t));if(n===`hevc`&&t.vps)return e.box(e.types.stsd,e.STSD,e.hvc1(t))}else throw Error(`video track missing pps or sps`);throw Error(`unsupported ${t.type} segment codec (${n}/${t.codec})`)}static tkhd(t){let n=t.id,r=(t.duration||0)*(t.timescale||0),i=t.width||0,a=t.height||0,o=Math.floor(r/(Va+1)),s=Math.floor(r%(Va+1));return e.box(e.types.tkhd,new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,n>>24&255,n>>16&255,n>>8&255,n&255,0,0,0,0,o>>24,o>>16&255,o>>8&255,o&255,s>>24,s>>16&255,s>>8&255,s&255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,i>>8&255,i&255,0,0,a>>8&255,a&255,0,0]))}static traf(t,n){let r=e.sdtp(t),i=t.id,a=Math.floor(n/(Va+1)),o=Math.floor(n%(Va+1));return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,i&255])),e.box(e.types.tfdt,new Uint8Array([1,0,0,0,a>>24,a>>16&255,a>>8&255,a&255,o>>24,o>>16&255,o>>8&255,o&255])),e.trun(t,r.length+16+20+8+16+8+8),r)}static trak(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}static trex(t){let n=t.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,n>>24,n>>16&255,n>>8&255,n&255,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}static trun(t,n){let r=t.samples||[],i=r.length,a=12+16*i,o=new Uint8Array(a),s,c,l,u,d,f;for(n+=8+a,o.set([+(t.type===`video`),0,15,1,i>>>24&255,i>>>16&255,i>>>8&255,i&255,n>>>24&255,n>>>16&255,n>>>8&255,n&255],0),s=0;s<i;s++)c=r[s],l=c.duration,u=c.size,d=c.flags,f=c.cts,o.set([l>>>24&255,l>>>16&255,l>>>8&255,l&255,u>>>24&255,u>>>16&255,u>>>8&255,u&255,d.isLeading<<2|d.dependsOn,d.isDependedOn<<6|d.hasRedundancy<<4|d.paddingValue<<1|d.isNonSync,d.degradPrio&61440,d.degradPrio&15,f>>>24&255,f>>>16&255,f>>>8&255,f&255],12+16*s);return e.box(e.types.trun,o)}static initSegment(t){e.types||e.init();let n=e.moov(t);return Le(e.FTYP,n)}static hvc1(t){let n=t.params,r=[t.vps,t.sps,t.pps],i=new Uint8Array([1,n.general_profile_space<<6|(n.general_tier_flag?32:0)|n.general_profile_idc,n.general_profile_compatibility_flags[0],n.general_profile_compatibility_flags[1],n.general_profile_compatibility_flags[2],n.general_profile_compatibility_flags[3],n.general_constraint_indicator_flags[0],n.general_constraint_indicator_flags[1],n.general_constraint_indicator_flags[2],n.general_constraint_indicator_flags[3],n.general_constraint_indicator_flags[4],n.general_constraint_indicator_flags[5],n.general_level_idc,240|n.min_spatial_segmentation_idc>>8,255&n.min_spatial_segmentation_idc,252|n.parallelismType,252|n.chroma_format_idc,248|n.bit_depth_luma_minus8,248|n.bit_depth_chroma_minus8,0,parseInt(n.frame_rate.fps),3|n.temporal_id_nested<<2|n.num_temporal_layers<<3|(n.frame_rate.fixed?64:0),r.length]),a=i.length;for(let e=0;e<r.length;e+=1){a+=3;for(let t=0;t<r[e].length;t+=1)a+=2+r[e][t].length}let o=new Uint8Array(a);o.set(i,0),a=i.length;let s=r.length-1;for(let e=0;e<r.length;e+=1){o.set(new Uint8Array([32+e|(e===s?128:0),0,r[e].length]),a),a+=3;for(let t=0;t<r[e].length;t+=1)o.set(new Uint8Array([r[e][t].length>>8,r[e][t].length&255]),a),a+=2,o.set(r[e][t],a),a+=r[e][t].length}let c=e.box(e.types.hvcC,o),l=t.width,u=t.height,d=t.pixelRatio[0],f=t.pixelRatio[1];return e.box(e.types.hvc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,l>>8&255,l&255,u>>8&255,u&255,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),c,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),e.box(e.types.pasp,new Uint8Array([d>>24,d>>16&255,d>>8&255,d&255,f>>24,f>>16&255,f>>8&255,f&255])))}};Ha.types=void 0,Ha.HDLR_TYPES=void 0,Ha.STTS=void 0,Ha.STSC=void 0,Ha.STCO=void 0,Ha.STSZ=void 0,Ha.VMHD=void 0,Ha.SMHD=void 0,Ha.STSD=void 0,Ha.FTYP=void 0,Ha.DINF=void 0;var Ua=9e4;function Wa(e,t,n=1,r=!1){let i=e*t*n;return r?Math.round(i):i}function Ga(e,t,n=1,r=!1){return Wa(e,t,1/n,r)}function Ka(e,t=!1){return Wa(e,1e3,1/Ua,t)}function qa(e,t=1){return Wa(e,Ua,1/t)}function Ja(e){let{baseTime:t,timescale:n,trackId:r}=e;return`${t/n} (${t}/${n}) trackId: ${r}`}var Ya=10*1e3,Xa=1024,Za=1152,Qa=1536,$a=null,eo=null;function to(e,t,n,r){return{duration:t,size:n,cts:r,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:e?2:1,isNonSync:+!e}}}var no=class extends k{constructor(e,t,n,r){if(super(`mp4-remuxer`,r),this.observer=void 0,this.config=void 0,this.typeSupported=void 0,this.ISGenerated=!1,this._initPTS=null,this._initDTS=null,this.nextVideoTs=null,this.nextAudioTs=null,this.videoSampleDuration=null,this.isAudioContiguous=!1,this.isVideoContiguous=!1,this.videoTrackConfig=void 0,this.observer=e,this.config=t,this.typeSupported=n,this.ISGenerated=!1,$a===null){let e=(navigator.userAgent||``).match(/Chrome\/(\d+)/i);$a=e?parseInt(e[1]):0}if(eo===null){let e=navigator.userAgent.match(/Safari\/(\d+)/i);eo=e?parseInt(e[1]):0}}destroy(){this.config=this.videoTrackConfig=this._initPTS=this._initDTS=null}resetTimeStamp(e){let t=this._initPTS;(!t||!e||e.trackId!==t.trackId||e.baseTime!==t.baseTime||e.timescale!==t.timescale)&&this.log(`Reset initPTS: ${t&&Ja(t)} > ${e&&Ja(e)}`),this._initPTS=this._initDTS=e}resetNextTimestamp(){this.log(`reset next timestamp`),this.isVideoContiguous=!1,this.isAudioContiguous=!1}resetInitSegment(){this.log(`ISGenerated flag reset`),this.ISGenerated=!1,this.videoTrackConfig=void 0}getVideoStartPts(e){let t=!1,n=e[0].pts,r=e.reduce((e,r)=>{let i=r.pts,a=i-e;return a<-4294967296&&(t=!0,i=ro(i,n),a=i-e),a>0?e:i},n);return t&&this.debug(`PTS rollover detected`),r}remux(e,t,n,r,i,a,o,s){let c,l,u,d,f,p,m=i,h=i,g=e.pid>-1,_=t.pid>-1,v=t.samples.length,y=e.samples.length>0,x=o&&v>0||v>1;if((!g||y)&&(!_||x)||this.ISGenerated||o){if(this.ISGenerated){let e=this.videoTrackConfig;(e&&(t.width!==e.width||t.height!==e.height||t.pixelRatio?.[0]!==e.pixelRatio?.[0]||t.pixelRatio?.[1]!==e.pixelRatio?.[1])||!e&&x||this.nextAudioTs===null&&y)&&this.resetInitSegment()}this.ISGenerated||(u=this.generateIS(e,t,i,a));let n=this.isVideoContiguous,r=-1,o;if(x&&(r=io(t.samples),!n&&this.config.forceKeyFrameOnDiscontinuity))if(p=!0,r>0){this.warn(`Dropped ${r} out of ${v} video samples due to a missing keyframe`);let e=this.getVideoStartPts(t.samples);t.samples=t.samples.slice(r),t.dropped+=r,h+=(t.samples[0].pts-e)/t.inputTimeScale,o=h}else r===-1&&(this.warn(`No keyframe found out of ${v} video samples`),p=!1);if(this.ISGenerated){if(y&&x){let n=this.getVideoStartPts(t.samples),r=(ro(e.samples[0].pts,n)-n)/t.inputTimeScale;m+=Math.max(0,r),h+=Math.max(0,-r)}if(y){if(e.samplerate||(this.warn(`regenerate InitSegment as audio detected`),u=this.generateIS(e,t,i,a)),l=this.remuxAudio(e,m,this.isAudioContiguous,a,_||x||s===b.AUDIO?h:void 0),x){let r=l?l.endPTS-l.startPTS:0;t.inputTimeScale||(this.warn(`regenerate InitSegment as video detected`),u=this.generateIS(e,t,i,a)),c=this.remuxVideo(t,h,n,r)}}else x&&(c=this.remuxVideo(t,h,n,0));c&&(c.firstKeyFrame=r,c.independent=r!==-1,c.firstKeyFramePTS=o)}}return this.ISGenerated&&this._initPTS&&this._initDTS&&(n.samples.length&&(f=ao(n,i,this._initPTS,this._initDTS)),r.samples.length&&(d=oo(r,i,this._initPTS))),{audio:l,video:c,initSegment:u,independent:p,text:d,id3:f}}computeInitPts(e,t,n,r){let i=Math.round(n*t),a=ro(e,i);if(a<i+t)for(this.log(`Adjusting PTS for rollover in timeline near ${(i-a)/t} ${r}`);a<i+t;)a+=8589934592;return a-i}generateIS(e,t,n,r){let i=e.samples,a=t.samples,o=this.typeSupported,s={},c=this._initPTS,l=!c||r,u=`audio/mp4`,d,f,p,m=-1;if(l&&(d=f=1/0),e.config&&i.length){switch(e.timescale=e.samplerate,e.segmentCodec){case`mp3`:o.mpeg?(u=`audio/mpeg`,e.codec=``):o.mp3&&(e.codec=`mp3`);break;case`ac3`:e.codec=`ac-3`;break}s.audio={id:`audio`,container:u,codec:e.codec,initSegment:e.segmentCodec===`mp3`&&o.mpeg?new Uint8Array:Ha.initSegment([e]),metadata:{channelCount:e.channelCount}},l&&(m=e.id,p=e.inputTimeScale,!c||p!==c.timescale?d=f=this.computeInitPts(i[0].pts,p,n,`audio`):l=!1)}if(t.sps&&t.pps&&a.length){if(t.timescale=t.inputTimeScale,s.video={id:`main`,container:`video/mp4`,codec:t.codec,initSegment:Ha.initSegment([t]),metadata:{width:t.width,height:t.height}},l)if(m=t.id,p=t.inputTimeScale,!c||p!==c.timescale){let e=this.getVideoStartPts(a),t=ro(a[0].dts,e),r=this.computeInitPts(t,p,n,`video`),i=this.computeInitPts(e,p,n,`video`);f=Math.min(f,r),d=Math.min(d,i)}else l=!1;this.videoTrackConfig={width:t.width,height:t.height,pixelRatio:t.pixelRatio}}if(Object.keys(s).length)return this.ISGenerated=!0,l?(c&&this.warn(`Timestamps at playlist time: ${r?``:`~`}${n} ${d/p} != initPTS: ${c.baseTime/c.timescale} (${c.baseTime}/${c.timescale}) trackId: ${c.trackId}`),this.log(`Found initPTS at playlist time: ${n} offset: ${d/p} (${d}/${p}) trackId: ${m}`),this._initPTS={baseTime:d,timescale:p,trackId:m},this._initDTS={baseTime:f,timescale:p,trackId:m}):d=p=void 0,{tracks:s,initPTS:d,timescale:p,trackId:m}}remuxVideo(e,t,n,r){let i=e.inputTimeScale,a=e.samples,o=[],s=a.length,c=this._initPTS,l=c.baseTime*i/c.timescale,u=this.nextVideoTs,d=8,f=this.videoSampleDuration,p,m,h=1/0,y=-1/0,b=!1;if(!n||u===null){let e=l+t*i,r=a[0].pts-ro(a[0].dts,a[0].pts);$a&&u!==null&&Math.abs(e-r-(u+l))<15e3?n=!0:u=e-r-l}let x=u+l;for(let e=0;e<s;e++){let t=a[e];t.pts=ro(t.pts,x),t.dts=ro(t.dts,x),t.dts<a[e>0?e-1:e].dts&&(b=!0)}b&&a.sort(function(e,t){let n=e.dts-t.dts,r=e.pts-t.pts;return n||r}),p=a[0].dts,m=a[a.length-1].dts;let S=m-p,C=S?Math.round(S/(s-1)):f||e.inputTimeScale/30;if(n){let n=p-x,r=n>C,i=n<-1;if((r||i)&&(r?this.warn(`${(e.segmentCodec||``).toUpperCase()}: ${Ka(n,!0)} ms (${n}dts) hole between fragments detected at ${t.toFixed(3)}`):this.warn(`${(e.segmentCodec||``).toUpperCase()}: ${Ka(-n,!0)} ms (${n}dts) overlapping between fragments detected at ${t.toFixed(3)}`),!i||x>=a[0].pts||$a)){p=x;let e=a[0].pts-n;if(r)a[0].dts=p,a[0].pts=e;else{let t=!0;for(let r=0;r<a.length&&!(a[r].dts>e&&t);r++){let e=a[r].pts;if(a[r].dts-=n,a[r].pts-=n,r<a.length-1){let n=a[r+1].pts;t=n<=a[r].pts==n<=e}}}this.log(`Video: Initial PTS/DTS adjusted: ${Ka(e,!0)}/${Ka(p,!0)}, delta: ${Ka(n,!0)} ms`)}}p=Math.max(0,p);let T=0,E=0,D=p;for(let e=0;e<s;e++){let t=a[e],n=t.units,r=n.length,i=0;for(let e=0;e<r;e++)i+=n[e].data.length;E+=i,T+=r,t.length=i,t.dts<D?(t.dts=D,D+=C/4|0||1):D=t.dts,h=Math.min(t.pts,h),y=Math.max(t.pts,y)}m=a[s-1].dts;let O=E+4*T+8,k;try{k=new Uint8Array(O)}catch(e){this.observer.emit(v.ERROR,v.ERROR,{type:g.MUX_ERROR,details:_.REMUX_ALLOC_ERROR,fatal:!1,error:e,bytes:O,reason:`fail allocating video mdat ${O}`});return}let A=new DataView(k.buffer);A.setUint32(0,O),k.set(Ha.types.mdat,4);let j=!1,M=1/0,N=1/0,P=-1/0,F=-1/0;for(let e=0;e<s;e++){let t=a[e],n=t.units,c=0;for(let e=0,t=n.length;e<t;e++){let t=n[e],r=t.data,i=t.data.byteLength;A.setUint32(d,i),d+=4,k.set(r,d),d+=i,c+=4+i}let u;if(e<s-1)f=a[e+1].dts-t.dts,u=a[e+1].pts-t.pts;else{let n=this.config,o=e>0?t.dts-a[e-1].dts:C;if(u=e>0?t.pts-a[e-1].pts:C,n.stretchShortVideoTrack&&this.nextAudioTs!==null){let e=Math.floor(n.maxBufferHole*i),a=(r?h+r*i:this.nextAudioTs+l)-t.pts;a>e?(f=a-o,f<0?f=o:j=!0,this.log(`It is approximately ${a/90} ms to the next segment; using duration ${f/90} ms for the last video frame.`)):f=o}else f=o}let p=Math.round(t.pts-t.dts);M=Math.min(M,f),P=Math.max(P,f),N=Math.min(N,u),F=Math.max(F,u),o.push(to(t.key,f,c,p))}if(o.length){if($a){if($a<70){let e=o[0].flags;e.dependsOn=2,e.isNonSync=0}}else if(eo&&F-N<P-M&&C/P<.025&&o[0].cts===0){this.warn(`Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.`);let e=p;for(let t=0,n=o.length;t<n;t++){let r=e+o[t].duration,i=e+o[t].cts;if(t<n-1){let e=r+o[t+1].cts;o[t].duration=e-i}else o[t].duration=t?o[t-1].duration:C;o[t].cts=0,e=r}}}f=j||!f?C:f;let ee=m+f;this.nextVideoTs=u=ee-l,this.videoSampleDuration=f,this.isVideoContiguous=!0;let I={data1:Ha.moof(e.sequenceNumber++,p,w(e,{samples:o})),data2:k,startPTS:(h-l)/i,endPTS:(y+f-l)/i,startDTS:(p-l)/i,endDTS:u/i,type:`video`,hasAudio:!1,hasVideo:!0,nb:o.length,dropped:e.dropped};return e.samples=[],e.dropped=0,I}getSamplesPerFrame(e){switch(e.segmentCodec){case`mp3`:return Za;case`ac3`:return Qa;default:return Xa}}remuxAudio(e,t,n,r,i){let a=e.inputTimeScale,o=a/(e.samplerate?e.samplerate:a),s=this.getSamplesPerFrame(e),c=s*o,l=this._initPTS,u=e.segmentCodec===`mp3`&&this.typeSupported.mpeg,d=[],f=i!==void 0,p=e.samples,m=u?0:8,h=this.nextAudioTs||-1,y=l.baseTime*a/l.timescale,b=y+t*a;if(this.isAudioContiguous=n||=p.length&&h>0&&(r&&Math.abs(b-(h+y))<9e3||Math.abs(ro(p[0].pts,b)-(h+y))<20*c),p.forEach(function(e){e.pts=ro(e.pts,b)}),!n||h<0){let e=p.length;if(p=p.filter(e=>e.pts>=0),e!==p.length&&this.warn(`Removed ${p.length-e} of ${e} samples (initPTS ${y} / ${a})`),!p.length)return;h=i===0?0:r&&!f?Math.max(0,b-y):p[0].pts-y}if(e.segmentCodec===`aac`){let t=this.config.maxAudioFramesDrift;for(let n=0,r=h+y;n<p.length;n++){let i=p[n],o=i.pts,s=o-r,l=Math.abs(1e3*s/a);if(s<=-t*c&&f)n===0&&(this.warn(`Audio frame @ ${(o/a).toFixed(3)}s overlaps marker by ${Math.round(1e3*s/a)} ms.`),this.nextAudioTs=h=o-y,r=o);else if(s>=t*c&&l<Ya&&f){let t=Math.round(s/c);for(r=o-t*c;r<0&&t&&c;)t--,r+=c;n===0&&(this.nextAudioTs=h=r-y),this.warn(`Injecting ${t} audio frames @ ${((r-y)/a).toFixed(3)}s due to ${Math.round(1e3*s/a)} ms gap.`);for(let a=0;a<t;a++){let t=Ba.getSilentFrame(e.parsedCodec||e.manifestCodec||e.codec,e.channelCount);t||=(this.log(`Unable to get silent frame for given audio codec; duplicating last frame instead.`),i.unit.subarray()),p.splice(n,0,{unit:t,pts:r}),r+=c,n++}}i.pts=r,r+=c}}let x=null,S=null,C,T=0,E=p.length;for(;E--;)T+=p[E].unit.byteLength;for(let t=0,r=p.length;t<r;t++){let r=p[t],i=r.unit,a=r.pts;if(S!==null){let e=d[t-1];e.duration=Math.round((a-S)/o)}else if(n&&e.segmentCodec===`aac`&&(a=h+y),x=a,T>0){T+=m;try{C=new Uint8Array(T)}catch(e){this.observer.emit(v.ERROR,v.ERROR,{type:g.MUX_ERROR,details:_.REMUX_ALLOC_ERROR,fatal:!1,error:e,bytes:T,reason:`fail allocating audio mdat ${T}`});return}u||(new DataView(C.buffer).setUint32(0,T),C.set(Ha.types.mdat,4))}else return;C.set(i,m);let c=i.byteLength;m+=c,d.push(to(!0,s,c,0)),S=a}let D=d.length;if(!D)return;let O=d[d.length-1];h=S-y,this.nextAudioTs=h+o*O.duration;let k=u?new Uint8Array:Ha.moof(e.sequenceNumber++,x/o,w({},e,{samples:d}));e.samples=[];let A=(x-y)/a,j=this.nextAudioTs/a,M={data1:k,data2:C,startPTS:A,endPTS:j,startDTS:A,endDTS:j,type:`audio`,hasAudio:!0,hasVideo:!1,nb:D};return this.isAudioContiguous=!0,M}};function ro(e,t){let n;if(t===null)return e;for(n=t<e?-8589934592:8589934592;Math.abs(e-t)>4294967296;)e+=n;return e}function io(e){for(let t=0;t<e.length;t++)if(e[t].key)return t;return-1}function ao(e,t,n,r){let i=e.samples.length;if(!i)return;let a=e.inputTimeScale;for(let o=0;o<i;o++){let i=e.samples[o];i.pts=ro(i.pts-n.baseTime*a/n.timescale,t*a)/a,i.dts=ro(i.dts-r.baseTime*a/r.timescale,t*a)/a}let o=e.samples;return e.samples=[],{samples:o}}function oo(e,t,n){let r=e.samples.length;if(!r)return;let i=e.inputTimeScale;for(let a=0;a<r;a++){let r=e.samples[a];r.pts=ro(r.pts-n.baseTime*i/n.timescale,t*i)/i}e.samples.sort((e,t)=>e.pts-t.pts);let a=e.samples;return e.samples=[],{samples:a}}var so=class extends k{constructor(e,t,n,r){super(`passthrough-remuxer`,r),this.emitInitSegment=!1,this.audioCodec=void 0,this.videoCodec=void 0,this.initData=void 0,this.initPTS=null,this.initTracks=void 0,this.lastEndTime=null,this.isVideoContiguous=!1}destroy(){}resetTimeStamp(e){this.lastEndTime=null;let t=this.initPTS;t&&e&&t.baseTime===e.baseTime&&t.timescale===e.timescale||(this.initPTS=e)}resetNextTimestamp(){this.isVideoContiguous=!1,this.lastEndTime=null}resetInitSegment(e,t,n,r){this.audioCodec=t,this.videoCodec=n,this.generateInitSegment(e,r),this.emitInitSegment=!0}generateInitSegment(e,t){let{audioCodec:n,videoCodec:r}=this;if(!(e!=null&&e.byteLength)){this.initTracks=void 0,this.initData=void 0;return}let{audio:i,video:a}=this.initData=we(e);if(t)je(e,t);else{let e=i||a;e!=null&&e.encrypted&&this.warn(`Init segment with encrypted track with has no key ("${e.codec}")!`)}i&&(n=uo(i,z.AUDIO,this)),a&&(r=uo(a,z.VIDEO,this));let o={};i&&a?o.audiovideo={container:`video/mp4`,codec:n+`,`+r,supplemental:a.supplemental,encrypted:a.encrypted,initSegment:e,id:`main`}:i?o.audio={container:`audio/mp4`,codec:n,encrypted:i.encrypted,initSegment:e,id:`audio`}:a?o.video={container:`video/mp4`,codec:r,supplemental:a.supplemental,encrypted:a.encrypted,initSegment:e,id:`main`}:this.warn(`initSegment does not contain moov or trak boxes.`),this.initTracks=o}remux(e,t,n,r,i,a){var o,s;let{initPTS:c,lastEndTime:l}=this,u={audio:void 0,video:void 0,text:r,id3:n,initSegment:void 0};p(l)||(l=this.lastEndTime=i||0);let d=t.samples;if(!d.length)return u;let f={initPTS:void 0,timescale:void 0,trackId:void 0},m=this.initData;if((o=m)!=null&&o.length||(this.generateInitSegment(d),m=this.initData),!((s=m)!=null&&s.length))return this.warn(`Failed to generate initSegment.`),u;this.emitInitSegment&&=(f.tracks=this.initTracks,!1);let h=Fe(d,m,this),g=m.audio?h[m.audio.id]:null,_=m.video?h[m.video.id]:null,v=co(_,1/0),y=co(g,1/0),b=co(_,0,!0),x=co(g,0,!0),S=i,C=0,w=g&&(!_||!c&&y<v||c&&c.trackId===m.audio.id),T=w?g:_;if(T){let e=T.timescale,t=T.start-i*e,n=w?m.audio.id:m.video.id;S=T.start/e,C=w?x-y:b-v,(a||!c)&&(lo(c,S,i,C)||e!==c.timescale)&&(c&&this.warn(`Timestamps at playlist time: ${a?``:`~`}${i} ${t/e} != initPTS: ${c.baseTime/c.timescale} (${c.baseTime}/${c.timescale}) trackId: ${c.trackId}`),this.log(`Found initPTS at playlist time: ${i} offset: ${S-i} (${t}/${e}) trackId: ${n}`),c=null,f.initPTS=t,f.timescale=e,f.trackId=n)}else this.warn(`No audio or video samples found for initPTS at playlist time: ${i}`);c?(f.initPTS=c.baseTime,f.timescale=c.timescale,f.trackId=c.trackId):((!f.timescale||f.trackId===void 0||f.initPTS===void 0)&&(this.warn(`Could not set initPTS`),f.initPTS=S,f.timescale=1,f.trackId=-1),this.initPTS=c={baseTime:f.initPTS,timescale:f.timescale,trackId:f.trackId});let E=S-c.baseTime/c.timescale,D=E+C;C>0?this.lastEndTime=D:(this.warn(`Duration parsed from mp4 should be greater than zero`),this.resetNextTimestamp());let O=!!m.audio,k=!!m.video,A=``;O&&(A+=`audio`),k&&(A+=`video`);let j=(m.audio?m.audio.encrypted:!1)||(m.video?m.video.encrypted:!1),M={data1:d,startPTS:E,startDTS:E,endPTS:D,endDTS:D,type:A,hasAudio:O,hasVideo:k,nb:1,dropped:0,encrypted:j};u.audio=O&&!k?M:void 0,u.video=k?M:void 0;let N=_?.sampleCount;if(N){let e=_.keyFrameIndex,t=e!==-1;M.nb=N,M.dropped=e===0||this.isVideoContiguous?0:t?e:N,M.independent=t,M.firstKeyFrame=e,t&&_.keyFrameStart&&(M.firstKeyFramePTS=(_.keyFrameStart-c.baseTime)/c.timescale),this.isVideoContiguous||(u.independent=t),this.isVideoContiguous||=t,M.dropped&&this.warn(`fmp4 does not start with IDR: firstIDR ${e}/${N} dropped: ${M.dropped} start: ${M.firstKeyFramePTS||`NA`}`)}return u.initSegment=f,u.id3=ao(n,i,c,c),r.samples.length&&(u.text=oo(r,i,c)),u}};function co(e,t,n=!1){return e?.start===void 0?t:(e.start+(n?e.duration:0))/e.timescale}function lo(e,t,n,r){if(e===null)return!0;let i=Math.max(r,1),a=t-e.baseTime/e.timescale;return Math.abs(a-n)>i}function uo(e,t,n){let r=e.codec;return r&&r.length>4?r:t===z.AUDIO?r===`ec-3`||r===`ac-3`||r===`alac`?r:r===`fLaC`||r===`Opus`?at(r,!1):(n.warn(`Unhandled audio codec "${r}" in mp4 MAP`),r||`mp4a`):(n.warn(`Unhandled video codec "${r}" in mp4 MAP`),r||`avc1`)}var fo;try{fo=self.performance.now.bind(self.performance)}catch{fo=Date.now}var po=[{demux:Ea,remux:so},{demux:Na,remux:no},{demux:ba,remux:no},{demux:wa,remux:no}];po.splice(2,0,{demux:Sa,remux:no});var mo=class{constructor(e,t,n,r,i,a){this.asyncResult=!1,this.logger=void 0,this.observer=void 0,this.typeSupported=void 0,this.config=void 0,this.id=void 0,this.demuxer=void 0,this.remuxer=void 0,this.decrypter=void 0,this.probe=void 0,this.decryptionPromise=null,this.transmuxConfig=void 0,this.currentTransmuxState=void 0,this.observer=e,this.typeSupported=t,this.config=n,this.id=i,this.logger=a}configure(e){this.transmuxConfig=e,this.decrypter&&this.decrypter.reset()}push(e,t,n,r){let i=n.transmuxing;i.executeStart=fo();let a=new Uint8Array(e),{currentTransmuxState:o,transmuxConfig:s}=this;r&&(this.currentTransmuxState=r);let{contiguous:c,discontinuity:l,trackSwitch:u,accurateTimeOffset:d,timeOffset:f,initSegmentChange:p}=r||o,{audioCodec:m,videoCodec:h,defaultInitPts:y,duration:b,initSegmentData:x}=s,S=ho(a,t);if(S&&$n(S.method)){let e=this.getDecrypter(),t=er(S.method);if(e.isSync()){let r=e.softwareDecrypt(a,S.key.buffer,S.iv.buffer,t);if(n.part>-1){let t=e.flush();r=t&&t.buffer}if(!r)return i.executeEnd=fo(),go(n);a=new Uint8Array(r)}else return this.asyncResult=!0,this.decryptionPromise=e.webCryptoDecrypt(a,S.key.buffer,S.iv.buffer,t).then(e=>{let t=this.push(e,null,n);return this.decryptionPromise=null,t}),this.decryptionPromise}let C=this.needsProbing(l,u);if(C){let e=this.configureTransmuxer(a);if(e)return this.logger.warn(`[transmuxer] ${e.message}`),this.observer.emit(v.ERROR,v.ERROR,{type:g.MEDIA_ERROR,details:_.FRAG_PARSING_ERROR,fatal:!1,error:e,reason:e.message}),i.executeEnd=fo(),go(n)}(l||u||p||C)&&this.resetInitSegment(x,m,h,b,t),(l||p||C)&&this.resetInitialTimestamp(y),c||this.resetContiguity();let w=this.transmux(a,S,f,d,n);this.asyncResult=_o(w);let T=this.currentTransmuxState;return T.contiguous=!0,T.discontinuity=!1,T.trackSwitch=!1,i.executeEnd=fo(),w}flush(e){let t=e.transmuxing;t.executeStart=fo();let{decrypter:n,currentTransmuxState:r,decryptionPromise:i}=this;if(i)return this.asyncResult=!0,i.then(()=>this.flush(e));let a=[],{timeOffset:o}=r;if(n){let t=n.flush();t&&a.push(this.push(t.buffer,null,e))}let{demuxer:s,remuxer:c}=this;if(!s||!c){t.executeEnd=fo();let n=[go(e)];return this.asyncResult?Promise.resolve(n):n}let l=s.flush(o);return _o(l)?(this.asyncResult=!0,l.then(t=>(this.flushRemux(a,t,e),a))):(this.flushRemux(a,l,e),this.asyncResult?Promise.resolve(a):a)}flushRemux(e,t,n){let{audioTrack:r,videoTrack:i,id3Track:a,textTrack:o}=t,{accurateTimeOffset:s,timeOffset:c}=this.currentTransmuxState;this.logger.log(`[transmuxer.ts]: Flushed ${this.id} sn: ${n.sn}${n.part>-1?` part: `+n.part:``} of ${this.id===b.MAIN?`level`:`track`} ${n.level}`);let l=this.remuxer.remux(r,i,a,o,c,s,!0,this.id);e.push({remuxResult:l,chunkMeta:n}),n.transmuxing.executeEnd=fo()}resetInitialTimestamp(e){let{demuxer:t,remuxer:n}=this;!t||!n||(t.resetTimeStamp(e),n.resetTimeStamp(e))}resetContiguity(){let{demuxer:e,remuxer:t}=this;!e||!t||(e.resetContiguity(),t.resetNextTimestamp())}resetInitSegment(e,t,n,r,i){let{demuxer:a,remuxer:o}=this;!a||!o||(a.resetInitSegment(e,t,n,r),o.resetInitSegment(e,t,n,i))}destroy(){this.demuxer&&=(this.demuxer.destroy(),void 0),this.remuxer&&=(this.remuxer.destroy(),void 0)}transmux(e,t,n,r,i){let a;return a=t&&t.method===`SAMPLE-AES`?this.transmuxSampleAes(e,t,n,r,i):this.transmuxUnencrypted(e,n,r,i),a}transmuxUnencrypted(e,t,n,r){let{audioTrack:i,videoTrack:a,id3Track:o,textTrack:s}=this.demuxer.demux(e,t,!1,!this.config.progressive);return{remuxResult:this.remuxer.remux(i,a,o,s,t,n,!1,this.id),chunkMeta:r}}transmuxSampleAes(e,t,n,r,i){return this.demuxer.demuxSampleAes(e,t,n).then(e=>({remuxResult:this.remuxer.remux(e.audioTrack,e.videoTrack,e.id3Track,e.textTrack,n,r,!1,this.id),chunkMeta:i}))}configureTransmuxer(e){let{config:t,observer:n,typeSupported:r}=this,i;for(let t=0,n=po.length;t<n;t++){var a;if((a=po[t].demux)!=null&&a.probe(e,this.logger)){i=po[t];break}}if(!i)return Error(`Failed to find demuxer by probing fragment data`);let o=this.demuxer,s=this.remuxer,c=i.remux,l=i.demux;(!s||!(s instanceof c))&&(this.remuxer=new c(n,t,r,this.logger)),(!o||!(o instanceof l))&&(this.demuxer=new l(n,t,r,this.logger),this.probe=l.probe)}needsProbing(e,t){return!this.demuxer||!this.remuxer||e||t}getDecrypter(){let e=this.decrypter;return e||=this.decrypter=new Dn(this.config),e}};function ho(e,t){let n=null;return e.byteLength>0&&t?.key!=null&&t.iv!==null&&t.method!=null&&(n=t),n}var go=e=>({remuxResult:{},chunkMeta:e});function _o(e){return`then`in e&&e.then instanceof Function}var vo=class{constructor(e,t,n,r,i){this.audioCodec=void 0,this.videoCodec=void 0,this.initSegmentData=void 0,this.duration=void 0,this.defaultInitPts=void 0,this.audioCodec=e,this.videoCodec=t,this.initSegmentData=n,this.duration=r,this.defaultInitPts=i||null}},yo=class{constructor(e,t,n,r,i,a){this.discontinuity=void 0,this.contiguous=void 0,this.accurateTimeOffset=void 0,this.trackSwitch=void 0,this.timeOffset=void 0,this.initSegmentChange=void 0,this.discontinuity=e,this.contiguous=t,this.accurateTimeOffset=n,this.trackSwitch=r,this.timeOffset=i,this.initSegmentChange=a}},bo=0,xo=class{constructor(e,t,n,r){this.error=null,this.hls=void 0,this.id=void 0,this.instanceNo=bo++,this.observer=void 0,this.frag=null,this.part=null,this.useWorker=void 0,this.workerContext=null,this.transmuxer=null,this.onTransmuxComplete=void 0,this.onFlush=void 0,this.onWorkerMessage=e=>{let t=e.data,n=this.hls;if(!(!n||!(t!=null&&t.event)||t.instanceNo!==this.instanceNo))switch(t.event){case`init`:{let e=this.workerContext?.objectURL;e&&self.URL.revokeObjectURL(e);break}case`transmuxComplete`:this.handleTransmuxComplete(t.data);break;case`flush`:this.onFlush(t.data);break;case`workerLog`:n.logger[t.data.logType]&&n.logger[t.data.logType](t.data.message);break;default:t.data=t.data||{},t.data.frag=this.frag,t.data.part=this.part,t.data.id=this.id,n.trigger(t.event,t.data);break}},this.onWorkerError=e=>{if(!this.hls)return;let t=Error(`${e.message} (${e.filename}:${e.lineno})`);this.hls.config.enableWorker=!1,this.hls.logger.warn(`Error in "${this.id}" Web Worker, fallback to inline`),this.hls.trigger(v.ERROR,{type:g.OTHER_ERROR,details:_.INTERNAL_EXCEPTION,fatal:!1,event:`demuxerWorker`,error:t})};let i=e.config;this.hls=e,this.id=t,this.useWorker=!!i.enableWorker,this.onTransmuxComplete=n,this.onFlush=r;let a=(e,t)=>{t||={},t.frag=this.frag||void 0,e===v.ERROR&&(t=t,t.parent=this.id,t.part=this.part,this.error=t.error),this.hls.trigger(e,t)};this.observer=new vi,this.observer.on(v.FRAG_DECRYPTED,a),this.observer.on(v.ERROR,a);let o=dt(i.preferManagedMediaSource);if(this.useWorker&&typeof Worker<`u`){let n=this.hls.logger;if(i.workerPath||xi()){try{i.workerPath?(n.log(`loading Web Worker ${i.workerPath} for "${t}"`),this.workerContext=Ci(i.workerPath)):(n.log(`injecting Web Worker for "${t}"`),this.workerContext=Si());let{worker:e}=this.workerContext;e.addEventListener(`message`,this.onWorkerMessage),e.addEventListener(`error`,this.onWorkerError),e.postMessage({instanceNo:this.instanceNo,cmd:`init`,typeSupported:o,id:t,config:W(i)})}catch(r){n.warn(`Error setting up "${t}" Web Worker, fallback to inline`,r),this.terminateWorker(),this.error=null,this.transmuxer=new mo(this.observer,o,i,``,t,e.logger)}return}}this.transmuxer=new mo(this.observer,o,i,``,t,e.logger)}reset(){if(this.frag=null,this.part=null,this.workerContext){let e=this.instanceNo;this.instanceNo=bo++;let t=this.hls.config,n=dt(t.preferManagedMediaSource);this.workerContext.worker.postMessage({instanceNo:this.instanceNo,cmd:`reset`,resetNo:e,typeSupported:n,id:this.id,config:W(t)})}}terminateWorker(){if(this.workerContext){let{worker:e}=this.workerContext;this.workerContext=null,e.removeEventListener(`message`,this.onWorkerMessage),e.removeEventListener(`error`,this.onWorkerError),wi(this.hls.config.workerPath)}}destroy(){if(this.workerContext)this.terminateWorker(),this.onWorkerMessage=this.onWorkerError=null;else{let e=this.transmuxer;e&&(e.destroy(),this.transmuxer=null)}let e=this.observer;e&&e.removeAllListeners(),this.frag=null,this.part=null,this.observer=null,this.hls=null}push(e,t,n,r,i,a,o,s,c,l){c.transmuxing.start=self.performance.now();let{instanceNo:u,transmuxer:d}=this,f=a?a.start:i.start,p=i.decryptdata,m=this.frag,h=!(m&&i.cc===m.cc),g=!(m&&c.level===m.level),_=m?c.sn-m.sn:-1,v=this.part?c.part-this.part.index:-1,y=_===0&&c.id>1&&c.id===m?.stats.chunkCount,x=!g&&(_===1||_===0&&(v===1||y&&v<=0)),S=self.performance.now();(g||_||i.stats.parsing.start===0)&&(i.stats.parsing.start=S),a&&(v||!x)&&(a.stats.parsing.start=S);let C=!(m&&i.initSegment?.url===m.initSegment?.url),w=new yo(h,x,s,g,f,C);if(!x||h||C){this.hls.logger.log(`[transmuxer-interface]: Starting new transmux session for ${i.type} sn: ${c.sn}${c.part>-1?` part: `+c.part:``} ${this.id===b.MAIN?`level`:`track`}: ${c.level} id: ${c.id}
|
|
17
|
+
discontinuity: ${h}
|
|
18
|
+
trackSwitch: ${g}
|
|
19
|
+
contiguous: ${x}
|
|
20
|
+
accurateTimeOffset: ${s}
|
|
21
|
+
timeOffset: ${f}
|
|
22
|
+
initSegmentChange: ${C}`);let e=new vo(n,r,t,o,l);this.configureTransmuxer(e)}if(this.frag=i,this.part=a,this.workerContext)this.workerContext.worker.postMessage({instanceNo:u,cmd:`demux`,data:e,decryptdata:p,chunkMeta:c,state:w},e instanceof ArrayBuffer?[e]:[]);else if(d){let t=d.push(e,p,c,w);_o(t)?t.then(e=>{this.handleTransmuxComplete(e)}).catch(e=>{this.transmuxerError(e,c,`transmuxer-interface push error`)}):this.handleTransmuxComplete(t)}}flush(e){e.transmuxing.start=self.performance.now();let{instanceNo:t,transmuxer:n}=this;if(this.workerContext)this.workerContext.worker.postMessage({instanceNo:t,cmd:`flush`,chunkMeta:e});else if(n){let t=n.flush(e);_o(t)?t.then(t=>{this.handleFlushResult(t,e)}).catch(t=>{this.transmuxerError(t,e,`transmuxer-interface flush error`)}):this.handleFlushResult(t,e)}}transmuxerError(e,t,n){this.hls&&(this.error=e,this.hls.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.FRAG_PARSING_ERROR,chunkMeta:t,frag:this.frag||void 0,part:this.part||void 0,fatal:!1,error:e,err:e,reason:n}))}handleFlushResult(e,t){e.forEach(e=>{this.handleTransmuxComplete(e)}),this.onFlush(t)}configureTransmuxer(e){let{instanceNo:t,transmuxer:n}=this;this.workerContext?this.workerContext.worker.postMessage({instanceNo:t,cmd:`configure`,config:e}):n&&n.configure(e)}handleTransmuxComplete(e){e.chunkMeta.transmuxing.end=self.performance.now(),this.onTransmuxComplete(e)}},So=100,Co=class extends di{constructor(e,t,n){super(e,t,n,`audio-stream-controller`,b.AUDIO),this.mainAnchor=null,this.mainFragLoading=null,this.audioOnly=!1,this.bufferedTrack=null,this.switchingTrack=null,this.trackId=-1,this.waitingData=null,this.mainDetails=null,this.flushing=!1,this.bufferFlushed=!1,this.cachedTrackLoadedData=null,this.registerListeners()}onHandlerDestroying(){this.unregisterListeners(),super.onHandlerDestroying(),this.resetItem()}resetItem(){this.mainDetails=this.mainAnchor=this.mainFragLoading=this.bufferedTrack=this.switchingTrack=this.waitingData=this.cachedTrackLoadedData=null}registerListeners(){super.registerListeners();let{hls:e}=this;e.on(v.LEVEL_LOADED,this.onLevelLoaded,this),e.on(v.AUDIO_TRACKS_UPDATED,this.onAudioTracksUpdated,this),e.on(v.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.on(v.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.on(v.BUFFER_RESET,this.onBufferReset,this),e.on(v.BUFFER_CREATED,this.onBufferCreated,this),e.on(v.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(v.BUFFER_FLUSHED,this.onBufferFlushed,this),e.on(v.INIT_PTS_FOUND,this.onInitPtsFound,this),e.on(v.FRAG_LOADING,this.onFragLoading,this),e.on(v.FRAG_BUFFERED,this.onFragBuffered,this)}unregisterListeners(){let{hls:e}=this;e&&(super.unregisterListeners(),e.off(v.LEVEL_LOADED,this.onLevelLoaded,this),e.off(v.AUDIO_TRACKS_UPDATED,this.onAudioTracksUpdated,this),e.off(v.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.off(v.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.off(v.BUFFER_RESET,this.onBufferReset,this),e.off(v.BUFFER_CREATED,this.onBufferCreated,this),e.off(v.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(v.BUFFER_FLUSHED,this.onBufferFlushed,this),e.off(v.INIT_PTS_FOUND,this.onInitPtsFound,this),e.off(v.FRAG_LOADING,this.onFragLoading,this),e.off(v.FRAG_BUFFERED,this.onFragBuffered,this))}onInitPtsFound(e,{frag:t,id:n,initPTS:r,timescale:i,trackId:a}){if(n===b.MAIN){let e=t.cc,n=this.fragCurrent;if(this.initPTS[e]={baseTime:r,timescale:i,trackId:a},this.log(`InitPTS for cc: ${e} found from main: ${r/i} (${r}/${i}) trackId: ${a}`),this.mainAnchor=t,this.state===X.WAITING_INIT_PTS){let n=this.waitingData;(!n&&!this.loadingParts||n&&n.frag.cc!==e)&&this.syncWithAnchor(t,n?.frag)}else !this.hls.hasEnoughToStart&&n&&n.cc!==e?(n.abortRequests(),this.syncWithAnchor(t,n)):this.state===X.IDLE&&this.tick()}}getLoadPosition(){return!this.startFragRequested&&this.nextLoadPosition>=0?this.nextLoadPosition:super.getLoadPosition()}syncWithAnchor(e,t){let n=this.mainFragLoading?.frag||null;if(t&&n?.cc===t.cc)return;let r=(n||e).cc,i=nn(this.getLevelDetails(),r,this.getLoadPosition());i&&(this.log(`Syncing with main frag at ${i.start} cc ${i.cc}`),this.startFragRequested=!1,this.nextLoadPosition=i.start,this.resetLoadingState(),this.state===X.IDLE&&this.doTickIdle())}startLoad(e,t){if(!this.levels){this.startPosition=e,this.state=X.STOPPED;return}let n=this.lastCurrentTime;this.stopLoad(),this.setInterval(So),n>0&&e===-1?(this.log(`Override startPosition with lastCurrentTime @${n.toFixed(3)}`),e=n,this.state=X.IDLE):this.state=X.WAITING_TRACK,this.nextLoadPosition=this.lastCurrentTime=e+this.timelineOffset,this.startPosition=t?-1:e,this.tick()}doTick(){switch(this.state){case X.IDLE:this.doTickIdle();break;case X.WAITING_TRACK:{let{levels:e,trackId:t}=this,n=e?.[t],r=n?.details;if(r&&!this.waitForLive(n)){if(this.waitForCdnTuneIn(r))break;this.state=X.WAITING_INIT_PTS}break}case X.FRAG_LOADING_WAITING_RETRY:this.checkRetryDate();break;case X.WAITING_INIT_PTS:{let e=this.waitingData;if(e){let{frag:t,part:n,cache:r,complete:i}=e,a=this.mainAnchor;if(this.initPTS[t.cc]!==void 0){this.waitingData=null,this.state=X.FRAG_LOADING;let e={frag:t,part:n,payload:r.flush().buffer,networkDetails:null};this._handleFragmentLoadProgress(e),i&&super._handleFragmentLoadComplete(e)}else a&&a.cc!==e.frag.cc&&this.syncWithAnchor(a,e.frag)}else this.state=X.IDLE}}this.onTickEnd()}resetLoadingState(){let e=this.waitingData;e&&(this.fragmentTracker.removeFragment(e.frag),this.waitingData=null),super.resetLoadingState()}onTickEnd(){let{media:e}=this;e!=null&&e.readyState&&(this.lastCurrentTime=e.currentTime)}doTickIdle(){let{hls:e,levels:t,media:n,trackId:r}=this,i=e.config;if(!this.buffering||!n&&!this.primaryPrefetch&&(this.startFragRequested||!i.startFragPrefetch)||!(t!=null&&t[r]))return;let a=t[r],o=a.details;if(!o||this.waitForLive(a)||this.waitForCdnTuneIn(o)){this.state=X.WAITING_TRACK,this.startFragRequested=!1;return}let s=this.mediaBuffer?this.mediaBuffer:this.media;this.bufferFlushed&&s&&(this.bufferFlushed=!1,this.afterBufferFlushed(s,z.AUDIO,b.AUDIO));let c=this.getFwdBufferInfo(s,b.AUDIO);if(c===null)return;if(!this.switchingTrack&&this._streamEnded(c,o)){e.trigger(v.BUFFER_EOS,{type:`audio`}),this.state=X.ENDED;return}let l=c.len,u=e.maxBufferLength,d=o.fragments,f=d[0].start,p=this.getLoadPosition(),m=this.flushing?p:c.end;if(this.switchingTrack&&n){let e=p;o.PTSKnown&&e<f&&(c.end>f||c.nextStart)&&(this.log(`Alt audio track ahead of main track, seek to start of alt audio track`),n.currentTime=f+.05)}if(l>=u&&!this.switchingTrack&&m<d[d.length-1].start)return;let h=this.getNextFragment(m,o);if(h&&this.isLoopLoading(h,m)&&(h=this.getNextFragmentLoopLoading(h,o,c,b.MAIN,u)),!h){this.bufferFlushed=!0;return}if(this.exceedsMaxBuffer(c,u,h))return;let g=this.mainFragLoading?.frag||null;if(!this.audioOnly&&this.startFragRequested&&g&&B(h)&&!h.endList&&(!o.live||!this.loadingParts&&m<this.hls.liveSyncPosition)&&(this.fragmentTracker.getState(g)===K.OK&&(this.mainFragLoading=g=null),g&&B(g))){if(h.start>g.end){let e=this.fragmentTracker.getFragAtPos(m,b.MAIN);e&&e.end>g.end&&(g=e,this.mainFragLoading={frag:e,targetBufferTime:null})}if(h.start>g.end)return}this.loadFragment(h,a,m)}onMediaDetaching(e,t){this.bufferFlushed=this.flushing=!1,super.onMediaDetaching(e,t)}onAudioTracksUpdated(e,{audioTracks:t}){this.resetTransmuxer(),this.levels=t.map(e=>new jt(e))}onAudioTrackSwitching(e,t){let n=!!t.url;this.trackId=t.id;let{fragCurrent:r}=this;r&&(r.abortRequests(),this.removeUnbufferedFrags(r.start)),this.resetLoadingState(),n?(this.switchingTrack=t,this.flushAudioIfNeeded(t),this.state!==X.STOPPED&&(this.setInterval(So),this.state=X.IDLE,this.tick())):(this.resetTransmuxer(),this.switchingTrack=null,this.bufferedTrack=t,this.clearInterval())}onManifestLoading(){super.onManifestLoading(),this.bufferFlushed=this.flushing=this.audioOnly=!1,this.resetItem(),this.trackId=-1}onLevelLoaded(e,t){this.mainDetails=t.details;let n=this.cachedTrackLoadedData;n&&(this.cachedTrackLoadedData=null,this.onAudioTrackLoaded(v.AUDIO_TRACK_LOADED,n))}onAudioTrackLoaded(e,t){var n;let{levels:r}=this,{details:i,id:a,groupId:o,track:s}=t;if(!r){this.warn(`Audio tracks reset while loading track ${a} "${s.name}" of "${o}"`);return}let c=this.mainDetails;if(!c||i.endCC>c.endCC||c.expired){this.cachedTrackLoadedData=t,this.state!==X.STOPPED&&(this.state=X.WAITING_TRACK);return}this.cachedTrackLoadedData=null,this.log(`Audio track ${a} "${s.name}" of "${o}" loaded [${i.startSN},${i.endSN}]${i.lastPartSn?`[part-${i.lastPartSn}-${i.lastPartIndex}]`:``},duration:${i.totalduration}`);let l=r[a],u=0;if(i.live||(n=l.details)!=null&&n.live){if(this.checkLiveUpdate(i),i.deltaUpdateFailed)return;l.details&&(u=this.alignPlaylists(i,l.details,this.levelLastLoaded?.details)),i.alignedSliding||(oi(i,c),i.alignedSliding||si(i,c),u=i.fragmentStart)}l.details=i,this.levelLastLoaded=l,this.startFragRequested||this.setStartPosition(c,u),this.hls.trigger(v.AUDIO_TRACK_UPDATED,{details:i,id:a,groupId:t.groupId}),this.state===X.WAITING_TRACK&&!this.waitForCdnTuneIn(i)&&(this.state=X.IDLE),this.tick()}_handleFragmentLoadProgress(e){let t=e.frag,{part:n,payload:r}=e,{config:i,trackId:a,levels:o}=this;if(!o){this.warn(`Audio tracks were reset while fragment load was in progress. Fragment ${t.sn} of level ${t.level} will not be buffered`);return}let s=o[a];if(!s){this.warn(`Audio track is undefined on fragment load progress`);return}let c=s.details;if(!c){this.warn(`Audio track details undefined on fragment load progress`),this.removeUnbufferedFrags(t.start);return}let l=i.defaultAudioCodec||s.audioCodec||`mp4a.40.2`,u=this.transmuxer;u||=this.transmuxer=new xo(this.hls,b.AUDIO,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this));let d=this.initPTS[t.cc],f=t.initSegment?.data;if(d!==void 0){let e=n?n.index:-1,i=e!==-1,a=new Fn(t.level,t.sn,t.stats.chunkCount,r.byteLength,e,i);u.push(r,f,l,``,t,n,c.totalduration,!1,a,d)}else{this.log(`Unknown video PTS for cc ${t.cc}, waiting for video PTS before demuxing audio frag ${t.sn} of [${c.startSN} ,${c.endSN}],track ${a}`);let{cache:e}=this.waitingData=this.waitingData||{frag:t,part:n,cache:new pi,complete:!1};e.push(new Uint8Array(r)),this.state!==X.STOPPED&&(this.state=X.WAITING_INIT_PTS)}}_handleFragmentLoadComplete(e){if(this.waitingData){this.waitingData.complete=!0;return}super._handleFragmentLoadComplete(e)}onBufferReset(){this.mediaBuffer=null}onBufferCreated(e,t){this.bufferFlushed=this.flushing=!1;let n=t.tracks.audio;n&&(this.mediaBuffer=n.buffer||null)}onFragLoading(e,t){!this.audioOnly&&t.frag.type===b.MAIN&&B(t.frag)&&(this.mainFragLoading=t,this.state===X.IDLE&&this.tick())}onFragBuffered(e,t){let{frag:n,part:r}=t;if(n.type!==b.AUDIO){!this.audioOnly&&n.type===b.MAIN&&!n.elementaryStreams.video&&!n.elementaryStreams.audiovideo&&(this.audioOnly=!0,this.mainFragLoading=null);return}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}, audioSwitch: ${this.switchingTrack?this.switchingTrack.name:`false`}`);return}if(B(n)){this.fragPrevious=n;let e=this.switchingTrack;e&&(this.bufferedTrack=e,this.switchingTrack=null,this.hls.trigger(v.AUDIO_TRACK_SWITCHED,E({},e)))}this.fragBufferedComplete(n,r),this.media&&this.tick()}onError(e,t){if(t.fatal){this.state=X.ERROR;return}switch(t.details){case _.FRAG_GAP:case _.FRAG_PARSING_ERROR:case _.FRAG_DECRYPT_ERROR:case _.FRAG_LOAD_ERROR:case _.FRAG_LOAD_TIMEOUT:case _.KEY_LOAD_ERROR:case _.KEY_LOAD_TIMEOUT:this.onFragmentOrKeyLoadError(b.AUDIO,t);break;case _.AUDIO_TRACK_LOAD_ERROR:case _.AUDIO_TRACK_LOAD_TIMEOUT:case _.LEVEL_PARSING_ERROR:!t.levelRetry&&this.state===X.WAITING_TRACK&&t.context?.type===y.AUDIO_TRACK&&(this.state=X.IDLE);break;case _.BUFFER_ADD_CODEC_ERROR:case _.BUFFER_APPEND_ERROR:if(t.parent!==`audio`)return;this.reduceLengthAndFlushBuffer(t)||this.resetLoadingState();break;case _.BUFFER_FULL_ERROR:if(t.parent!==`audio`)return;this.reduceLengthAndFlushBuffer(t)&&(this.bufferedTrack=null,super.flushMainBuffer(0,1/0,`audio`));break;case _.INTERNAL_EXCEPTION:this.recoverWorkerError(t);break}}onBufferFlushing(e,{type:t}){t!==z.VIDEO&&(this.flushing=!0)}onBufferFlushed(e,{type:t}){if(t!==z.VIDEO){this.flushing=!1,this.bufferFlushed=!0,this.state===X.ENDED&&(this.state=X.IDLE);let e=this.mediaBuffer||this.media;e&&(this.afterBufferFlushed(e,t,b.AUDIO),this.tick())}}_handleTransmuxComplete(e){var t;let n=`audio`,{hls:r}=this,{remuxResult:i,chunkMeta:a}=e,o=this.getCurrentContext(a);if(!o){this.resetWhenMissingContext(a);return}let{frag:s,part:c,level:l}=o,{details:u}=l,{audio:d,text:f,id3:p,initSegment:m}=i;if(this.fragContextChanged(s)||!u){this.fragmentTracker.removeFragment(s);return}if(this.state=X.PARSING,this.switchingTrack&&d&&this.completeAudioSwitch(this.switchingTrack),m!=null&&m.tracks){let e=s.initSegment||s;if(this.unhandledEncryptionError(m,s))return;this._bufferInitSegment(l,m.tracks,e,a),r.trigger(v.FRAG_PARSING_INIT_SEGMENT,{frag:e,id:n,tracks:m.tracks})}if(d){let{startPTS:e,endPTS:t,startDTS:n,endDTS:r}=d;c&&(c.elementaryStreams[z.AUDIO]={startPTS:e,endPTS:t,startDTS:n,endDTS:r}),s.setElementaryStreamInfo(z.AUDIO,e,t,n,r),this.bufferFragmentData(d,s,c,a)}if(p!=null&&(t=p.samples)!=null&&t.length){let e=w({id:n,frag:s,details:u},p);r.trigger(v.FRAG_PARSING_METADATA,e)}if(f){let e=w({id:n,frag:s,details:u},f);r.trigger(v.FRAG_PARSING_USERDATA,e)}}_bufferInitSegment(e,t,n,r){if(this.state!==X.PARSING||(t.video&&delete t.video,t.audiovideo&&delete t.audiovideo,!t.audio))return;let i=t.audio;i.id=b.AUDIO;let a=e.audioCodec;this.log(`Init audio buffer, container:${i.container}, codecs[level/parsed]=[${a}/${i.codec}]`),a&&a.split(`,`).length===1&&(i.levelCodec=a),this.hls.trigger(v.BUFFER_CODECS,t);let o=i.initSegment;if(o!=null&&o.byteLength){let e={type:`audio`,frag:n,part:null,chunkMeta:r,parent:n.type,data:o};this.hls.trigger(v.BUFFER_APPENDING,e)}this.tickImmediate()}loadFragment(e,t,n){let r=this.fragmentTracker.getState(e);if(this.switchingTrack||r===K.NOT_LOADED||r===K.PARTIAL){var i;if(!B(e))this._loadInitSegment(e,t);else if((i=t.details)!=null&&i.live&&!this.initPTS[e.cc]){this.log(`Waiting for video PTS in continuity counter ${e.cc} of live stream before loading audio fragment ${e.sn} of level ${this.trackId}`),this.state=X.WAITING_INIT_PTS;let n=this.mainDetails;n&&n.fragmentStart!==t.details.fragmentStart&&si(t.details,n)}else super.loadFragment(e,t,n)}else this.clearTrackerIfNeeded(e)}flushAudioIfNeeded(e){if(this.media&&this.bufferedTrack){let{name:t,lang:n,assocLang:r,characteristics:i,audioCodec:a,channels:o}=this.bufferedTrack;Ht({name:t,lang:n,assocLang:r,characteristics:i,audioCodec:a,channels:o},e,Gt)||(Jt(e.url,this.hls)?(this.log(`Switching audio track : flushing all audio`),super.flushMainBuffer(0,1/0,`audio`),this.bufferedTrack=null):this.bufferedTrack=e)}}completeAudioSwitch(e){let{hls:t}=this;this.flushAudioIfNeeded(e),this.bufferedTrack=e,this.switchingTrack=null,t.trigger(v.AUDIO_TRACK_SWITCHED,E({},e))}},wo=class extends k{constructor(e,t){super(t,e.logger),this.hls=void 0,this.canLoad=!1,this.timer=-1,this.hls=e}destroy(){this.clearTimer(),this.hls=this.log=this.warn=null}clearTimer(){this.timer!==-1&&(self.clearTimeout(this.timer),this.timer=-1)}startLoad(){this.canLoad=!0,this.loadPlaylist()}stopLoad(){this.canLoad=!1,this.clearTimer()}switchParams(e,t,n){let r=t?.renditionReports;if(r){let i=-1;for(let n=0;n<r.length;n++){let a=r[n],o;try{o=new self.URL(a.URI,t.url).href}catch(e){this.warn(`Could not construct new URL for Rendition Report: ${e}`),o=a.URI||``}if(o===e){i=n;break}else o===e.substring(0,o.length)&&(i=n)}if(i!==-1){let e=r[i],a=parseInt(e[`LAST-MSN`])||t.lastPartSn,o=parseInt(e[`LAST-PART`])||t.lastPartIndex;if(this.hls.config.lowLatencyMode){let e=Math.min(t.age-t.partTarget,t.targetduration);o>=0&&e>t.partTarget&&(o+=1)}let s=n&&kt(n);return new At(a,o>=0?o:void 0,s)}}}loadPlaylist(e){this.clearTimer()}loadingPlaylist(e,t){this.clearTimer()}shouldLoadPlaylist(e){return this.canLoad&&!!e&&!!e.url&&(!e.details||e.details.live)}getUrlWithDirectives(e,t){if(t)try{return t.addDirectives(e)}catch(e){this.warn(`Could not construct new URL with HLS Delivery Directives: ${e}`)}return e}playlistLoaded(e,t,n){let{details:r,stats:i}=t,a=self.performance.now(),o=i.loading.first?Math.max(0,a-i.loading.first):0;r.advancedDateTime=Date.now()-o;let s=this.hls.config.timelineOffset;if(s!==r.appliedTimelineOffset){let e=Math.max(s||0,0);r.appliedTimelineOffset=e,r.fragments.forEach(t=>{t.setStart(t.playlistOffset+e)})}if(r.live||n!=null&&n.live){let s=`levelInfo`in t?t.levelInfo:t.track;if(r.reloaded(n),n&&r.fragments.length>0){Vr(n,r,this);let e=r.playlistParsingError;if(e){this.warn(e);let n=this.hls;if(!n.config.ignorePlaylistParsingErrors){let{networkDetails:a}=t;n.trigger(v.ERROR,{type:g.NETWORK_ERROR,details:_.LEVEL_PARSING_ERROR,fatal:!1,url:r.url,error:e,reason:e.message,level:t.level||void 0,parent:r.fragments[0]?.type,networkDetails:a,stats:i});return}r.playlistParsingError=null}}r.requestScheduled===-1&&(r.requestScheduled=i.loading.start);let c=this.hls.mainForwardBufferInfo,l=c?c.end-c.len:0,u=Jr(r,(r.edge-l)*1e3);if(r.requestScheduled+u<a?r.requestScheduled=a:r.requestScheduled+=u,this.log(`live playlist ${e} ${r.advanced?`REFRESHED `+r.lastPartSn+`-`+r.lastPartIndex:r.updated?`UPDATED`:`MISSED`}`),!this.canLoad||!r.live)return;let d,f,p;if(r.canBlockReload&&r.endSN&&r.advanced){let e=this.hls.config.lowLatencyMode,i=r.lastPartSn,o=r.endSN,c=r.lastPartIndex,l=c!==-1,u=i===o;l?u?(f=o+1,p=e?0:c):(f=i,p=e?c+1:r.maxPartIndex):f=o+1;let m=r.age,h=m+r.ageHeader,g=Math.min(h-r.partTarget,r.targetduration*1.5);if(g>0){if(h>r.targetduration*3)this.log(`Playlist last advanced ${m.toFixed(2)}s ago. Omitting segment and part directives.`),f=void 0,p=void 0;else if(n!=null&&n.tuneInGoal&&h-r.partTarget>n.tuneInGoal)this.warn(`CDN Tune-in goal increased from: ${n.tuneInGoal} to: ${g} with playlist age: ${r.age}`),g=0;else{let e=Math.floor(g/r.targetduration);if(f+=e,p!==void 0){let e=Math.round(g%r.targetduration/r.partTarget);p+=e}this.log(`CDN Tune-in age: ${r.ageHeader}s last advanced ${m.toFixed(2)}s goal: ${g} skip sn ${e} to part ${p}`)}r.tuneInGoal=g}if(d=this.getDeliveryDirectives(r,t.deliveryDirectives,f,p),e||!u){r.requestScheduled=a,this.loadingPlaylist(s,d);return}}else (r.canBlockReload||r.canSkipUntil)&&(d=this.getDeliveryDirectives(r,t.deliveryDirectives,f,p));d&&f!==void 0&&r.canBlockReload&&(r.requestScheduled=i.loading.first+Math.max(u-o*2,u/2)),this.scheduleLoading(s,d,r)}else this.clearTimer()}scheduleLoading(e,t,n){let r=n||e.details;if(!r){this.loadingPlaylist(e,t);return}let i=self.performance.now(),a=r.requestScheduled;if(i>=a){this.loadingPlaylist(e,t);return}let o=a-i;this.log(`reload live playlist ${e.name||e.bitrate+`bps`} in ${Math.round(o)} ms`),this.clearTimer(),this.timer=self.setTimeout(()=>this.loadingPlaylist(e,t),o)}getDeliveryDirectives(e,t,n,r){let i=kt(e);return t!=null&&t.skip&&e.deltaUpdateFailed&&(n=t.msn,r=t.part,i=Ot.No),new At(n,r,i)}checkRetry(e){let t=e.details,n=rn(e),r=e.errorAction,{action:i,retryCount:a=0,retryConfig:o}=r||{},s=!!r&&!!o&&(i===G.RetryRequest||!r.resolved&&i===G.SendAlternateToPenaltyBox);if(s){var c;if(a>=o.maxNumRetry)return!1;if(n&&(c=e.context)!=null&&c.deliveryDirectives)this.warn(`Retrying playlist loading ${a+1}/${o.maxNumRetry} after "${t}" without delivery-directives`),this.loadPlaylist();else{let e=cn(o,a);this.clearTimer(),this.timer=self.setTimeout(()=>this.loadPlaylist(),e),this.warn(`Retrying playlist loading ${a+1}/${o.maxNumRetry} after "${t}" in ${e}ms`)}e.levelRetry=!0,r.resolved=!0}return s}};function To(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Eo(e[n].attrs,t[n].attrs))return!1;return!0}function Eo(e,t,n){let r=e[`STABLE-RENDITION-ID`];return r&&!n?r===t[`STABLE-RENDITION-ID`]:!(n||[`LANGUAGE`,`NAME`,`CHARACTERISTICS`,`AUTOSELECT`,`DEFAULT`,`FORCED`,`ASSOC-LANGUAGE`]).some(n=>e[n]!==t[n])}function Do(e,t){return t.label.toLowerCase()===e.name.toLowerCase()&&(!t.language||t.language.toLowerCase()===(e.lang||``).toLowerCase())}var Oo=class extends wo{constructor(e){super(e,`audio-track-controller`),this.tracks=[],this.groupIds=null,this.tracksInGroup=[],this.trackId=-1,this.currentTrack=null,this.selectDefaultTrack=!0,this.registerListeners()}registerListeners(){let{hls:e}=this;e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.MANIFEST_PARSED,this.onManifestParsed,this),e.on(v.LEVEL_LOADING,this.onLevelLoading,this),e.on(v.LEVEL_SWITCHING,this.onLevelSwitching,this),e.on(v.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.on(v.ERROR,this.onError,this)}unregisterListeners(){let{hls:e}=this;e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.MANIFEST_PARSED,this.onManifestParsed,this),e.off(v.LEVEL_LOADING,this.onLevelLoading,this),e.off(v.LEVEL_SWITCHING,this.onLevelSwitching,this),e.off(v.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.off(v.ERROR,this.onError,this)}destroy(){this.unregisterListeners(),this.tracks.length=0,this.tracksInGroup.length=0,this.currentTrack=null,super.destroy()}onManifestLoading(){this.tracks=[],this.tracksInGroup=[],this.groupIds=null,this.currentTrack=null,this.trackId=-1,this.selectDefaultTrack=!0}onManifestParsed(e,t){this.tracks=t.audioTracks||[]}onAudioTrackLoaded(e,t){let{id:n,groupId:r,details:i}=t,a=this.tracksInGroup[n];if(!a||a.groupId!==r){this.warn(`Audio track with id:${n} and group:${r} not found in active group ${a?.groupId}`);return}let o=a.details;a.details=t.details,this.log(`Audio track ${n} "${a.name}" lang:${a.lang} group:${r} loaded [${i.startSN}-${i.endSN}]`),n===this.trackId&&this.playlistLoaded(n,t,o)}onLevelLoading(e,t){this.switchLevel(t.level)}onLevelSwitching(e,t){this.switchLevel(t.level)}switchLevel(e){let t=this.hls.levels[e];if(!t)return;let n=t.audioGroups||null,r=this.groupIds,i=this.currentTrack;if(!n||r?.length!==n?.length||n!=null&&n.some(e=>r?.indexOf(e)===-1)){this.groupIds=n,this.trackId=-1,this.currentTrack=null;let e=this.tracks.filter(e=>!n||n.indexOf(e.groupId)!==-1);if(e.length)this.selectDefaultTrack&&!e.some(e=>e.default)&&(this.selectDefaultTrack=!1),e.forEach((e,t)=>{e.id=t});else if(!i&&!this.tracksInGroup.length)return;this.tracksInGroup=e;let t=this.hls.config.audioPreference;if(!i&&t){let n=Vt(t,e,Gt);if(n>-1)i=e[n];else{let e=Vt(t,this.tracks);i=this.tracks[e]}}let r=this.findTrackId(i);r===-1&&i&&(r=this.findTrackId(null));let a={audioTracks:e};this.log(`Updating audio tracks, ${e.length} track(s) found in group(s): ${n?.join(`,`)}`),this.hls.trigger(v.AUDIO_TRACKS_UPDATED,a);let o=this.trackId;if(r!==-1&&o===-1)this.setAudioTrack(r);else if(e.length&&o===-1){let t=Error(`No audio track selected for current audio group-ID(s): ${this.groupIds?.join(`,`)} track count: ${e.length}`);this.warn(t.message),this.hls.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.AUDIO_TRACK_LOAD_ERROR,fatal:!0,error:t})}}}onError(e,t){t.fatal||!t.context||t.context.type===y.AUDIO_TRACK&&t.context.id===this.trackId&&(!this.groupIds||this.groupIds.indexOf(t.context.groupId)!==-1)&&this.checkRetry(t)}get allAudioTracks(){return this.tracks}get audioTracks(){return this.tracksInGroup}get audioTrack(){return this.trackId}set audioTrack(e){this.selectDefaultTrack=!1,this.setAudioTrack(e)}setAudioOption(e){let t=this.hls;if(t.config.audioPreference=e,e){let n=this.allAudioTracks;if(this.selectDefaultTrack=!1,n.length){let r=this.currentTrack;if(r&&Ht(e,r,Gt))return r;let i=Vt(e,this.tracksInGroup,Gt);if(i>-1){let e=this.tracksInGroup[i];return this.setAudioTrack(i),e}else if(r){let r=t.loadLevel;r===-1&&(r=t.firstAutoLevel);let i=Kt(e,t.levels,n,r,Gt);if(i===-1)return null;t.nextLoadLevel=i}if(e.channels||e.audioCodec){let t=Vt(e,n);if(t>-1)return n[t]}}}return null}setAudioTrack(e){let t=this.tracksInGroup;if(e<0||e>=t.length){this.warn(`Invalid audio track id: ${e}`);return}this.selectDefaultTrack=!1;let n=this.currentTrack,r=t[e],i=r.details&&!r.details.live;if(e===this.trackId&&r===n&&i||(this.log(`Switching to audio-track ${e} "${r.name}" lang:${r.lang} group:${r.groupId} channels:${r.channels}`),this.trackId=e,this.currentTrack=r,this.hls.trigger(v.AUDIO_TRACK_SWITCHING,E({},r)),i))return;let a=this.switchParams(r.url,n?.details,r.details);this.loadPlaylist(a)}findTrackId(e){let t=this.tracksInGroup;for(let n=0;n<t.length;n++){let r=t[n];if(!(this.selectDefaultTrack&&!r.default)&&(!e||Ht(e,r,Gt)))return n}if(e){let{name:n,lang:r,assocLang:i,characteristics:a,audioCodec:o,channels:s}=e;for(let e=0;e<t.length;e++){let c=t[e];if(Ht({name:n,lang:r,assocLang:i,characteristics:a,audioCodec:o,channels:s},c,Gt))return e}for(let n=0;n<t.length;n++){let r=t[n];if(Eo(e.attrs,r.attrs,[`LANGUAGE`,`ASSOC-LANGUAGE`,`CHARACTERISTICS`]))return n}for(let n=0;n<t.length;n++){let r=t[n];if(Eo(e.attrs,r.attrs,[`LANGUAGE`]))return n}}return-1}loadPlaylist(e){super.loadPlaylist();let t=this.currentTrack;this.shouldLoadPlaylist(t)&&Jt(t.url,this.hls)&&this.scheduleLoading(t,e)}loadingPlaylist(e,t){super.loadingPlaylist(e,t);let n=e.id,r=e.groupId,i=this.getUrlWithDirectives(e.url,t),a=e.details,o=a?.age;this.log(`Loading audio-track ${n} "${e.name}" lang:${e.lang} group:${r}${t?.msn===void 0?``:` at sn `+t.msn+` part `+t.part}${o&&a.live?` age `+o.toFixed(1)+(a.type&&` `+a.type||``):``} ${i}`),this.hls.trigger(v.AUDIO_TRACK_LOADING,{url:i,id:n,groupId:r,deliveryDirectives:t||null,track:e})}},ko=class{constructor(e){this.tracks=void 0,this.queues={video:[],audio:[],audiovideo:[]},this.tracks=e}destroy(){this.tracks=this.queues=null}append(e,t,n){if(this.queues===null||this.tracks===null)return;let r=this.queues[t];r.push(e),r.length===1&&!n&&this.executeNext(t)}appendBlocker(e){return new Promise(t=>{let n={label:`async-blocker`,execute:t,onStart:()=>{},onComplete:()=>{},onError:()=>{}};this.append(n,e)})}prependBlocker(e){return new Promise(t=>{if(this.queues){let n={label:`async-blocker-prepend`,execute:t,onStart:()=>{},onComplete:()=>{},onError:()=>{}};this.queues[e].unshift(n)}})}removeBlockers(){this.queues!==null&&[this.queues.video,this.queues.audio,this.queues.audiovideo].forEach(e=>{let t=e[0]?.label;(t===`async-blocker`||t===`async-blocker-prepend`)&&(e[0].execute(),e.splice(0,1))})}unblockAudio(e){this.queues!==null&&this.queues.audio[0]===e&&this.shiftAndExecuteNext(`audio`)}executeNext(e){if(this.queues===null||this.tracks===null)return;let t=this.queues[e];if(t.length){let n=t[0];try{n.execute()}catch(t){if(n.onError(t),this.queues===null||this.tracks===null)return;let r=this.tracks[e]?.buffer;r!=null&&r.updating||this.shiftAndExecuteNext(e)}}}shiftAndExecuteNext(e){this.queues!==null&&(this.queues[e].shift(),this.executeNext(e))}current(e){return this.queues?.[e][0]||null}toString(){let{queues:e,tracks:t}=this;return e===null||t===null?`<destroyed>`:`
|
|
23
|
+
${this.list(`video`)}
|
|
24
|
+
${this.list(`audio`)}
|
|
25
|
+
${this.list(`audiovideo`)}}`}list(e){var t,n;return(t=this.queues)!=null&&t[e]||(n=this.tracks)!=null&&n[e]?`${e}: (${this.listSbInfo(e)}) ${this.listOps(e)}`:``}listSbInfo(e){let t=this.tracks?.[e],n=t?.buffer;return n?`SourceBuffer${n.updating?` updating`:``}${t.ended?` ended`:``}${t.ending?` ending`:``}`:`none`}listOps(e){return this.queues?.[e].map(e=>e.label).join(`, `)||``}},Ao=/(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\.[^.,]+)+/,jo=`HlsJsTrackRemovedError`,Mo=class extends Error{constructor(e){super(e),this.name=jo}},No=class extends k{constructor(e,t){super(`buffer-controller`,e.logger),this.hls=void 0,this.fragmentTracker=void 0,this.details=null,this._objectUrl=null,this.operationQueue=null,this.bufferCodecEventsTotal=0,this.media=null,this.mediaSource=null,this.lastMpegAudioChunk=null,this.blockedAudioAppend=null,this.lastVideoAppendEnd=0,this.appendSource=void 0,this.transferData=void 0,this.overrides=void 0,this.appendErrors={audio:0,video:0,audiovideo:0},this.tracks={},this.sourceBuffers=[[null,null],[null,null]],this._onEndStreaming=e=>{this.hls&&this.mediaSource?.readyState===`open`&&this.hls.pauseBuffering()},this._onStartStreaming=e=>{this.hls&&this.hls.resumeBuffering()},this._onMediaSourceOpen=e=>{let{media:t,mediaSource:n}=this;e&&this.log(`Media source opened`),!(!t||!n)&&(n.removeEventListener(`sourceopen`,this._onMediaSourceOpen),t.removeEventListener(`emptied`,this._onMediaEmptied),this.updateDuration(),this.hls.trigger(v.MEDIA_ATTACHED,{media:t,mediaSource:n}),this.mediaSource!==null&&this.checkPendingTracks())},this._onMediaSourceClose=()=>{this.log(`Media source closed`)},this._onMediaSourceEnded=()=>{this.log(`Media source ended`)},this._onMediaEmptied=()=>{let{mediaSrc:e,_objectUrl:t}=this;e!==t&&this.error(`Media element src was set while attaching MediaSource (${t} > ${e})`)},this.hls=e,this.fragmentTracker=t,this.appendSource=ne(te(e.config.preferManagedMediaSource)),this.initTracks(),this.registerListeners()}hasSourceTypes(){return Object.keys(this.tracks).length>0}destroy(){this.unregisterListeners(),this.details=null,this.lastMpegAudioChunk=this.blockedAudioAppend=null,this.transferData=this.overrides=void 0,this.operationQueue&&=(this.operationQueue.destroy(),null),this.hls=this.fragmentTracker=null,this._onMediaSourceOpen=this._onMediaSourceClose=null,this._onMediaSourceEnded=null,this._onStartStreaming=this._onEndStreaming=null}registerListeners(){let{hls:e}=this;e.on(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.MANIFEST_PARSED,this.onManifestParsed,this),e.on(v.BUFFER_RESET,this.onBufferReset,this),e.on(v.BUFFER_APPENDING,this.onBufferAppending,this),e.on(v.BUFFER_CODECS,this.onBufferCodecs,this),e.on(v.BUFFER_EOS,this.onBufferEos,this),e.on(v.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(v.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(v.FRAG_PARSED,this.onFragParsed,this),e.on(v.FRAG_CHANGED,this.onFragChanged,this),e.on(v.ERROR,this.onError,this)}unregisterListeners(){let{hls:e}=this;e.off(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.MANIFEST_PARSED,this.onManifestParsed,this),e.off(v.BUFFER_RESET,this.onBufferReset,this),e.off(v.BUFFER_APPENDING,this.onBufferAppending,this),e.off(v.BUFFER_CODECS,this.onBufferCodecs,this),e.off(v.BUFFER_EOS,this.onBufferEos,this),e.off(v.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(v.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(v.FRAG_PARSED,this.onFragParsed,this),e.off(v.FRAG_CHANGED,this.onFragChanged,this),e.off(v.ERROR,this.onError,this)}transferMedia(){let{media:e,mediaSource:t}=this;if(!e)return null;let n={};if(this.operationQueue){let e=this.isUpdating();e||this.operationQueue.removeBlockers();let t=this.isQueued();(e||t)&&this.warn(`Transfering MediaSource with${t?` operations in queue`:``}${e?` updating SourceBuffer(s)`:``} ${this.operationQueue}`),this.operationQueue.destroy()}let r=this.transferData;return!this.sourceBufferCount&&r&&r.mediaSource===t?w(n,r.tracks):this.sourceBuffers.forEach(e=>{let[t]=e;t&&(n[t]=w({},this.tracks[t]),this.removeBuffer(t)),e[0]=e[1]=null}),{media:e,mediaSource:t,tracks:n}}initTracks(){let e={};this.sourceBuffers=[[null,null],[null,null]],this.tracks=e,this.resetQueue(),this.resetAppendErrors(),this.lastMpegAudioChunk=this.blockedAudioAppend=null,this.lastVideoAppendEnd=0}onManifestLoading(){this.bufferCodecEventsTotal=0,this.details=null}onManifestParsed(e,t){var n;let r=2;(t.audio&&!t.video||!t.altAudio)&&(r=1),this.bufferCodecEventsTotal=r,this.log(`${r} bufferCodec event(s) expected.`),(n=this.transferData)!=null&&n.mediaSource&&this.sourceBufferCount&&r&&this.bufferCreated()}onMediaAttaching(e,t){let n=this.media=t.media;this.transferData=this.overrides=void 0;let r=te(this.appendSource);if(r){let e=!!t.mediaSource;(e||t.overrides)&&(this.transferData=t,this.overrides=t.overrides);let i=this.mediaSource=t.mediaSource||new r;if(this.assignMediaSource(i),e)this._objectUrl=n.src,this.attachTransferred();else{let e=this._objectUrl=self.URL.createObjectURL(i);if(this.appendSource)try{n.removeAttribute(`src`);let t=self.ManagedMediaSource;n.disableRemotePlayback=n.disableRemotePlayback||t&&i instanceof t,Po(n),Fo(n,e),n.load()}catch{n.src=e}else n.src=e}n.addEventListener(`emptied`,this._onMediaEmptied)}}assignMediaSource(e){this.log(`${this.transferData?.mediaSource===e?`transferred`:`created`} media source: ${e.constructor?.name}`),e.addEventListener(`sourceopen`,this._onMediaSourceOpen),e.addEventListener(`sourceended`,this._onMediaSourceEnded),e.addEventListener(`sourceclose`,this._onMediaSourceClose),this.appendSource&&(e.addEventListener(`startstreaming`,this._onStartStreaming),e.addEventListener(`endstreaming`,this._onEndStreaming))}attachTransferred(){let e=this.media,t=this.transferData;if(!t||!e)return;let n=this.tracks,r=t.tracks,i=r?Object.keys(r):null,a=i?i.length:0,o=()=>{Promise.resolve().then(()=>{this.media&&this.mediaSourceOpenOrEnded&&this._onMediaSourceOpen()})};if(r&&i&&a){if(!this.tracksReady){this.hls.config.startFragPrefetch=!0,this.log(`attachTransferred: waiting for SourceBuffer track info`);return}if(this.log(`attachTransferred: (bufferCodecEventsTotal ${this.bufferCodecEventsTotal})
|
|
26
|
+
required tracks: ${W(n,(e,t)=>e===`initSegment`?void 0:t)};
|
|
27
|
+
transfer tracks: ${W(r,(e,t)=>e===`initSegment`?void 0:t)}}`),!re(r,n)){t.mediaSource=null,t.tracks=void 0;let i=e.currentTime,a=this.details,o=Math.max(i,a?.fragments[0].start||0);if(o-i>1){this.log(`attachTransferred: waiting for playback to reach new tracks start time ${i} -> ${o}`);return}this.warn(`attachTransferred: resetting MediaSource for incompatible tracks ("${Object.keys(r)}"->"${Object.keys(n)}") start time: ${o} currentTime: ${i}`),this.onMediaDetaching(v.MEDIA_DETACHING,{}),this.onMediaAttaching(v.MEDIA_ATTACHING,t),e.currentTime=o;return}this.transferData=void 0,i.forEach(e=>{let t=e,n=r[t];if(n){let e=n.buffer;if(e){let r=this.fragmentTracker,i=n.id;if(r.hasFragments(i)||r.hasParts(i)){let n=q.getBuffered(e);r.detectEvictedFragments(t,n,i,null,!0)}let a=Io(t),o=[t,e];this.sourceBuffers[a]=o,e.updating&&this.operationQueue&&this.operationQueue.prependBlocker(t),this.trackSourceBuffer(t,n)}}}),o(),this.bufferCreated()}else this.log(`attachTransferred: MediaSource w/o SourceBuffers`),o()}get mediaSourceOpenOrEnded(){let e=this.mediaSource?.readyState;return e===`open`||e===`ended`}onMediaDetaching(e,t){let n=!!t.transferMedia;this.transferData=this.overrides=void 0;let{media:r,mediaSource:i,_objectUrl:a}=this;if(i){if(this.log(`media source ${n?`transferring`:`detaching`}`),n)this.sourceBuffers.forEach(([e])=>{e&&this.removeBuffer(e)}),this.resetQueue();else{if(this.mediaSourceOpenOrEnded){let e=i.readyState===`open`;try{let t=i.sourceBuffers;for(let n=t.length;n--;)e&&t[n].abort(),i.removeSourceBuffer(t[n]);e&&i.endOfStream()}catch(e){this.warn(`onMediaDetaching: ${e.message} while calling endOfStream`)}}this.sourceBufferCount&&this.onBufferReset()}i.removeEventListener(`sourceopen`,this._onMediaSourceOpen),i.removeEventListener(`sourceended`,this._onMediaSourceEnded),i.removeEventListener(`sourceclose`,this._onMediaSourceClose),this.appendSource&&(i.removeEventListener(`startstreaming`,this._onStartStreaming),i.removeEventListener(`endstreaming`,this._onEndStreaming)),this.mediaSource=null,this._objectUrl=null}r&&(r.removeEventListener(`emptied`,this._onMediaEmptied),n||(a&&self.URL.revokeObjectURL(a),this.mediaSrc===a?(r.removeAttribute(`src`),this.appendSource&&Po(r),r.load()):this.warn(`media|source.src was changed by a third party - skip cleanup`)),this.media=null),this.hls.trigger(v.MEDIA_DETACHED,t)}onBufferReset(){this.sourceBuffers.forEach(([e])=>{e&&this.resetBuffer(e)}),this.initTracks()}resetBuffer(e){let t=this.tracks[e]?.buffer;if(this.removeBuffer(e),t)try{var n;(n=this.mediaSource)!=null&&n.sourceBuffers.length&&this.mediaSource.removeSourceBuffer(t)}catch(t){this.warn(`onBufferReset ${e}`,t)}delete this.tracks[e]}removeBuffer(e){this.removeBufferListeners(e),this.sourceBuffers[Io(e)]=[null,null];let t=this.tracks[e];t&&(t.buffer=void 0)}resetQueue(){this.operationQueue&&this.operationQueue.destroy(),this.operationQueue=new ko(this.tracks)}onBufferCodecs(e,t){let n=this.tracks,r=Object.keys(t);this.log(`BUFFER_CODECS: "${r}" (current SB count ${this.sourceBufferCount})`);let i=`audiovideo`in t&&(n.audio||n.video)||n.audiovideo&&(`audio`in t||`video`in t),a=!i&&this.sourceBufferCount&&this.media&&r.some(e=>!n[e]);if(i||a){this.warn(`Unsupported transition between "${Object.keys(n)}" and "${r}" SourceBuffers`);return}r.forEach(e=>{var r;let{id:i,codec:a,levelCodec:o,container:s,metadata:c,supplemental:l}=t[e],u=n[e],d=(r=this.transferData)==null||(r=r.tracks)==null?void 0:r[e],f=d!=null&&d.buffer?d:u,p=f?.pendingCodec||f?.codec,m=f?.levelCodec;u||=n[e]={buffer:void 0,listeners:[],codec:a,supplemental:l,container:s,levelCodec:o,metadata:c,id:i};let h=st(p,m),g=h?.replace(Ao,`$1`),_=st(a,o),v=_?.replace(Ao,`$1`);_&&h&&g!==v&&(e.slice(0,5)===`audio`&&(_=at(_,this.appendSource)),this.log(`switching codec ${p} to ${_}`),_!==(u.pendingCodec||u.codec)&&(u.pendingCodec=_),u.container=s,this.appendChangeType(e,s,_))}),(this.tracksReady||this.sourceBufferCount)&&(t.tracks=this.sourceBufferTracks),!this.sourceBufferCount&&(this.bufferCodecEventsTotal>1&&!this.tracks.video&&!t.video&&t.audio?.id===`main`&&(this.log(`Main audio-only`),this.bufferCodecEventsTotal=1),this.mediaSourceOpenOrEnded&&this.checkPendingTracks())}get sourceBufferTracks(){return Object.keys(this.tracks).reduce((e,t)=>{let n=this.tracks[t];return e[t]={id:n.id,container:n.container,codec:n.codec,levelCodec:n.levelCodec},e},{})}appendChangeType(e,t,n){let r=`${t};codecs=${n}`,i={label:`change-type=${r}`,execute:()=>{let i=this.tracks[e];if(i){let a=i.buffer;a!=null&&a.changeType&&(this.log(`changing ${e} sourceBuffer type to ${r}`),a.changeType(r),i.codec=n,i.container=t)}this.shiftAndExecuteNext(e)},onStart:()=>{},onComplete:()=>{},onError:t=>{this.warn(`Failed to change ${e} SourceBuffer type`,t)}};this.append(i,e,this.isPending(this.tracks[e]))}blockAudio(e){let t=e.start,n=t+e.duration*.05;if(this.fragmentTracker.getAppendedFrag(t,b.MAIN)?.gap===!0)return;let r={label:`block-audio`,execute:()=>{let e=this.tracks.video;(this.lastVideoAppendEnd>n||e!=null&&e.buffer&&q.isBuffered(e.buffer,n)||this.fragmentTracker.getAppendedFrag(n,b.MAIN)?.gap===!0)&&(this.blockedAudioAppend=null,this.shiftAndExecuteNext(`audio`))},onStart:()=>{},onComplete:()=>{},onError:e=>{this.warn(`Error executing block-audio operation`,e)}};this.blockedAudioAppend={op:r,frag:e},this.append(r,`audio`,!0)}unblockAudio(){let{blockedAudioAppend:e,operationQueue:t}=this;e&&t&&(this.blockedAudioAppend=null,t.unblockAudio(e.op))}onBufferAppending(e,t){let{tracks:n}=this,{data:r,type:i,parent:a,frag:o,part:s,chunkMeta:c,offset:l}=t,u=c.buffering[i],{sn:d,cc:f}=o,m=self.performance.now();u.start=m;let h=o.stats.buffering,y=s?s.stats.buffering:null;h.start===0&&(h.start=m),y&&y.start===0&&(y.start=m);let x=n.audio,S=!1;i===`audio`&&x?.container===`audio/mpeg`&&(S=!this.lastMpegAudioChunk||c.id===1||this.lastMpegAudioChunk.sn!==c.sn,this.lastMpegAudioChunk=c);let C=n.video,w=C?.buffer;if(w&&d!==`initSegment`){let e=s||o,t=this.blockedAudioAppend;if(i===`audio`&&a!==`main`&&!this.blockedAudioAppend&&!(C.ending||C.ended)){let t=e.start+e.duration*.05,n=w.buffered,r=this.currentOp(`video`);(!n.length&&!r||!r&&!q.isBuffered(w,t)&&this.lastVideoAppendEnd<t)&&this.blockAudio(e)}else if(i===`video`){let n=e.end;if(t){let e=t.frag.start;(n>e||n<this.lastVideoAppendEnd||q.isBuffered(w,e))&&this.unblockAudio()}this.lastVideoAppendEnd=n}}let T=(s||o).start,E={label:`append-${i}`,execute:()=>{u.executeStart=self.performance.now();let e=this.tracks[i]?.buffer;e&&(S?this.updateTimestampOffset(e,T,.1,i,d,f):l!==void 0&&p(l)&&this.updateTimestampOffset(e,l,1e-6,i,d,f)),this.appendExecutor(r,i)},onStart:()=>{},onComplete:()=>{let e=self.performance.now();u.executeEnd=u.end=e,h.first===0&&(h.first=e),y&&y.first===0&&(y.first=e);let t={};this.sourceBuffers.forEach(([e,n])=>{e&&(t[e]=q.getBuffered(n))}),this.appendErrors[i]=0,i===`audio`||i===`video`?this.appendErrors.audiovideo=0:(this.appendErrors.audio=0,this.appendErrors.video=0),this.hls.trigger(v.BUFFER_APPENDED,{type:i,frag:o,part:s,chunkMeta:c,parent:o.type,timeRanges:t})},onError:e=>{let t={type:g.MEDIA_ERROR,parent:o.type,details:_.BUFFER_APPEND_ERROR,sourceBufferName:i,frag:o,part:s,chunkMeta:c,error:e,err:e,fatal:!1},n=this.media?.error;if(e.code===DOMException.QUOTA_EXCEEDED_ERR||e.name==`QuotaExceededError`||`quota`in e)t.details=_.BUFFER_FULL_ERROR;else if(e.code===DOMException.INVALID_STATE_ERR&&this.mediaSourceOpenOrEnded&&!n)t.errorAction=hn(!0);else if(e.name===jo&&this.sourceBufferCount===0)t.errorAction=hn(!0);else{let e=++this.appendErrors[i];this.warn(`Failed ${e}/${this.hls.config.appendErrorMaxRetry} times to append segment in "${i}" sourceBuffer (${n||`no media error`})`),(e>=this.hls.config.appendErrorMaxRetry||n)&&(t.fatal=!0)}this.hls.trigger(v.ERROR,t)}};this.log(`queuing "${i}" append sn: ${d}${s?` p: `+s.index:``} of ${o.type===b.MAIN?`level`:`track`} ${o.level} cc: ${f}`),this.append(E,i,this.isPending(this.tracks[i]))}getFlushOp(e,t,n){return this.log(`queuing "${e}" remove ${t}-${n}`),{label:`remove`,execute:()=>{this.removeExecutor(e,t,n)},onStart:()=>{},onComplete:()=>{this.hls.trigger(v.BUFFER_FLUSHED,{type:e})},onError:r=>{this.warn(`Failed to remove ${t}-${n} from "${e}" SourceBuffer`,r)}}}onBufferFlushing(e,t){let{type:n,startOffset:r,endOffset:i}=t;n?this.append(this.getFlushOp(n,r,i),n):this.sourceBuffers.forEach(([e])=>{e&&this.append(this.getFlushOp(e,r,i),e)})}onFragParsed(e,t){let{frag:n,part:r}=t,i=[],a=r?r.elementaryStreams:n.elementaryStreams;a[z.AUDIOVIDEO]?i.push(`audiovideo`):(a[z.AUDIO]&&i.push(`audio`),a[z.VIDEO]&&i.push(`video`)),i.length===0&&this.warn(`Fragments must have at least one ElementaryStreamType set. type: ${n.type} level: ${n.level} sn: ${n.sn}`),this.blockBuffers(()=>{let e=self.performance.now();n.stats.buffering.end=e,r&&(r.stats.buffering.end=e);let t=r?r.stats:n.stats;this.hls.trigger(v.FRAG_BUFFERED,{frag:n,part:r,stats:t,id:n.type})},i).catch(e=>{this.warn(`Fragment buffered callback ${e}`),this.stepOperationQueue(this.sourceBufferTypes)})}onFragChanged(e,t){this.trimBuffers()}get bufferedToEnd(){return this.sourceBufferCount>0&&!this.sourceBuffers.some(([e])=>{if(e){let t=this.tracks[e];if(t)return!t.ended||t.ending}return!1})}onBufferEos(e,t){this.sourceBuffers.forEach(([e])=>{if(e){let n=this.tracks[e];(!t.type||t.type===e)&&(n.ending=!0,n.ended||(n.ended=!0,this.log(`${e} buffer reached EOS`)))}});let n=this.overrides?.endOfStream!==!1;this.sourceBufferCount>0&&!this.sourceBuffers.some(([e])=>{var t;return e&&!((t=this.tracks[e])!=null&&t.ended)})?n?(this.log(`Queueing EOS`),this.blockUntilOpen(()=>{this.tracksEnded();let{mediaSource:e}=this;if(!e||e.readyState!==`open`){e&&this.log(`Could not call mediaSource.endOfStream(). mediaSource.readyState: ${e.readyState}`);return}this.log(`Calling mediaSource.endOfStream()`),e.endOfStream(),this.hls.trigger(v.BUFFERED_TO_END,void 0)})):(this.tracksEnded(),this.hls.trigger(v.BUFFERED_TO_END,void 0)):t.type===`video`&&this.unblockAudio()}tracksEnded(){this.sourceBuffers.forEach(([e])=>{if(e!==null){let t=this.tracks[e];t&&(t.ending=!1)}})}onLevelUpdated(e,{details:t}){t.fragments.length&&(this.details=t,this.updateDuration())}updateDuration(){this.blockUntilOpen(()=>{let e=this.getDurationAndRange();e&&this.updateMediaSource(e)})}onError(e,t){if(t.details===_.BUFFER_APPEND_ERROR&&t.frag){let e=t.errorAction?.nextAutoLevel;p(e)&&e!==t.frag.level&&this.resetAppendErrors()}}resetAppendErrors(){this.appendErrors={audio:0,video:0,audiovideo:0}}trimBuffers(){let{hls:e,details:t,media:n}=this;if(!n||t===null||!this.sourceBufferCount)return;let r=e.config,i=n.currentTime,a=t.levelTargetDuration,o=t.live&&r.liveBackBufferLength!==null?r.liveBackBufferLength:r.backBufferLength;if(p(o)&&o>=0){let e=Math.max(o,a),t=Math.floor(i/a)*a-e;this.flushBackBuffer(i,a,t)}let s=r.frontBufferFlushThreshold;if(p(s)&&s>0){let e=Math.max(r.maxBufferLength,s),t=Math.max(e,a),n=Math.floor(i/a)*a+t;this.flushFrontBuffer(i,a,n)}}flushBackBuffer(e,t,n){this.sourceBuffers.forEach(([e,t])=>{if(t){let i=q.getBuffered(t);if(i.length>0&&n>i.start(0)){var r;this.hls.trigger(v.BACK_BUFFER_REACHED,{bufferEnd:n});let t=this.tracks[e];if((r=this.details)!=null&&r.live)this.hls.trigger(v.LIVE_BACK_BUFFER_REACHED,{bufferEnd:n});else if(t!=null&&t.ended){this.log(`Cannot flush ${e} back buffer while SourceBuffer is in ended state`);return}this.hls.trigger(v.BUFFER_FLUSHING,{startOffset:0,endOffset:n,type:e})}}})}flushFrontBuffer(e,t,n){this.sourceBuffers.forEach(([t,r])=>{if(r){let i=q.getBuffered(r),a=i.length;if(a<2)return;let o=i.start(a-1),s=i.end(a-1);if(n>o||e>=o&&e<=s)return;this.hls.trigger(v.BUFFER_FLUSHING,{startOffset:o,endOffset:1/0,type:t})}})}getDurationAndRange(){let{details:e,mediaSource:t}=this;if(!e||!this.media||t?.readyState!==`open`)return null;let n=e.edge;if(e.live&&this.hls.config.liveDurationInfinity){if(e.fragments.length&&t.setLiveSeekableRange){let t=Math.max(0,e.fragmentStart);return{duration:1/0,start:t,end:Math.max(t,n)}}return{duration:1/0}}let r=this.overrides?.duration;if(r)return p(r)?{duration:r}:null;let i=this.media.duration;return n>(p(t.duration)?t.duration:0)&&n>i||!p(i)?{duration:n}:null}updateMediaSource({duration:e,start:t,end:n}){let r=this.mediaSource;!this.media||!r||r.readyState!==`open`||(r.duration!==e&&(p(e)&&this.log(`Updating MediaSource duration to ${e.toFixed(3)}`),r.duration=e),t!==void 0&&n!==void 0&&(this.log(`MediaSource duration is set to ${r.duration}. Setting seekable range to ${t}-${n}.`),r.setLiveSeekableRange(t,n)))}get tracksReady(){let e=this.pendingTrackCount;return e>0&&(e>=this.bufferCodecEventsTotal||this.isPending(this.tracks.audiovideo))}checkPendingTracks(){let{bufferCodecEventsTotal:e,pendingTrackCount:t,tracks:n}=this;if(this.log(`checkPendingTracks (pending: ${t} codec events expected: ${e}) ${W(n)}`),this.tracksReady){let e=this.transferData?.tracks;e&&Object.keys(e).length?this.attachTransferred():this.createSourceBuffers()}}bufferCreated(){if(this.sourceBufferCount){let e={};this.sourceBuffers.forEach(([t,n])=>{if(t){let r=this.tracks[t];e[t]={buffer:n,container:r.container,codec:r.codec,supplemental:r.supplemental,levelCodec:r.levelCodec,id:r.id,metadata:r.metadata}}}),this.hls.trigger(v.BUFFER_CREATED,{tracks:e}),this.log(`SourceBuffers created. Running queue: ${this.operationQueue}`),this.sourceBuffers.forEach(([e])=>{this.executeNext(e)})}else{let e=Error(`could not create source buffer for media codec(s)`);this.hls.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.BUFFER_INCOMPATIBLE_CODECS_ERROR,fatal:!0,error:e,reason:e.message})}}createSourceBuffers(){let{tracks:e,sourceBuffers:t,mediaSource:n}=this;if(!n)throw Error(`createSourceBuffers called when mediaSource was null`);for(let i in e){let a=i,o=e[a];if(this.isPending(o)){let e=this.getTrackCodec(o,a),i=`${o.container};codecs=${e}`;o.codec=e,this.log(`creating sourceBuffer(${i})${this.currentOp(a)?` Queued`:``} ${W(o)}`);try{let e=n.addSourceBuffer(i),r=Io(a);t[r]=[a,e],o.buffer=e}catch(e){var r;this.error(`error while trying to add sourceBuffer: ${e.message}`),this.shiftAndExecuteNext(a),(r=this.operationQueue)==null||r.removeBlockers(),delete this.tracks[a],this.hls.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.BUFFER_ADD_CODEC_ERROR,fatal:!1,error:e,sourceBufferName:a,mimeType:i,parent:o.id});return}this.trackSourceBuffer(a,o)}}this.bufferCreated()}getTrackCodec(e,t){let n=e.supplemental,r=e.codec;n&&(t===`video`||t===`audiovideo`)&&Ze(n,`video`)&&(r=ot(r,n));let i=st(r,e.levelCodec);return i?t.slice(0,5)===`audio`?at(i,this.appendSource):i:``}trackSourceBuffer(e,t){let n=t.buffer;if(!n)return;let r=this.getTrackCodec(t,e);this.tracks[e]={buffer:n,codec:r,container:t.container,levelCodec:t.levelCodec,supplemental:t.supplemental,metadata:t.metadata,id:t.id,listeners:[]},this.removeBufferListeners(e),this.addBufferListener(e,`updatestart`,this.onSBUpdateStart),this.addBufferListener(e,`updateend`,this.onSBUpdateEnd),this.addBufferListener(e,`error`,this.onSBUpdateError),this.appendSource&&this.addBufferListener(e,`bufferedchange`,(e,t)=>{let n=t.removedRanges;n!=null&&n.length&&this.hls.trigger(v.BUFFER_FLUSHED,{type:e})})}get mediaSrc(){var e,t;return(((e=this.media)==null||(t=e.querySelector)==null?void 0:t.call(e,`source`))||this.media)?.src}onSBUpdateStart(e){let t=this.currentOp(e);t&&t.onStart()}onSBUpdateEnd(e){if(this.mediaSource?.readyState===`closed`){this.resetBuffer(e);return}let t=this.currentOp(e);t&&(t.onComplete(),this.shiftAndExecuteNext(e))}onSBUpdateError(e,t){let n=Error(`${e} SourceBuffer error. MediaSource readyState: ${this.mediaSource?.readyState}`);this.error(`${n}`,t),this.hls.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.BUFFER_APPENDING_ERROR,sourceBufferName:e,error:n,fatal:!1});let r=this.currentOp(e);r&&r.onError(n)}updateTimestampOffset(e,t,n,r,i,a){let o=t-e.timestampOffset;Math.abs(o)>=n&&(this.log(`Updating ${r} SourceBuffer timestampOffset to ${t} (sn: ${i} cc: ${a})`),e.timestampOffset=t)}removeExecutor(e,t,n){let{media:r,mediaSource:i}=this,a=this.tracks[e],o=a?.buffer;if(!r||!i||!o){this.warn(`Attempting to remove from the ${e} SourceBuffer, but it does not exist`),this.shiftAndExecuteNext(e);return}let s=p(r.duration)?r.duration:1/0,c=p(i.duration)?i.duration:1/0,l=Math.max(0,t),u=Math.min(n,s,c);u>l&&(!a.ending||a.ended)?(a.ended=!1,this.log(`Removing [${l},${u}] from the ${e} SourceBuffer`),o.remove(l,u)):this.shiftAndExecuteNext(e)}appendExecutor(e,t){let n=this.tracks[t],r=n?.buffer;if(!r)throw new Mo(`Attempting to append to the ${t} SourceBuffer, but it does not exist`);n.ending=!1,n.ended=!1,r.appendBuffer(e)}blockUntilOpen(e){if(this.isUpdating()||this.isQueued())this.blockBuffers(e).catch(e=>{this.warn(`SourceBuffer blocked callback ${e}`),this.stepOperationQueue(this.sourceBufferTypes)});else try{e()}catch(e){this.warn(`Callback run without blocking ${this.operationQueue} ${e}`)}}isUpdating(){return this.sourceBuffers.some(([e,t])=>e&&t.updating)}isQueued(){return this.sourceBuffers.some(([e])=>e&&!!this.currentOp(e))}isPending(e){return!!e&&!e.buffer}blockBuffers(e,t=this.sourceBufferTypes){if(!t.length)return this.log(`Blocking operation requested, but no SourceBuffers exist`),Promise.resolve().then(e);let{operationQueue:n}=this,r=t.map(e=>this.appendBlocker(e));return t.length>1&&this.blockedAudioAppend&&this.unblockAudio(),Promise.all(r).then(t=>{n===this.operationQueue&&(e(),this.stepOperationQueue(this.sourceBufferTypes))})}stepOperationQueue(e){e.forEach(e=>{let t=this.tracks[e]?.buffer;!t||t.updating||this.shiftAndExecuteNext(e)})}append(e,t,n){this.operationQueue&&this.operationQueue.append(e,t,n)}appendBlocker(e){if(this.operationQueue)return this.operationQueue.appendBlocker(e)}currentOp(e){return this.operationQueue?this.operationQueue.current(e):null}executeNext(e){e&&this.operationQueue&&this.operationQueue.executeNext(e)}shiftAndExecuteNext(e){this.operationQueue&&this.operationQueue.shiftAndExecuteNext(e)}get pendingTrackCount(){return Object.keys(this.tracks).reduce((e,t)=>e+ +!!this.isPending(this.tracks[t]),0)}get sourceBufferCount(){return this.sourceBuffers.reduce((e,[t])=>e+ +!!t,0)}get sourceBufferTypes(){return this.sourceBuffers.map(([e])=>e).filter(e=>!!e)}addBufferListener(e,t,n){let r=this.tracks[e];if(!r)return;let i=r.buffer;if(!i)return;let a=n.bind(this,e);r.listeners.push({event:t,listener:a}),i.addEventListener(t,a)}removeBufferListeners(e){let t=this.tracks[e];if(!t)return;let n=t.buffer;n&&(t.listeners.forEach(e=>{n.removeEventListener(e.event,e.listener)}),t.listeners.length=0)}};function Po(e){let t=e.querySelectorAll(`source`);[].slice.call(t).forEach(t=>{e.removeChild(t)})}function Fo(e,t){let n=self.document.createElement(`source`);n.type=`video/mp4`,n.src=t,e.appendChild(n)}function Io(e){return+(e===`audio`)}var Lo=class e{constructor(e){this.hls=void 0,this.autoLevelCapping=void 0,this.firstLevel=void 0,this.media=void 0,this.restrictedLevels=void 0,this.timer=void 0,this.clientRect=void 0,this.streamController=void 0,this.hls=e,this.autoLevelCapping=1/0,this.firstLevel=-1,this.media=null,this.restrictedLevels=[],this.timer=void 0,this.clientRect=null,this.registerListeners()}setStreamController(e){this.streamController=e}destroy(){this.hls&&this.unregisterListener(),this.timer&&this.stopCapping(),this.media=null,this.clientRect=null,this.hls=this.streamController=null}registerListeners(){let{hls:e}=this;e.on(v.FPS_DROP_LEVEL_CAPPING,this.onFpsDropLevelCapping,this),e.on(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(v.MANIFEST_PARSED,this.onManifestParsed,this),e.on(v.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(v.BUFFER_CODECS,this.onBufferCodecs,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this)}unregisterListener(){let{hls:e}=this;e.off(v.FPS_DROP_LEVEL_CAPPING,this.onFpsDropLevelCapping,this),e.off(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(v.MANIFEST_PARSED,this.onManifestParsed,this),e.off(v.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(v.BUFFER_CODECS,this.onBufferCodecs,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this)}onFpsDropLevelCapping(e,t){let n=this.hls.levels[t.droppedLevel];this.isLevelAllowed(n)&&this.restrictedLevels.push({bitrate:n.bitrate,height:n.height,width:n.width})}onMediaAttaching(e,t){this.media=t.media instanceof HTMLVideoElement?t.media:null,this.clientRect=null,this.timer&&this.hls.levels.length&&this.detectPlayerSize()}onManifestParsed(e,t){let n=this.hls;this.restrictedLevels=[],this.firstLevel=t.firstLevel,n.config.capLevelToPlayerSize&&t.video&&this.startCapping()}onLevelsUpdated(e,t){this.timer&&p(this.autoLevelCapping)&&this.detectPlayerSize()}onBufferCodecs(e,t){this.hls.config.capLevelToPlayerSize&&t.video&&this.startCapping()}onMediaDetaching(){this.stopCapping(),this.media=null}detectPlayerSize(){if(this.media){if(this.mediaHeight<=0||this.mediaWidth<=0){this.clientRect=null;return}let e=this.hls.levels;if(e.length){let t=this.hls,n=this.getMaxLevel(e.length-1);n!==this.autoLevelCapping&&t.logger.log(`Setting autoLevelCapping to ${n}: ${e[n].height}p@${e[n].bitrate} for media ${this.mediaWidth}x${this.mediaHeight}`),t.autoLevelCapping=n,t.autoLevelEnabled&&t.autoLevelCapping>this.autoLevelCapping&&this.streamController&&this.streamController.nextLevelSwitch(),this.autoLevelCapping=t.autoLevelCapping}}}getMaxLevel(t){let n=this.hls.levels;if(!n.length)return-1;let r=n.filter((e,n)=>this.isLevelAllowed(e)&&n<=t);return this.clientRect=null,e.getMaxLevelByMediaSize(r,this.mediaWidth,this.mediaHeight)}startCapping(){this.timer||(this.autoLevelCapping=1/0,self.clearInterval(this.timer),this.timer=self.setInterval(this.detectPlayerSize.bind(this),1e3),this.detectPlayerSize())}stopCapping(){this.restrictedLevels=[],this.firstLevel=-1,this.autoLevelCapping=1/0,this.timer&&=(self.clearInterval(this.timer),void 0)}getDimensions(){if(this.clientRect)return this.clientRect;let e=this.media,t={width:0,height:0};if(e){let n=e.getBoundingClientRect();t.width=n.width,t.height=n.height,!t.width&&!t.height&&(t.width=n.right-n.left||e.width||0,t.height=n.bottom-n.top||e.height||0)}return this.clientRect=t,t}get mediaWidth(){return this.getDimensions().width*this.contentScaleFactor}get mediaHeight(){return this.getDimensions().height*this.contentScaleFactor}get contentScaleFactor(){let e=1;if(!this.hls.config.ignoreDevicePixelRatio)try{e=self.devicePixelRatio}catch{}return Math.min(e,this.hls.config.maxDevicePixelRatio)}isLevelAllowed(e){return!this.restrictedLevels.some(t=>e.bitrate===t.bitrate&&e.width===t.width&&e.height===t.height)}static getMaxLevelByMediaSize(e,t,n){if(!(e!=null&&e.length))return-1;let r=(e,t)=>t?e.width!==t.width||e.height!==t.height:!0,i=e.length-1,a=Math.max(t,n);for(let t=0;t<e.length;t+=1){let n=e[t];if((n.width>=a||n.height>=a)&&r(n,e[t+1])){i=t;break}}return i}},Ro={MANIFEST:`m`,AUDIO:`a`,VIDEO:`v`,MUXED:`av`,INIT:`i`,CAPTION:`c`,TIMED_TEXT:`tt`,KEY:`k`,OTHER:`o`},zo={HLS:`h`},Bo=class e{constructor(t,n){Array.isArray(t)&&(t=t.map(t=>t instanceof e?t:new e(t))),this.value=t,this.params=n}},Vo=`Dict`;function Ho(e){return Array.isArray(e)?JSON.stringify(e):e instanceof Map?`Map{}`:e instanceof Set?`Set{}`:typeof e==`object`?JSON.stringify(e):String(e)}function Uo(e,t,n,r){return Error(`failed to ${e} "${Ho(t)}" as ${n}`,{cause:r})}function Wo(e,t,n){return Uo(`serialize`,e,t,n)}var Go=class{constructor(e){this.description=e}},Ko=`Bare Item`,qo=`Boolean`;function Jo(e){if(typeof e!=`boolean`)throw Wo(e,qo);return e?`?1`:`?0`}function Yo(e){return btoa(String.fromCharCode(...e))}var Xo=`Byte Sequence`;function Zo(e){if(ArrayBuffer.isView(e)===!1)throw Wo(e,Xo);return`:${Yo(e)}:`}var Qo=`Integer`;function $o(e){return e<-999999999999999||999999999999999<e}function es(e){if($o(e))throw Wo(e,Qo);return e.toString()}function ts(e){return`@${es(e.getTime()/1e3)}`}function ns(e,t){if(e<0)return-ns(-e,t);let n=10**t;if(Math.abs(e*n%1-.5)<2**-52){let t=Math.floor(e*n);return(t%2==0?t:t+1)/n}else return Math.round(e*n)/n}var rs=`Decimal`;function is(e){let t=ns(e,3);if(Math.floor(Math.abs(t)).toString().length>12)throw Wo(e,rs);let n=t.toString();return n.includes(`.`)?n:`${n}.0`}var as=`String`,os=/[\x00-\x1f\x7f]+/;function ss(e){if(os.test(e))throw Wo(e,as);return`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function cs(e){return e.description||e.toString().slice(7,-1)}var ls=`Token`;function us(e){let t=cs(e);if(/^([a-zA-Z*])([!#$%&'*+\-.^_`|~\w:/]*)$/.test(t)===!1)throw Wo(t,ls);return t}function ds(e){switch(typeof e){case`number`:if(!p(e))throw Wo(e,Ko);return Number.isInteger(e)?es(e):is(e);case`string`:return ss(e);case`symbol`:return us(e);case`boolean`:return Jo(e);case`object`:if(e instanceof Date)return ts(e);if(e instanceof Uint8Array)return Zo(e);if(e instanceof Go)return us(e);default:throw Wo(e,Ko)}}var fs=`Key`;function ps(e){if(/^[a-z*][a-z0-9\-_.*]*$/.test(e)===!1)throw Wo(e,fs);return e}function ms(e){return e==null?``:Object.entries(e).map(([e,t])=>t===!0?`;${ps(e)}`:`;${ps(e)}=${ds(t)}`).join(``)}function hs(e){return e instanceof Bo?`${ds(e.value)}${ms(e.params)}`:ds(e)}function gs(e){return`(${e.value.map(hs).join(` `)})${ms(e.params)}`}function _s(e,t={whitespace:!0}){if(typeof e!=`object`||!e)throw Wo(e,Vo);let n=e instanceof Map?e.entries():Object.entries(e),r=t?.whitespace?` `:``;return Array.from(n).map(([e,t])=>{t instanceof Bo||(t=new Bo(t));let n=ps(e);return t.value===!0?n+=ms(t.params):(n+=`=`,Array.isArray(t.value)?n+=gs(t):n+=hs(t)),n}).join(`,${r}`)}function vs(e,t){return _s(e,t)}var ys=`CMCD-Object`,Q=`CMCD-Request`,bs=`CMCD-Session`,xs=`CMCD-Status`,Ss={br:ys,ab:ys,d:ys,ot:ys,tb:ys,tpb:ys,lb:ys,tab:ys,lab:ys,url:ys,pb:Q,bl:Q,tbl:Q,dl:Q,ltc:Q,mtp:Q,nor:Q,nrr:Q,rc:Q,sn:Q,sta:Q,su:Q,ttfb:Q,ttfbb:Q,ttlb:Q,cmsdd:Q,cmsds:Q,smrt:Q,df:Q,cs:Q,ts:Q,cid:bs,pr:bs,sf:bs,sid:bs,st:bs,v:bs,msd:bs,bs:xs,bsd:xs,cdn:xs,rtp:xs,bg:xs,pt:xs,ec:xs,e:xs},Cs={REQUEST:Q};function ws(e){return Object.keys(e).reduce((t,n)=>{var r;return(r=e[n])==null||r.forEach(e=>t[e]=n),t},{})}function Ts(e,t){let n={};if(!e)return n;let r=Object.keys(e),i=t?ws(t):{};return r.reduce((t,n)=>{let r=Ss[n]||i[n]||Cs.REQUEST,a=t[r]??(t[r]={});return a[n]=e[n],t},n)}function Es(e){return[`ot`,`sf`,`st`,`e`,`sta`].includes(e)}function Ds(e){return typeof e==`number`?p(e):e!=null&&e!==``&&e!==!1}var Os=`event`;function ks(e,t){let n=new URL(e),r=new URL(t);if(n.origin!==r.origin)return e;let i=n.pathname.split(`/`).slice(1),a=r.pathname.split(`/`).slice(1,-1);for(;i[0]===a[0];)i.shift(),a.shift();for(;a.length;)a.shift(),i.unshift(`..`);return i.join(`/`)+n.search+n.hash}var As=e=>Math.round(e),js=(e,t)=>Array.isArray(e)?e.map(e=>js(e,t)):e instanceof Bo&&typeof e.value==`string`?new Bo(js(e.value,t),e.params):(t.baseUrl&&(e=ks(e,t.baseUrl)),t.version===1?encodeURIComponent(e):e),Ms=e=>As(e/100)*100,Ns={br:As,d:As,bl:Ms,dl:Ms,mtp:Ms,nor:(e,t)=>{let n=e;return t.version>=2&&(e instanceof Bo&&typeof e.value==`string`?n=new Bo([e]):typeof e==`string`&&(n=[e])),js(n,t)},rtp:Ms,tb:As},Ps=`request`,Fs=`response`,Is=`ab.bg.bl.br.bs.bsd.cdn.cid.cs.df.ec.lab.lb.ltc.msd.mtp.pb.pr.pt.sf.sid.sn.st.sta.tab.tb.tbl.tpb.ts.v`.split(`.`),Ls=[`e`],Rs=/^[a-zA-Z0-9-.]+-[a-zA-Z0-9-.]+$/;function zs(e){return Rs.test(e)}function Bs(e){return Is.includes(e)||Ls.includes(e)||zs(e)}var Vs=[`d`,`dl`,`nor`,`ot`,`rtp`,`su`];function Hs(e){return Is.includes(e)||Vs.includes(e)||zs(e)}var Us=[`cmsdd`,`cmsds`,`rc`,`smrt`,`ttfb`,`ttfbb`,`ttlb`,`url`];function Ws(e){return Is.includes(e)||Vs.includes(e)||Us.includes(e)||zs(e)}var Gs=[`bl`,`br`,`bs`,`cid`,`d`,`dl`,`mtp`,`nor`,`nrr`,`ot`,`pr`,`rtp`,`sf`,`sid`,`st`,`su`,`tb`,`v`];function Ks(e){return Gs.includes(e)||zs(e)}var qs={[Fs]:Ws,[Os]:Bs,[Ps]:Hs};function Js(e,t={}){let n={};if(typeof e!=`object`||!e)return n;let r=t.version||e.v||1,i=t.reportingMode||Ps,a=r===1?Ks:qs[i],o=Object.keys(e).filter(a),s=t.filter;typeof s==`function`&&(o=o.filter(s));let c=i===Fs||i===Os;c&&!o.includes(`ts`)&&o.push(`ts`),r>1&&!o.includes(`v`)&&o.push(`v`);let l=w({},Ns,t.formatters),u={version:r,reportingMode:i,baseUrl:t.baseUrl};return o.sort().forEach(t=>{let i=e[t],a=l[t];if(typeof a==`function`&&(i=a(i,u)),t===`v`){if(r===1)return;i=r}t==`pr`&&i===1||(c&&t===`ts`&&!p(i)&&(i=Date.now()),Ds(i)&&(Es(t)&&typeof i==`string`&&(i=new Go(i)),n[t]=i))}),n}function Ys(e,t={}){let n={};if(!e)return n;let r=Ts(Js(e,t),t?.customHeaderMap);return Object.entries(r).reduce((e,[t,n])=>{let r=vs(n,{whitespace:!1});return r&&(e[t]=r),e},n)}function Xs(e,t,n){return w(e,Ys(t,n))}var Zs=`CMCD`;function Qs(e,t={}){return e?vs(Js(e,t),{whitespace:!1}):``}function $s(e,t={}){if(!e)return``;let n=Qs(e,t);return encodeURIComponent(n)}function ec(e,t={}){return e?`${Zs}=${$s(e,t)}`:``}var tc=/CMCD=[^&#]+/;function nc(e,t,n){let r=ec(t,n);return r?tc.test(e)?e.replace(tc,r):`${e}${e.includes(`?`)?`&`:`?`}${r}`:e}var rc=class{constructor(e){this.hls=void 0,this.config=void 0,this.media=void 0,this.sid=void 0,this.cid=void 0,this.useHeaders=!1,this.includeKeys=void 0,this.initialized=!1,this.starved=!1,this.buffering=!0,this.audioBuffer=void 0,this.videoBuffer=void 0,this.onWaiting=()=>{this.initialized&&(this.starved=!0),this.buffering=!0},this.onPlaying=()=>{this.initialized||=!0,this.buffering=!1},this.applyPlaylistData=e=>{try{this.apply(e,{ot:Ro.MANIFEST,su:!this.initialized})}catch(e){this.hls.logger.warn(`Could not generate manifest CMCD data.`,e)}},this.applyFragmentData=e=>{try{let{frag:t,part:n}=e,r=this.hls.levels[t.level],i=this.getObjectType(t),a={d:(n||t).duration*1e3,ot:i};(i===Ro.VIDEO||i===Ro.AUDIO||i==Ro.MUXED)&&(a.br=r.bitrate/1e3,a.tb=this.getTopBandwidth(i)/1e3,a.bl=this.getBufferLength(i));let o=n?this.getNextPart(n):this.getNextFrag(t);o!=null&&o.url&&o.url!==t.url&&(a.nor=o.url),this.apply(e,a)}catch(e){this.hls.logger.warn(`Could not generate segment CMCD data.`,e)}},this.hls=e;let t=this.config=e.config,{cmcd:n}=t;n!=null&&(t.pLoader=this.createPlaylistLoader(),t.fLoader=this.createFragmentLoader(),this.sid=n.sessionId||e.sessionId,this.cid=n.contentId,this.useHeaders=n.useHeaders===!0,this.includeKeys=n.includeKeys,this.registerListeners())}registerListeners(){let e=this.hls;e.on(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(v.MEDIA_DETACHED,this.onMediaDetached,this),e.on(v.BUFFER_CREATED,this.onBufferCreated,this)}unregisterListeners(){let e=this.hls;e.off(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(v.MEDIA_DETACHED,this.onMediaDetached,this),e.off(v.BUFFER_CREATED,this.onBufferCreated,this)}destroy(){this.unregisterListeners(),this.onMediaDetached(),this.hls=this.config=this.audioBuffer=this.videoBuffer=null,this.onWaiting=this.onPlaying=this.media=null}onMediaAttached(e,t){this.media=t.media,this.media.addEventListener(`waiting`,this.onWaiting),this.media.addEventListener(`playing`,this.onPlaying)}onMediaDetached(){this.media&&=(this.media.removeEventListener(`waiting`,this.onWaiting),this.media.removeEventListener(`playing`,this.onPlaying),null)}onBufferCreated(e,t){this.audioBuffer=t.tracks.audio?.buffer,this.videoBuffer=t.tracks.video?.buffer}createData(){return{v:1,sf:zo.HLS,sid:this.sid,cid:this.cid,pr:this.media?.playbackRate,mtp:this.hls.bandwidthEstimate/1e3}}apply(e,t={}){w(t,this.createData());let n=t.ot===Ro.INIT||t.ot===Ro.VIDEO||t.ot===Ro.MUXED;this.starved&&n&&(t.bs=!0,t.su=!0,this.starved=!1),t.su??=this.buffering;let{includeKeys:r}=this;r&&(t=Object.keys(t).reduce((e,n)=>(r.includes(n)&&(e[n]=t[n]),e),{}));let i={baseUrl:e.url};this.useHeaders?(e.headers||={},Xs(e.headers,t,i)):e.url=nc(e.url,t,i)}getNextFrag(e){let t=this.hls.levels[e.level]?.details;if(t){let n=e.sn-t.startSN;return t.fragments[n+1]}}getNextPart(e){var t;let{index:n,fragment:r}=e,i=(t=this.hls.levels[r.level])==null||(t=t.details)==null?void 0:t.partList;if(i){let{sn:e}=r;for(let t=i.length-1;t>=0;t--){let r=i[t];if(r.index===n&&r.fragment.sn===e)return i[t+1]}}}getObjectType(e){let{type:t}=e;if(t===`subtitle`)return Ro.TIMED_TEXT;if(e.sn===`initSegment`)return Ro.INIT;if(t===`audio`)return Ro.AUDIO;if(t===`main`)return this.hls.audioTracks.length?Ro.VIDEO:Ro.MUXED}getTopBandwidth(e){let t=0,n,r=this.hls;if(e===Ro.AUDIO)n=r.audioTracks;else{let e=r.maxAutoLevel,t=e>-1?e+1:r.levels.length;n=r.levels.slice(0,t)}return n.forEach(e=>{e.bitrate>t&&(t=e.bitrate)}),t>0?t:NaN}getBufferLength(e){let t=this.media,n=e===Ro.AUDIO?this.audioBuffer:this.videoBuffer;return!n||!t?NaN:q.bufferInfo(n,t.currentTime,this.config.maxBufferHole).len*1e3}createPlaylistLoader(){let{pLoader:e}=this.config,t=this.applyPlaylistData,n=e||this.config.loader;return class{constructor(e){this.loader=void 0,this.loader=new n(e)}get stats(){return this.loader.stats}get context(){return this.loader.context}destroy(){this.loader.destroy()}abort(){this.loader.abort()}load(e,n,r){t(e),this.loader.load(e,n,r)}}}createFragmentLoader(){let{fLoader:e}=this.config,t=this.applyFragmentData,n=e||this.config.loader;return class{constructor(e){this.loader=void 0,this.loader=new n(e)}get stats(){return this.loader.stats}get context(){return this.loader.context}destroy(){this.loader.destroy()}abort(){this.loader.abort()}load(e,n,r){t(e),this.loader.load(e,n,r)}}}},ic=3e5,ac=class extends k{constructor(e){super(`content-steering`,e.logger),this.hls=void 0,this.loader=null,this.uri=null,this.pathwayId=`.`,this._pathwayPriority=null,this.timeToLoad=300,this.reloadTimer=-1,this.updated=0,this.started=!1,this.enabled=!0,this.levels=null,this.audioTracks=null,this.subtitleTracks=null,this.penalizedPathways={},this.hls=e,this.registerListeners()}registerListeners(){let e=this.hls;e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(v.MANIFEST_PARSED,this.onManifestParsed,this),e.on(v.ERROR,this.onError,this)}unregisterListeners(){let e=this.hls;e&&(e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(v.MANIFEST_PARSED,this.onManifestParsed,this),e.off(v.ERROR,this.onError,this))}pathways(){return(this.levels||[]).reduce((e,t)=>(e.indexOf(t.pathwayId)===-1&&e.push(t.pathwayId),e),[])}get pathwayPriority(){return this._pathwayPriority}set pathwayPriority(e){this.updatePathwayPriority(e)}startLoad(){if(this.started=!0,this.clearTimeout(),this.enabled&&this.uri){if(this.updated){let e=this.timeToLoad*1e3-(performance.now()-this.updated);if(e>0){this.scheduleRefresh(this.uri,e);return}}this.loadSteeringManifest(this.uri)}}stopLoad(){this.started=!1,this.loader&&=(this.loader.destroy(),null),this.clearTimeout()}clearTimeout(){this.reloadTimer!==-1&&(self.clearTimeout(this.reloadTimer),this.reloadTimer=-1)}destroy(){this.unregisterListeners(),this.stopLoad(),this.hls=null,this.levels=this.audioTracks=this.subtitleTracks=null}removeLevel(e){let t=this.levels;t&&(this.levels=t.filter(t=>t!==e))}onManifestLoading(){this.stopLoad(),this.enabled=!0,this.timeToLoad=300,this.updated=0,this.uri=null,this.pathwayId=`.`,this.levels=this.audioTracks=this.subtitleTracks=null}onManifestLoaded(e,t){let{contentSteering:n}=t;n!==null&&(this.pathwayId=n.pathwayId,this.uri=n.uri,this.started&&this.startLoad())}onManifestParsed(e,t){this.audioTracks=t.audioTracks,this.subtitleTracks=t.subtitleTracks}onError(e,t){let{errorAction:n}=t;if(n?.action===G.SendAlternateToPenaltyBox&&n.flags===pn.MoveAllAlternatesMatchingHost){let e=this.levels,r=this._pathwayPriority,i=this.pathwayId;if(t.context){let{groupId:n,pathwayId:r,type:a}=t.context;n&&e?i=this.getPathwayForGroupId(n,a,i):r&&(i=r)}i in this.penalizedPathways||(this.penalizedPathways[i]=performance.now()),!r&&e&&(r=this.pathways()),r&&r.length>1&&(this.updatePathwayPriority(r),n.resolved=this.pathwayId!==i),t.details===_.BUFFER_APPEND_ERROR&&!t.fatal?n.resolved=!0:n.resolved||this.warn(`Could not resolve ${t.details} ("${t.error.message}") with content-steering for Pathway: ${i} levels: ${e&&e.length} priorities: ${W(r)} penalized: ${W(this.penalizedPathways)}`)}}filterParsedLevels(e){this.levels=e;let t=this.getLevelsForPathway(this.pathwayId);if(t.length===0){let n=e[0].pathwayId;this.log(`No levels found in Pathway ${this.pathwayId}. Setting initial Pathway to "${n}"`),t=this.getLevelsForPathway(n),this.pathwayId=n}return t.length!==e.length&&this.log(`Found ${t.length}/${e.length} levels in Pathway "${this.pathwayId}"`),t}getLevelsForPathway(e){return this.levels===null?[]:this.levels.filter(t=>e===t.pathwayId)}updatePathwayPriority(e){this._pathwayPriority=e;let t,n=this.penalizedPathways,r=performance.now();Object.keys(n).forEach(e=>{r-n[e]>ic&&delete n[e]});for(let r=0;r<e.length;r++){let i=e[r];if(i in n)continue;if(i===this.pathwayId)return;let a=this.hls.nextLoadLevel,o=this.hls.levels[a];if(t=this.getLevelsForPathway(i),t.length>0){this.log(`Setting Pathway to "${i}"`),this.pathwayId=i,Qr(t),this.hls.trigger(v.LEVELS_UPDATED,{levels:t});let e=this.hls.levels[a];o&&e&&this.levels&&(e.attrs[`STABLE-VARIANT-ID`]!==o.attrs[`STABLE-VARIANT-ID`]&&e.bitrate!==o.bitrate&&this.log(`Unstable Pathways change from bitrate ${o.bitrate} to ${e.bitrate}`),this.hls.nextLoadLevel=a);break}}}getPathwayForGroupId(e,t,n){let r=this.getLevelsForPathway(n).concat(this.levels||[]);for(let n=0;n<r.length;n++)if(t===y.AUDIO_TRACK&&r[n].hasAudioGroup(e)||t===y.SUBTITLE_TRACK&&r[n].hasSubtitleGroup(e))return r[n].pathwayId;return n}clonePathways(e){let t=this.levels;if(!t)return;let n={},r={};e.forEach(e=>{let{ID:i,"BASE-ID":a,"URI-REPLACEMENT":o}=e;if(t.some(e=>e.pathwayId===i))return;let s=this.getLevelsForPathway(a).map(e=>{let t=new J(e.attrs);t[`PATHWAY-ID`]=i;let a=t.AUDIO&&`${t.AUDIO}_clone_${i}`,s=t.SUBTITLES&&`${t.SUBTITLES}_clone_${i}`;a&&(n[t.AUDIO]=a,t.AUDIO=a),s&&(r[t.SUBTITLES]=s,t.SUBTITLES=s);let c=sc(e.uri,t[`STABLE-VARIANT-ID`],`PER-VARIANT-URIS`,o),l=new jt({attrs:t,audioCodec:e.audioCodec,bitrate:e.bitrate,height:e.height,name:e.name,url:c,videoCodec:e.videoCodec,width:e.width});if(e.audioGroups)for(let t=1;t<e.audioGroups.length;t++)l.addGroupId(`audio`,`${e.audioGroups[t]}_clone_${i}`);if(e.subtitleGroups)for(let t=1;t<e.subtitleGroups.length;t++)l.addGroupId(`text`,`${e.subtitleGroups[t]}_clone_${i}`);return l});t.push(...s),oc(this.audioTracks,n,o,i),oc(this.subtitleTracks,r,o,i)})}loadSteeringManifest(e){let t=this.hls.config,n=t.loader;this.loader&&this.loader.destroy(),this.loader=new n(t);let r;try{r=new self.URL(e)}catch{this.enabled=!1,this.log(`Failed to parse Steering Manifest URI: ${e}`);return}if(r.protocol!==`data:`){let e=(this.hls.bandwidthEstimate||t.abrEwmaDefaultEstimate)|0;r.searchParams.set(`_HLS_pathway`,this.pathwayId),r.searchParams.set(`_HLS_throughput`,``+e)}let i={responseType:`json`,url:r.href},a=t.steeringManifestLoadPolicy.default,o=a.errorRetry||a.timeoutRetry||{},s={loadPolicy:a,timeout:a.maxLoadTimeMs,maxRetry:o.maxNumRetry||0,retryDelay:o.retryDelayMs||0,maxRetryDelay:o.maxRetryDelayMs||0};this.log(`Requesting steering manifest: ${r}`),this.loader.load(i,s,{onSuccess:(e,t,n,i)=>{this.log(`Loaded steering manifest: "${r}"`);let a=e.data;if(a?.VERSION!==1){this.log(`Steering VERSION ${a.VERSION} not supported!`);return}this.updated=performance.now(),this.timeToLoad=a.TTL;let{"RELOAD-URI":o,"PATHWAY-CLONES":s,"PATHWAY-PRIORITY":c}=a;if(o)try{this.uri=new self.URL(o,r).href}catch{this.enabled=!1,this.log(`Failed to parse Steering Manifest RELOAD-URI: ${o}`);return}this.scheduleRefresh(this.uri||n.url),s&&this.clonePathways(s);let l={steeringManifest:a,url:r.toString()};this.hls.trigger(v.STEERING_MANIFEST_LOADED,l),c&&this.updatePathwayPriority(c)},onError:(e,t,n,r)=>{if(this.log(`Error loading steering manifest: ${e.code} ${e.text} (${t.url})`),this.stopLoad(),e.code===410){this.enabled=!1,this.log(`Steering manifest ${t.url} no longer available`);return}let i=this.timeToLoad*1e3;if(e.code===429){let e=this.loader;if(typeof e?.getResponseHeader==`function`){let t=e.getResponseHeader(`Retry-After`);t&&(i=parseFloat(t)*1e3)}this.log(`Steering manifest ${t.url} rate limited`);return}this.scheduleRefresh(this.uri||t.url,i)},onTimeout:(e,t,n)=>{this.log(`Timeout loading steering manifest (${t.url})`),this.scheduleRefresh(this.uri||t.url)}})}scheduleRefresh(e,t=this.timeToLoad*1e3){this.clearTimeout(),this.reloadTimer=self.setTimeout(()=>{let t=this.hls?.media;if(t&&!t.ended){this.loadSteeringManifest(e);return}this.scheduleRefresh(e,this.timeToLoad*1e3)},t)}};function oc(e,t,n,r){e&&Object.keys(t).forEach(i=>{let a=e.filter(e=>e.groupId===i).map(e=>{let a=w({},e);return a.details=void 0,a.attrs=new J(a.attrs),a.url=a.attrs.URI=sc(e.url,e.attrs[`STABLE-RENDITION-ID`],`PER-RENDITION-URIS`,n),a.groupId=a.attrs[`GROUP-ID`]=t[i],a.attrs[`PATHWAY-ID`]=r,a});e.push(...a)})}function sc(e,t,n,r){let{HOST:i,PARAMS:a,[n]:o}=r,s;t&&(s=o?.[t],s&&(e=s));let c=new self.URL(e);return i&&!s&&(c.host=i),a&&Object.keys(a).sort().forEach(e=>{e&&c.searchParams.set(e,a[e])}),c.href}var cc=class e extends k{constructor(t){super(`eme`,t.logger),this.hls=void 0,this.config=void 0,this.media=null,this.mediaResolved=void 0,this.keyFormatPromise=null,this.keySystemAccessPromises={},this._requestLicenseFailureCount=0,this.mediaKeySessions=[],this.keyIdToKeySessionPromise={},this.mediaKeys=null,this.setMediaKeysQueue=e.CDMCleanupPromise?[e.CDMCleanupPromise]:[],this.bannedKeyIds={},this.onMediaEncrypted=e=>{let{initDataType:t,initData:n}=e,r=`"${e.type}" event: init data type: "${t}"`;if(this.debug(r),n!==null){if(!this.keyFormatPromise){let e=Object.keys(this.keySystemAccessPromises);e.length||(e=ur(this.config));let t=e.map(lr).filter(e=>!!e);this.keyFormatPromise=this.getKeyFormatPromise(t)}this.keyFormatPromise.then(i=>{let a=cr(i);if(t!==`sinf`||a!==Y.FAIRPLAY){this.log(`Ignoring "${e.type}" event with init data type: "${t}" for selected key-system ${a}`);return}let o;try{let e=V(new Uint8Array(n)),t=Pe(tr(JSON.parse(e).sinf));if(!t)throw Error(`'schm' box missing or not cbcs/cenc with schi > tenc`);o=new Uint8Array(t.subarray(8,24))}catch(e){this.warn(`${r} Failed to parse sinf: ${e}`);return}let s=R(o),{keyIdToKeySessionPromise:c,mediaKeySessions:l}=this,u=c[s];for(let e=0;e<l.length;e++){let r=l[e],i=r.decryptdata;if(!i.keyId)continue;let a=R(i.keyId);if(Zn(o,i.keyId)||i.uri.replace(/-/g,``).indexOf(s)!==-1){if(u=c[a],!u)continue;if(i.pssh)break;delete c[a],i.pssh=new Uint8Array(n),i.keyId=o,u=c[s]=u.then(()=>this.generateRequestWithPreferredKeySession(r,t,n,`encrypted-event-key-match`)),u.catch(e=>this.handleError(e));break}}u||this.handleError(Error(`Key ID ${s} not encountered in playlist. Key-system sessions ${l.length}.`))}).catch(e=>this.handleError(e))}},this.onWaitingForKey=e=>{this.log(`"${e.type}" event`)},this.hls=t,this.config=t.config,this.registerListeners()}destroy(){this.onDestroying(),this.onMediaDetached();let e=this.config;e.requestMediaKeySystemAccessFunc=null,e.licenseXhrSetup=e.licenseResponseCallback=void 0,e.drmSystems=e.drmSystemOptions={},this.hls=this.config=this.keyIdToKeySessionPromise=null,this.onMediaEncrypted=this.onWaitingForKey=null}registerListeners(){this.hls.on(v.MEDIA_ATTACHED,this.onMediaAttached,this),this.hls.on(v.MEDIA_DETACHED,this.onMediaDetached,this),this.hls.on(v.MANIFEST_LOADING,this.onManifestLoading,this),this.hls.on(v.MANIFEST_LOADED,this.onManifestLoaded,this),this.hls.on(v.DESTROYING,this.onDestroying,this)}unregisterListeners(){this.hls.off(v.MEDIA_ATTACHED,this.onMediaAttached,this),this.hls.off(v.MEDIA_DETACHED,this.onMediaDetached,this),this.hls.off(v.MANIFEST_LOADING,this.onManifestLoading,this),this.hls.off(v.MANIFEST_LOADED,this.onManifestLoaded,this),this.hls.off(v.DESTROYING,this.onDestroying,this)}getLicenseServerUrl(e){let{drmSystems:t,widevineLicenseUrl:n}=this.config,r=t?.[e];if(r)return r.licenseUrl;if(e===Y.WIDEVINE&&n)return n}getLicenseServerUrlOrThrow(e){let t=this.getLicenseServerUrl(e);if(t===void 0)throw Error(`no license server URL configured for key-system "${e}"`);return t}getServerCertificateUrl(e){let{drmSystems:t}=this.config,n=t?.[e];if(n)return n.serverCertificateUrl;this.log(`No Server Certificate in config.drmSystems["${e}"]`)}attemptKeySystemAccess(e){let t=this.hls.levels,n=(e,t,n)=>!!e&&n.indexOf(e)===t,r=t.map(e=>e.audioCodec).filter(n),i=t.map(e=>e.videoCodec).filter(n);return r.length+i.length===0&&i.push(`avc1.42e01e`),new Promise((t,n)=>{let a=e=>{let o=e.shift();this.getMediaKeysPromise(o,r,i).then(e=>t({keySystem:o,mediaKeys:e})).catch(t=>{e.length?a(e):t instanceof dc?n(t):n(new dc({type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_NO_ACCESS,error:t,fatal:!0},t.message))})};a(e)})}requestMediaKeySystemAccess(e,t){let{requestMediaKeySystemAccessFunc:n}=this.config;if(typeof n!=`function`){let e=`Configured requestMediaKeySystemAccess is not a function ${n}`;return dr===null&&self.location.protocol===`http:`&&(e=`navigator.requestMediaKeySystemAccess is not available over insecure protocol ${location.protocol}`),Promise.reject(Error(e))}return n(e,t)}getMediaKeysPromise(e,t,n){let r=fr(e,t,n,this.config.drmSystemOptions||{}),i=this.keySystemAccessPromises[e],a=i?.keySystemAccess;if(!a){this.log(`Requesting encrypted media "${e}" key-system access with config: ${W(r)}`),a=this.requestMediaKeySystemAccess(e,r);let t=i=this.keySystemAccessPromises[e]={keySystemAccess:a};return a.catch(t=>{this.log(`Failed to obtain access to key-system "${e}": ${t}`)}),a.then(n=>{this.log(`Access for key-system "${n.keySystem}" obtained`);let r=this.fetchServerCertificate(e);this.log(`Create media-keys for "${e}"`);let i=t.mediaKeys=n.createMediaKeys().then(n=>(this.log(`Media-keys created for "${e}"`),t.hasMediaKeys=!0,r.then(t=>t?this.setMediaKeysServerCertificate(n,e,t):n)));return i.catch(t=>{this.error(`Failed to create media-keys for "${e}"}: ${t}`)}),i})}return a.then(()=>i.mediaKeys)}createMediaKeySessionContext({decryptdata:e,keySystem:t,mediaKeys:n}){this.log(`Creating key-system session "${t}" keyId: ${R(e.keyId||[])} keyUri: ${e.uri}`);let r={decryptdata:e,keySystem:t,mediaKeys:n,mediaKeysSession:n.createSession(),keyStatus:`status-pending`};return this.mediaKeySessions.push(r),r}renewKeySession(e){let t=e.decryptdata;if(t.pssh){let n=this.createMediaKeySessionContext(e),r=lc(t);this.keyIdToKeySessionPromise[r]=this.generateRequestWithPreferredKeySession(n,`cenc`,t.pssh.buffer,`expired`)}else this.warn(`Could not renew expired session. Missing pssh initData.`);this.removeSession(e)}updateKeySession(e,t){let n=e.mediaKeysSession;return this.log(`Updating key-session "${n.sessionId}" for keyId ${R(e.decryptdata.keyId||[])}
|
|
28
|
+
} (data length: ${t.byteLength})`),n.update(t)}getSelectedKeySystemFormats(){return Object.keys(this.keySystemAccessPromises).map(e=>({keySystem:e,hasMediaKeys:this.keySystemAccessPromises[e].hasMediaKeys})).filter(({hasMediaKeys:e})=>!!e).map(({keySystem:e})=>lr(e)).filter(e=>!!e)}getKeySystemAccess(e){return this.getKeySystemSelectionPromise(e).then(({keySystem:e,mediaKeys:t})=>this.attemptSetMediaKeys(e,t))}selectKeySystem(e){return new Promise((t,n)=>{this.getKeySystemSelectionPromise(e).then(({keySystem:e})=>{let r=lr(e);r?t(r):n(Error(`Unable to find format for key-system "${e}"`))}).catch(n)})}selectKeySystemFormat(e){let t=Object.keys(e.levelkeys||{});return this.keyFormatPromise||=(this.log(`Selecting key-system from fragment (sn: ${e.sn} ${e.type}: ${e.level}) key formats ${t.join(`, `)}`),this.getKeyFormatPromise(t)),this.keyFormatPromise}getKeyFormatPromise(e){let t=ur(this.config),n=e.map(cr).filter(e=>!!e&&t.indexOf(e)!==-1);return this.selectKeySystem(n)}getKeyStatus(e){let{mediaKeySessions:t}=this;for(let n=0;n<t.length;n++){let r=uc(e,t[n]);if(r)return r}}loadKey(e){let t=e.keyInfo.decryptdata,n=lc(t),r=this.bannedKeyIds[n];if(r||this.getKeyStatus(t)===`internal-error`){let n=fc(r||`internal-error`,t);return this.handleError(n,e.frag),Promise.reject(n)}let i=`(keyId: ${n} format: "${t.keyFormat}" method: ${t.method} uri: ${t.uri})`;this.log(`Starting session for key ${i}`);let a=this.keyIdToKeySessionPromise[n];if(!a){let r=this.getKeySystemForKeyPromise(t).then(({keySystem:n,mediaKeys:r})=>(this.throwIfDestroyed(),this.log(`Handle encrypted media sn: ${e.frag.sn} ${e.frag.type}: ${e.frag.level} using key ${i}`),this.attemptSetMediaKeys(n,r).then(()=>(this.throwIfDestroyed(),this.createMediaKeySessionContext({keySystem:n,mediaKeys:r,decryptdata:t}))))).then(e=>{let n=t.pssh?t.pssh.buffer:null;return this.generateRequestWithPreferredKeySession(e,`cenc`,n,`playlist-key`)});return r.catch(t=>this.handleError(t,e.frag)),this.keyIdToKeySessionPromise[n]=r,r}return a.catch(n=>{if(n instanceof dc){let r=E({},n.data);this.getKeyStatus(t)===`internal-error`&&(r.decryptdata=t);let i=new dc(r,n.message);this.handleError(i,e.frag)}}),a}throwIfDestroyed(e=`Invalid state`){if(!this.hls)throw Error(`invalid state`)}handleError(e,t){if(this.hls)if(e instanceof dc){t&&(e.data.frag=t);let n=e.data.decryptdata;this.error(`${e.message}${n?` (${R(n.keyId||[])})`:``}`),this.hls.trigger(v.ERROR,e.data)}else this.error(e.message),this.hls.trigger(v.ERROR,{type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_NO_KEYS,error:e,fatal:!0})}getKeySystemForKeyPromise(e){let t=lc(e),n=this.keyIdToKeySessionPromise[t];if(!n){let t=cr(e.keyFormat),n=t?[t]:ur(this.config);return this.attemptKeySystemAccess(n)}return n}getKeySystemSelectionPromise(e){if(e.length||(e=ur(this.config)),e.length===0)throw new dc({type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_NO_CONFIGURED_LICENSE,fatal:!0},`Missing key-system license configuration options ${W({drmSystems:this.config.drmSystems})}`);return this.attemptKeySystemAccess(e)}attemptSetMediaKeys(e,t){if(this.mediaResolved=void 0,this.mediaKeys===t)return Promise.resolve();let n=this.setMediaKeysQueue.slice();this.log(`Setting media-keys for "${e}"`);let r=Promise.all(n).then(()=>this.media?this.media.setMediaKeys(t):new Promise((e,n)=>{this.mediaResolved=()=>{if(this.mediaResolved=void 0,!this.media)return n(Error(`Attempted to set mediaKeys without media element attached`));this.mediaKeys=t,this.media.setMediaKeys(t).then(e).catch(n)}}));return this.mediaKeys=t,this.setMediaKeysQueue.push(r),r.then(()=>{this.log(`Media-keys set for "${e}"`),n.push(r),this.setMediaKeysQueue=this.setMediaKeysQueue.filter(e=>n.indexOf(e)===-1)})}generateRequestWithPreferredKeySession(e,t,n,r){var i;let a=(i=this.config.drmSystems)==null||(i=i[e.keySystem])==null?void 0:i.generateRequest;if(a)try{let r=a.call(this.hls,t,n,e);if(!r)throw Error(`Invalid response from configured generateRequest filter`);t=r.initDataType,n=r.initData?r.initData:null,e.decryptdata.pssh=n?new Uint8Array(n):null}catch(e){if(this.warn(e.message),this.hls&&this.hls.config.debug)throw e}if(n===null)return this.log(`Skipping key-session request for "${r}" (no initData)`),Promise.resolve(e);let o=lc(e.decryptdata),s=e.decryptdata.uri;this.log(`Generating key-session request for "${r}" keyId: ${o} URI: ${s} (init data type: ${t} length: ${n.byteLength})`);let c=new vi,l=e._onmessage=t=>{let n=e.mediaKeysSession;if(!n){c.emit(`error`,Error(`invalid state`));return}let{messageType:r,message:i}=t;this.log(`"${r}" message event for session "${n.sessionId}" message size: ${i.byteLength}`),r===`license-request`||r===`license-renewal`?this.renewLicense(e,i).catch(e=>{c.eventNames().length?c.emit(`error`,e):this.handleError(e)}):r===`license-release`?e.keySystem===Y.FAIRPLAY&&this.updateKeySession(e,nr(`acknowledged`)).then(()=>this.removeSession(e)).catch(e=>this.handleError(e)):this.warn(`unhandled media key message type "${r}"`)},u=(e,t)=>{t.keyStatus=e;let n;e.startsWith(`usable`)?c.emit(`resolved`):e===`internal-error`||e===`output-restricted`||e===`output-downscaled`?n=fc(e,t.decryptdata):e===`expired`?n=Error(`key expired (keyId: ${o})`):e===`released`?n=Error(`key released`):e===`status-pending`||this.warn(`unhandled key status change "${e}" (keyId: ${o})`),n&&(c.eventNames().length?c.emit(`error`,n):this.handleError(n))},d=e._onkeystatuseschange=t=>{if(!e.mediaKeysSession){c.emit(`error`,Error(`invalid state`));return}let n=this.getKeyStatuses(e);if(!Object.keys(n).some(e=>n[e]!==`status-pending`))return;if(n[o]===`expired`){this.log(`Expired key ${W(n)} in key-session "${e.mediaKeysSession.sessionId}"`),this.renewKeySession(e);return}let r=n[o];if(r)u(r,e);else{var i;let t=1e3;e.keyStatusTimeouts||={},(i=e.keyStatusTimeouts)[o]||(i[o]=self.setTimeout(()=>{if(!e.mediaKeysSession||!this.mediaKeys)return;let n=this.getKeyStatus(e.decryptdata);if(n&&n!==`status-pending`)return this.log(`No status for keyId ${o} in key-session "${e.mediaKeysSession.sessionId}". Using session key-status ${n} from other session.`),u(n,e);this.log(`key status for ${o} in key-session "${e.mediaKeysSession.sessionId}" timed out after ${t}ms`),r=`internal-error`,u(r,e)},t)),this.log(`No status for keyId ${o} (${W(n)}).`)}};ci(e.mediaKeysSession,`message`,l),ci(e.mediaKeysSession,`keystatuseschange`,d);let f=new Promise((e,t)=>{c.on(`error`,t),c.on(`resolved`,e)});return e.mediaKeysSession.generateRequest(t,n).then(()=>{this.log(`Request generated for key-session "${e.mediaKeysSession.sessionId}" keyId: ${o} URI: ${s}`)}).catch(t=>{throw new dc({type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_NO_SESSION,error:t,decryptdata:e.decryptdata,fatal:!1},`Error generating key-session request: ${t}`)}).then(()=>f).catch(t=>(c.removeAllListeners(),this.removeSession(e).then(()=>{throw t}))).then(()=>(c.removeAllListeners(),e))}getKeyStatuses(e){let t={};return e.mediaKeysSession.keyStatuses.forEach((n,r)=>{if(typeof r==`string`&&typeof n==`object`){let e=r;r=n,n=e}let i=`buffer`in r?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r);if(e.keySystem===Y.PLAYREADY&&i.length===16){let e=R(i);t[e]=n,ir(i)}let a=R(i);n===`internal-error`&&(this.bannedKeyIds[a]=n),this.log(`key status change "${n}" for keyStatuses keyId: ${a} key-session "${e.mediaKeysSession.sessionId}"`),t[a]=n}),t}fetchServerCertificate(e){let t=this.config,n=t.loader,r=new n(t),i=this.getServerCertificateUrl(e);return i?(this.log(`Fetching server certificate for "${e}"`),new Promise((n,a)=>{let o={responseType:`arraybuffer`,url:i},s=t.certLoadPolicy.default,c={loadPolicy:s,timeout:s.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0};r.load(o,c,{onSuccess:(e,t,r,i)=>{n(e.data)},onError:(t,n,r,s)=>{a(new dc({type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,fatal:!0,networkDetails:r,response:E({url:o.url,data:void 0},t)},`"${e}" certificate request failed (${i}). Status: ${t.code} (${t.text})`))},onTimeout:(t,n,r)=>{a(new dc({type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,fatal:!0,networkDetails:r,response:{url:o.url,data:void 0}},`"${e}" certificate request timed out (${i})`))},onAbort:(e,t,n)=>{a(Error(`aborted`))}})})):Promise.resolve()}setMediaKeysServerCertificate(e,t,n){return new Promise((r,i)=>{e.setServerCertificate(n).then(i=>{this.log(`setServerCertificate ${i?`success`:`not supported by CDM`} (${n.byteLength}) on "${t}"`),r(e)}).catch(e=>{i(new dc({type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED,error:e,fatal:!0},e.message))})})}renewLicense(e,t){return this.requestLicense(e,new Uint8Array(t)).then(t=>this.updateKeySession(e,new Uint8Array(t)).catch(t=>{throw new dc({type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_SESSION_UPDATE_FAILED,decryptdata:e.decryptdata,error:t,fatal:!1},t.message)}))}unpackPlayReadyKeyMessage(e,t){let n=String.fromCharCode.apply(null,new Uint16Array(t.buffer));if(!n.includes(`PlayReadyKeyMessage`))return e.setRequestHeader(`Content-Type`,`text/xml; charset=utf-8`),t;let r=new DOMParser().parseFromString(n,`application/xml`),i=r.querySelectorAll(`HttpHeader`);if(i.length>0){let t;for(let n=0,r=i.length;n<r;n++){t=i[n];let r=t.querySelector(`name`)?.textContent,a=t.querySelector(`value`)?.textContent;r&&a&&e.setRequestHeader(r,a)}}let a=r.querySelector(`Challenge`)?.textContent;if(!a)throw Error(`Cannot find <Challenge> in key message`);return nr(atob(a))}setupLicenseXHR(e,t,n,r){let i=this.config.licenseXhrSetup;return i?Promise.resolve().then(()=>{if(!n.decryptdata)throw Error(`Key removed`);return i.call(this.hls,e,t,n,r)}).catch(a=>{if(!n.decryptdata)throw a;return e.open(`POST`,t,!0),i.call(this.hls,e,t,n,r)}).then(n=>(e.readyState||e.open(`POST`,t,!0),{xhr:e,licenseChallenge:n||r})):(e.open(`POST`,t,!0),Promise.resolve({xhr:e,licenseChallenge:r}))}requestLicense(e,t){let n=this.config.keyLoadPolicy.default;return new Promise((r,i)=>{let a=this.getLicenseServerUrlOrThrow(e.keySystem);this.log(`Sending license request to URL: ${a}`);let o=new XMLHttpRequest;o.responseType=`arraybuffer`,o.onreadystatechange=()=>{if(!this.hls||!e.mediaKeysSession)return i(Error(`invalid state`));if(o.readyState===4)if(o.status===200){this._requestLicenseFailureCount=0;let t=o.response;this.log(`License received ${t instanceof ArrayBuffer?t.byteLength:t}`);let n=this.config.licenseResponseCallback;if(n)try{t=n.call(this.hls,o,a,e)}catch(e){this.error(e)}r(t)}else{let s=n.errorRetry,c=s?s.maxNumRetry:0;if(this._requestLicenseFailureCount++,this._requestLicenseFailureCount>c||o.status>=400&&o.status<500)i(new dc({type:g.KEY_SYSTEM_ERROR,details:_.KEY_SYSTEM_LICENSE_REQUEST_FAILED,decryptdata:e.decryptdata,fatal:!0,networkDetails:o,response:{url:a,data:void 0,code:o.status,text:o.statusText}},`License Request XHR failed (${a}). Status: ${o.status} (${o.statusText})`));else{let n=c-this._requestLicenseFailureCount+1;this.warn(`Retrying license request, ${n} attempts left`),this.requestLicense(e,t).then(r,i)}}},e.licenseXhr&&e.licenseXhr.readyState!==XMLHttpRequest.DONE&&e.licenseXhr.abort(),e.licenseXhr=o,this.setupLicenseXHR(o,a,e,t).then(({xhr:t,licenseChallenge:n})=>{e.keySystem==Y.PLAYREADY&&(n=this.unpackPlayReadyKeyMessage(t,n)),t.send(n)}).catch(i)})}onDestroying(){this.unregisterListeners(),this._clear()}onMediaAttached(e,t){if(!this.config.emeEnabled)return;let n=t.media;this.media=n,ci(n,`encrypted`,this.onMediaEncrypted),ci(n,`waitingforkey`,this.onWaitingForKey);let r=this.mediaResolved;r?r():this.mediaKeys=n.mediaKeys}onMediaDetached(){let e=this.media;e&&(li(e,`encrypted`,this.onMediaEncrypted),li(e,`waitingforkey`,this.onWaitingForKey),this.media=null,this.mediaKeys=null)}_clear(){var t;this._requestLicenseFailureCount=0,this.keyIdToKeySessionPromise={},this.bannedKeyIds={};let n=this.mediaResolved;if(n&&n(),!this.mediaKeys&&!this.mediaKeySessions.length)return;let r=this.media,i=this.mediaKeySessions.slice();this.mediaKeySessions=[],this.mediaKeys=null,_r.clearKeyUriToKeyIdMap();let a=i.length;e.CDMCleanupPromise=Promise.all(i.map(e=>this.removeSession(e)).concat((r==null||(t=r.setMediaKeys(null))==null?void 0:t.catch(e=>{this.log(`Could not clear media keys: ${e}`),this.hls&&this.hls.trigger(v.ERROR,{type:g.OTHER_ERROR,details:_.KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR,fatal:!1,error:Error(`Could not clear media keys: ${e}`)})}))||Promise.resolve())).catch(e=>{this.log(`Could not close sessions and clear media keys: ${e}`),this.hls&&this.hls.trigger(v.ERROR,{type:g.OTHER_ERROR,details:_.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR,fatal:!1,error:Error(`Could not close sessions and clear media keys: ${e}`)})}).then(()=>{a&&this.log(`finished closing key sessions and clearing media keys`)})}onManifestLoading(){this._clear()}onManifestLoaded(e,{sessionKeys:t}){if(!(!t||!this.config.emeEnabled)&&!this.keyFormatPromise){let e=t.reduce((e,t)=>(e.indexOf(t.keyFormat)===-1&&e.push(t.keyFormat),e),[]);this.log(`Selecting key-system from session-keys ${e.join(`, `)}`),this.keyFormatPromise=this.getKeyFormatPromise(e)}}removeSession(e){let{mediaKeysSession:t,licenseXhr:n,decryptdata:r}=e;if(t){this.log(`Remove licenses and keys and close session "${t.sessionId}" keyId: ${R(r?.keyId||[])}`),e._onmessage&&=(t.removeEventListener(`message`,e._onmessage),void 0),e._onkeystatuseschange&&=(t.removeEventListener(`keystatuseschange`,e._onkeystatuseschange),void 0),n&&n.readyState!==XMLHttpRequest.DONE&&n.abort(),e.mediaKeysSession=e.decryptdata=e.licenseXhr=void 0;let i=this.mediaKeySessions.indexOf(e);i>-1&&this.mediaKeySessions.splice(i,1);let{keyStatusTimeouts:a}=e;a&&Object.keys(a).forEach(e=>self.clearTimeout(a[e]));let{drmSystemOptions:o}=this.config;return(mr(o)?new Promise((e,n)=>{self.setTimeout(()=>n(Error(`MediaKeySession.remove() timeout`)),8e3),t.remove().then(e).catch(n)}):Promise.resolve()).catch(e=>{this.log(`Could not remove session: ${e}`),this.hls&&this.hls.trigger(v.ERROR,{type:g.OTHER_ERROR,details:_.KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR,fatal:!1,error:Error(`Could not remove session: ${e}`)})}).then(()=>t.close()).catch(e=>{this.log(`Could not close session: ${e}`),this.hls&&this.hls.trigger(v.ERROR,{type:g.OTHER_ERROR,details:_.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR,fatal:!1,error:Error(`Could not close session: ${e}`)})})}return Promise.resolve()}};cc.CDMCleanupPromise=void 0;function lc(e){if(!e)throw Error(`Could not read keyId of undefined decryptdata`);if(e.keyId===null)throw Error(`keyId is null`);return R(e.keyId)}function uc(e,t){if(e.keyId&&t.mediaKeysSession.keyStatuses.has(e.keyId))return t.mediaKeysSession.keyStatuses.get(e.keyId);if(e.matches(t.decryptdata))return t.keyStatus}var dc=class extends Error{constructor(e,t){super(t),this.data=void 0,e.error||=Error(t),this.data=e,e.err=e.error}};function fc(e,t){let n=e===`output-restricted`,r=n?_.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:_.KEY_SYSTEM_STATUS_INTERNAL_ERROR;return new dc({type:g.KEY_SYSTEM_ERROR,details:r,fatal:!1,decryptdata:t},n?`HDCP level output restricted`:`key status changed to "${e}"`)}var pc=class{constructor(e){this.hls=void 0,this.isVideoPlaybackQualityAvailable=!1,this.timer=void 0,this.media=null,this.lastTime=void 0,this.lastDroppedFrames=0,this.lastDecodedFrames=0,this.streamController=void 0,this.hls=e,this.registerListeners()}setStreamController(e){this.streamController=e}registerListeners(){this.hls.on(v.MEDIA_ATTACHING,this.onMediaAttaching,this),this.hls.on(v.MEDIA_DETACHING,this.onMediaDetaching,this)}unregisterListeners(){this.hls.off(v.MEDIA_ATTACHING,this.onMediaAttaching,this),this.hls.off(v.MEDIA_DETACHING,this.onMediaDetaching,this)}destroy(){this.timer&&clearInterval(this.timer),this.unregisterListeners(),this.isVideoPlaybackQualityAvailable=!1,this.media=null}onMediaAttaching(e,t){let n=this.hls.config;if(n.capLevelOnFPSDrop){let e=t.media instanceof self.HTMLVideoElement?t.media:null;this.media=e,e&&typeof e.getVideoPlaybackQuality==`function`&&(this.isVideoPlaybackQualityAvailable=!0),self.clearInterval(this.timer),this.timer=self.setInterval(this.checkFPSInterval.bind(this),n.fpsDroppedMonitoringPeriod)}}onMediaDetaching(){this.media=null}checkFPS(e,t,n){let r=performance.now();if(t){if(this.lastTime){let e=r-this.lastTime,i=n-this.lastDroppedFrames,a=t-this.lastDecodedFrames,o=1e3*i/e,s=this.hls;if(s.trigger(v.FPS_DROP,{currentDropped:i,currentDecoded:a,totalDroppedFrames:n}),o>0&&i>s.config.fpsDroppedMonitoringThreshold*a){let e=s.currentLevel;s.logger.warn(`drop FPS ratio greater than max allowed value for currentLevel: `+e),e>0&&(s.autoLevelCapping===-1||s.autoLevelCapping>=e)&&(--e,s.trigger(v.FPS_DROP_LEVEL_CAPPING,{level:e,droppedLevel:s.currentLevel}),s.autoLevelCapping=e,this.streamController.nextLevelSwitch())}}this.lastTime=r,this.lastDroppedFrames=n,this.lastDecodedFrames=t}}checkFPSInterval(){let e=this.media;if(e)if(this.isVideoPlaybackQualityAvailable){let t=e.getVideoPlaybackQuality();this.checkFPS(e,t.totalVideoFrames,t.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)}};function mc(e,t){let n;try{n=new Event(`addtrack`)}catch{n=document.createEvent(`Event`),n.initEvent(`addtrack`,!1,!1)}n.track=e,t.dispatchEvent(n)}function hc(e,t){let n=e.mode;if(n===`disabled`&&(e.mode=`hidden`),e.cues&&!e.cues.getCueById(t.id))try{if(e.addCue(t),!e.cues.getCueById(t.id))throw Error(`addCue is failed for: ${t}`)}catch(n){I.debug(`[texttrack-utils]: ${n}`);try{let n=new self.TextTrackCue(t.startTime,t.endTime,t.text);n.id=t.id,e.addCue(n)}catch(e){I.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${e}`)}}n===`disabled`&&(e.mode=n)}function gc(e,t){let n=e.mode;if(n===`disabled`&&(e.mode=`hidden`),e.cues)for(let n=e.cues.length;n--;)t&&e.cues[n].removeEventListener(`enter`,t),e.removeCue(e.cues[n]);n===`disabled`&&(e.mode=n)}function _c(e,t,n,r){let i=e.mode;if(i===`disabled`&&(e.mode=`hidden`),e.cues&&e.cues.length>0){let i=yc(e.cues,t,n);for(let t=0;t<i.length;t++)(!r||r(i[t]))&&e.removeCue(i[t])}i===`disabled`&&(e.mode=i)}function vc(e,t){if(t<=e[0].startTime)return 0;let n=e.length-1;if(t>e[n].endTime)return-1;let r=0,i=n,a;for(;r<=i;)if(a=Math.floor((i+r)/2),t<e[a].startTime)i=a-1;else if(t>e[a].startTime&&r<n)r=a+1;else return a;return e[r].startTime-t<t-e[i].startTime?r:i}function yc(e,t,n){let r=[],i=vc(e,t);if(i>-1)for(let a=i,o=e.length;a<o;a++){let i=e[a];if(i.startTime>=t&&i.endTime<=n)r.push(i);else if(i.startTime>n)return r}return r}function bc(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];(r.kind===`subtitles`||r.kind===`captions`)&&r.label&&t.push(e[n])}return t}var xc=class extends wo{constructor(e){super(e,`subtitle-track-controller`),this.media=null,this.tracks=[],this.groupIds=null,this.tracksInGroup=[],this.trackId=-1,this.currentTrack=null,this.selectDefaultTrack=!0,this.queuedDefaultTrack=-1,this.useTextTrackPolling=!1,this.subtitlePollingInterval=-1,this._subtitleDisplay=!0,this.asyncPollTrackChange=()=>this.pollTrackChange(0),this.onTextTracksChanged=()=>{if(this.useTextTrackPolling||self.clearInterval(this.subtitlePollingInterval),!this.media||!this.hls.config.renderTextTracksNatively)return;let e=null,t=bc(this.media.textTracks);for(let n=0;n<t.length;n++)if(t[n].mode===`hidden`)e=t[n];else if(t[n].mode===`showing`){e=t[n];break}let n=this.findTrackForTextTrack(e);this.subtitleTrack!==n&&this.setSubtitleTrack(n)},this.registerListeners()}destroy(){this.unregisterListeners(),this.tracks.length=0,this.tracksInGroup.length=0,this.currentTrack=null,this.onTextTracksChanged=this.asyncPollTrackChange=null,super.destroy()}get subtitleDisplay(){return this._subtitleDisplay}set subtitleDisplay(e){this._subtitleDisplay=e,this.trackId>-1&&this.toggleTrackModes()}registerListeners(){let{hls:e}=this;e.on(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.MANIFEST_PARSED,this.onManifestParsed,this),e.on(v.LEVEL_LOADING,this.onLevelLoading,this),e.on(v.LEVEL_SWITCHING,this.onLevelSwitching,this),e.on(v.SUBTITLE_TRACK_LOADED,this.onSubtitleTrackLoaded,this),e.on(v.ERROR,this.onError,this)}unregisterListeners(){let{hls:e}=this;e.off(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.MANIFEST_PARSED,this.onManifestParsed,this),e.off(v.LEVEL_LOADING,this.onLevelLoading,this),e.off(v.LEVEL_SWITCHING,this.onLevelSwitching,this),e.off(v.SUBTITLE_TRACK_LOADED,this.onSubtitleTrackLoaded,this),e.off(v.ERROR,this.onError,this)}onMediaAttached(e,t){this.media=t.media,this.media&&(this.queuedDefaultTrack>-1&&(this.subtitleTrack=this.queuedDefaultTrack,this.queuedDefaultTrack=-1),this.useTextTrackPolling=!(this.media.textTracks&&`onchange`in this.media.textTracks),this.useTextTrackPolling?this.pollTrackChange(500):this.media.textTracks.addEventListener(`change`,this.asyncPollTrackChange))}pollTrackChange(e){self.clearInterval(this.subtitlePollingInterval),this.subtitlePollingInterval=self.setInterval(this.onTextTracksChanged,e)}onMediaDetaching(e,t){let n=this.media;if(!n)return;let r=!!t.transferMedia;self.clearInterval(this.subtitlePollingInterval),this.useTextTrackPolling||n.textTracks.removeEventListener(`change`,this.asyncPollTrackChange),this.trackId>-1&&(this.queuedDefaultTrack=this.trackId),this.subtitleTrack=-1,this.media=null,!r&&bc(n.textTracks).forEach(e=>{gc(e)})}onManifestLoading(){this.tracks=[],this.groupIds=null,this.tracksInGroup=[],this.trackId=-1,this.currentTrack=null,this.selectDefaultTrack=!0}onManifestParsed(e,t){this.tracks=t.subtitleTracks}onSubtitleTrackLoaded(e,t){let{id:n,groupId:r,details:i}=t,a=this.tracksInGroup[n];if(!a||a.groupId!==r){this.warn(`Subtitle track with id:${n} and group:${r} not found in active group ${a?.groupId}`);return}let o=a.details;a.details=t.details,this.log(`Subtitle track ${n} "${a.name}" lang:${a.lang} group:${r} loaded [${i.startSN}-${i.endSN}]`),n===this.trackId&&this.playlistLoaded(n,t,o)}onLevelLoading(e,t){this.switchLevel(t.level)}onLevelSwitching(e,t){this.switchLevel(t.level)}switchLevel(e){let t=this.hls.levels[e];if(!t)return;let n=t.subtitleGroups||null,r=this.groupIds,i=this.currentTrack;if(!n||r?.length!==n?.length||n!=null&&n.some(e=>r?.indexOf(e)===-1)){this.groupIds=n,this.trackId=-1,this.currentTrack=null;let e=this.tracks.filter(e=>!n||n.indexOf(e.groupId)!==-1);if(e.length)this.selectDefaultTrack&&!e.some(e=>e.default)&&(this.selectDefaultTrack=!1),e.forEach((e,t)=>{e.id=t});else if(!i&&!this.tracksInGroup.length)return;this.tracksInGroup=e;let t=this.hls.config.subtitlePreference;if(!i&&t){this.selectDefaultTrack=!1;let n=Vt(t,e);if(n>-1)i=e[n];else{let e=Vt(t,this.tracks);i=this.tracks[e]}}let r=this.findTrackId(i);r===-1&&i&&(r=this.findTrackId(null));let a={subtitleTracks:e};this.log(`Updating subtitle tracks, ${e.length} track(s) found in "${n?.join(`,`)}" group-id`),this.hls.trigger(v.SUBTITLE_TRACKS_UPDATED,a),r!==-1&&this.trackId===-1&&this.setSubtitleTrack(r)}}findTrackId(e){let t=this.tracksInGroup,n=this.selectDefaultTrack;for(let r=0;r<t.length;r++){let i=t[r];if(!(n&&!i.default||!n&&!e)&&(!e||Ht(i,e)))return r}if(e){for(let n=0;n<t.length;n++){let r=t[n];if(Eo(e.attrs,r.attrs,[`LANGUAGE`,`ASSOC-LANGUAGE`,`CHARACTERISTICS`]))return n}for(let n=0;n<t.length;n++){let r=t[n];if(Eo(e.attrs,r.attrs,[`LANGUAGE`]))return n}}return-1}findTrackForTextTrack(e){if(e){let t=this.tracksInGroup;for(let n=0;n<t.length;n++){let r=t[n];if(Do(r,e))return n}}return-1}onError(e,t){t.fatal||!t.context||t.context.type===y.SUBTITLE_TRACK&&t.context.id===this.trackId&&(!this.groupIds||this.groupIds.indexOf(t.context.groupId)!==-1)&&this.checkRetry(t)}get allSubtitleTracks(){return this.tracks}get subtitleTracks(){return this.tracksInGroup}get subtitleTrack(){return this.trackId}set subtitleTrack(e){this.selectDefaultTrack=!1,this.setSubtitleTrack(e)}setSubtitleOption(e){if(this.hls.config.subtitlePreference=e,e){if(e.id===-1)return this.setSubtitleTrack(-1),null;let t=this.allSubtitleTracks;if(this.selectDefaultTrack=!1,t.length){let n=this.currentTrack;if(n&&Ht(e,n))return n;let r=Vt(e,this.tracksInGroup);if(r>-1){let e=this.tracksInGroup[r];return this.setSubtitleTrack(r),e}else if(n)return null;else{let n=Vt(e,t);if(n>-1)return t[n]}}}return null}loadPlaylist(e){super.loadPlaylist(),this.shouldLoadPlaylist(this.currentTrack)&&this.scheduleLoading(this.currentTrack,e)}loadingPlaylist(e,t){super.loadingPlaylist(e,t);let n=e.id,r=e.groupId,i=this.getUrlWithDirectives(e.url,t),a=e.details,o=a?.age;this.log(`Loading subtitle ${n} "${e.name}" lang:${e.lang} group:${r}${t?.msn===void 0?``:` at sn `+t.msn+` part `+t.part}${o&&a.live?` age `+o.toFixed(1)+(a.type&&` `+a.type||``):``} ${i}`),this.hls.trigger(v.SUBTITLE_TRACK_LOADING,{url:i,id:n,groupId:r,deliveryDirectives:t||null,track:e})}toggleTrackModes(){let{media:e}=this;if(!e)return;let t=bc(e.textTracks),n=this.currentTrack,r;if(n&&(r=t.filter(e=>Do(n,e))[0],r||this.warn(`Unable to find subtitle TextTrack with name "${n.name}" and language "${n.lang}"`)),[].slice.call(t).forEach(e=>{e.mode!==`disabled`&&e!==r&&(e.mode=`disabled`)}),r){let e=this.subtitleDisplay?`showing`:`hidden`;r.mode!==e&&(r.mode=e)}}setSubtitleTrack(e){let t=this.tracksInGroup;if(!this.media){this.queuedDefaultTrack=e;return}if(e<-1||e>=t.length||!p(e)){this.warn(`Invalid subtitle track id: ${e}`);return}this.selectDefaultTrack=!1;let n=this.currentTrack,r=t[e]||null;if(this.trackId=e,this.currentTrack=r,this.toggleTrackModes(),!r){this.hls.trigger(v.SUBTITLE_TRACK_SWITCH,{id:e});return}let i=!!r.details&&!r.details.live;if(e===this.trackId&&r===n&&i)return;this.log(`Switching to subtitle-track ${e}`+(r?` "${r.name}" lang:${r.lang} group:${r.groupId}`:``));let{id:a,groupId:o=``,name:s,type:c,url:l}=r;this.hls.trigger(v.SUBTITLE_TRACK_SWITCH,{id:a,groupId:o,name:s,type:c,url:l});let u=this.switchParams(r.url,n?.details,r.details);this.loadPlaylist(u)}};function Sc(){try{return crypto.randomUUID()}catch{try{let e=URL.createObjectURL(new Blob),t=e.toString();return URL.revokeObjectURL(e),t.slice(t.lastIndexOf(`/`)+1)}catch{let e=new Date().getTime();return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,t=>{let n=(e+Math.random()*16)%16|0;return e=Math.floor(e/16),(t==`x`?n:n&3|8).toString(16)})}}}function Cc(e){let t=5381,n=e.length;for(;n;)t=t*33^e.charCodeAt(--n);return(t>>>0).toString()}var wc=.025,Tc=function(e){return e[e.Point=0]=`Point`,e[e.Range=1]=`Range`,e}({});function Ec(e,t,n){return`${e.identifier}-${n+1}-${Cc(t)}`}var Dc=class{constructor(e,t){this.base=void 0,this._duration=null,this._timelineStart=null,this.appendInPlaceDisabled=void 0,this.appendInPlaceStarted=void 0,this.dateRange=void 0,this.hasPlayed=!1,this.cumulativeDuration=0,this.resumeOffset=NaN,this.playoutLimit=NaN,this.restrictions={skip:!1,jump:!1},this.snapOptions={out:!1,in:!1},this.assetList=[],this.assetListLoader=void 0,this.assetListResponse=null,this.resumeAnchor=void 0,this.error=void 0,this.resetOnResume=void 0,this.base=t,this.dateRange=e,this.setDateRange(e)}setDateRange(e){this.dateRange=e,this.resumeOffset=e.attr.optionalFloat(`X-RESUME-OFFSET`,this.resumeOffset),this.playoutLimit=e.attr.optionalFloat(`X-PLAYOUT-LIMIT`,this.playoutLimit),this.restrictions=e.attr.enumeratedStringList(`X-RESTRICT`,this.restrictions),this.snapOptions=e.attr.enumeratedStringList(`X-SNAP`,this.snapOptions)}reset(){var e;this.appendInPlaceStarted=!1,(e=this.assetListLoader)==null||e.destroy(),this.assetListLoader=void 0,this.supplementsPrimary||(this.assetListResponse=null,this.assetList=[],this._duration=null)}isAssetPastPlayoutLimit(e){if(e>0&&e>=this.assetList.length)return!0;let t=this.playoutLimit;return e<=0||isNaN(t)?!1:t===0?!0:(this.assetList[e]?.startOffset||0)>t}findAssetIndex(e){return this.assetList.indexOf(e)}get identifier(){return this.dateRange.id}get startDate(){return this.dateRange.startDate}get startTime(){let e=this.dateRange.startTime;if(this.snapOptions.out){let t=this.dateRange.tagAnchor;if(t)return Oc(e,t)}return e}get startOffset(){return this.cue.pre?0:this.startTime}get startIsAligned(){if(this.startTime===0||this.snapOptions.out)return!0;let e=this.dateRange.tagAnchor;if(e){let t=this.dateRange.startTime;return t-Oc(t,e)<.1}return!1}get resumptionOffset(){let e=this.resumeOffset,t=p(e)?e:this.duration;return this.cumulativeDuration+t}get resumeTime(){let e=this.startOffset+this.resumptionOffset;if(this.snapOptions.in){let t=this.resumeAnchor;if(t)return Oc(e,t)}return e}get appendInPlace(){return this.appendInPlaceStarted?!0:this.appendInPlaceDisabled?!1:!!(!this.cue.once&&!this.cue.pre&&this.startIsAligned&&(isNaN(this.playoutLimit)&&isNaN(this.resumeOffset)||this.resumeOffset&&this.duration&&Math.abs(this.resumeOffset-this.duration)<wc))}set appendInPlace(e){if(this.appendInPlaceStarted){this.resetOnResume=!e;return}this.appendInPlaceDisabled=!e}get timelineStart(){return this._timelineStart===null?this.startTime:this._timelineStart}set timelineStart(e){this._timelineStart=e}get duration(){let e=this.playoutLimit,t;return t=this._duration===null?this.dateRange.duration?this.dateRange.duration:this.dateRange.plannedDuration||0:this._duration,!isNaN(e)&&e<t&&(t=e),t}set duration(e){this._duration=e}get cue(){return this.dateRange.cue}get timelineOccupancy(){return this.dateRange.attr[`X-TIMELINE-OCCUPIES`]===`RANGE`?Tc.Range:Tc.Point}get supplementsPrimary(){return this.dateRange.attr[`X-TIMELINE-STYLE`]===`PRIMARY`}get contentMayVary(){return this.dateRange.attr[`X-CONTENT-MAY-VARY`]!==`NO`}get assetUrl(){return this.dateRange.attr[`X-ASSET-URI`]}get assetListUrl(){return this.dateRange.attr[`X-ASSET-LIST`]}get baseUrl(){return this.base.url}get assetListLoaded(){return this.assetList.length>0||this.assetListResponse!==null}toString(){return jc(this)}};function Oc(e,t){return e-t.start<t.duration/2&&!(Math.abs(e-(t.start+t.duration))<wc)?t.start:t.start+t.duration}function kc(e,t,n){let r=new self.URL(e,n);return r.protocol!==`data:`&&r.searchParams.set(`_HLS_primary_id`,t),r}function Ac(e,t){for(;(n=e.assetList[++t])!=null&&n.error;)var n;return t}function jc(e){return`["${e.identifier}" ${e.cue.pre?`<pre>`:e.cue.post?`<post>`:``}${e.timelineStart.toFixed(2)}-${e.resumeTime.toFixed(2)}]`}function Mc(e){let t=e.timelineStart,n=e.duration||0;return`["${e.identifier}" ${t.toFixed(2)}-${(t+n).toFixed(2)}]`}var Nc=class{constructor(e,t,n,r){this.hls=void 0,this.interstitial=void 0,this.assetItem=void 0,this.tracks=null,this.hasDetails=!1,this.mediaAttached=null,this._currentTime=void 0,this._bufferedEosTime=void 0,this.checkPlayout=()=>{this.reachedPlayout(this.currentTime)&&this.hls&&this.hls.trigger(v.PLAYOUT_LIMIT_REACHED,{})};let i=this.hls=new e(t);this.interstitial=n,this.assetItem=r;let a=()=>{this.hasDetails=!0};i.once(v.LEVEL_LOADED,a),i.once(v.AUDIO_TRACK_LOADED,a),i.once(v.SUBTITLE_TRACK_LOADED,a),i.on(v.MEDIA_ATTACHING,(e,{media:t})=>{this.removeMediaListeners(),this.mediaAttached=t,this.interstitial.playoutLimit&&(t.addEventListener(`timeupdate`,this.checkPlayout),this.appendInPlace&&i.on(v.BUFFER_APPENDED,()=>{let e=this.bufferedEnd;this.reachedPlayout(e)&&(this._bufferedEosTime=e,i.trigger(v.BUFFERED_TO_END,void 0))}))})}get appendInPlace(){return this.interstitial.appendInPlace}loadSource(){let e=this.hls;if(e)if(e.url)e.levels.length&&!e.started&&e.startLoad(-1,!0);else{let t=this.assetItem.uri;try{t=kc(t,e.config.primarySessionId||``).href}catch{}e.loadSource(t)}}bufferedInPlaceToEnd(e){var t;if(!this.appendInPlace)return!1;if((t=this.hls)!=null&&t.bufferedToEnd)return!0;if(!e)return!1;let n=Math.min(this._bufferedEosTime||1/0,this.duration),r=this.timelineOffset,i=q.bufferInfo(e,r,0);return this.getAssetTime(i.end)>=n-.02}reachedPlayout(e){let t=this.interstitial.playoutLimit;return this.startOffset+e>=t}get destroyed(){var e;return!((e=this.hls)!=null&&e.userConfig)}get assetId(){return this.assetItem.identifier}get interstitialId(){return this.assetItem.parentIdentifier}get media(){return this.hls?.media||null}get bufferedEnd(){let e=this.media||this.mediaAttached;if(!e)return this._bufferedEosTime?this._bufferedEosTime:this.currentTime;let t=q.bufferInfo(e,e.currentTime,.001);return this.getAssetTime(t.end)}get currentTime(){let e=this.media||this.mediaAttached;return e?this.getAssetTime(e.currentTime):this._currentTime||0}get duration(){let e=this.assetItem.duration;if(!e)return 0;let t=this.interstitial.playoutLimit;if(t){let n=t-this.startOffset;if(n>0&&n<e)return n}return e}get remaining(){let e=this.duration;return e?Math.max(0,e-this.currentTime):0}get startOffset(){return this.assetItem.startOffset}get timelineOffset(){return this.hls?.config.timelineOffset||0}set timelineOffset(e){let t=this.timelineOffset;if(e!==t){let n=e-t;if(Math.abs(n)>1/9e4&&this.hls){if(this.hasDetails)throw Error(`Cannot set timelineOffset after playlists are loaded`);this.hls.config.timelineOffset=e}}}getAssetTime(e){let t=this.timelineOffset,n=this.duration;return Math.min(Math.max(0,e-t),n)}removeMediaListeners(){let e=this.mediaAttached;e&&(this._currentTime=e.currentTime,this.bufferSnapShot(),e.removeEventListener(`timeupdate`,this.checkPlayout))}bufferSnapShot(){if(this.mediaAttached){var e;(e=this.hls)!=null&&e.bufferedToEnd&&(this._bufferedEosTime=this.bufferedEnd)}}destroy(){this.removeMediaListeners(),this.hls&&this.hls.destroy(),this.hls=null,this.tracks=this.mediaAttached=this.checkPlayout=null}attachMedia(e){var t;this.loadSource(),(t=this.hls)==null||t.attachMedia(e)}detachMedia(){var e;this.removeMediaListeners(),this.mediaAttached=null,(e=this.hls)==null||e.detachMedia()}resumeBuffering(){var e;(e=this.hls)==null||e.resumeBuffering()}pauseBuffering(){var e;(e=this.hls)==null||e.pauseBuffering()}transferMedia(){return this.bufferSnapShot(),this.hls?.transferMedia()||null}resetDetails(){let e=this.hls;if(e&&this.hasDetails){e.stopLoad();let t=e=>delete e.details;e.levels.forEach(t),e.allAudioTracks.forEach(t),e.allSubtitleTracks.forEach(t),this.hasDetails=!1}}on(e,t,n){var r;(r=this.hls)==null||r.on(e,t)}once(e,t,n){var r;(r=this.hls)==null||r.once(e,t)}off(e,t,n){var r;(r=this.hls)==null||r.off(e,t)}toString(){return`HlsAssetPlayer: ${Mc(this.assetItem)} ${this.hls?.sessionId} ${this.appendInPlace?`append-in-place`:``}`}},Pc=.033,Fc=class extends k{constructor(e,t){super(`interstitials-sched`,t),this.onScheduleUpdate=void 0,this.eventMap={},this.events=null,this.items=null,this.durations={primary:0,playout:0,integrated:0},this.onScheduleUpdate=e}destroy(){this.reset(),this.onScheduleUpdate=null}reset(){this.eventMap={},this.setDurations(0,0,0),this.events&&this.events.forEach(e=>e.reset()),this.events=this.items=null}resetErrorsInRange(e,t){return this.events?this.events.reduce((n,r)=>e<=r.startOffset&&t>r.startOffset?(delete r.error,n+1):n,0):0}get duration(){let e=this.items;return e?e[e.length-1].end:0}get length(){return this.items?this.items.length:0}getEvent(e){return e&&this.eventMap[e]||null}hasEvent(e){return e in this.eventMap}findItemIndex(e,t){if(e.event)return this.findEventIndex(e.event.identifier);let n=-1;e.nextEvent?n=this.findEventIndex(e.nextEvent.identifier)-1:e.previousEvent&&(n=this.findEventIndex(e.previousEvent.identifier)+1);let r=this.items;if(r)for(r[n]||(t===void 0&&(t=e.start),n=this.findItemIndexAtTime(t));n>=0&&(i=r[n])!=null&&i.event;){var i;n--}return n}findItemIndexAtTime(e,t){let n=this.items;if(n)for(let r=0;r<n.length;r++){let i=n[r];if(t&&t!==`primary`&&(i=i[t]),e===i.start||e>i.start&&e<i.end)return r}return-1}findJumpRestrictedIndex(e,t){let n=this.items;if(n)for(let r=e;r<=t&&n[r];r++){let e=n[r].event;if(e!=null&&e.restrictions.jump&&!e.appendInPlace)return r}return-1}findEventIndex(e){let t=this.items;if(t){for(let n=t.length;n--;)if(t[n].event?.identifier===e)return n}return-1}findAssetIndex(e,t){let n=e.assetList,r=n.length;if(r>1)for(let e=0;e<r;e++){let i=n[e];if(!i.error){let n=i.timelineStart;if(t===n||t>n&&(t<n+(i.duration||0)||e===r-1))return e}}return 0}get assetIdAtEnd(){var e;let t=(e=this.items)==null||(e=e[this.length-1])==null?void 0:e.event;if(t){let e=t.assetList,n=e[e.length-1];if(n)return n.identifier}return null}parseInterstitialDateRanges(e,t){let n=e.main.details,{dateRanges:r}=n,i=this.events,a=this.parseDateRanges(r,{url:n.url},t),o=Object.keys(r),s=i?i.filter(e=>!o.includes(e.identifier)):[];a.length&&a.sort((e,t)=>{let n=e.cue.pre,r=e.cue.post,i=t.cue.pre,a=t.cue.post;if(n&&!i)return-1;if(i&&!n||r&&!a)return 1;if(a&&!r)return-1;if(!n&&!i&&!r&&!a){let n=e.startTime,r=t.startTime;if(n!==r)return n-r}return e.dateRange.tagOrder-t.dateRange.tagOrder}),this.events=a,s.forEach(e=>{this.removeEvent(e)}),this.updateSchedule(e,s)}updateSchedule(e,t=[],n=!1){let r=this.events||[];if(r.length||t.length||this.length<2){let i=this.items,a=this.parseSchedule(r,e);(n||t.length||i?.length!==a.length||a.some((e,t)=>Math.abs(e.playout.start-i[t].playout.start)>.005||Math.abs(e.playout.end-i[t].playout.end)>.005))&&(this.items=a,this.onScheduleUpdate(t,i))}}parseDateRanges(e,t,n){let r=[],i=Object.keys(e);for(let a=0;a<i.length;a++){let o=i[a],s=e[o];if(s.isInterstitial){let e=this.eventMap[o];e?e.setDateRange(s):(e=new Dc(s,t),this.eventMap[o]=e,n===!1&&(e.appendInPlace=n)),r.push(e)}}return r}parseSchedule(e,t){let n=[],r=t.main.details,i=r.live?1/0:r.edge,a=0;if(e=e.filter(e=>!e.error&&!(e.cue.once&&e.hasPlayed)),e.length){this.resolveOffsets(e,t);let r=0,o=0;if(e.forEach((t,s)=>{let c=t.cue.pre,l=t.cue.post,u=e[s-1]||null,d=t.appendInPlace,f=l?i:t.startOffset,p=t.duration,m=t.timelineOccupancy===Tc.Range?p:0,h=t.resumptionOffset,g=u?.startTime===f,_=f+t.cumulativeDuration,v=d?_+p:f+h;if(c||!l&&f<=0){let e=o;o+=m,t.timelineStart=_;let r=a;a+=p,n.push({event:t,start:_,end:v,playout:{start:r,end:a},integrated:{start:e,end:o}})}else if(f<=i){if(!g){let i=f-r;if(i>Pc){let c=r,l=o;o+=i;let u=a;a+=i;let d={previousEvent:e[s-1]||null,nextEvent:t,start:c,end:c+i,playout:{start:u,end:a},integrated:{start:l,end:o}};n.push(d)}else i>0&&u&&(u.cumulativeDuration+=i,n[n.length-1].end=f)}l&&(v=_),t.timelineStart=_;let i=o;o+=m;let c=a;a+=p,n.push({event:t,start:_,end:v,playout:{start:c,end:a},integrated:{start:i,end:o}})}else return;let y=t.resumeTime;r=l||y>i?i:y}),r<i){let e=r,t=o,s=i-r;o+=s;let c=a;a+=s,n.push({previousEvent:n[n.length-1]?.event||null,nextEvent:null,start:r,end:e+s,playout:{start:c,end:a},integrated:{start:t,end:o}})}this.setDurations(i,a,o)}else n.push({previousEvent:null,nextEvent:null,start:0,end:i,playout:{start:0,end:i},integrated:{start:0,end:i}}),this.setDurations(i,i,i);return n}setDurations(e,t,n){this.durations={primary:e,playout:t,integrated:n}}resolveOffsets(e,t){let n=t.main.details,r=n.live?1/0:n.edge,i=0,a=-1;e.forEach((o,s)=>{let c=o.cue.pre,l=o.cue.post,u=c?0:l?r:o.startTime;this.updateAssetDurations(o),a===u?o.cumulativeDuration=i:(i=0,a=u),!l&&o.snapOptions.in&&(o.resumeAnchor=Qt(null,n.fragments,o.startOffset+o.resumptionOffset,0,0)||void 0),o.appendInPlace&&!o.appendInPlaceStarted&&(this.primaryCanResumeInPlaceAt(o,t)||(o.appendInPlace=!1)),!o.appendInPlace&&s+1<e.length&&e[s+1].startTime-e[s].resumeTime<Pc&&(e[s+1].appendInPlace=!1,e[s+1].appendInPlace&&this.warn(`Could not change append strategy for abutting event ${o}`));let d=p(o.resumeOffset)?o.resumeOffset:o.duration;i+=d})}primaryCanResumeInPlaceAt(e,t){let n=e.resumeTime,r=e.startTime+e.resumptionOffset;return Math.abs(n-r)>wc?(this.log(`"${e.identifier}" resumption ${n} not aligned with estimated timeline end ${r}`),!1):!Object.keys(t).some(r=>{let i=t[r].details,a=i.edge;if(n>=a)return this.log(`"${e.identifier}" resumption ${n} past ${r} playlist end ${a}`),!1;let o=Qt(null,i.fragments,n);if(!o)return this.log(`"${e.identifier}" resumption ${n} does not align with any fragments in ${r} playlist (${i.fragStart}-${i.fragmentEnd})`),!0;let s=r===`audio`?.175:0;return Math.abs(o.start-n)<wc+s||Math.abs(o.end-n)<wc+s?!1:(this.log(`"${e.identifier}" resumption ${n} not aligned with ${r} fragment bounds (${o.start}-${o.end} sn: ${o.sn} cc: ${o.cc})`),!0)})}updateAssetDurations(e){if(!e.assetListLoaded)return;let t=e.timelineStart,n=0,r=!1,i=!1;for(let a=0;a<e.assetList.length;a++){let o=e.assetList[a],s=t+n;o.startOffset=n,o.timelineStart=s,r||=o.duration===null,i||=!!o.error;let c=o.error?0:o.duration||0;n+=c}r&&!i?e.duration=Math.max(n,e.duration):e.duration=n}removeEvent(e){e.reset(),delete this.eventMap[e.identifier]}};function Ic(e){return`[${e.event?`"`+e.event.identifier+`"`:`primary`}: ${e.start.toFixed(2)}-${e.end.toFixed(2)}]`}var Lc=class{constructor(e){this.hls=void 0,this.hls=e}destroy(){this.hls=null}loadAssetList(e,t){let n=e.assetListUrl,r;try{r=kc(n,this.hls.sessionId,e.baseUrl)}catch(t){let r=this.assignAssetListError(e,_.ASSET_LIST_LOAD_ERROR,t,n);this.hls.trigger(v.ERROR,r);return}t&&r.protocol!==`data:`&&r.searchParams.set(`_HLS_start_offset`,``+t);let i=this.hls.config,a=i.loader,o=new a(i),s={responseType:`json`,url:r.href},c=i.interstitialAssetListLoadPolicy.default,l={loadPolicy:c,timeout:c.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0};return o.load(s,l,{onSuccess:(t,n,r,i)=>{let a=t.data,o=a?.ASSETS;if(!Array.isArray(o)){let t=this.assignAssetListError(e,_.ASSET_LIST_PARSING_ERROR,Error(`Invalid interstitial asset list`),r.url,n,i);this.hls.trigger(v.ERROR,t);return}e.assetListResponse=a,this.hls.trigger(v.ASSET_LIST_LOADED,{event:e,assetListResponse:a,networkDetails:i})},onError:(t,n,r,i)=>{let a=this.assignAssetListError(e,_.ASSET_LIST_LOAD_ERROR,Error(`Error loading X-ASSET-LIST: HTTP status ${t.code} ${t.text} (${n.url})`),n.url,i,r);this.hls.trigger(v.ERROR,a)},onTimeout:(t,n,r)=>{let i=this.assignAssetListError(e,_.ASSET_LIST_LOAD_TIMEOUT,Error(`Timeout loading X-ASSET-LIST (${n.url})`),n.url,t,r);this.hls.trigger(v.ERROR,i)}}),this.hls.trigger(v.ASSET_LIST_LOADING,{event:e}),o}assignAssetListError(e,t,n,r,i,a){return e.error=n,{type:g.NETWORK_ERROR,details:t,fatal:!1,interstitial:e,url:r,error:n,networkDetails:a,stats:i}}};function Rc(e){var t;e==null||(t=e.play())==null||t.catch(()=>{})}function zc(e,t){return`[${e}] Advancing timeline position to ${t}`}var Bc=class extends k{constructor(e,t){super(`interstitials`,e.logger),this.HlsPlayerClass=void 0,this.hls=void 0,this.assetListLoader=void 0,this.mediaSelection=null,this.altSelection=null,this.media=null,this.detachedData=null,this.requiredTracks=null,this.manager=null,this.playerQueue=[],this.bufferedPos=-1,this.timelinePos=-1,this.schedule=void 0,this.playingItem=null,this.bufferingItem=null,this.waitingItem=null,this.endedItem=null,this.playingAsset=null,this.endedAsset=null,this.bufferingAsset=null,this.shouldPlay=!1,this.onPlay=()=>{this.shouldPlay=!0},this.onPause=()=>{this.shouldPlay=!1},this.onSeeking=()=>{let e=this.currentTime;if(e===void 0||this.playbackDisabled||!this.schedule)return;let t=e-this.timelinePos;if(Math.abs(t)<1/7056e5)return;let n=t<=-.01;this.timelinePos===-1&&!this.effectivePlayingItem&&this.checkStart(),this.timelinePos=e,this.bufferedPos=e;let r=this.playingItem;if(!r){this.checkBuffer();return}if(n&&this.schedule.resetErrorsInRange(e,e-t)&&this.updateSchedule(!0),this.checkBuffer(),n&&e<r.start||e>=r.end){var i;let t=this.findItemIndex(r),a=this.schedule.findItemIndexAtTime(e);if(a===-1&&(a=t+(n?-1:1),this.log(`seeked ${n?`back `:``}to position not covered by schedule ${e} (resolving from ${t} to ${a})`)),!this.isInterstitial(r)&&(i=this.media)!=null&&i.paused&&(this.shouldPlay=!1),!n&&a>t){let e=this.schedule.findJumpRestrictedIndex(t+1,a);if(e>t){this.setSchedulePosition(e);return}}this.setSchedulePosition(a);return}let a=this.playingAsset;if(!a){if(this.playingLastItem&&this.isInterstitial(r)){let t=r.event.assetList[0];t&&(this.endedItem=this.playingItem,this.playingItem=null,this.setScheduleToAssetAtTime(e,t))}return}let o=a.timelineStart,s=a.duration||0;if(n&&e<o||e>=o+s){var c;(c=r.event)!=null&&c.appendInPlace&&(this.clearAssetPlayers(r.event,r),this.flushFrontBuffer(e)),this.setScheduleToAssetAtTime(e,a)}},this.onTimeupdate=()=>{let e=this.currentTime;if(e===void 0||this.playbackDisabled)return;if(this.timelinePos===-1&&!this.effectivePlayingItem&&this.checkStart(),e>this.timelinePos)this.timelinePos=e,e>this.bufferedPos&&this.checkBuffer();else return;let t=this.playingItem;if(!t||this.playingLastItem)return;if(e>=t.end){this.timelinePos=t.end;let e=this.findItemIndex(t);this.setSchedulePosition(e+1)}let n=this.playingAsset;n&&e>=n.timelineStart+(n.duration||0)&&this.setScheduleToAssetAtTime(e,n)},this.onScheduleUpdate=(e,t)=>{let n=this.schedule;if(!n)return;let r=this.playingItem,i=n.events||[],a=n.items||[],o=n.durations,s=e.map(e=>e.identifier),c=!!(i.length||s.length);(c||t)&&this.log(`INTERSTITIALS_UPDATED (${i.length}): ${i}
|
|
29
|
+
Schedule: ${a.map(e=>Ic(e))} pos: ${this.timelinePos}`),s.length&&this.log(`Removed events ${s}`);let l=null,u=null;r&&(l=this.updateItem(r,this.timelinePos),this.itemsMatch(r,l)?this.playingItem=l:this.waitingItem=this.endedItem=null),this.waitingItem=this.updateItem(this.waitingItem),this.endedItem=this.updateItem(this.endedItem);let d=this.bufferingItem;if(d&&(u=this.updateItem(d,this.bufferedPos),this.itemsMatch(d,u)?this.bufferingItem=u:d.event&&(this.bufferingItem=this.playingItem,this.clearInterstitial(d.event,null))),e.forEach(e=>{e.assetList.forEach(e=>{this.clearAssetPlayer(e.identifier,null)})}),this.playerQueue.forEach(e=>{if(e.interstitial.appendInPlace){let t=e.assetItem.timelineStart,n=e.timelineOffset-t;if(n)try{e.timelineOffset=t}catch(r){Math.abs(n)>wc&&this.warn(`${r} ("${e.assetId}" ${e.timelineOffset}->${t})`)}}}),c||t){if(this.hls.trigger(v.INTERSTITIALS_UPDATED,{events:i.slice(0),schedule:a.slice(0),durations:o,removedIds:s}),this.isInterstitial(r)&&s.includes(r.event.identifier)){this.warn(`Interstitial "${r.event.identifier}" removed while playing`),this.primaryFallback(r.event);return}r&&this.trimInPlace(l,r),d&&u!==l&&this.trimInPlace(u,d),this.checkBuffer()}},this.hls=e,this.HlsPlayerClass=t,this.assetListLoader=new Lc(e),this.schedule=new Fc(this.onScheduleUpdate,e.logger),this.registerListeners()}registerListeners(){let e=this.hls;e&&(e.on(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(v.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.on(v.AUDIO_TRACK_UPDATED,this.onAudioTrackUpdated,this),e.on(v.SUBTITLE_TRACK_SWITCH,this.onSubtitleTrackSwitch,this),e.on(v.SUBTITLE_TRACK_UPDATED,this.onSubtitleTrackUpdated,this),e.on(v.EVENT_CUE_ENTER,this.onInterstitialCueEnter,this),e.on(v.ASSET_LIST_LOADED,this.onAssetListLoaded,this),e.on(v.BUFFER_APPENDED,this.onBufferAppended,this),e.on(v.BUFFER_FLUSHED,this.onBufferFlushed,this),e.on(v.BUFFERED_TO_END,this.onBufferedToEnd,this),e.on(v.MEDIA_ENDED,this.onMediaEnded,this),e.on(v.ERROR,this.onError,this),e.on(v.DESTROYING,this.onDestroying,this))}unregisterListeners(){let e=this.hls;e&&(e.off(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(v.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.off(v.AUDIO_TRACK_UPDATED,this.onAudioTrackUpdated,this),e.off(v.SUBTITLE_TRACK_SWITCH,this.onSubtitleTrackSwitch,this),e.off(v.SUBTITLE_TRACK_UPDATED,this.onSubtitleTrackUpdated,this),e.off(v.EVENT_CUE_ENTER,this.onInterstitialCueEnter,this),e.off(v.ASSET_LIST_LOADED,this.onAssetListLoaded,this),e.off(v.BUFFER_CODECS,this.onBufferCodecs,this),e.off(v.BUFFER_APPENDED,this.onBufferAppended,this),e.off(v.BUFFER_FLUSHED,this.onBufferFlushed,this),e.off(v.BUFFERED_TO_END,this.onBufferedToEnd,this),e.off(v.MEDIA_ENDED,this.onMediaEnded,this),e.off(v.ERROR,this.onError,this),e.off(v.DESTROYING,this.onDestroying,this))}startLoad(){this.resumeBuffering()}stopLoad(){this.pauseBuffering()}resumeBuffering(){var e;(e=this.getBufferingPlayer())==null||e.resumeBuffering()}pauseBuffering(){var e;(e=this.getBufferingPlayer())==null||e.pauseBuffering()}destroy(){this.unregisterListeners(),this.stopLoad(),this.assetListLoader&&this.assetListLoader.destroy(),this.emptyPlayerQueue(),this.clearScheduleState(),this.schedule&&this.schedule.destroy(),this.media=this.detachedData=this.mediaSelection=this.requiredTracks=this.altSelection=this.schedule=this.manager=null,this.hls=this.HlsPlayerClass=this.log=null,this.assetListLoader=null,this.onPlay=this.onPause=this.onSeeking=this.onTimeupdate=null,this.onScheduleUpdate=null}onDestroying(){let e=this.primaryMedia||this.media;e&&this.removeMediaListeners(e)}removeMediaListeners(e){li(e,`play`,this.onPlay),li(e,`pause`,this.onPause),li(e,`seeking`,this.onSeeking),li(e,`timeupdate`,this.onTimeupdate)}onMediaAttaching(e,t){let n=this.media=t.media;ci(n,`seeking`,this.onSeeking),ci(n,`timeupdate`,this.onTimeupdate),ci(n,`play`,this.onPlay),ci(n,`pause`,this.onPause)}onMediaAttached(e,t){let n=this.effectivePlayingItem,r=this.detachedData;if(this.detachedData=null,n===null)this.checkStart();else if(!r){this.clearScheduleState();let e=this.findItemIndex(n);this.setSchedulePosition(e)}}clearScheduleState(){this.log(`clear schedule state`),this.playingItem=this.bufferingItem=this.waitingItem=this.endedItem=this.playingAsset=this.endedAsset=this.bufferingAsset=null}onMediaDetaching(e,t){let n=!!t.transferMedia,r=this.media;if(this.media=null,!n&&(r&&this.removeMediaListeners(r),this.detachedData)){let e=this.getBufferingPlayer();e&&(this.log(`Removing schedule state for detachedData and ${e}`),this.playingAsset=this.endedAsset=this.bufferingAsset=this.bufferingItem=this.waitingItem=this.detachedData=null,e.detachMedia()),this.shouldPlay=!1}}get interstitialsManager(){if(!this.hls)return null;if(this.manager)return this.manager;let e=this,t=()=>e.bufferingItem||e.waitingItem,n=t=>t&&e.getAssetPlayer(t.identifier),r=(t,r,i,o,s)=>{if(t){let c=t[r].start,l=t.event;if(l){if(r===`playout`||l.timelineOccupancy!==Tc.Point){let e=n(i);e?.interstitial===l&&(c+=e.assetItem.startOffset+e[s])}}else{let n=o===`bufferedPos`?a():e[o];c+=n-t.start}return c}return 0},i=(t,n)=>{var r;if(t!==0&&n!==`primary`&&(r=e.schedule)!=null&&r.length){let r=e.schedule.findItemIndexAtTime(t),i=e.schedule.items?.[r];if(i)return t+(i[n].start-i.start)}return t},a=()=>{let t=e.bufferedPos;return t===Number.MAX_VALUE?o(`primary`):Math.max(t,0)},o=t=>{var n;return(n=e.primaryDetails)!=null&&n.live?e.primaryDetails.edge:e.schedule?.durations[t]||0},s=(t,i)=>{var a;let o=e.effectivePlayingItem;if(o!=null&&(a=o.event)!=null&&a.restrictions.skip||!e.schedule)return;e.log(`seek to ${t} "${i}"`);let s=e.effectivePlayingItem,c=e.schedule.findItemIndexAtTime(t,i),l=e.schedule.items?.[c],u=e.getBufferingPlayer(),d=u?.interstitial?.appendInPlace,f=s&&e.itemsMatch(s,l);if(s&&(d||f)){let a=n(e.playingAsset),o=a?.media||e.primaryMedia;if(o){let n=i===`primary`?o.currentTime:r(s,i,e.playingAsset,`timelinePos`,`currentTime`),c=t-n,l=(d?n:o.currentTime)+c;if(l>=0&&(!a||d||l<=a.duration)){o.currentTime=l;return}}}if(l){let n=t;if(i!==`primary`){let e=t-l[i].start;n=l.start+e}let r=!e.isInterstitial(l);if((!e.isInterstitial(s)||s.event.appendInPlace)&&(r||l.event.appendInPlace)){let t=e.media||(d?u?.media:null);t&&(t.currentTime=n)}else if(s){let a=e.findItemIndex(s);if(c>a){let t=e.schedule.findJumpRestrictedIndex(a+1,c);if(t>a){e.setSchedulePosition(t);return}}let o=0;if(r)e.timelinePos=n,e.checkBuffer();else{let e=l.event.assetList,n=t-(l[i]||l).start;for(let t=e.length;t--;){let r=e[t];if(r.duration&&n>=r.startOffset&&n<r.startOffset+r.duration){o=t;break}}}e.setSchedulePosition(c,o)}}},c=()=>{let n=e.effectivePlayingItem;if(e.isInterstitial(n))return n;let r=t();return e.isInterstitial(r)?r:null},l={get bufferedEnd(){let n=t(),i=e.bufferingItem;return i&&i===n&&(r(i,`playout`,e.bufferingAsset,`bufferedPos`,`bufferedEnd`)-i.playout.start||e.bufferingAsset?.startOffset)||0},get currentTime(){let t=c(),n=e.effectivePlayingItem;return n&&n===t?r(n,`playout`,e.effectivePlayingAsset,`timelinePos`,`currentTime`)-n.playout.start:0},set currentTime(t){let n=c(),r=e.effectivePlayingItem;r&&r===n&&s(t+r.playout.start,`playout`)},get duration(){let e=c();return e?e.playout.end-e.playout.start:0},get assetPlayers(){let t=c()?.event.assetList;return t?t.map(t=>e.getAssetPlayer(t.identifier)):[]},get playingIndex(){let t=c()?.event;return t&&e.effectivePlayingAsset?t.findAssetIndex(e.effectivePlayingAsset):-1},get scheduleItem(){return c()}};return this.manager={get events(){var t;return((t=e.schedule)==null||(t=t.events)==null?void 0:t.slice(0))||[]},get schedule(){var t;return((t=e.schedule)==null||(t=t.items)==null?void 0:t.slice(0))||[]},get interstitialPlayer(){return c()?l:null},get playerQueue(){return e.playerQueue.slice(0)},get bufferingAsset(){return e.bufferingAsset},get bufferingItem(){return t()},get bufferingIndex(){let n=t();return e.findItemIndex(n)},get playingAsset(){return e.effectivePlayingAsset},get playingItem(){return e.effectivePlayingItem},get playingIndex(){let t=e.effectivePlayingItem;return e.findItemIndex(t)},primary:{get bufferedEnd(){return a()},get currentTime(){let t=e.timelinePos;return t>0?t:0},set currentTime(e){s(e,`primary`)},get duration(){return o(`primary`)},get seekableStart(){return e.primaryDetails?.fragmentStart||0}},integrated:{get bufferedEnd(){return r(t(),`integrated`,e.bufferingAsset,`bufferedPos`,`bufferedEnd`)},get currentTime(){return r(e.effectivePlayingItem,`integrated`,e.effectivePlayingAsset,`timelinePos`,`currentTime`)},set currentTime(e){s(e,`integrated`)},get duration(){return o(`integrated`)},get seekableStart(){return i(e.primaryDetails?.fragmentStart||0,`integrated`)}},skip:()=>{let t=e.effectivePlayingItem,n=t?.event;if(n&&!n.restrictions.skip){let r=e.findItemIndex(t);n.appendInPlace?s(t.playout.start+t.event.duration+.001,`playout`):e.advanceAfterAssetEnded(n,r,1/0)}}}}get effectivePlayingItem(){return this.waitingItem||this.playingItem||this.endedItem}get effectivePlayingAsset(){return this.playingAsset||this.endedAsset}get playingLastItem(){let e=this.playingItem,t=this.schedule?.items;return!this.playbackStarted||!e||!t?!1:this.findItemIndex(e)===t.length-1}get playbackStarted(){return this.effectivePlayingItem!==null}get currentTime(){var e;if(this.mediaSelection===null)return;let t=this.waitingItem||this.playingItem;if(this.isInterstitial(t)&&!t.event.appendInPlace)return;let n=this.media;!n&&(e=this.bufferingItem)!=null&&(e=e.event)!=null&&e.appendInPlace&&(n=this.primaryMedia);let r=n?.currentTime;if(!(r===void 0||!p(r)))return r}get primaryMedia(){return this.media||this.detachedData?.media||null}isInterstitial(e){return!!(e!=null&&e.event)}retreiveMediaSource(e,t){let n=this.getAssetPlayer(e);n&&this.transferMediaFromPlayer(n,t)}transferMediaFromPlayer(e,t){let n=e.interstitial.appendInPlace,r=e.media;if(n&&r===this.primaryMedia){if(this.bufferingAsset=null,(!t||this.isInterstitial(t)&&!t.event.appendInPlace)&&t&&r){this.detachedData={media:r};return}let n=e.transferMedia();this.log(`transfer MediaSource from ${e} ${W(n)}`),this.detachedData=n}else t&&r&&(this.shouldPlay||=!r.paused)}transferMediaTo(e,t){if(e.media===t)return;let n=null,r=this.hls,i=e!==r,a=i&&e.interstitial.appendInPlace,o=this.detachedData?.mediaSource,s;if(r.media)a&&(n=r.transferMedia(),this.detachedData=n),s=`Primary`;else if(o){let e=this.getBufferingPlayer();e?(n=e.transferMedia(),s=`${e}`):s=`detached MediaSource`}else s=`detached media`;if(!n){if(o)n=this.detachedData,this.log(`using detachedData: MediaSource ${W(n)}`);else if(!this.detachedData||r.media===t){let e=this.playerQueue;e.length>1&&e.forEach(e=>{if(i&&e.interstitial.appendInPlace!==a){let t=e.interstitial;this.clearInterstitial(e.interstitial,null),t.appendInPlace=!1,t.appendInPlace&&this.warn(`Could not change append strategy for queued assets ${t}`)}}),this.hls.detachMedia(),this.detachedData={media:t}}}let c=n&&`mediaSource`in n&&n.mediaSource?.readyState!==`closed`,l=c&&n?n:t;this.log(`${c?`transfering MediaSource`:`attaching media`} to ${i?e:`Primary`} from ${s} (media.currentTime: ${t.currentTime})`);let u=this.schedule;if(l===n&&u){let t=i&&e.assetId===u.assetIdAtEnd;l.overrides={duration:u.duration,endOfStream:!i||t,cueRemoval:!i}}e.attachMedia(l)}onInterstitialCueEnter(){this.onTimeupdate()}checkStart(){let e=this.schedule,t=e?.events;if(!t||this.playbackDisabled||!this.media)return;this.bufferedPos===-1&&(this.bufferedPos=0);let n=this.timelinePos,r=this.effectivePlayingItem;if(n===-1){let n=this.hls.startPosition;if(this.timelinePos=n,t.length===0)this.setSchedulePosition(0);else if(t[0].cue.pre){this.log(zc(`checkStart (preroll)`,n));let r=e.findEventIndex(t[0].identifier);this.setSchedulePosition(r)}else if(n>=0||!this.primaryLive){this.log(zc(`checkStart`,n));let t=this.timelinePos=n>0?n:0,r=e.findItemIndexAtTime(t);this.setSchedulePosition(r)}else this.hls.liveSyncPosition===0?this.setSchedulePosition(0):this.log(`[checkStart] waiting for live start`)}else if(r&&!this.playingItem){this.log(zc(`checkStart (playing item)`,r.start));let t=e.findItemIndex(r);this.setSchedulePosition(t)}}advanceAssetBuffering(e,t){let n=e.event,r=Ac(n,n.findAssetIndex(t));if(!n.isAssetPastPlayoutLimit(r))this.bufferedToEvent(e,r);else if(this.schedule){let t=this.schedule.items?.[this.findItemIndex(e)+1];t&&this.bufferedToItem(t)}}advanceAfterAssetEnded(e,t,n){let r=Ac(e,n);if(!e.isAssetPastPlayoutLimit(r)){if(e.appendInPlace){let t=e.assetList[r];t&&this.advanceInPlace(t.timelineStart)}this.setSchedulePosition(t,r)}else if(this.schedule){let n=this.schedule.items;if(n){let r=t+1;if(r>=n.length){this.setSchedulePosition(-1);return}let i=e.resumeTime;this.timelinePos<i&&(this.log(zc(`advanceAfterAssetEnded`,i)),this.timelinePos=i,e.appendInPlace&&this.advanceInPlace(i),this.checkBuffer(this.bufferedPos<i)),this.setSchedulePosition(r)}}}setScheduleToAssetAtTime(e,t){let n=this.schedule;if(!n)return;let r=t.parentIdentifier,i=n.getEvent(r);if(i){let t=n.findEventIndex(r),a=n.findAssetIndex(i,e);this.advanceAfterAssetEnded(i,t,a-1)}}setSchedulePosition(e,t){let n=this.schedule?.items;if(!n||this.playbackDisabled)return;let r=e>=0?n[e]:null;this.log(`setSchedulePosition ${e}, ${t} (${r&&Ic(r)}) pos: ${this.timelinePos}`);let i=this.waitingItem||this.playingItem,a=this.playingLastItem;if(this.isInterstitial(i)){let s=i.event,c=this.playingAsset,l=c?.identifier,u=l?this.getAssetPlayer(l):null;if(u&&l&&(!this.eventItemsMatch(i,r)||t!==void 0&&l!==s.assetList[t].identifier)){var o;let t=s.findAssetIndex(c);if(this.log(`INTERSTITIAL_ASSET_ENDED ${t+1}/${s.assetList.length} ${Mc(c)}`),this.endedAsset=c,this.playingAsset=null,this.hls.trigger(v.INTERSTITIAL_ASSET_ENDED,{asset:c,assetListIndex:t,event:s,schedule:n.slice(0),scheduleIndex:e,player:u}),i!==this.playingItem){this.itemsMatch(i,this.playingItem)&&!this.playingAsset&&this.advanceAfterAssetEnded(s,this.findItemIndex(this.playingItem),t);return}this.retreiveMediaSource(l,r),u.media&&!((o=this.detachedData)!=null&&o.mediaSource)&&u.detachMedia()}if(!this.eventItemsMatch(i,r)&&(this.endedItem=i,this.playingItem=null,this.log(`INTERSTITIAL_ENDED ${s} ${Ic(i)}`),s.hasPlayed=!0,this.hls.trigger(v.INTERSTITIAL_ENDED,{event:s,schedule:n.slice(0),scheduleIndex:e}),s.cue.once)){this.updateSchedule();let e=this.schedule?.items;if(r&&e){let n=this.findItemIndex(r);this.advanceSchedule(n,e,t,i,a)}return}}this.advanceSchedule(e,n,t,i,a)}advanceSchedule(e,t,n,r,i){let a=this.schedule;if(!a)return;let o=t[e]||null,s=this.primaryMedia,c=this.playerQueue;if(c.length&&c.forEach(t=>{let n=t.interstitial,r=a.findEventIndex(n.identifier);(r<e||r>e+1)&&this.clearInterstitial(n,o)}),this.isInterstitial(o)){this.timelinePos=Math.min(Math.max(this.timelinePos,o.start),o.end);let i=o.event;if(n===void 0){n=a.findAssetIndex(i,this.timelinePos);let t=Ac(i,n-1);if(i.isAssetPastPlayoutLimit(t)||i.appendInPlace&&this.timelinePos===o.end){this.advanceAfterAssetEnded(i,e,n);return}n=t}let c=this.waitingItem;this.assetsBuffered(o,s)||this.setBufferingItem(o);let l=this.preloadAssets(i,n);if(this.eventItemsMatch(o,c||r)||(this.waitingItem=o,this.log(`INTERSTITIAL_STARTED ${Ic(o)} ${i.appendInPlace?`append in place`:``}`),this.hls.trigger(v.INTERSTITIAL_STARTED,{event:i,schedule:t.slice(0),scheduleIndex:e})),!i.assetListLoaded){this.log(`Waiting for ASSET-LIST to complete loading ${i}`);return}if(i.assetListLoader&&=(i.assetListLoader.destroy(),void 0),!s){this.log(`Waiting for attachMedia to start Interstitial ${i}`);return}this.waitingItem=this.endedItem=null,this.playingItem=o;let u=i.assetList[n];if(!u){this.advanceAfterAssetEnded(i,e,n||0);return}if(l||=this.getAssetPlayer(u.identifier),l===null||l.destroyed){let e=i.assetList.length;this.warn(`asset ${n+1}/${e} player destroyed ${i}`),l=this.createAssetPlayer(i,u,n),l.loadSource()}if(!this.eventItemsMatch(o,this.bufferingItem)&&i.appendInPlace&&this.isAssetBuffered(u))return;this.startAssetPlayer(l,n,t,e,s),this.shouldPlay&&Rc(l.media)}else o?(this.resumePrimary(o,e,r),this.shouldPlay&&Rc(this.hls.media)):i&&this.isInterstitial(r)&&(this.endedItem=null,this.playingItem=r,r.event.appendInPlace||this.attachPrimary(a.durations.primary,null))}get playbackDisabled(){return this.hls.config.enableInterstitialPlayback===!1}get primaryDetails(){return this.mediaSelection?.main.details}get primaryLive(){var e;return!!((e=this.primaryDetails)!=null&&e.live)}resumePrimary(e,t,n){var r;if(this.playingItem=e,this.playingAsset=this.endedAsset=null,this.waitingItem=this.endedItem=null,this.bufferedToItem(e),this.log(`resuming ${Ic(e)}`),!((r=this.detachedData)!=null&&r.mediaSource)){let n=this.timelinePos;(n<e.start||n>=e.end)&&(n=this.getPrimaryResumption(e,t),this.log(zc(`resumePrimary`,n)),this.timelinePos=n),this.attachPrimary(n,e)}if(!n)return;let i=this.schedule?.items;i&&(this.log(`INTERSTITIALS_PRIMARY_RESUMED ${Ic(e)}`),this.hls.trigger(v.INTERSTITIALS_PRIMARY_RESUMED,{schedule:i.slice(0),scheduleIndex:t}),this.checkBuffer())}getPrimaryResumption(e,t){let n=e.start;if(this.primaryLive){let e=this.primaryDetails;if(t===0)return this.hls.startPosition;if(e&&(n<e.fragmentStart||n>e.edge))return this.hls.liveSyncPosition||-1}return n}isAssetBuffered(e){let t=this.getAssetPlayer(e.identifier);return t!=null&&t.hls?t.hls.bufferedToEnd:q.bufferInfo(this.primaryMedia,this.timelinePos,0).end+1>=e.timelineStart+(e.duration||0)}attachPrimary(e,t,n){t?this.setBufferingItem(t):this.bufferingItem=this.playingItem,this.bufferingAsset=null;let r=this.primaryMedia;if(!r)return;let i=this.hls;i.media?this.checkBuffer():(this.transferMediaTo(i,r),n&&this.startLoadingPrimaryAt(e,n)),n||(this.log(zc(`attachPrimary`,e)),this.timelinePos=e,this.startLoadingPrimaryAt(e,n))}startLoadingPrimaryAt(e,t){let n=this.hls;!n.loadingEnabled||!n.media||Math.abs((n.mainForwardBufferInfo?.start||n.media.currentTime)-e)>.5?n.startLoad(e,t):n.bufferingEnabled||n.resumeBuffering()}onManifestLoading(){var e;this.stopLoad(),(e=this.schedule)==null||e.reset(),this.emptyPlayerQueue(),this.clearScheduleState(),this.shouldPlay=!1,this.bufferedPos=this.timelinePos=-1,this.mediaSelection=this.altSelection=this.manager=this.requiredTracks=null,this.hls.off(v.BUFFER_CODECS,this.onBufferCodecs,this),this.hls.on(v.BUFFER_CODECS,this.onBufferCodecs,this)}onLevelUpdated(e,t){if(t.level===-1||!this.schedule)return;let n=this.hls.levels[t.level];if(!n.details)return;let r=E(E({},this.mediaSelection||this.altSelection),{},{main:n});this.mediaSelection=r,this.schedule.parseInterstitialDateRanges(r,this.hls.config.interstitialAppendInPlace),!this.effectivePlayingItem&&this.schedule.items&&this.checkStart()}onAudioTrackUpdated(e,t){let n=this.hls.audioTracks[t.id],r=this.mediaSelection;if(!r){this.altSelection=E(E({},this.altSelection),{},{audio:n});return}let i=E(E({},r),{},{audio:n});this.mediaSelection=i}onSubtitleTrackUpdated(e,t){let n=this.hls.subtitleTracks[t.id],r=this.mediaSelection;if(!r){this.altSelection=E(E({},this.altSelection),{},{subtitles:n});return}let i=E(E({},r),{},{subtitles:n});this.mediaSelection=i}onAudioTrackSwitching(e,t){let n=Bt(t);this.playerQueue.forEach(({hls:e})=>e&&(e.setAudioOption(t)||e.setAudioOption(n)))}onSubtitleTrackSwitch(e,t){let n=Bt(t);this.playerQueue.forEach(({hls:e})=>e&&(e.setSubtitleOption(t)||t.id!==-1&&e.setSubtitleOption(n)))}onBufferCodecs(e,t){let n=t.tracks;n&&(this.requiredTracks=n)}onBufferAppended(e,t){this.checkBuffer()}onBufferFlushed(e,t){let n=this.playingItem;if(n&&!this.itemsMatch(n,this.bufferingItem)&&!this.isInterstitial(n)){let e=this.timelinePos;this.bufferedPos=e,this.checkBuffer()}}onBufferedToEnd(e){if(!this.schedule)return;let t=this.schedule.events;if(this.bufferedPos<Number.MAX_VALUE&&t){for(let e=0;e<t.length;e++){let n=t[e];if(n.cue.post){let e=this.schedule.findEventIndex(n.identifier),t=this.schedule.items?.[e];this.isInterstitial(t)&&this.eventItemsMatch(t,this.bufferingItem)&&this.bufferedToItem(t,0);break}}this.bufferedPos=Number.MAX_VALUE}}onMediaEnded(e){let t=this.playingItem;if(!this.playingLastItem&&t){let e=this.findItemIndex(t);this.setSchedulePosition(e+1)}else this.shouldPlay=!1}updateItem(e,t){let n=this.schedule?.items;return e&&n&&n[this.findItemIndex(e,t)]||null}trimInPlace(e,t){if(this.isInterstitial(e)&&e.event.appendInPlace&&t.end-e.end>.25){e.event.assetList.forEach((t,n)=>{e.event.isAssetPastPlayoutLimit(n)&&this.clearAssetPlayer(t.identifier,null)});let n=e.end+.25,r=q.bufferInfo(this.primaryMedia,n,0);(r.end>n||(r.nextStart||0)>n)&&(this.log(`trim buffered interstitial ${Ic(e)} (was ${Ic(t)})`),this.attachPrimary(n,null,!0),this.flushFrontBuffer(n))}}itemsMatch(e,t){return!!t&&(e===t||e.event&&t.event&&this.eventItemsMatch(e,t)||!e.event&&!t.event&&this.findItemIndex(e)===this.findItemIndex(t))}eventItemsMatch(e,t){return!!t&&(e===t||e.event.identifier===t.event?.identifier)}findItemIndex(e,t){return e&&this.schedule?this.schedule.findItemIndex(e,t):-1}updateSchedule(e=!1){var t;let n=this.mediaSelection;n&&((t=this.schedule)==null||t.updateSchedule(n,[],e))}checkBuffer(e){let t=this.schedule?.items;if(!t)return;let n=q.bufferInfo(this.primaryMedia,this.timelinePos,0);e&&(this.bufferedPos=this.timelinePos),e||=n.len<1,this.updateBufferedPos(n.end,t,e)}updateBufferedPos(e,t,n){let r=this.schedule,i=this.bufferingItem;if(this.bufferedPos>e||!r)return;if(t.length===1&&this.itemsMatch(t[0],i)){this.bufferedPos=e;return}let a=this.playingItem,o=this.findItemIndex(a),s=r.findItemIndexAtTime(e);if(this.bufferedPos<e){var c;let n=this.findItemIndex(i),r=Math.min(n+1,t.length-1),a=t[r];if((s===-1&&i&&e>=i.end||(c=a.event)!=null&&c.appendInPlace&&e+.01>=a.start)&&(s=r),this.isInterstitial(i)){let e=i.event;if(r-o>1&&e.appendInPlace===!1||e.assetList.length===0&&e.assetListLoader)return}if(this.bufferedPos=e,s>n&&s>o)this.bufferedToItem(a);else{let t=this.primaryDetails;this.primaryLive&&t&&e>t.edge-t.targetduration&&a.start<t.edge+this.hls.config.interstitialLiveLookAhead&&this.isInterstitial(a)&&this.preloadAssets(a.event,0)}}else n&&a&&!this.itemsMatch(a,i)&&(s===o?this.bufferedToItem(a):s===o+1&&this.bufferedToItem(t[s]))}assetsBuffered(e,t){return e.event.assetList.length===0?!1:!e.event.assetList.some(e=>{let n=this.getAssetPlayer(e.identifier);return!(n!=null&&n.bufferedInPlaceToEnd(t))})}setBufferingItem(e){let t=this.bufferingItem,n=this.schedule;if(!this.itemsMatch(e,t)&&n){let{items:r,events:i}=n;if(!r||!i)return t;let a=this.isInterstitial(e),o=this.getBufferingPlayer();this.bufferingItem=e,this.bufferedPos=Math.max(e.start,Math.min(e.end,this.timelinePos));let s=o?o.remaining:t?t.end-this.timelinePos:0;if(this.log(`INTERSTITIALS_BUFFERED_TO_BOUNDARY ${Ic(e)}`+(t?` (${s.toFixed(2)} remaining)`:``)),!this.playbackDisabled)if(a){let t=n.findAssetIndex(e.event,this.bufferedPos);e.event.assetList.forEach((e,n)=>{let r=this.getAssetPlayer(e.identifier);r&&(n===t&&r.loadSource(),r.resumeBuffering())})}else this.hls.resumeBuffering(),this.playerQueue.forEach(e=>e.pauseBuffering());this.hls.trigger(v.INTERSTITIALS_BUFFERED_TO_BOUNDARY,{events:i.slice(0),schedule:r.slice(0),bufferingIndex:this.findItemIndex(e),playingIndex:this.findItemIndex(this.playingItem)})}else this.bufferingItem!==e&&(this.bufferingItem=e);return t}bufferedToItem(e,t=0){let n=this.setBufferingItem(e);if(!this.playbackDisabled){if(this.isInterstitial(e))this.bufferedToEvent(e,t);else if(n!==null){this.bufferingAsset=null;let t=this.detachedData;t&&t.mediaSource?this.attachPrimary(e.start,e,!0):this.preloadPrimary(e)}}}preloadPrimary(e){let t=this.findItemIndex(e),n=this.getPrimaryResumption(e,t);this.startLoadingPrimaryAt(n)}bufferedToEvent(e,t){let n=e.event,r=n.assetList.length===0&&!n.assetListLoader,i=n.cue.once;if(r||!i){let e=this.preloadAssets(n,t);if(e!=null&&e.interstitial.appendInPlace){let t=this.primaryMedia;t&&this.bufferAssetPlayer(e,t)}}}preloadAssets(e,t){let n=e.assetUrl,r=e.assetList.length,i=r===0&&!e.assetListLoader,a=e.cue.once;if(i){let i=e.timelineStart;if(e.appendInPlace){var o;let t=this.playingItem;!this.isInterstitial(t)&&(t==null||(o=t.nextEvent)==null?void 0:o.identifier)===e.identifier&&this.flushFrontBuffer(i+.25)}let a,s=0;if(!this.playingItem&&this.primaryLive&&(s=this.hls.startPosition,s===-1&&(s=this.hls.liveSyncPosition||0)),s&&!(e.cue.pre||e.cue.post)){let e=s-i;e>0&&(a=Math.round(e*1e3)/1e3)}if(this.log(`Load interstitial asset ${t+1}/${n?1:r} ${e}${a?` live-start: ${s} start-offset: ${a}`:``}`),n)return this.createAsset(e,0,0,i,e.duration,n);let c=this.assetListLoader.loadAssetList(e,a);c&&(e.assetListLoader=c)}else if(!a&&r){for(let n=t;n<r;n++){let t=e.assetList[n],r=this.getAssetPlayerQueueIndex(t.identifier);(r===-1||this.playerQueue[r].destroyed)&&!t.error&&this.createAssetPlayer(e,t,n)}let n=e.assetList[t];if(n){let e=this.getAssetPlayer(n.identifier);return e&&e.loadSource(),e}}return null}flushFrontBuffer(e){let t=this.requiredTracks;t&&(this.log(`Removing front buffer starting at ${e}`),Object.keys(t).forEach(t=>{this.hls.trigger(v.BUFFER_FLUSHING,{startOffset:e,endOffset:1/0,type:t})}))}getAssetPlayerQueueIndex(e){let t=this.playerQueue;for(let n=0;n<t.length;n++)if(e===t[n].assetId)return n;return-1}getAssetPlayer(e){let t=this.getAssetPlayerQueueIndex(e);return this.playerQueue[t]||null}getBufferingPlayer(){let{playerQueue:e,primaryMedia:t}=this;if(t){for(let n=0;n<e.length;n++)if(e[n].media===t)return e[n]}return null}createAsset(e,t,n,r,i,a){let o={parentIdentifier:e.identifier,identifier:Ec(e,a,t),duration:i,startOffset:n,timelineStart:r,uri:a};return this.createAssetPlayer(e,o,t)}createAssetPlayer(e,t,n){let r=this.hls,i=r.userConfig,a=i.videoPreference,o=r.loadLevelObj||r.levels[r.currentLevel];(a||o)&&(a=w({},a),o.videoCodec&&(a.videoCodec=o.videoCodec),o.videoRange&&(a.allowedVideoRanges=[o.videoRange]));let s=r.audioTracks[r.audioTrack],c=r.subtitleTracks[r.subtitleTrack],l=0;if(this.primaryLive||e.appendInPlace){let e=this.timelinePos-t.timelineStart;if(e>1){let n=t.duration;n&&e<n&&(l=e)}}let u=t.identifier,d=E(E({},i),{},{maxMaxBufferLength:Math.min(180,r.config.maxMaxBufferLength),autoStartLoad:!0,startFragPrefetch:!0,primarySessionId:r.sessionId,assetPlayerId:u,abrEwmaDefaultEstimate:r.bandwidthEstimate,interstitialsController:void 0,startPosition:l,liveDurationInfinity:!1,testBandwidth:!1,videoPreference:a,audioPreference:s||i.audioPreference,subtitlePreference:c||i.subtitlePreference});e.appendInPlace&&(e.appendInPlaceStarted=!0,t.timelineStart&&(d.timelineOffset=t.timelineStart));let f=d.cmcd;f!=null&&f.sessionId&&f.contentId&&(d.cmcd=w({},f,{contentId:Cc(t.uri)})),this.getAssetPlayer(u)&&this.warn(`Duplicate date range identifier ${e} and asset ${u}`);let p=new Nc(this.HlsPlayerClass,d,e,t);this.playerQueue.push(p),e.assetList[n]=t;let m=!0,h=r=>{if(r.live){let t=Error(`Interstitials MUST be VOD assets ${e}`),r={fatal:!0,type:g.OTHER_ERROR,details:_.INTERSTITIAL_ASSET_ITEM_ERROR,error:t},i=this.schedule?.findEventIndex(e.identifier)||-1;this.handleAssetItemError(r,e,i,n,t.message);return}let i=r.edge-r.fragmentStart,a=t.duration;(m||a===null||i>a)&&(m=!1,this.log(`Interstitial asset "${u}" duration change ${a} > ${i}`),t.duration=i,this.updateSchedule())};p.on(v.LEVEL_UPDATED,(e,{details:t})=>h(t)),p.on(v.LEVEL_PTS_UPDATED,(e,{details:t})=>h(t)),p.on(v.EVENT_CUE_ENTER,()=>this.onInterstitialCueEnter());let y=(e,t)=>{let n=this.getAssetPlayer(u);if(n&&t.tracks){n.off(v.BUFFER_CODECS,y),n.tracks=t.tracks;let e=this.primaryMedia;this.bufferingAsset===n.assetItem&&e&&!n.media&&this.bufferAssetPlayer(n,e)}};p.on(v.BUFFER_CODECS,y),p.on(v.BUFFERED_TO_END,()=>{let n=this.getAssetPlayer(u);if(this.log(`buffered to end of asset ${n}`),!n||!this.schedule)return;let r=this.schedule.findEventIndex(e.identifier),i=this.schedule.items?.[r];this.isInterstitial(i)&&this.advanceAssetBuffering(i,t)});let b=t=>()=>{if(!this.getAssetPlayer(u)||!this.schedule)return;this.shouldPlay=!0;let n=this.schedule.findEventIndex(e.identifier);this.advanceAfterAssetEnded(e,n,t)};return p.once(v.MEDIA_ENDED,b(n)),p.once(v.PLAYOUT_LIMIT_REACHED,b(1/0)),p.on(v.ERROR,(t,r)=>{if(!this.schedule)return;let i=this.getAssetPlayer(u);if(r.details===_.BUFFER_STALLED_ERROR){if(i!=null&&i.appendInPlace){this.handleInPlaceStall(e);return}this.onTimeupdate(),this.checkBuffer(!0);return}this.handleAssetItemError(r,e,this.schedule.findEventIndex(e.identifier),n,`Asset player error ${r.error} ${e}`)}),p.on(v.DESTROYING,()=>{if(!this.getAssetPlayer(u)||!this.schedule)return;let t=Error(`Asset player destroyed unexpectedly ${u}`),r={fatal:!0,type:g.OTHER_ERROR,details:_.INTERSTITIAL_ASSET_ITEM_ERROR,error:t};this.handleAssetItemError(r,e,this.schedule.findEventIndex(e.identifier),n,t.message)}),this.log(`INTERSTITIAL_ASSET_PLAYER_CREATED ${Mc(t)}`),this.hls.trigger(v.INTERSTITIAL_ASSET_PLAYER_CREATED,{asset:t,assetListIndex:n,event:e,player:p}),p}clearInterstitial(e,t){this.clearAssetPlayers(e,t),e.reset()}clearAssetPlayers(e,t){e.assetList.forEach(e=>{this.clearAssetPlayer(e.identifier,t)})}resetAssetPlayer(e){let t=this.getAssetPlayerQueueIndex(e);if(t!==-1){this.log(`reset asset player "${e}" after error`);let n=this.playerQueue[t];this.transferMediaFromPlayer(n,null),n.resetDetails()}}clearAssetPlayer(e,t){let n=this.getAssetPlayerQueueIndex(e);if(n!==-1){let e=this.playerQueue[n];this.log(`clear ${e} toSegment: ${t&&Ic(t)}`),this.transferMediaFromPlayer(e,t),this.playerQueue.splice(n,1),e.destroy()}}emptyPlayerQueue(){let e;for(;e=this.playerQueue.pop();)e.destroy();this.playerQueue=[]}startAssetPlayer(e,t,n,r,i){let{interstitial:a,assetItem:o,assetId:s}=e,c=a.assetList.length,l=this.playingAsset;this.endedAsset=null,this.playingAsset=o,(!l||l.identifier!==s)&&(l&&(this.clearAssetPlayer(l.identifier,n[r]),delete l.error),this.log(`INTERSTITIAL_ASSET_STARTED ${t+1}/${c} ${Mc(o)}`),this.hls.trigger(v.INTERSTITIAL_ASSET_STARTED,{asset:o,assetListIndex:t,event:a,schedule:n.slice(0),scheduleIndex:r,player:e})),this.bufferAssetPlayer(e,i)}bufferAssetPlayer(e,t){if(!this.schedule)return;let{interstitial:n,assetItem:r}=e,i=this.schedule.findEventIndex(n.identifier),a=this.schedule.items?.[i];if(!a)return;e.loadSource(),this.setBufferingItem(a),this.bufferingAsset=r;let o=this.getBufferingPlayer();if(o===e)return;let s=n.appendInPlace;if(s&&o?.interstitial.appendInPlace===!1)return;let c=o?.tracks||this.detachedData?.tracks||this.requiredTracks;if(s&&r!==this.playingAsset){if(!e.tracks){this.log(`Waiting for track info before buffering ${e}`);return}if(c&&!re(c,e.tracks)){let t=Error(`Asset ${Mc(r)} SourceBuffer tracks ('${Object.keys(e.tracks)}') are not compatible with primary content tracks ('${Object.keys(c)}')`),a={fatal:!0,type:g.OTHER_ERROR,details:_.INTERSTITIAL_ASSET_ITEM_ERROR,error:t},o=n.findAssetIndex(r);this.handleAssetItemError(a,n,i,o,t.message);return}}this.transferMediaTo(e,t)}handleInPlaceStall(e){let t=this.schedule,n=this.primaryMedia;if(!t||!n)return;let r=n.currentTime,i=t.findAssetIndex(e,r),a=e.assetList[i];if(a){let o=this.getAssetPlayer(a.identifier);if(o){let s=o.currentTime||r-a.timelineStart,c=o.duration-s;if(this.warn(`Stalled at ${s} of ${s+c} in ${o} ${e} (media.currentTime: ${r})`),s&&(c/n.playbackRate<.5||o.bufferedInPlaceToEnd(n))&&o.hls){let n=t.findEventIndex(e.identifier);this.advanceAfterAssetEnded(e,n,i)}}}}advanceInPlace(e){let t=this.primaryMedia;t&&t.currentTime<e&&(t.currentTime=e)}handleAssetItemError(e,t,n,r,i){if(e.details===_.BUFFER_STALLED_ERROR)return;let a=t.assetList[r]||null;if(this.warn(`INTERSTITIAL_ASSET_ERROR ${a&&Mc(a)} ${e.error}`),!this.schedule)return;let o=a?.identifier||``,s=this.getAssetPlayerQueueIndex(o),c=this.playerQueue[s]||null,l=this.schedule.items,u=w({},e,{fatal:!1,errorAction:hn(!0),asset:a,assetListIndex:r,event:t,schedule:l,scheduleIndex:n,player:c});if(this.hls.trigger(v.INTERSTITIAL_ASSET_ERROR,u),!e.fatal)return;let d=this.playingAsset,f=this.bufferingAsset,p=Error(i);if(a&&(this.clearAssetPlayer(o,null),a.error=p),!t.assetList.some(e=>!e.error))t.error=p;else for(let e=r;e<t.assetList.length;e++)this.resetAssetPlayer(t.assetList[e].identifier);this.updateSchedule(!0),t.error?this.primaryFallback(t):d&&d.identifier===o?this.advanceAfterAssetEnded(t,n,r):f&&f.identifier===o&&this.isInterstitial(this.bufferingItem)&&this.advanceAssetBuffering(this.bufferingItem,f)}primaryFallback(e){let t=e.timelineStart,n=this.effectivePlayingItem,r=this.timelinePos;if(n){this.log(`Fallback to primary from event "${e.identifier}" start: ${t} pos: ${r} playing: ${Ic(n)} error: ${e.error}`),r===-1&&(r=this.hls.startPosition);let i=this.updateItem(n,r);this.itemsMatch(n,i)&&this.clearInterstitial(e,null),e.appendInPlace&&(this.attachPrimary(t,null),this.flushFrontBuffer(t))}else if(r===-1){this.checkStart();return}if(!this.schedule)return;let i=this.schedule.findItemIndexAtTime(r);this.setSchedulePosition(i)}onAssetListLoaded(e,t){var n;let r=t.event,i=r.identifier,a=t.assetListResponse.ASSETS;if(!((n=this.schedule)!=null&&n.hasEvent(i)))return;let o=r.timelineStart,s=r.duration,c=0;a.forEach((e,t)=>{let n=parseFloat(e.DURATION);this.createAsset(r,t,c,o+c,n,e.URI),c+=n}),r.duration=c,this.log(`Loaded asset-list with duration: ${c} (was: ${s}) ${r}`);let l=this.waitingItem?.event.identifier===i;this.updateSchedule();let u=this.bufferingItem?.event;if(l){let e=this.schedule.findEventIndex(i),t=this.schedule.items?.[e];if(t){if(!this.playingItem&&this.timelinePos>t.end&&this.schedule.findItemIndexAtTime(this.timelinePos)!==e){r.error=Error(`Interstitial ${a.length?`no longer within playback range`:`asset-list is empty`} ${this.timelinePos} ${r}`),this.log(r.error.message),this.updateSchedule(!0),this.primaryFallback(r);return}this.setBufferingItem(t)}this.setSchedulePosition(e)}else if(u?.identifier===i){let e=r.assetList[0];if(e){let t=this.getAssetPlayer(e.identifier);if(u.appendInPlace){let e=this.primaryMedia;t&&e&&this.bufferAssetPlayer(t,e)}else t&&t.loadSource()}}}onError(e,t){if(this.schedule)switch(t.details){case _.ASSET_LIST_PARSING_ERROR:case _.ASSET_LIST_LOAD_ERROR:case _.ASSET_LIST_LOAD_TIMEOUT:{let e=t.interstitial;e&&(this.updateSchedule(!0),this.primaryFallback(e));break}case _.BUFFER_STALLED_ERROR:{let e=this.endedItem||this.waitingItem||this.playingItem;if(this.isInterstitial(e)&&e.event.appendInPlace){this.handleInPlaceStall(e.event);return}this.log(`Primary player stall @${this.timelinePos} bufferedPos: ${this.bufferedPos}`),this.onTimeupdate(),this.checkBuffer(!0);break}}}},Vc=500,Hc=class extends di{constructor(e,t,n){super(e,t,n,`subtitle-stream-controller`,b.SUBTITLE),this.currentTrackId=-1,this.tracksBuffered=[],this.mainDetails=null,this.registerListeners()}onHandlerDestroying(){this.unregisterListeners(),super.onHandlerDestroying(),this.mainDetails=null}registerListeners(){super.registerListeners();let{hls:e}=this;e.on(v.LEVEL_LOADED,this.onLevelLoaded,this),e.on(v.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.on(v.SUBTITLE_TRACK_SWITCH,this.onSubtitleTrackSwitch,this),e.on(v.SUBTITLE_TRACK_LOADED,this.onSubtitleTrackLoaded,this),e.on(v.SUBTITLE_FRAG_PROCESSED,this.onSubtitleFragProcessed,this),e.on(v.BUFFER_FLUSHING,this.onBufferFlushing,this)}unregisterListeners(){super.unregisterListeners();let{hls:e}=this;e.off(v.LEVEL_LOADED,this.onLevelLoaded,this),e.off(v.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.off(v.SUBTITLE_TRACK_SWITCH,this.onSubtitleTrackSwitch,this),e.off(v.SUBTITLE_TRACK_LOADED,this.onSubtitleTrackLoaded,this),e.off(v.SUBTITLE_FRAG_PROCESSED,this.onSubtitleFragProcessed,this),e.off(v.BUFFER_FLUSHING,this.onBufferFlushing,this)}startLoad(e,t){this.stopLoad(),this.state=X.IDLE,this.setInterval(Vc),this.nextLoadPosition=this.lastCurrentTime=e+this.timelineOffset,this.startPosition=t?-1:e,this.tick()}onManifestLoading(){super.onManifestLoading(),this.mainDetails=null}onMediaDetaching(e,t){this.tracksBuffered=[],super.onMediaDetaching(e,t)}onLevelLoaded(e,t){this.mainDetails=t.details}onSubtitleFragProcessed(e,t){let{frag:n,success:r}=t;if(this.fragContextChanged(n)||(B(n)&&(this.fragPrevious=n),this.state=X.IDLE),!r)return;let i=this.tracksBuffered[this.currentTrackId];if(!i)return;let a,o=n.start;for(let e=0;e<i.length;e++)if(o>=i[e].start&&o<=i[e].end){a=i[e];break}let s=n.start+n.duration;a?a.end=s:(a={start:o,end:s},i.push(a)),this.fragmentTracker.fragBuffered(n),this.fragBufferedComplete(n,null),this.media&&this.tick()}onBufferFlushing(e,t){let{startOffset:n,endOffset:r}=t;if(n===0&&r!==1/0){let e=r-1;if(e<=0)return;t.endOffsetSubtitles=Math.max(0,e),this.tracksBuffered.forEach(t=>{for(let n=0;n<t.length;){if(t[n].end<=e){t.shift();continue}else if(t[n].start<e)t[n].start=e;else break;n++}}),this.fragmentTracker.removeFragmentsInRange(n,e,b.SUBTITLE)}}onError(e,t){let n=t.frag;n?.type===b.SUBTITLE&&(t.details===_.FRAG_GAP&&this.fragmentTracker.fragBuffered(n,!0),this.fragCurrent&&this.fragCurrent.abortRequests(),this.state!==X.STOPPED&&(this.state=X.IDLE))}onSubtitleTracksUpdated(e,{subtitleTracks:t}){if(this.levels&&To(this.levels,t)){this.levels=t.map(e=>new jt(e));return}this.tracksBuffered=[],this.levels=t.map(e=>{let t=new jt(e);return this.tracksBuffered[t.id]=[],t}),this.fragmentTracker.removeFragmentsInRange(0,1/0,b.SUBTITLE),this.fragPrevious=null,this.mediaBuffer=null}onSubtitleTrackSwitch(e,t){var n;if(this.currentTrackId=t.id,!((n=this.levels)!=null&&n.length)||this.currentTrackId===-1){this.clearInterval();return}let r=this.levels[this.currentTrackId];r!=null&&r.details?this.mediaBuffer=this.mediaBufferTimeRanges:this.mediaBuffer=null,r&&this.state!==X.STOPPED&&this.setInterval(Vc)}onSubtitleTrackLoaded(e,t){var n;let{currentTrackId:r,levels:i}=this,{details:a,id:o}=t;if(!i){this.warn(`Subtitle tracks were reset while loading level ${o}`);return}let s=i[o];if(o>=i.length||!s)return;this.log(`Subtitle track ${o} loaded [${a.startSN},${a.endSN}]${a.lastPartSn?`[part-${a.lastPartSn}-${a.lastPartIndex}]`:``},duration:${a.totalduration}`),this.mediaBuffer=this.mediaBufferTimeRanges;let c=0;if(a.live||(n=s.details)!=null&&n.live){if(a.deltaUpdateFailed)return;let e=this.mainDetails;if(!e){this.startFragRequested=!1;return}let t=e.fragments[0];s.details?(c=this.alignPlaylists(a,s.details,this.levelLastLoaded?.details),c===0&&t&&(c=t.start,qr(a,c))):a.hasProgramDateTime&&e.hasProgramDateTime?(si(a,e),c=a.fragmentStart):t&&(c=t.start,qr(a,c)),e&&!this.startFragRequested&&this.setStartPosition(e,c)}s.details=a,this.levelLastLoaded=s,o===r&&(this.hls.trigger(v.SUBTITLE_TRACK_UPDATED,{details:a,id:o,groupId:t.groupId}),this.tick(),a.live&&!this.fragCurrent&&this.media&&this.state===X.IDLE&&(Qt(null,a.fragments,this.media.currentTime,0)||(this.warn(`Subtitle playlist not aligned with playback`),s.details=void 0)))}_handleFragmentLoadComplete(e){let{frag:t,payload:n}=e,r=t.decryptdata,i=this.hls;if(!this.fragContextChanged(t)&&n&&n.byteLength>0&&r!=null&&r.key&&r.iv&&$n(r.method)){let e=performance.now();this.decrypter.decrypt(new Uint8Array(n),r.key.buffer,r.iv.buffer,er(r.method)).catch(e=>{throw i.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.FRAG_DECRYPT_ERROR,fatal:!1,error:e,reason:e.message,frag:t}),e}).then(n=>{let r=performance.now();i.trigger(v.FRAG_DECRYPTED,{frag:t,payload:n,stats:{tstart:e,tdecrypt:r}})}).catch(e=>{this.warn(`${e.name}: ${e.message}`),this.state=X.IDLE})}}doTick(){if(!this.media){this.state=X.IDLE;return}if(this.state===X.IDLE){let{currentTrackId:e,levels:t}=this,n=t?.[e];if(!n||!t.length||!n.details||this.waitForLive(n))return;let{config:r}=this,i=this.getLoadPosition(),{end:a,len:o}=q.bufferedInfo(this.tracksBuffered[this.currentTrackId]||[],i,r.maxBufferHole),s=n.details;if(o>this.hls.maxBufferLength+s.levelTargetDuration)return;let c=s.fragments,l=c.length,u=s.edge,d=null,f=this.fragPrevious;if(a<u){let e=r.maxFragLookUpTolerance,t=a>u-e?0:e;d=Qt(f,c,Math.max(c[0].start,a),t),!d&&f&&f.start<c[0].start&&(d=c[0])}else d=c[l-1];if(d=this.filterReplacedPrimary(d,n.details),!d)return;let p=c[d.sn-s.startSN-1];if(p&&p.cc===d.cc&&this.fragmentTracker.getState(p)===K.NOT_LOADED&&(d=p),this.fragmentTracker.getState(d)===K.NOT_LOADED){let e=this.mapToInitFragWhenRequired(d);e&&this.loadFragment(e,n,a)}}}loadFragment(e,t,n){B(e)?super.loadFragment(e,t,n):this._loadInitSegment(e,t)}get mediaBufferTimeRanges(){return new Uc(this.tracksBuffered[this.currentTrackId]||[])}},Uc=class{constructor(e){this.buffered=void 0;let t=(t,n,r)=>{if(n>>>=0,n>r-1)throw new DOMException(`Failed to execute '${t}' on 'TimeRanges': The index provided (${n}) is greater than the maximum bound (${r})`);return e[n][t]};this.buffered={get length(){return e.length},end(n){return t(`end`,n,e.length)},start(n){return t(`start`,n,e.length)}}}},Wc={42:225,92:233,94:237,95:243,96:250,123:231,124:247,125:209,126:241,127:9608,128:174,129:176,130:189,131:191,132:8482,133:162,134:163,135:9834,136:224,137:32,138:232,139:226,140:234,141:238,142:244,143:251,144:193,145:201,146:211,147:218,148:220,149:252,150:8216,151:161,152:42,153:8217,154:9473,155:169,156:8480,157:8226,158:8220,159:8221,160:192,161:194,162:199,163:200,164:202,165:203,166:235,167:206,168:207,169:239,170:212,171:217,172:249,173:219,174:171,175:187,176:195,177:227,178:205,179:204,180:236,181:210,182:242,183:213,184:245,185:123,186:125,187:92,188:94,189:95,190:124,191:8764,192:196,193:228,194:214,195:246,196:223,197:165,198:164,199:9475,200:197,201:229,202:216,203:248,204:9487,205:9491,206:9495,207:9499},Gc=e=>String.fromCharCode(Wc[e]||e),Kc=15,qc=100,Jc={17:1,18:3,21:5,22:7,23:9,16:11,19:12,20:14},Yc={17:2,18:4,21:6,22:8,23:10,19:13,20:15},Xc={25:1,26:3,29:5,30:7,31:9,24:11,27:12,28:14},Zc={25:2,26:4,29:6,30:8,31:10,27:13,28:15},Qc=[`white`,`green`,`blue`,`cyan`,`red`,`yellow`,`magenta`,`black`,`transparent`],$c=class{constructor(){this.time=null,this.verboseLevel=0}log(e,t){if(this.verboseLevel>=e){let n=typeof t==`function`?t():t;I.log(`${this.time} [${e}] ${n}`)}}},el=function(e){let t=[];for(let n=0;n<e.length;n++)t.push(e[n].toString(16));return t},tl=class{constructor(){this.foreground=`white`,this.underline=!1,this.italics=!1,this.background=`black`,this.flash=!1}reset(){this.foreground=`white`,this.underline=!1,this.italics=!1,this.background=`black`,this.flash=!1}setStyles(e){let t=[`foreground`,`underline`,`italics`,`background`,`flash`];for(let n=0;n<t.length;n++){let r=t[n];e.hasOwnProperty(r)&&(this[r]=e[r])}}isDefault(){return this.foreground===`white`&&!this.underline&&!this.italics&&this.background===`black`&&!this.flash}equals(e){return this.foreground===e.foreground&&this.underline===e.underline&&this.italics===e.italics&&this.background===e.background&&this.flash===e.flash}copy(e){this.foreground=e.foreground,this.underline=e.underline,this.italics=e.italics,this.background=e.background,this.flash=e.flash}toString(){return`color=`+this.foreground+`, underline=`+this.underline+`, italics=`+this.italics+`, background=`+this.background+`, flash=`+this.flash}},nl=class{constructor(){this.uchar=` `,this.penState=new tl}reset(){this.uchar=` `,this.penState.reset()}setChar(e,t){this.uchar=e,this.penState.copy(t)}setPenState(e){this.penState.copy(e)}equals(e){return this.uchar===e.uchar&&this.penState.equals(e.penState)}copy(e){this.uchar=e.uchar,this.penState.copy(e.penState)}isEmpty(){return this.uchar===` `&&this.penState.isDefault()}},rl=class{constructor(e){this.chars=[],this.pos=0,this.currPenState=new tl,this.cueStartTime=null,this.logger=void 0;for(let e=0;e<qc;e++)this.chars.push(new nl);this.logger=e}equals(e){for(let t=0;t<qc;t++)if(!this.chars[t].equals(e.chars[t]))return!1;return!0}copy(e){for(let t=0;t<qc;t++)this.chars[t].copy(e.chars[t])}isEmpty(){let e=!0;for(let t=0;t<qc;t++)if(!this.chars[t].isEmpty()){e=!1;break}return e}setCursor(e){this.pos!==e&&(this.pos=e),this.pos<0?(this.logger.log(3,`Negative cursor position `+this.pos),this.pos=0):this.pos>qc&&(this.logger.log(3,`Too large cursor position `+this.pos),this.pos=qc)}moveCursor(e){let t=this.pos+e;if(e>1)for(let e=this.pos+1;e<t+1;e++)this.chars[e].setPenState(this.currPenState);this.setCursor(t)}backSpace(){this.moveCursor(-1),this.chars[this.pos].setChar(` `,this.currPenState)}insertChar(e){e>=144&&this.backSpace();let t=Gc(e);if(this.pos>=qc){this.logger.log(0,()=>`Cannot insert `+e.toString(16)+` (`+t+`) at position `+this.pos+`. Skipping it!`);return}this.chars[this.pos].setChar(t,this.currPenState),this.moveCursor(1)}clearFromPos(e){let t;for(t=e;t<qc;t++)this.chars[t].reset()}clear(){this.clearFromPos(0),this.pos=0,this.currPenState.reset()}clearToEndOfRow(){this.clearFromPos(this.pos)}getTextString(){let e=[],t=!0;for(let n=0;n<qc;n++){let r=this.chars[n].uchar;r!==` `&&(t=!1),e.push(r)}return t?``:e.join(``)}setPenStyles(e){this.currPenState.setStyles(e),this.chars[this.pos].setPenState(this.currPenState)}},il=class{constructor(e){this.rows=[],this.currRow=Kc-1,this.nrRollUpRows=null,this.lastOutputScreen=null,this.logger=void 0;for(let t=0;t<Kc;t++)this.rows.push(new rl(e));this.logger=e}reset(){for(let e=0;e<Kc;e++)this.rows[e].clear();this.currRow=Kc-1}equals(e){let t=!0;for(let n=0;n<Kc;n++)if(!this.rows[n].equals(e.rows[n])){t=!1;break}return t}copy(e){for(let t=0;t<Kc;t++)this.rows[t].copy(e.rows[t])}isEmpty(){let e=!0;for(let t=0;t<Kc;t++)if(!this.rows[t].isEmpty()){e=!1;break}return e}backSpace(){this.rows[this.currRow].backSpace()}clearToEndOfRow(){this.rows[this.currRow].clearToEndOfRow()}insertChar(e){this.rows[this.currRow].insertChar(e)}setPen(e){this.rows[this.currRow].setPenStyles(e)}moveCursor(e){this.rows[this.currRow].moveCursor(e)}setCursor(e){this.logger.log(2,`setCursor: `+e),this.rows[this.currRow].setCursor(e)}setPAC(e){this.logger.log(2,()=>`pacData = `+W(e));let t=e.row-1;if(this.nrRollUpRows&&t<this.nrRollUpRows-1&&(t=this.nrRollUpRows-1),this.nrRollUpRows&&this.currRow!==t){for(let e=0;e<Kc;e++)this.rows[e].clear();let e=this.currRow+1-this.nrRollUpRows,n=this.lastOutputScreen;if(n){let r=n.rows[e].cueStartTime,i=this.logger.time;if(r!==null&&i!==null&&r<i)for(let r=0;r<this.nrRollUpRows;r++)this.rows[t-this.nrRollUpRows+r+1].copy(n.rows[e+r])}}this.currRow=t;let n=this.rows[this.currRow];if(e.indent!==null){let t=e.indent,r=Math.max(t-1,0);n.setCursor(e.indent),e.color=n.chars[r].penState.foreground}let r={foreground:e.color,underline:e.underline,italics:e.italics,background:`black`,flash:!1};this.setPen(r)}setBkgData(e){this.logger.log(2,()=>`bkgData = `+W(e)),this.backSpace(),this.setPen(e),this.insertChar(32)}setRollUpRows(e){this.nrRollUpRows=e}rollUp(){if(this.nrRollUpRows===null){this.logger.log(3,`roll_up but nrRollUpRows not set yet`);return}this.logger.log(1,()=>this.getDisplayText());let e=this.currRow+1-this.nrRollUpRows,t=this.rows.splice(e,1)[0];t.clear(),this.rows.splice(this.currRow,0,t),this.logger.log(2,`Rolling up`)}getDisplayText(e){e||=!1;let t=[],n=``,r=-1;for(let n=0;n<Kc;n++){let i=this.rows[n].getTextString();i&&(r=n+1,e?t.push(`Row `+r+`: '`+i+`'`):t.push(i.trim()))}return t.length>0&&(n=e?`[`+t.join(` | `)+`]`:t.join(`
|
|
30
|
+
`)),n}getTextAndFormat(){return this.rows}},al=class{constructor(e,t,n){this.chNr=void 0,this.outputFilter=void 0,this.mode=void 0,this.verbose=void 0,this.displayedMemory=void 0,this.nonDisplayedMemory=void 0,this.lastOutputScreen=void 0,this.currRollUpRow=void 0,this.writeScreen=void 0,this.cueStartTime=void 0,this.logger=void 0,this.chNr=e,this.outputFilter=t,this.mode=null,this.verbose=0,this.displayedMemory=new il(n),this.nonDisplayedMemory=new il(n),this.lastOutputScreen=new il(n),this.currRollUpRow=this.displayedMemory.rows[Kc-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.logger=n}reset(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.outputFilter.reset(),this.currRollUpRow=this.displayedMemory.rows[Kc-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null}getHandler(){return this.outputFilter}setHandler(e){this.outputFilter=e}setPAC(e){this.writeScreen.setPAC(e)}setBkgData(e){this.writeScreen.setBkgData(e)}setMode(e){e!==this.mode&&(this.mode=e,this.logger.log(2,()=>`MODE=`+e),this.mode===`MODE_POP-ON`?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),this.mode!==`MODE_ROLL-UP`&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)}insertChars(e){for(let t=0;t<e.length;t++)this.writeScreen.insertChar(e[t]);let t=this.writeScreen===this.displayedMemory?`DISP`:`NON_DISP`;this.logger.log(2,()=>t+`: `+this.writeScreen.getDisplayText(!0)),(this.mode===`MODE_PAINT-ON`||this.mode===`MODE_ROLL-UP`)&&(this.logger.log(1,()=>`DISPLAYED: `+this.displayedMemory.getDisplayText(!0)),this.outputDataUpdate())}ccRCL(){this.logger.log(2,`RCL - Resume Caption Loading`),this.setMode(`MODE_POP-ON`)}ccBS(){this.logger.log(2,`BS - BackSpace`),this.mode!==`MODE_TEXT`&&(this.writeScreen.backSpace(),this.writeScreen===this.displayedMemory&&this.outputDataUpdate())}ccAOF(){}ccAON(){}ccDER(){this.logger.log(2,`DER- Delete to End of Row`),this.writeScreen.clearToEndOfRow(),this.outputDataUpdate()}ccRU(e){this.logger.log(2,`RU(`+e+`) - Roll Up`),this.writeScreen=this.displayedMemory,this.setMode(`MODE_ROLL-UP`),this.writeScreen.setRollUpRows(e)}ccFON(){this.logger.log(2,`FON - Flash On`),this.writeScreen.setPen({flash:!0})}ccRDC(){this.logger.log(2,`RDC - Resume Direct Captioning`),this.setMode(`MODE_PAINT-ON`)}ccTR(){this.logger.log(2,`TR`),this.setMode(`MODE_TEXT`)}ccRTD(){this.logger.log(2,`RTD`),this.setMode(`MODE_TEXT`)}ccEDM(){this.logger.log(2,`EDM - Erase Displayed Memory`),this.displayedMemory.reset(),this.outputDataUpdate(!0)}ccCR(){this.logger.log(2,`CR - Carriage Return`),this.writeScreen.rollUp(),this.outputDataUpdate(!0)}ccENM(){this.logger.log(2,`ENM - Erase Non-displayed Memory`),this.nonDisplayedMemory.reset()}ccEOC(){if(this.logger.log(2,`EOC - End Of Caption`),this.mode===`MODE_POP-ON`){let e=this.displayedMemory;this.displayedMemory=this.nonDisplayedMemory,this.nonDisplayedMemory=e,this.writeScreen=this.nonDisplayedMemory,this.logger.log(1,()=>`DISP: `+this.displayedMemory.getDisplayText())}this.outputDataUpdate(!0)}ccTO(e){this.logger.log(2,`TO(`+e+`) - Tab Offset`),this.writeScreen.moveCursor(e)}ccMIDROW(e){let t={flash:!1};t.underline=e%2==1,t.italics=e>=46,t.italics?t.foreground=`white`:t.foreground=[`white`,`green`,`blue`,`cyan`,`red`,`yellow`,`magenta`][Math.floor(e/2)-16],this.logger.log(2,`MIDROW: `+W(t)),this.writeScreen.setPen(t)}outputDataUpdate(e=!1){let t=this.logger.time;t!==null&&this.outputFilter&&(this.cueStartTime===null&&!this.displayedMemory.isEmpty()?this.cueStartTime=t:this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue(this.cueStartTime,t,this.lastOutputScreen),e&&this.outputFilter.dispatchCue&&this.outputFilter.dispatchCue(),this.cueStartTime=this.displayedMemory.isEmpty()?null:t),this.lastOutputScreen.copy(this.displayedMemory))}cueSplitAtTime(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))}},ol=class{constructor(e,t,n){this.channels=void 0,this.currentChannel=0,this.cmdHistory=ll(),this.logger=void 0;let r=this.logger=new $c;this.channels=[null,new al(e,t,r),new al(e+1,n,r)]}getHandler(e){return this.channels[e].getHandler()}setHandler(e,t){this.channels[e].setHandler(t)}addData(e,t){this.logger.time=e;for(let e=0;e<t.length;e+=2){let n=t[e]&127,r=t[e+1]&127,i=!1,a=null;if(n===0&&r===0)continue;this.logger.log(3,()=>`[`+el([t[e],t[e+1]])+`] -> (`+el([n,r])+`)`);let o=this.cmdHistory;if(n>=16&&n<=31){if(cl(n,r,o)){sl(null,null,o),this.logger.log(3,()=>`Repeated command (`+el([n,r])+`) is dropped`);continue}sl(n,r,this.cmdHistory),i=this.parseCmd(n,r),i||=this.parseMidrow(n,r),i||=this.parsePAC(n,r),i||=this.parseBackgroundAttributes(n,r)}else sl(null,null,o);if(!i&&(a=this.parseChars(n,r),a)){let e=this.currentChannel;e&&e>0?this.channels[e].insertChars(a):this.logger.log(2,`No channel found yet. TEXT-MODE?`)}!i&&!a&&this.logger.log(2,()=>`Couldn't parse cleaned data `+el([n,r])+` orig: `+el([t[e],t[e+1]]))}}parseCmd(e,t){if(!((e===20||e===28||e===21||e===29)&&t>=32&&t<=47||(e===23||e===31)&&t>=33&&t<=35))return!1;let n=e===20||e===21||e===23?1:2,r=this.channels[n];return e===20||e===21||e===28||e===29?t===32?r.ccRCL():t===33?r.ccBS():t===34?r.ccAOF():t===35?r.ccAON():t===36?r.ccDER():t===37?r.ccRU(2):t===38?r.ccRU(3):t===39?r.ccRU(4):t===40?r.ccFON():t===41?r.ccRDC():t===42?r.ccTR():t===43?r.ccRTD():t===44?r.ccEDM():t===45?r.ccCR():t===46?r.ccENM():t===47&&r.ccEOC():r.ccTO(t-32),this.currentChannel=n,!0}parseMidrow(e,t){let n=0;if((e===17||e===25)&&t>=32&&t<=47){if(n=e===17?1:2,n!==this.currentChannel)return this.logger.log(0,`Mismatch channel in midrow parsing`),!1;let r=this.channels[n];return r?(r.ccMIDROW(t),this.logger.log(3,()=>`MIDROW (`+el([e,t])+`)`),!0):!1}return!1}parsePAC(e,t){let n;if(!((e>=17&&e<=23||e>=25&&e<=31)&&t>=64&&t<=127||(e===16||e===24)&&t>=64&&t<=95))return!1;let r=e<=23?1:2;n=t>=64&&t<=95?r===1?Jc[e]:Xc[e]:r===1?Yc[e]:Zc[e];let i=this.channels[r];return i?(i.setPAC(this.interpretPAC(n,t)),this.currentChannel=r,!0):!1}interpretPAC(e,t){let n,r={color:null,italics:!1,indent:null,underline:!1,row:e};return n=t>95?t-96:t-64,r.underline=(n&1)==1,n<=13?r.color=[`white`,`green`,`blue`,`cyan`,`red`,`yellow`,`magenta`,`white`][Math.floor(n/2)]:n<=15?(r.italics=!0,r.color=`white`):r.indent=Math.floor((n-16)/2)*4,r}parseChars(e,t){let n,r=null,i=null;if(e>=25?(n=2,i=e-8):(n=1,i=e),i>=17&&i<=19){let e;e=i===17?t+80:i===18?t+112:t+144,this.logger.log(2,()=>`Special char '`+Gc(e)+`' in channel `+n),r=[e]}else e>=32&&e<=127&&(r=t===0?[e]:[e,t]);return r&&this.logger.log(3,()=>`Char codes = `+el(r).join(`,`)),r}parseBackgroundAttributes(e,t){if(!((e===16||e===24)&&t>=32&&t<=47||(e===23||e===31)&&t>=45&&t<=47))return!1;let n,r={};e===16||e===24?(n=Math.floor((t-32)/2),r.background=Qc[n],t%2==1&&(r.background+=`_semi`)):t===45?r.background=`transparent`:(r.foreground=`black`,t===47&&(r.underline=!0));let i=e<=23?1:2;return this.channels[i].setBkgData(r),!0}reset(){for(let e=0;e<Object.keys(this.channels).length;e++){let t=this.channels[e];t&&t.reset()}sl(null,null,this.cmdHistory)}cueSplitAtTime(e){for(let t=0;t<this.channels.length;t++){let n=this.channels[t];n&&n.cueSplitAtTime(e)}}};function sl(e,t,n){n.a=e,n.b=t}function cl(e,t,n){return n.a===e&&n.b===t}function ll(){return{a:null,b:null}}var ul=(function(){if(or!=null&&or.VTTCue)return self.VTTCue;let e=[``,`lr`,`rl`],t=[`start`,`middle`,`end`,`left`,`right`];function n(e,t){if(typeof t!=`string`||!Array.isArray(e))return!1;let n=t.toLowerCase();return~e.indexOf(n)?n:!1}function r(t){return n(e,t)}function i(e){return n(t,e)}function a(e,...t){let n=1;for(;n<arguments.length;n++){let t=arguments[n];for(let n in t)e[n]=t[n]}return e}function o(e,t,n){let o=this,s={enumerable:!0};o.hasBeenReset=!1;let c=``,l=!1,u=e,d=t,f=n,p=null,m=``,h=!0,g=`auto`,_=`start`,v=50,y=`middle`,b=50,x=`middle`;Object.defineProperty(o,"id",a({},s,{get:function(){return c},set:function(e){c=``+e}})),Object.defineProperty(o,"pauseOnExit",a({},s,{get:function(){return l},set:function(e){l=!!e}})),Object.defineProperty(o,"startTime",a({},s,{get:function(){return u},set:function(e){if(typeof e!=`number`)throw TypeError(`Start time must be set to a number.`);u=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"endTime",a({},s,{get:function(){return d},set:function(e){if(typeof e!=`number`)throw TypeError(`End time must be set to a number.`);d=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"text",a({},s,{get:function(){return f},set:function(e){f=``+e,this.hasBeenReset=!0}})),Object.defineProperty(o,"region",a({},s,{get:function(){return p},set:function(e){p=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"vertical",a({},s,{get:function(){return m},set:function(e){let t=r(e);if(t===!1)throw SyntaxError(`An invalid or illegal string was specified.`);m=t,this.hasBeenReset=!0}})),Object.defineProperty(o,"snapToLines",a({},s,{get:function(){return h},set:function(e){h=!!e,this.hasBeenReset=!0}})),Object.defineProperty(o,"line",a({},s,{get:function(){return g},set:function(e){if(typeof e!=`number`&&e!==`auto`)throw SyntaxError(`An invalid number or illegal string was specified.`);g=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"lineAlign",a({},s,{get:function(){return _},set:function(e){let t=i(e);if(!t)throw SyntaxError(`An invalid or illegal string was specified.`);_=t,this.hasBeenReset=!0}})),Object.defineProperty(o,"position",a({},s,{get:function(){return v},set:function(e){if(e<0||e>100)throw Error(`Position must be between 0 and 100.`);v=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"positionAlign",a({},s,{get:function(){return y},set:function(e){let t=i(e);if(!t)throw SyntaxError(`An invalid or illegal string was specified.`);y=t,this.hasBeenReset=!0}})),Object.defineProperty(o,"size",a({},s,{get:function(){return b},set:function(e){if(e<0||e>100)throw Error(`Size must be between 0 and 100.`);b=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"align",a({},s,{get:function(){return x},set:function(e){let t=i(e);if(!t)throw SyntaxError(`An invalid or illegal string was specified.`);x=t,this.hasBeenReset=!0}})),o.displayState=void 0}return o.prototype.getCueAsHTML=function(){return self.WebVTT.convertCueToDOMTree(self,this.text)},o})(),dl=class{decode(e,t){if(!e)return``;if(typeof e!=`string`)throw Error(`Error - expected string data.`);return decodeURIComponent(encodeURIComponent(e))}};function fl(e){function t(e,t,n,r){return(e|0)*3600+(t|0)*60+(n|0)+parseFloat(r||0)}let n=e.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/);return n?parseFloat(n[2])>59?t(n[2],n[3],0,n[4]):t(n[1],n[2],n[3],n[4]):null}var pl=class{constructor(){this.values=Object.create(null)}set(e,t){!this.get(e)&&t!==``&&(this.values[e]=t)}get(e,t,n){return n?this.has(e)?this.values[e]:t[n]:this.has(e)?this.values[e]:t}has(e){return e in this.values}alt(e,t,n){for(let r=0;r<n.length;++r)if(t===n[r]){this.set(e,t);break}}integer(e,t){/^-?\d+$/.test(t)&&this.set(e,parseInt(t,10))}percent(e,t){if(/^([\d]{1,3})(\.[\d]*)?%$/.test(t)){let n=parseFloat(t);if(n>=0&&n<=100)return this.set(e,n),!0}return!1}};function ml(e,t,n,r){let i=r?e.split(r):[e];for(let e in i){if(typeof i[e]!=`string`)continue;let r=i[e].split(n);if(r.length!==2)continue;let a=r[0],o=r[1];t(a,o)}}var hl=new ul(0,0,``),gl=hl.align===`middle`?`middle`:`center`;function _l(e,t,n){let r=e;function i(){let t=fl(e);if(t===null)throw Error(`Malformed timestamp: `+r);return e=e.replace(/^[^\sa-zA-Z-]+/,``),t}function a(e,t){let r=new pl;ml(e,function(e,t){let i;switch(e){case`region`:for(let i=n.length-1;i>=0;i--)if(n[i].id===t){r.set(e,n[i].region);break}break;case`vertical`:r.alt(e,t,[`rl`,`lr`]);break;case`line`:i=t.split(`,`),r.integer(e,i[0]),r.percent(e,i[0])&&r.set(`snapToLines`,!1),r.alt(e,i[0],[`auto`]),i.length===2&&r.alt(`lineAlign`,i[1],[`start`,gl,`end`]);break;case`position`:i=t.split(`,`),r.percent(e,i[0]),i.length===2&&r.alt(`positionAlign`,i[1],[`start`,gl,`end`,`line-left`,`line-right`,`auto`]);break;case`size`:r.percent(e,t);break;case`align`:r.alt(e,t,[`start`,gl,`end`,`left`,`right`]);break}},/:/,/\s/),t.region=r.get(`region`,null),t.vertical=r.get(`vertical`,``);let i=r.get(`line`,`auto`);i===`auto`&&hl.line===-1&&(i=-1),t.line=i,t.lineAlign=r.get(`lineAlign`,`start`),t.snapToLines=r.get(`snapToLines`,!0),t.size=r.get(`size`,100),t.align=r.get(`align`,gl);let a=r.get(`position`,`auto`);a===`auto`&&hl.position===50&&(a=t.align===`start`||t.align===`left`?0:t.align===`end`||t.align===`right`?100:50),t.position=a}function o(){e=e.replace(/^\s+/,``)}if(o(),t.startTime=i(),o(),e.slice(0,3)!==`-->`)throw Error(`Malformed time stamp (time stamps must be separated by '-->'): `+r);e=e.slice(3),o(),t.endTime=i(),o(),a(e,t)}function vl(e){return e.replace(/<br(?: \/)?>/gi,`
|
|
31
|
+
`)}var yl=class{constructor(){this.state=`INITIAL`,this.buffer=``,this.decoder=new dl,this.regionList=[],this.cue=null,this.oncue=void 0,this.onparsingerror=void 0,this.onflush=void 0}parse(e){let t=this;e&&(t.buffer+=t.decoder.decode(e,{stream:!0}));function n(){let e=t.buffer,n=0;for(e=vl(e);n<e.length&&e[n]!==`\r`&&e[n]!==`
|
|
32
|
+
`;)++n;let r=e.slice(0,n);return e[n]===`\r`&&++n,e[n]===`
|
|
33
|
+
`&&++n,t.buffer=e.slice(n),r}function r(e){ml(e,function(e,t){},/:/)}try{let e=``;if(t.state===`INITIAL`){if(!/\r\n|\n/.test(t.buffer))return this;e=n();let r=e.match(/^()?WEBVTT([ \t].*)?$/);if(!(r!=null&&r[0]))throw Error(`Malformed WebVTT signature.`);t.state=`HEADER`}let i=!1;for(;t.buffer;){if(!/\r\n|\n/.test(t.buffer))return this;switch(i?i=!1:e=n(),t.state){case`HEADER`:/:/.test(e)?r(e):e||(t.state=`ID`);continue;case`NOTE`:e||(t.state=`ID`);continue;case`ID`:if(/^NOTE($|[ \t])/.test(e)){t.state=`NOTE`;break}if(!e)continue;if(t.cue=new ul(0,0,``),t.state=`CUE`,e.indexOf(`-->`)===-1){t.cue.id=e;continue}case`CUE`:if(!t.cue){t.state=`BADCUE`;continue}try{_l(e,t.cue,t.regionList)}catch{t.cue=null,t.state=`BADCUE`;continue}t.state=`CUETEXT`;continue;case`CUETEXT`:{let n=e.indexOf(`-->`)!==-1;if(!e||n&&(i=!0)){t.oncue&&t.cue&&t.oncue(t.cue),t.cue=null,t.state=`ID`;continue}if(t.cue===null)continue;t.cue.text&&(t.cue.text+=`
|
|
34
|
+
`),t.cue.text+=e}continue;case`BADCUE`:e||(t.state=`ID`)}}}catch{t.state===`CUETEXT`&&t.cue&&t.oncue&&t.oncue(t.cue),t.cue=null,t.state=t.state===`INITIAL`?`BADWEBVTT`:`BADCUE`}return this}flush(){let e=this;try{if((e.cue||e.state===`HEADER`)&&(e.buffer+=`
|
|
35
|
+
|
|
36
|
+
`,e.parse()),e.state===`INITIAL`||e.state===`BADWEBVTT`)throw Error(`Malformed WebVTT signature.`)}catch(t){e.onparsingerror&&e.onparsingerror(t)}return e.onflush&&e.onflush(),this}},bl=/\r\n|\n\r|\n|\r/g,xl=function(e,t,n=0){return e.slice(n,n+t.length)===t},Sl=function(e){let t=parseInt(e.slice(-3)),n=parseInt(e.slice(-6,-4)),r=parseInt(e.slice(-9,-7)),i=e.length>9?parseInt(e.substring(0,e.indexOf(`:`))):0;if(!p(t)||!p(n)||!p(r)||!p(i))throw Error(`Malformed X-TIMESTAMP-MAP: Local:${e}`);return t+=1e3*n,t+=60*1e3*r,t+=3600*1e3*i,t};function Cl(e,t,n){return Cc(e.toString())+Cc(t.toString())+Cc(n)}var wl=function(e,t,n){let r=e[t],i=e[r.prevCC];if(!i||!i.new&&r.new){e.ccOffset=e.presentationOffset=r.start,r.new=!1;return}for(;(a=i)!=null&&a.new;){var a;e.ccOffset+=r.start-i.start,r.new=!1,r=i,i=e[r.prevCC]}e.presentationOffset=n};function Tl(e,t,n,r,i,a,o){let s=new yl,c=L(new Uint8Array(e)).trim().replace(bl,`
|
|
37
|
+
`).split(`
|
|
38
|
+
`),l=[],u=t?qa(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?wl(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=ro((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||=Cl(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(xl(e,`X-TIMESTAMP-MAP=`)){h=!1,e.slice(16).split(`,`).forEach(e=>{xl(e,`LOCAL:`)?d=e.slice(6):xl(e,`MPEGTS:`)&&(f=parseInt(e.slice(7)))});try{p=Sl(d)/1e3}catch(e){m=e}return}else e===``&&(h=!1);s.parse(e+`
|
|
39
|
+
`)}),s.flush()}var El=`stpp.ttml.im1t`,Dl=/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/,Ol=/^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/,kl={left:`start`,center:`center`,right:`end`,start:`start`,end:`end`};function Al(e,t,n,r){let i=U(new Uint8Array(e),[`mdat`]);if(i.length===0){r(Error(`Could not parse IMSC1 mdat`));return}let a=i.map(e=>L(e)),o=Ga(t.baseTime,1,t.timescale);try{a.forEach(e=>n(jl(e,o)))}catch(e){r(e)}}function jl(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=Nl(Ml(n,`styling`,`style`)),s=Nl(Ml(n,`layout`,`region`)),c=Ml(n,`body`,`[begin]`);return[].map.call(c,e=>{let n=Pl(e,a);if(!n||!e.hasAttribute(`begin`))return null;let r=Rl(e.getAttribute(`begin`),i),c=Rl(e.getAttribute(`dur`),i),l=Rl(e.getAttribute(`end`),i);if(r===null)throw Ll(e);if(l===null){if(c===null)throw Ll(e);l=r+c}let u=new ul(r-t,l-t,n);u.id=Cl(u.startTime,u.endTime,u.text);let d=s[e.getAttribute(`region`)],f=o[e.getAttribute(`style`)],p=Fl(d,f,o),{textAlign:m}=p;if(m){let e=kl[m];e&&(u.lineAlign=e),u.align=m}return w(u,p),u}).filter(e=>e!==null)}function Ml(e,t,n){let r=e.getElementsByTagName(t)[0];return r?[].slice.call(r.querySelectorAll(n)):[]}function Nl(e){return e.reduce((e,t)=>{let n=t.getAttribute(`xml:id`);return n&&(e[n]=t),e},{})}function Pl(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?Pl(n,t):t?e+n.textContent.trim().replace(/\s+/g,` `):e+n.textContent},``)}function Fl(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=Il(t,r,a)||Il(e,r,a)||Il(i,r,a);return o&&(n[a]=o),n},{})}function Il(e,t,n){return e&&e.hasAttributeNS(t,n)?e.getAttributeNS(t,n):null}function Ll(e){return Error(`Could not parse ttml timestamp ${e}`)}function Rl(e,t){if(!e)return null;let n=fl(e);return n===null&&(Dl.test(e)?n=zl(e,t):Ol.test(e)&&(n=Bl(e,t))),n}function zl(e,t){let n=Dl.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 Bl(e,t){let n=Ol.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 Vl=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}},Hl=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=Kl(),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(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(v.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.on(v.FRAG_LOADING,this.onFragLoading,this),e.on(v.FRAG_LOADED,this.onFragLoaded,this),e.on(v.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.on(v.FRAG_DECRYPTED,this.onFragDecrypted,this),e.on(v.INIT_PTS_FOUND,this.onInitPtsFound,this),e.on(v.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.on(v.BUFFER_FLUSHING,this.onBufferFlushing,this)}destroy(){let{hls:e}=this;e.off(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(v.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.off(v.FRAG_LOADING,this.onFragLoading,this),e.off(v.FRAG_LOADED,this.onFragLoaded,this),e.off(v.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.off(v.FRAG_DECRYPTED,this.onFragDecrypted,this),e.off(v.INIT_PTS_FOUND,this.onInitPtsFound,this),e.off(v.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.off(v.BUFFER_FLUSHING,this.onBufferFlushing,this),this.hls=this.config=this.media=null,this.cea608Parser1=this.cea608Parser2=void 0}initCea608Parsers(){let e=new Vl(this,`textTrack1`),t=new Vl(this,`textTrack2`),n=new Vl(this,`textTrack3`),r=new Vl(this,`textTrack4`);this.cea608Parser1=new ol(1,e,t),this.cea608Parser2=new ol(3,n,r)}addCues(e,t,n,r,i){let a=!1;for(let e=i.length;e--;){let r=i[e],o=Gl(r[0],r[1],t,n);if(o>=0&&(r[0]=Math.min(r[0],t),r[1]=Math.max(r[1],n),a=!0,o/(n-t)>.5))return}if(a||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(v.CUES_PARSED,{type:`captions`,cues:i,track:e})}}onInitPtsFound(e,{frag:t,id:n,initPTS:r,timescale:i,trackId:a}){let{unparsedVttFrags:o}=this;n===b.MAIN&&(this.initPTS[t.cc]={baseTime:r,timescale:i,trackId:a}),o.length&&(this.unparsedVttFrags=[],o.forEach(e=>{this.initPTS[e.frag.cc]?this.onFragLoaded(v.FRAG_LOADED,e):this.hls.trigger(v.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(Wl(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,gc(n[e]),mc(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(v.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=>{gc(r[e]),delete r[e]}),this.nonNativeCaptionsTracks={}}onManifestLoading(){this.lastCc=-1,this.lastSn=-1,this.lastPartIndex=-1,this.prevCC=-1,this.vttCCs=Kl(),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++)gc(t[e])}onSubtitleTracksUpdated(e,t){let n=t.subtitleTracks||[],r=n.some(e=>e.textCodec===El);if(this.config.enableWebVTT||r&&this.config.enableIMSC1){if(To(this.tracks,n)){this.tracks=n;return}if(this.textTracks=[],this.tracks=n,this.config.renderTextTracksNatively){let e=this.media,t=e?bc(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]&&Wl(t[r],e)){n=t[r],t[r]=null;break}n&&(r=n)}if(r)gc(r);else{let t=Ul(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(v.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===b.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===b.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===El?this._parseIMSC1(n,r):this._parseVTTs(t)}}else this.hls.trigger(v.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:n,error:Error(`Empty subtitle payload`)})}_parseIMSC1(e,t){let n=this.hls;Al(t,this.initPTS[e.cc],t=>{this._appendCues(t,e.level),n.trigger(v.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:e})},t=>{n.logger.log(`Failed to parse IMSC1: ${t}`),n.trigger(v.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:e,error:t})})}_parseVTTs(e){var t;let{frag:n,payload:r}=e,{initPTS:i,unparsedVttFrags:a}=this,o=i.length-1;if(!i[n.cc]&&o===-1){a.push(e);return}let s=this.hls;Tl((t=n.initSegment)!=null&&t.data?Le(n.initSegment.data,new Uint8Array(r)).buffer:r,this.initPTS[n.cc],this.vttCCs,n.cc,n.start,e=>{this._appendCues(e,n.level),s.trigger(v.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:n})},t=>{let i=t.message===`Missing initPTS for VTT MPEGTS`;i?a.push(e):this._fallbackToIMSC1(n,r),s.logger.log(`Failed to parse VTT cue: ${t}`),!(i&&o>n.cc)&&s.trigger(v.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:n,error:t})})}_fallbackToIMSC1(e,t){let n=this.tracks[e.level];n.textCodec||Al(t,this.initPTS[e.cc],()=>{n.textCodec=El,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=>hc(n,e))}else{let r=this.tracks[t];if(!r)return;let i=r.default?`default`:`subtitles`+t;n.trigger(v.CUES_PARSED,{type:`subtitles`,cues:e,track:i})}}onFragDecrypted(e,t){let{frag:n}=t;n.type===b.SUBTITLE&&this.onFragLoaded(v.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===b.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=>_c(e[r],t,n))}if(this.config.renderTextTracksNatively&&t===0&&r!==void 0){let{textTracks:e}=this;Object.keys(e).forEach(n=>_c(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 Ul(e){return e.characteristics&&/transcribes-spoken-dialog/gi.test(e.characteristics)&&/describes-music-and-sound/gi.test(e.characteristics)?`captions`:`subtitles`}function Wl(e,t){return!!e&&e.kind===Ul(t)&&Do(t,e)}function Gl(e,t,n,r){return Math.min(t,r)-Math.max(e,n)}function Kl(){return{ccOffset:0,presentationOffset:0,0:{start:0,prevCC:-1,new:!0}}}var ql=/\s/,Jl={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++)ql.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=vl(l.trim()),p=Cl(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=>hc(e,t))),i}};function Yl(){if(self.fetch&&self.AbortController&&self.ReadableStream&&self.Request)try{return new self.ReadableStream({}),!0}catch{}return!1}var Xl=/(\d+)-(\d+)\/(\d+)/,Zl=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||tu,this.controller=new self.AbortController,this.stats=new ue}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(e,t,n){let r=this.stats;if(r.loading.start)throw Error(`Loader can only be used once.`);r.loading.start=self.performance.now();let i=Ql(e,this.controller.signal),a=e.responseType===`arraybuffer`,o=a?`byteLength`:`length`,{maxTimeToFirstByteMs:s,maxLoadTimeMs:c}=t.loadPolicy;this.context=e,this.config=t,this.callbacks=n,this.request=this.fetchSetup(e,i),self.clearTimeout(this.requestTimeout),t.timeout=s&&p(s)?s:c,this.requestTimeout=self.setTimeout(()=>{this.callbacks&&(this.abortInternal(),this.callbacks.onTimeout(r,e,this.response))},t.timeout),(_o(this.request)?this.request.then(self.fetch):self.fetch(this.request)).then(n=>{this.response=this.loader=n;let i=Math.max(self.performance.now(),r.loading.start);if(self.clearTimeout(this.requestTimeout),t.timeout=c,this.requestTimeout=self.setTimeout(()=>{this.callbacks&&(this.abortInternal(),this.callbacks.onTimeout(r,e,this.response))},c-(i-r.loading.start)),!n.ok){let{status:e,statusText:t}=n;throw new nu(t||`fetch, bad network response`,e,n)}r.loading.first=i,r.total=eu(n.headers)||r.total;let o=this.callbacks?.onProgress;return o&&p(t.highWaterMark)?this.loadProgressively(n,r,e,t.highWaterMark,o):a?n.arrayBuffer():e.responseType===`json`?n.json():n.text()}).then(n=>{var i;let a=this.response;if(!a)throw Error(`loader destroyed`);self.clearTimeout(this.requestTimeout),r.loading.end=Math.max(self.performance.now(),r.loading.first);let s=n[o];s&&(r.loaded=r.total=s);let c={url:a.url,data:n,code:a.status},l=this.callbacks?.onProgress;l&&!p(t.highWaterMark)&&l(r,e,n,a),(i=this.callbacks)==null||i.onSuccess(c,r,e,a)}).catch(t=>{var n;if(self.clearTimeout(this.requestTimeout),r.aborted)return;let i=t&&t.code||0,a=t?t.message:null;(n=this.callbacks)==null||n.onError({code:i,text:a},e,t?t.details:null,r)})}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 pi,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 Ql(e,t){let n={method:`GET`,mode:`cors`,credentials:`same-origin`,signal:t,headers:new self.Headers(w({},e.headers))};return e.rangeEnd&&n.headers.set(`Range`,`bytes=`+e.rangeStart+`-`+String(e.rangeEnd-1)),n}function $l(e){let t=Xl.exec(e);if(t)return parseInt(t[2])-parseInt(t[1])+1}function eu(e){let t=e.get(`Content-Range`);if(t){let e=$l(t);if(p(e))return e}let n=e.get(`Content-Length`);if(n)return parseInt(n)}function tu(e,t){return new self.Request(e.url,t)}var nu=class extends Error{constructor(e,t,n){super(e),this.code=void 0,this.details=void 0,this.code=t,this.details=n}},ru=/^age:\s*[\d.]+\s*$/im,iu=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 ue,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(e,t,n){e.readyState||e.open(`GET`,t.url,!0);let r=t.headers,{maxTimeToFirstByteMs:i,maxLoadTimeMs:a}=n.loadPolicy;if(r)for(let t in r)e.setRequestHeader(t,r[t]);t.rangeEnd&&e.setRequestHeader(`Range`,`bytes=`+t.rangeStart+`-`+(t.rangeEnd-1)),e.onreadystatechange=this.readystatechange.bind(this),e.onprogress=this.loadprogress.bind(this),e.responseType=t.responseType,self.clearTimeout(this.requestTimeout),n.timeout=i&&p(i)?i:a,this.requestTimeout=self.setTimeout(this.loadtimeout.bind(this),n.timeout),e.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(un(c,l,!1,{url:e.url,data:void 0,code:r}))this.retry(c);else{var o;I.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(un(e,t,!0))this.retry(e);else{I.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=cn(e,n.retry),n.retry++,I.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&&ru.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}},au=E(E({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:iu,fLoader:void 0,pLoader:void 0,xhrSetup:void 0,licenseXhrSetup:void 0,licenseResponseCallback:void 0,abrController:Yt,bufferController:No,capLevelController:Lo,errorController:mn,fpsController:pc,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:dr,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},ou()),{},{subtitleStreamController:Hc,subtitleTrackController:xc,timelineController:Hl,audioStreamController:Co,audioTrackController:Oo,emeController:cc,cmcdController:rc,contentSteeringController:ac,interstitialsController:Bc});function ou(){return{cueHandler:Jl,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 su(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=cu(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}": ${W(t[i])}`)}),E(E({},r),t)}function cu(e){return e&&typeof e==`object`?Array.isArray(e)?e.map(cu):Object.keys(e).reduce((t,n)=>(t[n]=cu(e[n]),t),{}):e}function lu(e,t){let n=e.loader;n!==Zl&&n!==iu?(t.log(`[config]: Custom loader detected, cannot enable progressive streaming`),e.progressive=!1):Yl()&&(e.loader=Zl,e.progressive=!0,e.enableSoftwareAES=!0,t.log(`[config]: Progressive streaming enabled, using FetchLoader`))}var uu=2,du=.1,fu=.05,pu=100,mu=class extends Pn{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(v.MEDIA_ENDED,{stalled:!1}))},this.hls=e,this.fragmentTracker=t,this.registerListeners()}registerListeners(){let{hls:e}=this;e&&(e.on(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(v.BUFFER_APPENDED,this.onBufferAppended,this))}unregisterListeners(){let{hls:e}=this;e&&(e.off(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(v.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(pu),this.mediaSource=t.mediaSource;let n=this.media=t.media;ci(n,`playing`,this.onMediaPlaying),ci(n,`waiting`,this.onMediaWaiting),ci(n,`ended`,this.onMediaEnded)}onMediaDetaching(e,t){this.clearInterval();let{media:n}=this;n&&(li(n,`playing`,this.onMediaPlaying),li(n,`waiting`,this.onMediaWaiting),li(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,a=this.seeking&&!i,o=!this.seeking&&i,s=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&&!s&&e>t&&this.nudgeOnVideoHole(e,t)),this.waiting===0&&this.stallResolved(e);return}if(o||a){a&&this.stallResolved(e);return}if(s){this.nudgeRetry=0,this.stallResolved(e),!this.ended&&r.ended&&this.hls&&(this.ended=e||1,this.hls.trigger(v.MEDIA_ENDED,{stalled:!1}));return}if(!q.getBuffered(r).length){this.nudgeRetry=0;return}let c=q.bufferInfo(r,e,0),l=c.nextStart||0,u=this.fragmentTracker;if(i&&u&&this.hls){let t=hu(this.hls.inFlightFragments,e),n=c.len>uu,r=!l||t||l-e>uu&&!u.getPartialFragment(e);if(n||r)return;this.moved=!1}let d=this.hls?.latestLevelDetails;if(!this.moved&&this.stalled!==null&&u){if(!(c.len>0)&&!l)return;let t=Math.max(l,c.start||0)-e,n=d!=null&&d.live?d.targetduration*2:uu,i=_u(e,u);if(t>0&&(t<=n||i)){r.paused||this._trySkipBufferHole(i);return}}let f=n.detectStallWithCurrentTimeMs,p=self.performance.now(),m=this.waiting,h=this.stalled;if(h===null)if(m>0&&p-m<f)h=this.stalled=m;else{this.stalled=p;return}let g=p-h;if(!i&&(g>=f||m)&&this.hls){if(this.mediaSource?.readyState===`ended`&&!(d!=null&&d.live)&&Math.abs(e-(d?.edge||0))<1){if(this.ended)return;this.ended=e||1,this.hls.trigger(v.MEDIA_ENDED,{stalled:!0});return}if(this._reportStall(c),!this.media||!this.hls)return}let _=q.bufferInfo(r,e,n.maxBufferHole);this._tryFixBufferStall(_,g,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(v.STALL_RESOLVED,{})}}nudgeOnVideoHole(e,t){var n;let r=this.buffered.video;if(this.hls&&this.media&&this.fragmentTracker&&(n=this.buffered.audio)!=null&&n.length&&r&&r.length>1&&e>r.end(0)){let n=q.bufferedInfo(q.timeRangesToArray(this.buffered.audio),e,0);if(n.len>1&&t>=n.start){let n=q.timeRangesToArray(r),i=q.bufferedInfo(n,t,0).bufferedIndex;if(i>-1&&i<n.length-1){let t=q.bufferedInfo(n,e,0).bufferedIndex,r=n[i].end,a=n[i+1].start;if((t===-1||t>i)&&a-r<1&&e-r<2){let n=Error(`nudging playhead to flush pipeline after video hole. currentTime: ${e} hole: ${r} -> ${a} buffered index: ${t}`);this.warn(n.message),this.media.currentTime+=1e-6;let i=_u(e,this.fragmentTracker);i&&`fragment`in i?i=i.fragment:i||=void 0;let o=q.bufferInfo(this.media,e,0);this.hls.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.BUFFER_SEEK_OVER_HOLE,fatal:!1,error:n,reason:n.message,frag:i,buffer:o.len,bufferInfo:o})}}}}}_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=_u(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,b.MAIN),i=n.getFragAtPos(r,b.MAIN);if(e&&i)return i.sn-e.sn<2}return!1}_reportStall(e){let{hls:t,media:n,stallReported:r,stalled:i}=this;if(!r&&i!==null&&n&&t){this.stallReported=!0;let r=Error(`Playback stalling at @${n.currentTime} due to low buffer (${W(e)})`);this.warn(r.message),t.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.BUFFER_STALLED_ERROR,fatal:!1,error:r,buffer:e.len,bufferInfo:e,stalled:{start:i}})}}_trySkipBufferHole(e){let{fragmentTracker:t,media:n}=this,r=this.hls?.config;if(!n||!t||!r)return 0;let i=n.currentTime,a=q.bufferInfo(n,i,0),o=i<a.start?a.start:a.nextStart;if(o&&this.hls){let c=a.len<=r.maxBufferHole,l=a.len>0&&a.len<1&&n.readyState<3,u=o-i;if(u>0&&(c||l)){if(u>r.maxBufferHole){let n=!1;if(i===0){let e=t.getAppendedFrag(0,b.MAIN);e&&o<e.end&&(n=!0)}if(!n&&e){var s;if(!((s=this.hls.loadLevelObj)!=null&&s.details)||hu(this.hls.inFlightFragments,o))return 0;let n=!1,r=e.end;for(;r<o;){let e=_u(r,t);if(e)r+=e.duration;else{n=!0;break}}if(n)return 0}}let c=Math.max(o+fu,i+du);if(this.warn(`skipping hole, adjusting currentTime from ${i} to ${c}`),this.moved=!0,n.currentTime=c,!(e!=null&&e.gap)){let t=Error(`fragment loaded with buffer holes, seeking from ${i} to ${c}`),n={type:g.MEDIA_ERROR,details:_.BUFFER_SEEK_OVER_HOLE,fatal:!1,error:t,reason:t.message,buffer:a.len,bufferInfo:a};e&&(`fragment`in e?n.part=e:n.frag=e),this.hls.trigger(v.ERROR,n)}return c}}return 0}_tryNudgeBuffer(e){let{hls:t,media:n,nudgeRetry:r}=this,i=t?.config;if(!n||!i)return 0;let a=n.currentTime;if(this.nudgeRetry++,r<i.nudgeMaxRetry){let o=a+(r+1)*i.nudgeOffset,s=Error(`Nudging 'currentTime' from ${a} to ${o}`);this.warn(s.message),n.currentTime=o,t.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.BUFFER_NUDGE_ON_STALL,error:s,fatal:!1,buffer:e.len,bufferInfo:e})}else{let n=Error(`Playhead still not moving while enough data buffered @${a} after ${i.nudgeMaxRetry} nudges`);this.error(n.message),t.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.BUFFER_STALLED_ERROR,error:n,fatal:!0,buffer:e.len,bufferInfo:e})}}};function hu(e,t){let n=gu(e.main);if(n&&n.start<=t)return n;let r=gu(e.audio);return r&&r.start<=t?r:null}function gu(e){if(!e)return null;switch(e.state){case X.IDLE:case X.STOPPED:case X.ENDED:case X.ERROR:return null}return e.frag}function _u(e,t){return t.getAppendedFrag(e,b.MAIN)||t.getPartialFragment(e)}var vu=.25;function yu(){if(!(typeof self>`u`))return self.VTTCue||self.TextTrackCue}function bu(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,W(i?E({type:i},r):r))}return a}var xu=(()=>{let e=yu();try{e&&new e(0,1/0,``)}catch{return Number.MAX_VALUE}return 1/0})(),Su=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(v.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(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.FRAG_PARSING_METADATA,this.onFragParsingMetadata,this),e.on(v.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(v.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(v.LEVEL_PTS_UPDATED,this.onLevelPtsUpdated,this))}_unregisterListeners(){let{hls:e}=this;e&&(e.off(v.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.FRAG_PARSING_METADATA,this.onFragParsingMetadata,this),e.off(v.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(v.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(v.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&&gc(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 mc(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=yu();if(a)for(let e=0;e<i.length;e++){let t=i[e].type;if(t===aa.emsg&&!n||!r)continue;let o=ta(i[e].data),s=i[e].pts,c=s+i[e].duration;c>xu&&(c=xu),c-s<=0&&(c=s+vu);for(let e=0;e<o.length;e++){let n=o[e];if(!na(n)){this.updateId3CueEnds(s,t);let e=bu(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===xu&&(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===aa.audioId3&&s:r===`video`?e=>e.type===aa.emsg&&o:e=>e.type===aa.audioId3&&s||e.type===aa.emsg&&o,_c(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(e,t){if(!this.hls||!this.media)return;let{assetPlayerId:n,timelineOffset:r,enableDateRangeMetadataCues:i,interstitialsController:a}=this.hls.config;if(!i)return;let o=yu();if(n&&r&&!a){let{fragmentStart:t,fragmentEnd:r}=e,i=this.assetCue;i?(i.startTime=t,i.endTime=r):o&&(i=this.assetCue=bu(o,t,r,{assetPlayerId:this.hls.config.assetPlayerId},`hlsjs.interstitial.asset`),i&&(i.id=n,this.id3Track||=this.createTrack(this.media),this.id3Track.addCue(i),i.addEventListener(`enter`,this.onEventCueEnter)))}if(!e.hasProgramDateTime)return;let{id3Track:s}=this,{dateRanges:c}=e,l=Object.keys(c),u=this.dateRangeCuesAppended;if(s&&t){var d;if((d=s.cues)!=null&&d.length){let e=Object.keys(u).filter(e=>!l.includes(e));for(let t=e.length;t--;){let n=e[t],r=u[n]?.cues;delete u[n],r&&Object.keys(r).forEach(e=>{let t=r[e];if(t){t.removeEventListener(`enter`,this.onEventCueEnter);try{s.removeCue(t)}catch{}}})}}else u=this.dateRangeCuesAppended={}}let f=e.fragments[e.fragments.length-1];if(!(l.length===0||!p(f?.programDateTime))){this.id3Track||=this.createTrack(this.media);for(let e=0;e<l.length;e++){let t=l[e],n=c[t],r=n.startTime,i=u[t],s=i?.cues||{},d=i?.durationKnown||!1,f=xu,{duration:p,endDate:m}=n;if(m&&p!==null)f=r+p,d=!0;else if(n.endOnNext&&!d){let e=l.reduce((e,t)=>{if(t!==n.id){let r=c[t];if(r.class===n.class&&r.startDate>n.startDate&&(!e||n.startDate<e.startDate))return r}return e},null);e&&(f=e.startTime,d=!0)}let h=Object.keys(n.attr);for(let e=0;e<h.length;e++){let c=h[e];if(!Kn(c))continue;let l=s[c];if(l)d&&!(i!=null&&i.durationKnown)?l.endTime=f:Math.abs(l.startTime-r)>.01&&(l.startTime=r,l.endTime=f);else if(o){let e=n.attr[c];qn(c)&&(e=ie(e));let i=bu(o,r,f,{key:c,data:e},aa.dateRange);i&&(i.id=t,this.id3Track.addCue(i),s[c]=i,a&&(c===`X-ASSET-LIST`||c===`X-ASSET-URL`)&&i.addEventListener(`enter`,this.onEventCueEnter))}}u[t]={cues:s,dateRange:n,durationKnown:d}}}}},Cu=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(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(v.ERROR,this.onError,this))}unregisterListeners(){let{hls:e}=this;e&&(e.off(v.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(v.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(v.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===_.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}},wu=class extends wo{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(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(v.LEVEL_LOADED,this.onLevelLoaded,this),e.on(v.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(v.FRAG_BUFFERED,this.onFragBuffered,this),e.on(v.ERROR,this.onError,this)}_unregisterListeners(){let{hls:e}=this;e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(v.LEVEL_LOADED,this.onLevelLoaded,this),e.off(v.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(v.FRAG_BUFFERED,this.onFragBuffered,this),e.off(v.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=at(l,n)||void 0),u&&=e.videoCodec=lt(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 jt(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=gt(e,[])}return t}isAudioSupported(e){return Ze(e,`audio`,this.hls.config.preferManagedMediaSource)}isVideoSupported(e){return Ze(e,`video`,this.hls.config.preferManagedMediaSource)}filterAndSortMediaOptions(e,t,n,r,i){let a=[],o=[],s=e,c=t.stats?.parsing||{};if((n||r)&&i&&(s=s.filter(({videoCodec:e,videoRange:t,width:n,height:r})=>(!!e||!!(n&&r))&&Dt(t))),s.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: ${W(t.levels.map(e=>e.attrs.CODECS).filter((e,t,n)=>n.indexOf(e)===t))}`,this.warn(n),e+=` (${n})`);let r=Error(e);this.hls.trigger(v.ERROR,{type:g.MEDIA_ERROR,details:_.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:t.url,error:r,reason:n})}}),c.end=performance.now();return}t.audioTracks&&(a=t.audioTracks.filter(e=>!e.audioCodec||this.isAudioSupported(e.audioCodec)),Tu(a)),t.subtitles&&(o=t.subtitles,Tu(o));let l=s.slice(0);s.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 Et.indexOf(e.videoRange)-Et.indexOf(t.videoRange);if(e.videoCodec!==t.videoCodec){let n=et(e.videoCodec),r=et(t.videoCodec);if(n!==r)return r-n}if(e.uri===t.uri&&e.codecSet!==t.codecSet){let n=tt(e.codecSet),r=tt(t.codecSet);if(n!==r)return r-n}return e.averageBitrate===t.averageBitrate?0:e.averageBitrate-t.averageBitrate});let u=l[0];if(this.steering&&(s=this.steering.filterParsedLevels(s),s.length!==l.length)){for(let e=0;e<l.length;e++)if(l[e].pathwayId===s[0].pathwayId){u=l[e];break}}this._levels=s;for(let e=0;e<s.length;e++)if(s[e]===u){this._firstLevel=e;let t=u.bitrate,n=this.hls.bandwidthEstimate;if(this.log(`manifest loaded, ${s.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 d=i&&!r,f=this.hls.config,p=!!(f.audioStreamController&&f.audioTrackController),m={levels:s,audioTracks:a,subtitleTracks:o,sessionData:t.sessionData,sessionKeys:t.sessionKeys,firstLevel:this._firstLevel,stats:t.stats,audio:i,video:r,altAudio:p&&!d&&a.some(e=>!!e.url)};c.end=performance.now(),this.hls.trigger(v.MANIFEST_PARSED,m)}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`),r=e<0;if(this.hls.trigger(v.ERROR,{type:g.OTHER_ERROR,details:_.LEVEL_SWITCH_ERROR,level:e,fatal:r,error:n,reason:n.message}),r)return;e=Math.min(e,t.length-1)}let n=this.currentLevelIndex,r=this.currentLevel,i=r?r.attrs[`PATHWAY-ID`]:void 0,a=t[e],o=a.attrs[`PATHWAY-ID`];if(this.currentLevelIndex=e,this.currentLevel=a,n===e&&r&&i===o)return;this.log(`Switching to level ${e} (${a.height?a.height+`p `:``}${a.videoRange?a.videoRange+` `:``}${a.codecSet?a.codecSet+` `:``}@${a.bitrate})${o?` with Pathway `+o:``} from level ${n}${i?` with Pathway `+i:``}`);let s={level:e,attrs:a.attrs,details:a.details,bitrate:a.bitrate,averageBitrate:a.averageBitrate,maxBitrate:a.maxBitrate,realBitrate:a.realBitrate,width:a.width,height:a.height,codecSet:a.codecSet,audioCodec:a.audioCodec,videoCodec:a.videoCodec,audioGroups:a.audioGroups,subtitleGroups:a.subtitleGroups,loaded:a.loaded,loadError:a.loadError,fragmentError:a.fragmentError,name:a.name,id:a.id,uri:a.uri,url:a.url,urlId:0,audioGroupIds:a.audioGroupIds,textGroupIds:a.textGroupIds};this.hls.trigger(v.LEVEL_SWITCHING,s);let c=a.details;if(!c||c.live){let e=this.switchParams(a.uri,r?.details,c);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===y.LEVEL&&t.context.level===this.level&&this.checkRetry(t)}onFragBuffered(e,{frag:t}){if(t!==void 0&&t.type===b.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`],a=e.details,o=a?.age;this.log(`Loading level index ${r}${t?.msn===void 0?``:` at sn `+t.msn+` part `+t.part}${i?` Pathway `+i:``}${o&&a.live?` age `+o.toFixed(1)+(a.type&&` `+a.type||``):``} ${n}`),this.hls.trigger(v.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);Qr(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(v.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(v.MAX_AUTO_LEVEL_UPDATED,{autoLevelCapping:e,levels:this.levels,maxAutoLevel:t,minAutoLevel:this.hls.minAutoLevel,maxHdcpLevel:n}))}};function Tu(e){let t={};e.forEach(e=>{let n=e.groupId||``;e.id=t[n]=t[n]||0,t[n]++})}function Eu(){return self.SourceBuffer||self.WebKitSourceBuffer}function Du(){if(!te())return!1;let e=Eu();return!e||e.prototype&&typeof e.prototype.appendBuffer==`function`&&typeof e.prototype.remove==`function`}function Ou(){if(!Du())return!1;let e=te();return typeof e?.isTypeSupported==`function`&&([`avc1.42E01E,mp4a.40.2`,`av01.0.01M.08`,`vp09.00.50.08`].some(t=>e.isTypeSupported($e(t,`video`)))||[`mp4a.40.2`,`fLaC`].some(t=>e.isTypeSupported($e(t,`audio`))))}function ku(){var e;let t=Eu();return typeof(t==null||(e=t.prototype)==null?void 0:e.changeType)==`function`}var Au=100,ju=class extends di{constructor(e,t,n){super(e,t,n,`stream-controller`,b.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 e=this.media,t=e?e.currentTime:null;if(t===null||!p(t)||(this.log(`Media seeked to ${t.toFixed(3)}`),!this.getBufferedFrag(t)))return;let n=this.getFwdBufferInfoAtPos(e,t,b.MAIN,0);if(n===null||n.len===0){this.warn(`Main forward buffer length at ${t} on "seeked" event ${n?n.len:`empty`})`);return}this.tick()},this.registerListeners()}registerListeners(){super.registerListeners();let{hls:e}=this;e.on(v.MANIFEST_PARSED,this.onManifestParsed,this),e.on(v.LEVEL_LOADING,this.onLevelLoading,this),e.on(v.LEVEL_LOADED,this.onLevelLoaded,this),e.on(v.FRAG_LOAD_EMERGENCY_ABORTED,this.onFragLoadEmergencyAborted,this),e.on(v.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.on(v.AUDIO_TRACK_SWITCHED,this.onAudioTrackSwitched,this),e.on(v.BUFFER_CREATED,this.onBufferCreated,this),e.on(v.BUFFER_FLUSHED,this.onBufferFlushed,this),e.on(v.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(v.FRAG_BUFFERED,this.onFragBuffered,this)}unregisterListeners(){super.unregisterListeners();let{hls:e}=this;e.off(v.MANIFEST_PARSED,this.onManifestParsed,this),e.off(v.LEVEL_LOADED,this.onLevelLoaded,this),e.off(v.FRAG_LOAD_EMERGENCY_ABORTED,this.onFragLoadEmergencyAborted,this),e.off(v.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.off(v.AUDIO_TRACK_SWITCHED,this.onAudioTrackSwitched,this),e.off(v.BUFFER_CREATED,this.onBufferCreated,this),e.off(v.BUFFER_FLUSHED,this.onBufferFlushed,this),e.off(v.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(v.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(Au),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=X.IDLE,this.nextLoadPosition=this.lastCurrentTime=e+this.timelineOffset,this.startPosition=t?-1:e,this.tick()}else this._forceStartLoad=!0,this.state=X.STOPPED}stopLoad(){this._forceStartLoad=!1,super.stopLoad()}doTick(){switch(this.state){case X.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=X.IDLE;break}else if(this.hls.nextLoadLevel!==this.level){this.state=X.IDLE;break}break}case X.FRAG_LOADING_WAITING_RETRY:this.checkRetryDate();break}this.state===X.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 a=n[i],o=this.getMainFwdBufferInfo();if(o===null)return;let s=this.getLevelDetails();if(s&&this._streamEnded(o,s)){let e={};this.altAudio===2&&(e.type=`video`),this.hls.trigger(v.BUFFER_EOS,e),this.state=X.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 c=a.details;if(!c||this.state===X.WAITING_LEVEL||this.waitForLive(a)){this.level=i,this.state=X.WAITING_LEVEL,this.startFragRequested=!1;return}let l=o.len,u=this.getMaxBufferLength(a.maxBitrate);if(l>=u)return;this.backtrackFragment&&this.backtrackFragment.start>o.end&&(this.backtrackFragment=null);let d=this.backtrackFragment?this.backtrackFragment.start:o.end,f=this.getNextFragment(d,c);if(this.couldBacktrack&&!this.fragPrevious&&f&&B(f)&&this.fragmentTracker.getState(f)!==K.OK){let e=(this.backtrackFragment??f).sn-c.startSN,t=c.fragments[e-1];t&&f.cc===t.cc&&(f=t,this.fragmentTracker.removeFragment(t))}else this.backtrackFragment&&o.len&&(this.backtrackFragment=null);if(f&&this.isLoopLoading(f,d)){if(!f.gap){let e=this.audioOnly&&!this.altAudio?z.AUDIO:z.VIDEO,t=(e===z.VIDEO?this.videoBuffer:this.mediaBuffer)||this.media;t&&this.afterBufferFlushed(t,e,b.MAIN)}f=this.getNextFragmentLoopLoading(f,c,o,b.MAIN,u)}f&&(this.exceedsMaxBuffer(o,u,f)||(f.initSegment&&!f.initSegment.data&&!this.bitrateTest&&(f=f.initSegment),this.loadFragment(f,a,d)))}loadFragment(e,t,n){let r=this.fragmentTracker.getState(e);r===K.NOT_LOADED||r===K.PARTIAL?B(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,b.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 X.KEY_LOADING:case X.FRAG_LOADING:case X.FRAG_LOADING_WAITING_RETRY:case X.PARSING:case X.PARSED:this.state=X.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;ci(n,`playing`,this.onMediaPlaying),ci(n,`seeked`,this.onMediaSeeked)}onMediaDetaching(e,t){let{media:n}=this;n&&(li(n,`playing`,this.onMediaPlaying),li(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(v.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&&!ku(),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!==X.IDLE)return;let r=t.levelInfo;(!r.details||r.details.live&&(this.levelLastLoaded!==r||r.details.expired)||this.waitForCdnTuneIn(r.details))&&(this.state=X.WAITING_LEVEL)}onLevelLoaded(e,t){var n;let{levels:r,startFragRequested:i}=this,a=t.level,o=t.details,s=o.totalduration;if(!r){this.warn(`Levels were reset while loading level ${a}`);return}this.log(`Level ${a} loaded [${o.startSN},${o.endSN}]${o.lastPartSn?`[part-${o.lastPartSn}-${o.lastPartIndex}]`:``}, cc [${o.startCC}, ${o.endCC}] duration:${s}`);let c=t.levelInfo,l=this.fragCurrent;l&&(this.state===X.FRAG_LOADING||this.state===X.FRAG_LOADING_WAITING_RETRY)&&l.level!==t.level&&l.loader&&this.abortCurrentFrag();let u=0;if(o.live||(n=c.details)!=null&&n.live){if(this.checkLiveUpdate(o),o.deltaUpdateFailed)return;u=this.alignPlaylists(o,c.details,this.levelLastLoaded?.details)}if(c.details=o,this.levelLastLoaded=c,i||this.setStartPosition(o,u),this.hls.trigger(v.LEVEL_UPDATED,{details:o,level:a}),this.state===X.WAITING_LEVEL){if(this.waitForCdnTuneIn(o))return;this.state=X.IDLE}i&&o.live&&this.synchronizeToLiveEdge(o),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=q.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}=q.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 s=a.videoCodec,c=o.PTSKnown||!o.live,l=t.initSegment?.data,u=this._getAudioCodec(a),d=this.transmuxer=this.transmuxer||new xo(this.hls,b.MAIN,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this)),f=n?n.index:-1,p=f!==-1,m=new Fn(t.level,t.sn,t.stats.chunkCount,r.byteLength,f,p),h=this.initPTS[t.cc];d.push(r,l,u,s,t,n,o.totalduration,c,m,h)}onAudioTrackSwitching(e,t){let n=this.hls,r=this.altAudio!==0;if(Jt(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(v.BUFFER_FLUSHED,()=>{this.hls&&this.hls.trigger(v.AUDIO_TRACK_SWITCHED,t)}),n.trigger(v.BUFFER_FLUSHING,{startOffset:0,endOffset:1/0,type:null});return}n.trigger(v.AUDIO_TRACK_SWITCHED,t)}}onAudioTrackSwitched(e,t){let n=Jt(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===b.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===X.PARSED&&(this.state=X.IDLE);return}let e=r?r.stats:n.stats;this.fragLastKbps=Math.round(8*e.total/(e.buffering.end-e.loading.first)),B(n)&&(this.fragPrevious=n),this.fragBufferedComplete(n,r)}let a=this.media;a&&(!this._hasEnoughToStart&&q.getBuffered(a).length&&(this._hasEnoughToStart=!0,this.seekToStartPos()),i&&this.tick())}get hasEnoughToStart(){return this._hasEnoughToStart}onError(e,t){if(t.fatal){this.state=X.ERROR;return}switch(t.details){case _.FRAG_GAP:case _.FRAG_PARSING_ERROR:case _.FRAG_DECRYPT_ERROR:case _.FRAG_LOAD_ERROR:case _.FRAG_LOAD_TIMEOUT:case _.KEY_LOAD_ERROR:case _.KEY_LOAD_TIMEOUT:this.onFragmentOrKeyLoadError(b.MAIN,t);break;case _.LEVEL_LOAD_ERROR:case _.LEVEL_LOAD_TIMEOUT:case _.LEVEL_PARSING_ERROR:!t.levelRetry&&this.state===X.WAITING_LEVEL&&t.context?.type===y.LEVEL&&(this.state=X.IDLE);break;case _.BUFFER_ADD_CODEC_ERROR:case _.BUFFER_APPEND_ERROR:if(t.parent!==`main`)return;this.reduceLengthAndFlushBuffer(t)&&this.resetLoadingState();break;case _.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 _.INTERNAL_EXCEPTION:this.recoverWorkerError(t);break}}onFragLoadEmergencyAborted(){this.state=X.IDLE,this._hasEnoughToStart||(this.startFragRequested=!1,this.nextLoadPosition=this.lastCurrentTime),this.tickImmediate()}onBufferFlushed(e,{type:t}){if(t!==z.AUDIO||!this.altAudio){let e=(t===z.VIDEO?this.videoBuffer:this.mediaBuffer)||this.media;e&&(this.afterBufferFlushed(e,t,b.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=q.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=X.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(v.FRAG_LOADED,e),r.bitrateTest=!1}).catch(t=>{this.state===X.STOPPED||this.state===X.ERROR||(this.warn(t),this.resetFragmentLoading(e))})}_handleTransmuxComplete(e){let t=this.playlistType,{hls:n}=this,{remuxResult:r,chunkMeta:i}=e,a=this.getCurrentContext(i);if(!a){this.resetWhenMissingContext(i);return}let{frag:o,part:s,level:c}=a,{video:l,text:u,id3:d,initSegment:f}=r,{details:m}=c,h=this.altAudio?void 0:r.audio;if(this.fragContextChanged(o)){this.fragmentTracker.removeFragment(o);return}if(this.state=X.PARSING,f){let e=f.tracks;if(e){let r=o.initSegment||o;if(this.unhandledEncryptionError(f,o))return;this._bufferInitSegment(c,e,r,i),n.trigger(v.FRAG_PARSING_INIT_SEGMENT,{frag:r,id:t,tracks:e})}let r=f.initPTS,a=f.timescale,s=this.initPTS[o.cc];if(p(r)&&(!s||s.baseTime!==r||s.timescale!==a)){let e=f.trackId;this.initPTS[o.cc]={baseTime:r,timescale:a,trackId:e},n.trigger(v.INIT_PTS_FOUND,{frag:o,id:t,initPTS:r,timescale:a,trackId:e})}}if(l&&m){h&&l.type===`audiovideo`&&this.logMuxedErr(o);let e=m.fragments[o.sn-1-m.startSN],t=o.sn===m.startSN,n=!e||o.cc>e.cc;if(r.independent!==!1){let{startPTS:e,endPTS:r,startDTS:a,endDTS:c}=l;if(s)s.elementaryStreams[l.type]={startPTS:e,endPTS:r,startDTS:a,endDTS:c};else if(l.firstKeyFrame&&l.independent&&i.id===1&&!n&&(this.couldBacktrack=!0),l.dropped&&l.independent){let i=this.getMainFwdBufferInfo(),a=(i?i.end:this.getLoadPosition())+this.config.maxBufferHole,s=l.firstKeyFramePTS?l.firstKeyFramePTS:e;if(!t&&a<s-this.config.maxBufferHole&&!n){this.backtrack(o);return}else n&&(o.gap=!0);o.setElementaryStreamInfo(l.type,o.start,r,o.start,c,!0)}else t&&e-(m.appliedTimelineOffset||0)>uu&&(o.gap=!0);o.setElementaryStreamInfo(l.type,e,r,a,c),this.backtrackFragment&&=o,this.bufferFragmentData(l,o,s,i,t||n)}else if(t||n)o.gap=!0;else{this.backtrack(o);return}}if(h){let{startPTS:e,endPTS:t,startDTS:n,endDTS:r}=h;s&&(s.elementaryStreams[z.AUDIO]={startPTS:e,endPTS:t,startDTS:n,endDTS:r}),o.setElementaryStreamInfo(z.AUDIO,e,t,n,r),this.bufferFragmentData(h,o,s,i)}if(m&&d!=null&&d.samples.length){let e={id:t,frag:o,details:m,samples:d.samples};n.trigger(v.FRAG_PARSING_METADATA,e)}if(m&&u){let e={id:t,frag:o,details:m,samples:u.samples};n.trigger(v.FRAG_PARSING_USERDATA,e)}}logMuxedErr(e){this.warn(`${B(e)?`Media`:`Init`} segment with muxed audiovideo where only video expected: ${e.url}`)}_bufferInitSegment(e,t,n,r){if(this.state!==X.PARSING)return;this.audioOnly=!!t.audio&&!t.video,this.altAudio&&!this.audioOnly&&(delete t.audio,t.audiovideo&&this.logMuxedErr(n));let{audio:i,video:a,audiovideo:o}=t;if(i){let n=e.audioCodec,r=st(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=b.MAIN,this.log(`Init audio buffer, container:${i.container}, codecs[selected/level/parsed]=[${r||``}/${n||``}/${i.codec}]`),delete t.audiovideo}if(a){a.levelCodec=e.videoCodec,a.id=b.MAIN;let n=a.codec;if(n?.length===4)switch(n){case`hvc1`:case`hev1`:a.codec=`hvc1.1.6.L120.90`;break;case`av01`:a.codec=`av01.0.04M.08`;break;case`avc1`:a.codec=`avc1.42e01e`;break}this.log(`Init video buffer, container:${a.container}, codecs[level/parsed]=[${e.videoCodec||``}/${n}]${a.codec===n?``:` parsed-corrected=`+a.codec}${a.supplemental?` supplemental=`+a.supplemental:``}`),delete t.audiovideo}o&&(this.log(`Init audiovideo buffer, container:${o.container}, codecs[level/parsed]=[${e.codecs}/${o.codec}]`),delete t.video,delete t.audio);let s=Object.keys(t);if(s.length){if(this.hls.trigger(v.BUFFER_CODECS,t),!this.hls)return;s.forEach(e=>{let i=t[e].initSegment;i!=null&&i.byteLength&&this.hls.trigger(v.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,b.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=X.IDLE}checkFragmentChanged(){let e=this.media,t=null;if(e&&e.readyState>1&&e.seeking===!1){let n=e.currentTime;if(q.isBuffered(e,n)?t=this.getAppendedFrag(n):q.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(v.FRAG_CHANGED,{frag:t}),(!e||e.level!==n)&&this.hls.trigger(v.LEVEL_SWITCHED,{level:n}))}}}get nextLevel(){let e=this.nextBufferedFrag;return e?e.level:-1}get currentFrag(){if(this.fragPlaying)return this.fragPlaying;let e=this.media?.currentTime||this.lastCurrentTime;return p(e)?this.getAppendedFrag(e):null}get currentProgramDateTime(){let e=this.media?.currentTime||this.lastCurrentTime;if(p(e)){let t=this.getLevelDetails(),n=this.currentFrag||(t?Qt(null,t.fragments,e):null);if(n){let t=n.programDateTime;if(t!==null){let r=t+(e-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}},Mu=class extends k{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=_.KEY_LOAD_ERROR,n,r,i){return new Nn({type:g.NETWORK_ERROR,details:t,fatal:!1,frag:e,response:i,error:n,networkDetails:r})}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&&(!B(e)||!B(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=cr(e);if(t)return this.emeController.getKeySystemAccess([t])})}if(this.config.requireKeySystemAccessOnStart){let e=ur(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 i=e.decryptdata;if(!i){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,_.KEY_LOAD_ERROR,n))}let a=i.uri;if(!a)return Promise.reject(this.createKeyLoadError(e,_.KEY_LOAD_ERROR,Error(`Invalid key URI: "${a}"`)));let o=Nu(i),s=this.keyIdToKeyInfo[o];if((n=s)!=null&&n.decryptdata.key)return i.key=s.decryptdata.key,Promise.resolve({frag:e,keyInfo:s});if(this.emeController&&(r=s)!=null&&r.keyLoadPromise)switch(this.emeController.getKeyStatus(s.decryptdata)){case`usable`:case`usable-in-future`:return s.keyLoadPromise.then(t=>{let{keyInfo:n}=t;return i.key=n.decryptdata.key,{frag:e,keyInfo:n}})}switch(this.log(`${this.keyIdToKeyInfo[o]?`Rel`:`L`}oading${i.keyId?` keyId: `+R(i.keyId):``} URI: ${i.uri} from ${e.type} ${e.level}`),s=this.keyIdToKeyInfo[o]={decryptdata:i,keyLoadPromise:null,loader:null,mediaKeySessionContext:null},i.method){case`SAMPLE-AES`:case`SAMPLE-AES-CENC`:case`SAMPLE-AES-CTR`:return i.keyFormat===`identity`?this.loadKeyHTTP(s,e):this.loadKeyEME(s,e);case`AES-128`:case`AES-256`:case`AES-256-CTR`:return this.loadKeyHTTP(s,e);default:return Promise.reject(this.createKeyLoadError(e,_.KEY_LOAD_ERROR,Error(`Key supplied with unsupported METHOD: "${i.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=Me(t.initSegment.data);if(n.length){let t=n[0];t.some(e=>e!==0)?(this.log(`Using keyId found in init segment ${R(t)}`),_r.setKeyIdForUri(e.decryptdata.uri,t)):(t=_r.addKeyIdForUri(e.decryptdata.uri),this.log(`Generating keyId to patch media ${R(t)}`)),e.decryptdata.keyId=t}}return!e.decryptdata.keyId&&!B(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,i=new r(n);return t.keyLoader=e.loader=i,e.keyLoadPromise=new Promise((r,a)=>{let o={keyInfo:e,frag:t,responseType:`arraybuffer`,url:e.decryptdata.uri},s=n.keyLoadPolicy.default,c={loadPolicy:s,timeout:s.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0};i.load(o,c,{onSuccess:(e,t,n,i)=>{let{frag:o,keyInfo:s}=n,c=Nu(s.decryptdata);if(!o.decryptdata||s!==this.keyIdToKeyInfo[c])return a(this.createKeyLoadError(o,_.KEY_LOAD_ERROR,Error(`after key load, decryptdata unset or changed`),i));s.decryptdata.key=o.decryptdata.key=new Uint8Array(e.data),o.keyLoader=null,s.loader=null,r({frag:o,keyInfo:s})},onError:(e,n,r,i)=>{this.resetLoader(n),a(this.createKeyLoadError(t,_.KEY_LOAD_ERROR,Error(`HTTP Error ${e.code} loading key ${e.text}`),r,E({url:o.url,data:void 0},e)))},onTimeout:(e,n,r)=>{this.resetLoader(n),a(this.createKeyLoadError(t,_.KEY_LOAD_TIMEOUT,Error(`key loading timed out`),r))},onAbort:(e,n,r)=>{this.resetLoader(n),a(this.createKeyLoadError(t,_.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=Nu(n.decryptdata)||r;delete this.keyIdToKeyInfo[a],i&&i.destroy()}};function Nu(e){if(e.keyFormat!==sr.FAIRPLAY){let t=e.keyId;if(t)return R(t)}return e.uri}function Pu(e){let{type:t}=e;switch(t){case y.AUDIO_TRACK:return b.AUDIO;case y.SUBTITLE_TRACK:return b.SUBTITLE;default:return b.MAIN}}function Fu(e,t){let n=e.url;return(n===void 0||n.indexOf(`data:`)===0)&&(n=t.url),n}var Iu=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(v.MANIFEST_LOADING,this.onManifestLoading,this),e.on(v.LEVEL_LOADING,this.onLevelLoading,this),e.on(v.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),e.on(v.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this),e.on(v.LEVELS_UPDATED,this.onLevelsUpdated,this)}unregisterListeners(){let{hls:e}=this;e.off(v.MANIFEST_LOADING,this.onManifestLoading,this),e.off(v.LEVEL_LOADING,this.onLevelLoading,this),e.off(v.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),e.off(v.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this),e.off(v.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:y.MANIFEST,url:n,deliveryDirectives:null,levelOrTrack:null})}onLevelLoading(e,t){let{id:n,level:r,pathwayId:i,url:a,deliveryDirectives:o,levelInfo:s}=t;this.load({id:n,level:r,pathwayId:i,responseType:`text`,type:y.LEVEL,url:a,deliveryDirectives:o,levelOrTrack:s})}onAudioTrackLoading(e,t){let{id:n,groupId:r,url:i,deliveryDirectives:a,track:o}=t;this.load({id:n,groupId:r,level:null,responseType:`text`,type:y.AUDIO_TRACK,url:i,deliveryDirectives:a,levelOrTrack:o})}onSubtitleTrackLoading(e,t){let{id:n,groupId:r,url:i,deliveryDirectives:a,track:o}=t;this.load({id:n,groupId:r,level:null,responseType:`text`,type:y.SUBTITLE_TRACK,url:i,deliveryDirectives:a,levelOrTrack:o})}onLevelsUpdated(e,t){let n=this.loaders[y.LEVEL];if(n){let e=n.context;e&&!t.levels.some(t=>t===e.levelOrTrack)&&(n.abort(),delete this.loaders[y.LEVEL])}}load(e){let t=this.hls.config,n=this.getInternalLoader(e);if(n){let t=this.hls.logger,r=n.context;if(r&&r.levelOrTrack===e.levelOrTrack&&(r.url===e.url||r.deliveryDirectives&&!e.deliveryDirectives)){r.url===e.url?t.log(`[playlist-loader]: ignore ${e.url} ongoing request`):t.log(`[playlist-loader]: ignore ${e.url} in favor of ${r.url}`);return}t.log(`[playlist-loader]: aborting previous loader for type: ${e.type}`),n.abort()}let r;if(r=e.type===y.MANIFEST?t.manifestLoadPolicy.default:w({},t.playlistLoadPolicy.default,{timeoutRetry:null,errorRetry:null}),n=this.createInternalLoader(e),p(e.deliveryDirectives?.part)){let t;if(e.type===y.LEVEL&&e.level!==null?t=this.hls.levels[e.level].details:e.type===y.AUDIO_TRACK&&e.id!==null?t=this.hls.audioTracks[e.id].details:e.type===y.SUBTITLE_TRACK&&e.id!==null&&(t=this.hls.subtitleTracks[e.id].details),t){let e=t.partTarget,n=t.targetduration;if(e&&n){let t=Math.max(e*3,n*.8)*1e3;r=w({},r,{maxTimeToFirstByteMs:Math.min(t,r.maxTimeToFirstByteMs),maxLoadTimeMs:Math.min(t,r.maxTimeToFirstByteMs)})}}}let i=r.errorRetry||r.timeoutRetry||{},a={loadPolicy:r,timeout:r.maxLoadTimeMs,maxRetry:i.maxNumRetry||0,retryDelay:i.retryDelayMs||0,maxRetryDelay:i.maxRetryDelayMs||0};n.load(e,a,{onSuccess:(e,t,n,r)=>{let i=this.getInternalLoader(n);this.resetInternalLoader(n.type);let a=e.data;t.parsing.start=performance.now(),Er.isMediaPlaylist(a)||n.type!==y.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,a=e.data,o=Fu(e,n),s=Er.parseMasterPlaylist(a,o);if(s.playlistParsingError){t.parsing.end=performance.now(),this.handleManifestParsingError(e,n,s.playlistParsingError,r,t);return}let{contentSteering:c,levels:l,sessionData:u,sessionKeys:d,startTimeOffset:f,variableList:p}=s;this.variableList=p,l.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];Ze(o,`audio`,n)?(e.audioCodec=r=r?`${r},${o}`:o,Ye.audio[r.substring(0,4)]=2,t.splice(a,1)):Ze(o,`video`,n)&&(e.videoCodec=i=i?`${i},${o}`:o,Ye.video[i.substring(0,4)]=2,t.splice(a,1))}}});let{AUDIO:m=[],SUBTITLES:h,"CLOSED-CAPTIONS":g}=Er.parseMasterPlaylistMedia(a,o,s);m.length&&!m.some(e=>!e.url)&&l[0].audioCodec&&!l[0].attrs.AUDIO&&(this.hls.logger.log(`[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one`),m.unshift({type:`main`,name:`main`,groupId:`main`,default:!1,autoselect:!1,forced:!1,id:-1,attrs:new J({}),bitrate:0,url:``})),i.trigger(v.MANIFEST_LOADED,{levels:l,audioTracks:m,subtitles:h,captions:g,contentSteering:c,url:o,stats:t,networkDetails:r,sessionData:u,sessionKeys:d,startTimeOffset:f,variableList:p})}handleTrackOrLevelPlaylist(e,t,n,r,i){let a=this.hls,{id:o,level:s,type:c}=n,l=Fu(e,n),u=p(s)?s:p(o)?o:0,d=Pu(n),f=Er.parseLevelPlaylist(e.data,l,u,d,0,this.variableList);if(c===y.MANIFEST){let e={attrs:new J({}),bitrate:0,details:f,name:``,url:l};f.requestScheduled=t.loading.start+Jr(f,0),a.trigger(v.MANIFEST_LOADED,{levels:[e],audioTracks:[],url:l,stats:t,networkDetails:r,sessionData:null,sessionKeys:null,contentSteering:null,startTimeOffset:null,variableList:null})}t.parsing.end=performance.now(),n.levelDetails=f,this.handlePlaylistLoaded(f,e,t,n,r,i)}handleManifestParsingError(e,t,n,r,i){this.hls.trigger(v.ERROR,{type:g.NETWORK_ERROR,details:_.MANIFEST_PARSING_ERROR,fatal:t.type===y.MANIFEST,url:e.url,err:n,error:n,reason:n.message,response:e,context:t,networkDetails:r,stats:i})}handleNetworkError(e,t,n=!1,r,i){let a=`A network ${n?`timeout`:`error`+(r?` (status `+r.code+`)`:``)} occurred while loading ${e.type}`;e.type===y.LEVEL?a+=`: ${e.level} id: ${e.id}`:(e.type===y.AUDIO_TRACK||e.type===y.SUBTITLE_TRACK)&&(a+=` id: ${e.id} group-id: "${e.groupId}"`);let o=Error(a);this.hls.logger.warn(`[playlist-loader]: ${a}`);let s=_.UNKNOWN,c=!1,l=this.getInternalLoader(e);switch(e.type){case y.MANIFEST:s=n?_.MANIFEST_LOAD_TIMEOUT:_.MANIFEST_LOAD_ERROR,c=!0;break;case y.LEVEL:s=n?_.LEVEL_LOAD_TIMEOUT:_.LEVEL_LOAD_ERROR,c=!1;break;case y.AUDIO_TRACK:s=n?_.AUDIO_TRACK_LOAD_TIMEOUT:_.AUDIO_TRACK_LOAD_ERROR,c=!1;break;case y.SUBTITLE_TRACK:s=n?_.SUBTITLE_TRACK_LOAD_TIMEOUT:_.SUBTITLE_LOAD_ERROR,c=!1;break}l&&this.resetInternalLoader(e.type);let u={type:g.NETWORK_ERROR,details:s,fatal:c,url:e.url,loader:l,context:e,error:o,networkDetails:t,stats:i};r&&(u.response=E({url:t?.url||e.url,data:void 0},r)),this.hls.trigger(v.ERROR,u)}handlePlaylistLoaded(e,t,n,r,i,a){let o=this.hls,{type:s,level:c,levelOrTrack:l,id:u,groupId:d,deliveryDirectives:f}=r,p=Fu(t,r),m=Pu(r),h=typeof r.level==`number`&&m===b.MAIN?c:void 0,x=e.playlistParsingError;if(x){if(this.hls.logger.warn(`${x} ${e.url}`),!o.config.ignorePlaylistParsingErrors){o.trigger(v.ERROR,{type:g.NETWORK_ERROR,details:_.LEVEL_PARSING_ERROR,fatal:!1,url:p,error:x,reason:x.message,response:t,context:r,level:h,parent:m,networkDetails:i,stats:n});return}e.playlistParsingError=null}if(!e.fragments.length){let a=e.playlistParsingError=Error(`No Segments found in Playlist`);o.trigger(v.ERROR,{type:g.NETWORK_ERROR,details:_.LEVEL_EMPTY_ERROR,fatal:!1,url:p,error:a,reason:a.message,response:t,context:r,level:h,parent:m,networkDetails:i,stats:n});return}switch(e.live&&a&&(a.getCacheAge&&(e.ageHeader=a.getCacheAge()||0),(!a.getCacheAge||isNaN(e.ageHeader))&&(e.ageHeader=0)),s){case y.MANIFEST:case y.LEVEL:if(h){if(!l)h=0;else if(l!==o.levels[h]){let e=o.levels.indexOf(l);e>-1&&(h=e)}}o.trigger(v.LEVEL_LOADED,{details:e,levelInfo:l||o.levels[0],level:h||0,id:u||0,stats:n,networkDetails:i,deliveryDirectives:f,withoutMultiVariant:s===y.MANIFEST});break;case y.AUDIO_TRACK:o.trigger(v.AUDIO_TRACK_LOADED,{details:e,track:l,id:u||0,groupId:d||``,stats:n,networkDetails:i,deliveryDirectives:f});break;case y.SUBTITLE_TRACK:o.trigger(v.SUBTITLE_TRACK_LOADED,{details:e,track:l,id:u||0,groupId:d||``,stats:n,networkDetails:i,deliveryDirectives:f});break}}},Lu=class e{static get version(){return yi}static isMSESupported(){return Du()}static isSupported(){return Ou()}static getMediaSource(){return te()}static get Events(){return v}static get MetadataSchema(){return aa}static get ErrorTypes(){return g}static get ErrorDetails(){return _}static get DefaultConfig(){return e.defaultConfig?e.defaultConfig:au}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 vi,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=ee(t.debug||!1,`Hls instance`,t.assetPlayerId),r=this.config=su(e.DefaultConfig,t,n);this.userConfig=t,r.progressive&&lu(r,n);let{abrController:i,bufferController:a,capLevelController:o,errorController:s,fpsController:c}=r,l=new s(this),u=this.abrController=new i(this),d=new gn(this),f=r.interstitialsController,p=f?this.interstitialsController=new f(this,e):null,m=this.bufferController=new a(this,d),h=this.capLevelController=new o(this),g=new c(this),_=new Iu(this),y=r.contentSteeringController,b=y?new y(this):null,x=this.levelController=new wu(this,b),S=new Su(this),C=new Mu(this.config,this.logger),w=this.streamController=new ju(this,d,C),T=this.gapController=new mu(this,d);h.setStreamController(w),g.setStreamController(w);let E=[_,x,w];p&&E.splice(1,0,p),b&&E.splice(1,0,b),this.networkControllers=E;let D=[u,m,T,h,g,S,d];this.audioTrackController=this.createController(r.audioTrackController,E);let O=r.audioStreamController;O&&E.push(this.audioStreamController=new O(this,d,C)),this.subtitleTrackController=this.createController(r.subtitleTrackController,E);let k=r.subtitleStreamController;k&&E.push(this.subtititleStreamController=new k(this,d,C)),this.createController(r.timelineController,D),C.emeController=this.emeController=this.createController(r.emeController,D),this.cmcdController=this.createController(r.cmcdController,D),this.latencyController=this.createController(Cu,D),this.coreComponents=D,E.push(l);let A=l.onErrorOut;typeof A==`function`&&this.on(v.ERROR,A,l),this.on(v.MANIFEST_LOADED,_.onManifestLoaded,_)}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===v.ERROR;this.trigger(v.ERROR,{type:g.OTHER_ERROR,details:_.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(v.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(v.ERROR,{type:g.OTHER_ERROR,details:_.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,r=t?e:{media:n};this._media=n,this.trigger(v.MEDIA_ATTACHING,r)}detachMedia(){this.logger.log(`detachMedia`),this.trigger(v.MEDIA_DETACHING,{}),this._media=null}transferMedia(){this._media=null;let e=this.bufferController.transferMedia();return this.trigger(v.MEDIA_DETACHING,{transferMedia:e}),e}loadSource(e){this.stopLoad();let t=this.media,n=this._url,r=this._url=le.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(v.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={[b.MAIN]:this.streamController.inFlightFrag};return this.audioStreamController&&(e[b.AUDIO]=this.audioStreamController.inFlightFrag),this.subtititleStreamController&&(e[b.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=Sc(),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){Tt(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 vt(e,Rt(t),navigator.mediaCapabilities)}};Lu.defaultConfig=void 0;var Ru=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),zu=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Bu=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),Vu=e=>{let t=Bu(e);return t.charAt(0).toUpperCase()+t.slice(1)},Hu={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},Uu=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Wu=(0,t.createContext)({}),Gu=()=>(0,t.useContext)(Wu),Ku=(0,t.forwardRef)(({color:e,size:n,strokeWidth:r,absoluteStrokeWidth:i,className:a=``,children:o,iconNode:s,...c},l)=>{let{size:u=24,strokeWidth:d=2,absoluteStrokeWidth:f=!1,color:p=`currentColor`,className:m=``}=Gu()??{},h=i??f?Number(r??d)*24/Number(n??u):r??d;return(0,t.createElement)(`svg`,{ref:l,...Hu,width:n??u??Hu.width,height:n??u??Hu.height,stroke:e??p,strokeWidth:h,className:Ru(`lucide`,m,a),...!o&&!Uu(c)&&{"aria-hidden":`true`},...c},[...s.map(([e,n])=>(0,t.createElement)(e,n)),...Array.isArray(o)?o:[o]])}),$=(e,n)=>{let r=(0,t.forwardRef)(({className:r,...i},a)=>(0,t.createElement)(Ku,{ref:a,iconNode:n,className:Ru(`lucide-${zu(Vu(e))}`,`lucide-${e}`,r),...i}));return r.displayName=Vu(e),r},qu=$(`airplay`,[[`path`,{d:`M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1`,key:`ns4c3b`}],[`path`,{d:`m12 15 5 6H7Z`,key:`14qnn2`}]]),Ju=$(`captions`,[[`rect`,{width:`18`,height:`14`,x:`3`,y:`5`,rx:`2`,ry:`2`,key:`12ruh7`}],[`path`,{d:`M7 15h4M15 15h2M7 11h2M13 11h4`,key:`1ueiar`}]]),Yu=$(`cast`,[[`path`,{d:`M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6`,key:`3zrzxg`}],[`path`,{d:`M2 12a9 9 0 0 1 8 8`,key:`g6cvee`}],[`path`,{d:`M2 16a5 5 0 0 1 4 4`,key:`1y1dii`}],[`line`,{x1:`2`,x2:`2.01`,y1:`20`,y2:`20`,key:`xu2jvo`}]]),Xu=$(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),Zu=$(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),Qu=$(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),$u=$(`list-video`,[[`path`,{d:`M21 5H3`,key:`1fi0y6`}],[`path`,{d:`M10 12H3`,key:`1ulcyk`}],[`path`,{d:`M10 19H3`,key:`108z41`}],[`path`,{d:`M15 12.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997a1 1 0 0 1-1.517-.86z`,key:`ms4nik`}]]),ed=$(`maximize`,[[`path`,{d:`M8 3H5a2 2 0 0 0-2 2v3`,key:`1dcmit`}],[`path`,{d:`M21 8V5a2 2 0 0 0-2-2h-3`,key:`1e4gt3`}],[`path`,{d:`M3 16v3a2 2 0 0 0 2 2h3`,key:`wsl5sc`}],[`path`,{d:`M16 21h3a2 2 0 0 0 2-2v-3`,key:`18trek`}]]),td=$(`minimize`,[[`path`,{d:`M8 3v3a2 2 0 0 1-2 2H3`,key:`hohbtr`}],[`path`,{d:`M21 8h-3a2 2 0 0 1-2-2V3`,key:`5jw1f3`}],[`path`,{d:`M3 16h3a2 2 0 0 1 2 2v3`,key:`198tvr`}],[`path`,{d:`M16 21v-3a2 2 0 0 1 2-2h3`,key:`ph8mxp`}]]),nd=$(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),rd=$(`picture-in-picture`,[[`path`,{d:`M2 10h6V4`,key:`zwrco`}],[`path`,{d:`m2 4 6 6`,key:`ug085t`}],[`path`,{d:`M21 10V7a2 2 0 0 0-2-2h-7`,key:`git5jr`}],[`path`,{d:`M3 14v2a2 2 0 0 0 2 2h3`,key:`1f7fh3`}],[`rect`,{x:`12`,y:`14`,width:`10`,height:`7`,rx:`1`,key:`1wjs3o`}]]),id=$(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),ad=$(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),od=$(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),sd=$(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),cd=$(`volume-1`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}]]),ld=$(`volume-2`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}],[`path`,{d:`M19.364 18.364a9 9 0 0 0 0-12.728`,key:`ijwkga`}]]),ud=$(`volume-x`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`line`,{x1:`22`,x2:`16`,y1:`9`,y2:`15`,key:`1ewh16`}],[`line`,{x1:`16`,x2:`22`,y1:`9`,y2:`15`,key:`5ykzw1`}]]),dd=$(`volume`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}]]),fd=$(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),pd=class{callback;heartbeatInterval;isBuffering=!1;sessionId;videoId;deviceType;networkType;isFirstPlay=!0;watchStartTime=null;totalWatchTime=0;bufferingCount=0;totalBufferingTime=0;bufferingStartTime=null;milestonesHit=new Set;lastHeartbeatPosition=null;lastHeartbeatAt=null;constructor(e,t){this.callback=e,this.sessionId=this.generateSessionId(),this.videoId=t?this.extractVideoId(t):``,this.deviceType=this.getDeviceType(),this.networkType=this.getNetworkType()}registerCallback(e){this.callback=e}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,bufferingCount:0,totalBufferingTime:0})),e===`play`&&(this.watchStartTime=Date.now()),(e===`pause`||e===`ended`)&&this.watchStartTime!==null&&(this.totalWatchTime+=(Date.now()-this.watchStartTime)/1e3,this.watchStartTime=null);let r=t.duration?Math.min(100,Math.round(t.currentTime/t.duration*100)):0,i={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:r,totalWatchTime:Math.round(this.totalWatchTime),bufferingCount:this.bufferingCount,totalBufferingTime:Math.round(this.totalBufferingTime),...n};this.dispatchRaw(i)}startHeartbeat(e,t){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)}stopHeartbeat(){this.heartbeatInterval&&=(window.clearInterval(this.heartbeatInterval),void 0)}setBuffering(e,t,n){this.isBuffering!==e&&(this.isBuffering=e,e?(this.bufferingCount++,this.bufferingStartTime=Date.now()):this.bufferingStartTime!==null&&(this.totalBufferingTime+=(Date.now()-this.bufferingStartTime)/1e3,this.bufferingStartTime=null),this.track(e?`buffering_start`:`buffering_end`,t,n()))}checkMilestones(e,t){let{currentTime:n,duration:r}=e;if(!r)return;let i=n/r;for(let[n,r]of[[.25,`first_quartile`],[.5,`midpoint`],[.75,`third_quartile`]])i>=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())}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`}},md={session_start:`player_session_start`,error:`player_error`},hd=new Set([`heartbeat`]),gd=class{analytics=null;constructor(e){this.init(e)}async init(e){try{if(!await(0,i.isSupported)()){console.warn(`[FirebaseAnalytics] Not supported in this environment.`);return}let t=(0,r.getApps)(),n=t.length===0?(0,r.initializeApp)(e):t[0];this.analytics=(0,i.getAnalytics)(n)}catch(e){console.error(`[FirebaseAnalytics] Initialization failed:`,e)}}createCallback(){return e=>this.handleEvent(e)}handleEvent(e){if(!this.analytics||hd.has(e.eventType))return;let t=md[e.eventType]??e.eventType,n=this.buildParams(e);try{(0,i.logEvent)(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,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()}},_d=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)}},vd=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(null),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}},yd=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}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||[]}}},bd=class{isCasting=!1;castDeviceName=``;onCastStateChangeCallback;castContext=null;remotePlayer=null;remotePlayerController=null;constructor(){this.initCastApi()}initCastApi(){let e=()=>{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)})};window.cast&&window.cast.framework?e():window.__onGCastApiAvailable=t=>{t&&e()}}getCastingState(){return{isCasting:this.isCasting,deviceName:this.castDeviceName}}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,`video/mp4`),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)}}onCastStateChange(e){this.onCastStateChangeCallback=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`)}},xd=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}},Sd=class{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=[];eventListeners={};constructor(e){this.options={autoplay:!1,muted:!1,themeColor:`#6366f1`,...e},this.analytics=new pd(this.options.analyticsCallback,this.options.src),this.keyMoments=new _d(this.options.keyMoments||this.options.chapters||[]),this.chapters=this.keyMoments,this.subtitles=new vd(this.options.subtitles),this.drm=new yd(this.options.drm),this.casting=new bd,this.thumbnails=new xd(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=`
|
|
3
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;">
|
|
4
43
|
<h4 style="margin:0 0 10px 0;">Content Protection Alert</h4>
|
|
5
44
|
<p style="font-size:13px; margin:0; opacity:0.8;">${t}</p>
|
|
6
45
|
</div>
|
|
7
|
-
`,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.emit(`play`,null)}),e.addEventListener(`pause`,()=>{this.analytics.track(`pause`,e,this.getAnalyticsPayload()),this.analytics.stopHeartbeat(),this.emit(`pause`,null)}),e.addEventListener(`timeupdate`,()=>{let t=e.currentTime;if(this.chapters.updateTime(t),this.subtitles.updateTime(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`,()=>{this.analytics.track(`seek`,e,this.getAnalyticsPayload()),this.emit(`seeking`,e.currentTime)}),e.addEventListener(`waiting`,()=>{this.analytics.setBuffering(!0,e,()=>this.getAnalyticsPayload()),this.emit(`buffering`,!0)}),e.addEventListener(`playing`,()=>{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.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`}),this.emit(`error`,t)});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());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(e===null){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=()=>{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){if(e.includes(`d3queh3es1i8u.cloudfront.net`))try{let t=new URL(e);return`/video-proxy${t.pathname}${t.search}`}catch{return e.replace(`https://d3queh3es1i8u.cloudfront.net`,`/video-proxy`)}return e}loadSource(e){this.extractKeyMomentsFromManifest(e),this.extractSubtitlesFromManifest(e);let t=this.rewriteToProxy(e),n=t.endsWith(`.m3u8`)||t.includes(`.m3u8`),i=t.endsWith(`.mpd`)||t.includes(`.mpd`);if(n)if(r.default.isSupported()){let n=new r.default({enableWorker:!0,lowLatencyMode:!0,backBufferLength:90,maxMaxBufferLength:30,renderTextTracksNatively:!1,xhrSetup:(t,n)=>{let r=this.drm.getAuthToken();if(!r)try{let t=new URL(e),n=t.searchParams.get(`token`)||t.searchParams.get(`key`)||t.searchParams.get(`auth`)||t.searchParams.get(`authToken`);n&&(r=n)}catch{}try{let e=this.rewriteToProxy(n),i=new URL(e,window.location.origin);r&&i.searchParams.set(`token`,r),t.open(`GET`,i.toString(),!0)}catch(e){console.error(`[PlayerSDK Core] Error in xhrSetup URL parsing:`,e)}}});this.hlsInstance=n,n.loadSource(t),n.attachMedia(this.videoElement),n.on(r.default.Events.SUBTITLE_TRACK_SWITCH,(e,t)=>{if(this.hlsActiveSubtitleKey=null,this.subtitles.setCustomSubtitleText(``),t.id!==-1){let e=n.subtitleTracks[t.id];this.hlsActiveSubtitleKey=e?.default?`default`:`subtitles${t.id}`}}),n.on(r.default.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])}),n.on(r.default.Events.MANIFEST_PARSED,()=>{this.qualityLevels=n.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),this.options.autoplay&&this.play()}),n.on(r.default.Events.AUDIO_TRACKS_UPDATED,()=>{n.audioTracks.length>1&&(this.audioTrackList=n.audioTracks.map((e,t)=>({id:t,label:e.name||e.lang||`Audio ${t+1}`,lang:e.lang||``})),this.emit(`audiotracksloaded`,this.audioTrackList))}),n.on(r.default.Events.AUDIO_TRACK_SWITCHED,(e,t)=>{this.analytics.track(`audio_track_change`,this.videoElement,this.getAnalyticsPayload()),this.emit(`audiotrackchange`,t.id)}),n.on(r.default.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}),this.emit(`qualitychange`,n))}),n.on(r.default.Events.ERROR,(e,t)=>{t.fatal&&(t.type===r.default.ErrorTypes.NETWORK_ERROR?(this.analytics.track(`network_error`,this.videoElement,{...this.getAnalyticsPayload(),errorMessage:t.details,errorCode:0}),n.startLoad()):t.type===r.default.ErrorTypes.MEDIA_ERROR?n.recoverMediaError():this.destroy())})}else this.videoElement.canPlayType(`application/vnd.apple.mpegurl`)&&(this.videoElement.src=e,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 t=a.MediaPlayer().create();this.dashInstance=t,t.initialize(this.videoElement,e,!!this.options.autoplay),t.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=e,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.seek(this.videoElement.currentTime-t)}),navigator.mediaSession.setActionHandler(`seekforward`,e=>{let t=e.seekOffset||10;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}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}setPlaybackRate(e){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}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=this.rewriteToProxy(e),n=await fetch(t);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.emit(`play`,null)}),e.addEventListener(`pause`,()=>{this.analytics.track(`pause`,e,this.getAnalyticsPayload()),this.analytics.stopHeartbeat(),this.emit(`pause`,null)}),e.addEventListener(`timeupdate`,()=>{let t=e.currentTime;if(this.chapters.updateTime(t),this.subtitles.updateTime(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`,()=>{this.analytics.track(`seek`,e,this.getAnalyticsPayload()),this.emit(`seeking`,e.currentTime)}),e.addEventListener(`waiting`,()=>{this.analytics.setBuffering(!0,e,()=>this.getAnalyticsPayload()),this.emit(`buffering`,!0)}),e.addEventListener(`playing`,()=>{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.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`}),this.emit(`error`,t)});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());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(e===null){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=()=>{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){if(e.includes(`d3queh3es1i8u.cloudfront.net`))try{let t=new URL(e);return`/video-proxy${t.pathname}${t.search}`}catch{return e.replace(`https://d3queh3es1i8u.cloudfront.net`,`/video-proxy`)}return e}async loadSource(e){this.extractKeyMomentsFromManifest(e),this.extractSubtitlesFromManifest(e);let t=this.rewriteToProxy(e),n=t.endsWith(`.m3u8`)||t.includes(`.m3u8`),r=t.endsWith(`.mpd`)||t.includes(`.mpd`);if(n)if(Lu.isSupported()){let n=new Lu({enableWorker:!0,lowLatencyMode:!0,backBufferLength:90,maxMaxBufferLength:30,renderTextTracksNatively:!1,xhrSetup:(t,n)=>{let r=this.drm.getAuthToken();if(!r)try{let t=new URL(e),n=t.searchParams.get(`token`)||t.searchParams.get(`key`)||t.searchParams.get(`auth`)||t.searchParams.get(`authToken`);n&&(r=n)}catch{}try{let e=this.rewriteToProxy(n),i=new URL(e,window.location.origin);r&&i.searchParams.set(`token`,r),t.open(`GET`,i.toString(),!0)}catch(e){console.error(`[PlayerSDK Core] Error in xhrSetup URL parsing:`,e)}}});this.hlsInstance=n,n.loadSource(t),n.attachMedia(this.videoElement),n.on(Lu.Events.SUBTITLE_TRACK_SWITCH,(e,t)=>{if(this.hlsActiveSubtitleKey=null,this.subtitles.setCustomSubtitleText(``),t.id!==-1){let e=n.subtitleTracks[t.id];this.hlsActiveSubtitleKey=e?.default?`default`:`subtitles${t.id}`}}),n.on(Lu.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])}),n.on(Lu.Events.MANIFEST_PARSED,()=>{this.qualityLevels=n.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),this.options.autoplay&&this.play()}),n.on(Lu.Events.AUDIO_TRACKS_UPDATED,()=>{n.audioTracks.length>1&&(this.audioTrackList=n.audioTracks.map((e,t)=>({id:t,label:e.name||e.lang||`Audio ${t+1}`,lang:e.lang||``})),this.emit(`audiotracksloaded`,this.audioTrackList))}),n.on(Lu.Events.AUDIO_TRACK_SWITCHED,(e,t)=>{this.analytics.track(`audio_track_change`,this.videoElement,this.getAnalyticsPayload()),this.emit(`audiotrackchange`,t.id)}),n.on(Lu.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}),this.emit(`qualitychange`,n))}),n.on(Lu.Events.ERROR,(e,t)=>{t.fatal&&(t.type===Lu.ErrorTypes.NETWORK_ERROR?(this.analytics.track(`network_error`,this.videoElement,{...this.getAnalyticsPayload(),errorMessage:t.details,errorCode:0}),n.startLoad()):t.type===Lu.ErrorTypes.MEDIA_ERROR?n.recoverMediaError():this.destroy())})}else this.videoElement.canPlayType(`application/vnd.apple.mpegurl`)&&(this.videoElement.src=e,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(r){let t=await import(`dashjs`).catch(()=>null);if(!t){console.error(`[SDK] dashjs not installed — install it to use DASH streams`);return}let n=t.MediaPlayer().create();this.dashInstance=n,n.initialize(this.videoElement,e,!!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=e,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.seek(this.videoElement.currentTime-t)}),navigator.mediaSession.setActionHandler(`seekforward`,e=>{let t=e.seekOffset||10;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}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}setPlaybackRate(e){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}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=this.rewriteToProxy(e),n=await fetch(t);if(!n.ok)return;let r=(await n.text()).split(`
|
|
8
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=[];for(let e of r){if(!e.startsWith(`#EXT-X-MEDIA:TYPE=SUBTITLES`))continue;let t=e.match(/NAME="([^"]+)"/),n=e.match(/LANGUAGE="([^"]+)"/),r=e.match(/URI="([^"]+)"/),s=/DEFAULT=YES/i.test(e);if(!r)continue;let c=r[1],l=o.length,u=t?t[1]:n?n[1]:`Track ${l+1}`,d=n?n[1]:`und`;if(/\.m3u8?(\?|$)/i.test(c)){o.push({id:`subtitle-${l}`,label:u,lang:d,isDefault:s,isHls:!0,hlsTrackId:l});continue}let f=c.startsWith(`http`)?c:a+c,p=this.rewriteToProxy(f);if(i)try{let e=new URL(p,window.location.origin);e.searchParams.set(`token`,i),p=e.toString()}catch{}o.push({id:`subtitle-${l}`,label:u,lang:d,isDefault:s,src:p})}o.length>0&&(this.subtitles.setHlsTracks(o),this.emit(`subtitlesloaded`,this.subtitles.getTracks()))}catch(e){console.error(`[PlayerSDK] Error extracting subtitles from manifest:`,e)}}async extractKeyMomentsFromManifest(e){try{let t=this.rewriteToProxy(e),n=await fetch(t);if(!n.ok)return;let r=(await n.text()).split(`
|
|
9
|
-
`),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)}}getAudioTracks(){return this.audioTrackList}setAudioTrack(e){this.hlsInstance&&(this.hlsInstance.audioTrack=e)}destroy(){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={}}},y=e=>{if(e.includes(`d3queh3es1i8u.cloudfront.net`))try{let t=new URL(e);return`/video-proxy${t.pathname}${t.search}`}catch{return e.replace(`https://d3queh3es1i8u.cloudfront.net`,`/video-proxy`)}return e},ce=e=>{let t=e.replace(`#`,``);return t.length===6?`${parseInt(t.substring(0,2),16)}, ${parseInt(t.substring(2,4),16)}, ${parseInt(t.substring(4,6),16)}`:t.length===3?`${parseInt(t[0]+t[0],16)}, ${parseInt(t[1]+t[1],16)}, ${parseInt(t[2]+t[2],16)}`:`99, 102, 241`},b={en:`English`,eng:`English`,fr:`French`,fre:`French`,fra:`French`,es:`Spanish`,spa:`Spanish`,de:`German`,ger:`German`,deu:`German`,it:`Italian`,ita:`Italian`,pt:`Portuguese`,por:`Portuguese`,ja:`Japanese`,zh:`Chinese`,ko:`Korean`,ru:`Russian`,ar:`Arabic`,hi:`Hindi`},x=e=>{if(!e)return null;let t=e.trim().toLowerCase(),n=t.match(/^(en|eng|fr|fre|fra|es|spa|de|ger|deu|it|ita|pt|por|ja|zh|ko|ru|ar|hi)/);if(n&&b[n[0]])return b[n[0]];for(let[e,n]of Object.entries(b))if(t.includes(e))return n;return/english|anglais|ingles/i.test(t)?`English`:/french|français/i.test(t)?`French`:/spanish|español/i.test(t)?`Spanish`:/german|deutsch/i.test(t)?`German`:/italian|italiano/i.test(t)?`Italian`:/portuguese|português/i.test(t)?`Portuguese`:/japanese|nihongo/i.test(t)?`Japanese`:/chinese|中文/i.test(t)?`Chinese`:/korean|한국어/i.test(t)?`Korean`:/russian|русский/i.test(t)?`Russian`:/arabic|العربية/i.test(t)?`Arabic`:/hindi|हिन्दी/i.test(t)?`Hindi`:null},S=e=>{if(e.lang){let t=x(e.lang);if(t)return t}if(e.label){let t=e.label.trim(),n=t.split(/[#\d\.\s\-_/|:]+/).filter(Boolean);for(let e=n.length-1;e>=0;--e){let t=x(n[e]);if(t)return t}let r=t.replace(/^[#\d\.\s]+/,``).trim();return x(r)||r}return`Unknown`},C=e=>{let t=new Set;return e.filter(e=>{let n=`${S(e).toLowerCase()}|${(e.lang||``).trim().toLowerCase()}`;return t.has(n)?!1:(t.add(n),!0)})},w=({src:e,chapters:n=[],keyMoments:a,subtitles:o=[],watermark:s=`GoBOSS`,themeColor:l=`#6366f1`,drmConfig:u,firebaseConfig:d,onAnalyticsEvent:f,onKeyMomentsLoaded:p,enableControls:m=!0,enableChromecast:ee=!0,enableKeyMoments:h=!0,enableSubtitles:te=!0,enableQuality:ne=!0,enablePlaybackSpeed:re=!0,enablePiP:ae=!0,enableFullscreen:oe=!0,subtitleStyle:g={}})=>{let _=(0,t.useRef)(null),v=(0,t.useRef)(null),b=(0,t.useRef)(null),x=(0,t.useRef)(null),w=(0,t.useRef)(null),T=(0,t.useRef)(null),E=(0,t.useRef)(null),le=(0,t.useRef)(!1),D=(0,t.useRef)(!1),O=(0,t.useRef)(null),k=(0,t.useRef)(null),A=(0,t.useRef)(null),[j,ue]=(0,t.useState)(null),[M,N]=(0,t.useState)(!1),[P,de]=(0,t.useState)(0),[F,fe]=(0,t.useState)(0),[I,pe]=(0,t.useState)(1),[L,R]=(0,t.useState)(!1),[me,he]=(0,t.useState)(!1),[ge,_e]=(0,t.useState)(!1),[ve,ye]=(0,t.useState)(!1),[be,xe]=(0,t.useState)(!1),[Se,Ce]=(0,t.useState)([]),[we,Te]=(0,t.useState)({id:-1,height:0,width:0,bitrate:0,label:`Auto`}),[Ee,De]=(0,t.useState)(``),[z,B]=(0,t.useState)(`off`),[Oe,ke]=(0,t.useState)(C(o)),[Ae,je]=(0,t.useState)([]),[Me,Ne]=(0,t.useState)(0);(0,t.useEffect)(()=>{if(j){let e=j.subtitles.getTracks();ke(C([...o,...e.filter(e=>!o.some(t=>t.id===e.id))]))}else ke(C(o))},[o,j]);let[Pe,Fe]=(0,t.useState)({chapter:null,index:-1}),[V,Ie]=(0,t.useState)(a||n||[]),[H,U]=(0,t.useState)(`none`),[W,Le]=(0,t.useState)(1),[G,Re]=(0,t.useState)(!1),[ze,Be]=(0,t.useState)({}),Ve=JSON.stringify(V.map(e=>({title:e.title,startTime:e.startTime})));(0,t.useEffect)(()=>{Ie(a||n||[])},[a,n]),(0,t.useEffect)(()=>{if(!e||!V||V.length===0)return;Be({});let t=document.createElement(`video`);t.muted=!0,t.preload=`metadata`,t.crossOrigin=`anonymous`,t.style.cssText=`position:fixed;top:0;left:0;width:10px;height:10px;opacity:0.01;pointer-events:none;z-index:-9999;`,document.body.appendChild(t);let n=null,i=e.includes(`.m3u8`),a=document.createElement(`canvas`);a.width=160,a.height=90;let o=a.getContext(`2d`),s=0,c=!1,l=()=>{if(s>=V.length){p();return}let e=V[s].startTime;t.currentTime=e===0?.01:e},d=()=>{if(o&&t.readyState>=2){o.drawImage(t,0,0,a.width,a.height);let e=a.toDataURL(`image/jpeg`,.8);Be(t=>({...t,[s]:e})),s++,l()}else setTimeout(d,100)},f=()=>{c||(c=!0,l())};t.addEventListener(`seeked`,d),t.addEventListener(`canplay`,f),i&&r.default.isSupported()?(n=new r.default({enableWorker:!1,maxBufferLength:5,xhrSetup:(t,n)=>{let r=u?.authToken;if(!r)try{let t=new URL(e),n=t.searchParams.get(`token`)||t.searchParams.get(`key`)||t.searchParams.get(`auth`)||t.searchParams.get(`authToken`);n&&(r=n)}catch{}try{let e=y(n),i=new URL(e,window.location.origin);r&&i.searchParams.set(`token`,r),t.open(`GET`,i.toString(),!0)}catch(e){console.error(`[WebVideoPlayer tempHls] xhrSetup error:`,e)}}}),n.loadSource(y(e)),n.attachMedia(t)):t.src=e,t.readyState>=2&&f();let p=()=>{t.removeEventListener(`seeked`,d),t.removeEventListener(`canplay`,f),n&&n.destroy(),document.body.contains(t)&&document.body.removeChild(t)};return p},[e,Ve]);let[K,He]=(0,t.useState)(null),[Ue,We]=(0,t.useState)(!1),[Ge,Ke]=(0,t.useState)(!1),[qe,Je]=(0,t.useState)(null),[Ye,q]=(0,t.useState)(null),[Xe,Ze]=(0,t.useState)(0),[Qe,$e]=(0,t.useState)(null),[et,tt]=(0,t.useState)(null),[J,nt]=(0,t.useState)(null);(0,t.useEffect)(()=>{if(A.current&&!A.current.querySelector(`google-cast-launcher`)){let e=document.createElement(`google-cast-launcher`);e.style.cursor=`pointer`,e.style.width=`100%`,e.style.height=`100%`,e.style.display=`block`,A.current.appendChild(e)}},[]),(0,t.useEffect)(()=>{if(!j){We(!1),Ke(!1),Je(null);return}let e=e=>We(e),t=()=>{let e=j.getVideoElement(),t=!!e?.webkitCurrentPlaybackTargetIsWireless;Ke(t),Je(t?e.webkitCurrentPlaybackTargetName||`AirPlay device`:null)};e(j.casting.isAirPlayAvailable()),t();let n=j.getVideoElement(),r=t=>{e(t.availability===`available`)},i=()=>{t()};return`webkitShowPlaybackTargetPicker`in n&&(n.addEventListener(`webkitplaybacktargetavailabilitychanged`,r),n.addEventListener(`webkitcurrentplaybacktargetiswirelesschanged`,i)),()=>{`webkitShowPlaybackTargetPicker`in n&&(n.removeEventListener(`webkitplaybacktargetavailabilitychanged`,r),n.removeEventListener(`webkitcurrentplaybacktargetiswirelesschanged`,i))}},[j]);let[rt,it]=(0,t.useState)(!0),Y=(0,t.useRef)(null),at=(0,t.useRef)(!1),ot=(0,t.useRef)(`none`),st=(0,t.useRef)(o);(0,t.useEffect)(()=>{if(!_.current)return;let t=document.createElement(`video`);t.muted=!0,t.preload=`metadata`,t.crossOrigin=`anonymous`,t.style.cssText=`display:none;position:absolute;pointer-events:none;`,document.body.appendChild(t),w.current=t;let n=e.includes(`.m3u8`);if(n&&r.default.isSupported()){let n=new r.default({enableWorker:!1,maxBufferLength:5,xhrSetup:(t,n)=>{let r=u?.authToken;if(!r)try{let t=new URL(e),n=t.searchParams.get(`token`)||t.searchParams.get(`key`)||t.searchParams.get(`auth`)||t.searchParams.get(`authToken`);n&&(r=n)}catch{}try{let e=y(n),i=new URL(e,window.location.origin);r&&i.searchParams.set(`token`,r),t.open(`GET`,i.toString(),!0)}catch(e){console.error(`[WebVideoPlayer hiddenHls] xhrSetup error:`,e)}}});n.loadSource(y(e)),n.attachMedia(t),T.current=n}else n&&t.canPlayType(`application/vnd.apple.mpegurl`),t.src=e;t.addEventListener(`seeked`,()=>{let e=x.current;if(!e)return;let n=e.getContext(`2d`);n&&t.readyState>=2&&(n.drawImage(t,0,0,e.width,e.height),$e(e.toDataURL(`image/jpeg`,.82)))});let i;if(d){let e=new ie(d);v.current=e,i=e.createCallback()}let a=new se({container:_.current,src:e,autoplay:!1,muted:!1,keyMoments:V,subtitles:o,drm:{watermarkText:s,allowedDomains:[`localhost`,`127.0.0.1`],...u},analyticsCallback:e=>{i?.(e),f&&f(e)},themeColor:l});a.on(`keymomentsloaded`,e=>{Ie(e),p&&p(e)}),a.on(`chaptersloaded`,e=>{Ie(e),p&&p(e)}),a.on(`play`,()=>{N(!0),xe(!1)}),a.on(`pause`,()=>N(!1)),a.on(`ended`,()=>{N(!1),xe(!0)}),a.on(`timeupdate`,e=>{if(D.current&&O.current!==null)if(Math.abs(e-O.current)<5)D.current=!1,O.current=null,k.current&&=(window.clearTimeout(k.current),null);else return;de(e),fe(a.getDuration());let t=a.keyMoments.getCurrentMoment(e);Fe({chapter:t.keyMoment,index:t.index})}),a.on(`qualitylevels`,e=>{Ce(e)}),a.on(`qualitychange`,e=>{Te(e)}),a.on(`buffering`,e=>{he(e)}),a.on(`volumechange`,e=>{pe(e.volume),R(e.muted)}),a.on(`pipchange`,e=>{ye(e)}),a.subtitles.onSubtitleChange(e=>{De(e)}),a.on(`subtitlesloaded`,e=>{ke(C([...e]));let t=e.find(e=>e.isDefault);t&&(a.subtitles.setActiveTrack(t.id),B(t.id))}),a.on(`audiotracksloaded`,e=>{je(e),Ne(e[0]?.id??0)}),a.on(`audiotrackchange`,e=>{Ne(e)}),a.casting.onCastStateChange((e,t)=>{He(e?t:null)}),pe(a.getVolume()),R(a.isMuted()),ue(a);let c=()=>{let e=!!document.fullscreenElement;_e(e);let t=a.getVideoElement();a.analytics.track(e?`fullscreen_enter`:`fullscreen_exit`,t)};document.addEventListener(`fullscreenchange`,c);let m=e=>{let t=document.activeElement;if(!(t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.getAttribute(`contenteditable`)===`true`))){switch(e.key.toLowerCase()){case` `:case`k`:e.preventDefault(),a.getVideoElement().paused?a.play():a.pause();break;case`arrowleft`:case`j`:e.preventDefault(),a.seek(a.getCurrentTime()-10);break;case`arrowright`:case`l`:e.preventDefault(),a.seek(a.getCurrentTime()+10);break;case`arrowup`:e.preventDefault(),a.setVolume(a.getVolume()+.1);break;case`arrowdown`:e.preventDefault(),a.setVolume(a.getVolume()-.1);break;case`m`:e.preventDefault(),a.setMute(!a.isMuted());break;case`f`:e.preventDefault(),a.toggleFullscreen();break;case`p`:e.preventDefault(),a.togglePictureInPicture();break;case`c`:if(e.preventDefault(),a.subtitles.getActiveTrackId()!==`off`)a.subtitles.setActiveTrack(`off`),B(`off`);else{let e=st.current;e&&e.length>0&&(a.subtitles.setActiveTrack(e[0].id),B(e[0].id))}break;default:return}X()}};return document.addEventListener(`keydown`,m),X(),()=>{a.destroy(),v.current?.destroy(),v.current=null,document.removeEventListener(`fullscreenchange`,c),document.removeEventListener(`keydown`,m),Y.current&&window.clearTimeout(Y.current),T.current&&=(T.current.destroy(),null),w.current&&=(document.body.removeChild(w.current),null)}},[e,s]),(0,t.useEffect)(()=>{if(j){j.keyMoments.setKeyMoments(V);let e=_.current?.querySelector(`video`);if(e){let t=j.keyMoments.getCurrentMoment(e.currentTime);Fe({chapter:t.keyMoment,index:t.index})}}},[Ve,j]),(0,t.useEffect)(()=>{let e=e=>{H!==`none`&&(e.target.closest(`.sdk-menu-container`)||U(`none`))};return document.addEventListener(`click`,e),()=>{document.removeEventListener(`click`,e)}},[H]),at.current=M,ot.current=H,st.current=Oe;let X=()=>{it(!0),Y.current&&window.clearTimeout(Y.current),Y.current=window.setTimeout(()=>{at.current&&ot.current===`none`&&it(!1)},1e4)},ct=()=>{X()},lt=()=>{j&&(be?(Z(0),j.play(),xe(!1)):M?j.pause():j.play(),X())},ut=e=>{if(!b.current||!j||F===0)return 0;let t=b.current.getBoundingClientRect();return Math.max(0,Math.min(1,(e.clientX-t.left)/t.width))*F},dt=e=>{if(!j)return;le.current=!0,nt(ut(e));let t=e=>{if(!le.current||!b.current)return;let t=b.current.getBoundingClientRect(),n=Math.max(0,Math.min(1,(e.clientX-t.left)/t.width))*F;nt(n),q(e.clientX-t.left),Ze(n),w.current&&(w.current.currentTime=n),X()},n=e=>{if(le.current=!1,b.current){let t=b.current.getBoundingClientRect();Z(Math.max(0,Math.min(1,(e.clientX-t.left)/t.width))*F)}nt(null),document.removeEventListener(`mousemove`,t),document.removeEventListener(`mouseup`,n)};document.addEventListener(`mousemove`,t),document.addEventListener(`mouseup`,n)},Z=e=>{if(!j)return;let t=Math.max(0,F>0?Math.min(e,F):e);D.current=!0,O.current=t,de(t),j.seek(t),k.current&&window.clearTimeout(k.current),k.current=window.setTimeout(()=>{D.current=!1,O.current=null,k.current=null},3e3)},ft=e=>{if(!j)return;let t=parseFloat(e.target.value);j.setVolume(t),pe(t),R(t===0)},pt=()=>{if(!j)return;let e=!L;j.setMute(e),R(e)},mt=e=>{j&&(j.setPlaybackRate(e),Le(e),U(`none`))},ht=e=>{if(!j)return;j.setQuality(e);let t=Se.find(t=>t.id===e);t&&Te(t),U(`none`)},gt=e=>{j&&(j.subtitles.setActiveTrack(e),B(e),U(`none`))},_t=e=>{Z(e),U(`none`)},vt=()=>{j&&j.togglePictureInPicture()},yt=()=>{j&&j.toggleFullscreen()},bt=()=>{j&&(K?j.casting.stopCasting():j.casting.requestSession(e,P))},xt=()=>{if(!j)return;let e=j.getVideoElement();if(Ge){j.casting.stopAirPlay(e);return}typeof e.webkitShowPlaybackTargetPicker==`function`||j.casting.isAirPlayAvailable()?j.casting.requestAirPlaySession(e):console.warn(`[PlayerSDK AirPlay] AirPlay is not available on this device.`)},St=e=>{if(!b.current||F===0||!j)return;let t=b.current.getBoundingClientRect(),n=Math.max(0,Math.min(1,(e.clientX-t.left)/t.width))*F;q(e.clientX-t.left),Ze(n),E.current&&window.clearTimeout(E.current),E.current=window.setTimeout(()=>{w.current&&(w.current.currentTime=n)},100),tt(j.keyMoments.getCurrentMoment(n).keyMoment)},Ct=()=>{q(null),$e(null),tt(null),E.current&&window.clearTimeout(E.current)},Q=e=>{if(isNaN(e)||e<0)return`00:00`;let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`},wt=()=>L||I===0?(0,c.jsx)(i.VolumeX,{size:18}):I<.3?(0,c.jsx)(i.Volume,{size:18}):I<.7?(0,c.jsx)(i.Volume1,{size:18}):(0,c.jsx)(i.Volume2,{size:18}),$=e=>{U(H===e?`none`:e)};return(0,c.jsxs)(`div`,{ref:_,className:`sdk-player-container ${rt?`controls-active`:``}`,onMouseMove:ct,onMouseLeave:()=>{},style:{border:`1px solid rgba(255, 255, 255, 0.08)`,"--sdk-theme-color":l,"--sdk-theme-color-rgb":ce(l)},children:[(0,c.jsx)(`canvas`,{ref:x,width:160,height:90,style:{display:`none`,position:`absolute`,pointerEvents:`none`}}),(0,c.jsx)(`div`,{className:`sdk-spinner-overlay ${me?`active`:``}`,children:(0,c.jsx)(`div`,{className:`sdk-spinner`})}),Ee&&z!==`off`&&(0,c.jsx)(`div`,{className:`sdk-subtitles-overlay`,children:(0,c.jsx)(`span`,{className:`sdk-subtitles-text`,style:{fontSize:g.size===`small`?`14px`:g.size===`large`?`24px`:`18px`,color:g.color??`#ffffff`,background:g.background===`none`?`transparent`:g.background===`solid`?`rgba(0, 0, 0, 0.92)`:`rgba(15, 23, 42, 0.78)`,border:g.background===`none`?`none`:`1px solid rgba(255,255,255,0.08)`,backdropFilter:g.background===`none`?`none`:`blur(8px)`},dangerouslySetInnerHTML:{__html:Ee}})}),(K||Ge)&&(0,c.jsxs)(`div`,{className:`sdk-cast-screen`,children:[(0,c.jsx)(i.Cast,{size:64,className:`sdk-cast-icon-glow`}),(0,c.jsx)(`div`,{className:`sdk-cast-title`,children:K?`Casting to ${K}`:`AirPlay to ${qe||`device`}`}),(0,c.jsx)(`div`,{className:`sdk-cast-desc`,children:K?`This media asset is currently streaming on your external screen.`:`This media asset is currently streaming via AirPlay${qe?` to ${qe}`:``}.`}),(0,c.jsx)(`button`,{className:`sdk-cast-disconnect-btn`,onClick:()=>{K?j?.casting.stopCasting():Ge&&j?.casting.stopAirPlay(j.getVideoElement())},children:`Disconnect Streaming`})]}),!K&&!M&&(0,c.jsx)(`div`,{className:`sdk-center-action-overlay`,onClick:lt,children:(0,c.jsx)(`div`,{className:`sdk-center-action-btn`,children:be?(0,c.jsx)(i.RotateCcw,{size:32,className:`sdk-center-icon`}):(0,c.jsx)(i.Play,{size:32,className:`sdk-center-icon`,style:{marginLeft:`4px`},fill:`currentColor`})})}),!K&&(0,c.jsx)(`div`,{className:`sdk-controls-overlay`,onClick:e=>{e.target===e.currentTarget&<()},children:m&&(0,c.jsxs)(`div`,{className:`sdk-control-bar`,children:[(0,c.jsxs)(`div`,{ref:b,className:`sdk-seekbar-container`,onMouseDown:dt,onMouseMove:St,onMouseLeave:Ct,children:[(0,c.jsx)(`div`,{className:`sdk-seekbar-buffered`,style:{width:`${F?(j&&j.getBufferedRanges()[0]?.end||0)/F*100:0}%`}}),(0,c.jsx)(`div`,{className:`sdk-seekbar-progress`,style:{width:`${F?(J===null?P:J)/F*100:0}%`,background:l},children:(0,c.jsx)(`div`,{className:`sdk-seekbar-handle`})}),h&&V.map((e,t)=>F===0?null:(0,c.jsx)(`div`,{className:`sdk-seekbar-chapter-marker`,style:{left:`${e.startTime/F*100}%`}},t)),Ye!==null&&Qe&&(0,c.jsxs)(`div`,{className:`sdk-thumbnail-tooltip`,style:{left:`${Ye}px`},children:[(0,c.jsx)(`div`,{className:`sdk-thumbnail-preview`,children:(0,c.jsx)(`img`,{src:Qe,alt:`preview`,style:{width:`100%`,height:`100%`,objectFit:`cover`,borderRadius:`6px 6px 0 0`,display:`block`}})}),(0,c.jsxs)(`div`,{className:`sdk-thumbnail-text`,children:[Q(Xe),et&&(0,c.jsx)(`div`,{className:`sdk-thumbnail-chapter`,children:et.title})]})]})]}),(0,c.jsxs)(`div`,{className:`sdk-control-row`,children:[(0,c.jsxs)(`div`,{className:`sdk-control-group`,children:[(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:lt,title:M?`Pause`:`Play`,children:M?(0,c.jsx)(i.Pause,{size:18,fill:`currentColor`}):(0,c.jsx)(i.Play,{size:18,fill:`currentColor`})}),(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>{Z(0),M||j?.play()},title:`Replay from beginning`,children:(0,c.jsx)(i.RotateCcw,{size:18})}),(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>Z(P-10),title:`Rewind 10s`,children:(0,c.jsxs)(`div`,{style:{position:`relative`,display:`flex`,alignItems:`center`,justifyContent:`center`,width:`18px`,height:`18px`},children:[(0,c.jsx)(i.RotateCcw,{size:18}),(0,c.jsx)(`span`,{style:{position:`absolute`,fontSize:`6px`,fontWeight:`bold`,top:`52%`,left:`50%`,transform:`translate(-50%, -50%)`,pointerEvents:`none`,fontFamily:`sans-serif`,lineHeight:1},children:`10`})]})}),(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>Z(P+10),title:`Forward 10s`,children:(0,c.jsxs)(`div`,{style:{position:`relative`,display:`flex`,alignItems:`center`,justifyContent:`center`,width:`18px`,height:`18px`},children:[(0,c.jsx)(i.RotateCw,{size:18}),(0,c.jsx)(`span`,{style:{position:`absolute`,fontSize:`6px`,fontWeight:`bold`,top:`52%`,left:`50%`,transform:`translate(-50%, -50%)`,pointerEvents:`none`,fontFamily:`sans-serif`,lineHeight:1},children:`10`})]})}),(0,c.jsxs)(`div`,{className:`sdk-volume-group`,children:[(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:pt,children:wt()}),(0,c.jsx)(`div`,{className:`sdk-volume-slider-container`,children:(0,c.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`0.05`,value:L?0:I,onChange:ft,className:`sdk-volume-slider`,style:{"--volume-pct":`${(L?0:I)*100}%`}})})]}),(0,c.jsxs)(`div`,{className:`sdk-time-display`,children:[Q(J===null?P:J),` / `,Q(F)]}),h&&Pe.chapter&&(0,c.jsxs)(`div`,{className:`sdk-chapter-badge ${G?`active`:``}`,title:`Toggle Key Moments side panel`,onClick:()=>Re(!G),style:{cursor:`pointer`,display:`flex`,alignItems:`center`},children:[(0,c.jsx)(i.ListVideo,{size:10,style:{marginRight:`5px`}}),(0,c.jsx)(`span`,{style:{marginRight:`3px`},children:Pe.chapter.title}),(0,c.jsx)(i.ChevronRight,{size:10,style:{opacity:.8,transform:G?`rotate(90deg)`:`none`,transition:`transform 0.2s ease`}})]})]}),(0,c.jsxs)(`div`,{className:`sdk-control-group`,children:[ee&&(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:bt,title:`Cast Stream`,style:{color:K?`#3b82f6`:``},children:(0,c.jsx)(i.Cast,{size:18})}),Ue&&(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:xt,title:`AirPlay`,style:{color:l},children:(0,c.jsx)(i.Airplay,{size:18})}),Ae.length>1&&(0,c.jsxs)(`div`,{className:`sdk-menu-container`,children:[(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>$(`audio`),title:`Audio track`,style:{color:H===`audio`?l:``},children:(0,c.jsx)(i.Languages,{size:18})}),H===`audio`&&(0,c.jsxs)(`div`,{className:`sdk-dropup-menu`,children:[(0,c.jsx)(`div`,{className:`sdk-dropup-header`,children:`Audio Tracks`}),Ae.map(e=>(0,c.jsxs)(`div`,{className:`sdk-dropup-item ${Me===e.id?`active`:``}`,onClick:()=>{j?.setAudioTrack(e.id),Ne(e.id),U(`none`)},children:[(0,c.jsx)(`span`,{children:S(e)}),Me===e.id&&(0,c.jsx)(i.Check,{size:12})]},e.id))]})]}),te&&(0,c.jsxs)(`div`,{className:`sdk-menu-container`,children:[(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>$(`subtitles`),title:`Subtitles track selector`,style:{color:z===`off`?``:l},children:(0,c.jsx)(i.Subtitles,{size:18})}),H===`subtitles`&&(0,c.jsxs)(`div`,{className:`sdk-dropup-menu`,children:[(0,c.jsx)(`div`,{className:`sdk-dropup-header`,children:`Subtitles`}),(0,c.jsxs)(`div`,{className:`sdk-dropup-item ${z===`off`?`active`:``}`,onClick:()=>gt(`off`),children:[(0,c.jsx)(`span`,{children:`Off`}),z===`off`&&(0,c.jsx)(i.Check,{size:12})]}),Oe.map(e=>(0,c.jsxs)(`div`,{className:`sdk-dropup-item ${z===e.id?`active`:``}`,onClick:()=>gt(e.id),children:[(0,c.jsx)(`span`,{children:S(e)}),z===e.id&&(0,c.jsx)(i.Check,{size:12})]},e.id))]})]}),ne&&(0,c.jsxs)(`div`,{className:`sdk-menu-container`,children:[(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>$(`quality`),title:`Stream Quality settings`,style:{color:we.id===-1?``:l},children:(0,c.jsx)(i.Settings,{size:18})}),H===`quality`&&(0,c.jsxs)(`div`,{className:`sdk-dropup-menu large`,children:[(0,c.jsx)(`div`,{className:`sdk-dropup-header`,children:`Quality Options`}),Se.map(e=>(0,c.jsxs)(`div`,{className:`sdk-dropup-item ${we.id===e.id?`active`:``}`,onClick:()=>ht(e.id),children:[(0,c.jsx)(`span`,{children:e.label}),we.id===e.id&&(0,c.jsx)(i.Check,{size:12})]},e.id))]})]}),re&&(0,c.jsxs)(`div`,{className:`sdk-menu-container`,children:[(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>$(`speed`),title:`Playback Speed`,children:(0,c.jsxs)(`span`,{style:{fontSize:`11px`,fontWeight:`bold`},children:[W,`x`]})}),H===`speed`&&(0,c.jsxs)(`div`,{className:`sdk-dropup-menu`,children:[(0,c.jsx)(`div`,{className:`sdk-dropup-header`,children:`Speed`}),[.5,.75,1,1.25,1.5,2].map(e=>(0,c.jsxs)(`div`,{className:`sdk-dropup-item ${W===e?`active`:``}`,onClick:()=>mt(e),children:[(0,c.jsx)(`span`,{children:e===1?`Normal`:`${e}x`}),W===e&&(0,c.jsx)(i.Check,{size:12})]},e))]})]}),ae&&(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:vt,title:`Picture-in-Picture`,style:{color:ve?l:``},children:(0,c.jsx)(i.PictureInPicture,{size:18})}),oe&&(0,c.jsx)(`button`,{className:`sdk-control-btn`,onClick:yt,title:`Fullscreen`,children:ge?(0,c.jsx)(i.Minimize,{size:18}):(0,c.jsx)(i.Maximize,{size:18})})]})]})]})}),h&&G&&V.length>0&&(0,c.jsxs)(`div`,{className:`sdk-sidebar-panel`,children:[(0,c.jsxs)(`div`,{className:`sdk-sidebar-header`,children:[(0,c.jsx)(`div`,{className:`sdk-sidebar-title`,children:`In this video`}),(0,c.jsx)(`button`,{className:`sdk-sidebar-close-btn`,onClick:()=>Re(!1),title:`Close panel`,children:(0,c.jsx)(i.X,{size:16})})]}),(0,c.jsx)(`div`,{className:`sdk-sidebar-tabs`,children:(0,c.jsx)(`button`,{className:`sdk-sidebar-tab active`,children:`Key Moments`})}),(0,c.jsx)(`div`,{className:`sdk-sidebar-content`,children:V.map((e,t)=>{let n=Pe.index===t;return(0,c.jsxs)(`div`,{className:`sdk-sidebar-chapter-row ${n?`active`:``}`,onClick:()=>_t(e.startTime),children:[(0,c.jsxs)(`div`,{className:`sdk-sidebar-chapter-thumbnail`,style:{overflow:`hidden`},children:[ze[t]||e.thumbnail?(0,c.jsx)(`img`,{src:ze[t]||e.thumbnail,alt:e.title,style:{width:`100%`,height:`100%`,objectFit:`cover`,display:`block`}}):(0,c.jsx)(i.ListVideo,{size:14,className:`sdk-sidebar-chapter-icon`,style:{color:n?l:`rgba(255,255,255,0.4)`}}),(0,c.jsx)(`span`,{className:`sdk-sidebar-chapter-time`,children:Q(e.startTime)})]}),(0,c.jsxs)(`div`,{className:`sdk-sidebar-chapter-info`,children:[(0,c.jsx)(`div`,{className:`sdk-sidebar-chapter-title`,style:{color:n?l:`#ffffff`},children:e.title}),(0,c.jsxs)(`div`,{className:`sdk-sidebar-chapter-duration`,children:[`Start at `,Q(e.startTime)]})]})]},t)})})]})]})};function T(e,r){let i=(0,n.createRoot)(e),a=r;return i.render((0,t.createElement)(w,a)),{update(e){a={...a,...e},i.render((0,t.createElement)(w,a))},destroy(){i.unmount()}}}e.FirebaseAnalyticsProvider=ie,e.VideoPlayerSDK=se,e.WebVideoPlayer=w,e.createPlayer=T});
|
|
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)}}getAudioTracks(){return this.audioTrackList}setAudioTrack(e){this.hlsInstance&&(this.hlsInstance.audioTrack=e)}destroy(){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={}}},Cd=e=>{if(e.includes(`d3queh3es1i8u.cloudfront.net`))try{let t=new URL(e);return`/video-proxy${t.pathname}${t.search}`}catch{return e.replace(`https://d3queh3es1i8u.cloudfront.net`,`/video-proxy`)}return e},wd=e=>{let t=e.replace(`#`,``);return t.length===6?`${parseInt(t.substring(0,2),16)}, ${parseInt(t.substring(2,4),16)}, ${parseInt(t.substring(4,6),16)}`:t.length===3?`${parseInt(t[0]+t[0],16)}, ${parseInt(t[1]+t[1],16)}, ${parseInt(t[2]+t[2],16)}`:`99, 102, 241`},Td={en:`English`,eng:`English`,fr:`French`,fre:`French`,fra:`French`,es:`Spanish`,spa:`Spanish`,de:`German`,ger:`German`,deu:`German`,it:`Italian`,ita:`Italian`,pt:`Portuguese`,por:`Portuguese`,ja:`Japanese`,zh:`Chinese`,ko:`Korean`,ru:`Russian`,ar:`Arabic`,hi:`Hindi`},Ed=e=>{if(!e)return null;let t=e.trim().toLowerCase(),n=t.match(/^(en|eng|fr|fre|fra|es|spa|de|ger|deu|it|ita|pt|por|ja|zh|ko|ru|ar|hi)/);if(n&&Td[n[0]])return Td[n[0]];for(let[e,n]of Object.entries(Td))if(t.includes(e))return n;return/english|anglais|ingles/i.test(t)?`English`:/french|français/i.test(t)?`French`:/spanish|español/i.test(t)?`Spanish`:/german|deutsch/i.test(t)?`German`:/italian|italiano/i.test(t)?`Italian`:/portuguese|português/i.test(t)?`Portuguese`:/japanese|nihongo/i.test(t)?`Japanese`:/chinese|中文/i.test(t)?`Chinese`:/korean|한국어/i.test(t)?`Korean`:/russian|русский/i.test(t)?`Russian`:/arabic|العربية/i.test(t)?`Arabic`:/hindi|हिन्दी/i.test(t)?`Hindi`:null},Dd=e=>{if(e.lang){let t=Ed(e.lang);if(t)return t}if(e.label){let t=e.label.trim(),n=t.split(/[#\d\.\s\-_/|:]+/).filter(Boolean);for(let e=n.length-1;e>=0;--e){let t=Ed(n[e]);if(t)return t}let r=t.replace(/^[#\d\.\s]+/,``).trim();return Ed(r)||r}return`Unknown`},Od=e=>{let t=new Set;return e.filter(e=>{let n=`${Dd(e).toLowerCase()}|${(e.lang||``).trim().toLowerCase()}`;return t.has(n)?!1:(t.add(n),!0)})},kd=({src:e,autoplay:n=!1,muted:r=!1,chapters:i=[],keyMoments:o,subtitles:s=[],watermark:c,themeColor:l=`#6366f1`,drmConfig:u,firebaseConfig:d,onAnalyticsEvent:f,onKeyMomentsLoaded:p,enableControls:m=!0,enableChromecast:h=!0,enableKeyMoments:g=!0,enableSubtitles:_=!0,enableQuality:v=!0,enablePlaybackSpeed:y=!0,enablePiP:b=!0,enableFullscreen:x=!0,autoFullscreen:S=!1,subtitleStyle:C={}})=>{let w=(0,t.useRef)(null),T=(0,t.useRef)(null),E=(0,t.useRef)(!1),D=(0,t.useRef)(null),O=(0,t.useRef)(null),k=(0,t.useRef)(null),A=(0,t.useRef)(null),j=(0,t.useRef)(null),M=(0,t.useRef)(!1),N=(0,t.useRef)(!1),P=(0,t.useRef)(null),F=(0,t.useRef)(null),ee=(0,t.useRef)(null),[I,te]=(0,t.useState)(null),[ne,re]=(0,t.useState)(!1),[L,R]=(0,t.useState)(0),[ie,ae]=(0,t.useState)(0),[oe,se]=(0,t.useState)(1),[ce,le]=(0,t.useState)(!1),[ue,z]=(0,t.useState)(!1),[de,B]=(0,t.useState)(!1),[fe,pe]=(0,t.useState)(!1),[me,he]=(0,t.useState)(!1),[ge,_e]=(0,t.useState)([]),[ve,V]=(0,t.useState)({id:-1,height:0,width:0,bitrate:0,label:`Auto`}),[ye,H]=(0,t.useState)(``),[be,xe]=(0,t.useState)(`off`),[Se,U]=(0,t.useState)(Od(s)),[Ce,we]=(0,t.useState)([]),[Te,Ee]=(0,t.useState)(0);(0,t.useEffect)(()=>{if(I){let e=I.subtitles.getTracks();U(Od([...s,...e.filter(e=>!s.some(t=>t.id===e.id))]))}else U(Od(s))},[s.map(e=>e.id).join(`,`),I]);let[De,Oe]=(0,t.useState)({chapter:null,index:-1}),[ke,Ae]=(0,t.useState)(o||i||[]),[je,Me]=(0,t.useState)(`none`),[Ne,Pe]=(0,t.useState)(1),[Fe,Ie]=(0,t.useState)(!1),[Le,Re]=(0,t.useState)({}),ze=JSON.stringify(ke.map(e=>({title:e.title,startTime:e.startTime})));(0,t.useEffect)(()=>{Ae(o||i||[])},[(o||i||[]).map(e=>`${e.startTime}:${e.title}`).join(`,`)]),(0,t.useEffect)(()=>{if(!e||!ke||ke.length===0)return;Re({});let t=document.createElement(`video`);t.muted=!0,t.preload=`metadata`,t.crossOrigin=`anonymous`,t.style.cssText=`position:fixed;top:0;left:0;width:10px;height:10px;opacity:0.01;pointer-events:none;z-index:-9999;`,document.body.appendChild(t);let n=null,r=e.includes(`.m3u8`),i=document.createElement(`canvas`);i.width=160,i.height=90;let a=i.getContext(`2d`),o=0,s=!1,c=()=>{if(o>=ke.length){f();return}let e=ke[o].startTime;t.currentTime=e===0?.01:e},l=()=>{if(a&&t.readyState>=2){a.drawImage(t,0,0,i.width,i.height);let e=i.toDataURL(`image/jpeg`,.8);Re(t=>({...t,[o]:e})),o++,c()}else setTimeout(l,100)},d=()=>{s||(s=!0,c())};t.addEventListener(`seeked`,l),t.addEventListener(`canplay`,d),r&&Lu.isSupported()?(n=new Lu({enableWorker:!1,maxBufferLength:5,xhrSetup:(t,n)=>{let r=u?.authToken;if(!r)try{let t=new URL(e),n=t.searchParams.get(`token`)||t.searchParams.get(`key`)||t.searchParams.get(`auth`)||t.searchParams.get(`authToken`);n&&(r=n)}catch{}try{let e=Cd(n),i=new URL(e,window.location.origin);r&&i.searchParams.set(`token`,r),t.open(`GET`,i.toString(),!0)}catch(e){console.error(`[WebVideoPlayer tempHls] xhrSetup error:`,e)}}}),n.loadSource(Cd(e)),n.attachMedia(t)):t.src=e,t.readyState>=2&&d();let f=()=>{t.removeEventListener(`seeked`,l),t.removeEventListener(`canplay`,d),n&&n.destroy(),document.body.contains(t)&&document.body.removeChild(t)};return f},[e,ze]);let[Be,Ve]=(0,t.useState)(null),[He,Ue]=(0,t.useState)(!1),[We,Ge]=(0,t.useState)(!1),[Ke,qe]=(0,t.useState)(null),[Je,Ye]=(0,t.useState)(null),[Xe,Ze]=(0,t.useState)(0),[Qe,$e]=(0,t.useState)(null),[et,tt]=(0,t.useState)(null),[nt,rt]=(0,t.useState)(null);(0,t.useEffect)(()=>{if(ee.current&&!ee.current.querySelector(`google-cast-launcher`)){let e=document.createElement(`google-cast-launcher`);e.style.cursor=`pointer`,e.style.width=`100%`,e.style.height=`100%`,e.style.display=`block`,ee.current.appendChild(e)}},[]),(0,t.useEffect)(()=>{if(!I){Ue(!1),Ge(!1),qe(null);return}let e=e=>Ue(e),t=()=>{let e=I.getVideoElement(),t=!!e?.webkitCurrentPlaybackTargetIsWireless;Ge(t),qe(t?e.webkitCurrentPlaybackTargetName||`AirPlay device`:null)};e(I.casting.isAirPlayAvailable()),t();let n=I.getVideoElement(),r=t=>{e(t.availability===`available`)},i=()=>{t()};return`webkitShowPlaybackTargetPicker`in n&&(n.addEventListener(`webkitplaybacktargetavailabilitychanged`,r),n.addEventListener(`webkitcurrentplaybacktargetiswirelesschanged`,i)),()=>{`webkitShowPlaybackTargetPicker`in n&&(n.removeEventListener(`webkitplaybacktargetavailabilitychanged`,r),n.removeEventListener(`webkitcurrentplaybacktargetiswirelesschanged`,i))}},[I]);let[it,at]=(0,t.useState)(!0),ot=(0,t.useRef)(null),st=(0,t.useRef)(!1),ct=(0,t.useRef)(`none`),lt=(0,t.useRef)(s);(0,t.useEffect)(()=>{if(!w.current)return;let t=document.createElement(`video`);t.muted=!0,t.preload=`metadata`,t.crossOrigin=`anonymous`,t.style.cssText=`display:none;position:absolute;pointer-events:none;`,document.body.appendChild(t),k.current=t;let i=e.includes(`.m3u8`);if(i&&Lu.isSupported()){let n=new Lu({enableWorker:!1,maxBufferLength:5,xhrSetup:(t,n)=>{let r=u?.authToken;if(!r)try{let t=new URL(e),n=t.searchParams.get(`token`)||t.searchParams.get(`key`)||t.searchParams.get(`auth`)||t.searchParams.get(`authToken`);n&&(r=n)}catch{}try{let e=Cd(n),i=new URL(e,window.location.origin);r&&i.searchParams.set(`token`,r),t.open(`GET`,i.toString(),!0)}catch(e){console.error(`[WebVideoPlayer hiddenHls] xhrSetup error:`,e)}}});n.loadSource(Cd(e)),n.attachMedia(t),A.current=n}else i&&t.canPlayType(`application/vnd.apple.mpegurl`),t.src=e;t.addEventListener(`seeked`,()=>{let e=O.current;if(!e)return;let n=e.getContext(`2d`);n&&t.readyState>=2&&(n.drawImage(t,0,0,e.width,e.height),$e(e.toDataURL(`image/jpeg`,.82)))});let a;if(d){let e=new gd(d);T.current=e,a=e.createCallback()}let o=new Sd({container:w.current,src:e,autoplay:n,muted:r,keyMoments:ke,subtitles:s,drm:{watermarkText:c,allowedDomains:[`localhost`,`127.0.0.1`],...u},analyticsCallback:e=>{a?.(e),f&&f(e)},themeColor:l});o.on(`keymomentsloaded`,e=>{Ae(e),p&&p(e)}),o.on(`chaptersloaded`,e=>{Ae(e),p&&p(e)}),o.on(`play`,()=>{re(!0),he(!1)}),o.on(`pause`,()=>re(!1)),o.on(`ended`,()=>{re(!1),he(!0)}),o.on(`timeupdate`,e=>{if(N.current&&P.current!==null)if(Math.abs(e-P.current)<5)N.current=!1,P.current=null,F.current&&=(window.clearTimeout(F.current),null);else return;R(e),ae(o.getDuration());let t=o.keyMoments.getCurrentMoment(e);Oe({chapter:t.keyMoment,index:t.index})}),o.on(`qualitylevels`,e=>{_e(e)}),o.on(`qualitychange`,e=>{V(e)}),o.on(`buffering`,e=>{z(e)}),o.on(`volumechange`,e=>{se(e.volume),le(e.muted)}),o.on(`pipchange`,e=>{pe(e)}),o.subtitles.onSubtitleChange(e=>{H(e)}),o.on(`subtitlesloaded`,e=>{U(Od([...e]));let t=e.find(e=>e.isDefault);t&&(o.subtitles.setActiveTrack(t.id),xe(t.id))}),o.on(`audiotracksloaded`,e=>{we(e),Ee(e[0]?.id??0)}),o.on(`audiotrackchange`,e=>{Ee(e)}),o.casting.onCastStateChange((e,t)=>{Ve(e?t:null)}),se(o.getVolume()),le(o.isMuted()),te(o),S&&w.current&&(E.current=!0,w.current.requestFullscreen().catch(()=>{E.current=!1}));let m=()=>{let e=!!document.fullscreenElement;B(e);let t=o.getVideoElement();o.analytics.track(e?`fullscreen_enter`:`fullscreen_exit`,t)};document.addEventListener(`fullscreenchange`,m);let h=e=>{let t=document.activeElement;if(!(t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.getAttribute(`contenteditable`)===`true`))){switch(e.key.toLowerCase()){case` `:case`k`:e.preventDefault(),o.getVideoElement().paused?o.play():o.pause();break;case`arrowleft`:case`j`:e.preventDefault(),o.seek(o.getCurrentTime()-10);break;case`arrowright`:case`l`:e.preventDefault(),o.seek(o.getCurrentTime()+10);break;case`arrowup`:e.preventDefault(),o.setVolume(o.getVolume()+.1);break;case`arrowdown`:e.preventDefault(),o.setVolume(o.getVolume()-.1);break;case`m`:e.preventDefault(),o.setMute(!o.isMuted());break;case`f`:e.preventDefault(),o.toggleFullscreen();break;case`p`:e.preventDefault(),o.togglePictureInPicture();break;case`c`:if(e.preventDefault(),o.subtitles.getActiveTrackId()!==`off`)o.subtitles.setActiveTrack(`off`),xe(`off`);else{let e=lt.current;e&&e.length>0&&(o.subtitles.setActiveTrack(e[0].id),xe(e[0].id))}break;default:return}ut()}};return document.addEventListener(`keydown`,h),ut(),()=>{o.destroy(),T.current?.destroy(),T.current=null,document.removeEventListener(`fullscreenchange`,m),document.removeEventListener(`keydown`,h),ot.current&&window.clearTimeout(ot.current),A.current&&=(A.current.destroy(),null),k.current&&=(document.body.removeChild(k.current),null)}},[e,c]),(0,t.useEffect)(()=>{if(I){I.keyMoments.setKeyMoments(ke);let e=w.current?.querySelector(`video`);if(e){let t=I.keyMoments.getCurrentMoment(e.currentTime);Oe({chapter:t.keyMoment,index:t.index})}}},[ze,I]),(0,t.useEffect)(()=>{let e=e=>{je!==`none`&&(e.target.closest(`.sdk-menu-container`)||Me(`none`))};return document.addEventListener(`click`,e),()=>{document.removeEventListener(`click`,e)}},[je]),(0,t.useEffect)(()=>{st.current=ne},[ne]),(0,t.useEffect)(()=>{ct.current=je},[je]),(0,t.useEffect)(()=>{lt.current=Se},[Se]);let ut=()=>{at(!0),ot.current&&window.clearTimeout(ot.current),ot.current=window.setTimeout(()=>{st.current&&ct.current===`none`&&at(!1)},1e4)},dt=()=>{ut()},ft=()=>{S&&!E.current&&w.current&&(E.current=!0,w.current.requestFullscreen().catch(()=>{}))},pt=()=>{I&&(me?(gt(0),ft(),I.play(),he(!1)):ne?I.pause():(ft(),I.play()),ut())},mt=e=>{if(!D.current||!I||ie===0)return 0;let t=D.current.getBoundingClientRect();return Math.max(0,Math.min(1,(e.clientX-t.left)/t.width))*ie},ht=e=>{if(!I)return;M.current=!0,rt(mt(e));let t=e=>{if(!M.current||!D.current)return;let t=D.current.getBoundingClientRect(),n=Math.max(0,Math.min(1,(e.clientX-t.left)/t.width))*ie;rt(n),Ye(e.clientX-t.left),Ze(n),k.current&&(k.current.currentTime=n),ut()},n=e=>{if(M.current=!1,D.current){let t=D.current.getBoundingClientRect();gt(Math.max(0,Math.min(1,(e.clientX-t.left)/t.width))*ie)}rt(null),document.removeEventListener(`mousemove`,t),document.removeEventListener(`mouseup`,n)};document.addEventListener(`mousemove`,t),document.addEventListener(`mouseup`,n)},gt=e=>{if(!I)return;let t=Math.max(0,ie>0?Math.min(e,ie):e);N.current=!0,P.current=t,R(t),I.seek(t),F.current&&window.clearTimeout(F.current),F.current=window.setTimeout(()=>{N.current=!1,P.current=null,F.current=null},3e3)},_t=e=>{if(!I)return;let t=parseFloat(e.target.value);I.setVolume(t),se(t),le(t===0)},vt=()=>{if(!I)return;let e=!ce;I.setMute(e),le(e)},yt=e=>{I&&(I.setPlaybackRate(e),Pe(e),Me(`none`))},bt=e=>{if(!I)return;I.setQuality(e);let t=ge.find(t=>t.id===e);t&&V(t),Me(`none`)},xt=e=>{I&&(I.subtitles.setActiveTrack(e),xe(e),Me(`none`))},St=e=>{gt(e),Me(`none`)},Ct=()=>{I&&I.togglePictureInPicture()},wt=()=>{I&&I.toggleFullscreen()},Tt=()=>{I&&(Be?I.casting.stopCasting():I.casting.requestSession(e,L))},Et=()=>{if(!I)return;let e=I.getVideoElement();if(We){I.casting.stopAirPlay(e);return}typeof e.webkitShowPlaybackTargetPicker==`function`||I.casting.isAirPlayAvailable()?I.casting.requestAirPlaySession(e):console.warn(`[PlayerSDK AirPlay] AirPlay is not available on this device.`)},Dt=e=>{if(!D.current||ie===0||!I)return;let t=D.current.getBoundingClientRect(),n=Math.max(0,Math.min(1,(e.clientX-t.left)/t.width))*ie;Ye(e.clientX-t.left),Ze(n),j.current&&window.clearTimeout(j.current),j.current=window.setTimeout(()=>{k.current&&(k.current.currentTime=n)},100),tt(I.keyMoments.getCurrentMoment(n).keyMoment)},Ot=()=>{Ye(null),$e(null),tt(null),j.current&&window.clearTimeout(j.current)},kt=e=>{if(isNaN(e)||e<0)return`00:00`;let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`},At=()=>ce||oe===0?(0,a.jsx)(ud,{size:18}):oe<.3?(0,a.jsx)(dd,{size:18}):oe<.7?(0,a.jsx)(cd,{size:18}):(0,a.jsx)(ld,{size:18}),jt=e=>{Me(je===e?`none`:e)};return(0,a.jsxs)(`div`,{ref:w,className:`sdk-player-container ${it?`controls-active`:``}`,onMouseMove:dt,onMouseLeave:()=>{},style:{border:`1px solid rgba(255, 255, 255, 0.08)`,"--sdk-theme-color":l,"--sdk-theme-color-rgb":wd(l)},children:[(0,a.jsx)(`canvas`,{ref:O,width:160,height:90,style:{display:`none`,position:`absolute`,pointerEvents:`none`}}),(0,a.jsx)(`div`,{className:`sdk-spinner-overlay ${ue?`active`:``}`,children:(0,a.jsx)(`div`,{className:`sdk-spinner`})}),ye&&be!==`off`&&(0,a.jsx)(`div`,{className:`sdk-subtitles-overlay`,children:(0,a.jsx)(`span`,{className:`sdk-subtitles-text`,style:{fontSize:C.size===`small`?`14px`:C.size===`large`?`24px`:`18px`,color:C.color??`#ffffff`,background:C.background===`none`?`transparent`:C.background===`solid`?`rgba(0, 0, 0, 0.92)`:`rgba(15, 23, 42, 0.78)`,border:C.background===`none`?`none`:`1px solid rgba(255,255,255,0.08)`,backdropFilter:C.background===`none`?`none`:`blur(8px)`},dangerouslySetInnerHTML:{__html:ye}})}),(Be||We)&&(0,a.jsxs)(`div`,{className:`sdk-cast-screen`,children:[(0,a.jsx)(Yu,{size:64,className:`sdk-cast-icon-glow`}),(0,a.jsx)(`div`,{className:`sdk-cast-title`,children:Be?`Casting to ${Be}`:`AirPlay to ${Ke||`device`}`}),(0,a.jsx)(`div`,{className:`sdk-cast-desc`,children:Be?`This media asset is currently streaming on your external screen.`:`This media asset is currently streaming via AirPlay${Ke?` to ${Ke}`:``}.`}),(0,a.jsx)(`button`,{className:`sdk-cast-disconnect-btn`,onClick:()=>{Be?I?.casting.stopCasting():We&&I?.casting.stopAirPlay(I.getVideoElement())},children:`Disconnect Streaming`})]}),!Be&&!ne&&(0,a.jsx)(`div`,{className:`sdk-center-action-overlay`,onClick:pt,children:(0,a.jsx)(`div`,{className:`sdk-center-action-btn`,children:me?(0,a.jsx)(ad,{size:32,className:`sdk-center-icon`}):(0,a.jsx)(id,{size:32,className:`sdk-center-icon`,style:{marginLeft:`4px`},fill:`currentColor`})})}),!Be&&(0,a.jsx)(`div`,{className:`sdk-controls-overlay`,onClick:e=>{e.target===e.currentTarget&&pt()},children:m&&(0,a.jsxs)(`div`,{className:`sdk-control-bar`,children:[(0,a.jsxs)(`div`,{ref:D,className:`sdk-seekbar-container`,onMouseDown:ht,onMouseMove:Dt,onMouseLeave:Ot,children:[(0,a.jsx)(`div`,{className:`sdk-seekbar-buffered`,style:{width:`${ie?(I&&I.getBufferedRanges()[0]?.end||0)/ie*100:0}%`}}),(0,a.jsx)(`div`,{className:`sdk-seekbar-progress`,style:{width:`${ie?(nt===null?L:nt)/ie*100:0}%`,background:l},children:(0,a.jsx)(`div`,{className:`sdk-seekbar-handle`})}),g&&ke.map((e,t)=>ie===0?null:(0,a.jsx)(`div`,{className:`sdk-seekbar-chapter-marker`,style:{left:`${e.startTime/ie*100}%`}},t)),Je!==null&&Qe&&(0,a.jsxs)(`div`,{className:`sdk-thumbnail-tooltip`,style:{left:`${Je}px`},children:[(0,a.jsx)(`div`,{className:`sdk-thumbnail-preview`,children:(0,a.jsx)(`img`,{src:Qe,alt:`preview`,style:{width:`100%`,height:`100%`,objectFit:`cover`,borderRadius:`6px 6px 0 0`,display:`block`}})}),(0,a.jsxs)(`div`,{className:`sdk-thumbnail-text`,children:[kt(Xe),et&&(0,a.jsx)(`div`,{className:`sdk-thumbnail-chapter`,children:et.title})]})]})]}),(0,a.jsxs)(`div`,{className:`sdk-control-row`,children:[(0,a.jsxs)(`div`,{className:`sdk-control-group`,children:[(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:pt,title:ne?`Pause`:`Play`,children:ne?(0,a.jsx)(nd,{size:18,fill:`currentColor`}):(0,a.jsx)(id,{size:18,fill:`currentColor`})}),(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>{gt(0),ne||I?.play()},title:`Replay from beginning`,children:(0,a.jsx)(ad,{size:18})}),(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>gt(L-10),title:`Rewind 10s`,children:(0,a.jsxs)(`div`,{style:{position:`relative`,display:`flex`,alignItems:`center`,justifyContent:`center`,width:`18px`,height:`18px`},children:[(0,a.jsx)(ad,{size:18}),(0,a.jsx)(`span`,{style:{position:`absolute`,fontSize:`6px`,fontWeight:`bold`,top:`52%`,left:`50%`,transform:`translate(-50%, -50%)`,pointerEvents:`none`,fontFamily:`sans-serif`,lineHeight:1},children:`10`})]})}),(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>gt(L+10),title:`Forward 10s`,children:(0,a.jsxs)(`div`,{style:{position:`relative`,display:`flex`,alignItems:`center`,justifyContent:`center`,width:`18px`,height:`18px`},children:[(0,a.jsx)(od,{size:18}),(0,a.jsx)(`span`,{style:{position:`absolute`,fontSize:`6px`,fontWeight:`bold`,top:`52%`,left:`50%`,transform:`translate(-50%, -50%)`,pointerEvents:`none`,fontFamily:`sans-serif`,lineHeight:1},children:`10`})]})}),(0,a.jsxs)(`div`,{className:`sdk-volume-group`,children:[(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:vt,children:At()}),(0,a.jsx)(`div`,{className:`sdk-volume-slider-container`,children:(0,a.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`0.05`,value:ce?0:oe,onChange:_t,className:`sdk-volume-slider`,style:{"--volume-pct":`${(ce?0:oe)*100}%`}})})]}),(0,a.jsxs)(`div`,{className:`sdk-time-display`,children:[kt(nt===null?L:nt),` / `,kt(ie)]}),g&&De.chapter&&(0,a.jsxs)(`div`,{className:`sdk-chapter-badge ${Fe?`active`:``}`,title:`Toggle Key Moments side panel`,onClick:()=>Ie(!Fe),style:{cursor:`pointer`,display:`flex`,alignItems:`center`},children:[(0,a.jsx)($u,{size:10,style:{marginRight:`5px`}}),(0,a.jsx)(`span`,{style:{marginRight:`3px`},children:De.chapter.title}),(0,a.jsx)(Zu,{size:10,style:{opacity:.8,transform:Fe?`rotate(90deg)`:`none`,transition:`transform 0.2s ease`}})]})]}),(0,a.jsxs)(`div`,{className:`sdk-control-group`,children:[h&&(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:Tt,title:`Cast Stream`,style:{color:Be?`#3b82f6`:``},children:(0,a.jsx)(Yu,{size:18})}),He&&(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:Et,title:`AirPlay`,style:{color:l},children:(0,a.jsx)(qu,{size:18})}),Ce.length>1&&(0,a.jsxs)(`div`,{className:`sdk-menu-container`,children:[(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>jt(`audio`),title:`Audio track`,style:{color:je===`audio`?l:``},children:(0,a.jsx)(Qu,{size:18})}),je===`audio`&&(0,a.jsxs)(`div`,{className:`sdk-dropup-menu`,children:[(0,a.jsx)(`div`,{className:`sdk-dropup-header`,children:`Audio Tracks`}),Ce.map(e=>(0,a.jsxs)(`div`,{className:`sdk-dropup-item ${Te===e.id?`active`:``}`,onClick:()=>{I?.setAudioTrack(e.id),Ee(e.id),Me(`none`)},children:[(0,a.jsx)(`span`,{children:Dd(e)}),Te===e.id&&(0,a.jsx)(Xu,{size:12})]},e.id))]})]}),_&&(0,a.jsxs)(`div`,{className:`sdk-menu-container`,children:[(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>jt(`subtitles`),title:`Subtitles track selector`,style:{color:be===`off`?``:l},children:(0,a.jsx)(Ju,{size:18})}),je===`subtitles`&&(0,a.jsxs)(`div`,{className:`sdk-dropup-menu`,children:[(0,a.jsx)(`div`,{className:`sdk-dropup-header`,children:`Subtitles`}),(0,a.jsxs)(`div`,{className:`sdk-dropup-item ${be===`off`?`active`:``}`,onClick:()=>xt(`off`),children:[(0,a.jsx)(`span`,{children:`Off`}),be===`off`&&(0,a.jsx)(Xu,{size:12})]}),Se.map(e=>(0,a.jsxs)(`div`,{className:`sdk-dropup-item ${be===e.id?`active`:``}`,onClick:()=>xt(e.id),children:[(0,a.jsx)(`span`,{children:Dd(e)}),be===e.id&&(0,a.jsx)(Xu,{size:12})]},e.id))]})]}),v&&(0,a.jsxs)(`div`,{className:`sdk-menu-container`,children:[(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>jt(`quality`),title:`Stream Quality settings`,style:{color:ve.id===-1?``:l},children:(0,a.jsx)(sd,{size:18})}),je===`quality`&&(0,a.jsxs)(`div`,{className:`sdk-dropup-menu large`,children:[(0,a.jsx)(`div`,{className:`sdk-dropup-header`,children:`Quality Options`}),ge.map(e=>(0,a.jsxs)(`div`,{className:`sdk-dropup-item ${ve.id===e.id?`active`:``}`,onClick:()=>bt(e.id),children:[(0,a.jsx)(`span`,{children:e.label}),ve.id===e.id&&(0,a.jsx)(Xu,{size:12})]},e.id))]})]}),y&&(0,a.jsxs)(`div`,{className:`sdk-menu-container`,children:[(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:()=>jt(`speed`),title:`Playback Speed`,children:(0,a.jsxs)(`span`,{style:{fontSize:`11px`,fontWeight:`bold`},children:[Ne,`x`]})}),je===`speed`&&(0,a.jsxs)(`div`,{className:`sdk-dropup-menu`,children:[(0,a.jsx)(`div`,{className:`sdk-dropup-header`,children:`Speed`}),[.5,.75,1,1.25,1.5,2].map(e=>(0,a.jsxs)(`div`,{className:`sdk-dropup-item ${Ne===e?`active`:``}`,onClick:()=>yt(e),children:[(0,a.jsx)(`span`,{children:e===1?`Normal`:`${e}x`}),Ne===e&&(0,a.jsx)(Xu,{size:12})]},e))]})]}),b&&(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:Ct,title:`Picture-in-Picture`,style:{color:fe?l:``},children:(0,a.jsx)(rd,{size:18})}),x&&(0,a.jsx)(`button`,{className:`sdk-control-btn`,onClick:wt,title:`Fullscreen`,children:de?(0,a.jsx)(td,{size:18}):(0,a.jsx)(ed,{size:18})})]})]})]})}),g&&Fe&&ke.length>0&&(0,a.jsxs)(`div`,{className:`sdk-sidebar-panel`,children:[(0,a.jsxs)(`div`,{className:`sdk-sidebar-header`,children:[(0,a.jsx)(`div`,{className:`sdk-sidebar-title`,children:`In this video`}),(0,a.jsx)(`button`,{className:`sdk-sidebar-close-btn`,onClick:()=>Ie(!1),title:`Close panel`,children:(0,a.jsx)(fd,{size:16})})]}),(0,a.jsx)(`div`,{className:`sdk-sidebar-tabs`,children:(0,a.jsx)(`button`,{className:`sdk-sidebar-tab active`,children:`Key Moments`})}),(0,a.jsx)(`div`,{className:`sdk-sidebar-content`,children:ke.map((e,t)=>{let n=De.index===t;return(0,a.jsxs)(`div`,{className:`sdk-sidebar-chapter-row ${n?`active`:``}`,onClick:()=>St(e.startTime),children:[(0,a.jsxs)(`div`,{className:`sdk-sidebar-chapter-thumbnail`,style:{overflow:`hidden`},children:[Le[t]||e.thumbnail?(0,a.jsx)(`img`,{src:Le[t]||e.thumbnail,alt:e.title,style:{width:`100%`,height:`100%`,objectFit:`cover`,display:`block`}}):(0,a.jsx)($u,{size:14,className:`sdk-sidebar-chapter-icon`,style:{color:n?l:`rgba(255,255,255,0.4)`}}),(0,a.jsx)(`span`,{className:`sdk-sidebar-chapter-time`,children:kt(e.startTime)})]}),(0,a.jsxs)(`div`,{className:`sdk-sidebar-chapter-info`,children:[(0,a.jsx)(`div`,{className:`sdk-sidebar-chapter-title`,style:{color:n?l:`#ffffff`},children:e.title}),(0,a.jsxs)(`div`,{className:`sdk-sidebar-chapter-duration`,children:[`Start at `,kt(e.startTime)]})]})]},t)})})]})]})};function Ad(e,r){let i=(0,n.createRoot)(e),a=r;return i.render((0,t.createElement)(kd,a)),{update(e){a={...a,...e},i.render((0,t.createElement)(kd,a))},destroy(){i.unmount()}}}e.FirebaseAnalyticsProvider=gd,e.VideoPlayerSDK=Sd,e.WebVideoPlayer=kd,e.createPlayer=Ad});
|
|
10
49
|
//# sourceMappingURL=index.umd.js.map
|