EmbyCrackedClient/web/modules/htmlvideoplayer/plugin.js

1 line
31 KiB
JavaScript
Raw Normal View History

2025-06-25 11:46:04 +08:00
import htmlMediaHelper from"./../htmlvideoplayer/htmlmediahelper.js";import BaseHtmlPlayer from"./../htmlvideoplayer/basehtmlplayer.js";import events from"./../emby-apiclient/events.js";import appRouter from"./../approuter.js";import browser from"./../browser.js";import globalize from"./../common/globalize.js";import userSettings from"./../common/usersettings/usersettings.js";import subtitleAppearanceHelper from"./../common/subtitleappearancehelper.js";import playbackManager from"./../common/playback/playbackmanager.js";import layoutManager from"./../layoutmanager.js";import appSettings from"./../common/appsettings.js";require(["css!modules/htmlvideoplayer/style.css"]);let isNativeLG="webos"===globalThis.appMode,WebVTT;function tryRemoveElement(elem){try{elem.remove()}catch(err){console.log("Error removing dialog element: "+err)}}function enableNativeTrackSupport(currentSrc,track){if(track){if("Embed"===track.DeliveryMethod)return!0;if("Hls"===track.DeliveryMethod)return!0;if("VideoSideData"===track.DeliveryMethod)return!0;track=(track.Codec||"").toLowerCase();if("ssa"===track||"ass"===track)return!1}return!(browser.chromecast&&-1!==(currentSrc||"").toLowerCase().indexOf(".m3u8")||isNativeLG&&browser.sdkVersion&&browser.sdkVersion<3)}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.getSubtitleUrl(track,item.ServerId),Promise.resolve(mediaSource))}function getTracksHtml(tracks,item,mediaSource){tracks=tracks.map(function(t){return"External"!==t.DeliveryMethod||"ass"===t.Codec||"ssa"===t.Codec?Promise.resolve(""):getTextTrackUrl(t,item,mediaSource).then(function(textTrackUrl){var language=t.Language||"und";return'<track id="textTrack'+t.Index+'" label="'+(t.Language||"und")+'" kind="subtitles" src="'+textTrackUrl+'" srclang="'+language+'" />\n'})});return Promise.all(tracks).then(function(trackTags){return trackTags.join("")})}function containsHlsTextTracks(tracks){return 0<tracks.filter(function(t){return"Hls"===t.DeliveryMethod}).length}function getSupportedAudioStreams(instance){var currentPlayOptions=instance._currentPlayOptions;if(!currentPlayOptions)return[];let mediaSource=currentPlayOptions.mediaSource,profile=instance._lastProfile;return getMediaStreamTracks(mediaSource,"Audio").filter(function(stream){return playbackManager.isAudioStreamSupported(stream,mediaSource,profile)})}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.call(this),this.name="Video Player",this.id="htmlvideoplayer",this.mediaType="video",this.priority=1;let videoDialog,subtitleTrackIndexToSetOnPlaying,audioTrackIndexToSetOnPlaying,currentClock,currentAssRenderer,customTrackIndex=-1,currentTrackEvents,self=this;function sortDefaultTracksFirst(trackA,trackB){return trackA.IsDefault===trackB.IsDefault?0:trackA.IsDefault?-1:trackB.IsDefault?1:0}function onEnded(){destroyCustomTrack(this),htmlMediaHelper.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.onErrorInternal(self,"mediadecodeerror")),self._currentTime=time,(elem=self._curren