@webex/plugin-meetings 3.0.0-beta.23 → 3.0.0-beta.231
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 +841 -19
- 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/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 +188 -27
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- 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 +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +106 -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 +357 -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 +43 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +219 -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 +49 -106
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +29 -90
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +90 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2583 -2557
- 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 +228 -123
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +244 -194
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +568 -414
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +48 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +171 -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 +367 -86
- 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 +88 -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 +3 -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 +173 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reachability/index.js +90 -30
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +16 -7
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +196 -155
- 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 +25 -29
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +111 -89
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +97 -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/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -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/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +81 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1028 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- 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/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +271 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
- package/dist/types/meeting/index.d.ts +1512 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +289 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +94 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +361 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +159 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +158 -0
- package/dist/types/reachability/request.d.ts +39 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +47 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- 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 +710 -10
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -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 +175 -18
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +39 -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 +381 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +224 -39
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +89 -109
- package/src/media/properties.ts +48 -87
- package/src/meeting/in-meeting-actions.ts +179 -3
- package/src/meeting/index.ts +2061 -2133
- package/src/meeting/locusMediaRequest.ts +314 -0
- package/src/meeting/muteState.ts +227 -130
- package/src/meeting/request.ts +157 -116
- package/src/meeting/util.ts +555 -396
- package/src/meeting-info/index.ts +54 -8
- package/src/meeting-info/meeting-info-v2.ts +148 -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 +405 -106
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +103 -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 +2 -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 +113 -32
- package/src/reachability/index.ts +76 -18
- package/src/reachability/request.ts +16 -7
- package/src/reconnection-manager/index.ts +68 -43
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +25 -30
- package/src/roap/request.ts +103 -95
- 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 +233 -0
- package/test/integration/spec/journey.js +336 -259
- 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 +1545 -48
- 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 +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- 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 +1169 -36
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -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 +138 -28
- package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
- package/test/unit/spec/meeting/index.js +3510 -1747
- package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +417 -45
- package/test/unit/spec/meeting/utils.js +601 -53
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +383 -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 +874 -150
- 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 +318 -0
- package/test/unit/spec/reachability/index.ts +185 -7
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +59 -6
- 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 +27 -51
- package/test/unit/spec/roap/request.ts +202 -85
- package/test/unit/spec/roap/turnDiscovery.ts +36 -8
- package/test/unit/spec/rtcMetrics/index.ts +68 -0
- package/test/unit/spec/stats-analyzer/index.js +29 -2
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +6 -3
- 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/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
|
@@ -176,15 +176,14 @@ export default class TurnDiscovery {
|
|
|
176
176
|
return this.roapRequest
|
|
177
177
|
.sendRoap({
|
|
178
178
|
roapMessage,
|
|
179
|
-
correlationId: meeting.correlationId,
|
|
180
179
|
// @ts-ignore - Fix missing type
|
|
181
180
|
locusSelfUrl: meeting.selfUrl,
|
|
182
181
|
// @ts-ignore - Fix missing type
|
|
183
182
|
mediaId: isReconnecting ? '' : meeting.mediaId,
|
|
184
|
-
audioMuted: meeting.isAudioMuted(),
|
|
185
|
-
videoMuted: meeting.isVideoMuted(),
|
|
186
183
|
meetingId: meeting.id,
|
|
187
|
-
|
|
184
|
+
locusMediaRequest: meeting.locusMediaRequest,
|
|
185
|
+
// @ts-ignore - because of meeting.webex
|
|
186
|
+
ipVersion: meeting.webex.meetings.reachability.getIpVersion(),
|
|
188
187
|
})
|
|
189
188
|
.then(({mediaConnections}) => {
|
|
190
189
|
if (mediaConnections) {
|
|
@@ -213,14 +212,55 @@ export default class TurnDiscovery {
|
|
|
213
212
|
locusSelfUrl: meeting.selfUrl,
|
|
214
213
|
// @ts-ignore - fix type
|
|
215
214
|
mediaId: meeting.mediaId,
|
|
216
|
-
correlationId: meeting.correlationId,
|
|
217
|
-
audioMuted: meeting.isAudioMuted(),
|
|
218
|
-
videoMuted: meeting.isVideoMuted(),
|
|
219
215
|
meetingId: meeting.id,
|
|
220
|
-
|
|
216
|
+
locusMediaRequest: meeting.locusMediaRequest,
|
|
217
|
+
// @ts-ignore - because of meeting.webex
|
|
218
|
+
ipVersion: meeting.webex.meetings.reachability.getIpVersion(),
|
|
221
219
|
});
|
|
222
220
|
}
|
|
223
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Gets the reason why reachability is skipped.
|
|
224
|
+
*
|
|
225
|
+
* @param {Meeting} meeting
|
|
226
|
+
* @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
|
|
227
|
+
*/
|
|
228
|
+
private async getSkipReason(meeting: Meeting): Promise<string> {
|
|
229
|
+
// @ts-ignore - fix type
|
|
230
|
+
const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
|
|
231
|
+
|
|
232
|
+
if (isAnyClusterReachable) {
|
|
233
|
+
LoggerProxy.logger.info(
|
|
234
|
+
'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
return 'reachability';
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// @ts-ignore - fix type
|
|
241
|
+
if (!meeting.config.experimental.enableTurnDiscovery) {
|
|
242
|
+
LoggerProxy.logger.info(
|
|
243
|
+
'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
return 'config';
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return '';
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Checks if TURN discovery is skipped.
|
|
254
|
+
*
|
|
255
|
+
* @param {Meeting} meeting
|
|
256
|
+
* @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
|
|
257
|
+
*/
|
|
258
|
+
async isSkipped(meeting) {
|
|
259
|
+
const skipReason = await this.getSkipReason(meeting);
|
|
260
|
+
|
|
261
|
+
return !!skipReason;
|
|
262
|
+
}
|
|
263
|
+
|
|
224
264
|
/**
|
|
225
265
|
* Retrieves TURN server information from the backend by doing
|
|
226
266
|
* a roap message exchange:
|
|
@@ -239,29 +279,15 @@ export default class TurnDiscovery {
|
|
|
239
279
|
* @returns {Promise}
|
|
240
280
|
*/
|
|
241
281
|
async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
|
|
242
|
-
|
|
243
|
-
const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
|
|
244
|
-
|
|
245
|
-
if (isAnyClusterReachable) {
|
|
246
|
-
LoggerProxy.logger.info(
|
|
247
|
-
'Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery'
|
|
248
|
-
);
|
|
282
|
+
const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
|
|
249
283
|
|
|
284
|
+
if (turnDiscoverySkippedReason) {
|
|
250
285
|
return {
|
|
251
286
|
turnServerInfo: undefined,
|
|
252
|
-
turnDiscoverySkippedReason
|
|
287
|
+
turnDiscoverySkippedReason,
|
|
253
288
|
};
|
|
254
289
|
}
|
|
255
290
|
|
|
256
|
-
// @ts-ignore - fix type
|
|
257
|
-
if (!meeting.config.experimental.enableTurnDiscovery) {
|
|
258
|
-
LoggerProxy.logger.info(
|
|
259
|
-
'Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it'
|
|
260
|
-
);
|
|
261
|
-
|
|
262
|
-
return {turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'};
|
|
263
|
-
}
|
|
264
|
-
|
|
265
291
|
return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)
|
|
266
292
|
.then(() => this.waitForTurnDiscoveryResponse())
|
|
267
293
|
.then(() => this.sendRoapOK(meeting))
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import RTC_METRICS from './constants';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Rtc Metrics
|
|
5
|
+
*/
|
|
6
|
+
export default class RtcMetrics {
|
|
7
|
+
/**
|
|
8
|
+
* Array of MetricData items to be sent to the metrics service.
|
|
9
|
+
*/
|
|
10
|
+
metricsQueue = [];
|
|
11
|
+
|
|
12
|
+
intervalId: number;
|
|
13
|
+
|
|
14
|
+
webex: any;
|
|
15
|
+
|
|
16
|
+
meetingId: string;
|
|
17
|
+
|
|
18
|
+
correlationId: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Initialize the interval.
|
|
22
|
+
*
|
|
23
|
+
* @param {object} webex - The main `webex` object.
|
|
24
|
+
* @param {string} meetingId - The meeting id.
|
|
25
|
+
* @param {string} correlationId - The correlation id.
|
|
26
|
+
*/
|
|
27
|
+
constructor(webex, meetingId, correlationId) {
|
|
28
|
+
// `window` is used to prevent typescript from returning a NodeJS.Timer.
|
|
29
|
+
this.intervalId = window.setInterval(this.checkMetrics.bind(this), 30 * 1000);
|
|
30
|
+
this.meetingId = meetingId;
|
|
31
|
+
this.webex = webex;
|
|
32
|
+
this.correlationId = correlationId;
|
|
33
|
+
// Send the first set of metrics at 5 seconds in the case of a user leaving the call shortly after joining.
|
|
34
|
+
setTimeout(this.checkMetrics.bind(this), 5 * 1000);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Check to see if the metrics queue has any items.
|
|
39
|
+
*
|
|
40
|
+
* @returns {void}
|
|
41
|
+
*/
|
|
42
|
+
private checkMetrics() {
|
|
43
|
+
if (this.metricsQueue.length) {
|
|
44
|
+
this.sendMetrics();
|
|
45
|
+
this.metricsQueue = [];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Add metrics items to the metrics queue.
|
|
51
|
+
*
|
|
52
|
+
* @param {object} data - An object with a payload array of metrics items.
|
|
53
|
+
*
|
|
54
|
+
* @returns {void}
|
|
55
|
+
*/
|
|
56
|
+
addMetrics(data) {
|
|
57
|
+
if (data.payload.length) {
|
|
58
|
+
this.metricsQueue.push(data);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Clear the metrics interval.
|
|
64
|
+
*
|
|
65
|
+
* @returns {void}
|
|
66
|
+
*/
|
|
67
|
+
closeMetrics() {
|
|
68
|
+
this.checkMetrics();
|
|
69
|
+
clearInterval(this.intervalId);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Send metrics to the metrics service.
|
|
74
|
+
*
|
|
75
|
+
* @returns {void}
|
|
76
|
+
*/
|
|
77
|
+
private sendMetrics() {
|
|
78
|
+
this.webex.request({
|
|
79
|
+
method: 'POST',
|
|
80
|
+
service: 'unifiedTelemetry',
|
|
81
|
+
resource: 'metric/v2',
|
|
82
|
+
headers: {
|
|
83
|
+
type: 'webrtcMedia',
|
|
84
|
+
appId: RTC_METRICS.APP_ID,
|
|
85
|
+
},
|
|
86
|
+
body: {
|
|
87
|
+
metrics: [
|
|
88
|
+
{
|
|
89
|
+
type: 'webrtc',
|
|
90
|
+
version: '1.0.1',
|
|
91
|
+
userId: this.webex.internal.device.userId,
|
|
92
|
+
meetingId: this.meetingId,
|
|
93
|
+
correlationId: this.correlationId,
|
|
94
|
+
data: this.metricsQueue,
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
getVideoSenderMqa,
|
|
29
29
|
getVideoReceiverMqa,
|
|
30
30
|
} from './mqaUtil';
|
|
31
|
+
import {ReceiveSlot} from '../multistream/receiveSlot';
|
|
31
32
|
|
|
32
33
|
export const EVENTS = {
|
|
33
34
|
MEDIA_QUALITY: 'MEDIA_QUALITY',
|
|
@@ -53,6 +54,8 @@ const emptyReceiver = {
|
|
|
53
54
|
meanRoundTripTime: [],
|
|
54
55
|
};
|
|
55
56
|
|
|
57
|
+
type ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;
|
|
58
|
+
|
|
56
59
|
/**
|
|
57
60
|
* Stats Analyzer class that will emit events based on detected quality
|
|
58
61
|
*
|
|
@@ -74,17 +77,20 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
74
77
|
statsInterval: NodeJS.Timeout;
|
|
75
78
|
statsResults: any;
|
|
76
79
|
statsStarted: any;
|
|
80
|
+
receiveSlotCallback: ReceiveSlotCallback;
|
|
77
81
|
|
|
78
82
|
/**
|
|
79
83
|
* Creates a new instance of StatsAnalyzer
|
|
80
84
|
* @constructor
|
|
81
85
|
* @public
|
|
82
86
|
* @param {Object} config SDK Configuration Object
|
|
87
|
+
* @param {Function} receiveSlotCallback Callback used to access receive slots.
|
|
83
88
|
* @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
|
|
84
89
|
* @param {Object} statsResults Default properties for stats
|
|
85
90
|
*/
|
|
86
91
|
constructor(
|
|
87
92
|
config: any,
|
|
93
|
+
receiveSlotCallback: ReceiveSlotCallback = () => undefined,
|
|
88
94
|
networkQualityMonitor: object = {},
|
|
89
95
|
statsResults: object = defaultStats
|
|
90
96
|
) {
|
|
@@ -98,6 +104,7 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
98
104
|
this.mqaSentCount = -1;
|
|
99
105
|
this.lastMqaDataSent = {};
|
|
100
106
|
this.lastEmittedStartStopEvent = {};
|
|
107
|
+
this.receiveSlotCallback = receiveSlotCallback;
|
|
101
108
|
}
|
|
102
109
|
|
|
103
110
|
/**
|
|
@@ -293,7 +300,6 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
293
300
|
this.mediaConnection = null;
|
|
294
301
|
});
|
|
295
302
|
}
|
|
296
|
-
this.mediaConnection = null;
|
|
297
303
|
|
|
298
304
|
return Promise.resolve();
|
|
299
305
|
}
|
|
@@ -492,23 +498,23 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
492
498
|
const getCurrentStatsTotals = (keyPrefix: string, value: string): number =>
|
|
493
499
|
Object.keys(this.statsResults)
|
|
494
500
|
.filter((key) => key.startsWith(keyPrefix))
|
|
495
|
-
.reduce((prev, cur) => prev + (this.statsResults[cur]
|
|
501
|
+
.reduce((prev, cur) => prev + (this.statsResults[cur]?.recv[value] || 0), 0);
|
|
496
502
|
|
|
497
503
|
const getPreviousStatsTotals = (keyPrefix: string, value: string): number =>
|
|
498
504
|
Object.keys(this.statsResults)
|
|
499
505
|
.filter((key) => key.startsWith(keyPrefix))
|
|
500
|
-
.reduce((prev, cur) => prev + (this.lastStatsResults[cur]
|
|
506
|
+
.reduce((prev, cur) => prev + (this.lastStatsResults[cur]?.recv[value] || 0), 0);
|
|
501
507
|
|
|
502
508
|
const getCurrentResolutionsStatsTotals = (keyPrefix: string, value: string): number =>
|
|
503
509
|
Object.keys(this.statsResults)
|
|
504
510
|
.filter((key) => key.startsWith(keyPrefix))
|
|
505
|
-
.reduce((prev, cur) => prev + (this.statsResults.resolutions[cur]
|
|
511
|
+
.reduce((prev, cur) => prev + (this.statsResults.resolutions[cur]?.recv[value] || 0), 0);
|
|
506
512
|
|
|
507
513
|
const getPreviousResolutionsStatsTotals = (keyPrefix: string, value: string): number =>
|
|
508
514
|
Object.keys(this.statsResults)
|
|
509
515
|
.filter((key) => key.startsWith(keyPrefix))
|
|
510
516
|
.reduce(
|
|
511
|
-
(prev, cur) => prev + (this.lastStatsResults.resolutions[cur]
|
|
517
|
+
(prev, cur) => prev + (this.lastStatsResults.resolutions[cur]?.recv[value] || 0),
|
|
512
518
|
0
|
|
513
519
|
);
|
|
514
520
|
|
|
@@ -523,7 +529,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
523
529
|
currentStats.totalPacketsSent === 0
|
|
524
530
|
) {
|
|
525
531
|
LoggerProxy.logger.info(
|
|
526
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent
|
|
532
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`,
|
|
533
|
+
currentStats.totalPacketsSent
|
|
527
534
|
);
|
|
528
535
|
} else {
|
|
529
536
|
if (
|
|
@@ -531,7 +538,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
531
538
|
currentStats.totalAudioEnergy === 0
|
|
532
539
|
) {
|
|
533
540
|
LoggerProxy.logger.info(
|
|
534
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present
|
|
541
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`,
|
|
542
|
+
currentStats.totalAudioEnergy
|
|
535
543
|
);
|
|
536
544
|
}
|
|
537
545
|
|
|
@@ -565,14 +573,16 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
565
573
|
|
|
566
574
|
if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
|
|
567
575
|
LoggerProxy.logger.info(
|
|
568
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received
|
|
576
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received`,
|
|
577
|
+
currentPacketsReceived
|
|
569
578
|
);
|
|
570
579
|
} else if (
|
|
571
580
|
currentSamplesReceived === previousSamplesReceived ||
|
|
572
581
|
currentSamplesReceived === 0
|
|
573
582
|
) {
|
|
574
583
|
LoggerProxy.logger.info(
|
|
575
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No audio samples received
|
|
584
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No audio samples received`,
|
|
585
|
+
currentSamplesReceived
|
|
576
586
|
);
|
|
577
587
|
}
|
|
578
588
|
|
|
@@ -589,7 +599,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
589
599
|
currentStats.totalPacketsSent === 0
|
|
590
600
|
) {
|
|
591
601
|
LoggerProxy.logger.info(
|
|
592
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent
|
|
602
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`,
|
|
603
|
+
currentStats.totalPacketsSent
|
|
593
604
|
);
|
|
594
605
|
} else {
|
|
595
606
|
if (
|
|
@@ -597,7 +608,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
597
608
|
currentStats.framesEncoded === 0
|
|
598
609
|
) {
|
|
599
610
|
LoggerProxy.logger.info(
|
|
600
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded
|
|
611
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`,
|
|
612
|
+
currentStats.framesEncoded
|
|
601
613
|
);
|
|
602
614
|
}
|
|
603
615
|
|
|
@@ -607,7 +619,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
607
619
|
this.statsResults.resolutions['video-send'].send.framesSent === 0
|
|
608
620
|
) {
|
|
609
621
|
LoggerProxy.logger.info(
|
|
610
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent
|
|
622
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`,
|
|
623
|
+
this.statsResults.resolutions['video-send'].send.framesSent
|
|
611
624
|
);
|
|
612
625
|
}
|
|
613
626
|
}
|
|
@@ -643,24 +656,28 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
643
656
|
|
|
644
657
|
if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
|
|
645
658
|
LoggerProxy.logger.info(
|
|
646
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received
|
|
659
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received`,
|
|
660
|
+
currentPacketsReceived
|
|
647
661
|
);
|
|
648
662
|
} else {
|
|
649
663
|
if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
|
|
650
664
|
LoggerProxy.logger.info(
|
|
651
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No video frames received
|
|
665
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No video frames received`,
|
|
666
|
+
currentFramesReceived
|
|
652
667
|
);
|
|
653
668
|
}
|
|
654
669
|
|
|
655
670
|
if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
|
|
656
671
|
LoggerProxy.logger.info(
|
|
657
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded
|
|
672
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded`,
|
|
673
|
+
currentFramesDecoded
|
|
658
674
|
);
|
|
659
675
|
}
|
|
660
676
|
|
|
661
677
|
if (currentFramesDropped - previousFramesDropped > 10) {
|
|
662
678
|
LoggerProxy.logger.info(
|
|
663
|
-
`StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped
|
|
679
|
+
`StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped`,
|
|
680
|
+
currentFramesDropped - previousFramesDropped
|
|
664
681
|
);
|
|
665
682
|
}
|
|
666
683
|
}
|
|
@@ -679,7 +696,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
679
696
|
currentStats.totalPacketsSent === 0
|
|
680
697
|
) {
|
|
681
698
|
LoggerProxy.logger.info(
|
|
682
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent
|
|
699
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`,
|
|
700
|
+
currentStats.totalPacketsSent
|
|
683
701
|
);
|
|
684
702
|
} else {
|
|
685
703
|
if (
|
|
@@ -687,7 +705,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
687
705
|
currentStats.framesEncoded === 0
|
|
688
706
|
) {
|
|
689
707
|
LoggerProxy.logger.info(
|
|
690
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded
|
|
708
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`,
|
|
709
|
+
currentStats.framesEncoded
|
|
691
710
|
);
|
|
692
711
|
}
|
|
693
712
|
|
|
@@ -697,7 +716,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
697
716
|
this.statsResults.resolutions['video-share-send'].send.framesSent === 0
|
|
698
717
|
) {
|
|
699
718
|
LoggerProxy.logger.info(
|
|
700
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No share frames sent
|
|
719
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`,
|
|
720
|
+
this.statsResults.resolutions['video-share-send'].send.framesSent
|
|
701
721
|
);
|
|
702
722
|
}
|
|
703
723
|
}
|
|
@@ -735,24 +755,28 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
735
755
|
|
|
736
756
|
if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
|
|
737
757
|
LoggerProxy.logger.info(
|
|
738
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received
|
|
758
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received`,
|
|
759
|
+
currentPacketsReceived
|
|
739
760
|
);
|
|
740
761
|
} else {
|
|
741
762
|
if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
|
|
742
763
|
LoggerProxy.logger.info(
|
|
743
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No share frames received
|
|
764
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No share frames received`,
|
|
765
|
+
currentFramesReceived
|
|
744
766
|
);
|
|
745
767
|
}
|
|
746
768
|
|
|
747
769
|
if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
|
|
748
770
|
LoggerProxy.logger.info(
|
|
749
|
-
`StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded
|
|
771
|
+
`StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded`,
|
|
772
|
+
currentFramesDecoded
|
|
750
773
|
);
|
|
751
774
|
}
|
|
752
775
|
|
|
753
776
|
if (currentFramesDropped - previousFramesDropped > 10) {
|
|
754
777
|
LoggerProxy.logger.info(
|
|
755
|
-
`StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped
|
|
778
|
+
`StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped`,
|
|
779
|
+
currentFramesDropped - previousFramesDropped
|
|
756
780
|
);
|
|
757
781
|
}
|
|
758
782
|
}
|
|
@@ -853,6 +877,14 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
853
877
|
if (result.bytesSent) {
|
|
854
878
|
let kilobytes = 0;
|
|
855
879
|
|
|
880
|
+
if (result.frameWidth && result.frameHeight) {
|
|
881
|
+
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
882
|
+
this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
|
|
883
|
+
this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
884
|
+
this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent =
|
|
885
|
+
result.hugeFramesSent;
|
|
886
|
+
}
|
|
887
|
+
|
|
856
888
|
if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
|
|
857
889
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
858
890
|
}
|
|
@@ -925,6 +957,17 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
925
957
|
|
|
926
958
|
if (result.bytesReceived) {
|
|
927
959
|
let kilobytes = 0;
|
|
960
|
+
const receiveSlot = this.receiveSlotCallback(result.ssrc);
|
|
961
|
+
const idAndCsi = receiveSlot
|
|
962
|
+
? `id: "${receiveSlot.id || ''}"${receiveSlot.csi ? ` and csi: ${receiveSlot.csi}` : ''}`
|
|
963
|
+
: '';
|
|
964
|
+
|
|
965
|
+
if (result.frameWidth && result.frameHeight) {
|
|
966
|
+
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
967
|
+
this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
|
|
968
|
+
this.statsResults.resolutions[mediaType][sendrecvType].framesReceived =
|
|
969
|
+
result.framesReceived;
|
|
970
|
+
}
|
|
928
971
|
|
|
929
972
|
if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
|
|
930
973
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived =
|
|
@@ -974,10 +1017,12 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
974
1017
|
result.packetsReceived;
|
|
975
1018
|
|
|
976
1019
|
if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
1020
|
+
if (receiveSlot) {
|
|
1021
|
+
LoggerProxy.logger.info(
|
|
1022
|
+
`StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ${idAndCsi}`,
|
|
1023
|
+
this.statsResults[mediaType][sendrecvType].packetsReceived
|
|
1024
|
+
);
|
|
1025
|
+
}
|
|
981
1026
|
}
|
|
982
1027
|
|
|
983
1028
|
// Check the over all packet Lost ratio
|
|
@@ -989,7 +1034,7 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
989
1034
|
: 0;
|
|
990
1035
|
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
991
1036
|
LoggerProxy.logger.info(
|
|
992
|
-
|
|
1037
|
+
`StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ${idAndCsi}`,
|
|
993
1038
|
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio
|
|
994
1039
|
);
|
|
995
1040
|
}
|
|
@@ -1137,13 +1182,6 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
1137
1182
|
const sendrecvType =
|
|
1138
1183
|
result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;
|
|
1139
1184
|
|
|
1140
|
-
if (result.frameWidth && result.frameHeight) {
|
|
1141
|
-
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
1142
|
-
this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
|
|
1143
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
1144
|
-
this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
1145
|
-
}
|
|
1146
|
-
|
|
1147
1185
|
if (sendrecvType === STATS.RECEIVE_DIRECTION) {
|
|
1148
1186
|
this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
1149
1187
|
this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
@@ -199,12 +199,11 @@ export const getVideoReceiverMqa = ({videoReceiver, statsResults, lastMqaDataSen
|
|
|
199
199
|
videoReceiver.streams[0].common.framesDropped =
|
|
200
200
|
statsResults.resolutions[mediaType][sendrecvType].framesDropped - lastFramesDropped;
|
|
201
201
|
videoReceiver.streams[0].receivedHeight =
|
|
202
|
-
statsResults.resolutions[mediaType][sendrecvType].height;
|
|
203
|
-
videoReceiver.streams[0].receivedWidth =
|
|
202
|
+
statsResults.resolutions[mediaType][sendrecvType].height || 0;
|
|
203
|
+
videoReceiver.streams[0].receivedWidth =
|
|
204
|
+
statsResults.resolutions[mediaType][sendrecvType].width || 0;
|
|
204
205
|
videoReceiver.streams[0].receivedFrameSize =
|
|
205
|
-
(
|
|
206
|
-
statsResults.resolutions[mediaType][sendrecvType].height) /
|
|
207
|
-
256;
|
|
206
|
+
(videoReceiver.streams[0].receivedHeight * videoReceiver.streams[0].receivedWidth) / 256;
|
|
208
207
|
|
|
209
208
|
videoReceiver.streams[0].receivedKeyFrames =
|
|
210
209
|
statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
|
|
@@ -284,10 +283,9 @@ export const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, m
|
|
|
284
283
|
? (totalFrameSentInaMin * 100) / 60
|
|
285
284
|
: 0;
|
|
286
285
|
videoSender.streams[0].transmittedHeight =
|
|
287
|
-
statsResults.resolutions[mediaType][sendrecvType].height;
|
|
288
|
-
videoSender.streams[0].transmittedWidth =
|
|
286
|
+
statsResults.resolutions[mediaType][sendrecvType].height || 0;
|
|
287
|
+
videoSender.streams[0].transmittedWidth =
|
|
288
|
+
statsResults.resolutions[mediaType][sendrecvType].width || 0;
|
|
289
289
|
videoSender.streams[0].transmittedFrameSize =
|
|
290
|
-
(
|
|
291
|
-
statsResults.resolutions[mediaType][sendrecvType].width) /
|
|
292
|
-
254;
|
|
290
|
+
(videoSender.streams[0].transmittedHeight * videoSender.streams[0].transmittedWidth) / 256;
|
|
293
291
|
};
|