UNPKG

vidstack

Version:

Build awesome media experiences on the web.

2 lines (1 loc) 21.7 kB
import{i as u,a as p,w as ct,b as A,c as d,d as dt,$ as V,e as R,f as b,g as v,h as C,j as lt,E as ut,D as a,k,u as pt,l as x,o as _,m as g,n as gt,s as mt,p as O,q as ft}from"./maverick.js";const bt=navigator?.userAgent.toLowerCase(),vt=/iphone|ipad|ipod|ios|crios|fxios/i.test(bt),Tt=/(iphone|ipod)/gi.test(navigator?.platform),yt=!!window.chrome,N=!!window.safari||vt;function Et(){return!u(screen.orientation)&&p(screen.orientation.lock)&&p(screen.orientation.unlock)}function M(i){return i||(i=document.createElement("video")),i.canPlayType("application/vnd.apple.mpegurl").length>0}function D(i){return!!document.pictureInPictureEnabled&&!i.disablePictureInPicture}function H(i){return p(i.webkitSupportsPresentationMode)&&p(i.webkitSetPresentationMode)}async function St(){const i=document.createElement("video");return i.volume=.5,await ct(0),i.volume===.5}function wt(){return window?.MediaSource??window?.WebKitMediaSource}function kt(){return window?.SourceBuffer??window?.WebKitSourceBuffer}function q(){const i=wt();if(u(i))return!1;const t=i&&p(i.isTypeSupported)&&i.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'),e=kt(),s=u(e)||!u(e.prototype)&&p(e.prototype.appendBuffer)&&p(e.prototype.remove);return!!t&&!!s}function L(i,t="preconnect"){const e=document.querySelector(`link[href="${i}"]`);if(!A(e))return!0;const s=document.createElement("link");return s.rel=t,s.href=i,s.crossOrigin="true",document.head.append(s),!0}const T={};function _t(i){if(T[i])return T[i].promise;const t=dt(),e=document.querySelector(`script[src="${i}"]`);if(!A(e))return t.resolve(),t.promise;const s=document.createElement("script");return s.src=i,s.onload=()=>{t.resolve(),delete T[i]},s.onerror=()=>{t.reject(),delete T[i]},setTimeout(()=>document.head.append(s),0),t.promise}function U(i){return i==="use-credentials"?"include":d(i)?"same-origin":void 0}const Ot=/\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\?)/i,Lt=new Set(["audio/mpeg","audio/ogg","audio/3gp","audio/mp4","audio/webm","audio/flac"]),It=/\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i,Pt=new Set(["video/mp4","video/webm","video/3gp","video/ogg","video/avi","video/mpeg"]),B=/\.(m3u8)($|\?)/i,F=new Set(["application/vnd.apple.mpegurl","audio/mpegurl","audio/x-mpegurl","application/x-mpegurl","video/x-mpegurl","video/mpegurl","application/mpegurl"]);function K({src:i,type:t}){return typeof i=="string"&&B.test(i)||F.has(t)}function jt(i){return typeof window.MediaStream<"u"&&i instanceof window.MediaStream}const $t=V('<audio preload="none" aria-hidden="true"></audio>'),At=$t;class Vt{canPlay({src:t,type:e}){return d(t)?Ot.test(t)||Lt.has(e)||t.startsWith("blob:")&&e==="audio/object":e==="audio/object"}mediaType(){return"audio"}async load(){return new(await Promise.resolve().then(function(){return te})).AudioProvider(this.Qf)}render(t){return(()=>{const e=R(At);return b(()=>v(e,"controls",t.controls())),b(()=>v(e,"crossorigin",t.crossorigin())),C(e,s=>void(this.Qf=s)),e})()}}const Rt=V('<video preload="none" aria-hidden="true"></video>'),Ct=Rt;class X{canPlay(t){return d(t.src)?It.test(t.src)||Pt.has(t.type)||t.src.startsWith("blob:")&&t.type==="video/object"||K(t)&&M():t.type==="video/object"}mediaType(){return"video"}async load(t){return new(await Promise.resolve().then(function(){return ae})).VideoProvider(this.Vb,t)}render(t){const e=lt(()=>t.poster()&&t.controls()?t.poster():null);return(()=>{const s=R(Ct);return b(()=>v(s,"controls",t.controls())),b(()=>v(s,"crossorigin",t.crossorigin())),b(()=>v(s,"poster",e())),C(s,r=>void(this.Vb=r)),s})()}}const Y=class extends X{preconnect(){L("https://cdn.jsdelivr.net","preconnect")}canPlay({src:i,type:t}){return Y.supported&&d(i)&&(B.test(i)||F.has(t))}async load(i){return new(await Promise.resolve().then(function(){return ge})).HLSProvider(this.Vb,i)}};let J=Y;J.supported=q();const I=Symbol(0),Q=Symbol(0),l=Symbol(0),f=Symbol(0),W=Symbol(0),y=Symbol(0),m=Symbol(0),z=Symbol(0);function xt(i,t){for(let e=0,s=t.length;e<s;e++)if(E(t[e],i))return t[e];return null}function E(i,t){return t>=i.startTime&&t<i.endTime}function Nt(i,t,e){const s=i.toArray().find(r=>r.kind==="chapters"&&r.mode==="showing");if(s!==t){if(!s){e(null);return}s.readyState==2?e(s):(e(null),s.addEventListener("load",()=>e(s),{once:!0}))}}var G,Z,tt;class P extends ut{constructor(t){super(),this.id="",this.label="",this.language="",this.default=!1,this.hc=!1,this.dc=0,this.fc="disabled",this.ic={},this.gc=[],this.cc=[],this.ec=[],this[G]=0,this[Z]=null,this[tt]=null;for(const e of Object.keys(t))this[e]=t[e];this.type||(this.type="vtt"),t.content?import("./captions/prod.js").then(({parseText:e,VTTCue:s,VTTRegion:r})=>{t.type==="json"?this.jc(t.content,s,r):e(t.content,{type:t.type}).then(({cues:h,regions:n})=>{this.cc=h,this.gc=n,this.kc()})}):t.src||(this[l]=2)}static createId(t){return`id::${t.type}-${t.kind}-${t.src??t.label}`}get metadata(){return this.ic}get regions(){return this.gc}get cues(){return this.cc}get activeCues(){return this.ec}get readyState(){return this[l]}get mode(){return this.fc}set mode(t){this.setMode(t)}addCue(t,e){let s=0,r=this.cc.length;for(s=0;s<r&&!(t.endTime<=this.cc[s].startTime);s++);s===r?this.cc.push(t):this.cc.splice(s,0,t),e?.type!=="cuechange"&&this[m]?.track.addCue(t),this.dispatchEvent(new a("add-cue",{detail:t,trigger:e})),E(t,this.dc)&&this[f](this.dc,e)}removeCue(t,e){const s=this.cc.indexOf(t);if(s>=0){const r=this.ec.includes(t);this.cc.splice(s,1),this[m]?.track.removeCue(t),this.dispatchEvent(new a("remove-cue",{detail:t,trigger:e})),r&&this[f](this.dc,e)}}setMode(t,e){this.fc!==t&&(this.fc=t,t==="disabled"?(this.ec=[],this.lc()):this.readyState===2?this[f](this.dc,e):this.mc(),this.dispatchEvent(new a("mode-change",{detail:this,trigger:e})),this[y]?.())}[(G=l,Z=y,tt=m,f)](t,e){if(this.dc=t,this.mode==="disabled"||!this.cc.length)return;const s=[];for(let h=0,n=this.cc.length;h<n;h++){const c=this.cc[h];E(c,t)&&s.push(c)}let r=s.length!==this.ec.length;if(!r){for(let h=0;h<s.length;h++)if(!this.ec.includes(s[h])){r=!0;break}}this.ec=s,r&&this.lc(e)}[W](){this.hc=!0,this.fc!=="disabled"&&this.mc()}async mc(){if(!(!this.hc||!this.src||this[l]>0)){this[l]=1,this.dispatchEvent(new a("load-start"));try{const{parseResponse:t,VTTCue:e,VTTRegion:s}=await import("./captions/prod.js"),r=this[Q]?.(),h=fetch(this.src,{headers:this.type==="json"?{"Content-Type":"application/json"}:void 0,credentials:U(r)});if(this.type==="json")this.jc(await(await h).text(),e,s);else{const{errors:n,metadata:c,regions:o,cues:ot}=await t(h,{type:this.type,encoding:this.encoding});if(n[0]?.code===0)throw n[0];this.ic=c,this.gc=o,this.cc=ot}this.kc()}catch(t){this.nc(t)}}}kc(){if(this[l]=2,!this.src||this.type!=="vtt"){const e=this[m]?.track;if(e)for(const s of this.cc)e.addCue(s)}const t=new a("load");this[f](this.dc,t),this.dispatchEvent(t)}nc(t){this[l]=3,this.dispatchEvent(new a("error",{detail:t}))}jc(t,e,s){try{t=JSON.parse(t),t.regions&&(this.gc=t.regions.map(r=>Object.assign(new s,r))),t.cues&&(this.cc=t.cues.filter(r=>k(r.startTime)&&k(r.endTime)).map(r=>Object.assign(new e(0,0,""),r)))}catch(r){this.nc(r)}}lc(t){this.dispatchEvent(new a("cue-change",{trigger:t}))}}const Mt=/captions|subtitles/;function Dt(i){return Mt.test(i.kind)}function Ht(i,t=2){return Number(i.toFixed(t))}function j(i){return String(i).split(".")[1]?.length??0}function qt(i,t,e){return Math.max(i,Math.min(e,t))}function Ut(i){return i instanceof HTMLAudioElement}function Bt(i){return i instanceof HTMLVideoElement}function Ft(i){return Ut(i)||Bt(i)}const S=Symbol(0),et=Symbol(0),Kt=Symbol(0),w=Symbol(0),Xt=Symbol(0),Yt=Symbol(0),Jt=Symbol(0),Qt=Symbol(0),Wt=Symbol(0),it=Symbol(0),$=Symbol(0);function st(i){return i instanceof Error?i:Error(JSON.stringify(i))}class rt{constructor(t){this.Ra=t}I(){u(this.ui)&&this.vi()}J(){k(this.ui)&&window.cancelAnimationFrame(this.ui),this.ui=void 0}vi(){this.ui=window.requestAnimationFrame(()=>{u(this.ui)||(this.Ra(),this.vi())})}}class zt{constructor(t,e){this.k=t,this.lh=e,this.gg=pt(),this.Qh=!1,this.Th=!1,this.Uh=!1,this.Rh=new rt(this.Xh.bind(this)),this.ri=void 0,this.si=void 0,this.Yh(),x(this.Zh.bind(this)),_(this.Bh.bind(this))}get d(){return this.k.media}get sg(){return this.lh.delegate}Bh(){this.Rh.J(),this.gg.empty()}Xh(){const t=this.k.currentTime;this.lh.$store.currentTime()!==t&&this.Ph(t)}Yh(){this.Oh("loadstart",this.re),this.Oh("abort",this.Vh),this.Oh("emptied",this._h),this.Oh("error",this.te)}$h(){this.Th||(this.gg.add(this.Oh("loadeddata",this.ai),this.Oh("loadedmetadata",this.bi),this.Oh("canplay",this.De),this.Oh("canplaythrough",this.ci),this.Oh("durationchange",this.di),this.Oh("play",this.ei),this.Oh("progress",this.fi),this.Oh("stalled",this.gi),this.Oh("suspend",this.hi)),this.Th=!0)}ii(){this.Uh||(this.gg.add(this.Oh("pause",this.ji),this.Oh("playing",this.ki),this.Oh("ratechange",this.li),this.Oh("seeked",this.mi),this.Oh("seeking",this.ni),this.Oh("ended",this.oi),this.Oh("volumechange",this.xf),this.Oh("waiting",this.pi)),this.Uh=!0)}Oh(t,e){return g(this.d,t,e.bind(this))}ti(t){}Ph(t,e){this.sg.j("time-update",{detail:{currentTime:Math.min(t,this.lh.$store.seekableEnd()),played:this.d.played},trigger:e})}re(t){if(this.d.networkState===3){this.Vh(t);return}this.$h(),this.sg.j("load-start",{trigger:t})}Vh(t){this.sg.j("abort",{trigger:t})}_h(){this.sg.j("emptied",{trigger:event})}ai(t){this.sg.j("loaded-data",{trigger:t})}bi(t){this.Wh(),this.ii(),this.sg.j("volume-change",{detail:{volume:this.d.volume,muted:this.d.muted}}),this.sg.j("loaded-metadata",{trigger:t}),N&&K(this.lh.$store.source())&&this.sg.Ta(this.Sh(),t)}Sh(){return{duration:this.d.duration,buffered:this.d.buffered,seekable:this.d.seekable}}Wh(){const t=!Number.isFinite(this.d.duration);this.sg.j("stream-type-change",{detail:t?"live":"on-demand"})}ei(t){this.lh.$store.canPlay&&this.sg.j("play",{trigger:t})}ji(t){this.d.readyState===1&&!this.Qh||(this.Qh=!1,this.Rh.J(),this.sg.j("pause",{trigger:t}))}De(t){this.sg.Ta(this.Sh(),t)}ci(t){this.lh.$store.started()||this.sg.j("can-play-through",{trigger:t,detail:this.Sh()})}ki(t){this.Qh=!1,this.sg.j("playing",{trigger:t}),this.Rh.I()}gi(t){this.sg.j("stalled",{trigger:t}),this.d.readyState<3&&(this.Qh=!0,this.sg.j("waiting",{trigger:t}))}pi(t){this.d.readyState<3&&(this.Qh=!0,this.sg.j("waiting",{trigger:t}))}oi(t){this.Rh.J(),this.Ph(this.d.duration,t),this.sg.j("end",{trigger:t}),this.lh.$store.loop()?this.qi():this.sg.j("ended",{trigger:t})}Zh(){this.lh.$store.paused()&&g(this.d,"timeupdate",this.He.bind(this))}He(t){this.Ph(this.d.currentTime,t)}di(t){this.Wh(),this.lh.$store.ended()&&this.Ph(this.d.duration,t),this.sg.j("duration-change",{detail:this.d.duration,trigger:t})}xf(t){this.sg.j("volume-change",{detail:{volume:this.d.volume,muted:this.d.muted},trigger:t})}mi(t){this.Ph(this.d.currentTime,t),this.sg.j("seeked",{detail:this.d.currentTime,trigger:t}),Math.trunc(this.d.currentTime)===Math.trunc(this.d.duration)&&j(this.d.duration)>j(this.d.currentTime)&&(this.Ph(this.d.duration,t),this.d.ended||this.lh.player.dispatchEvent(new a("media-play-request",{trigger:t})))}ni(t){this.sg.j("seeking",{detail:this.d.currentTime,trigger:t})}fi(t){this.sg.j("progress",{detail:{buffered:this.d.buffered,seekable:this.d.seekable},trigger:t})}qi(){gt(this.d.controls)&&(this.d.controls=!1),this.lh.player.dispatchEvent(new a("media-loop-request"))}hi(t){this.sg.j("suspend",{trigger:t})}li(t){this.sg.j("rate-change",{detail:this.d.playbackRate,trigger:t})}te(t){const e=this.d.error;e&&this.sg.j("error",{detail:{message:e.message,code:e.code,mediaError:e},trigger:t})}}class Gt{constructor(t,e){this.k=t,this.lh=e,this.Ih.onaddtrack=this.Kh.bind(this),this.Ih.onremovetrack=this.Lh.bind(this),this.Ih.onchange=this.Mh.bind(this),g(this.lh.audioTracks,"change",this.Nh.bind(this))}get Ih(){return this.k.media.audioTracks}Kh(t){const e=t.track;if(e.label==="")return;const s={id:e.id+"",label:e.label,language:e.language,kind:e.kind,selected:!1};this.lh.audioTracks[S](s,t),e.enabled&&(s.selected=!0)}Lh(t){const e=this.lh.audioTracks.getById(t.track.id);e&&this.lh.audioTracks[et](e,t)}Mh(t){let e=this.Jh();if(!e)return;const s=this.lh.audioTracks.getById(e.id);s&&this.lh.audioTracks[w](s,!0,t)}Jh(){return Array.from(this.Ih).find(t=>t.enabled)}Nh(t){const{current:e}=t.detail;if(!e)return;const s=this.Ih.getTrackById(e.id);if(s){const r=this.Jh();r&&(r.enabled=!1),s.enabled=!0}}}class ht{constructor(t){this.d=t}setup(t){new zt(this,t),"audioTracks"in this.media&&new Gt(this,t)}get type(){return""}get media(){return this.d}get paused(){return this.d.paused}get muted(){return this.d.muted}set muted(t){this.d.muted=t}get volume(){return this.d.volume}set volume(t){this.d.volume=t}get currentTime(){return this.d.currentTime}set currentTime(t){this.d.currentTime=t}get playsinline(){return this.d.hasAttribute("playsinline")}set playsinline(t){mt(this.d,"playsinline",t)}get playbackRate(){return this.d.playbackRate}set playbackRate(t){this.d.playbackRate=t}async play(){return this.d.play()}async pause(){return this.d.pause()}async loadSource({src:t},e){this.d.preload=e,jt(t)?this.d.srcObject=t:(this.d.srcObject=null,this.d.src=d(t)?t:window.URL.createObjectURL(t)),this.d.load()}}class Zt extends ht{constructor(){super(...arguments),this.$$PROVIDER_TYPE="AUDIO"}get type(){return"audio"}setup(t){super.setup(t),this.type==="audio"&&t.delegate.j("provider-setup",{detail:this})}get audio(){return this.d}}var te=Object.freeze({__proto__:null,AudioProvider:Zt});class ee{constructor(t,e){this.Vb=t,this.lh=e,t.textTracks.onaddtrack=this.$b.bind(this),_(this.Bh.bind(this))}$b(t){const e=t.track;if(!e||ie(this.Vb,e))return;const s=new P({id:e.id,kind:e.kind,label:e.label,language:e.language,type:"vtt"});s[m]={track:e},s[l]=2,s[z]=!0;let r=0;const h=n=>{if(e.cues)for(let c=r;c<e.cues.length;c++)s.addCue(e.cues[c],n),r++};h(t),e.oncuechange=h,this.lh.textTracks.add(s,t),s.setMode(e.mode,t)}Bh(){this.Vb.textTracks.onaddtrack=null;for(const t of this.lh.textTracks){const e=t[m]?.track;e?.oncuechange&&(e.oncuechange=null)}}}function ie(i,t){return Array.from(i.children).find(e=>e.track===t)}class se{constructor(t,e){this.Vb=t,this.d=e,this.$c=(s,r)=>{this.d.delegate.j("picture-in-picture-change",{detail:s,trigger:r})},g(this.Vb,"enterpictureinpicture",this.Ch.bind(this)),g(this.Vb,"leavepictureinpicture",this.Dh.bind(this))}get active(){return document.pictureInPictureElement===this.Vb}get supported(){return D(this.Vb)}async enter(){return this.Vb.requestPictureInPicture()}exit(){return document.exitPictureInPicture()}Ch(t){this.$c(!0,t)}Dh(t){this.$c(!1,t)}}class re{constructor(t,e){this.Vb=t,this.d=e,this.fc="inline",g(this.Vb,"webkitpresentationmodechanged",this.Hh.bind(this))}get Gh(){return H(this.Vb)}async Fh(t){this.fc!==t&&this.Vb.webkitSetPresentationMode(t)}Hh(){const t=this.fc;this.fc=this.Vb.webkitPresentationMode,this.d.player?.dispatchEvent(new a("video-presentation-change",{detail:this.fc,trigger:event})),["fullscreen","picture-in-picture"].forEach(e=>{(this.fc===e||t===e)&&this.d.delegate.j(`${e}-change`,{detail:this.fc===e,trigger:event})})}}class he{constructor(t){this.Eh=t}get active(){return this.Eh.fc==="fullscreen"}get supported(){return this.Eh.Gh}async enter(){this.Eh.Fh("fullscreen")}async exit(){this.Eh.Fh("inline")}}class ne{constructor(t){this.Eh=t}get active(){return this.Eh.fc==="picture-in-picture"}get supported(){return this.Eh.Gh}async enter(){this.Eh.Fh("picture-in-picture")}async exit(){this.Eh.Fh("inline")}}class nt extends ht{constructor(t,e){if(super(t),this.$$PROVIDER_TYPE="VIDEO",H(t)){const s=new re(t,e);this.fullscreen=new he(s),this.pictureInPicture=new ne(s)}else D(t)&&(this.pictureInPicture=new se(t,e))}get type(){return"video"}setup(t){super.setup(t),M(this.video)&&new ee(this.video,t),t.textRenderers[I](this.video),_(()=>{t.textRenderers[I](null)}),this.type==="video"&&t.delegate.j("provider-setup",{detail:this})}get video(){return this.d}}var ae=Object.freeze({__proto__:null,VideoProvider:nt});const oe=i=>ft(i);class ce{constructor(t){this.Vb=t,this.ph=null,this.qh=null,this.jh={},this.kh=new Set}get instance(){return this.ph}setup(t,e){this.lh=e;const s=O(e.$store.streamType).includes("live"),r=O(e.$store.streamType).includes("ll-");this.ph=new t({lowLatencyMode:r,backBufferLength:r?4:s?8:void 0,renderTextTracksNatively:!1,...this.jh});const h=this.rh.bind(this);for(const n of Object.values(t.Events))this.ph.on(n,h);this.ph.on(t.Events.ERROR,this.te.bind(this));for(const n of this.kh)n(this.ph);e.player.dispatchEvent(new a("hls-instance",{detail:this.ph})),this.ph.attachMedia(this.Vb),this.ph.on(t.Events.AUDIO_TRACK_SWITCHED,this.sh.bind(this)),this.ph.on(t.Events.LEVEL_SWITCHED,this.th.bind(this)),this.ph.on(t.Events.LEVEL_LOADED,this.uh.bind(this)),this.ph.on(t.Events.NON_NATIVE_TEXT_TRACKS_FOUND,this.vh.bind(this)),this.ph.on(t.Events.CUES_PARSED,this.wh.bind(this)),e.qualities[$]=this.xh.bind(this),g(e.qualities,"change",this.xb.bind(this)),g(e.audioTracks,"change",this.yh.bind(this)),this.qh=x(this.zh.bind(this))}zh(){if(!this.lh.$store.live())return;const t=new rt(this.Ah.bind(this));return t.I(),t.J.bind(t)}Ah(){this.lh.$store.liveSyncPosition.set(this.ph?.liveSyncPosition??1/0)}rh(t,e){this.lh.player.dispatchEvent(new a(oe(t),{detail:e}))}vh(t,e){const s=new a(t,{detail:e});let r=-1;for(let h=0;h<e.tracks.length;h++){const n=e.tracks[h],c=n.subtitleTrack??n.closedCaptions,o=new P({id:`hls-${n.kind}${h}`,src:c?.url,label:n.label,language:c?.lang,kind:n.kind});o[l]=2,o[y]=()=>{o.mode==="showing"?(this.ph.subtitleTrack=h,r=h):r===h&&(this.ph.subtitleTrack=-1,r=-1)},n.default&&o.setMode("showing",s),this.lh.textTracks.add(o,s)}}wh(t,e){const s=this.lh.textTracks.getById(`hls-${e.track}`);if(!s)return;const r=new a(t,{detail:e});for(const h of e.cues)h.positionAlign="auto",s.addCue(h,r)}sh(t,e){const s=this.lh.audioTracks[e.id];s&&this.lh.audioTracks[w](s,!0,new a(t,{detail:e}))}th(t,e){const s=this.lh.qualities[e.level];s&&this.lh.qualities[w](s,!0,new a(t,{detail:e}))}uh(t,e){if(this.lh.$store.canPlay())return;const{type:s,live:r,totalduration:h}=e.details,n=new a(t,{detail:e});this.lh.delegate.j("stream-type-change",{detail:r?s==="EVENT"&&Number.isFinite(h)?"live:dvr":"live":"on-demand",trigger:n}),this.lh.delegate.j("duration-change",{detail:h,trigger:n});const c=this.ph.media;this.ph.currentLevel===-1&&this.lh.qualities[it](!0,n);for(const o of this.ph.audioTracks)this.lh.audioTracks[S]({id:o.id+"",label:o.name,language:o.lang||"",kind:"main"},n);for(const o of this.ph.levels)this.lh.qualities[S]({width:o.width,height:o.height,codec:o.codecSet,bitrate:o.bitrate},n);c.dispatchEvent(new a("canplay",{trigger:n}))}te(t,e){if(e.fatal)switch(e.type){case"networkError":this.ph?.startLoad();break;case"mediaError":this.ph?.recoverMediaError();break;default:this.ph?.destroy(),this.ph=null;break}}xh(){this.ph&&(this.ph.currentLevel=-1)}xb(){const{qualities:t}=this.lh;!this.ph||t.auto||(this.ph[t.switch+"Level"]=t.selectedIndex,yt&&(this.Vb.currentTime=this.Vb.currentTime))}yh(){const{audioTracks:t}=this.lh;this.ph&&this.ph.audioTrack!==t.selectedIndex&&(this.ph.audioTrack=t.selectedIndex)}ng(){this.lh&&(this.lh.qualities[$]=void 0),this.ph?.destroy(),this.ph=null,this.qh?.(),this.qh=null}}class de{constructor(t,e,s){this.mh=t,this.lh=e,this.Ra=s,this.nh()}async nh(){const t={onLoadStart:this.re.bind(this),onLoaded:this.Jf.bind(this),onLoadError:this.oh.bind(this)};let e=await ue(this.mh,t);if(u(e)&&!d(this.mh)&&(e=await le(this.mh,t)),!e)return null;if(!e.isSupported()){const s="[vidstack]: `hls.js` is not supported in this environment";return this.lh.player.dispatchEvent(new a("hls-unsupported")),this.lh.delegate.j("error",{detail:{message:s,code:4}}),null}return e}re(){this.lh.player.dispatchEvent(new a("hls-lib-load-start"))}Jf(t){this.lh.player.dispatchEvent(new a("hls-lib-loaded",{detail:t})),this.Ra(t)}oh(t){const e=st(t);this.lh.player.dispatchEvent(new a("hls-lib-load-error",{detail:e})),this.lh.delegate.j("error",{detail:{message:e.message,code:4}})}}async function le(i,t={}){if(!u(i)){if(t.onLoadStart?.(),i.prototype&&i.prototype!==Function)return t.onLoaded?.(i),i;try{const e=(await i())?.default;if(e&&e.isSupported)t.onLoaded?.(e);else throw Error("");return e}catch(e){t.onLoadError?.(e)}}}async function ue(i,t={}){if(d(i)){t.onLoadStart?.();try{if(await _t(i),!p(window.Hls))throw Error("");const e=window.Hls;return t.onLoaded?.(e),e}catch(e){t.onLoadError?.(e)}}}const pe="https://cdn.jsdelivr.net";class at extends nt{constructor(){super(...arguments),this.$$PROVIDER_TYPE="HLS",this.ih=null,this.$d=new ce(this.video),this.hh=`${pe}/npm/hls.js@^1.0.0/dist/hls.min.js`}get ctor(){return this.ih}get instance(){return this.$d.instance}get type(){return"hls"}get canLiveSync(){return!0}get config(){return this.$d.jh}set config(t){this.$d.jh=t}get library(){return this.hh}set library(t){this.hh=t}preconnect(){d(this.hh)&&L(this.hh)}setup(t){super.setup(t),new de(this.hh,t,e=>{this.ih=e,this.$d.setup(e,t),t.delegate.j("provider-setup",{detail:this});const s=O(t.$store.source);s&&this.loadSource(s)})}async loadSource({src:t}){d(t)&&this.$d.instance?.loadSource(t)}onInstance(t){const e=this.$d.instance;return e&&t(e),this.$d.kh.add(t),()=>this.$d.kh.delete(t)}destroy(){this.$d.ng()}}at.supported=q();var ge=Object.freeze({__proto__:null,HLSProvider:at});export{Vt as A,Nt as B,j as C,St as D,$ as E,J as H,N as I,Xt as L,it as S,P as T,X as V,S as a,et as b,Et as c,Qt as d,Kt as e,Yt as f,U as g,Jt as h,Ft as i,w as j,Wt as k,st as l,W as m,f as n,Dt as o,L as p,m as q,I as r,z as s,Q as t,y as u,Tt as v,qt as w,xt as x,E as y,Ht as z};