diff --git a/app/lib/Client.js b/app/lib/Client.js index d9d8453..c3b60ca 100644 --- a/app/lib/Client.js +++ b/app/lib/Client.js @@ -369,7 +369,7 @@ export default class Client extends events.EventEmitter disableRemoteVideo(msid) { - this._protooPeer.send('disableremotevideo', { msid, disable: true }) + return this._protooPeer.send('disableremotevideo', { msid, disable: true }) .catch((error) => { logger.warn('disableRemoteVideo() failed: %o', error); @@ -378,7 +378,7 @@ export default class Client extends events.EventEmitter enableRemoteVideo(msid) { - this._protooPeer.send('disableremotevideo', { msid, disable: false }) + return this._protooPeer.send('disableremotevideo', { msid, disable: false }) .catch((error) => { logger.warn('enableRemoteVideo() failed: %o', error); diff --git a/app/lib/components/RemoteVideo.jsx b/app/lib/components/RemoteVideo.jsx index fa7d561..fa6b7e7 100644 --- a/app/lib/components/RemoteVideo.jsx +++ b/app/lib/components/RemoteVideo.jsx @@ -20,15 +20,29 @@ export default class RemoteVideo extends React.Component { audioMuted : false }; + + let videoTrack = props.stream.getVideoTracks()[0]; + + if (videoTrack) + { + videoTrack.addEventListener('mute', () => + { + logger.debug('video track "mute" event'); + }); + + videoTrack.addEventListener('unmute', () => + { + logger.debug('video track "unmute" event'); + }); + } } render() { let props = this.props; let state = this.state; - let hasVideo = !!props.stream.getVideoTracks()[0]; - - global.SS = props.stream; + let videoTrack = props.stream.getVideoTracks()[0]; + let videoEnabled = videoTrack && videoTrack.enabled; return (
@@ -53,14 +68,16 @@ export default class RemoteVideo extends React.Component /> - - - + {videoTrack ? + + + + :null}
@@ -83,14 +100,29 @@ export default class RemoteVideo extends React.Component { logger.debug('handleClickDisableVideo()'); + let videoTrack = this.props.stream.getVideoTracks()[0]; + let videoEnabled = videoTrack && videoTrack.enabled; let stream = this.props.stream; let msid = stream.id; - let hasVideo = !!stream.getVideoTracks()[0]; - if (hasVideo) - this.props.onDisableVideo(msid); + if (videoEnabled) + { + this.props.onDisableVideo(msid) + .then(() => + { + videoTrack.enabled = false; + this.forceUpdate(); + }); + } else - this.props.onEnableVideo(msid); + { + this.props.onEnableVideo(msid) + .then(() => + { + videoTrack.enabled = true; + this.forceUpdate(); + }); + } } } diff --git a/app/lib/components/Room.jsx b/app/lib/components/Room.jsx index 89b2735..b2b5263 100644 --- a/app/lib/components/Room.jsx +++ b/app/lib/components/Room.jsx @@ -242,14 +242,14 @@ export default class Room extends React.Component { logger.debug('handleDisableRemoteVideo() [msid:"%s"]', msid); - this._client.disableRemoteVideo(msid); + return this._client.disableRemoteVideo(msid); } handleEnableRemoteVideo(msid) { logger.debug('handleEnableRemoteVideo() [msid:"%s"]', msid); - this._client.enableRemoteVideo(msid); + return this._client.enableRemoteVideo(msid); } _runClient() diff --git a/app/lib/components/Video.jsx b/app/lib/components/Video.jsx index 614fd8d..5081fba 100644 --- a/app/lib/components/Video.jsx +++ b/app/lib/components/Video.jsx @@ -63,7 +63,11 @@ export default class Video extends React.Component