define(["appSettings","browser","events"],function(appSettings,browser,events){"use strict";functiongetSavedVolume(){returnappSettings.get("volume")||1}functionsaveVolume(value){value&&appSettings.set("volume",value)}functiongetCrossOriginValue(mediaSource){returnmediaSource.IsRemote?null:"anonymous"}functioncanPlayNativeHls(){varmedia=document.createElement("video");return!(!media.canPlayType("application/x-mpegURL").replace(/no/,"")&&!media.canPlayType("application/vnd.apple.mpegURL").replace(/no/,""))}functionenableHlsShakaPlayer(item,mediaSource,mediaType){if(window.MediaSource&&MediaSource.isTypeSupported){if(canPlayNativeHls()){if(browser.edge&&"Video"===mediaType)return!0;mediaSource.RunTimeTicks}return!0}return!1}functionenableHlsJsPlayer(runTimeTicks,mediaType){if(null==window.MediaSource)return!1;if(browser.iOS)return!1;if(browser.tizen||browser.web0s)return!1;if(canPlayNativeHls()){if(browser.android&&"Audio"===mediaType)return!0;if(browser.edge,runTimeTicks)return!1}return!0}functionhandleHlsJsMediaError(instance,reject){varhlsPlayer=instance._hlsPlayer;if(hlsPlayer){varnow=Date.now();window.performance&&window.performance.now&&(now=performance.now()),!recoverDecodingErrorDate||now-recoverDecodingErrorDate>3e3?(recoverDecodingErrorDate=now,console.log("try to recover media Error ..."),hlsPlayer.recoverMediaError()):!recoverSwapAudioCodecDate||now-recoverSwapAudioCodecDate>3e3?(recoverSwapAudioCodecDate=now,console.log("try to swap Audio Codec and recover media Error ..."),hlsPlayer.swapAudioCodec(),hlsPlayer.recoverMediaError()):(console.error("cannot recover, last media error recovery failed ..."),reject?reject():onErrorInternal(instance,"mediadecodeerror"))}}functiononErrorInternal(instance,type){instance.destroyCustomTrack&&instance.destroyCustomTrack(instance._mediaElement),events.trigger(instance,"error",[{type:type}])}functionisValidDuration(duration){return!(!duration||isNaN(duration)||duration===Number.POSITIVE_INFINITY||duration===Number.NEGATIVE_INFINITY)}functionsetCurrentTimeIfNeeded(element,seconds,allowance){Math.abs((element.currentTime||0)-seconds)>=allowance&&(element.currentTime=seconds)}functionseekOnPlaybackStart(instance,element,ticks){varseconds=(ticks||0)/1e7;if(seconds){(instance.currentSrc()||"").toLowerCase();setCurrentTimeIfNeeded(element,seconds,5),setTimeout(function(){setCurrentTimeIfNeeded(element,seconds,10)},2500)}}functionapplySrc(elem,src,options){returnwindow.Windows&&options.mediaSource&&options.mediaSource.IsLocal?Windows.Storage.StorageFile.getFileFromPathAsync(options.url).then(function(file){varplaylist=newWindows.Media.Playback.MediaPlaybackList,source1=Windows.Media.Core.MediaSource.createFromStorageFile(file),startTime=(options.playerStartPositionTicks||0)/1e4;returnplaylist.items.append(newWindows.Media.Playback.MediaPlaybackItem(source1,startTime)),elem.src=URL.createObjectURL(playlist,{oneTimeOnly:!0}),Promise.resolve()}):(elem.src=src,Promise.resolve())}functiononSuccessfulPlay(elem,onErrorFn){elem.addEventListener("error",onErrorFn)}functionplayWithPromise(elem,onErrorFn){try{varpromise=elem.play();returnpromise&&promise.then?promise.catch(function(e){varerrorName=(e.name||"").toLowerCase();return"notallowederror"===errorName||"aborterror"===errorName?(onSuccessfulPlay(elem,onErrorFn),Promise.resolve()):Promise.reject()}):(onSuccessfulPlay(elem,onErrorFn),Promise.resolve())}catch(err){returnconsole.log("error calling video.play: "+err),Promise.reject()}}functiondestroyCastPlayer(instance){varplayer=instance._castPlayer;if(player){try{player.unload()}catch(err){console.log(err)}instance._castPlayer=null}}functiondestroyShakaPlayer(instance){varplayer=instance._shakaPlayer;if(player){try{player.destroy()}catch(err){console.log(err)}instance._shakaPlayer=null}}functiondestroyHlsPlayer(instance){varplayer=instance._hlsPlayer;if(player){try{player.destroy()}catch(err){console.log(err)}instance._hlsPlayer=null}}functiondestroyFlvPlayer(instance){varplayer=instance._flvPlayer;if(player){try{player.unload(),player.detachMediaElemen