define(["exports","./../htmlvideoplayer/htmlmediahelper.js","./../htmlvideoplayer/basehtmlplayer.js","./../emby-apiclient/events.js","./../emby-apiclient/connectionmanager.js","./../approuter.js","./../browser.js","./../common/globalize.js","./../common/usersettings/usersettings.js","./../common/playback/playbackmanager.js","./../layoutmanager.js"],function(_exports,_htmlmediahelper,_basehtmlplayer,_events,_connectionmanager,_approuter,_browser,_globalize,_usersettings,_playbackmanager,_layoutmanager){var WebVTT,supportedFeatures;function getMediaStreamTracks(mediaSource,type){return mediaSource.MediaStreams.filter(function(s){return s.Type===type})}function getMediaStreamSubtitleTracks(mediaSource){return mediaSource.MediaStreams.filter(function(s){return"Subtitle"===s.Type})}function setTracks(elem,tracksHtml){elem.innerHTML=tracksHtml}function getTextTrackUrl(track,item,mediaSource){return window.Windows&&mediaSource.IsLocal&&track.Path?Windows.Storage.StorageFile.getFileFromPathAsync(track.Path).then(function(file){file=URL.createObjectURL(file,{oneTimeOnly:!0});return Promise.resolve(file)}):mediaSource.IsLocal&&track.Path?Promise.resolve(track.Path):(mediaSource=_playbackmanager.default.getSubtitleUrl(track,item.ServerId),Promise.resolve(mediaSource))}function renderCues(instance,cues){var subtitleTextElement=instance.videoSubtitlesElem;subtitleTextElement&&WebVTT?WebVTT.processCues(window,cues,subtitleTextElement,instance.webVTTStyleOptions):console.log("renderCues: nothing to do")}function HtmlVideoPlayer(){_basehtmlplayer.default.call(this),this.name="Video Player",this.id="htmlvideoplayer",this.mediaType="video";var videoDialog,subtitleTrackIndexToSetOnPlaying,audioTrackIndexToSetOnPlaying,currentClock,currentAssRenderer,currentTrackEvents,initialSubtitleTrackTimeout,customTrackIndex=-(this.priority=1),self=this;function sortDefaultTracksFirst(trackA,trackB){return trackA.IsDefault===trackB.IsDefault?0:trackA.IsDefault?-1:trackB.IsDefault?1:0}function onEnded(){destroyCustomTrack(this),_htmlmediahelper.default.onEndedInternal(self,this)}function onTimeUpdate(e){var time,elem;self._started&&((time=this.currentTime)&&!self._timeUpdated&&(self._timeUpdated=!0,(elem=this)!==self._mediaElement||0!==elem.videoWidth||0!==elem.videoHeight||(elem=(self._currentPlayOptions||{}).mediaSource)&&!getMediaStreamTracks(elem,"Video").length||_htmlmediahelper.default.onErrorInternal(self,"mediadecodeerror")),self._currentTime=time,(elem=self._currentPlayOptions)&&(time=1e3*time-self._currentSubtitleOffset,time+=(elem.transcodingOffsetTicks||0)/1e4,function(instance,timeMs){var clock=currentClock;if(clock)try{clock.seek(timeMs/1e3)}catch(err){console.log("Error in libjass: "+err)}else{var trackEvents=currentTrackEvents;if(trackEvents){for(var seconds=timeMs/1e3,activeCues=[],i=0;i=seconds){activeCues.push(currentTrackEvent);break}}renderCues(instance,activeCues)}}}(self,time)),_events.default.trigger(self,"timeupdate"))}function onVolumeChange(){self.saveVolume(this.volume),_events.default.trigger(self,"volumechange")}function onRateChange(){_events.default.trigger(self,"playbackratechange")}function setInitialSubtitleTrack(){var index=subtitleTrackIndexToSetOnPlaying;null!=index&&(console.log("setInitialSubtitleTrack"),setCurrentTrackElement(self._mediaElement,index))}function startInitialSubtitleTrackTimeout(){initialSubtitleTrackTimeout&&(clearTimeout(initialSubtitleTrackTimeout),initialSubtitleTrackTimeout=null),null!=subtitleTrackIndexToSetOnPlaying&&(initialSubtitleTrackTimeout=setTimeout(setInitialSubtitleTrack,400))}function setInitialAudioTrack(){var index=audioTrackIndexToSetOnPlaying;null!=index&&self.canSetAudioStreamIndex()&&self.setAudioStreamIndex(index)}function onPlaying(e){videoDialog&&videoDialog.classList.remove("videoPlayerContainer-loadingmedia"),self._started||(self._started=!0,self.seekOnPlaybackStart(e.target,self._currentPlayOptions.playerStartPositionTicks),startInitialSubtitleTrackTimeout(),null!=audioTrackIndexToSetOnPlaying&&setTimeout(setInitialAudioTrack,300)),_events.default.trigger(self,"playing")}function onWaiting(e){_events.default.trigger(self,"waiting")}function onAddTextTrack(){startInitialSubtitleTrackTimeout()}function onPlay(e){_events.default.trigger(self,"unpause")}function onClick(){_events.default.trigger(self,"click")}function onDblClick(){_events.default.trigger(self,"dblclick")}function onPause(){_events.default.trigger(self,"pause")}function destroyCustomTrack(videoElement){if(self._resizeObserver&&(self._resizeObserver.disconnect(),self._resizeObserver=null),self.videoSubtitlesElem){var elem=self.videoSubtitlesElem,parentNode=elem.parentNode;if(parentNode)try{parentNode.removeChild(elem)}catch(err){console.log("Error removing dialog element: "+err)}self.videoSubtitlesElem=null}if(currentTrackEvents=null,videoElement)for(var allTracks=videoElement.textTracks||[],i=0;i=(currentPlayOptions="VideoSideData"===mediaSource.DeliveryMethod?function(tracks,kind){for(var list=[],i=0,length=tracks.length;i',dlg.innerHTML=html,(cssClass=dlg.querySelector("video")).volume=self.getSavedVolume(),cssClass.addEventListener("timeupdate",onTimeUpdate),cssClass.addEventListener("ended",onEnded),cssClass.addEventListener("volumechange",onVolumeChange),cssClass.addEventListener("pause",onPause),cssClass.addEventListener("playing",onPlaying),cssClass.textTracks&&cssClass.textTracks.addEventListener&&cssClass.textTracks.addEventListener("addtrack",onAddTextTrack),cssClass.addEventListener("play",onPlay),cssClass.addEventListener("click",onClick),cssClass.addEventListener("dblclick",onDblClick),cssClass.addEventListener("ratechange",onRateChange),_browser.default.chromecast||cssClass.classList.add("moveUpSubtitles"),document.body.insertBefore(dlg,document.body.firstChild),videoDialog=dlg,self._mediaElement=cssClass,_browser.default.chromecast&&(cast.framework.CastReceiverContext.getInstance().getPlayerManager().setMediaElement(cssClass),self.bindMediaManagerEvents()),cssClass)}}(),promise.then(function(){return signal.aborted?Promise.reject(signal.reason):function(streamInfo,signal){var hlsPlaylistUrl,isHls=-1!==streamInfo.url.toLowerCase().indexOf(".m3u8"),mediaSource=streamInfo.mediaSource,item=streamInfo.item;return mediaSource&&item&&!mediaSource.RunTimeTicks&&isHls&&"Transcode"===streamInfo.playMethod&&(_browser.default.iOS||_browser.default.osx)?(hlsPlaylistUrl=streamInfo.url.replace("master.m3u8","live.m3u8"),console.log("prefetching hls playlist: "+hlsPlaylistUrl),_connectionmanager.default.getApiClient(item).ajax({type:"GET",url:hlsPlaylistUrl,signal:signal}).then(function(){return console.log("completed prefetching hls playlist: "+hlsPlaylistUrl),streamInfo.url=hlsPlaylistUrl,Promise.resolve()},function(){return console.log("error prefetching hls playlist: "+hlsPlaylistUrl),Promise.resolve()})):Promise.resolve()}(options,signal).then(function(){return function(elem,options){_htmlmediahelper.default.removeErrorEventListener(elem);var val=options.url;console.log("playing url: "+val),setCurrentTrackElement(elem,-1),elem.innerHTML="",_browser.default.ps4||(seconds=(options.playerStartPositionTicks||0)/1e7)&&(val+="#t="+seconds);_htmlmediahelper.default.destroyHlsPlayer(self),_htmlmediahelper.default.destroyFlvPlayer(self),_htmlmediahelper.default.destroyCastPlayer(self);var seconds=getMediaStreamSubtitleTracks(options.mediaSource);null!=(subtitleTrackIndexToSetOnPlaying=null==options.mediaSource.DefaultSubtitleStreamIndex?-1:options.mediaSource.DefaultSubtitleStreamIndex)&&0<=subtitleTrackIndexToSetOnPlaying&&((initialSubtitleStream=function(mediaStreams,index){for(var i=0,length=mediaStreams.length;i\n'})}),Promise.all(tracks).then(function(trackTags){return trackTags.join("")})}(seconds,options.item,options.mediaSource).then(function(tracksHtml){return"Transcode"!==options.playMethod&&"flv"===options.mediaSource.Container?(setTracks(elem,tracksHtml),self.setSrcWithFlvJs(elem,options,val)):_browser.default.chromecast?self.setCurrentSrcChromecast(elem,options,val,hasHlsTextTracks,tracksHtml):_htmlmediahelper.default.enableHlsJsPlayer(options.mediaSource.RunTimeTicks,"Video")&&-1!==val.indexOf(".m3u8")?(hasHlsTextTracks||setTracks(elem,tracksHtml),self.setSrcWithHlsJs(elem,options,val)):(elem.autoplay=!0,_htmlmediahelper.default.applySrc(elem,val,options).then(function(){return setTracks(elem,tracksHtml),self._currentSrc=val,_htmlmediahelper.default.playWithPromise(self,elem)}))})}(elem,options).then(function(result){return signal.aborted?(self.stopInternal(!1,!1),Promise.reject(signal.reason)):Promise.resolve(result)})})}))},self.loadIntoPlayer=function(elem,options,val,media,data,customData){var protocol,hasHlsTextTracks=customData.hasHlsTextTracks,tracksHtml=customData.tracksHtml;if(-1!==val.indexOf(".m3u8")){if(options.mediaSource.RunTimeTicks)return setTracks(elem,tracksHtml),self._castPlayer&&self._castPlayer.unload(),self._castPlayer=null,customData=media.contentType.toLowerCase(),media=new cast.player.api.Host({url:val,mediaElement:elem}),protocol=cast.player.api.CreateHlsStreamingProtocol(media),console.log("loading playback url: "+val),console.log("contentType: "+customData),media.onError=function(errorCode){console.log("Fatal Error - "+errorCode)},elem.autoplay=!1,self._castPlayer=new cast.player.api.Player(media),self._castPlayer.load(protocol,data.currentTime||0),self._castPlayer.playWhenHaveEnoughData(),Promise.resolve();if(_htmlmediahelper.default.enableHlsJsPlayer(options.mediaSource.RunTimeTicks,"Video")&&-1!==val.indexOf(".m3u8"))return hasHlsTextTracks||setTracks(elem,tracksHtml),self.setSrcWithHlsJs(elem,options,val)}return elem.autoplay=!0,_htmlmediahelper.default.applySrc(elem,val,options).then(function(){return setTracks(elem,tracksHtml),self._currentSrc=val,_htmlmediahelper.default.playWithPromise(self,elem)})},self.setSubtitleStreamIndex=function(index){setCurrentTrackElement(self._mediaElement,index)},self.setAudioStreamIndex=function(index){var instance,mediaSource,profile,currentPlayOptions,streams=(currentPlayOptions=(instance=self)._currentPlayOptions)?(mediaSource=currentPlayOptions.mediaSource,profile=instance._lastProfile,getMediaStreamTracks(mediaSource,"Audio").filter(function(stream){return _playbackmanager.default.isAudioStreamSupported(stream,mediaSource,profile)})):[];if(!(streams.length<2)){_browser.default.web0s&&_browser.default.sdkVersion&&4===_browser.default.sdkVersion&&streams.sort(sortDefaultTracksFirst);for(var audioIndex=-1,i=0,length=streams.length;i