Sfoglia il codice sorgente

JitsiMeetJS.init returns Promise.

dev1
hristoterezov 9 anni fa
parent
commit
6772975134
7 ha cambiato i file con 419 aggiunte e 369 eliminazioni
  1. 3
    3
      JitsiConferenceEvents.js
  2. 7
    3
      JitsiMeetJS.js
  3. 5
    6
      JitsiTrackErrors.js
  4. 16
    0
      JitsiTrackEvents.js
  5. 10
    6
      doc/example/example.js
  6. 257
    233
      lib-jitsi-meet.js
  7. 121
    118
      modules/RTC/RTCUtils.js

+ 3
- 3
JitsiConferenceEvents.js Vedi File

@@ -8,7 +8,7 @@ var JitsiConferenceEvents = {
8 8
      */
9 9
     TRACK_ADDED: "conference.trackAdded",
10 10
     /**
11
-     * The media track was removed to the conference.
11
+     * The media track was removed from the conference.
12 12
      */
13 13
     TRACK_REMOVED: "conference.trackRemoved",
14 14
     /**
@@ -48,11 +48,11 @@ var JitsiConferenceEvents = {
48 48
      */
49 49
     IN_LAST_N_CHANGED: "conference.lastNEndpointsChanged",
50 50
     /**
51
-     * A media track mute status was changed.
51
+     * A media track ( attached to the conference) mute status was changed.
52 52
      */
53 53
     TRACK_MUTE_CHANGED: "conference.trackMuteChanged",
54 54
     /**
55
-     * Audio levels of a media track was changed.
55
+     * Audio levels of a media track ( attached to the conference) was changed.
56 56
      */
57 57
     TRACK_AUDIO_LEVEL_CHANGED: "conference.audioLevelsChanged",
58 58
     /**

+ 7
- 3
JitsiMeetJS.js Vedi File

@@ -3,6 +3,8 @@ var JitsiConferenceEvents = require("./JitsiConferenceEvents");
3 3
 var JitsiConnectionEvents = require("./JitsiConnectionEvents");
4 4
 var JitsiConnectionErrors = require("./JitsiConnectionErrors");
5 5
 var JitsiConferenceErrors = require("./JitsiConferenceErrors");
6
+var JitsiTrackEvents = require("./JitsiTrackEvents");
7
+var JitsiTrackErrors = require("./JitsiTrackErrors");
6 8
 var Logger = require("jitsi-meet-logger");
7 9
 var RTC = require("./modules/RTC/RTC");
8 10
 
@@ -14,15 +16,17 @@ var LibJitsiMeet = {
14 16
     JitsiConnection: JitsiConnection,
15 17
     events: {
16 18
         conference: JitsiConferenceEvents,
17
-        connection: JitsiConnectionEvents
19
+        connection: JitsiConnectionEvents,
20
+        track: JitsiTrackEvents
18 21
     },
19 22
     errors: {
20 23
         conference: JitsiConferenceErrors,
21
-        connection: JitsiConnectionErrors
24
+        connection: JitsiConnectionErrors,
25
+        track: JitsiTrackErrors
22 26
     },
23 27
     logLevels: Logger.levels,
24 28
     init: function (options) {
25
-        RTC.init(options || {});
29
+        return RTC.init(options || {});
26 30
     },
27 31
     setLogLevel: function (level) {
28 32
         Logger.setLogLevel(level);

JitsiMeetJSErrors.js → JitsiTrackErrors.js Vedi File

@@ -1,7 +1,6 @@
1 1
 module.exports = {
2 2
     /**
3
-     * Returns JitsiMeetJSError based on the error object passed by GUM
4
-     * @param error the error
3
+     * Returns JitsiTrackErrors based on the error object passed by GUM * @param error the error
5 4
      * @param {Object} options the options object given to GUM.
6 5
      */
7 6
     parseError: function (error, options) {
@@ -14,11 +13,11 @@ module.exports = {
14 13
             error.constraintName == "minHeight" ||
15 14
             error.constraintName == "maxHeight") &&
16 15
             options.devices.indexOf("video") !== -1) {
17
-                return this.GET_TRACKS_RESOLUTION;
16
+                return this.UNSUPPORTED_RESOLUTION;
18 17
         } else {
19
-            return this.GET_TRACKS_GENERAL;
18
+            return this.GENERAL;
20 19
         }
21 20
     },
