浏览代码

Always fire JitsiConferenceEvents.TRACK_REMOVED event when track is removed when participant lefts the conference

dev1
tsareg 9 年前
父节点
当前提交
27466fce4a
共有 2 个文件被更改,包括 60 次插入10 次删除
  1. 14
    3
      JitsiConference.js
  2. 46
    7
      modules/RTC/RTC.js

+ 14
- 3
JitsiConference.js 查看文件

628
     var participant = this.participants[id];
628
     var participant = this.participants[id];
629
     delete this.participants[id];
629
     delete this.participants[id];
630
 
630
 
631
-    this.rtc.removeRemoteTracks(id);
631
+    var removedTracks = this.rtc.removeRemoteTracks(id);
632
+
633
+    removedTracks.forEach(function (track) {
634
+        this.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED, track);
635
+    }.bind(this));
632
 
636
 
633
     this.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT, id, participant);
637
     this.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT, id, participant);
634
 };
638
 };
1122
                         && tracks[i].getStreamId() == streamId
1126
                         && tracks[i].getStreamId() == streamId
1123
                         && tracks[i].getTrackId() == trackId) {
1127
                         && tracks[i].getTrackId() == trackId) {
1124
                         var track = participant._tracks.splice(i, 1)[0];
1128
                         var track = participant._tracks.splice(i, 1)[0];
1125
-                        conference.eventEmitter.emit(
1126
-                            JitsiConferenceEvents.TRACK_REMOVED, track);
1129
+
1130
+                        track = conference.rtc.removeRemoteTrack(
1131
+                            participant.getId(), track);
1132
+
1133
+                        if (track) {
1134
+                            conference.eventEmitter.emit(
1135
+                                JitsiConferenceEvents.TRACK_REMOVED, track);
1136
+                        }
1137
+
1127
                         return;
1138
                         return;
1128
                     }
1139
                     }
1129
                 }
1140
                 }

+ 46
- 7
modules/RTC/RTC.js 查看文件

287
 
287
 
288
 /**
288
 /**
289
  * Removes all JitsiRemoteTracks associated with given MUC nickname (resource
289
  * Removes all JitsiRemoteTracks associated with given MUC nickname (resource
290
- * part of the JID).
291
- * @param resource the resource part of the MUC JID
292
- * @returns {JitsiRemoteTrack|null}
290
+ * part of the JID). Returns array of removed tracks.
291
+ *
292
+ * @param {string} resource - The resource part of the MUC JID.
293
+ * @returns {JitsiRemoteTrack[]}
293
  */
294
  */
294
 RTC.prototype.removeRemoteTracks = function (resource) {
295
 RTC.prototype.removeRemoteTracks = function (resource) {
295
-    var remoteTracks = this.remoteTracks[resource];
296
+    var remoteTracksForResource = this.remoteTracks[resource];
297
+    var removedTracks = [];
298
+
299
+    if (remoteTracksForResource) {
300
+        for (var key in remoteTracksForResource) {
301
+            if (remoteTracksForResource.hasOwnProperty(key) &&
302
+                remoteTracksForResource[key]) {
303
+                var removedTrack = this.removeRemoteTrack(
304
+                    resource, remoteTracksForResource[key]);
305
+
306
+                if (removedTrack) {
307
+                    removedTracks.push(removedTrack);
308
+                }
309
+            }
310
+        }
296
 
311
 
297
-    if(remoteTracks) {
298
-        remoteTracks['audio'] && remoteTracks['audio'].dispose();
299
-        remoteTracks['video'] && remoteTracks['video'].dispose();
300
         delete this.remoteTracks[resource];
312
         delete this.remoteTracks[resource];
301
     }
313
     }
314
+
315
+    return removedTracks;
316
+};
317
+
318
+/**
319
+ * Removes specified JitsiRemoteTrack associated with given MUC nickname
320
+ * (resource part of the JID). Returns removed track if any.
321
+ *
322
+ * @param {string} resource - The resource part of the MUC JID.
323
+ * @param {JitsiRemoteTrack} track - Track to remove.
324
+ * @returns {JitsiRemoteTrack|undefined}
325
+ */
326
+RTC.prototype.removeRemoteTrack = function (resource, track) {
327
+    var remoteTracksForResource = this.remoteTracks[resource];
328
+
329
+    if (remoteTracksForResource) {
330
+        for (var key in remoteTracksForResource) {
331
+            if (remoteTracksForResource.hasOwnProperty(key) &&
332
+                remoteTracksForResource[key] &&
333
+                remoteTracksForResource[key] === track) {
334
+                remoteTracksForResource[key].dispose();
335
+                delete remoteTracksForResource[key];
336
+                return track;
337
+            }
338
+
339
+        }
340
+    }
302
 };
341
 };
303
 
342
 
304
 RTC.getPCConstraints = function () {
343
 RTC.getPCConstraints = function () {

正在加载...
取消
保存