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
@@ -74,6 +78,7 @@ export default class Video extends React.Component
componentDidMount()
{
let stream = this.props.stream;
+ let videoDisabled = !!this.props.videoDisabled;
let video = this.refs.video;
video.srcObject = stream;
@@ -81,6 +86,9 @@ export default class Video extends React.Component
this._showVideoResolution();
this._videoResolutionTimer = setInterval(() =>
{
+ if (!videoDisabled)
+ return;
+
this._showVideoResolution();
}, 500);
@@ -228,6 +236,7 @@ Video.propTypes =
stream : React.PropTypes.object.isRequired,
resolution : React.PropTypes.string,
muted : React.PropTypes.bool,
+ videoDisabled : React.PropTypes.bool,
mirror : React.PropTypes.bool,
onResolutionChange : React.PropTypes.func
};
diff --git a/app/stylus/components/Video.styl b/app/stylus/components/Video.styl
index ed94fe5..8127d00 100644
--- a/app/stylus/components/Video.styl
+++ b/app/stylus/components/Video.styl
@@ -2,6 +2,12 @@
position: relative;
height: 100%;
width: 100%;
+ object-fit: cover;
+ background-color: rgba(#041918, 0.65);
+ background-image: url('/resources/images/buddy.svg');
+ background-position: bottom;
+ background-size: auto 85%;
+ background-repeat: no-repeat;
overflow: hidden;
> .resolution {
@@ -66,14 +72,13 @@
height: 100%;
width: 100%;
object-fit: cover;
- background-color: rgba(#041918, 0.65);
- background-image: url('/resources/images/buddy.svg');
- background-position: bottom;
- background-size: auto 85%;
- background-repeat: no-repeat;
&.mirror {
transform: scaleX(-1);
}
+
+ &.hidden {
+ display: none;
+ }
}
}
diff --git a/server/lib/Room.js b/server/lib/Room.js
index c99f320..1bec584 100644
--- a/server/lib/Room.js
+++ b/server/lib/Room.js
@@ -380,12 +380,15 @@ class Room extends EventEmitter
.then(() =>
{
if (disable)
- return videoRtpSender.disable();
+ return videoRtpSender.disable({ emit: false });
else
- return videoRtpSender.enable();
+ return videoRtpSender.enable({ emit: false });
})
.then(() =>
{
+ logger.log('"disableremotevideo" request succeed [disable:%s]',
+ !!disable);
+
accept();
})
.catch((error) =>