EmbyCrackedClient/web/modules/htmlaudioplayer/plugin.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
6.7 KiB
JavaScript

import events from"./../emby-apiclient/events.js";import browser from"./../browser.js";import htmlMediaHelper from"./../htmlvideoplayer/htmlmediahelper.js";import BaseHtmlPlayer from"./../htmlvideoplayer/basehtmlplayer.js";import appSettings from"./../common/appsettings.js";let isNativeLG="webos"===globalThis.appMode,isNativeTizen="tizen"===globalThis.appMode,fadeTimeout;function fade(instance,elem,startingVolume){instance._isFadingOut=!0;let newVolume=Math.max(0,startingVolume-.15);return console.log("fading volume to "+newVolume),(elem.volume=newVolume)<=0?(instance._isFadingOut=!1,Promise.resolve()):new Promise(function(resolve,reject){cancelFadeTimeout(),fadeTimeout=setTimeout(function(){fade(instance,elem,newVolume).then(resolve,reject)},100)})}function cancelFadeTimeout(){var timeout=fadeTimeout;timeout&&(clearTimeout(timeout),fadeTimeout=null)}function supportsFade(){return!(isNativeTizen||isNativeLG||browser.operaTv)}function enableHlsPlayer(url,options,mediaSource,mediaType){return!(!htmlMediaHelper.enableHlsJsPlayer(mediaSource.RunTimeTicks,mediaType)||!url.includes(".m3u8")&&"application/x-mpegurl"!==(mediaSource=(options.mimeType||"").toLowerCase())&&"application/vnd.apple.mpegurl"!==mediaSource)}function ensureContentType(url,options,mediaSource,mediaType,signal){return!url.includes(".m3u8")&&(browser.chromecast||htmlMediaHelper.enableHlsJsPlayer(mediaSource.RunTimeTicks,mediaType))?fetch(url,{method:"HEAD",signal:signal}).then(function(response){var response=response.headers.get("Content-Type")||"",contentType=response.toLowerCase();return"application/x-mpegurl"!==contentType&&"application/vnd.apple.mpegurl"!==contentType||(options.mimeType=response),Promise.resolve()}):Promise.resolve()}function stopInternal(instance,destroyPlayer,triggerStopEvent,disableFade){cancelFadeTimeout();let elem=instance._mediaElement;var src=instance._currentSrc;if(elem){if(!destroyPlayer||!supportsFade()||disableFade)return src&&elem.pause(),htmlMediaHelper.onEndedInternal(instance,elem,triggerStopEvent),destroyPlayer&&instance.destroy(),Promise.resolve();let originalVolume=elem.volume;return fade(instance,elem,elem.volume).then(function(){elem.pause(),elem.volume=originalVolume,htmlMediaHelper.onEndedInternal(instance,elem),destroyPlayer&&instance.destroy()})}return Promise.resolve()}function bindMediaManager(instance,elem){browser.chromecast&&(cast.framework.CastReceiverContext.getInstance().getPlayerManager().setMediaElement(elem),instance.bindMediaManagerEvents())}function createMediaElement(instance,playOptions){let elem=instance._mediaElement;return elem?bindMediaManager(instance,elem):((elem=document.querySelector(".mediaPlayerAudio"))||((elem=document.createElement("audio")).classList.add("mediaPlayerAudio"),elem.classList.add("hide"),document.body.appendChild(elem)),playOptions.fullscreen?elem.volume=appSettings.volume()/100:elem.volume=appSettings.themeSongVolume()/100,instance._mediaElement=elem,bindMediaManager(instance,elem)),elem}function HtmlAudioPlayer(){let self=this;function unBindEvents(elem){elem.removeEventListener("timeupdate",onTimeUpdate),elem.removeEventListener("ended",onEnded),elem.removeEventListener("volumechange",onVolumeChange),elem.removeEventListener("ratechange",onRateChange),elem.removeEventListener("pause",onPause),elem.removeEventListener("playing",onPlaying),elem.removeEventListener("waiting",onWaiting),elem.removeEventListener("play",onPlay)}function onEnded(){htmlMediaHelper.onEndedInternal(self,this)}function onTimeUpdate(){var time;self._started&&!self._isFadingOut&&((time=this.currentTime)&&!self._timeUpdated&&(self._timeUpdated=!0),self._currentTime=time,events.trigger(self,"timeupdate"))}function onVolumeChange(){self._isFadingOut||(this._currentPlayOptions?.fullscreen&&appSettings.volume(100*this.volume),events.trigger(self,"volumechange"))}function onRateChange(){events.trigger(self,"playbackratechange")}function onPlaying(e){self._started||(self._started=!0,self.seekOnPlaybackStart(e.target,self._currentPlayOptions.playerStartPositionTicks)),events.trigger(self,"playing")}function onWaiting(e){events.trigger(self,"waiting")}function onPlay(e){events.trigger(self,"unpause")}function onPause(){events.trigger(self,"pause")}BaseHtmlPlayer.call(this),this.name="Audio Player",self.id="htmlaudioplayer",self.mediaType="Audio",self.priority=1,self.play=function(options,signal){if(signal.aborted){let reason=signal.reason;return reason||((reason=new Error("Aborted")).name="AbortError"),Promise.reject(reason)}return self._started=!1,self._timeUpdated=!1,self._currentTime=null,((elem,options,signal)=>{htmlMediaHelper.removeErrorEventListener(elem),unBindEvents(elem),(elem=>{elem.addEventListener("timeupdate",onTimeUpdate),elem.addEventListener("ended",onEnded),elem.addEventListener("volumechange",onVolumeChange),elem.addEventListener("ratechange",onRateChange),elem.addEventListener("pause",onPause),elem.addEventListener("playing",onPlaying),elem.addEventListener("waiting",onWaiting),elem.addEventListener("play",onPlay)})(elem);let val=options.url;console.log("playing url: "+val);var seconds=(options.playerStartPositionTicks||0)/1e7;return seconds&&(val+="#t="+seconds),htmlMediaHelper.destroyHlsPlayer(self),self._currentPlayOptions=options,(seconds=self.getCrossOriginValue(options.mediaSource,options.playMethod))&&(elem.crossOrigin=seconds),ensureContentType(val,options,options.mediaSource,"Audio",signal).then(function(){if(signal.aborted){let reason=signal.reason;return reason||((reason=new Error("Aborted")).name="AbortError"),Promise.reject(reason)}return browser.chromecast?self.setCurrentSrcChromecast(elem,options,val):self.loadIntoPlayer(elem,options,val)})})(createMediaElement(self,options),options,signal).then(function(result){if(signal.aborted){stopInternal(self,!1,!1,!0);let reason=signal.reason;return reason||((reason=new Error("Aborted")).name="AbortError"),Promise.reject(reason)}return Promise.resolve(result)})},self.loadIntoPlayer=function(elem,options,val){return enableHlsPlayer(val,options,options.mediaSource,"Audio")?self.setSrcWithHlsJs(elem,options,val):(elem.autoplay=!0,htmlMediaHelper.applySrc(elem,val,options).then(function(){return self._currentSrc=val,htmlMediaHelper.playWithPromise(self,elem)}))},self.stop=function(destroyPlayer){return stopInternal(this,destroyPlayer)},self.destroy=function(){browser.chromecast&&self.unBindMediaManagerEvents(),unBindEvents(self._mediaElement)}}Object.assign(HtmlAudioPlayer.prototype,BaseHtmlPlayer.prototype);let supportedFeatures;function getSupportedFeatures(){var list=[];return isNativeTizen||isNativeLG||list.push("SetPlaybackRate"),list}HtmlAudioPlayer.prototype.supports=function(feature){return(supportedFeatures=supportedFeatures||getSupportedFeatures()).includes(feature)},HtmlAudioPlayer.prototype.destroy=function(){};export default HtmlAudioPlayer;