|
@@ -728,11 +728,6 @@ TraceablePeerConnection.prototype._createRemoteTrack = function(
|
728
|
728
|
videoType,
|
729
|
729
|
ssrc,
|
730
|
730
|
muted) {
|
731
|
|
- const remoteTrack
|
732
|
|
- = new JitsiRemoteTrack(
|
733
|
|
- this.rtc, this.rtc.conference,
|
734
|
|
- ownerEndpointId,
|
735
|
|
- stream, track, mediaType, videoType, ssrc, muted, this.isP2P);
|
736
|
731
|
let remoteTracksMap = this.remoteTracks.get(ownerEndpointId);
|
737
|
732
|
|
738
|
733
|
if (!remoteTracksMap) {
|
|
@@ -740,11 +735,35 @@ TraceablePeerConnection.prototype._createRemoteTrack = function(
|
740
|
735
|
this.remoteTracks.set(ownerEndpointId, remoteTracksMap);
|
741
|
736
|
}
|
742
|
737
|
|
743
|
|
- if (remoteTracksMap.has(mediaType)) {
|
|
738
|
+ const existingTrack = remoteTracksMap.get(mediaType);
|
|
739
|
+
|
|
740
|
+ if (existingTrack && existingTrack.getTrack() === track) {
|
|
741
|
+ // Ignore duplicated event which can originate either from
|
|
742
|
+ // 'onStreamAdded' or 'onTrackAdded'.
|
|
743
|
+ logger.info(
|
|
744
|
+ `${this} ignored duplicated remote track added event for: `
|
|
745
|
+ + `${ownerEndpointId}, ${mediaType}`);
|
|
746
|
+
|
|
747
|
+ return;
|
|
748
|
+ } else if (existingTrack) {
|
744
|
749
|
logger.error(
|
745
|
|
- `${this} overwriting remote track! ${remoteTrack}`,
|
746
|
|
- ownerEndpointId, mediaType);
|
|
750
|
+ `${this} overwriting remote track for`
|
|
751
|
+ + `${ownerEndpointId} ${mediaType}`);
|
747
|
752
|
}
|
|
753
|
+
|
|
754
|
+ const remoteTrack
|
|
755
|
+ = new JitsiRemoteTrack(
|
|
756
|
+ this.rtc,
|
|
757
|
+ this.rtc.conference,
|
|
758
|
+ ownerEndpointId,
|
|
759
|
+ stream,
|
|
760
|
+ track,
|
|
761
|
+ mediaType,
|
|
762
|
+ videoType,
|
|
763
|
+ ssrc,
|
|
764
|
+ muted,
|
|
765
|
+ this.isP2P);
|
|
766
|
+
|
748
|
767
|
remoteTracksMap.set(mediaType, remoteTrack);
|
749
|
768
|
|
750
|
769
|
this.eventEmitter.emit(RTCEvents.REMOTE_TRACK_ADDED, remoteTrack);
|