@eyevinn/web-player-cast
Version:
See [@eyevinn/web-player](https://www.npmjs.com/package/@eyevinn/web-player).
2 lines (1 loc) • 4.17 kB
JavaScript
var e,t=(e=require("mitt"))&&"object"==typeof e&&"default"in e?e.default:e,a=require("@eyevinn/web-player-core");function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var n,s,o=function(){function e(){this.emitter=t()}var a=e.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()},e}();function i(e,t){return n||(n=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)}))}(s=exports.CastSenderEvent||(exports.CastSenderEvent={})).CONNECTED="cast:connected",s.DISCONNECTED="cast:disconnected",s.STATE_CHANGE="cast:state_change",exports.CastSender=function(e){var t,n;function s(t,r){var n;return(n=e.call(this)||this).state={playbackState:a.PlaybackState.IDLE,currentTime:0,duration:0,isLive:!1,isAtLiveEdge:!1,isSeekable:!0,isMuted:!1,audioTracks:[],textTracks:[],volume:1},i(t,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}n=e,(t=s).prototype=Object.create(n.prototype),t.prototype.constructor=t,r(t,n);var o=s.prototype;return o.setState=function(e){this.state=Object.assign({},this.state,e),this.emit(exports.CastSenderEvent.STATE_CHANGE,{state:this.state})},o.getPlaybackStateFromPlayerState=function(e){switch(e){case chrome.cast.media.PlayerState.BUFFERING:return a.PlaybackState.BUFFERING;case chrome.cast.media.PlayerState.PAUSED:return a.PlaybackState.PAUSED;case chrome.cast.media.PlayerState.PLAYING:return a.PlaybackState.PLAYING;case chrome.cast.media.PlayerState.IDLE:return a.PlaybackState.IDLE}},o.getDuration=function(){return this.player.liveSeekableRange?this.player.liveSeekableRange.end:this.player.duration},o.setupListeners=function(){var e=this;cast.framework.CastContext.getInstance().addEventListener(cast.framework.CastContextEventType.SESSION_STATE_CHANGED,function(t){switch(t.sessionState){case cast.framework.SessionState.SESSION_STARTED:case cast.framework.SessionState.SESSION_RESUMED:e.emit(exports.CastSenderEvent.CONNECTED),e.setState({playbackState:a.PlaybackState.READY,isMuted:e.player.isMuted});break;case cast.framework.SessionState.SESSION_ENDED:e.emit(exports.CastSenderEvent.DISCONNECTED),e.setState({playbackState:a.PlaybackState.IDLE})}}),this.playerController.addEventListener(cast.framework.RemotePlayerEventType.ANY_CHANGE,function(t){var r=t.value;switch(t.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===a.PlaybackState.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})}})},o.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)},o.play=function(){this.playerController.playOrPause()},o.pause=function(){this.playerController.playOrPause()},o.stop=function(){this.playerController.stop()},o.mute=function(){this.playerController.muteOrUnmute()},o.unmute=function(){this.playerController.muteOrUnmute()},o.setAudioTrack=function(){},o.setTextTrack=function(){},o.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),exports.initializeCast=i;