diff --git a/openvidu-browser/src/OpenVidu/Publisher.ts b/openvidu-browser/src/OpenVidu/Publisher.ts index 111d7c05..150a00e6 100644 --- a/openvidu-browser/src/OpenVidu/Publisher.ts +++ b/openvidu-browser/src/OpenVidu/Publisher.ts @@ -117,7 +117,8 @@ export class Publisher extends StreamManager { */ publishAudio(value: boolean): void { if (this.stream.audioActive !== value) { - this.stream.getMediaStream().getAudioTracks().forEach((track) => { + const affectedMediaStream: MediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote : this.stream.getMediaStream(); + affectedMediaStream.getAudioTracks().forEach((track) => { track.enabled = value; }); if (!!this.session && !!this.stream.streamId) { @@ -163,7 +164,8 @@ export class Publisher extends StreamManager { */ publishVideo(value: boolean): void { if (this.stream.videoActive !== value) { - this.stream.getMediaStream().getVideoTracks().forEach((track) => { + const affectedMediaStream: MediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote : this.stream.getMediaStream(); + affectedMediaStream.getVideoTracks().forEach((track) => { track.enabled = value; }); if (!!this.session && !!this.stream.streamId) { @@ -305,15 +307,16 @@ export class Publisher extends StreamManager { reject(new Error('Unknown track kind ' + track.kind)); } (sender).replaceTrack(track).then(() => { + const mediaStream: MediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote : this.stream.getMediaStream(); let removedTrack: MediaStreamTrack; if (track.kind === 'video') { - removedTrack = this.stream.getMediaStream().getVideoTracks()[0]; + removedTrack = mediaStream.getVideoTracks()[0]; } else { - removedTrack = this.stream.getMediaStream().getAudioTracks()[0]; + removedTrack = mediaStream.getAudioTracks()[0]; } - this.stream.getMediaStream().removeTrack(removedTrack); + mediaStream.removeTrack(removedTrack); removedTrack.stop(); - this.stream.getMediaStream().addTrack(track); + mediaStream.addTrack(track); resolve(); }).catch(error => { reject(error); diff --git a/openvidu-browser/src/OpenVidu/Session.ts b/openvidu-browser/src/OpenVidu/Session.ts index 36dfc3e5..3c79bb6b 100644 --- a/openvidu-browser/src/OpenVidu/Session.ts +++ b/openvidu-browser/src/OpenVidu/Session.ts @@ -941,7 +941,6 @@ export class Session implements EventDispatcher { candidate: msg.candidate, component: msg.component, foundation: msg.foundation, - ip: msg.ip, port: msg.port, priority: msg.priority, protocol: msg.protocol, diff --git a/openvidu-browser/src/OpenVidu/Stream.ts b/openvidu-browser/src/OpenVidu/Stream.ts index e450c65e..47f5eb74 100644 --- a/openvidu-browser/src/OpenVidu/Stream.ts +++ b/openvidu-browser/src/OpenVidu/Stream.ts @@ -195,6 +195,10 @@ export class Stream implements EventDispatcher { * @hidden */ harkOptions; + /** + * @hidden + */ + localMediaStreamWhenSubscribedToRemote: MediaStream; /** @@ -495,6 +499,16 @@ export class Stream implements EventDispatcher { }); delete this.mediaStream; } + // If subscribeToRemote local MediaStream must be stopped + if (this.localMediaStreamWhenSubscribedToRemote) { + this.localMediaStreamWhenSubscribedToRemote.getAudioTracks().forEach((track) => { + track.stop(); + }); + this.localMediaStreamWhenSubscribedToRemote.getVideoTracks().forEach((track) => { + track.stop(); + }); + delete this.localMediaStreamWhenSubscribedToRemote; + } if (!!this.speechEvent) { if (!!this.speechEvent.stop) { this.speechEvent.stop(); @@ -863,6 +877,7 @@ export class Stream implements EventDispatcher { this.isLocalStreamPublished = true; this.publishedOnce = true; if (this.displayMyRemote()) { + this.localMediaStreamWhenSubscribedToRemote = this.mediaStream; this.remotePeerSuccessfullyEstablished(); } if (reconnect) {