@vime/core
Version:
Customizable, extensible, accessible and framework agnostic media player.
1 lines • 4.5 kB
JavaScript
import{r as t,c as i,h as s}from"./p-aa8acb66.js";import{l as h}from"./p-e3b0430a.js";import{c as o,n as a,e as r,h as n}from"./p-b018976f.js";import{M as e}from"./p-8b74fa0e.js";import{w as c}from"./p-cbbce638.js";import{h as l,b as d}from"./p-b0ea4d0d.js";import{w as u,c as v}from"./p-17652948.js";import"./p-d84b1c8a.js";import"./p-152748b8.js";import"./p-121aab6e.js";import"./p-8acb8eb5.js";var p=function(t,i,s,h){return new(s||(s=Promise))((function(o,a){function r(t){try{e(h.next(t))}catch(t){a(t)}}function n(t){try{e(h.throw(t))}catch(t){a(t)}}function e(t){var i;t.done?o(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(r,n)}e((h=h.apply(t,i||[])).next())}))};const f=class{constructor(s){t(this,s),this.vmLoadStart=i(this,"vmLoadStart",7),this.vmError=i(this,"vmError",7),this.hasAttached=!1,this.version="latest",this.preload="metadata",this.playbackReady=!1,o(this),u(this),c(this,["playbackReady"])}connectedCallback(){this.dispatch=v(this),this.mediaEl&&this.setupHls()}disconnectedCallback(){this.destroyHls()}get src(){if(a(this.videoProvider))return;const t=this.videoProvider.querySelectorAll("source"),i=Array.from(t).find((t=>l.test(t.src)||d.test(t.type)));return null==i?void 0:i.src}setupHls(){return p(this,void 0,void 0,(function*(){if(r(this.hls))try{const t=this.libSrc||`https://cdn.jsdelivr.net/npm/hls.js@${this.version}/dist/hls.min.js`,i=yield h(t,"Hls");if(!i.isSupported())return void this.vmError.emit("hls.js is not supported");this.hls=new i(this.config),this.hls.on(i.Events.MEDIA_ATTACHED,(()=>{this.hasAttached=!0,this.onSrcChange()})),this.hls.on(i.Events.AUDIO_TRACKS_UPDATED,(()=>{this.dispatch("audioTracks",this.hls.audioTracks),this.dispatch("currentAudioTrack",this.hls.audioTrack)})),this.hls.on(i.Events.AUDIO_TRACK_SWITCHED,(()=>{this.dispatch("currentAudioTrack",this.hls.audioTrack)})),this.hls.on(i.Events.ERROR,((t,s)=>{if(s.fatal)switch(s.type){case i.ErrorTypes.NETWORK_ERROR:this.hls.startLoad();break;case i.ErrorTypes.MEDIA_ERROR:this.hls.recoverMediaError();break;default:this.destroyHls()}this.vmError.emit({event:t,data:s})})),this.hls.on(i.Events.MANIFEST_PARSED,(()=>{this.dispatch("mediaType",e.Video),this.dispatch("currentSrc",this.src),this.dispatchLevels()})),this.hls.on(i.Events.LEVEL_LOADED,((t,i)=>{this.playbackReady||(this.dispatch("duration",i.details.totalduration),this.dispatch("playbackReady",!0))})),this.hls.attachMedia(this.mediaEl)}catch(t){this.vmError.emit(t)}}))}dispatchLevels(){this.hls.levels&&0!==this.hls.levels.length&&(this.dispatch("playbackQualities",["Auto",...this.hls.levels.map(this.levelToPlaybackQuality)]),this.dispatch("playbackQuality","Auto"))}levelToPlaybackQuality(t){return-1===t?"Auto":`${t.height}p`}findLevelIndexFromQuality(t){return this.hls.levels.findIndex((i=>this.levelToPlaybackQuality(i)===t))}destroyHls(){var t;null===(t=this.hls)||void 0===t||t.destroy(),this.hasAttached=!1}onMediaElChange(t){return p(this,void 0,void 0,(function*(){this.destroyHls(),r(t.detail)||(this.mediaEl=t.detail,setTimeout((()=>p(this,void 0,void 0,(function*(){yield this.setupHls()}))),50))}))}onSrcChange(){var t;return p(this,void 0,void 0,(function*(){this.hasAttached&&this.hls.url!==this.src&&(this.vmLoadStart.emit(),null===(t=this.hls)||void 0===t||t.loadSource(this.src))}))}getAdapter(){var t,i;return p(this,void 0,void 0,(function*(){const s=null!==(i=yield null===(t=this.videoProvider)||void 0===t?void 0:t.getAdapter())&&void 0!==i?i:{},h=s.canPlay;return Object.assign(Object.assign({},s),{getInternalPlayer:()=>p(this,void 0,void 0,(function*(){return this.hls})),canPlay:t=>p(this,void 0,void 0,(function*(){var i;return n(t)&&l.test(t)||null!==(i=null==h?void 0:h(t))&&void 0!==i&&i})),canSetPlaybackQuality:()=>p(this,void 0,void 0,(function*(){var t,i;return(null===(i=null===(t=this.hls)||void 0===t?void 0:t.levels)||void 0===i?void 0:i.length)>0})),setPlaybackQuality:t=>p(this,void 0,void 0,(function*(){r(this.hls)||(this.hls.currentLevel=this.findLevelIndexFromQuality(t),this.dispatch("playbackQuality",t))})),setCurrentAudioTrack:t=>p(this,void 0,void 0,(function*(){r(this.hls)||(this.hls.audioTrack=t)}))})}))}render(){return s("vm-video",{willAttach:!0,crossOrigin:this.crossOrigin,preload:this.preload,poster:this.poster,controlsList:this.controlsList,autoPiP:this.autoPiP,disablePiP:this.disablePiP,disableRemotePlayback:this.disableRemotePlayback,mediaTitle:this.mediaTitle,ref:t=>{this.videoProvider=t}},s("slot",null))}};export{f as vm_hls}