Browse Source

feat(RTC): drop support for platforms without the MediaStream constructor

React Native also supports it now.
tags/v0.0.2
Saúl Ibarra Corretgé 5 years ago
parent
commit
c73bc490ed
4 changed files with 63 additions and 134 deletions
  1. 1
    68
      modules/RTC/RTCUtils.js
  2. 1
    32
      modules/RTC/RTCUtils.spec.js
  3. 0
    11
      modules/browser/BrowserCapabilities.js
  4. 61
    23
      package-lock.json

+ 1
- 68
modules/RTC/RTCUtils.js View File

1052
                 new Error('Desktop sharing is not supported!'));
1052
                 new Error('Desktop sharing is not supported!'));
1053
         }
1053
         }
1054
 
1054
 
1055
-        let gumPromise;
1056
-
1057
-        if (browser.supportsMediaStreamConstructor()) {
1058
-            gumPromise = this._getAudioAndVideoStreams(options);
1059
-        } else {
1060
-            // If the MediaStream constructor is not supported, then get tracks
1061
-            // in separate GUM calls in order to keep different tracks separate.
1062
-            gumPromise = this._getAudioAndVideoStreamsSeparately(options);
1063
-        }
1064
-
1065
-        return gumPromise.then(streams =>
1055
+        return this._getAudioAndVideoStreams(options).then(streams =>
1066
             handleLocalStream(streams, options.resolution));
1056
             handleLocalStream(streams, options.resolution));
1067
     }
1057
     }
1068
 
1058
 
1172
         return missingDevices;
1162
         return missingDevices;
1173
     }
1163
     }
1174
 
1164
 
1175
-    /**
1176
-     * Performs separate getUserMedia calls for audio and video instead of in
1177
-     * one call. Will also request desktop if specified.
1178
-     *
1179
-     * @param {Object} options - An object describing how the gUM request should
1180
-     * be executed. See {@link obtainAudioAndVideoPermissions} for full options.
1181
-     * @returns {*} Promise object that will receive the new JitsiTracks on
1182
-     * success or a JitsiTrackError on failure.
1183
-     */
1184
-    _getAudioAndVideoStreamsSeparately(options) {
1185
-        return new Promise((resolve, reject) => {
1186
-            const deviceGUM = {
1187
-                audio: (...args) =>
1188
-                    this.getUserMediaWithConstraints([ 'audio' ], ...args),
1189
-                video: (...args) =>
1190
-                    this.getUserMediaWithConstraints([ 'video' ], ...args),
1191
-                desktop: (...args) =>
1192
-                    screenObtainer.obtainStream(
1193
-                        this._parseDesktopSharingOptions(options), ...args)
1194
-            };
1195
-
1196
-            obtainDevices({
1197
-                options,
1198
-                streams: {},
1199
-                successCallback: resolve,
1200
-                errorCallback: reject,
1201
-                deviceGUM
1202
-            });
1203
-        });
1204
-    }
1205
-
1206
     /**
1165
     /**
1207
      * Returns an object formatted for specifying desktop sharing parameters.
1166
      * Returns an object formatted for specifying desktop sharing parameters.
1208
      *
1167
      *
1590
 
1549
 
1591
 const rtcUtils = new RTCUtils();
1550
 const rtcUtils = new RTCUtils();
1592
 
1551
 
1593
-/**
1594
- *
1595
- * @param context Execution context, containing options and callbacks
1596
- */
1597
-function obtainDevices(context) {
1598
-    if (!context.options.devices || context.options.devices.length === 0) {
1599
-        return context.successCallback(context.streams || {});
1600
-    }
1601
-
1602
-    const device = context.options.devices.splice(0, 1);
1603
-
1604
-    context.deviceGUM[device](context.options)
1605
-        .then(stream => {
1606
-            context.streams = context.streams || {};
1607
-            context.streams[device] = stream;
1608
-            obtainDevices(context);
1609
-        }, error => {
1610
-            Object.keys(context.streams).forEach(
1611
-                d => rtcUtils.stopMediaStream(context.streams[d]));
1612
-            logger.error(
1613
-                `failed to obtain ${device} stream - stop`, error);
1614
-
1615
-            context.errorCallback(error);
1616
-        });
1617
-}
1618
-
1619
 /**
1552
 /**
1620
  * Wraps original attachMediaStream function to set current audio output device
1553
  * Wraps original attachMediaStream function to set current audio output device
1621
  * if this is supported.
1554
  * if this is supported.

+ 1
- 32
modules/RTC/RTCUtils.spec.js View File

103
 describe('RTCUtils', () => {
103
 describe('RTCUtils', () => {
104
     describe('obtainAudioAndVideoPermissions', () => {
104
     describe('obtainAudioAndVideoPermissions', () => {
105
         let getUserMediaSpy, isScreenSupportedSpy, oldMediaStream,
105
         let getUserMediaSpy, isScreenSupportedSpy, oldMediaStream,
106
-            oldMediaStreamTrack, oldWebkitMediaStream,
107
-            supportsMediaConstructorSpy;
106
+            oldMediaStreamTrack, oldWebkitMediaStream;
108
 
107
 
109
         beforeEach(() => {
108
         beforeEach(() => {
110
             // FIXME: To get some kind of initial testing working assume a
109
             // FIXME: To get some kind of initial testing working assume a
111
             // chrome environment so RTCUtils can actually initialize properly.
110
             // chrome environment so RTCUtils can actually initialize properly.
112
             spyOn(browser, 'isChrome').and.returnValue(true);
111
             spyOn(browser, 'isChrome').and.returnValue(true);
113
-            supportsMediaConstructorSpy
114
-                = spyOn(browser, 'supportsMediaStreamConstructor')
115
-                    .and.returnValue(true);
116
             spyOn(screenObtainer, '_createObtainStreamMethod')
112
             spyOn(screenObtainer, '_createObtainStreamMethod')
117
                 .and.returnValue(() => { /** intentional no op */ });
