summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Calviño Sánchez <danxuliu@gmail.com>2021-05-25 06:53:25 +0200
committerDaniel Calviño Sánchez <danxuliu@gmail.com>2021-06-21 20:44:44 +0200
commit087432048effdbd457c71fac484acdf31725cf45 (patch)
treef6c50eb5e4474e8a339b33f10b3ee8f6797b676b
parentabe5633824b06ddfd97869dab6cb12ebbc8407ef (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.js21
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) {