nsplayer
Version:
NSPlayer, a player which supports quality list of dash and hls
2 lines (1 loc) • 3.71 kB
JavaScript
"undefined"!=typeof self?self:globalThis;import{C as e,_ as t,M as i,t as r,c as s,E as n,D as a}from"./index-de6181c4.mjs";function l(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}class o extends e{constructor(e,s){super(e,s[0]),t(this,"_capLevelToPlayerSize",!1),t(this,"_changeQualityDisposable",this._register(new i)),this._video=e,this._sources=s.map((({bitrate:e,width:t,height:i,src:r,mime:s="video/mp4"})=>{if(!e||!t||!i)throw new Error(`we need bitrate / width / height info for source ${r}`);return{bitrate:e,width:t,height:i,src:r,mime:s}})).sort(((e,t)=>e.bitrate-t.bitrate)),this._currentLevelIndex=0,this._nextLevelIndex=0,this._startLevelIndex=0,this._register(r((()=>e.pause())))}get levels(){return this._sources}get currentLevel(){return this.levels[this._currentLevelIndex]}get nextLevel(){return this.levels[this._nextLevelIndex]}get autoQualityEnabled(){return!1}levelToQuality(e){const i=s(e.fps);return function(e){for(var i=1;i<arguments.length;i++){var r=null!=arguments[i]?arguments[i]:{};i%2?l(Object(r),!0).forEach((function(i){t(e,i,r[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({width:e.width,height:e.height,bitrate:e.bitrate,type:"video"},i?{fps:i}:{})}findLevelIndexByQualityLevel(e){const t=this.levels,i=t.findIndex((t=>t.bitrate===e.bitrate));if(i>=0)return i;const r=Math.min(e.width,e.height);return t.findIndex((e=>Math.min(e.width,e.height)===r))}setAutoQualityState(e){if(e)throw new Error("unsupported auto quality")}setInitialBitrate(e){let t=0;const i=this.levels.slice().sort(((e,t)=>e.bitrate-t.bitrate));for(let r=0;r<i.length&&i[r].bitrate<=e;r++)t=r;this.log("setInitialBitrate","start level:",t),this._startLevelIndex=t}setNextLevelIndex(e){if(this._nextLevelIndex=e,!this.ready)return this.log("setNextLevelIndex","start level:",e),void(this._startLevelIndex=e);const t=this.nextLevel;if(t){const i=this._video,r=i.currentTime,s=i.autoplay,a=i.playbackRate,l=i.paused;i.pause(),i.autoplay=!0,i.src=t.src;const o=()=>{this._currentLevelIndex=e,this._changeQualityDisposable.value=void 0,i.currentTime=r,i.autoplay=s,i.playbackRate=a,l?i.pause():i.play()},h=n.fromDOMEventEmitter(i,"canplay");this._changeQualityDisposable.value=h(o)}else console.error(`pause the video due to the next level ${e} unresolved in normalplayer`),this.video.pause()}onInit(e,t){if(t=this.levels[this._startLevelIndex]||t,this._nextLevelIndex=this._startLevelIndex,this._currentLevelIndex=this._nextLevelIndex,this.updateQualityLevel(),!e.canPlayType(t.mime))throw new Error(`cannot play this video with mime type ${t.mime}`);{var i;const r=this._register(new a),s=n.fromDOMEventEmitter(e,"loadstart"),l=n.fromDOMEventEmitter(e,"loadedmetadata");s(this.updateNextQualityLevel,this,r),l((()=>{this._currentLevelIndex=this._nextLevelIndex,this.updateQualityLevel()}),null,r),this.updatePlayList(),this._currentLevelIndex=this._nextLevelIndex>=0&&this._nextLevelIndex<this._sources.length?this._nextLevelIndex:this._startLevelIndex,this.updateQualityLevel(),e.src=(null===(i=this.currentLevel)||void 0===i?void 0:i.src)||t.src,e.autoplay&&e.play(),this.setReady()}}setCapLevelToPlayerSize(e){this.log("setCapLevelToPlayerSize",e),this._capLevelToPlayerSize=e}get capLevelToPlayerSize(){return this._capLevelToPlayerSize}get bandwidthEstimate(){return NaN}get name(){return"MP4Player (1.3)"}get supportAutoQuality(){return!1}}export{o as BasePlayer};