@oplayer/dash
Version:
Dash plugin for oplayer
9 lines (8 loc) • 4.95 kB
JavaScript
/**
* name: @oplayer/dash
* version: v1.2.27-beta.2
* description: Dash plugin for oplayer
* author: shiyiya
* homepage: https://github.com/shiyiya/oplayer
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@oplayer/core")):"function"==typeof define&&define.amd?define(["@oplayer/core"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).ODash=e(t.OPlayer)}(this,(function(t){"use strict";const e="oplayer-plugin-dash",i=(t,e)=>"dash"===e.format||"mpd"===e.format||("auto"===e.format||void 0===e.format)&&/.mpd(#|\?|$)/i.test(e.src);class n{constructor(t){this.key="dash",this.name=e,this.version="1.2.27-beta.2",this.options={textControl:!0,audioControl:!0,qualityControl:!0,withBitrate:!1,qualitySwitch:"immediate",matcher:i,defaultQuality:()=>-1,defaultAudio:()=>-1,defaultSubtitle:()=>-1},Object.assign(this.options,t)}apply(t){return this.player=t,this}async load(i,o){var l;let r=i.$video;const s=this.options,u=s.matcher,d=s.library;if(!u(r,o))return!1;if(n.library||(n.library=globalThis.dashjs||(d?await t.loadSDK(d,"dashjs"):(await import("dashjs")).default)),!n.library.supportsMediaSource())return!1;this.instance=n.library.MediaPlayer().create();const c=this.player,g=this.instance,f=this.options,h=f.drm,v=f.config;return v&&g.updateSettings(v),h&&g.setProtectionData(h),g.initialize(r,o.src,r.autoplay),g.on(n.library.MediaPlayer.events.ERROR,(function(t){const i=t.event||t.error,n=t.event?t.event.message||t.type:void 0;c.emit("error",Object.assign({pluginName:e,message:n},i))})),(null==(l=c.context.ui)?void 0:l.setting)&&(g.getBitrateInfoListFor?a(c,g,this.options):console.warn("https://github.com/shiyiya/oplayer/issues/155")),this}destroy(){var t;if(this.instance){const e=this.player,i=this.instance;(null==(t=e.context.ui)?void 0:t.setting)&&o(e),i.destroy()}}}const a=(t,i,a)=>{function o(i){const n=i.settings(),a=i.name,o=i.icon,l=i.onChange;t.context.ui.setting.unregister(e+"-"+a),t.context.ui.setting.register({name:t.locales.get(a),icon:o,onChange:l,type:"selector",key:e+"-"+a,children:n})}i.on(n.library.MediaPlayer.events.STREAM_INITIALIZED,(function(){var l,r;if(a.qualityControl){const l=i.getBitrateInfoListFor("video");if(l.length<2)return;const r=a.defaultQuality(l);-1!=r&&i.setQualityFor("video",r),o({name:"Quality",icon:t.context.ui.icons.quality,settings:()=>{var e,n,o;return[{name:t.locales.get("Auto"),default:Boolean(null==(o=null==(n=null==(e=i.getSettings().streaming)?void 0:e.abr)?void 0:n.autoSwitchBitrate)?void 0:o.video),value:-1}].concat(function(t,e,i){var n,a,o;const l=t.getBitrateInfoListFor(e),r=Boolean(null==(o=null==(a=null==(n=t.getSettings().streaming)?void 0:n.abr)?void 0:a.autoSwitchBitrate)?void 0:o.video),s=t.getQualityFor("video");return l.length>1?l.toSorted(((t,e)=>e.bitrate-t.bitrate)).map((t=>{let e=t.height+"p";if(i){const i=t.bitrate/1e3,n=i>1e3;e+=" ("+(n?(i/1e3).toFixed(2):Math.floor(i))+(n?"m":"k")+"bps)"}return{name:e,default:!r&&s==t.qualityIndex,value:t.qualityIndex}})):[]}(i,"video",a.withBitrate))},onChange(t){let e=t.value;i.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:-1==e}}}}),-1!=e&&i.setQualityFor("video",e,"immediate"==a.qualitySwitch)}}),i.on(n.library.MediaPlayer.events.QUALITY_CHANGE_RENDERED,(function(n){var a,o,l,r,s;if("video"!==n.mediaType||!(null==(l=null==(o=null==(a=i.getSettings().streaming)?void 0:a.abr)?void 0:o.autoSwitchBitrate)?void 0:l.video))return;const u=null==(r=i.getBitrateInfoListFor("video")[n.newQuality])?void 0:r.height,d=t.locales.get("Auto")+(u?" ("+u+"p)":"");null==(s=t.context.ui)||s.setting.updateLabel(e+"-Quality",d)}))}if(a.audioControl){const e=i.getTracksFor("audio");if(e.length<2)return;let n=a.defaultAudio(e);-1==n&&(n=null==(l=e.find((t=>{let e=t.lang;return e===navigator.language||e===navigator.language.split("-")[0]})))?void 0:l.id),-1!=n&&null!=n&&i.setCurrentTrack(e.find((t=>t.id==n)));const r=i.getCurrentTrackFor("audio");o({name:"Language",icon:t.context.ui.icons.lang,settings:()=>e.map((t=>({name:t.lang||"unknown",default:null!=(null==r?void 0:r.index)&&r.index==t.index,value:t}))),onChange(t){let e=t.value;i.setCurrentTrack(e)}})}if(a.textControl){const e=i.getTracksFor("text");if(e.length<1)return;let n=a.defaultSubtitle(e);-1==n&&(n=null==(r=e.find((t=>{let e=t.lang;return e===navigator.language||e===navigator.language.split("-")[0]})))?void 0:r.id),-1!=n&&null!=n&&(i.enableText(!0),i.setTextTrack(n));const l=i.getCurrentTrackFor("text");o({name:"Subtitle",icon:t.context.ui.icons.subtitle,settings:()=>[{name:t.locales.get("Off"),default:!i.isTextEnabled(),value:-1}].concat(e.map((t=>({name:t.lang||"unknown",default:null!=(null==l?void 0:l.index)&&l.index==t.index,value:t.index})))),onChange(t){let e=t.value;i.enableText(-1!=e),-1!=e&&i.setTextTrack(e)}})}}))},o=t=>{["Quality","Language","Subtitle"].forEach((i=>t.context.ui.setting.unregister(e+"-"+i)))};return function(t){return new n(t)}}));