diff options
author | Daniel Calviño Sánchez <danxuliu@gmail.com> | 2021-05-25 06:53:25 +0200 |
---|---|---|
committer | Daniel Calviño Sánchez <danxuliu@gmail.com> | 2021-06-21 20:44:44 +0200 |
commit | 087432048effdbd457c71fac484acdf31725cf45 (patch) | |
tree | f6c50eb5e4474e8a339b33f10b3ee8f6797b676b | |
parent | abe5633824b06ddfd97869dab6cb12ebbc8407ef (diff) |
Stop sent streams for initially disabled media
Besides reacting to disable state changes the sent streams are also
stopped now when tracks are initially disabled and no event is emitted.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
-rw-r--r-- | src/utils/webrtc/simplewebrtc/peer.js | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/utils/webrtc/simplewebrtc/peer.js b/src/utils/webrtc/simplewebrtc/peer.js index 44feb991d..c30b76192 100644 --- a/src/utils/webrtc/simplewebrtc/peer.js +++ b/src/utils/webrtc/simplewebrtc/peer.js @@ -33,6 +33,7 @@ function Peer(options) { this.pendingDCMessages = [] // key (datachannel label) -> value (array[pending messages]) this._pendingReplaceTracksQueue = [] this._processPendingReplaceTracksPromise = null + this._initialStreamSetup = false this.sid = options.sid || Date.now().toString() this.pc = new RTCPeerConnection(this.parent.config.peerConnectionConfig) this.pc.addEventListener('icecandidate', this.onIceCandidate.bind(this)) @@ -50,7 +51,25 @@ function Peer(options) { this.pc.addEventListener('iceconnectionstatechange', this.emit.bind(this, 'iceConnectionStateChange')) this.pc.addEventListener('iceconnectionstatechange', function() { if (self.pc.iceConnectionState !== 'new') { - self._processPendingReplaceTracks() + self._processPendingReplaceTracks().then(finished => { + if (finished === false || self._initialStreamSetup) { + return + } + + // Ensure that initially disabled tracks are stopped after + // establishing a connection. + self.pc.getSenders().forEach(sender => { + if (sender.track) { + // The stream is not known, but it is only used when the + // track is added, so it can be ignored here. + self.handleLocalTrackEnabledChanged(sender.track, null) + } + }) + + self._initialStreamSetup = true + }) + } else { + self._initialStreamSetup = false } switch (self.pc.iceConnectionState) { |