ソースを参照

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年前
コミット
c73bc490ed
4個のファイルの変更63行の追加134行の削除
  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 ファイルの表示

@@ -1052,17 +1052,7 @@ class RTCUtils extends Listenable {
1052 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 1056
             handleLocalStream(streams, options.resolution));
1067 1057
     }
1068 1058
 
@@ -1172,37 +1162,6 @@ class RTCUtils extends Listenable {
1172 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 1166
      * Returns an object formatted for specifying desktop sharing parameters.
1208 1167
      *
@@ -1590,32 +1549,6 @@ class RTCUtils extends Listenable {
1590 1549
 
1591 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 1553
  * Wraps original attachMediaStream function to set current audio output device
1621 1554
  * if this is supported.

+ 1
- 32
modules/RTC/RTCUtils.spec.js ファイルの表示

@@ -103,16 +103,12 @@ function unexpectedErrorHandler(error = {}, done) {
103 103
 describe('RTCUtils', () => {
104 104
     describe('obtainAudioAndVideoPermissions', () => {
105 105
         let getUserMediaSpy, isScreenSupportedSpy, oldMediaStream,
106
-            oldMediaStreamTrack, oldWebkitMediaStream,
107
-            supportsMediaConstructorSpy;
106
+            oldMediaStreamTrack, oldWebkitMediaStream;
108 107
 
109 108
         beforeEach(() => {
110 109
             // FIXME: To get some kind of initial testing working assume a
111 110
             // chrome environment so RTCUtils can actually initialize properly.
112 111
             spyOn(browser, 'isChrome').and.returnValue(true);
113
-            supportsMediaConstructorSpy
114
-                = spyOn(browser, 'supportsMediaStreamConstructor')
115
-                    .and.returnValue(true);
116 112
             spyOn(screenObtainer, '_createObtainStreamMethod')
117 113
                 .and.returnValue(() => { /** intentional no op */ });
118 114
             isScreenSupportedSpy = spyOn(screenObtainer, 'isSupported')
@@ -251,32 +247,5 @@ describe('RTCUtils', () => {
251 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 ファイルの表示

@@ -152,17 +152,6 @@ export default class BrowserCapabilities extends BrowserDetection {
152 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 156
      * Checks if the current browser supports RTP statictics collecting.
168 157
      * Required by {@link RTPStatsCollector}.

+ 61
- 23
package-lock.json ファイルの表示

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

読み込み中…
キャンセル
保存