@webex/plugin-meetings 3.0.0-beta.27 → 3.0.0-beta.271
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -8
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +114 -14
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +763 -31
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/webex-errors.js +28 -7
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +5 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.js +203 -28
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -2
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +109 -15
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +309 -18
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +112 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +381 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +57 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +224 -63
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +58 -116
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +72 -123
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +82 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3118 -2814
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +230 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +256 -196
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +601 -417
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +70 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +189 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/util.js +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +36 -36
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +22 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +394 -94
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +71 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +121 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +86 -5
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +316 -233
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +12 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +49 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +52 -34
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +209 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +233 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/reachability/index.js +225 -59
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +17 -8
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +199 -154
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +23 -29
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +112 -97
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +96 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/index.js +51 -34
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +6 -6
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/webex-errors.d.ts +13 -1
- package/dist/types/common/queue.d.ts +9 -7
- package/dist/types/config.d.ts +1 -6
- package/dist/types/constants.d.ts +161 -21
- package/dist/types/controls-options-manager/enums.d.ts +11 -1
- package/dist/types/controls-options-manager/index.d.ts +17 -1
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -7
- package/dist/types/index.d.ts +6 -4
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/index.d.ts +57 -4
- package/dist/types/locus-info/parser.d.ts +65 -6
- package/dist/types/media/index.d.ts +2 -0
- package/dist/types/media/properties.d.ts +34 -48
- package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
- package/dist/types/meeting/index.d.ts +345 -507
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +99 -23
- package/dist/types/meeting/request.d.ts +72 -43
- package/dist/types/meeting/util.d.ts +101 -1
- package/dist/types/meeting-info/index.d.ts +13 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/types/meetings/collection.d.ts +8 -0
- package/dist/types/meetings/index.d.ts +88 -12
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/member/index.d.ts +13 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/members/collection.d.ts +5 -0
- package/dist/types/members/index.d.ts +35 -2
- package/dist/types/members/request.d.ts +73 -9
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +209 -1
- package/dist/types/metrics/constants.d.ts +11 -4
- package/dist/types/metrics/index.d.ts +4 -119
- package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
- package/dist/types/multistream/receiveSlot.d.ts +16 -12
- package/dist/types/multistream/receiveSlotManager.d.ts +19 -4
- package/dist/types/multistream/remoteMedia.d.ts +8 -29
- package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
- package/dist/types/multistream/sendSlotManager.d.ts +61 -0
- package/dist/types/reachability/index.d.ts +61 -7
- package/dist/types/reachability/request.d.ts +7 -3
- package/dist/types/reconnection-manager/index.d.ts +9 -0
- package/dist/types/recording-controller/index.d.ts +15 -1
- package/dist/types/recording-controller/util.d.ts +5 -4
- package/dist/types/roap/request.d.ts +15 -11
- package/dist/types/roap/turnDiscovery.d.ts +18 -1
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +47 -0
- package/dist/types/statsAnalyzer/index.d.ts +6 -1
- package/package.json +23 -20
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +44 -14
- package/src/breakouts/breakout.ts +87 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +646 -18
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/webex-errors.ts +27 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +4 -9
- package/src/constants.ts +184 -18
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +40 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +412 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +231 -39
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +100 -122
- package/src/media/properties.ts +85 -108
- package/src/meeting/in-meeting-actions.ts +163 -3
- package/src/meeting/index.ts +2526 -2309
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +229 -131
- package/src/meeting/request.ts +172 -121
- package/src/meeting/util.ts +588 -394
- package/src/meeting-info/index.ts +79 -8
- package/src/meeting-info/meeting-info-v2.ts +168 -14
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +23 -23
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +428 -108
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +79 -4
- package/src/member/index.ts +49 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +127 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +107 -6
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/constants.ts +11 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +55 -18
- package/src/multistream/receiveSlotManager.ts +46 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +148 -30
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/reachability/index.ts +228 -37
- package/src/reachability/request.ts +17 -8
- package/src/reconnection-manager/index.ts +81 -54
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +23 -30
- package/src/roap/request.ts +100 -104
- package/src/roap/turnDiscovery.ts +51 -25
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/index.ts +73 -35
- package/src/statsAnalyzer/mqaUtil.ts +8 -10
- package/test/integration/spec/converged-space-meetings.js +60 -3
- package/test/integration/spec/journey.js +320 -261
- package/test/integration/spec/space-meeting.js +76 -3
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +142 -24
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1488 -67
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1283 -33
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +62 -22
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +104 -37
- package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
- package/test/unit/spec/meeting/index.js +4307 -1938
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +408 -208
- package/test/unit/spec/meeting/request.js +440 -45
- package/test/unit/spec/meeting/utils.js +679 -64
- package/test/unit/spec/meeting-info/index.js +293 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +517 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +1007 -177
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +58 -4
- package/test/unit/spec/member/util.js +479 -35
- package/test/unit/spec/members/index.js +319 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +72 -13
- package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/reachability/index.ts +549 -9
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +84 -9
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +31 -51
- package/test/unit/spec/roap/request.ts +203 -85
- package/test/unit/spec/roap/turnDiscovery.ts +48 -13
- package/test/unit/spec/rtcMetrics/index.ts +68 -0
- package/test/unit/spec/stats-analyzer/index.js +29 -2
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -52
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/meeting/effectsState.d.ts +0 -42
- package/dist/types/metrics/config.d.ts +0 -178
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/test/unit/spec/meeting/effectsState.js +0 -285
package/src/media/index.ts
CHANGED
|
@@ -3,16 +3,29 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/* globals navigator */
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
RoapMediaConnection,
|
|
8
|
+
MultistreamRoapMediaConnection,
|
|
9
|
+
type MultistreamConnectionConfig,
|
|
10
|
+
} from '@webex/internal-media-core';
|
|
11
|
+
import {
|
|
12
|
+
LocalStream,
|
|
13
|
+
LocalCameraStream,
|
|
14
|
+
LocalDisplayStream,
|
|
15
|
+
LocalSystemAudioStream,
|
|
16
|
+
LocalMicrophoneStream,
|
|
17
|
+
} from '@webex/media-helpers';
|
|
7
18
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
8
|
-
import {
|
|
19
|
+
import {MEDIA_TRACK_CONSTRAINT} from '../constants';
|
|
9
20
|
import Config from '../config';
|
|
10
21
|
import StaticConfig from '../common/config';
|
|
11
|
-
import MediaError from '../common/errors/media';
|
|
12
22
|
import BrowserDetection from '../common/browser-detection';
|
|
23
|
+
import RtcMetrics from '../rtcMetrics';
|
|
13
24
|
|
|
14
25
|
const {isBrowser} = BrowserDetection();
|
|
15
26
|
|
|
27
|
+
export type BundlePolicy = MultistreamConnectionConfig['bundlePolicy'];
|
|
28
|
+
|
|
16
29
|
/**
|
|
17
30
|
* MediaDirection
|
|
18
31
|
* @typedef {Object} MediaDirection
|
|
@@ -43,45 +56,6 @@ const {isBrowser} = BrowserDetection();
|
|
|
43
56
|
*/
|
|
44
57
|
const Media: any = {};
|
|
45
58
|
|
|
46
|
-
/**
|
|
47
|
-
* @param {boolean} enabled
|
|
48
|
-
* @param {MediaStreamTrack} track
|
|
49
|
-
* @returns {Boolean}
|
|
50
|
-
* @public
|
|
51
|
-
*/
|
|
52
|
-
Media.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {
|
|
53
|
-
if (track) {
|
|
54
|
-
track.enabled = enabled;
|
|
55
|
-
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return false;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* format the media array for send
|
|
64
|
-
* @param {String} mediaId
|
|
65
|
-
* @param {Boolean} audioMuted
|
|
66
|
-
* @param {Boolean} videoMuted
|
|
67
|
-
* @returns {Array} medias
|
|
68
|
-
*/
|
|
69
|
-
Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {
|
|
70
|
-
if (mediaId) {
|
|
71
|
-
return [
|
|
72
|
-
{
|
|
73
|
-
localSdp: JSON.stringify({
|
|
74
|
-
audioMuted,
|
|
75
|
-
videoMuted,
|
|
76
|
-
}),
|
|
77
|
-
mediaId,
|
|
78
|
-
},
|
|
79
|
-
];
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return [];
|
|
83
|
-
};
|
|
84
|
-
|
|
85
59
|
/**
|
|
86
60
|
* make a browser call to get the media
|
|
87
61
|
* @param {SendOptions} options
|
|
@@ -109,33 +83,60 @@ Media.getLocalMedia = (options: any, config: object) => {
|
|
|
109
83
|
return Promise.resolve(undefined);
|
|
110
84
|
};
|
|
111
85
|
|
|
86
|
+
Media.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {
|
|
87
|
+
if (!receive && !send) {
|
|
88
|
+
return 'inactive';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (forceSendRecv || (receive && send)) {
|
|
92
|
+
return 'sendrecv';
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (receive) {
|
|
96
|
+
return 'recvonly';
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return 'sendonly';
|
|
100
|
+
};
|
|
101
|
+
|
|
112
102
|
/**
|
|
113
103
|
* creates a webrtc media connection with provided tracks and mediaDirection configuration
|
|
114
104
|
*
|
|
115
105
|
* @param {boolean} isMultistream
|
|
116
106
|
* @param {string} debugId string useful for debugging (will appear in media connection logs)
|
|
107
|
+
* @param {object} webex main `webex` object.
|
|
108
|
+
* @param {string} meetingId id for the meeting using this connection
|
|
109
|
+
* @param {string} correlationId id used in requests to correlate to this session
|
|
117
110
|
* @param {Object} options
|
|
118
|
-
* @param {Object} [options.mediaProperties]
|
|
119
|
-
* audioTrack, videoTrack and
|
|
111
|
+
* @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
|
|
112
|
+
* audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack
|
|
120
113
|
* @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
|
|
121
114
|
* @param {boolean} [options.enableRtx] applicable only to non-multistream connections
|
|
122
115
|
* @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
|
|
123
116
|
* @param {Object} [options.turnServerInfo]
|
|
124
|
-
* @
|
|
117
|
+
* @param {BundlePolicy} [options.bundlePolicy]
|
|
118
|
+
* @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
|
|
125
119
|
*/
|
|
126
120
|
Media.createMediaConnection = (
|
|
127
121
|
isMultistream: boolean,
|
|
128
122
|
debugId: string,
|
|
123
|
+
webex: object,
|
|
124
|
+
meetingId: string,
|
|
125
|
+
correlationId: string,
|
|
129
126
|
options: {
|
|
130
|
-
mediaProperties
|
|
127
|
+
mediaProperties: {
|
|
131
128
|
mediaDirection?: {
|
|
132
129
|
receiveAudio: boolean;
|
|
133
130
|
receiveVideo: boolean;
|
|
134
131
|
receiveShare: boolean;
|
|
132
|
+
sendAudio: boolean;
|
|
133
|
+
sendVideo: boolean;
|
|
134
|
+
sendShare: boolean;
|
|
135
135
|
};
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
audioStream?: LocalMicrophoneStream;
|
|
137
|
+
videoStream?: LocalCameraStream;
|
|
138
|
+
shareVideoStream?: LocalDisplayStream;
|
|
139
|
+
shareAudioStream?: LocalSystemAudioStream;
|
|
139
140
|
};
|
|
140
141
|
remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
|
|
141
142
|
enableRtx?: boolean;
|
|
@@ -145,9 +146,17 @@ Media.createMediaConnection = (
|
|
|
145
146
|
username: string;
|
|
146
147
|
password: string;
|
|
147
148
|
};
|
|
149
|
+
bundlePolicy?: BundlePolicy;
|
|
148
150
|
}
|
|
149
151
|
) => {
|
|
150
|
-
const {
|
|
152
|
+
const {
|
|
153
|
+
mediaProperties,
|
|
154
|
+
remoteQualityLevel,
|
|
155
|
+
enableRtx,
|
|
156
|
+
enableExtmap,
|
|
157
|
+
turnServerInfo,
|
|
158
|
+
bundlePolicy,
|
|
159
|
+
} = options;
|
|
151
160
|
|
|
152
161
|
const iceServers = [];
|
|
153
162
|
|
|
@@ -160,11 +169,21 @@ Media.createMediaConnection = (
|
|
|
160
169
|
}
|
|
161
170
|
|
|
162
171
|
if (isMultistream) {
|
|
172
|
+
const config: MultistreamConnectionConfig = {
|
|
173
|
+
iceServers,
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
if (bundlePolicy) {
|
|
177
|
+
config.bundlePolicy = bundlePolicy;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const rtcMetrics = new RtcMetrics(webex, meetingId, correlationId);
|
|
181
|
+
|
|
163
182
|
return new MultistreamRoapMediaConnection(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
183
|
+
config,
|
|
184
|
+
meetingId,
|
|
185
|
+
(data) => rtcMetrics.addMetrics(data),
|
|
186
|
+
() => rtcMetrics.closeMetrics()
|
|
168
187
|
);
|
|
169
188
|
}
|
|
170
189
|
|
|
@@ -172,7 +191,8 @@ Media.createMediaConnection = (
|
|
|
172
191
|
throw new Error('mediaProperties have to be provided for non-multistream media connections');
|
|
173
192
|
}
|
|
174
193
|
|
|
175
|
-
const {mediaDirection,
|
|
194
|
+
const {mediaDirection, audioStream, videoStream, shareVideoStream, shareAudioStream} =
|
|
195
|
+
mediaProperties;
|
|
176
196
|
|
|
177
197
|
return new RoapMediaConnection(
|
|
178
198
|
{
|
|
@@ -193,17 +213,23 @@ Media.createMediaConnection = (
|
|
|
193
213
|
},
|
|
194
214
|
},
|
|
195
215
|
{
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
216
|
+
// TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530
|
|
217
|
+
localTracks: {
|
|
218
|
+
audio: audioStream?.outputTrack,
|
|
219
|
+
video: videoStream?.outputTrack,
|
|
220
|
+
screenShareVideo: shareVideoStream?.outputTrack,
|
|
221
|
+
screenShareAudio: shareAudioStream?.outputTrack, // TODO: add type for screenShareAudio in internal-media-core SPARK-446923
|
|
222
|
+
} as unknown,
|
|
223
|
+
direction: {
|
|
224
|
+
audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
|
|
225
|
+
video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
|
|
226
|
+
screenShareVideo: Media.getDirection(
|
|
227
|
+
false,
|
|
228
|
+
mediaDirection.receiveShare,
|
|
229
|
+
mediaDirection.sendShare
|
|
230
|
+
),
|
|
206
231
|
},
|
|
232
|
+
remoteQualityLevel,
|
|
207
233
|
},
|
|
208
234
|
debugId
|
|
209
235
|
);
|
|
@@ -348,52 +374,6 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
|
|
|
348
374
|
});
|
|
349
375
|
};
|
|
350
376
|
|
|
351
|
-
/**
|
|
352
|
-
* Checks if the machine has at least one audio or video device (Dont use this for screen share)
|
|
353
|
-
* @param {object} [options]
|
|
354
|
-
* {
|
|
355
|
-
* sendAudio: true/false,
|
|
356
|
-
* sendVideo: true/false
|
|
357
|
-
* }
|
|
358
|
-
* @returns {Object} {
|
|
359
|
-
* sendAudio: true/false,
|
|
360
|
-
* sendVideo: true/false
|
|
361
|
-
*}
|
|
362
|
-
*/
|
|
363
|
-
Media.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>
|
|
364
|
-
Promise.resolve().then(() => {
|
|
365
|
-
if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
|
|
366
|
-
return {
|
|
367
|
-
sendAudio: false,
|
|
368
|
-
sendVideo: false,
|
|
369
|
-
};
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
return navigator.mediaDevices.enumerateDevices().then((devices) => {
|
|
373
|
-
const supported = {
|
|
374
|
-
audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,
|
|
375
|
-
video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,
|
|
376
|
-
};
|
|
377
|
-
|
|
378
|
-
return {
|
|
379
|
-
sendAudio: supported.audio && sendAudio,
|
|
380
|
-
sendVideo: supported.video && sendVideo,
|
|
381
|
-
};
|
|
382
|
-
});
|
|
383
|
-
});
|
|
384
|
-
|
|
385
|
-
/**
|
|
386
|
-
* proxy to browser navigator.mediaDevices.enumerateDevices()
|
|
387
|
-
* @returns {Promise}
|
|
388
|
-
*/
|
|
389
|
-
Media.getDevices = () => {
|
|
390
|
-
if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
|
|
391
|
-
return navigator.mediaDevices.enumerateDevices();
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
return Promise.reject(new MediaError('enumerateDevices not supported.'));
|
|
395
|
-
};
|
|
396
|
-
|
|
397
377
|
/**
|
|
398
378
|
*
|
|
399
379
|
* Toggle a specific stream
|
|
@@ -404,23 +384,21 @@ Media.toggleStream = () => {};
|
|
|
404
384
|
|
|
405
385
|
/**
|
|
406
386
|
* Stop input stream
|
|
407
|
-
* @param {
|
|
387
|
+
* @param {LocalStream} stream A local stream
|
|
408
388
|
* @returns {null}
|
|
409
389
|
*/
|
|
410
|
-
Media.
|
|
411
|
-
if (!
|
|
390
|
+
Media.stopStream = (stream: LocalStream) => {
|
|
391
|
+
if (!stream) {
|
|
412
392
|
return Promise.resolve();
|
|
413
393
|
}
|
|
414
394
|
|
|
415
395
|
return Promise.resolve().then(() => {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
);
|
|
423
|
-
}
|
|
396
|
+
try {
|
|
397
|
+
stream.stop();
|
|
398
|
+
} catch (e) {
|
|
399
|
+
LoggerProxy.logger.error(
|
|
400
|
+
`Media:index#stopStream --> Unable to stop the stream with ready state of the output track => ${stream.outputTrack.readyState} & input track => ${stream.inputTrack.readyState}, error: ${e}`
|
|
401
|
+
);
|
|
424
402
|
}
|
|
425
403
|
});
|
|
426
404
|
};
|
package/src/media/properties.ts
CHANGED
|
@@ -1,41 +1,65 @@
|
|
|
1
1
|
import {ConnectionState, Event} from '@webex/internal-media-core';
|
|
2
2
|
|
|
3
|
+
import {
|
|
4
|
+
LocalCameraStream,
|
|
5
|
+
LocalMicrophoneStream,
|
|
6
|
+
LocalDisplayStream,
|
|
7
|
+
LocalSystemAudioStream,
|
|
8
|
+
RemoteStream,
|
|
9
|
+
} from '@webex/media-helpers';
|
|
10
|
+
|
|
3
11
|
import {MEETINGS, PC_BAIL_TIMEOUT, QUALITY_LEVELS} from '../constants';
|
|
4
12
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
5
13
|
|
|
14
|
+
export type MediaDirection = {
|
|
15
|
+
sendAudio: boolean;
|
|
16
|
+
sendVideo: boolean;
|
|
17
|
+
sendShare: boolean;
|
|
18
|
+
receiveAudio: boolean;
|
|
19
|
+
receiveVideo: boolean;
|
|
20
|
+
receiveShare: boolean;
|
|
21
|
+
};
|
|
22
|
+
|
|
6
23
|
/**
|
|
7
24
|
* @class MediaProperties
|
|
8
25
|
*/
|
|
9
26
|
export default class MediaProperties {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
mediaDirection: any;
|
|
27
|
+
audioStream?: LocalMicrophoneStream;
|
|
28
|
+
mediaDirection: MediaDirection;
|
|
13
29
|
mediaSettings: any;
|
|
14
30
|
webrtcMediaConnection: any;
|
|
15
|
-
|
|
31
|
+
remoteAudioStream: RemoteStream;
|
|
16
32
|
remoteQualityLevel: any;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
33
|
+
remoteShareStream: RemoteStream;
|
|
34
|
+
remoteVideoStream: RemoteStream;
|
|
35
|
+
shareVideoStream?: LocalDisplayStream;
|
|
36
|
+
shareAudioStream?: LocalSystemAudioStream;
|
|
20
37
|
videoDeviceId: any;
|
|
21
|
-
|
|
38
|
+
videoStream?: LocalCameraStream;
|
|
22
39
|
namespace = MEETINGS;
|
|
23
40
|
|
|
24
41
|
/**
|
|
25
42
|
* @param {Object} [options] -- to auto construct
|
|
26
43
|
* @returns {MediaProperties}
|
|
27
44
|
*/
|
|
28
|
-
constructor(
|
|
45
|
+
constructor() {
|
|
29
46
|
this.webrtcMediaConnection = null;
|
|
30
|
-
this.mediaDirection =
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this.
|
|
47
|
+
this.mediaDirection = {
|
|
48
|
+
receiveAudio: false,
|
|
49
|
+
receiveVideo: false,
|
|
50
|
+
receiveShare: false,
|
|
51
|
+
sendAudio: false,
|
|
52
|
+
sendVideo: false,
|
|
53
|
+
sendShare: false,
|
|
54
|
+
};
|
|
55
|
+
this.videoStream = null;
|
|
56
|
+
this.audioStream = null;
|
|
57
|
+
this.shareVideoStream = null;
|
|
58
|
+
this.shareAudioStream = null;
|
|
59
|
+
this.remoteShareStream = undefined;
|
|
60
|
+
this.remoteAudioStream = undefined;
|
|
61
|
+
this.remoteVideoStream = undefined;
|
|
62
|
+
this.remoteQualityLevel = QUALITY_LEVELS.HIGH;
|
|
39
63
|
this.mediaSettings = {};
|
|
40
64
|
this.videoDeviceId = null;
|
|
41
65
|
}
|
|
@@ -60,46 +84,46 @@ export default class MediaProperties {
|
|
|
60
84
|
this.webrtcMediaConnection = mediaPeerConnection;
|
|
61
85
|
}
|
|
62
86
|
|
|
63
|
-
|
|
64
|
-
this.
|
|
87
|
+
setLocalVideoStream(videoStream?: LocalCameraStream) {
|
|
88
|
+
this.videoStream = videoStream;
|
|
65
89
|
}
|
|
66
90
|
|
|
67
|
-
|
|
68
|
-
this.
|
|
91
|
+
setLocalAudioStream(audioStream?: LocalMicrophoneStream) {
|
|
92
|
+
this.audioStream = audioStream;
|
|
69
93
|
}
|
|
70
94
|
|
|
71
|
-
|
|
72
|
-
this.
|
|
95
|
+
setLocalShareVideoStream(shareVideoStream?: LocalDisplayStream) {
|
|
96
|
+
this.shareVideoStream = shareVideoStream;
|
|
73
97
|
}
|
|
74
98
|
|
|
75
|
-
|
|
76
|
-
this.
|
|
99
|
+
setLocalShareAudioStream(shareAudioStream?: LocalSystemAudioStream) {
|
|
100
|
+
this.shareAudioStream = shareAudioStream;
|
|
77
101
|
}
|
|
78
102
|
|
|
79
103
|
setRemoteQualityLevel(remoteQualityLevel) {
|
|
80
104
|
this.remoteQualityLevel = remoteQualityLevel;
|
|
81
105
|
}
|
|
82
106
|
|
|
83
|
-
|
|
84
|
-
this.
|
|
107
|
+
setRemoteShareStream(remoteShareStream: RemoteStream) {
|
|
108
|
+
this.remoteShareStream = remoteShareStream;
|
|
85
109
|
}
|
|
86
110
|
|
|
87
111
|
/**
|
|
88
|
-
* Sets the remote audio
|
|
89
|
-
* @param {
|
|
112
|
+
* Sets the remote audio stream
|
|
113
|
+
* @param {RemoteStream} remoteAudioStream RemoteStream to save
|
|
90
114
|
* @returns {void}
|
|
91
115
|
*/
|
|
92
|
-
|
|
93
|
-
this.
|
|
116
|
+
setRemoteAudioStream(remoteAudioStream: RemoteStream) {
|
|
117
|
+
this.remoteAudioStream = remoteAudioStream;
|
|
94
118
|
}
|
|
95
119
|
|
|
96
120
|
/**
|
|
97
|
-
* Sets the remote video
|
|
98
|
-
* @param {
|
|
121
|
+
* Sets the remote video stream
|
|
122
|
+
* @param {RemoteStream} remoteVideoStream RemoteStream to save
|
|
99
123
|
* @returns {void}
|
|
100
124
|
*/
|
|
101
|
-
|
|
102
|
-
this.
|
|
125
|
+
setRemoteVideoStream(remoteVideoStream: RemoteStream) {
|
|
126
|
+
this.remoteVideoStream = remoteVideoStream;
|
|
103
127
|
}
|
|
104
128
|
|
|
105
129
|
/**
|
|
@@ -115,96 +139,34 @@ export default class MediaProperties {
|
|
|
115
139
|
this.webrtcMediaConnection = null;
|
|
116
140
|
}
|
|
117
141
|
|
|
118
|
-
unsetLocalVideoTrack() {
|
|
119
|
-
this.videoTrack = null;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
unsetLocalShareTrack() {
|
|
123
|
-
this.shareTrack = null;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
unsetLocalAudioTrack() {
|
|
127
|
-
this.audioTrack = null;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Removes remote stream from class instance
|
|
132
|
-
* @deprecated after v1.89.3
|
|
133
|
-
* @returns {void}
|
|
134
|
-
*/
|
|
135
|
-
unsetRemoteStream() {
|
|
136
|
-
LoggerProxy.logger.warn(
|
|
137
|
-
'Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
|
|
138
|
-
);
|
|
139
|
-
// unsets audio and video only
|
|
140
|
-
this.unsetRemoteMedia();
|
|
141
|
-
}
|
|
142
|
-
|
|
143
142
|
/**
|
|
144
143
|
* Removes both remote audio and video from class instance
|
|
145
144
|
* @returns {void}
|
|
146
145
|
*/
|
|
147
146
|
unsetRemoteMedia() {
|
|
148
|
-
this.
|
|
149
|
-
this.
|
|
147
|
+
this.remoteAudioStream = null;
|
|
148
|
+
this.remoteVideoStream = null;
|
|
150
149
|
}
|
|
151
150
|
|
|
152
|
-
|
|
153
|
-
this.
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
unsetLocalVideoTracks() {
|
|
157
|
-
this.unsetLocalVideoTrack();
|
|
158
|
-
this.unsetLocalShareTrack();
|
|
151
|
+
unsetRemoteShareStream() {
|
|
152
|
+
this.remoteShareStream = null;
|
|
159
153
|
}
|
|
160
154
|
|
|
161
155
|
/**
|
|
162
|
-
*
|
|
163
|
-
* @deprecated after v1.89.3
|
|
156
|
+
* Unsets all remote streams
|
|
164
157
|
* @returns {void}
|
|
165
158
|
*/
|
|
166
159
|
unsetRemoteStreams() {
|
|
167
|
-
LoggerProxy.logger.warn(
|
|
168
|
-
'Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
|
|
169
|
-
);
|
|
170
|
-
this.unsetRemoteStream();
|
|
171
|
-
this.unsetRemoteShare();
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Unsets all remote tracks
|
|
176
|
-
* @returns {void}
|
|
177
|
-
*/
|
|
178
|
-
unsetRemoteTracks() {
|
|
179
160
|
this.unsetRemoteMedia();
|
|
180
|
-
this.
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
unsetShareStreams() {
|
|
184
|
-
this.unsetLocalShareTrack();
|
|
185
|
-
this.unsetRemoteShare();
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Removes both local and remote video stream from class instance
|
|
190
|
-
* @deprecated after v1.89.3
|
|
191
|
-
* @returns {void}
|
|
192
|
-
*/
|
|
193
|
-
unsetMediaStreams() {
|
|
194
|
-
LoggerProxy.logger.warn(
|
|
195
|
-
'Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)'
|
|
196
|
-
);
|
|
197
|
-
this.unsetLocalVideoTrack();
|
|
198
|
-
this.unsetRemoteStream();
|
|
161
|
+
this.unsetRemoteShareStream();
|
|
199
162
|
}
|
|
200
163
|
|
|
201
164
|
/**
|
|
202
|
-
*
|
|
203
|
-
* @returns {
|
|
165
|
+
* Returns if we have at least one local share stream or not.
|
|
166
|
+
* @returns {Boolean}
|
|
204
167
|
*/
|
|
205
|
-
|
|
206
|
-
this.
|
|
207
|
-
this.unsetRemoteMedia();
|
|
168
|
+
hasLocalShareStream() {
|
|
169
|
+
return !!(this.shareAudioStream || this.shareVideoStream);
|
|
208
170
|
}
|
|
209
171
|
|
|
210
172
|
/**
|
|
@@ -297,10 +259,25 @@ export default class MediaProperties {
|
|
|
297
259
|
|
|
298
260
|
return true;
|
|
299
261
|
}
|
|
262
|
+
LoggerProxy.logger.warn(
|
|
263
|
+
`Media:properties#getCurrentConnectionType --> missing localCandidate.protocol, candidateType=${localCandidate.candidateType}`
|
|
264
|
+
);
|
|
300
265
|
|
|
301
266
|
return false;
|
|
302
267
|
});
|
|
303
268
|
|
|
269
|
+
if (foundConnectionType === 'unknown') {
|
|
270
|
+
const candidatePairStates = allStatsReports
|
|
271
|
+
.filter((report) => report.type === 'candidate-pair')
|
|
272
|
+
.map((report) => report.state);
|
|
273
|
+
|
|
274
|
+
LoggerProxy.logger.warn(
|
|
275
|
+
`Media:properties#getCurrentConnectionType --> all candidate pair states: ${JSON.stringify(
|
|
276
|
+
candidatePairStates
|
|
277
|
+
)}`
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
|
|
304
281
|
return foundConnectionType;
|
|
305
282
|
}
|
|
306
283
|
}
|