浏览代码

Merge pull request #174 from tsareg/consistent_track_removed_event

Fix JitsiConferenceEvents.TRACK_REMOVED is fired inconsistently
master
hristoterezov 8 年前
父节点
当前提交
1a2d345c42
共有 3 个文件被更改,包括 40 次插入9 次删除
  1. 5
    1
      JitsiConference.js
  2. 4
    0
      JitsiConferenceEventManager.js
  3. 31
    8
      modules/RTC/RTC.js

+ 5
- 1
JitsiConference.js 查看文件

@@ -691,7 +691,11 @@ JitsiConference.prototype.onMemberLeft = function (jid) {
691 691
     var participant = this.participants[id];
692 692
     delete this.participants[id];
693 693
 
694
-    this.rtc.removeRemoteTracks(id);
694
+    var removedTracks = this.rtc.removeRemoteTracks(id);
695
+
696
+    removedTracks.forEach(function (track) {
697
+        this.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED, track);
698
+    }.bind(this));
695 699
 
696 700
     this.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT, id, participant);
697 701
 };

+ 4
- 0
JitsiConferenceEventManager.js 查看文件

@@ -60,6 +60,10 @@ JitsiConferenceEventManager.prototype.setupChatRoomListeners = function () {
60 60
                         && tracks[i].getStreamId() == streamId
61 61
                         && tracks[i].getTrackId() == trackId) {
62 62
                         var track = participant._tracks.splice(i, 1)[0];
63
+
64
+                        conference.rtc.removeRemoteTrack(
65
+                            participant.getId(), track.getType());
66
+
63 67
                         conference.eventEmitter.emit(
64 68
                             JitsiConferenceEvents.TRACK_REMOVED, track);
65 69
                         return;

+ 31
- 8
modules/RTC/RTC.js 查看文件

@@ -241,17 +241,40 @@ RTC.prototype.createRemoteTrack = function (event) {
241 241
 
242 242
 /**
243 243
  * Removes all JitsiRemoteTracks associated with given MUC nickname (resource
244
- * part of the JID).
245
- * @param resource the resource part of the MUC JID
246
- * @returns {JitsiRemoteTrack|null}
244
+ * part of the JID). Returns array of removed tracks.
245
+ *
246
+ * @param {string} resource - The resource part of the MUC JID.
247
+ * @returns {JitsiRemoteTrack[]}
247 248
  */
248 249
 RTC.prototype.removeRemoteTracks = function (resource) {
249
-    var remoteTracks = this.remoteTracks[resource];
250
+    var removedTracks = [];
251
+    var removedAudioTrack = this.removeRemoteTrack(resource, MediaType.AUDIO);
252
+    var removedVideoTrack = this.removeRemoteTrack(resource, MediaType.VIDEO);
253
+
254
+    removedAudioTrack && removedTracks.push(removedAudioTrack);
255
+    removedVideoTrack && removedTracks.push(removedVideoTrack);
256
+
257
+    delete this.remoteTracks[resource];
250 258
 
251
-    if(remoteTracks) {
252
-        remoteTracks['audio'] && remoteTracks['audio'].dispose();
253
-        remoteTracks['video'] && remoteTracks['video'].dispose();
254
-        delete this.remoteTracks[resource];
259
+    return removedTracks;
260
+};
261
+
262
+/**
263
+ * Removes specified track type associated with given MUC nickname
264
+ * (resource part of the JID). Returns removed track if any.
265
+ *
266
+ * @param {string} resource - The resource part of the MUC JID.
267
+ * @param {string} mediaType - Type of track to remove.
268
+ * @returns {JitsiRemoteTrack|undefined}
269
+ */
270
+RTC.prototype.removeRemoteTrack = function (resource, mediaType) {
271
+    var remoteTracksForResource = this.remoteTracks[resource];
272
+
273
+    if (remoteTracksForResource && remoteTracksForResource[mediaType]) {
274
+        var track = remoteTracksForResource[mediaType];
275
+        track.dispose();
276
+        delete remoteTracksForResource[mediaType];
277
+        return track;
255 278
     }
256 279
 };
257 280
 

正在加载...
取消
保存