diff --git a/src/utils/webrtc/simplewebrtc/peer.js b/src/utils/webrtc/simplewebrtc/peer.js index 3f01b708785..f7b4be87b66 100644 --- a/src/utils/webrtc/simplewebrtc/peer.js +++ b/src/utils/webrtc/simplewebrtc/peer.js @@ -6,6 +6,8 @@ const adapter = require('webrtc-adapter') const webrtcSupport = require('webrtcsupport') const WildEmitter = require('wildemitter') +const { isSafari } = require('../../../utils/browserCheck.js') + /** * @param {object} stream the stream object. */ @@ -833,7 +835,10 @@ Peer.prototype._replaceTrack = async function(newTrack, oldTrack, stream) { return } - if (sender.track && newTrack && !newTrack.enabled) { + // When replacing with a null track on Safari the reference to the track is + // lost (setting trackDisabled is not enough). Therefore we keep the track + // intact and don't replace it with a null track. + if (sender.track && newTrack && !newTrack.enabled && !isSafari) { // Replace with a null track to stop the sender. newTrack = null } @@ -873,6 +878,8 @@ Peer.prototype.handleSentTrackEnabledChanged = function(track, stream) { this.handleSentTrackReplacedBound(track, track, stream) } else if (!track.enabled && sender) { this.handleSentTrackReplacedBound(track, track, stream) + } else if (!sender && !stoppedSender) { + console.error('No sender found to handle localTrackEnabledChanged', track, stream) } }