|
@@ -1,7 +1,6 @@
|
1
|
1
|
import { getLogger } from 'jitsi-meet-logger';
|
2
|
2
|
import transform from 'sdp-transform';
|
3
|
3
|
|
4
|
|
-import * as JitsiTrackEvents from '../../JitsiTrackEvents';
|
5
|
4
|
import * as MediaType from '../../service/RTC/MediaType';
|
6
|
5
|
import RTCEvents from '../../service/RTC/RTCEvents';
|
7
|
6
|
import browser from '../browser';
|
|
@@ -312,6 +311,17 @@ export class TPCUtils {
|
312
|
311
|
if (oldTrack && newTrack) {
|
313
|
312
|
const mediaType = newTrack.getType();
|
314
|
313
|
const stream = newTrack.getOriginalStream();
|
|
314
|
+
|
|
315
|
+ // Ignore cases when the track is replaced while the device is in a muted state,like
|
|
316
|
+ // replacing camera when video muted or replacing mic when audio muted. These JitsiLocalTracks
|
|
317
|
+ // do not have a mediastream attached. Replace track will be called again when the device is
|
|
318
|
+ // unmuted and the track will be replaced on the peerconnection then.
|
|
319
|
+ if (!stream) {
|
|
320
|
+ this.pc.localTracks.delete(oldTrack.rtcId);
|
|
321
|
+ this.pc.localTracks.set(newTrack.rtcId, newTrack);
|
|
322
|
+
|
|
323
|
+ return Promise.resolve();
|
|
324
|
+ }
|
315
|
325
|
const track = mediaType === MediaType.AUDIO
|
316
|
326
|
? stream.getAudioTracks()[0]
|
317
|
327
|
: stream.getVideoTracks()[0];
|
|
@@ -339,23 +349,20 @@ export class TPCUtils {
|
339
|
349
|
this.pc._extractPrimarySSRC(ssrc));
|
340
|
350
|
});
|
341
|
351
|
} else if (oldTrack && !newTrack) {
|
342
|
|
- if (!this.removeTrackMute(oldTrack)) {
|
343
|
|
- return Promise.reject(new Error('replace track failed'));
|
344
|
|
- }
|
345
|
|
- this.pc.localTracks.delete(oldTrack.rtcId);
|
346
|
|
- this.pc.localSSRCs.delete(oldTrack.rtcId);
|
|
352
|
+ return this.removeTrackMute(oldTrack)
|
|
353
|
+ .then(() => {
|
|
354
|
+ this.pc.localTracks.delete(oldTrack.rtcId);
|
|
355
|
+ this.pc.localSSRCs.delete(oldTrack.rtcId);
|
|
356
|
+ });
|
347
|
357
|
} else if (newTrack && !oldTrack) {
|
348
|
358
|
const ssrc = this.pc.localSSRCs.get(newTrack.rtcId);
|
349
|
359
|
|
350
|
|
- this.addTrackUnmute(newTrack)
|
|
360
|
+ return this.addTrackUnmute(newTrack)
|
351
|
361
|
.then(() => {
|
352
|
|
- newTrack.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED, newTrack);
|
353
|
362
|
this.pc.localTracks.set(newTrack.rtcId, newTrack);
|
354
|
363
|
this.pc.localSSRCs.set(newTrack.rtcId, ssrc);
|
355
|
364
|
});
|
356
|
365
|
}
|
357
|
|
-
|
358
|
|
- return Promise.resolve();
|
359
|
366
|
}
|
360
|
367
|
|
361
|
368
|
/**
|