瀏覽代碼

Fixes mutes

dev1
hristoterezov 10 年之前
父節點
當前提交
b638495de4
共有 7 個檔案被更改,包括 182 行新增161 行删除
  1. 49
    36
      JitsiConference.js
  2. 92
    81
      lib-jitsi-meet.js
  3. 15
    16
      modules/RTC/JitsiLocalTrack.js
  4. 17
    1
      modules/RTC/RTC.js
  5. 3
    23
      modules/RTC/RTCUtils.js
  6. 4
    1
      modules/xmpp/SDPUtil.js
  7. 2
    3
      modules/xmpp/TraceablePeerConnection.js

+ 49
- 36
JitsiConference.js 查看文件

@@ -249,26 +249,61 @@ function setupListeners(conference) {
249 249
     });
250 250
     conference.room.addListener(XMPPEvents.REMOTE_STREAM_RECEIVED,
251 251
         conference.rtc.createRemoteStream.bind(conference.rtc));
252
-    conference.rtc.addListener(StreamEventTypes.EVENT_TYPE_REMOTE_CREATED, function (stream) {
253
-        conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED, stream);
252
+
253
+    conference.room.addListener(XMPPEvents.MUC_JOINED, function () {
254
+        conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_JOINED);
255
+    });
256
+//    FIXME
257
+//    conference.room.addListener(XMPPEvents.MUC_JOINED, function () {
258
+//        conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_LEFT);
259
+//    });
260
+
261
+    conference.room.addListener(XMPPEvents.MUC_MEMBER_JOINED,
262
+        conference.onMemberJoined.bind(conference));
263
+    conference.room.addListener(XMPPEvents.MUC_MEMBER_LEFT,function (jid) {
264
+        conference.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT,
265
+            Strophe.getResourceFromJid(jid));
266
+    });
267
+
268
+    conference.room.addListener(XMPPEvents.DISPLAY_NAME_CHANGED,
269
+        function (from, displayName) {
270
+            conference.eventEmitter.emit(
271
+                JitsiConferenceEvents.DISPLAY_NAME_CHANGED,
272
+                Strophe.getResourceFromJid(from), displayName);
273
+        });
274
+
275
+    conference.room.addListener(XMPPEvents.CONNECTION_INTERRUPTED,
276
+        function () {
277
+            conference.eventEmitter.emit(
278
+                JitsiConferenceEvents.CONNECTION_INTERRUPTED);
279
+        });
280
+
281
+    conference.room.addListener(XMPPEvents.CONNECTION_RESTORED, function () {
282
+        conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_RESTORED);
254 283
     });
284
+    conference.room.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function() {
285
+        conference.eventEmitter.emit(JitsiConferenceEvents.SETUP_FAILED);
286
+    });
287
+
288
+    conference.rtc.addListener(StreamEventTypes.EVENT_TYPE_REMOTE_CREATED,
289
+        function (stream) {
290
+            conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED, stream);
291
+        });
292
+
293
+//FIXME: Maybe remove event should not be associated with the conference.
255 294
     conference.rtc.addListener(StreamEventTypes.EVENT_TYPE_REMOTE_ENDED, function (stream) {
256 295
         conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED, stream);
257 296
     });
297
+//FIXME: Maybe remove event should not be associated with the conference.
258 298
     conference.rtc.addListener(StreamEventTypes.EVENT_TYPE_LOCAL_ENDED, function (stream) {
259 299
         conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED, stream);
260 300
         conference.removeTrack(stream);
261 301
     });
302
+
262 303
     conference.rtc.addListener(StreamEventTypes.TRACK_MUTE_CHANGED, function (track) {
263 304
         conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_MUTE_CHANGED, track);
264 305
     });
