@webex/plugin-meetings 3.8.0 → 3.8.1-next.10
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 +26 -13
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +70 -6
- package/dist/breakouts/index.js.map +1 -1
- package/dist/common/errors/webex-errors.js +12 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +28 -123
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +3 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +78 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/interpretation/index.js +4 -4
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +37 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +92 -12
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +432 -418
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +17 -17
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +94 -6
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/brbState.js +9 -2
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +21 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +678 -344
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +21 -22
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +4 -4
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +30 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +13 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +373 -68
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +5 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +136 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +14 -0
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +55 -9
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +3 -0
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +335 -353
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +137 -29
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +38 -0
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +36 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +10 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +40 -8
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reachability/clusterReachability.js +63 -27
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +107 -47
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +14 -0
- package/dist/reachability/reachability.types.js.map +1 -1
- package/dist/reachability/request.js +19 -3
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +2 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/util.js +5 -5
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/turnDiscovery.js +45 -27
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/types.js +17 -0
- package/dist/roap/types.js.map +1 -0
- package/dist/types/common/errors/webex-errors.d.ts +7 -1
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +20 -85
- package/dist/types/controls-options-manager/enums.d.ts +4 -1
- package/dist/types/controls-options-manager/types.d.ts +10 -1
- package/dist/types/locus-info/index.d.ts +3 -3
- package/dist/types/locus-info/selfUtils.d.ts +216 -1
- package/dist/types/media/properties.d.ts +15 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +20 -0
- package/dist/types/meeting/index.d.ts +65 -1
- package/dist/types/meeting/muteState.d.ts +0 -1
- package/dist/types/meeting/request.d.ts +12 -1
- package/dist/types/meeting/request.type.d.ts +6 -0
- package/dist/types/meeting/util.d.ts +3 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
- package/dist/types/meetings/index.d.ts +57 -0
- package/dist/types/member/index.d.ts +21 -6
- package/dist/types/member/types.d.ts +73 -14
- package/dist/types/member/util.d.ts +156 -1
- package/dist/types/members/collection.d.ts +6 -5
- package/dist/types/members/index.d.ts +32 -43
- package/dist/types/members/request.d.ts +26 -0
- package/dist/types/members/util.d.ts +27 -0
- package/dist/types/metrics/constants.d.ts +10 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
- package/dist/types/reachability/clusterReachability.d.ts +15 -7
- package/dist/types/reachability/index.d.ts +10 -1
- package/dist/types/reachability/reachability.types.d.ts +5 -0
- package/dist/types/roap/index.d.ts +3 -2
- package/dist/types/roap/turnDiscovery.d.ts +5 -17
- package/dist/types/roap/types.d.ts +16 -0
- package/dist/webinar/index.js +2 -2
- package/dist/webinar/index.js.map +1 -1
- package/package.json +24 -23
- package/src/breakouts/index.ts +69 -0
- package/src/common/errors/webex-errors.ts +8 -1
- package/src/config.ts +3 -0
- package/src/constants.ts +30 -90
- package/src/controls-options-manager/enums.ts +3 -0
- package/src/controls-options-manager/types.ts +16 -1
- package/src/controls-options-manager/util.ts +93 -0
- package/src/interpretation/index.ts +3 -3
- package/src/locus-info/controlsUtils.ts +59 -14
- package/src/locus-info/index.ts +97 -13
- package/src/locus-info/selfUtils.ts +496 -442
- package/src/media/index.ts +23 -21
- package/src/media/properties.ts +96 -0
- package/src/meeting/brbState.ts +11 -2
- package/src/meeting/in-meeting-actions.ts +40 -0
- package/src/meeting/index.ts +470 -105
- package/src/meeting/locusMediaRequest.ts +27 -22
- package/src/meeting/muteState.ts +4 -4
- package/src/meeting/request.ts +36 -1
- package/src/meeting/request.type.ts +7 -0
- package/src/meeting/util.ts +11 -2
- package/src/meeting-info/meeting-info-v2.ts +254 -8
- package/src/meeting-info/utilv2.ts +5 -0
- package/src/meetings/index.ts +148 -1
- package/src/meetings/util.ts +18 -0
- package/src/member/index.ts +68 -22
- package/src/member/types.ts +82 -16
- package/src/member/util.ts +357 -350
- package/src/members/collection.ts +4 -3
- package/src/members/index.ts +137 -18
- package/src/members/request.ts +44 -0
- package/src/members/util.ts +43 -1
- package/src/metrics/constants.ts +10 -0
- package/src/multistream/remoteMediaManager.ts +32 -10
- package/src/reachability/clusterReachability.ts +73 -26
- package/src/reachability/index.ts +62 -1
- package/src/reachability/reachability.types.ts +6 -0
- package/src/reachability/request.ts +7 -0
- package/src/reconnection-manager/index.ts +2 -2
- package/src/recording-controller/util.ts +17 -13
- package/src/roap/index.ts +3 -7
- package/src/roap/turnDiscovery.ts +34 -39
- package/src/roap/types.ts +23 -0
- package/src/webinar/index.ts +1 -1
- package/test/unit/spec/breakouts/index.ts +167 -95
- package/test/unit/spec/controls-options-manager/util.js +178 -0
- package/test/unit/spec/interpretation/index.ts +39 -1
- package/test/unit/spec/locus-info/controlsUtils.js +155 -9
- package/test/unit/spec/locus-info/index.js +209 -73
- package/test/unit/spec/locus-info/selfUtils.js +98 -24
- package/test/unit/spec/media/index.ts +150 -18
- package/test/unit/spec/media/properties.ts +130 -0
- package/test/unit/spec/meeting/brbState.ts +40 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +23 -4
- package/test/unit/spec/meeting/index.js +804 -139
- package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
- package/test/unit/spec/meeting/muteState.js +73 -2
- package/test/unit/spec/meeting/request.js +32 -1
- package/test/unit/spec/meeting/utils.js +119 -18
- package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
- package/test/unit/spec/meeting-info/utilv2.js +19 -0
- package/test/unit/spec/meetings/index.js +146 -2
- package/test/unit/spec/member/index.js +7 -0
- package/test/unit/spec/member/util.js +24 -0
- package/test/unit/spec/members/index.js +304 -78
- package/test/unit/spec/members/request.js +68 -22
- package/test/unit/spec/members/utils.js +75 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
- package/test/unit/spec/reachability/clusterReachability.ts +88 -56
- package/test/unit/spec/reachability/index.ts +97 -0
- package/test/unit/spec/reachability/request.js +47 -2
- package/test/unit/spec/reconnection-manager/index.js +4 -4
- package/test/unit/spec/roap/turnDiscovery.ts +110 -28
- package/test/unit/spec/webinar/index.ts +5 -0
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/parameter.d.ts +0 -15
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-error.js +0 -149
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -33
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -93
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -36
- package/dist/common/queue.d.ts +0 -34
- package/dist/config.d.ts +0 -72
- package/dist/constants.d.ts +0 -1088
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -15
- package/dist/controls-options-manager/index.d.ts +0 -136
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -322
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -272
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -34
- package/dist/media/properties.d.ts +0 -93
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/mediaQualityMetrics/config.js +0 -502
- package/dist/mediaQualityMetrics/config.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -167
- package/dist/meeting/index.d.ts +0 -1825
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -178
- package/dist/meeting/request.d.ts +0 -295
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -119
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -69
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -40
- package/dist/meetings/index.d.ts +0 -390
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -160
- package/dist/member/member.types.js +0 -17
- package/dist/member/member.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -29
- package/dist/members/index.d.ts +0 -353
- package/dist/members/request.d.ts +0 -114
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -215
- package/dist/metrics/config.js +0 -276
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -70
- package/dist/metrics/index.d.ts +0 -45
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/networkQualityMonitor/index.js +0 -221
- package/dist/networkQualityMonitor/index.js.map +0 -1
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -109
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/index.d.ts +0 -105
- package/dist/reachability/request.d.ts +0 -39
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -52
- package/dist/reconnection-manager/index.d.ts +0 -136
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -207
- package/dist/recording-controller/util.d.ts +0 -14
- package/dist/roap/collection.js +0 -62
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -275
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -86
- package/dist/roap/request.d.ts +0 -39
- package/dist/roap/state.js +0 -126
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -155
- package/dist/roap/util.js +0 -75
- package/dist/roap/util.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -61
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/statsAnalyzer/global.d.ts +0 -36
- package/dist/statsAnalyzer/global.js +0 -126
- package/dist/statsAnalyzer/global.js.map +0 -1
- package/dist/statsAnalyzer/index.d.ts +0 -217
- package/dist/statsAnalyzer/index.js +0 -1013
- package/dist/statsAnalyzer/index.js.map +0 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/statsAnalyzer/mqaUtil.js +0 -179
- package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
- package/dist/transcription/index.d.ts +0 -64
- package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/dist/types/statsAnalyzer/global.d.ts +0 -36
- package/dist/types/statsAnalyzer/index.d.ts +0 -217
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
package/src/media/index.ts
CHANGED
@@ -16,11 +16,13 @@ import {
|
|
16
16
|
LocalMicrophoneStream,
|
17
17
|
} from '@webex/media-helpers';
|
18
18
|
import {RtcMetrics} from '@webex/internal-plugin-metrics';
|
19
|
+
import {BrowserInfo} from '@webex/web-capabilities';
|
19
20
|
import LoggerProxy from '../common/logs/logger-proxy';
|
20
21
|
import {MEDIA_TRACK_CONSTRAINT} from '../constants';
|
21
22
|
import Config from '../config';
|
22
23
|
import StaticConfig from '../common/config';
|
23
24
|
import BrowserDetection from '../common/browser-detection';
|
25
|
+
import {TurnServerInfo} from '../roap/types';
|
24
26
|
|
25
27
|
const {isBrowser} = BrowserDetection();
|
26
28
|
|
@@ -138,13 +140,12 @@ Media.createMediaConnection = (
|
|
138
140
|
remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
|
139
141
|
enableRtx?: boolean;
|
140
142
|
enableExtmap?: boolean;
|
141
|
-
turnServerInfo?:
|
142
|
-
url: string;
|
143
|
-
username: string;
|
144
|
-
password: string;
|
145
|
-
};
|
143
|
+
turnServerInfo?: TurnServerInfo;
|
146
144
|
bundlePolicy?: BundlePolicy;
|
147
145
|
iceCandidatesTimeout?: number;
|
146
|
+
disableAudioMainDtx?: boolean;
|
147
|
+
enableAudioTwcc?: boolean;
|
148
|
+
stopIceGatheringAfterFirstRelayCandidate?: boolean;
|
148
149
|
}
|
149
150
|
) => {
|
150
151
|
const {
|
@@ -156,28 +157,18 @@ Media.createMediaConnection = (
|
|
156
157
|
turnServerInfo,
|
157
158
|
bundlePolicy,
|
158
159
|
iceCandidatesTimeout,
|
160
|
+
disableAudioMainDtx,
|
161
|
+
enableAudioTwcc,
|
162
|
+
stopIceGatheringAfterFirstRelayCandidate,
|
159
163
|
} = options;
|
160
164
|
|
161
165
|
const iceServers = [];
|
162
166
|
|
163
|
-
// we might not have any TURN server if TURN discovery failed or wasn't done or
|
164
|
-
|
165
|
-
if (turnServerInfo?.url) {
|
166
|
-
if (!isBrowser('firefox')) {
|
167
|
-
let bareTurnServer = turnServerInfo.url;
|
168
|
-
bareTurnServer = bareTurnServer.replace('turns:', 'turn:');
|
169
|
-
bareTurnServer = bareTurnServer.replace('443', '5004');
|
170
|
-
|
171
|
-
iceServers.push({
|
172
|
-
urls: bareTurnServer,
|
173
|
-
username: turnServerInfo.username || '',
|
174
|
-
credential: turnServerInfo.password || '',
|
175
|
-
});
|
176
|
-
}
|
177
|
-
|
167
|
+
// we might not have any TURN server if TURN discovery failed or wasn't done or we land on a video mesh node
|
168
|
+
if (turnServerInfo?.urls.length > 0) {
|
178
169
|
// TURN-TLS server
|
179
170
|
iceServers.push({
|
180
|
-
urls: turnServerInfo.
|
171
|
+
urls: turnServerInfo.urls,
|
181
172
|
username: turnServerInfo.username || '',
|
182
173
|
credential: turnServerInfo.password || '',
|
183
174
|
});
|
@@ -186,12 +177,23 @@ Media.createMediaConnection = (
|
|
186
177
|
if (isMultistream) {
|
187
178
|
const config: MultistreamConnectionConfig = {
|
188
179
|
iceServers,
|
180
|
+
disableAudioTwcc: !enableAudioTwcc,
|
189
181
|
};
|
190
182
|
|
191
183
|
if (bundlePolicy) {
|
192
184
|
config.bundlePolicy = bundlePolicy;
|
193
185
|
}
|
194
186
|
|
187
|
+
if (disableAudioMainDtx !== undefined) {
|
188
|
+
config.disableAudioMainDtx = disableAudioMainDtx;
|
189
|
+
}
|
190
|
+
|
191
|
+
if (BrowserInfo.isFirefox()) {
|
192
|
+
config.doFullIce = true;
|
193
|
+
|
194
|
+
config.stopIceGatheringAfterFirstRelayCandidate = stopIceGatheringAfterFirstRelayCandidate;
|
195
|
+
}
|
196
|
+
|
195
197
|
return new MultistreamRoapMediaConnection(
|
196
198
|
config,
|
197
199
|
meetingId,
|
package/src/media/properties.ts
CHANGED
@@ -7,6 +7,8 @@ import {
|
|
7
7
|
RemoteStream,
|
8
8
|
} from '@webex/media-helpers';
|
9
9
|
|
10
|
+
import {parse} from '@webex/ts-sdp';
|
11
|
+
import {ClientEvent} from '@webex/internal-plugin-metrics';
|
10
12
|
import {MEETINGS, QUALITY_LEVELS} from '../constants';
|
11
13
|
import LoggerProxy from '../common/logs/logger-proxy';
|
12
14
|
import MediaConnectionAwaiter from './MediaConnectionAwaiter';
|
@@ -20,6 +22,8 @@ export type MediaDirection = {
|
|
20
22
|
receiveShare: boolean;
|
21
23
|
};
|
22
24
|
|
25
|
+
export type IPVersion = ClientEvent['payload']['ipVersion'];
|
26
|
+
|
23
27
|
/**
|
24
28
|
* @class MediaProperties
|
25
29
|
*/
|
@@ -212,6 +216,91 @@ export default class MediaProperties {
|
|
212
216
|
};
|
213
217
|
}
|
214
218
|
|
219
|
+
/**
|
220
|
+
* Checks if the given IP address is IPv6
|
221
|
+
* @param {string} ip address to check
|
222
|
+
* @returns {boolean} true if the address is IPv6, false otherwise
|
223
|
+
*/
|
224
|
+
private isIPv6(ip: string): boolean {
|
225
|
+
return ip.includes(':');
|
226
|
+
}
|
227
|
+
|
228
|
+
/** Finds out if we connected using IPv4 or IPv6
|
229
|
+
* @param {RTCPeerConnection} webrtcMediaConnection
|
230
|
+
* @param {Array<any>} allStatsReports array of RTC stats reports
|
231
|
+
* @returns {string} IPVersion
|
232
|
+
*/
|
233
|
+
private getConnectionIpVersion(
|
234
|
+
webrtcMediaConnection: RTCPeerConnection,
|
235
|
+
allStatsReports: any[]
|
236
|
+
): IPVersion | undefined {
|
237
|
+
const transports = allStatsReports.filter((report) => report.type === 'transport');
|
238
|
+
|
239
|
+
let selectedCandidatePair;
|
240
|
+
|
241
|
+
if (transports.length > 0 && transports[0].selectedCandidatePairId) {
|
242
|
+
selectedCandidatePair = allStatsReports.find(
|
243
|
+
(report) =>
|
244
|
+
report.type === 'candidate-pair' && report.id === transports[0].selectedCandidatePairId
|
245
|
+
);
|
246
|
+
} else {
|
247
|
+
// Firefox doesn't have selectedCandidatePairId, but has selected property on the candidate pair
|
248
|
+
selectedCandidatePair = allStatsReports.find(
|
249
|
+
(report) => report.type === 'candidate-pair' && report.selected
|
250
|
+
);
|
251
|
+
}
|
252
|
+
|
253
|
+
if (selectedCandidatePair) {
|
254
|
+
const localCandidate = allStatsReports.find(
|
255
|
+
(report) =>
|
256
|
+
report.type === 'local-candidate' && report.id === selectedCandidatePair.localCandidateId
|
257
|
+
);
|
258
|
+
|
259
|
+
if (localCandidate) {
|
260
|
+
if (localCandidate.address) {
|
261
|
+
return this.isIPv6(localCandidate.address) ? 'IPv6' : 'IPv4';
|
262
|
+
}
|
263
|
+
|
264
|
+
try {
|
265
|
+
// safari doesn't have address field on the candidate, so we have to use the port to look up the candidate in the SDP
|
266
|
+
const localSdp = webrtcMediaConnection.localDescription.sdp;
|
267
|
+
|
268
|
+
const parsedSdp = parse(localSdp);
|
269
|
+
|
270
|
+
for (const mediaLine of parsedSdp.avMedia) {
|
271
|
+
const matchingCandidate = mediaLine.iceInfo.candidates.find(
|
272
|
+
(candidate) => candidate.port === localCandidate.port
|
273
|
+
);
|
274
|
+
if (matchingCandidate) {
|
275
|
+
return this.isIPv6(matchingCandidate.connectionAddress) ? 'IPv6' : 'IPv4';
|
276
|
+
}
|
277
|
+
}
|
278
|
+
|
279
|
+
LoggerProxy.logger.warn(
|
280
|
+
`Media:properties#getConnectionIpVersion --> failed to find local candidate in the SDP for port ${localCandidate.port}`
|
281
|
+
);
|
282
|
+
} catch (error) {
|
283
|
+
LoggerProxy.logger.warn(
|
284
|
+
`Media:properties#getConnectionIpVersion --> error while trying to find candidate in local SDP:`,
|
285
|
+
error
|
286
|
+
);
|
287
|
+
|
288
|
+
return undefined;
|
289
|
+
}
|
290
|
+
} else {
|
291
|
+
LoggerProxy.logger.warn(
|
292
|
+
`Media:properties#getConnectionIpVersion --> failed to find local candidate "${selectedCandidatePair.localCandidateId}" in getStats() results`
|
293
|
+
);
|
294
|
+
}
|
295
|
+
} else {
|
296
|
+
LoggerProxy.logger.warn(
|
297
|
+
`Media:properties#getConnectionIpVersion --> failed to find selected candidate pair in getStats() results (transports.length=${transports.length}, selectedCandidatePairId=${transports[0]?.selectedCandidatePairId})`
|
298
|
+
);
|
299
|
+
}
|
300
|
+
|
301
|
+
return undefined;
|
302
|
+
}
|
303
|
+
|
215
304
|
/**
|
216
305
|
* Returns the type of a connection that has been established
|
217
306
|
* It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'
|
@@ -284,6 +373,7 @@ export default class MediaProperties {
|
|
284
373
|
*/
|
285
374
|
async getCurrentConnectionInfo(): Promise<{
|
286
375
|
connectionType: string;
|
376
|
+
ipVersion?: IPVersion;
|
287
377
|
selectedCandidatePairChanges: number;
|
288
378
|
numTransports: number;
|
289
379
|
}> {
|
@@ -309,10 +399,15 @@ export default class MediaProperties {
|
|
309
399
|
});
|
310
400
|
|
311
401
|
const connectionType = this.getConnectionType(allStatsReports);
|
402
|
+
const rtcPeerconnection =
|
403
|
+
this.webrtcMediaConnection.multistreamConnection?.pc.pc ||
|
404
|
+
this.webrtcMediaConnection.mediaConnection?.pc;
|
405
|
+
const ipVersion = this.getConnectionIpVersion(rtcPeerconnection, allStatsReports);
|
312
406
|
const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);
|
313
407
|
|
314
408
|
return {
|
315
409
|
connectionType,
|
410
|
+
ipVersion,
|
316
411
|
selectedCandidatePairChanges,
|
317
412
|
numTransports,
|
318
413
|
};
|
@@ -323,6 +418,7 @@ export default class MediaProperties {
|
|
323
418
|
|
324
419
|
return {
|
325
420
|
connectionType: 'unknown',
|
421
|
+
ipVersion: undefined,
|
326
422
|
selectedCandidatePairChanges: -1,
|
327
423
|
numTransports: 0,
|
328
424
|
};
|
package/src/meeting/brbState.ts
CHANGED
@@ -95,6 +95,13 @@ export class BrbState {
|
|
95
95
|
return this.sendLocalBrbStateToServer(sendSlotManager)
|
96
96
|
.then(() => {
|
97
97
|
this.state.syncToServerInProgress = false;
|
98
|
+
|
99
|
+
// This is a workaround for the fact that the server does not send the brb state
|
100
|
+
// in the locus update when a user joins from multiple devices but not all devices are requested brb.
|
101
|
+
// In the future, this could be improved with a new brb locus update handler
|
102
|
+
// https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-655626
|
103
|
+
this.handleServerBrbUpdate(this.state.client.enabled);
|
104
|
+
|
98
105
|
LoggerProxy.logger.info(
|
99
106
|
`Meeting:brbState#applyClientStateToServer: sync with server completed`
|
100
107
|
);
|
@@ -102,9 +109,11 @@ export class BrbState {
|
|
102
109
|
// need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
|
103
110
|
this.applyClientStateToServer(sendSlotManager);
|
104
111
|
})
|
105
|
-
.catch((
|
112
|
+
.catch((error) => {
|
106
113
|
this.state.syncToServerInProgress = false;
|
107
|
-
LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer:
|
114
|
+
LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer: Error: ${error}`);
|
115
|
+
|
116
|
+
return Promise.reject(error);
|
108
117
|
});
|
109
118
|
}
|
110
119
|
|
@@ -81,6 +81,8 @@ interface IInMeetingActions {
|
|
81
81
|
canShareDesktop?: boolean;
|
82
82
|
canShareContent?: boolean;
|
83
83
|
canTransferFile?: boolean;
|
84
|
+
canRealtimeCloseCaption?: boolean;
|
85
|
+
canRealtimeCloseCaptionManual?: boolean;
|
84
86
|
canChat?: boolean;
|
85
87
|
canDoVideo?: boolean;
|
86
88
|
canAnnotate?: boolean;
|
@@ -99,6 +101,14 @@ interface IInMeetingActions {
|
|
99
101
|
isPracticeSessionOff?: boolean;
|
100
102
|
canStartPracticeSession?: boolean;
|
101
103
|
canStopPracticeSession?: boolean;
|
104
|
+
requiresPostMeetingDataConsentPrompt?: boolean;
|
105
|
+
canEnableAnnotation?: boolean;
|
106
|
+
canDisableAnnotation?: boolean;
|
107
|
+
canEnableRemoteDesktopControl?: boolean;
|
108
|
+
canDisableRemoteDesktopControl?: boolean;
|
109
|
+
canMoveToLobby?: boolean;
|
110
|
+
canEnablePollingQA?: boolean;
|
111
|
+
canDisablePollingQA?: boolean;
|
102
112
|
}
|
103
113
|
|
104
114
|
/**
|
@@ -249,6 +259,10 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
249
259
|
|
250
260
|
canTransferFile = null;
|
251
261
|
|
262
|
+
canRealtimeCloseCaption = null;
|
263
|
+
|
264
|
+
canRealtimeCloseCaptionManual = null;
|
265
|
+
|
252
266
|
canChat = null;
|
253
267
|
|
254
268
|
canDoVideo = null;
|
@@ -285,6 +299,22 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
285
299
|
|
286
300
|
canStopPracticeSession = null;
|
287
301
|
|
302
|
+
requiresPostMeetingDataConsentPrompt = null;
|
303
|
+
|
304
|
+
canEnableAnnotation = null;
|
305
|
+
|
306
|
+
canDisableAnnotation = null;
|
307
|
+
|
308
|
+
canEnableRemoteDesktopControl = null;
|
309
|
+
|
310
|
+
canDisableRemoteDesktopControl = null;
|
311
|
+
|
312
|
+
canMoveToLobby = null;
|
313
|
+
|
314
|
+
canEnablePollingQA = null;
|
315
|
+
|
316
|
+
canDisablePollingQA = null;
|
317
|
+
|
288
318
|
/**
|
289
319
|
* Returns all meeting action options
|
290
320
|
* @returns {Object}
|
@@ -361,6 +391,8 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
361
391
|
canShareDesktop: this.canShareDesktop,
|
362
392
|
canShareContent: this.canShareContent,
|
363
393
|
canTransferFile: this.canTransferFile,
|
394
|
+
canRealtimeCloseCaption: this.canRealtimeCloseCaption,
|
395
|
+
canRealtimeCloseCaptionManual: this.canRealtimeCloseCaptionManual,
|
364
396
|
canChat: this.canChat,
|
365
397
|
canDoVideo: this.canDoVideo,
|
366
398
|
canAnnotate: this.canAnnotate,
|
@@ -379,6 +411,14 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
379
411
|
isPracticeSessionOff: this.isPracticeSessionOff,
|
380
412
|
canStartPracticeSession: this.canStartPracticeSession,
|
381
413
|
canStopPracticeSession: this.canStopPracticeSession,
|
414
|
+
requiresPostMeetingDataConsentPrompt: this.requiresPostMeetingDataConsentPrompt,
|
415
|
+
canEnableAnnotation: this.canEnableAnnotation,
|
416
|
+
canDisableAnnotation: this.canDisableAnnotation,
|
417
|
+
canEnableRemoteDesktopControl: this.canEnableRemoteDesktopControl,
|
418
|
+
canDisableRemoteDesktopControl: this.canDisableRemoteDesktopControl,
|
419
|
+
canMoveToLobby: this.canMoveToLobby,
|
420
|
+
canEnablePollingQA: this.canEnablePollingQA,
|
421
|
+
canDisablePollingQA: this.canDisablePollingQA,
|
382
422
|
});
|
383
423
|
|
384
424
|
/**
|