22
-    GET_TRACKS_RESOLUTION: "gum.get_tracks_resolution",
23
-    GET_TRACKS_GENERAL: "gum.get_tracks_general"
21
+    UNSUPPORTED_RESOLUTION: "gum.unsupported_resolution",
22
+    GENERAL: "gum.general"
24 23
 };

+ 16
- 0
JitsiTrackEvents.js Vedi File

@@ -0,0 +1,16 @@
1
+var JitsiTrackEvents = {
2
+    /**
3
+     * A media track mute status was changed.
4
+     */
5
+    TRACK_MUTE_CHANGED: "track.trackMuteChanged",
6
+    /**
7
+     * Audio levels of a this track was changed.
8
+     */
9
+    TRACK_AUDIO_LEVEL_CHANGED: "track.audioLevelsChanged",
10
+    /**
11
+     * The media track was removed to the conference.
12
+     */
13
+    TRACK_STOPPED: "track.TRACK_STOPPED",
14
+};
15
+
16
+module.exports = JitsiTrackEvents;

+ 10
- 6
doc/example/example.js Vedi File

@@ -29,8 +29,6 @@ function onLocalTracks(tracks)
29 29
             $("body").append("<audio autoplay='1' id='localAudio" + i + "' />");
30 30
             localTracks[i].attach($("#localAudio" + i ));
31 31
         }
32
-
33
-            room.addTrack(localTracks[i]);
34 32
         console.log(localTracks[i]);
35 33
     }
36 34
 }