113
                 .and.returnValue(() => { /** intentional no op */ });
118
             isScreenSupportedSpy = spyOn(screenObtainer, 'isSupported')
114
             isScreenSupportedSpy = spyOn(screenObtainer, 'isSupported')
251
                     .catch(error => unexpectedErrorHandler(error, done));
247
                     .catch(error => unexpectedErrorHandler(error, done));
252
             });
248
             });
253
         });
249
         });
254
-
255
-        describe('without MediaStream constructor support', () => {
256
-            it('makes separate getUserMedia calls', done => {
257
-                supportsMediaConstructorSpy.and.returnValue(false);
258
-                getUserMediaSpy.and.callFake(successfulGum);
259
-
260
-                RTCUtils.obtainAudioAndVideoPermissions({
261
-                    devices: [ 'audio', 'video' ] })
262
-                    .then(streams => {
263
-                        expect(getUserMediaSpy.calls.count()).toBe(2);
264
-                        expect(streams.length).toBe(2);
265
-
266
-                        const audioStream = streams.find(stream =>
267
-                            stream.mediaType === 'audio');
268
-
269
-                        expect(audioStream).toBeTruthy();
270
-
271
-                        const videoStream = streams.find(stream =>
272
-                            stream.mediaType === 'video');
273
-
274
-                        expect(videoStream).toBeTruthy();
275
-
276
-                        done();
277
-                    })
278
-                    .catch(error => unexpectedErrorHandler(error, done));
279
-            });
280
-        });
281
     });
250
     });
282
 });
251
 });

+ 0
- 11
modules/browser/BrowserCapabilities.js View File

152
             && typeof navigator.mediaDevices.addEventListener !== 'undefined';
152
             && typeof navigator.mediaDevices.addEventListener !== 'undefined';
153
     }
153
     }
154
 
154
 
