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

1 line
No EOL
9.6 KiB
JavaScript

import htmlMediaHelper from"./htmlmediahelper.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import browser from"./../browser.js";function BaseHtmlPlayer(){this.type="mediaplayer"}function isValidDuration(duration){return!(!duration||isNaN(duration)||duration===Number.POSITIVE_INFINITY||duration===Number.NEGATIVE_INFINITY)}function getRanges(instance,elem,timeRanges){var ranges=[];let offset;instance=instance._currentPlayOptions;offset=(offset=instance?instance.transcodingOffsetTicks:offset)||0;for(let i=0,length=timeRanges.length;i<length;i++){let start=timeRanges.start(i),end=timeRanges.end(i);isValidDuration(start)||(start=0),isValidDuration(end)?ranges.push({start:1e7*start+offset,end:1e7*end+offset}):end=0}return ranges}function seriesImageUrl(item,options){if(item)return"Episode"!==item.Type?null:((options=options||{}).type=options.type||"Primary","Primary"===options.type&&item.SeriesPrimaryImageTag?(options.tag=item.SeriesPrimaryImageTag,connectionManager.getApiClient(item).getImageUrl(item.SeriesId,options)):"Thumb"===options.type&&item.ParentThumbImageTag?(options.tag=item.ParentThumbImageTag,connectionManager.getApiClient(item).getImageUrl(item.ParentThumbItemId,options)):null);throw new Error("item cannot be null!")}function imageUrl(item,options){if(!item)throw new Error("item cannot be null!");(options=options||{}).type=options.type||"Primary";var imageTags=item.ImageTags||{};return options.tag=item.PrimaryImageTag||imageTags[options.type],options.tag?connectionManager.getApiClient(item).getImageUrl(item.PrimaryImageItemId||item.Id||item.ItemId,options):item.AlbumId&&item.AlbumPrimaryImageTag?(options.tag=item.AlbumPrimaryImageTag,connectionManager.getApiClient(item).getImageUrl(item.AlbumId,options)):null}function getPosterUrl(item){var imageOptions={};return seriesImageUrl(item,imageOptions)||imageUrl(item,imageOptions)}function requireHlsPlayer(){return require(["hlsjs"]).then(function(responses){responses=responses[0];return window.Hls=responses})}function setCurrentTimeIfNeeded(element,seconds,allowance){Math.abs((element.currentTime||0)-seconds)>=allowance&&(element.currentTime=seconds)}function setCurrentTimeIfNeededOnDelay(element,seconds,allowance){setTimeout(function(){setCurrentTimeIfNeeded(element,seconds,allowance)},2500)}function onMediaManagerLoadMedia(data){var media=data.media,customData=media.customData,options=customData.options,elem=this._mediaElement;return this.loadIntoPlayer(elem,options,media.contentId,media,data,customData).then(function(){return null})}BaseHtmlPlayer.prototype.canPlayMediaType=function(mediaType){return(mediaType||"").toLowerCase()===this.mediaType},BaseHtmlPlayer.prototype.currentSrc=function(){return this._currentSrc},BaseHtmlPlayer.prototype.getDeviceProfile=function(item,options){return htmlMediaHelper.getDeviceProfile(this,item,options)},BaseHtmlPlayer.prototype.currentTime=function(val){var currentTime,mediaElement=this._mediaElement;if(mediaElement){if(null==val)return(currentTime=this._currentTime)?1e3*currentTime:1e3*(mediaElement.currentTime||0);mediaElement.currentTime=val/1e3}},BaseHtmlPlayer.prototype.duration=function(val){var mediaElement=this._mediaElement;if(mediaElement){mediaElement=mediaElement.duration;if(isValidDuration(mediaElement))return 1e3*mediaElement}return null},BaseHtmlPlayer.prototype.getBufferedRanges=function(){var mediaElement=this._mediaElement;return mediaElement?getRanges(this,mediaElement,mediaElement.buffered||[]):[]},BaseHtmlPlayer.prototype.getSeekableRanges=function(){var mediaElement=this._mediaElement;return mediaElement?getRanges(this,mediaElement,mediaElement.seekable||[]):[]},BaseHtmlPlayer.prototype.pause=function(){var mediaElement=this._mediaElement;mediaElement&&mediaElement.pause()},BaseHtmlPlayer.prototype.resume=function(){var mediaElement=this._mediaElement;mediaElement&&mediaElement.play()},BaseHtmlPlayer.prototype.unpause=function(){var mediaElement=this._mediaElement;mediaElement&&mediaElement.play()},BaseHtmlPlayer.prototype.paused=function(){var mediaElement=this._mediaElement;return!!mediaElement&&mediaElement.paused},BaseHtmlPlayer.prototype.setVolume=function(val){var mediaElement=this._mediaElement;mediaElement&&(mediaElement.volume=val/100)},BaseHtmlPlayer.prototype.getVolume=function(){var mediaElement;return browser.chromecast?100*cast.framework.CastReceiverContext.getInstance().getSystemVolume().level:(mediaElement=this._mediaElement)?Math.min(Math.round(100*mediaElement.volume),100):void 0},BaseHtmlPlayer.prototype.setPlaybackRate=function(val){var mediaElement=this._mediaElement;mediaElement&&(mediaElement.playbackRate=val)},BaseHtmlPlayer.prototype.getPlaybackRate=function(){var mediaElement=this._mediaElement;if(mediaElement)return mediaElement.playbackRate},BaseHtmlPlayer.prototype.volumeUp=function(){this.setVolume(Math.min(this.getVolume()+2,100))},BaseHtmlPlayer.prototype.volumeDown=function(){this.setVolume(Math.max(this.getVolume()-2,0))},BaseHtmlPlayer.prototype.setMute=function(mute){var mediaElement=this._mediaElement;mediaElement&&(mediaElement.muted=mute)},BaseHtmlPlayer.prototype.isMuted=function(){var mediaElement=this._mediaElement;return!!mediaElement&&mediaElement.muted},BaseHtmlPlayer.prototype.seekable=function(){var mediaElement=this._mediaElement;if(mediaElement){mediaElement=mediaElement.seekable;if(mediaElement&&mediaElement.length){let start=mediaElement.start(0),end=mediaElement.end(0);return isValidDuration(start)||(start=0),0<(end=isValidDuration(end)?end:0)-start}return!1}},BaseHtmlPlayer.prototype.setCurrentSrcChromecast=function(elem,options,url,hasHlsTextTracks,tracksHtml){elem.autoplay=!0;elem=new cast.framework.messages.LoadRequestData,elem.currentTime=(options.playerStartPositionTicks||0)/1e7,elem.autoplay=!0,elem.media=new cast.framework.messages.MediaInformation,elem.media.contentId=url,elem.media.contentUrl=url,elem.media.contentType=options.mimeType,"application/x-mpegurl"===(options.mimeType||"").toLowerCase()||"application/vnd.apple.mpegurl"===(options.mimeType||"").toLowerCase()?elem.media.streamType=cast.framework.messages.StreamType.OTHER:elem.media.streamType=cast.framework.messages.StreamType.BUFFERED,elem.media.customData={options:options,hasHlsTextTracks:hasHlsTextTracks,tracksHtml:tracksHtml},url=options.item;let supportImages=!0;return"Audio"===url.MediaType?(elem.media.metadata=new cast.framework.messages.MusicTrackMediaMetadata,elem.media.mediaCategory=cast.framework.messages.MediaCategory.AUDIO,url.Album&&(elem.media.metadata.albumName=url.Album),null!=url.IndexNumber&&(elem.media.metadata.trackNumber=url.IndexNumber),null!=url.ParentIndexNumber&&(elem.media.metadata.discNumber=url.ParentIndexNumber),url.AlbumArtists&&url.AlbumArtists.length&&(elem.media.metadata.albumArtist=url.AlbumArtists[0].Name),url.ArtistItems&&url.ArtistItems.length&&(elem.media.metadata.artist=url.ArtistItems[0].Name),elem.media.metadata.songTitle=url.Name):"Photo"===url.MediaType?(elem.media.metadata=new cast.framework.messages.PhotoMediaMetadata,elem.media.mediaCategory=cast.framework.messages.MediaCategory.IMAGE,supportImages=!1):"Episode"===url.Type?(elem.media.metadata=new cast.framework.messages.TvShowMediaMetadata,elem.media.mediaCategory=cast.framework.messages.MediaCategory.VIDEO,url.SeriesName&&(elem.media.metadata.seriesTitle=url.SeriesName),null!=url.IndexNumber&&(elem.media.metadata.episode=url.IndexNumber),null!=url.ParentIndexNumber&&(elem.media.metadata.season=url.ParentIndexNumber)):("Movie"===url.Type||"Trailer"===url.Type?elem.media.metadata=new cast.framework.messages.MovieMediaMetadata:elem.media.metadata=new cast.framework.messages.GenericMediaMetadata,elem.media.mediaCategory=cast.framework.messages.MediaCategory.VIDEO),url.OfficialRating&&(elem.media.metadata.contentRating=url.OfficialRating),elem.media.metadata.title=url.Name,url.Studios&&url.Studios.length&&(elem.media.metadata.studio=url.Studios[0].Name),elem.media.userActionStates=[cast.framework.messages.UserActionState.LIKE,cast.framework.messages.UserActionState.DISLIKE],supportImages&&(hasHlsTextTracks=[],(tracksHtml=getPosterUrl(url))&&(elem.media.metadata.posterUrl=tracksHtml,hasHlsTextTracks.push(new cast.framework.messages.Image(elem.media.metadata.posterUrl))),elem.media.metadata.images=hasHlsTextTracks),console.log("loading media url into mediaManager"),cast.framework.CastReceiverContext.getInstance().getPlayerManager().load(elem)},BaseHtmlPlayer.prototype.setSrcWithHlsJs=function(elem,options,url){let instance=this;return requireHlsPlayer().then(function(Hls){var hlsOptions={manifestLoadingTimeOut:2e4,debug:!1,testBandwidth:!1,emeEnabled:!1};"Audio"!==options.mediaType||browser.chromecast||(hlsOptions.maxMaxBufferLength=120);let hls=new Hls(hlsOptions);return hls.subtitleDisplay=!1,hls.loadSource(url),hls.attachMedia(elem),new Promise(function(resolve,reject){htmlMediaHelper.bindEventsToHlsPlayer(instance,hls,elem,resolve,reject),instance._hlsPlayer=hls,instance._currentSrc=url})})},BaseHtmlPlayer.prototype.seekOnPlaybackStart=function(element,ticks){ticks=(ticks||0)/1e7;ticks&&(setCurrentTimeIfNeeded(element,ticks,5),5<=Math.abs((element.currentTime||0)-ticks))&&setCurrentTimeIfNeededOnDelay(element,ticks,10)},BaseHtmlPlayer.prototype.bindMediaManagerEvents=function(){cast.framework.CastReceiverContext.getInstance().getPlayerManager().setMessageInterceptor(cast.framework.messages.MessageType.LOAD,onMediaManagerLoadMedia.bind(this))},BaseHtmlPlayer.prototype.unBindMediaManagerEvents=function(){cast.framework.CastReceiverContext.getInstance().getPlayerManager().setMessageInterceptor(cast.framework.messages.MessageType.LOAD,null)},BaseHtmlPlayer.prototype.getCrossOriginValue=function(mediaSource,playMethod){return mediaSource.IsRemote&&"DirectPlay"===playMethod?null:"anonymous"};export default BaseHtmlPlayer;