265
-    conference.room.addListener(XMPPEvents.MUC_JOINED, function () {
266
-        conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_JOINED);
267
-    });
268
-//    FIXME
269
-//    conference.room.addListener(XMPPEvents.MUC_JOINED, function () {
270
-//        conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_LEFT);
271
-//    });
306
+
272 307
     conference.rtc.addListener(RTCEvents.DOMINANTSPEAKER_CHANGED, function (id) {
273 308
         if(conference.lastActiveSpeaker !== id && conference.room) {
274 309
             conference.lastActiveSpeaker = id;
@@ -286,28 +321,8 @@ function setupListeners(conference) {
286 321
                 lastNEndpoints, endpointsEnteringLastN);
287 322
         });
288 323
 
289
-    conference.room.addListener(XMPPEvents.MUC_MEMBER_JOINED, conference.onMemberJoined.bind(conference));
290
-    conference.room.addListener(XMPPEvents.MUC_MEMBER_LEFT,function (jid) {
291
-        conference.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT, Strophe.getResourceFromJid(jid));
292
-    });
293
-
294
-    conference.room.addListener(XMPPEvents.DISPLAY_NAME_CHANGED, function (from, displayName) {
295
-        conference.eventEmitter.emit(JitsiConferenceEvents.DISPLAY_NAME_CHANGED,
296
-            Strophe.getResourceFromJid(from), displayName);
297
-    });
298
-
299
-    conference.room.addListener(XMPPEvents.CONNECTION_INTERRUPTED, function () {
300
-        conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_INTERRUPTED);
301
-    });
302
-
303
-    conference.room.addListener(XMPPEvents.CONNECTION_RESTORED, function () {
304
-        conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_RESTORED);
305
-    });
306
-    conference.room.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function () {
307
-        conference.eventEmitter.emit(JitsiConferenceEvents.SETUP_FAILED);
308
-    });
309
-
310 324
     if(conference.statistics) {
325
+        //FIXME: Maybe remove event should not be associated with the conference.
311 326
         conference.statistics.addAudioLevelListener(function (ssrc, level) {
312 327
             var userId = null;
313 328
             if (ssrc === Statistics.LOCAL_JID) {
@@ -329,12 +344,10 @@ function setupListeners(conference) {
329 344
             function () {
330 345
                 conference.statistics.dispose();
331 346
             });
332
-        RTC.addListener(RTCEvents.AVAILABLE_DEVICES_CHANGED, function (devices) {
333
-            conference.room.updateDeviceAvailability(devices);
334
-        });
335
-        RTC.addListener(StreamEventTypes.TRACK_MUTE_CHANGED, function (track) {
336
-            conference.eventEmitter.emit(JitsiConferenceEvents.TRACK_MUTE_CHANGED, track);
337
-        });
347
+        // FIXME: Maybe we should move this.
348
+        // RTC.addListener(RTCEvents.AVAILABLE_DEVICES_CHANGED, function (devices) {
349
+        //     conference.room.updateDeviceAvailability(devices);
350
+        // });
338 351
     }
339 352
 }
340 353
 

+ 92
- 81
lib-jitsi-meet.js 查看文件

@@ -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){

+ 15
- 16
modules/RTC/JitsiLocalTrack.js 查看文件

@@ -1,26 +1,27 @@
1 1
 var JitsiTrack = require("./JitsiTrack");
2 2
 var StreamEventTypes = require("../../service/RTC/StreamEventTypes");
3 3
 var RTCBrowserType = require("./RTCBrowserType");
4
+var RTC = require("./RTCUtils");
4 5
 
5 6
 /**
6 7
  * Represents a single media track (either audio or video).
7 8
  * @constructor
8 9
  */
9
-function JitsiLocalTrack(RTC, stream, eventEmitter, videoType,
10
+function JitsiLocalTrack(stream, videoType,
10 11
   resolution)
11 12
 {
12
-    JitsiTrack.call(this, RTC, stream,
13
-        function () {
14
-            if(!self.dontFireRemoveEvent)
15
-                self.eventEmitter.emit(
16
-                    StreamEventTypes.EVENT_TYPE_LOCAL_ENDED, self);
17
-            self.dontFireRemoveEvent = false;
18
-        });
19
-    this.eventEmitter = eventEmitter;
20 13
     this.videoType = videoType;
21 14
     this.dontFireRemoveEvent = false;
22 15
     this.resolution = resolution;
23 16
     var self = this;
17
+    JitsiTrack.call(this, null, stream,
18
+        function () {
19
+            if(!self.dontFireRemoveEvent && self.rtc)
20
+                self.rtc.eventEmitter.emit(
21
+                    StreamEventTypes.EVENT_TYPE_LOCAL_ENDED, self);
22
+            self.dontFireRemoveEvent = false;
23
+        });
24
+
24 25
 }
25 26
 
26 27
 JitsiLocalTrack.prototype = Object.create(JitsiTrack.prototype);
@@ -51,26 +52,24 @@ JitsiLocalTrack.prototype._setMute = function (mute) {
51 52
             this.rtc.room.setAudioMute(mute);
52 53
         else
53 54
             this.rtc.room.setVideoMute(mute);
54
-        this.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, this);
55
+        this.rtc.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, this);
55 56
     } else {
56 57
         if (mute) {
57 58
             this.dontFireRemoveEvent = true;
58 59
             this.rtc.room.removeStream(this.stream);
59
-            this.rtc.stopMediaStream(this.stream);
60
+            RTC.stopMediaStream(this.stream);
60 61
             if(isAudio)
61 62
                 this.rtc.room.setAudioMute(mute);
62 63
             else
63 64
                 this.rtc.room.setVideoMute(mute);
64 65
             this.stream = null;
65
-            this.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, this);
66
+            this.rtc.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, this);
66 67
             //FIXME: Maybe here we should set the SRC for the containers to something
67 68
         } else {
68 69
             var self = this;
69
-            var RTC = require("./RTCUtils");
70 70
             RTC.obtainAudioAndVideoPermissions({
71 71
                 devices: (isAudio ? ["audio"] : ["video"]),
72
-                resolution: self.resolution,
73
-                dontCreateJitsiTrack: true})
72
+                resolution: self.resolution})
74 73
                 .then(function (streams) {
75 74
                     var stream = null;
76 75
                     for(var i = 0; i < streams.length; i++) {
@@ -96,7 +95,7 @@ JitsiLocalTrack.prototype._setMute = function (mute) {
96 95
                                 self.rtc.room.setAudioMute(mute);
97 96
                             else
98 97
                                 self.rtc.room.setVideoMute(mute);
99
-                            self.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, self);
98
+                            self.rtc.eventEmitter.emit(StreamEventTypes.TRACK_MUTE_CHANGED, self);
100 99
                         });
101 100
                 });