@@ -58,9 +56,8 @@ function onRemoteTrack(track) {
58 56
  */
59 57
 function onConferenceJoined () {
60 58
     console.log("conference joined!");
61
-    JitsiMeetJS.createLocalTracks({devices: ["audio", "video", "desktop"]}).then(onLocalTracks).catch(function (error) {
62
-        console.log(error);
63
-    });
59
+    for(var i = 0; i < localTracks.length; i++)
60
+        room.addTrack(localTracks[i]);
64 61
 }
65 62
 
66 63
 function onUserLeft(id) {
@@ -147,7 +144,14 @@ var initOptions = {
147 144
     // The URL to the Firefox extension for desktop sharing.
148 145
     desktopSharingFirefoxExtensionURL: null
149 146
 }
150
-JitsiMeetJS.init(initOptions);
147
+JitsiMeetJS.init(initOptions).then(function(){
148
+    JitsiMeetJS.createLocalTracks({devices: ["audio", "video"]}).
149
+        then(onLocalTracks).catch(function (error) {
150
+            console.log(error);
151
+        });
152
+    }).catch(function (error) {
153
+        console.log(error);
154
+    });
151 155
 
152 156
 var connection = null;
153 157
 var room = null;

+ 257
- 233
lib-jitsi-meet.js
File diff soppresso perché troppo grande
Vedi File


+ 121
- 118
modules/RTC/RTCUtils.js Vedi File

@@ -8,7 +8,7 @@ var AdapterJS = require("./adapter.screenshare");
8 8
 var SDPUtil = require("../xmpp/SDPUtil");
9 9
 var EventEmitter = require("events");
10 10
 var screenObtainer = require("./ScreenObtainer");
11
-var JitsiMeetJSError = require("../../JitsiMeetJSErrors");
11
+var JitsiTrackErrors = require("../../JitsiTrackErrors");
12 12
 
13 13
 var eventEmitter = new EventEmitter();
14 14
 
@@ -335,7 +335,7 @@ function obtainDevices(options) {
335 335
         function (error) {
336 336
             logger.error(
337 337
                 "failed to obtain " + device + " stream - stop", error);
338
-            options.errorCallback(JitsiMeetJSError.parseError(error));
338
+            options.errorCallback(JitsiTrackErrors.parseError(error));
339 339
         });
340 340
 }
341 341
 
@@ -396,10 +396,17 @@ function handleLocalStream(streams, resolution) {
396 396
 //Options parameter is to pass config options. Currently uses only "useIPv6".
397 397
 var RTCUtils = {
398 398
     init: function (options) {
399
-        var self = this;
400
-        if (RTCBrowserType.isFirefox()) {
401
-            var FFversion = RTCBrowserType.getFirefoxVersion();
402
-            if (FFversion >= 40) {
399
+        return new Promise(function(resolve, reject) {
400
+            if (RTCBrowserType.isFirefox()) {
401
+                var FFversion = RTCBrowserType.getFirefoxVersion();
402
+                if (FFversion < 40) {
403
+                    logger.error(
404
+                            "Firefox version too old: " + FFversion +
405
+                            ". Required >= 40.");
406
+                    reject(new Error("Firefox version too old: " + FFversion +
407
+                    ". Required >= 40."));
408
+                    return;
409
+                }
403 410
                 this.peerconnection = mozRTCPeerConnection;
404 411
                 this.getUserMedia = wrapGetUserMedia(navigator.mozGetUserMedia.bind(navigator));
405 412
                 this.enumerateDevices = wrapEnumerateDevices(
@@ -441,128 +448,124 @@ var RTCUtils = {
441 448
                 };
442 449
                 RTCSessionDescription = mozRTCSessionDescription;
443 450
                 RTCIceCandidate = mozRTCIceCandidate;
444
-            } else {
445
-                logger.error(
446
-                        "Firefox version too old: " + FFversion + ". Required >= 40.");
447
-                window.location.href = 'unsupported_browser.html';
448
-                return;
449
-            }
450
-
451
-        } else if (RTCBrowserType.isChrome() || RTCBrowserType.isOpera()) {
452
-            this.peerconnection = webkitRTCPeerConnection;
453
-            var getUserMedia = navigator.webkitGetUserMedia.bind(navigator);
454
-            if (navigator.mediaDevices) {
455
-                this.getUserMedia = wrapGetUserMedia(getUserMedia);
456
-                this.enumerateDevices = wrapEnumerateDevices(
457
-                    navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices)
458
-                );
459
-            } else {
460
-                this.getUserMedia = getUserMedia;
461
-                this.enumerateDevices = enumerateDevicesThroughMediaStreamTrack;
462
-            }
463
-            this.attachMediaStream = function (element, stream) {
464
-                element.attr('src', webkitURL.createObjectURL(stream));
465
-            };
466
-            this.getStreamID = function (stream) {
467
-                // streams from FF endpoints have the characters '{' and '}'
468
-                // that make jQuery choke.
469
-                return SDPUtil.filter_special_chars(stream.id);
470
-            };
471
-            this.getVideoSrc = function (element) {
472
-                if (!element)
473
-                    return null;
474
-                return element.getAttribute("src");
475
-            };
476
-            this.setVideoSrc = function (element, src) {
477
-                if (element)
478
-                    element.setAttribute("src", src);
479
-            };
480
-            // DTLS should now be enabled by default but..
481
-            this.pc_constraints = {'optional': [
482
-                {'DtlsSrtpKeyAgreement': 'true'}
483
-            ]};
484
-            if (options.useIPv6) {
485
-                // https://code.google.com/p/webrtc/issues/detail?id=2828
486
-                this.pc_constraints.optional.push({googIPv6: true});
487
-            }
488
-            if (RTCBrowserType.isAndroid()) {
489
-                this.pc_constraints = {}; // disable DTLS on Android
490
-            }
491
-            if (!webkitMediaStream.prototype.getVideoTracks) {
492
-                webkitMediaStream.prototype.getVideoTracks = function () {
493
-                    return this.videoTracks;
451
+            } else if (RTCBrowserType.isChrome() || RTCBrowserType.isOpera()) {
452
+                this.peerconnection = webkitRTCPeerConnection;
453
+                var getUserMedia = navigator.webkitGetUserMedia.bind(navigator);
454
+                if (navigator.mediaDevices) {
455
+                    this.getUserMedia = wrapGetUserMedia(getUserMedia);
456
+                    this.enumerateDevices = wrapEnumerateDevices(
457
+                        navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices)
458
+                    );
459
+                } else {
460
+                    this.getUserMedia = getUserMedia;
461
+                    this.enumerateDevices = enumerateDevicesThroughMediaStreamTrack;
462
+                }
463
+                this.attachMediaStream = function (element, stream) {
464
+                    element.attr('src', webkitURL.createObjectURL(stream));
494 465
                 };
495
-            }
496
-            if (!webkitMediaStream.prototype.getAudioTracks) {
497
-                webkitMediaStream.prototype.getAudioTracks = function () {
498
-                    return this.audioTracks;
466
+                this.getStreamID = function (stream) {
467
+                    // streams from FF endpoints have the characters '{' and '}'
468
+                    // that make jQuery choke.
469
+                    return SDPUtil.filter_special_chars(stream.id);
499 470
                 };
471
+                this.getVideoSrc = function (element) {
472
+                    if (!element)
473
+                        return null;
474
+                    return element.getAttribute("src");
475
+                };
476
+                this.setVideoSrc = function (element, src) {
477
+                    if (element)
478
+                        element.setAttribute("src", src);
479
+                };
480
+                // DTLS should now be enabled by default but..
481
+                this.pc_constraints = {'optional': [
482
+                    {'DtlsSrtpKeyAgreement': 'true'}
483
+                ]};
484
+                if (options.useIPv6) {
485
+                    // https://code.google.com/p/webrtc/issues/detail?id=2828
486
+                    this.pc_constraints.optional.push({googIPv6: true});
487
+                }
488
+                if (RTCBrowserType.isAndroid()) {
489
+                    this.pc_constraints = {}; // disable DTLS on Android
490
+                }
491
+                if (!webkitMediaStream.prototype.getVideoTracks) {
492
+                    webkitMediaStream.prototype.getVideoTracks = function () {
493
+                        return this.videoTracks;
494
+                    };
495
+                }
496
+                if (!webkitMediaStream.prototype.getAudioTracks) {
497
+                    webkitMediaStream.prototype.getAudioTracks = function () {
498
+                        return this.audioTracks;
499
+                    };
500
+                }
500 501
             }
501
-        }
502
-        // Detect IE/Safari
503
-        else if (RTCBrowserType.isTemasysPluginUsed()) {
502
+            // Detect IE/Safari
503
+            else if (RTCBrowserType.isTemasysPluginUsed()) {
504 504
 
505
-            //AdapterJS.WebRTCPlugin.setLogLevel(
506
-            //    AdapterJS.WebRTCPlugin.PLUGIN_LOG_LEVELS.VERBOSE);
505
+                //AdapterJS.WebRTCPlugin.setLogLevel(
506
+                //    AdapterJS.WebRTCPlugin.PLUGIN_LOG_LEVELS.VERBOSE);
507 507
 
508
-            AdapterJS.webRTCReady(function (isPlugin) {
508
+                AdapterJS.webRTCReady(function (isPlugin) {
509 509
 
510
-                self.peerconnection = RTCPeerConnection;
511
-                self.getUserMedia = window.getUserMedia;
512
-                self.enumerateDevices = enumerateDevicesThroughMediaStreamTrack;
513
-                self.attachMediaStream = function (elSel, stream) {
510
+                    self.peerconnection = RTCPeerConnection;
511
+                    self.getUserMedia = window.getUserMedia;
512
+                    self.enumerateDevices = enumerateDevicesThroughMediaStreamTrack;
513
+                    self.attachMediaStream = function (elSel, stream) {
514 514
 
515
-                    if (stream.id === "dummyAudio" || stream.id === "dummyVideo") {
516
-                        return;
517
-                    }
515
+                        if (stream.id === "dummyAudio" || stream.id === "dummyVideo") {
516
+                            return;
517
+                        }
518 518
 
519
-                    attachMediaStream(elSel[0], stream);
520
-                };
521
-                self.getStreamID = function (stream) {
522
-                    var id = SDPUtil.filter_special_chars(stream.label);
523
-                    return id;
524
-                };
525
-                self.getVideoSrc = function (element) {
526
-                    if (!element) {
527
-                        logger.warn("Attempt to get video SRC of null element");
519
+                        attachMediaStream(elSel[0], stream);
520
+                    };
521
+                    self.getStreamID = function (stream) {
522
+                        var id = SDPUtil.filter_special_chars(stream.label);
523
+                        return id;
524
+                    };
525
+                    self.getVideoSrc = function (element) {
526
+                        if (!element) {
527
+                            logger.warn("Attempt to get video SRC of null element");
528
+                            return null;
529
+                        }
530
+                        var children = element.children;
531
+                        for (var i = 0; i !== children.length; ++i) {
532
+                            if (children[i].name === 'streamId') {
533
+                                return children[i].value;
534
+                            }
535
+                        }
536
+                        //logger.info(element.id + " SRC: " + src);
528 537
                         return null;
529
-                    }
530
-                    var children = element.children;
531
-                    for (var i = 0; i !== children.length; ++i) {
532
-                        if (children[i].name === 'streamId') {
533
-                            return children[i].value;
538
+                    };
539
+                    self.setVideoSrc = function (element, src) {
540
+                        //logger.info("Set video src: ", element, src);
541
+                        if (!src) {
542
+                            logger.warn("Not attaching video stream, 'src' is null");
543
+                            return;
534 544
                         }
535
-                    }
536
-                    //logger.info(element.id + " SRC: " + src);
537
-                    return null;
538
-                };
539
-                self.setVideoSrc = function (element, src) {
540
-                    //logger.info("Set video src: ", element, src);
541
-                    if (!src) {
542
-                        logger.warn("Not attaching video stream, 'src' is null");
543
-                        return;
544
-                    }
545
-                    AdapterJS.WebRTCPlugin.WaitForPluginReady();
546
-                    var stream = AdapterJS.WebRTCPlugin.plugin
547
-                        .getStreamWithId(AdapterJS.WebRTCPlugin.pageId, src);
548
-                    attachMediaStream(element, stream);
549
-                };
545
+                        AdapterJS.WebRTCPlugin.WaitForPluginReady();
546
+                        var stream = AdapterJS.WebRTCPlugin.plugin
547
+                            .getStreamWithId(AdapterJS.WebRTCPlugin.pageId, src);
548
+                        attachMediaStream(element, stream);
549
+                    };
550
+
551
+                    onReady(options, self.getUserMediaWithConstraints);
552
+                    resolve();
553
+                });
554
+            } else {
555
+                try {
556
+                    logger.error('Browser does not appear to be WebRTC-capable');
557
+                } catch (e) {
558
+                }
559
+                reject('Browser does not appear to be WebRTC-capable');
560
+                return;
561
+            }
550 562
 
563
+            // Call onReady() if Temasys plugin is not used
564
+            if (!RTCBrowserType.isTemasysPluginUsed()) {
551 565
                 onReady(options, self.getUserMediaWithConstraints);
552
-            });
553
-        } else {
554
-            try {
555
-                logger.error('Browser does not appear to be WebRTC-capable');
556
-            } catch (e) {
566
+                resolve();
557 567
             }
558
-            return;
559
-        }
560
-
561
-        // Call onReady() if Temasys plugin is not used
562
-        if (!RTCBrowserType.isTemasysPluginUsed()) {
563
-            onReady(options, self.getUserMediaWithConstraints);
564
-        }
565
-
568
+        }.bind(this));
566 569
     },
567 570
     /**
568 571
     * @param {string[]} um required user media types
@@ -674,14 +677,14 @@ var RTCUtils = {
674 677
                                             desktopStream: desktopStream});
675 678
                                     }, function (error) {
676 679
                                         reject(
677
-                                            JitsiMeetJSError.parseError(error));
680
+                                            JitsiTrackErrors.parseError(error));
678 681
                                     });
679 682
                             } else {
680 683
                                 successCallback({audioVideo: stream});
681 684
                             }
682 685
                         },
683 686
                         function (error) {
684
-                            reject(JitsiMeetJSError.parseError(error));
687
+                            reject(JitsiTrackErrors.parseError(error));
685 688
                         },
686 689
                         options);
687 690
                 } else if (hasDesktop) {
@@ -690,7 +693,7 @@ var RTCUtils = {
690 693
                             successCallback({desktopStream: stream});
691 694
                         }, function (error) {
692 695
                             reject(
693
-                                JitsiMeetJSError.parseError(error));
696
+                                JitsiTrackErrors.parseError(error));
694 697
                         });
695 698
                 }
696 699
             }

Loading…
Annulla
Salva