|
@@ -251,26 +251,61 @@ function setupListeners(conference) {
|
251
|
251
|
});
|
252
|
252
|
conference.room.addListener(XMPPEvents.REMOTE_STREAM_RECEIVED,
|
253
|
253
|
conference.rtc.createRemoteStream.bind(conference.rtc));
|
254
|
|
- conference.rtc.addListener(StreamEventTypes.EVENT_TYPE_REMOTE_CREATED, function (stream) {
|
255
|
|
- conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED, stream);
|
|
254
|
+
|
|
255
|
+ conference.room.addListener(XMPPEvents.MUC_JOINED, function () {
|
|
256
|
+ conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_JOINED);
|
|
257
|
+ });
|
|
258
|
+// FIXME
|
|
259
|
+// conference.room.addListener(XMPPEvents.MUC_JOINED, function () {
|
|
260
|
+// conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_LEFT);
|
|
261
|
+// });
|
|
262
|
+
|
|
263
|
+ conference.room.addListener(XMPPEvents.MUC_MEMBER_JOINED,
|
|
264
|
+ conference.onMemberJoined.bind(conference));
|
|
265
|
+ conference.room.addListener(XMPPEvents.MUC_MEMBER_LEFT,function (jid) {
|
|
266
|
+ conference.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT,
|
|
267
|
+ Strophe.getResourceFromJid(jid));
|
256
|
268
|
});
|
|
269
|
+
|
|
270
|
+ conference.room.addListener(XMPPEvents.DISPLAY_NAME_CHANGED,
|
|
271
|
+ function (from, displayName) {
|
|
272
|
+ conference.eventEmitter.emit(
|
|
273
|
+ JitsiConferenceEvents.DISPLAY_NAME_CHANGED,
|
|
274
|
+ Strophe.getResourceFromJid(from), displayName);
|
|
275
|
+ });
|
|
276
|
+
|
|
277
|
+ conference.room.addListener(XMPPEvents.CONNECTION_INTERRUPTED,
|
|
278
|
+ function () {
|
|
279
|
+ conference.eventEmitter.emit(
|
|
280
|
+ JitsiConferenceEvents.CONNECTION_INTERRUPTED);
|
|
281
|
+ });
|
|
282
|
+
|
|
283
|
+ conference.room.addListener(XMPPEvents.CONNECTION_RESTORED, function () {
|
|
284
|
+ conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_RESTORED);
|
|
285
|
+ });
|
|
286
|
+ conference.room.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function() {
|
|
287
|
+ conference.eventEmitter.emit(JitsiConferenceEvents.SETUP_FAILED);
|
|
288
|
+ });
|
|
289
|
+
|
|
290
|
+ conference.rtc.addListener(StreamEventTypes.EVENT_TYPE_REMOTE_CREATED,
|
|
291
|
+ function (stream) {
|
|
292
|
+ conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED, stream);
|
|
293
|
+ });
|
|
294
|
+
|
|
295
|
+//FIXME: Maybe remove event should not be associated with the conference.
|
257
|
296
|
conference.rtc.addListener(StreamEventTypes.EVENT_TYPE_REMOTE_ENDED, function (stream) {
|
258
|
297
|
conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED, stream);
|
259
|
298
|
});
|
|
299
|
+//FIXME: Maybe remove event should not be associated with the conference.
|
260
|
300
|
conference.rtc.addListener(StreamEventTypes.EVENT_TYPE_LOCAL_ENDED, function (stream) {
|
261
|
301
|
conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED, stream);
|
262
|
302
|
conference.removeTrack(stream);
|
263
|
303
|
});
|
|
304
|
+
|
264
|
305
|
conference.rtc.addListener(StreamEventTypes.TRACK_MUTE_CHANGED, function (track) {
|
265
|
306
|
conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_MUTE_CHANGED, track);
|
266
|
307
|
});
|
267
|
|
- conference.room.addListener(XMPPEvents.MUC_JOINED, function () {
|
268
|
|
- conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_JOINED);
|
269
|
|
- });
|
270
|
|
-// FIXME
|
271
|
|
-// conference.room.addListener(XMPPEvents.MUC_JOINED, function () {
|
272
|
|
-// conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_LEFT);
|
273
|
|
-// });
|
|
308
|
+
|
274
|
309
|
conference.rtc.addListener(RTCEvents.DOMINANTSPEAKER_CHANGED, function (id) {
|
275
|
310
|
if(conference.lastActiveSpeaker !== id && conference.room) {
|
276
|
311
|
conference.lastActiveSpeaker = id;
|
|
@@ -288,28 +323,8 @@ function setupListeners(conference) {
|
288
|
323
|
lastNEndpoints, endpointsEnteringLastN);
|
289
|
324
|
});
|
290
|
325
|
|
291
|
|
- conference.room.addListener(XMPPEvents.MUC_MEMBER_JOINED, conference.onMemberJoined.bind(conference));
|
292
|
|
- conference.room.addListener(XMPPEvents.MUC_MEMBER_LEFT,function (jid) {
|
293
|
|
- conference.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT, Strophe.getResourceFromJid(jid));
|
294
|
|
- });
|
295
|
|
-
|
296
|
|
- conference.room.addListener(XMPPEvents.DISPLAY_NAME_CHANGED, function (from, displayName) {
|
297
|
|
- conference.eventEmitter.emit(JitsiConferenceEvents.DISPLAY_NAME_CHANGED,
|
298
|
|
- Strophe.getResourceFromJid(from), displayName);
|
299
|
|
- });
|
300
|
|
-
|
301
|
|
- conference.room.addListener(XMPPEvents.CONNECTION_INTERRUPTED, function () {
|
302
|
|
- conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_INTERRUPTED);
|
303
|
|
- });
|
304
|
|
-
|
305
|
|
- conference.room.addListener(XMPPEvents.CONNECTION_RESTORED, function () {
|
306
|
|
- conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_RESTORED);
|
307
|
|
- });
|
308
|
|
- conference.room.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function () {
|
309
|
|
- conference.eventEmitter.emit(JitsiConferenceEvents.SETUP_FAILED);
|
310
|
|
- });
|
311
|
|
-
|
312
|
326
|
if(conference.statistics) {
|
|
327
|
+ //FIXME: Maybe remove event should not be associated with the conference.
|
313
|
328
|
conference.statistics.addAudioLevelListener(function (ssrc, level) {
|
314
|
329
|
var userId = null;
|
315
|
330
|
if (ssrc === Statistics.LOCAL_JID) {
|
|
@@ -331,12 +346,10 @@ function setupListeners(conference) {
|
331
|
346
|
function () {
|
332
|
347
|
conference.statistics.dispose();
|
333
|
348
|
});
|
334
|
|
- RTC.addListener(RTCEvents.AVAILABLE_DEVICES_CHANGED, function (devices) {
|
335
|
|
- conference.room.updateDeviceAvailability(devices);
|
336
|
|
- });
|
337
|
|
- RTC.addListener(StreamEventTypes.TRACK_MUTE_CHANGED, function (track) {
|
338
|
|
- conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_MUTE_CHANGED, track);
|
339
|
|
- });
|
|
349
|
+ // FIXME: Maybe we should move this.
|
|
350
|
+ // RTC.addListener(RTCEvents.AVAILABLE_DEVICES_CHANGED, function (devices) {
|
|
351
|
+ // conference.room.updateDeviceAvailability(devices);
|
|
352
|
+ // });
|
340
|
353
|
}
|
341
|
354
|
}
|
342
|
355
|
|
|
@@ -1049,26 +1062,27 @@ module.exports = DataChannels;
|
1049
|
1062
|
var JitsiTrack = require("./JitsiTrack");
|
1050
|
1063
|
var StreamEventTypes = require("../../service/RTC/StreamEventTypes");
|
1051
|
1064
|
var RTCBrowserType = require("./RTCBrowserType");
|
|
1065
|
+var RTC = require("./RTCUtils");
|
1052
|
1066
|
|
1053
|
1067
|
/**
|
1054
|
1068
|
* Represents a single media track (either audio or video).
|
1055
|
1069
|
* @constructor
|
1056
|
1070
|
*/
|
1057
|
|
-function JitsiLocalTrack(RTC, stream, eventEmitter, videoType,
|
|
1071
|
+function JitsiLocalTrack(stream, videoType,
|
1058
|
1072
|
resolution)
|
1059
|
1073
|
{
|
1060
|
|
- JitsiTrack.call(this, RTC, stream,
|
1061
|
|
- function () {
|
1062
|
|
- if(!self.dontFireRemoveEvent)
|
1063
|
|
- self.eventEmitter.emit(
|
1064
|
|
- StreamEventTypes.EVENT_TYPE_LOCAL_ENDED, self);
|
1065
|
|
- self.dontFireRemoveEvent = false;
|
1066
|
|
- });
|
1067
|
|
- this.eventEmitter = eventEmitter;
|
1068
|
1074
|
this.videoType = videoType;
|
1069
|
1075
|
this.dontFireRemoveEvent = false;
|
1070
|
1076
|
this.resolution = resolution;
|
1071
|
1077
|
var self = this;
|
|
1078
|
+ JitsiTrack.call(this, null, stream,
|
|
1079
|
+ function () {
|
|
1080
|
+ if(!self.dontFireRemoveEvent && self.rtc)
|
|
1081
|
+ self.rtc.eventEmitter.emit(
|
|
1082
|
+ StreamEventTypes.EVENT_TYPE_LOCAL_ENDED, self);
|
|
1083
|
+ self.dontFireRemoveEvent = false;
|
|
1084
|
+ });
|
|
1085
|
+
|
1072
|
1086
|
}
|
1073
|
1087
|
|
1074
|
1088
|
JitsiLocalTrack.prototype = Object.create(JitsiTrack.prototype);
|
|
@@ -1099,26 +1113,24 @@ JitsiLocalTrack.prototype._setMute = function (mute) {
|
1099
|
1113
|
this.rtc.room.setAudioMute(mute);
|
1100
|
1114
|
else
|
1101
|
1115
|
this.rtc.room.setVideoMute(mute);
|
1102
|
|
- this.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, this);
|
|
1116
|
+ this.rtc.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, this);
|
1103
|
1117
|
} else {
|
1104
|
1118
|
if (mute) {
|
1105
|
1119
|
this.dontFireRemoveEvent = true;
|
1106
|
1120
|
this.rtc.room.removeStream(this.stream);
|
1107
|
|
- this.rtc.stopMediaStream(this.stream);
|
|
1121
|
+ RTC.stopMediaStream(this.stream);
|
1108
|
1122
|
if(isAudio)
|
1109
|
1123
|
this.rtc.room.setAudioMute(mute);
|
1110
|
1124
|
else
|
1111
|
1125
|
this.rtc.room.setVideoMute(mute);
|
1112
|
1126
|
this.stream = null;
|
1113
|
|
- this.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, this);
|
|
1127
|
+ this.rtc.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, this);
|
1114
|
1128
|
//FIXME: Maybe here we should set the SRC for the containers to something
|
1115
|
1129
|
} else {
|
1116
|
1130
|
var self = this;
|
1117
|
|
- var RTC = require("./RTCUtils");
|
1118
|
1131
|
RTC.obtainAudioAndVideoPermissions({
|
1119
|
1132
|
devices: (isAudio ? ["audio"] : ["video"]),
|
1120
|
|
- resolution: self.resolution,
|
1121
|
|
- dontCreateJitsiTrack: true})
|
|
1133
|
+ resolution: self.resolution})
|
1122
|
1134
|
.then(function (streams) {
|
1123
|
1135
|
var stream = null;
|
1124
|
1136
|
for(var i = 0; i < streams.length; i++) {
|
|
@@ -1144,7 +1156,7 @@ JitsiLocalTrack.prototype._setMute = function (mute) {
|
1144
|
1156
|
self.rtc.room.setAudioMute(mute);
|
1145
|
1157
|
else
|
1146
|
1158
|
self.rtc.room.setVideoMute(mute);
|
1147
|
|
- self.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, self);
|
|
1159
|
+ self.rtc.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, self);
|
1148
|
1160
|
});
|
1149
|
1161
|
});
|
1150
|
1162
|
}
|
|
@@ -1472,6 +1484,22 @@ var MediaStreamType = require("../../service/RTC/MediaStreamTypes");
|
1472
|
1484
|
var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
|
1473
|
1485
|
var RTCEvents = require("../../service/RTC/RTCEvents.js");
|
1474
|
1486
|
|
|
1487
|
+function createLocalTracks(streams) {
|
|
1488
|
+ var newStreams = []
|
|
1489
|
+ for (var i = 0; i < streams.length; i++) {
|
|
1490
|
+ var localStream = new JitsiLocalTrack(streams[i].stream,
|
|
1491
|
+ streams[i].videoType, streams[i].resolution);
|
|
1492
|
+ newStreams.push(localStream);
|
|
1493
|
+ if (streams[i].isMuted === true)
|
|
1494
|
+ localStream.setMute(true);
|
|
1495
|
+ //FIXME:
|
|
1496
|
+ // var eventType = StreamEventTypes.EVENT_TYPE_LOCAL_CREATED;
|
|
1497
|
+ //
|
|
1498
|
+ // eventEmitter.emit(eventType, localStream);
|
|
1499
|
+ }
|
|
1500
|
+ return newStreams;
|
|
1501
|
+}
|
|
1502
|
+
|
1475
|
1503
|
function RTC(room, options) {
|
1476
|
1504
|
this.room = room;
|
1477
|
1505
|
this.localStreams = [];
|
|
@@ -1504,7 +1532,7 @@ function RTC(room, options) {
|
1504
|
1532
|
* @returns {*} Promise object that will receive the new JitsiTracks
|
1505
|
1533
|
*/
|
1506
|
1534
|
RTC.obtainAudioAndVideoPermissions = function (options) {
|
1507
|
|
- return RTCUtils.obtainAudioAndVideoPermissions(options);
|
|
1535
|
+ return RTCUtils.obtainAudioAndVideoPermissions(options).then(createLocalTracks);
|
1508
|
1536
|
}
|
1509
|
1537
|
|
1510
|
1538
|
RTC.prototype.onIncommingCall = function(event) {
|
|
@@ -1884,8 +1912,6 @@ var RTCEvents = require("../../service/RTC/RTCEvents");
|
1884
|
1912
|
var AdapterJS = require("./adapter.screenshare");
|
1885
|
1913
|
var SDPUtil = require("../xmpp/SDPUtil");
|
1886
|
1914
|
var EventEmitter = require("events");
|
1887
|
|
-var JitsiLocalTrack = require("./JitsiLocalTrack");
|
1888
|
|
-var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
|
1889
|
1915
|
var screenObtainer = require("./ScreenObtainer");
|
1890
|
1916
|
var JitsiMeetJSError = require("../../JitsiMeetJSErrors");
|
1891
|
1917
|
|
|
@@ -2219,22 +2245,6 @@ function obtainDevices(options) {
|
2219
|
2245
|
}
|
2220
|
2246
|
|
2221
|
2247
|
|
2222
|
|
-function createLocalTracks(streams) {
|
2223
|
|
- var newStreams = []
|
2224
|
|
- for (var i = 0; i < streams.length; i++) {
|
2225
|
|
- var localStream = new JitsiLocalTrack(null, streams[i].stream,
|
2226
|
|
- eventEmitter, streams[i].videoType, streams[i].resolution);
|
2227
|
|
- newStreams.push(localStream);
|
2228
|
|
- if (streams[i].isMuted === true)
|
2229
|
|
- localStream.setMute(true);
|
2230
|
|
-
|
2231
|
|
- var eventType = StreamEventTypes.EVENT_TYPE_LOCAL_CREATED;
|
2232
|
|
-
|
2233
|
|
- eventEmitter.emit(eventType, localStream);
|
2234
|
|
- }
|
2235
|
|
- return newStreams;
|
2236
|
|
-}
|
2237
|
|
-
|
2238
|
2248
|
/**
|
2239
|
2249
|
* Handles the newly created Media Streams.
|
2240
|
2250
|
* @param streams the new Media Streams
|
|
@@ -2257,7 +2267,7 @@ function handleLocalStream(streams, resolution) {
|
2257
|
2267
|
}
|
2258
|
2268
|
|
2259
|
2269
|
var videoTracks = audioVideo.getVideoTracks();
|
2260
|
|
- if(audioTracks.length) {
|
|
2270
|
+ if(videoTracks.length) {
|
2261
|
2271
|
videoStream = new webkitMediaStream();
|
2262
|
2272
|
for (i = 0; i < videoTracks.length; i++) {
|
2263
|
2273
|
videoStream.addTrack(videoTracks[i]);
|
|
@@ -2520,15 +2530,13 @@ var RTCUtils = {
|
2520
|
2530
|
options = options || {};
|
2521
|
2531
|
return new Promise(function (resolve, reject) {
|
2522
|
2532
|
var successCallback = function (stream) {
|
2523
|
|
- var streams = handleLocalStream(stream, options.resolution);
|
2524
|
|
- resolve(options.dontCreateJitsiTracks?
|
2525
|
|
- streams: createLocalTracks(streams));
|
|
2533
|
+ resolve(handleLocalStream(stream, options.resolution));
|
2526
|
2534
|
};
|
2527
|
2535
|
|
2528
|
2536
|
options.devices = options.devices || ['audio', 'video'];
|
2529
|
2537
|
if(!screenObtainer.isSupported()
|
2530
|
2538
|
&& options.devices.indexOf("desktop") !== -1){
|
2531
|
|
- options.devices.splice(options.devices.indexOf("desktop"), 1);
|
|
2539
|
+ reject(new Error("Desktop sharing is not supported!"));
|
2532
|
2540
|
}
|
2533
|
2541
|
if (RTCBrowserType.isFirefox() ||
|
2534
|
2542
|
RTCBrowserType.isTemasysPluginUsed()) {
|
|
@@ -2640,7 +2648,7 @@ var RTCUtils = {
|
2640
|
2648
|
module.exports = RTCUtils;
|
2641
|
2649
|
|
2642
|
2650
|
}).call(this,"/modules/RTC/RTCUtils.js")
|
2643
|
|
-},{"../../JitsiMeetJSErrors":8,"../../service/RTC/RTCEvents":81,"../../service/RTC/Resolutions":82,"../../service/RTC/StreamEventTypes.js":83,"../xmpp/SDPUtil":30,"./JitsiLocalTrack":11,"./RTCBrowserType":15,"./ScreenObtainer":17,"./adapter.screenshare":18,"events":41,"jitsi-meet-logger":45}],17:[function(require,module,exports){
|
|
2651
|
+},{"../../JitsiMeetJSErrors":8,"../../service/RTC/RTCEvents":81,"../../service/RTC/Resolutions":82,"../xmpp/SDPUtil":30,"./RTCBrowserType":15,"./ScreenObtainer":17,"./adapter.screenshare":18,"events":41,"jitsi-meet-logger":45}],17:[function(require,module,exports){
|
2644
|
2652
|
(function (__filename){
|
2645
|
2653
|
/* global chrome, $, alert */
|
2646
|
2654
|
/* jshint -W003 */
|
|
@@ -8897,6 +8905,9 @@ module.exports = SDPDiffer;
|
8897
|
8905
|
(function (__filename){
|
8898
|
8906
|
|
8899
|
8907
|
var logger = require("jitsi-meet-logger").getLogger(__filename);
|
|
8908
|
+var RTCBrowserType = require("../RTC/RTCBrowserType");
|
|
8909
|
+
|
|
8910
|
+
|
8900
|
8911
|
SDPUtil = {
|
8901
|
8912
|
filter_special_chars: function (text) {
|
8902
|
8913
|
return text.replace(/[\\\/\{,\}\+]/g, "");
|
|
@@ -9256,8 +9267,9 @@ SDPUtil = {
|
9256
|
9267
|
}
|
9257
|
9268
|
};
|
9258
|
9269
|
module.exports = SDPUtil;
|
|
9270
|
+
|
9259
|
9271
|
}).call(this,"/modules/xmpp/SDPUtil.js")
|
9260
|
|
-},{"jitsi-meet-logger":45}],31:[function(require,module,exports){
|
|
9272
|
+},{"../RTC/RTCBrowserType":15,"jitsi-meet-logger":45}],31:[function(require,module,exports){
|
9261
|
9273
|
(function (__filename){
|
9262
|
9274
|
/* global $ */
|
9263
|
9275
|
var RTC = require('../RTC/RTC');
|
|
@@ -9286,7 +9298,7 @@ function TraceablePeerConnection(ice_config, constraints, session) {
|
9286
|
9298
|
var Interop = require('sdp-interop').Interop;
|
9287
|
9299
|
this.interop = new Interop();
|
9288
|
9300
|
var Simulcast = require('sdp-simulcast');
|
9289
|
|
- this.simulcast = new Simulcast({numOfLayers: 3, explodeRemoteSimulcast: false});
|
|
9301
|
+ this.simulcast = new Simulcast({numOfLayers: 2, explodeRemoteSimulcast: false});
|
9290
|
9302
|
|
9291
|
9303
|
// override as desired
|
9292
|
9304
|
this.trace = function (what, info) {
|
|
@@ -9482,7 +9494,7 @@ if (TraceablePeerConnection.prototype.__defineGetter__ !== undefined) {
|
9482
|
9494
|
// FIXME this should probably be after the Unified Plan -> Plan B
|
9483
|
9495
|
// transformation.
|
9484
|
9496
|
desc = SSRCReplacement.mungeLocalVideoSSRC(desc);
|
9485
|
|
-
|
|
9497
|
+
|
9486
|
9498
|
this.trace('getLocalDescription::preTransform', dumpSDP(desc));
|
9487
|
9499
|
|
9488
|
9500
|
// if we're running on FF, transform to Plan B first.
|
|
@@ -9705,7 +9717,6 @@ TraceablePeerConnection.prototype.getStats = function(callback, errback) {
|
9705
|
9717
|
|
9706
|
9718
|
module.exports = TraceablePeerConnection;
|
9707
|
9719
|
|
9708
|
|
-
|
9709
|
9720
|
}).call(this,"/modules/xmpp/TraceablePeerConnection.js")
|
9710
|
9721
|
},{"../../service/xmpp/XMPPEvents":88,"../RTC/RTC":14,"../RTC/RTCBrowserType.js":15,"./LocalSSRCReplacement":27,"jitsi-meet-logger":45,"sdp-interop":63,"sdp-simulcast":70,"sdp-transform":77}],32:[function(require,module,exports){
|
9711
|
9722
|
(function (__filename){
|