102 101
         }

+ 17
- 1
modules/RTC/RTC.js 查看文件

@@ -12,6 +12,22 @@ var MediaStreamType = require("../../service/RTC/MediaStreamTypes");
12 12
 var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
13 13
 var RTCEvents = require("../../service/RTC/RTCEvents.js");
14 14
 
15
+function createLocalTracks(streams) {
16
+    var newStreams = []
17
+    for (var i = 0; i < streams.length; i++) {
18
+        var localStream = new JitsiLocalTrack(streams[i].stream,
19
+            streams[i].videoType, streams[i].resolution);
20
+        newStreams.push(localStream);
21
+        if (streams[i].isMuted === true)
22
+            localStream.setMute(true);
23
+        //FIXME:
24
+        // var eventType = StreamEventTypes.EVENT_TYPE_LOCAL_CREATED;
25
+        //
26
+        // eventEmitter.emit(eventType, localStream);
27
+    }
28
+    return newStreams;
29
+}
30
+
15 31
 function RTC(room, options) {
16 32
     this.room = room;
17 33
     this.localStreams = [];
@@ -44,7 +60,7 @@ function RTC(room, options) {
44 60
  * @returns {*} Promise object that will receive the new JitsiTracks
45 61
  */
46 62
 RTC.obtainAudioAndVideoPermissions = function (options) {
47
-    return RTCUtils.obtainAudioAndVideoPermissions(options);
63
+    return RTCUtils.obtainAudioAndVideoPermissions(options).then(createLocalTracks);
48 64
 }
49 65
 
50 66
 RTC.prototype.onIncommingCall = function(event) {

+ 3
- 23
modules/RTC/RTCUtils.js 查看文件

@@ -7,8 +7,6 @@ var RTCEvents = require("../../service/RTC/RTCEvents");
7 7
 var AdapterJS = require("./adapter.screenshare");
8 8
 var SDPUtil = require("../xmpp/SDPUtil");
9 9
 var EventEmitter = require("events");
10
-var JitsiLocalTrack = require("./JitsiLocalTrack");
11
-var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
12 10
 var screenObtainer = require("./ScreenObtainer");
13 11
 var JitsiMeetJSError = require("../../JitsiMeetJSErrors");
14 12
 
@@ -342,22 +340,6 @@ function obtainDevices(options) {
342 340
 }
343 341
 
344 342
 
345
-function createLocalTracks(streams) {
346
-    var newStreams = []
347
-    for (var i = 0; i < streams.length; i++) {
348
-        var localStream = new JitsiLocalTrack(null, streams[i].stream,
349
-            eventEmitter, streams[i].videoType, streams[i].resolution);
350
-        newStreams.push(localStream);
351
-        if (streams[i].isMuted === true)
352
-            localStream.setMute(true);
353
-
354
-        var eventType = StreamEventTypes.EVENT_TYPE_LOCAL_CREATED;
355
-
356
-        eventEmitter.emit(eventType, localStream);
357
-    }
358
-    return newStreams;
359
-}
360
-
361 343
 /**
362 344
  * Handles the newly created Media Streams.
363 345
  * @param streams the new Media Streams
@@ -380,7 +362,7 @@ function handleLocalStream(streams, resolution) {
380 362
             }
381 363
 
382 364
             var videoTracks = audioVideo.getVideoTracks();
383
-            if(audioTracks.length) {
365
+            if(videoTracks.length) {
384 366
                 videoStream = new webkitMediaStream();
385 367
                 for (i = 0; i < videoTracks.length; i++) {
386 368
                     videoStream.addTrack(videoTracks[i]);
@@ -643,15 +625,13 @@ var RTCUtils = {
643 625
         options = options || {};
644 626
         return new Promise(function (resolve, reject) {
645 627
             var successCallback = function (stream) {
646
-                var streams = handleLocalStream(stream, options.resolution);
647
-                resolve(options.dontCreateJitsiTracks?
648
-                    streams: createLocalTracks(streams));
628
+                resolve(handleLocalStream(stream, options.resolution));
649 629
             };
650 630
 
651 631
             options.devices = options.devices || ['audio', 'video'];
652 632
             if(!screenObtainer.isSupported()
653 633
                 && options.devices.indexOf("desktop") !== -1){
654
-                options.devices.splice(options.devices.indexOf("desktop"), 1);
634
+                reject(new Error("Desktop sharing is not supported!"));
655 635
             }
656 636
             if (RTCBrowserType.isFirefox() ||
657 637
                 RTCBrowserType.isTemasysPluginUsed()) {

+ 4
- 1
modules/xmpp/SDPUtil.js 查看文件

@@ -1,5 +1,8 @@
1 1
 
2 2
 var logger = require("jitsi-meet-logger").getLogger(__filename);
3
+var RTCBrowserType = require("../RTC/RTCBrowserType");
4
+
5
+
3 6
 SDPUtil = {
4 7
     filter_special_chars: function (text) {
5 8
         return text.replace(/[\\\/\{,\}\+]/g, "");
@@ -358,4 +361,4 @@ SDPUtil = {
358 361
         return line + '\r\n';
359 362
     }
360 363
 };
361
-module.exports = SDPUtil;
364
+module.exports = SDPUtil;

+ 2
- 3
modules/xmpp/TraceablePeerConnection.js 查看文件

@@ -25,7 +25,7 @@ function TraceablePeerConnection(ice_config, constraints, session) {
25 25
     var Interop = require('sdp-interop').Interop;
26 26
     this.interop = new Interop();
27 27
     var Simulcast = require('sdp-simulcast');
28
-    this.simulcast = new Simulcast({numOfLayers: 3, explodeRemoteSimulcast: false});
28
+    this.simulcast = new Simulcast({numOfLayers: 2, explodeRemoteSimulcast: false});
29 29
 
30 30
     // override as desired
31 31
     this.trace = function (what, info) {
@@ -221,7 +221,7 @@ if (TraceablePeerConnection.prototype.__defineGetter__ !== undefined) {
221 221
             // FIXME this should probably be after the Unified Plan -> Plan B
222 222
             // transformation.
223 223
             desc = SSRCReplacement.mungeLocalVideoSSRC(desc);
224
-            
224
+
225 225
             this.trace('getLocalDescription::preTransform', dumpSDP(desc));
226 226
 
227 227
             // if we're running on FF, transform to Plan B first.
@@ -443,4 +443,3 @@ TraceablePeerConnection.prototype.getStats = function(callback, errback) {
443 443
 };
444 444
 
445 445
 module.exports = TraceablePeerConnection;
446
-

Loading…
取消
儲存