|
@@ -12,6 +12,7 @@ var JitsiParticipant = require("./JitsiParticipant");
|
12
|
12
|
var Statistics = require("./modules/statistics/statistics");
|
13
|
13
|
var JitsiDTMFManager = require('./modules/DTMF/JitsiDTMFManager');
|
14
|
14
|
var JitsiTrackEvents = require("./JitsiTrackEvents");
|
|
15
|
+var JitsiTrackErrors = require("./JitsiTrackErrors");
|
15
|
16
|
var Settings = require("./modules/settings/Settings");
|
16
|
17
|
|
17
|
18
|
/**
|
|
@@ -298,6 +299,10 @@ JitsiConference.prototype.setSubject = function (subject) {
|
298
|
299
|
* and there is already another video track in the conference.
|
299
|
300
|
*/
|
300
|
301
|
JitsiConference.prototype.addTrack = function (track) {
|
|
302
|
+ if(track.disposed)
|
|
303
|
+ {
|
|
304
|
+ throw new Error(JitsiTrackErrors.TRACK_IS_DISPOSED);
|
|
305
|
+ }
|
301
|
306
|
if (track.isVideoTrack()) {
|
302
|
307
|
if (this.rtc.getLocalVideoStream()) {
|
303
|
308
|
throw new Error("cannot add second video track to the conference");
|
|
@@ -336,12 +341,9 @@ JitsiConference.prototype.addTrack = function (track) {
|
336
|
341
|
}
|
337
|
342
|
|
338
|
343
|
track.muteHandler = this._fireMuteChangeEvent.bind(this, track);
|
339
|
|
- track.stopHandler = this.removeTrack.bind(this, track);
|
340
|
344
|
track.audioLevelHandler = this._fireAudioLevelChangeEvent.bind(this);
|
341
|
345
|
track.addEventListener(JitsiTrackEvents.TRACK_MUTE_CHANGED,
|
342
|
346
|
track.muteHandler);
|
343
|
|
- track.addEventListener(JitsiTrackEvents.TRACK_STOPPED,
|
344
|
|
- track.stopHandler);
|
345
|
347
|
track.addEventListener(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,
|
346
|
348
|
track.audioLevelHandler);
|
347
|
349
|
//FIXME: This dependacy is not necessary. This is quick fix.
|
|
@@ -382,6 +384,10 @@ JitsiConference.prototype._fireMuteChangeEvent = function (track) {
|
382
|
384
|
* @returns {Promise}
|
383
|
385
|
*/
|
384
|
386
|
JitsiConference.prototype.removeTrack = function (track) {
|
|
387
|
+ if(track.disposed)
|
|
388
|
+ {
|
|
389
|
+ throw new Error(JitsiTrackErrors.TRACK_IS_DISPOSED);
|
|
390
|
+ }
|
385
|
391
|
if(!this.room){
|
386
|
392
|
if(this.rtc) {
|
387
|
393
|
this.rtc.removeLocalStream(track);
|
|
@@ -397,8 +403,6 @@ JitsiConference.prototype.removeTrack = function (track) {
|
397
|
403
|
this.rtc.removeLocalStream(track);
|
398
|
404
|
track.removeEventListener(JitsiTrackEvents.TRACK_MUTE_CHANGED,
|
399
|
405
|
track.muteHandler);
|
400
|
|
- track.removeEventListener(JitsiTrackEvents.TRACK_STOPPED,
|
401
|
|
- track.stopHandler);
|
402
|
406
|
track.removeEventListener(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,
|
403
|
407
|
track.audioLevelHandler);
|
404
|
408
|
this.room.removeListener(XMPPEvents.SENDRECV_STREAMS_CHANGED,
|
|
@@ -868,7 +872,7 @@ function setupListeners(conference) {
|
868
|
872
|
for(var i = 0; i < tracks.length; i++) {
|
869
|
873
|
if(tracks[i] && tracks[i].stream &&
|
870
|
874
|
RTC.getStreamID(tracks[i].stream) == streamId){
|
871
|
|
- var track = participant._tracks.splice(i, 1);
|
|
875
|
+ var track = participant._tracks.splice(i, 1)[0];
|
872
|
876
|
conference.eventEmitter.emit(
|
873
|
877
|
JitsiConferenceEvents.TRACK_REMOVED, track);
|
874
|
878
|
return;
|