@eyevinn/web-player-cast
Version:
See [@eyevinn/web-player](https://www.npmjs.com/package/@eyevinn/web-player).
2 lines (1 loc) • 3.95 kB
JavaScript
import e from"mitt";import{PlaybackState as t}from"@eyevinn/web-player-core";function a(e,t){return(a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var r,n,o=function(){function t(){this.emitter=e()}var a=t.prototype;return a.on=function(e,t){this.emitter.on.apply(this,arguments)},a.off=function(e,t){this.emitter.on.apply(this,arguments)},a.emit=function(e,t){this.emitter.emit.apply(this,arguments)},a.destroy=function(){this.emitter.all.clear()},t}();function i(e,t){return r||(r=new Promise(function(a,r){window.__onGCastApiAvailable=function(n){n?(cast.framework.CastContext.getInstance().setOptions({receiverApplicationId:e||chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,autoJoinPolicy:t||chrome.cast.AutoJoinPolicy.PAGE_SCOPED}),a()):r(new Error("[Cast] not available"))};var n=document.createElement("script");n.src="//www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1",document.body.appendChild(n)}))}!function(e){e.CONNECTED="cast:connected",e.DISCONNECTED="cast:disconnected",e.STATE_CHANGE="cast:state_change"}(n||(n={}));var s=function(e){var r,o;function s(a,r){var n;return(n=e.call(this)||this).state={playbackState:t.IDLE,currentTime:0,duration:0,isLive:!1,isAtLiveEdge:!1,isSeekable:!0,isMuted:!1,audioTracks:[],textTracks:[],volume:1},i(a,r).then(function(){n.player=new cast.framework.RemotePlayer,n.playerController=new cast.framework.RemotePlayerController(n.player),n.setupListeners()},function(e){return console.error(e)}),n}o=e,(r=s).prototype=Object.create(o.prototype),r.prototype.constructor=r,a(r,o);var c=s.prototype;return c.setState=function(e){this.state=Object.assign({},this.state,e),this.emit(n.STATE_CHANGE,{state:this.state})},c.getPlaybackStateFromPlayerState=function(e){switch(e){case chrome.cast.media.PlayerState.BUFFERING:return t.BUFFERING;case chrome.cast.media.PlayerState.PAUSED:return t.PAUSED;case chrome.cast.media.PlayerState.PLAYING:return t.PLAYING;case chrome.cast.media.PlayerState.IDLE:return t.IDLE}},c.getDuration=function(){return this.player.liveSeekableRange?this.player.liveSeekableRange.end:this.player.duration},c.setupListeners=function(){var e=this;cast.framework.CastContext.getInstance().addEventListener(cast.framework.CastContextEventType.SESSION_STATE_CHANGED,function(a){switch(a.sessionState){case cast.framework.SessionState.SESSION_STARTED:case cast.framework.SessionState.SESSION_RESUMED:e.emit(n.CONNECTED),e.setState({playbackState:t.READY,isMuted:e.player.isMuted});break;case cast.framework.SessionState.SESSION_ENDED:e.emit(n.DISCONNECTED),e.setState({playbackState:t.IDLE})}}),this.playerController.addEventListener(cast.framework.RemotePlayerEventType.ANY_CHANGE,function(a){var r=a.value;switch(a.field){case"currentTime":e.setState({currentTime:r,isAtLiveEdge:r>=e.state.duration-20});break;case"duration":e.setState({duration:r});break;case"playerState":var n=e.getPlaybackStateFromPlayerState(r);e.setState({playbackState:n}),n===t.IDLE&&e.stop();break;case"liveSeekableRange":e.setState(r?{isLive:!r.isLiveDone,duration:r.end-r.start,isSeekable:r.end-r.start>300}:{isLive:!1})}})},c.load=function(e,t){void 0===t&&(t=null);var a=cast.framework.CastContext.getInstance().getCurrentSession(),r=new chrome.cast.media.MediaInfo(e,"video/mp4"),n=new chrome.cast.media.LoadRequest(r);return t&&(n.currentTime=t),a.loadMedia(n)},c.play=function(){this.playerController.playOrPause()},c.pause=function(){this.playerController.playOrPause()},c.stop=function(){this.playerController.stop()},c.mute=function(){this.playerController.muteOrUnmute()},c.unmute=function(){this.playerController.muteOrUnmute()},c.setAudioTrack=function(){},c.setTextTrack=function(){},c.seekTo=function(e){var t=e.position,a=e.change,r=e.percentage;r?t=Math.min(r,99.9)/100*this.getDuration():a&&(t=this.player.currentTime+a),this.player.currentTime=t,this.playerController.seek()},s}(o);export{s as CastSender,n as CastSenderEvent,i as initializeCast};