155
-    /**
156
-     * Checks if the current browser supports the MediaStream constructor as
157
-     * defined by https://www.w3.org/TR/mediacapture-streams/#constructors. In
158
-     * cases where there is no support, it maybe be necessary to get audio
159
-     * and video in two distinct GUM calls.
160
-     * @return {boolean}
161
-     */
162
-    supportsMediaStreamConstructor() {
163
-        return !this.isReactNative();
164
-    }
165
-
166
     /**
155
     /**
167
      * Checks if the current browser supports RTP statictics collecting.
156
      * Checks if the current browser supports RTP statictics collecting.
168
      * Required by {@link RTPStatsCollector}.
157
      * Required by {@link RTPStatsCollector}.

+ 61
- 23
package-lock.json View File

3673
         "ansi-regex": {
3673
         "ansi-regex": {
3674
           "version": "2.1.1",
3674
           "version": "2.1.1",
3675
           "bundled": true,
3675
           "bundled": true,
3676
-          "dev": true
3676
+          "dev": true,
3677
+          "optional": true
3677
         },
3678
         },
3678
         "aproba": {
3679
         "aproba": {
3679
           "version": "1.2.0",
3680
           "version": "1.2.0",
3694
         "balanced-match": {
3695
         "balanced-match": {
3695
           "version": "1.0.0",
3696
           "version": "1.0.0",
3696
           "bundled": true,
3697
           "bundled": true,
3697
-          "dev": true
3698
+          "dev": true,
3699
+          "optional": true
3698
         },
3700
         },
3699
         "brace-expansion": {
3701
         "brace-expansion": {
3700
           "version": "1.1.11",
3702
           "version": "1.1.11",
3701
           "bundled": true,
3703
           "bundled": true,
3702
           "dev": true,
3704
           "dev": true,
3705
+          "optional": true,
3703
           "requires": {
3706
           "requires": {
3704
             "balanced-match": "^1.0.0",
3707
             "balanced-match": "^1.0.0",
3705
             "concat-map": "0.0.1"
3708
             "concat-map": "0.0.1"
3714
         "code-point-at": {
3717
         "code-point-at": {
3715
           "version": "1.1.0",
3718
           "version": "1.1.0",
3716
           "bundled": true,
3719
           "bundled": true,
3717
-          "dev": true
3720
+          "dev": true,
3721
+          "optional": true
3718
         },
3722
         },
3719
         "concat-map": {
3723
         "concat-map": {
3720
           "version": "0.0.1",
3724
           "version": "0.0.1",
3721
           "bundled": true,
3725
           "bundled": true,
3722
-          "dev": true
3726
+          "dev": true,
3727
+          "optional": true
3723
         },
3728
         },
3724
         "console-control-strings": {
3729
         "console-control-strings": {
3725
           "version": "1.1.0",
3730
           "version": "1.1.0",
3726
           "bundled": true,
3731
           "bundled": true,
3727
-          "dev": true
3732
+          "dev": true,
3733
+          "optional": true
3728
         },
3734
         },
3729
         "core-util-is": {
3735
         "core-util-is": {
3730
           "version": "1.0.2",
3736
           "version": "1.0.2",
3841
         "inherits": {
3847
         "inherits": {
3842
           "version": "2.0.3",
3848
           "version": "2.0.3",
3843
           "bundled": true,
3849
           "bundled": true,
3844
-          "dev": true
3850
+          "dev": true,
3851
+          "optional": true
3845
         },
3852
         },
3846
         "ini": {
3853
         "ini": {
3847
           "version": "1.3.5",
3854
           "version": "1.3.5",
3853
           "version": "1.0.0",
3860
           "version": "1.0.0",
3854
           "bundled": true,
3861
           "bundled": true,
3855
           "dev": true,
3862
           "dev": true,
3863
+          "optional": true,
3856
           "requires": {
3864
           "requires": {
3857
             "number-is-nan": "^1.0.0"
3865
             "number-is-nan": "^1.0.0"
3858
           }
3866
           }
3867
           "version": "3.0.4",
3875
           "version": "3.0.4",
3868
           "bundled": true,
3876
           "bundled": true,
3869
           "dev": true,
3877
           "dev": true,
3878
+          "optional": true,
3870
           "requires": {
3879
           "requires": {
3871
             "brace-expansion": "^1.1.7"
3880
             "brace-expansion": "^1.1.7"
3872
           }
3881
           }
3874
         "minimist": {
3883
         "minimist": {
3875
           "version": "0.0.8",
3884
           "version": "0.0.8",
3876
           "bundled": true,
3885
           "bundled": true,
3877
-          "dev": true
3886
+          "dev": true,
3887
+          "optional": true
3878
         },
3888
         },
3879
         "minipass": {
3889
         "minipass": {
3880
           "version": "2.2.4",
3890
           "version": "2.2.4",
3881
           "bundled": true,
3891
           "bundled": true,
3882
           "dev": true,
3892
           "dev": true,
3893
+          "optional": true,
3883
           "requires": {
3894
           "requires": {
3884
             "safe-buffer": "^5.1.1",
3895
             "safe-buffer": "^5.1.1",
3885
             "yallist": "^3.0.0"
3896
             "yallist": "^3.0.0"
3898
           "version": "0.5.1",
3909
           "version": "0.5.1",
3899
           "bundled": true,
3910
           "bundled": true,
3900
           "dev": true,
3911
           "dev": true,
3912
+          "optional": true,
3901
           "requires": {
3913
           "requires": {
3902
             "minimist": "0.0.8"
3914
             "minimist": "0.0.8"
3903
           }
3915
           }
3978
         "number-is-nan": {
3990
         "number-is-nan": {
3979
           "version": "1.0.1",
3991
           "version": "1.0.1",
3980
           "bundled": true,
3992
           "bundled": true,
3981
-          "dev": true
3993
+          "dev": true,
3994
+          "optional": true
3982
         },
3995
         },
3983
         "object-assign": {
3996
         "object-assign": {
3984
           "version": "4.1.1",
3997
           "version": "4.1.1",
3990
           "version": "1.4.0",
4003
           "version": "1.4.0",
3991
           "bundled": true,
4004
           "bundled": true,
3992
           "dev": true,
4005
           "dev": true,
4006
+          "optional": true,
3993
           "requires": {
4007
           "requires": {
3994
             "wrappy": "1"
4008
             "wrappy": "1"
3995
           }
4009
           }
4075
         "safe-buffer": {
4089
         "safe-buffer": {
4076
           "version": "5.1.1",
4090
           "version": "5.1.1",
4077
           "bundled": true,
4091
           "bundled": true,
4078
-          "dev": true
4092
+          "dev": true,
4093
+          "optional": true
4079
         },
4094
         },
4080
         "safer-buffer": {
4095
         "safer-buffer": {
4081
           "version": "2.1.2",
4096
           "version": "2.1.2",
4111
           "version": "1.0.2",
4126
           "version": "1.0.2",
4112
           "bundled": true,
4127
           "bundled": true,
4113
           "dev": true,
4128
           "dev": true,
4129
+          "optional": true,
4114
           "requires": {
4130
           "requires": {
4115
             "code-point-at": "^1.0.0",
4131
             "code-point-at": "^1.0.0",
4116
             "is-fullwidth-code-point": "^1.0.0",
4132
             "is-fullwidth-code-point": "^1.0.0",
4130
           "version": "3.0.1",
4146
           "version": "3.0.1",
4131
           "bundled": true,
4147
           "bundled": true,
4132
           "dev": true,
4148
           "dev": true,
4149
+          "optional": true,
4133
           "requires": {
4150
           "requires": {
4134
             "ansi-regex": "^2.0.0"
4151
             "ansi-regex": "^2.0.0"
4135
           }
4152
           }
4173
         "wrappy": {
4190
         "wrappy": {
4174
           "version": "1.0.2",
4191
           "version": "1.0.2",
4175
           "bundled": true,
4192
           "bundled": true,
4176
-          "dev": true
4193
+          "dev": true,
4194
+          "optional": true
4177
         },
4195
         },
4178
         "yallist": {
4196
         "yallist": {
4179
           "version": "3.0.2",
4197
           "version": "3.0.2",
4180
           "bundled": true,
4198
           "bundled": true,
4181
-          "dev": true
4199
+          "dev": true,
4200
+          "optional": true
4182
         }
4201
         }
4183
       }
4202
       }
4184
     },
4203
     },
5312
             "ansi-regex": {
5331
             "ansi-regex": {
5313
               "version": "2.1.1",
5332
               "version": "2.1.1",
5314
               "bundled": true,
5333
               "bundled": true,
5315
-              "dev": true
5334
+              "dev": true,
5335
+              "optional": true
5316
             },
5336
             },
5317
             "aproba": {
5337
             "aproba": {
5318
               "version": "1.2.0",
5338
               "version": "1.2.0",
5333
             "balanced-match": {
5353
             "balanced-match": {
5334
               "version": "1.0.0",
5354
               "version": "1.0.0",
5335
               "bundled": true,
5355
               "bundled": true,
5336
-              "dev": true
5356
+              "dev": true,
5357
+              "optional": true
5337
             },
5358
             },
5338
             "brace-expansion": {
5359
             "brace-expansion": {
5339
               "version": "1.1.11",
5360
               "version": "1.1.11",
5340
               "bundled": true,
5361
               "bundled": true,
5341
               "dev": true,
5362
               "dev": true,
5363
+              "optional": true,
5342
               "requires": {
5364
               "requires": {
5343
                 "balanced-match": "^1.0.0",
5365
                 "balanced-match": "^1.0.0",
5344
                 "concat-map": "0.0.1"
5366
                 "concat-map": "0.0.1"
5353
             "code-point-at": {
5375
             "code-point-at": {
5354
               "version": "1.1.0",
5376
               "version": "1.1.0",
5355
               "bundled": true,
5377
               "bundled": true,
5356
-              "dev": true
5378
+              "dev": true,
5379
+              "optional": true
5357
             },
5380
             },
5358
             "concat-map": {
5381
             "concat-map": {
5359
               "version": "0.0.1",
5382
               "version": "0.0.1",
5360
               "bundled": true,
5383
               "bundled": true,
5361
-              "dev": true
5384
+              "dev": true,
5385
+              "optional": true
5362
             },
5386
             },
5363
             "console-control-strings": {
5387
             "console-control-strings": {
5364
               "version": "1.1.0",
5388
               "version": "1.1.0",
5365
               "bundled": true,
5389
               "bundled": true,
5366
-              "dev": true
5390
+              "dev": true,
5391
+              "optional": true
5367
             },
5392
             },
5368
             "core-util-is": {
5393
             "core-util-is": {
5369
               "version": "1.0.2",
5394
               "version": "1.0.2",
5480
             "inherits": {
5505
             "inherits": {
5481
               "version": "2.0.3",
5506
               "version": "2.0.3",
5482
               "bundled": true,
5507
               "bundled": true,
5483
-              "dev": true
5508
+              "dev": true,
5509
+              "optional": true
5484
             },
5510
             },
5485
             "ini": {
5511
             "ini": {
5486
               "version": "1.3.5",
5512
               "version": "1.3.5",
5492
               "version": "1.0.0",
5518
               "version": "1.0.0",
5493
               "bundled": true,
5519
               "bundled": true,
5494
               "dev": true,
5520
               "dev": true,
5521
+              "optional": true,
5495
               "requires": {
5522
               "requires": {
5496
                 "number-is-nan": "^1.0.0"
5523
                 "number-is-nan": "^1.0.0"
5497
               }
5524
               }
5506
               "version": "3.0.4",
5533
               "version": "3.0.4",
5507
               "bundled": true,
5534
               "bundled": true,
5508
               "dev": true,
5535
               "dev": true,
5536
+              "optional": true,
5509
               "requires": {
5537
               "requires": {
5510
                 "brace-expansion": "^1.1.7"
5538
                 "brace-expansion": "^1.1.7"
5511
               }
5539
               }
5513
             "minimist": {
5541
             "minimist": {
5514
               "version": "0.0.8",
5542
               "version": "0.0.8",
5515
               "bundled": true,
5543
               "bundled": true,
5516
-              "dev": true
5544
+              "dev": true,
5545
+              "optional": true
5517
             },
5546
             },
5518
             "minipass": {
5547
             "minipass": {
5519
               "version": "2.2.4",
5548
               "version": "2.2.4",
5520
               "bundled": true,
5549
               "bundled": true,
5521
               "dev": true,
5550
               "dev": true,
5551
+              "optional": true,
5522
               "requires": {
5552
               "requires": {
5523
                 "safe-buffer": "^5.1.1",
5553
                 "safe-buffer": "^5.1.1",
5524
                 "yallist": "^3.0.0"
5554
                 "yallist": "^3.0.0"
5537
               "version": "0.5.1",
5567
               "version": "0.5.1",
5538
               "bundled": true,
5568
               "bundled": true,
5539
               "dev": true,
5569
               "dev": true,
5570
+              "optional": true,
5540
               "requires": {
5571
               "requires": {
5541
                 "minimist": "0.0.8"
5572
                 "minimist": "0.0.8"
5542
               }
5573
               }
5617
             "number-is-nan": {
5648
             "number-is-nan": {
5618
               "version": "1.0.1",
5649
               "version": "1.0.1",
5619
               "bundled": true,
5650
               "bundled": true,
5620
-              "dev": true
5651
+              "dev": true,
5652
+              "optional": true
5621
             },
5653
             },
5622
             "object-assign": {
5654
             "object-assign": {
5623
               "version": "4.1.1",
5655
               "version": "4.1.1",
5629
               "version": "1.4.0",
5661
               "version": "1.4.0",
5630
               "bundled": true,
5662
               "bundled": true,
5631
               "dev": true,
5663
               "dev": true,
5664
+              "optional": true,
5632
               "requires": {
5665
               "requires": {
5633
                 "wrappy": "1"
5666
                 "wrappy": "1"
5634
               }
5667
               }
5714
             "safe-buffer": {
5747
             "safe-buffer": {
5715
               "version": "5.1.1",
5748
               "version": "5.1.1",
5716
               "bundled": true,
5749
               "bundled": true,
5717
-              "dev": true
5750
+              "dev": true,
5751
+              "optional": true
5718
             },
5752
             },
5719
             "safer-buffer": {
5753
             "safer-buffer": {
5720
               "version": "2.1.2",
5754
               "version": "2.1.2",
5750
               "version": "1.0.2",
5784
               "version": "1.0.2",
5751
               "bundled": true,
5785
               "bundled": true,
5752
               "dev": true,
5786
               "dev": true,
5787
+              "optional": true,
5753
               "requires": {
5788
               "requires": {
5754
                 "code-point-at": "^1.0.0",
5789
                 "code-point-at": "^1.0.0",
5755
                 "is-fullwidth-code-point": "^1.0.0",
5790
                 "is-fullwidth-code-point": "^1.0.0",
5769
               "version": "3.0.1",
5804
               "version": "3.0.1",
5770
               "bundled": true,
5805
               "bundled": true,
5771
               "dev": true,
5806
               "dev": true,
5807
+              "optional": true,
5772
               "requires": {
5808
               "requires": {
5773
                 "ansi-regex": "^2.0.0"
5809
                 "ansi-regex": "^2.0.0"
5774
               }
5810
               }
5812
             "wrappy": {
5848
             "wrappy": {
5813
               "version": "1.0.2",
5849
               "version": "1.0.2",
5814
               "bundled": true,
5850
               "bundled": true,
5815
-              "dev": true
5851
+              "dev": true,
5852
+              "optional": true
5816
             },
5853
             },
5817
             "yallist": {
5854
             "yallist": {
5818
               "version": "3.0.2",
5855
               "version": "3.0.2",
5819
               "bundled": true,
5856
               "bundled": true,
5820
-              "dev": true
5857
+              "dev": true,
5858
+              "optional": true
5821
             }
5859
             }
5822
           }
5860
           }
5823
         },
5861
         },
5972
     },
6010
     },
5973
     "karma-webpack": {
6011
     "karma-webpack": {
5974
       "version": "3.0.0",
6012
       "version": "3.0.0",
5975
-      "resolved": "http://registry.npmjs.org/karma-webpack/-/karma-webpack-3.0.0.tgz",
6013
+      "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-3.0.0.tgz",
5976
       "integrity": "sha512-Ja1o9LLoqWaJyUNhTKaXjWiEH9y7a9H3mzP8pYB30SBsgoF5KBS/65NeHFd+QPuT9ITrym8xFt8BZeGbcOfujA==",
6014
       "integrity": "sha512-Ja1o9LLoqWaJyUNhTKaXjWiEH9y7a9H3mzP8pYB30SBsgoF5KBS/65NeHFd+QPuT9ITrym8xFt8BZeGbcOfujA==",
5977
       "dev": true,
6015
       "dev": true,
5978
       "requires": {
6016
       "requires": {

Loading…
Cancel
Save