@webex/plugin-meetings 3.10.0-next.8 → 3.10.0-webex-services-ready.1
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/dist/annotation/annotation.types.js.map +1 -1
- package/dist/annotation/constants.js.map +1 -1
- package/dist/annotation/index.js +19 -22
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +6 -6
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/collection.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +9 -11
- package/dist/breakouts/edit-lock-error.js.map +1 -1
- package/dist/breakouts/events.js.map +1 -1
- package/dist/breakouts/index.js +126 -127
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +6 -8
- package/dist/breakouts/request.js.map +1 -1
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +1 -2
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +9 -11
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +10 -12
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-forbidden-error.js +10 -12
- package/dist/common/errors/join-forbidden-error.js.map +1 -1
- package/dist/common/errors/join-meeting.js +10 -12
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/join-webinar-error.js +9 -11
- package/dist/common/errors/join-webinar-error.js.map +1 -1
- package/dist/common/errors/media.js +9 -11
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/multistream-not-supported-error.js +9 -11
- package/dist/common/errors/multistream-not-supported-error.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +9 -11
- package/dist/common/errors/no-meeting-info.js.map +1 -1
- package/dist/common/errors/parameter.js +11 -14
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +9 -11
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -11
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.js +32 -38
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -1
- package/dist/common/errors/reconnection-not-started.js +5 -6
- package/dist/common/errors/reconnection-not-started.js.map +1 -1
- package/dist/common/errors/reconnection.js +9 -11
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +9 -11
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +20 -29
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +9 -12
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +9 -10
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +9 -10
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +17 -17
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +1 -2
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +0 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +11 -8
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +1 -2
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +1 -2
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/hashTree/constants.js +20 -0
- package/dist/hashTree/constants.js.map +1 -0
- package/dist/hashTree/hashTree.js +515 -0
- package/dist/hashTree/hashTree.js.map +1 -0
- package/dist/hashTree/hashTreeParser.js +1266 -0
- package/dist/hashTree/hashTreeParser.js.map +1 -0
- package/dist/hashTree/types.js +21 -0
- package/dist/hashTree/types.js.map +1 -0
- package/dist/hashTree/utils.js +48 -0
- package/dist/hashTree/utils.js.map +1 -0
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/locusRetry.js +6 -8
- package/dist/interceptors/locusRetry.js.map +1 -1
- package/dist/interceptors/locusRouteToken.js +6 -8
- package/dist/interceptors/locusRouteToken.js.map +1 -1
- package/dist/interpretation/collection.js.map +1 -1
- package/dist/interpretation/index.js +1 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/interpretation/siLanguage.js.map +1 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +551 -94
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +3 -4
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/locus-info/types.js +7 -0
- package/dist/locus-info/types.js.map +1 -0
- package/dist/media/MediaConnectionAwaiter.js +1 -2
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/index.js +0 -2
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +15 -17
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js.map +1 -1
- package/dist/meeting/brbState.js +8 -9
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/connectionStateHandler.js +10 -13
- package/dist/meeting/connectionStateHandler.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1555 -1527
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +13 -17
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +11 -12
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +101 -104
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/type.js.map +1 -1
- package/dist/meeting/util.js +24 -23
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.js +3 -3
- package/dist/meeting/voicea-meeting.js.map +1 -1
- package/dist/meeting-info/collection.js +7 -10
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +1 -2
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +135 -146
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +36 -37
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +30 -31
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +6 -8
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +179 -141
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js.map +1 -1
- package/dist/meetings/request.js +6 -8
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +25 -23
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +1 -2
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +6 -3
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +1 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +18 -21
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +8 -11
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +3 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +3 -4
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +1 -2
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +34 -45
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +8 -9
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +12 -15
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +1 -2
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +122 -123
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +29 -30
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/personal-meeting-room/index.js +16 -19
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +7 -10
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/clusterReachability.js +56 -373
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +203 -205
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +14 -1
- package/dist/reachability/reachability.types.js.map +1 -1
- package/dist/reachability/reachabilityPeerConnection.js +445 -0
- package/dist/reachability/reachabilityPeerConnection.js.map +1 -0
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.js.map +1 -1
- package/dist/reactions/constants.js.map +1 -1
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +178 -176
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +1 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +12 -15
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +24 -26
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +75 -76
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/types.js.map +1 -1
- package/dist/transcription/index.js +4 -5
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/constants.d.ts +26 -21
- package/dist/types/hashTree/constants.d.ts +8 -0
- package/dist/types/hashTree/hashTree.d.ts +129 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +260 -0
- package/dist/types/hashTree/types.d.ts +25 -0
- package/dist/types/hashTree/utils.d.ts +9 -0
- package/dist/types/locus-info/index.d.ts +91 -42
- package/dist/types/locus-info/types.d.ts +46 -0
- package/dist/types/meeting/index.d.ts +22 -9
- package/dist/types/meetings/index.d.ts +9 -2
- package/dist/types/metrics/constants.d.ts +2 -0
- package/dist/types/reachability/clusterReachability.d.ts +10 -88
- package/dist/types/reachability/reachability.types.d.ts +12 -1
- package/dist/types/reachability/reachabilityPeerConnection.d.ts +111 -0
- package/dist/webinar/collection.js +1 -2
- package/dist/webinar/collection.js.map +1 -1
- package/dist/webinar/index.js +148 -158
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -21
- package/src/constants.ts +13 -1
- package/src/hashTree/constants.ts +9 -0
- package/src/hashTree/hashTree.ts +463 -0
- package/src/hashTree/hashTreeParser.ts +1161 -0
- package/src/hashTree/types.ts +30 -0
- package/src/hashTree/utils.ts +42 -0
- package/src/locus-info/index.ts +556 -85
- package/src/locus-info/types.ts +48 -0
- package/src/meeting/index.ts +58 -26
- package/src/meeting/util.ts +1 -0
- package/src/meetings/index.ts +104 -51
- package/src/metrics/constants.ts +2 -0
- package/src/reachability/clusterReachability.ts +50 -347
- package/src/reachability/reachability.types.ts +15 -1
- package/src/reachability/reachabilityPeerConnection.ts +416 -0
- package/test/unit/spec/hashTree/hashTree.ts +655 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +1532 -0
- package/test/unit/spec/hashTree/utils.ts +103 -0
- package/test/unit/spec/locus-info/index.js +667 -1
- package/test/unit/spec/meeting/index.js +91 -20
- package/test/unit/spec/meeting/utils.js +77 -0
- package/test/unit/spec/meetings/index.js +71 -26
- package/test/unit/spec/reachability/clusterReachability.ts +281 -138
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_loggerProxy","_interopRequireDefault","_remoteMedia","RemoteMediaGroup","exports","mediaRequestManager","receiveSlots","priority","commitMediaRequest","_this","options","arguments","length","undefined","_classCallCheck2","default","_defineProperty2","unpinnedRemoteMedia","map","slot","RemoteMedia","resolution","pinnedRemoteMedia","sendActiveSpeakerMediaRequest","_createClass2","key","value","getRemoteMedia","filter","_toConsumableArray2","concat","setActiveSpeakerCsis","remoteMediaCsis","_this2","commit","forEach","_ref","csi","remoteMedia","indexOf","unpinId","splice","push","Error","id","sendMediaRequest","pinId","cancelMediaRequest","cancelActiveSpeakerMediaRequest","pin","targetCsi","LoggerProxy","logger","log","idx","unpin","isPinned","setPreferLiveVideo","preferLiveVideo","_this$options","_this$options$namedMe","_this$options2","effectiveMaxFs","getEffectiveMaxFsForActiveSpeaker","mediaRequestId","addRequest","policyInfo","policy","crossPriorityDuplication","crossPolicyDuplication","namedMediaGroups","namedMediaGroup","getUnderlyingReceiveSlot","codecInfo","codec","maxFs","cancelRequest","setNamedMediaGroup","type","stop","includes","maxFsValues","getEffectiveMaxFs","Math","max","apply","getMaxFs"],"sources":["remoteMediaGroup.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\n/* eslint-disable require-jsdoc */\n/* eslint-disable import/prefer-default-export */\nimport {forEach} from 'lodash';\nimport {NamedMediaGroup} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {getMaxFs, RemoteMedia, RemoteVideoResolution} from './remoteMedia';\nimport {MediaRequestId, MediaRequestManager} from './mediaRequestManager';\nimport {CSI, ReceiveSlot} from './receiveSlot';\n\ntype Options = {\n resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n preferLiveVideo?: boolean; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n namedMediaGroup?: NamedMediaGroup; // applies only to named media groups for audio\n};\n\nexport class RemoteMediaGroup {\n private mediaRequestManager: MediaRequestManager;\n\n private priority: number;\n\n private options: Options;\n\n private unpinnedRemoteMedia: RemoteMedia[];\n\n private mediaRequestId?: MediaRequestId; // id of the \"active-speaker\" media request id\n\n private pinnedRemoteMedia: RemoteMedia[];\n\n constructor(\n mediaRequestManager: MediaRequestManager,\n receiveSlots: ReceiveSlot[],\n priority: number,\n commitMediaRequest: boolean,\n options: Options = {}\n ) {\n this.mediaRequestManager = mediaRequestManager;\n this.priority = priority;\n this.options = options;\n\n this.unpinnedRemoteMedia = receiveSlots.map(\n (slot) =>\n new RemoteMedia(slot, this.mediaRequestManager, {\n resolution: this.options.resolution,\n })\n );\n this.pinnedRemoteMedia = [];\n\n this.sendActiveSpeakerMediaRequest(commitMediaRequest);\n }\n\n /**\n * Gets the array of remote media elements from the group\n *\n * @param {string} filter - 'all' (default) returns both pinned and unpinned\n * @returns {Array<RemoteMedia>}\n */\n public getRemoteMedia(filter: 'all' | 'pinned' | 'unpinned' = 'all') {\n if (filter === 'unpinned') {\n // return a shallow copy so that the client cannot modify this.unpinnedRemoteMedia array\n return [...this.unpinnedRemoteMedia];\n }\n if (filter === 'pinned') {\n // return a shallow copy so that the client cannot modify this.pinnedRemoteMedia array\n return [...this.pinnedRemoteMedia];\n }\n\n return [...this.unpinnedRemoteMedia, ...this.pinnedRemoteMedia];\n }\n\n /**\n * Sets CSIs for multiple RemoteMedia instances belonging to this RemoteMediaGroup.\n * For each entry in the remoteMediaCsis array:\n * - if csi is specified, the RemoteMedia instance is pinned to that CSI\n * - if csi is undefined, the RemoteMedia instance is unpinned\n * @internal\n */\n public setActiveSpeakerCsis(\n remoteMediaCsis: {remoteMedia: RemoteMedia; csi?: number}[],\n commit = true\n ): void {\n forEach(remoteMediaCsis, ({csi, remoteMedia}) => {\n if (csi) {\n if (!(this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {\n const unpinId = this.unpinnedRemoteMedia.indexOf(remoteMedia);\n if (unpinId >= 0) {\n this.unpinnedRemoteMedia.splice(unpinId, 1);\n this.pinnedRemoteMedia.push(remoteMedia);\n } else {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n }\n remoteMedia.sendMediaRequest(csi, false);\n } else {\n if (!(this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {\n const pinId = this.pinnedRemoteMedia.indexOf(remoteMedia);\n if (pinId >= 0) {\n this.pinnedRemoteMedia.splice(pinId, 1);\n this.unpinnedRemoteMedia.push(remoteMedia);\n } else {\n throw new Error(\n `failed to unpin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n }\n remoteMedia.cancelMediaRequest(false);\n }\n });\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n if (commit) {\n this.mediaRequestManager.commit();\n }\n }\n\n /**\n * Pins a specific remote media instance to a specfic CSI, so the media will\n * no longer come from active speaker, but from that CSI.\n * If no CSI is given, the current CSI value is used.\n *\n */\n public pin(remoteMedia: RemoteMedia, csi?: CSI): void {\n // if csi is not specified, use the current one\n const targetCsi = csi || remoteMedia.csi;\n\n if (!targetCsi) {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it has no CSI set and no CSI value was given`\n );\n }\n\n if (this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n if (targetCsi === remoteMedia.csi) {\n // remote media already pinned to target CSI, nothing to do\n LoggerProxy.logger.log(\n `RemoteMediaGroup#pin --> remote media ${remoteMedia.id} already pinned`\n );\n\n return;\n }\n } else {\n const idx = this.unpinnedRemoteMedia.indexOf(remoteMedia);\n\n if (idx < 0) {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n\n this.unpinnedRemoteMedia.splice(idx, 1);\n this.pinnedRemoteMedia.push(remoteMedia);\n\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n }\n\n remoteMedia.sendMediaRequest(targetCsi, false);\n this.mediaRequestManager.commit();\n }\n\n /**\n * Unpins a remote media instance, so that it will again provide media from active speakers\n *\n */\n public unpin(remoteMedia: RemoteMedia) {\n if (this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n LoggerProxy.logger.log(\n `RemoteMediaGroup#pin --> remote media ${remoteMedia.id} already unpinned`\n );\n\n return;\n }\n const idx = this.pinnedRemoteMedia.indexOf(remoteMedia);\n\n if (idx < 0) {\n throw new Error(\n `failed to unpin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n\n this.pinnedRemoteMedia.splice(idx, 1);\n this.unpinnedRemoteMedia.push(remoteMedia);\n\n remoteMedia.cancelMediaRequest(false);\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n this.mediaRequestManager.commit();\n }\n\n public isPinned(remoteMedia: RemoteMedia) {\n if (this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n return false;\n }\n if (this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n return true;\n }\n\n throw new Error(`remote media object ${remoteMedia.id} not found in the group`);\n }\n\n /**\n * setPreferLiveVideo - sets preferLiveVideo to true/false\n * @internal\n */\n public setPreferLiveVideo(preferLiveVideo: boolean, commit: boolean) {\n if (this.options.preferLiveVideo !== preferLiveVideo) {\n this.options.preferLiveVideo = preferLiveVideo;\n this.sendActiveSpeakerMediaRequest(commit);\n }\n }\n\n private sendActiveSpeakerMediaRequest(commit: boolean) {\n this.cancelActiveSpeakerMediaRequest(false);\n\n // Calculate the effective maxFs based on all unpinned RemoteMedia instances\n const effectiveMaxFs = this.getEffectiveMaxFsForActiveSpeaker();\n\n this.mediaRequestId = this.mediaRequestManager.addRequest(\n {\n policyInfo: {\n policy: 'active-speaker',\n priority: this.priority,\n crossPriorityDuplication: false,\n crossPolicyDuplication: false,\n preferLiveVideo: !!this.options?.preferLiveVideo,\n namedMediaGroups: this.options.namedMediaGroup?.value\n ? [this.options?.namedMediaGroup]\n : undefined,\n },\n receiveSlots: this.unpinnedRemoteMedia.map((remoteMedia) =>\n remoteMedia.getUnderlyingReceiveSlot()\n ) as ReceiveSlot[],\n codecInfo: effectiveMaxFs && {\n codec: 'h264',\n maxFs: effectiveMaxFs,\n },\n },\n commit\n );\n }\n\n private cancelActiveSpeakerMediaRequest(commit: boolean) {\n if (this.mediaRequestId) {\n this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);\n this.mediaRequestId = undefined;\n }\n }\n\n /**\n * setNamedMediaGroup - sets named media group type and value\n * @internal\n */\n public setNamedMediaGroup(namedMediaGroup: NamedMediaGroup, commit: boolean) {\n if (\n this.options.namedMediaGroup.value !== namedMediaGroup.value ||\n this.options.namedMediaGroup.type !== namedMediaGroup.type\n ) {\n this.options.namedMediaGroup = namedMediaGroup;\n this.sendActiveSpeakerMediaRequest(commit);\n }\n }\n\n /**\n * Invalidates the remote media group by clearing the references to the receive slots\n * used by all remote media from that group and cancelling all media requests.\n * After this call the remote media group is unusable.\n *\n * @param{boolean} commit whether to commit the cancellation of media requests\n * @internal\n */\n public stop(commit = true) {\n this.unpinnedRemoteMedia.forEach((remoteMedia) => remoteMedia.stop(false));\n this.pinnedRemoteMedia.forEach((remoteMedia) => remoteMedia.stop(false));\n this.cancelActiveSpeakerMediaRequest(false);\n\n if (commit) {\n this.mediaRequestManager.commit();\n }\n }\n\n /**\n * Checks if a given RemoteMedia instance belongs to this group.\n *\n * @param remoteMedia RemoteMedia instance to check\n * @param filter controls which remote media from the group to check\n * @returns true if remote media is found\n */\n public includes(\n remoteMedia: RemoteMedia,\n filter: 'all' | 'pinned' | 'unpinned' = 'all'\n ): boolean {\n if (filter === 'pinned') {\n return this.pinnedRemoteMedia.includes(remoteMedia);\n }\n if (filter === 'unpinned') {\n return this.unpinnedRemoteMedia.includes(remoteMedia);\n }\n\n return (\n this.unpinnedRemoteMedia.includes(remoteMedia) || this.pinnedRemoteMedia.includes(remoteMedia)\n );\n }\n\n /**\n * Calculate the effective maxFs for the active speaker media request based on unpinned RemoteMedia instances\n * @returns {number | undefined} The calculated maxFs value, or undefined if no constraints\n * @private\n */\n private getEffectiveMaxFsForActiveSpeaker(): number | undefined {\n // Get all effective maxFs values from unpinned RemoteMedia instances\n const maxFsValues = this.unpinnedRemoteMedia\n .map((remoteMedia) => remoteMedia.getEffectiveMaxFs())\n .filter((maxFs) => maxFs !== undefined);\n\n // Use the highest maxFs value to ensure we don't under-request resolution for any instance\n if (maxFsValues.length > 0) {\n return Math.max(...maxFsValues);\n }\n\n // Fall back to group's resolution option\n if (this.options.resolution) {\n return getMaxFs(this.options.resolution);\n }\n\n return undefined;\n }\n\n /**\n * Get the current effective maxFs that would be used for the active speaker media request\n * @returns {number | undefined} The effective maxFs value\n */\n public getEffectiveMaxFs(): number | undefined {\n return this.getEffectiveMaxFsForActiveSpeaker();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_loggerProxy","_interopRequireDefault","_remoteMedia","RemoteMediaGroup","exports","mediaRequestManager","receiveSlots","priority","commitMediaRequest","_this","options","arguments","length","undefined","_classCallCheck2","default","_defineProperty2","unpinnedRemoteMedia","map","slot","RemoteMedia","resolution","pinnedRemoteMedia","sendActiveSpeakerMediaRequest","_createClass2","key","value","getRemoteMedia","filter","_toConsumableArray2","concat","setActiveSpeakerCsis","remoteMediaCsis","_this2","commit","forEach","_ref","csi","remoteMedia","indexOf","unpinId","splice","push","Error","id","sendMediaRequest","pinId","cancelMediaRequest","cancelActiveSpeakerMediaRequest","pin","targetCsi","LoggerProxy","logger","log","idx","unpin","isPinned","setPreferLiveVideo","preferLiveVideo","_this$options","_this$options$namedMe","_this$options2","effectiveMaxFs","getEffectiveMaxFsForActiveSpeaker","mediaRequestId","addRequest","policyInfo","policy","crossPriorityDuplication","crossPolicyDuplication","namedMediaGroups","namedMediaGroup","getUnderlyingReceiveSlot","codecInfo","codec","maxFs","cancelRequest","setNamedMediaGroup","type","stop","includes","maxFsValues","getEffectiveMaxFs","Math","max","apply","getMaxFs"],"sources":["remoteMediaGroup.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\n/* eslint-disable require-jsdoc */\n/* eslint-disable import/prefer-default-export */\nimport {forEach} from 'lodash';\nimport {NamedMediaGroup} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {getMaxFs, RemoteMedia, RemoteVideoResolution} from './remoteMedia';\nimport {MediaRequestId, MediaRequestManager} from './mediaRequestManager';\nimport {CSI, ReceiveSlot} from './receiveSlot';\n\ntype Options = {\n resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n preferLiveVideo?: boolean; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n namedMediaGroup?: NamedMediaGroup; // applies only to named media groups for audio\n};\n\nexport class RemoteMediaGroup {\n private mediaRequestManager: MediaRequestManager;\n\n private priority: number;\n\n private options: Options;\n\n private unpinnedRemoteMedia: RemoteMedia[];\n\n private mediaRequestId?: MediaRequestId; // id of the \"active-speaker\" media request id\n\n private pinnedRemoteMedia: RemoteMedia[];\n\n constructor(\n mediaRequestManager: MediaRequestManager,\n receiveSlots: ReceiveSlot[],\n priority: number,\n commitMediaRequest: boolean,\n options: Options = {}\n ) {\n this.mediaRequestManager = mediaRequestManager;\n this.priority = priority;\n this.options = options;\n\n this.unpinnedRemoteMedia = receiveSlots.map(\n (slot) =>\n new RemoteMedia(slot, this.mediaRequestManager, {\n resolution: this.options.resolution,\n })\n );\n this.pinnedRemoteMedia = [];\n\n this.sendActiveSpeakerMediaRequest(commitMediaRequest);\n }\n\n /**\n * Gets the array of remote media elements from the group\n *\n * @param {string} filter - 'all' (default) returns both pinned and unpinned\n * @returns {Array<RemoteMedia>}\n */\n public getRemoteMedia(filter: 'all' | 'pinned' | 'unpinned' = 'all') {\n if (filter === 'unpinned') {\n // return a shallow copy so that the client cannot modify this.unpinnedRemoteMedia array\n return [...this.unpinnedRemoteMedia];\n }\n if (filter === 'pinned') {\n // return a shallow copy so that the client cannot modify this.pinnedRemoteMedia array\n return [...this.pinnedRemoteMedia];\n }\n\n return [...this.unpinnedRemoteMedia, ...this.pinnedRemoteMedia];\n }\n\n /**\n * Sets CSIs for multiple RemoteMedia instances belonging to this RemoteMediaGroup.\n * For each entry in the remoteMediaCsis array:\n * - if csi is specified, the RemoteMedia instance is pinned to that CSI\n * - if csi is undefined, the RemoteMedia instance is unpinned\n * @internal\n */\n public setActiveSpeakerCsis(\n remoteMediaCsis: {remoteMedia: RemoteMedia; csi?: number}[],\n commit = true\n ): void {\n forEach(remoteMediaCsis, ({csi, remoteMedia}) => {\n if (csi) {\n if (!(this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {\n const unpinId = this.unpinnedRemoteMedia.indexOf(remoteMedia);\n if (unpinId >= 0) {\n this.unpinnedRemoteMedia.splice(unpinId, 1);\n this.pinnedRemoteMedia.push(remoteMedia);\n } else {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n }\n remoteMedia.sendMediaRequest(csi, false);\n } else {\n if (!(this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {\n const pinId = this.pinnedRemoteMedia.indexOf(remoteMedia);\n if (pinId >= 0) {\n this.pinnedRemoteMedia.splice(pinId, 1);\n this.unpinnedRemoteMedia.push(remoteMedia);\n } else {\n throw new Error(\n `failed to unpin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n }\n remoteMedia.cancelMediaRequest(false);\n }\n });\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n if (commit) {\n this.mediaRequestManager.commit();\n }\n }\n\n /**\n * Pins a specific remote media instance to a specfic CSI, so the media will\n * no longer come from active speaker, but from that CSI.\n * If no CSI is given, the current CSI value is used.\n *\n */\n public pin(remoteMedia: RemoteMedia, csi?: CSI): void {\n // if csi is not specified, use the current one\n const targetCsi = csi || remoteMedia.csi;\n\n if (!targetCsi) {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it has no CSI set and no CSI value was given`\n );\n }\n\n if (this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n if (targetCsi === remoteMedia.csi) {\n // remote media already pinned to target CSI, nothing to do\n LoggerProxy.logger.log(\n `RemoteMediaGroup#pin --> remote media ${remoteMedia.id} already pinned`\n );\n\n return;\n }\n } else {\n const idx = this.unpinnedRemoteMedia.indexOf(remoteMedia);\n\n if (idx < 0) {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n\n this.unpinnedRemoteMedia.splice(idx, 1);\n this.pinnedRemoteMedia.push(remoteMedia);\n\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n }\n\n remoteMedia.sendMediaRequest(targetCsi, false);\n this.mediaRequestManager.commit();\n }\n\n /**\n * Unpins a remote media instance, so that it will again provide media from active speakers\n *\n */\n public unpin(remoteMedia: RemoteMedia) {\n if (this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n LoggerProxy.logger.log(\n `RemoteMediaGroup#pin --> remote media ${remoteMedia.id} already unpinned`\n );\n\n return;\n }\n const idx = this.pinnedRemoteMedia.indexOf(remoteMedia);\n\n if (idx < 0) {\n throw new Error(\n `failed to unpin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n\n this.pinnedRemoteMedia.splice(idx, 1);\n this.unpinnedRemoteMedia.push(remoteMedia);\n\n remoteMedia.cancelMediaRequest(false);\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n this.mediaRequestManager.commit();\n }\n\n public isPinned(remoteMedia: RemoteMedia) {\n if (this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n return false;\n }\n if (this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n return true;\n }\n\n throw new Error(`remote media object ${remoteMedia.id} not found in the group`);\n }\n\n /**\n * setPreferLiveVideo - sets preferLiveVideo to true/false\n * @internal\n */\n public setPreferLiveVideo(preferLiveVideo: boolean, commit: boolean) {\n if (this.options.preferLiveVideo !== preferLiveVideo) {\n this.options.preferLiveVideo = preferLiveVideo;\n this.sendActiveSpeakerMediaRequest(commit);\n }\n }\n\n private sendActiveSpeakerMediaRequest(commit: boolean) {\n this.cancelActiveSpeakerMediaRequest(false);\n\n // Calculate the effective maxFs based on all unpinned RemoteMedia instances\n const effectiveMaxFs = this.getEffectiveMaxFsForActiveSpeaker();\n\n this.mediaRequestId = this.mediaRequestManager.addRequest(\n {\n policyInfo: {\n policy: 'active-speaker',\n priority: this.priority,\n crossPriorityDuplication: false,\n crossPolicyDuplication: false,\n preferLiveVideo: !!this.options?.preferLiveVideo,\n namedMediaGroups: this.options.namedMediaGroup?.value\n ? [this.options?.namedMediaGroup]\n : undefined,\n },\n receiveSlots: this.unpinnedRemoteMedia.map((remoteMedia) =>\n remoteMedia.getUnderlyingReceiveSlot()\n ) as ReceiveSlot[],\n codecInfo: effectiveMaxFs && {\n codec: 'h264',\n maxFs: effectiveMaxFs,\n },\n },\n commit\n );\n }\n\n private cancelActiveSpeakerMediaRequest(commit: boolean) {\n if (this.mediaRequestId) {\n this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);\n this.mediaRequestId = undefined;\n }\n }\n\n /**\n * setNamedMediaGroup - sets named media group type and value\n * @internal\n */\n public setNamedMediaGroup(namedMediaGroup: NamedMediaGroup, commit: boolean) {\n if (\n this.options.namedMediaGroup.value !== namedMediaGroup.value ||\n this.options.namedMediaGroup.type !== namedMediaGroup.type\n ) {\n this.options.namedMediaGroup = namedMediaGroup;\n this.sendActiveSpeakerMediaRequest(commit);\n }\n }\n\n /**\n * Invalidates the remote media group by clearing the references to the receive slots\n * used by all remote media from that group and cancelling all media requests.\n * After this call the remote media group is unusable.\n *\n * @param{boolean} commit whether to commit the cancellation of media requests\n * @internal\n */\n public stop(commit = true) {\n this.unpinnedRemoteMedia.forEach((remoteMedia) => remoteMedia.stop(false));\n this.pinnedRemoteMedia.forEach((remoteMedia) => remoteMedia.stop(false));\n this.cancelActiveSpeakerMediaRequest(false);\n\n if (commit) {\n this.mediaRequestManager.commit();\n }\n }\n\n /**\n * Checks if a given RemoteMedia instance belongs to this group.\n *\n * @param remoteMedia RemoteMedia instance to check\n * @param filter controls which remote media from the group to check\n * @returns true if remote media is found\n */\n public includes(\n remoteMedia: RemoteMedia,\n filter: 'all' | 'pinned' | 'unpinned' = 'all'\n ): boolean {\n if (filter === 'pinned') {\n return this.pinnedRemoteMedia.includes(remoteMedia);\n }\n if (filter === 'unpinned') {\n return this.unpinnedRemoteMedia.includes(remoteMedia);\n }\n\n return (\n this.unpinnedRemoteMedia.includes(remoteMedia) || this.pinnedRemoteMedia.includes(remoteMedia)\n );\n }\n\n /**\n * Calculate the effective maxFs for the active speaker media request based on unpinned RemoteMedia instances\n * @returns {number | undefined} The calculated maxFs value, or undefined if no constraints\n * @private\n */\n private getEffectiveMaxFsForActiveSpeaker(): number | undefined {\n // Get all effective maxFs values from unpinned RemoteMedia instances\n const maxFsValues = this.unpinnedRemoteMedia\n .map((remoteMedia) => remoteMedia.getEffectiveMaxFs())\n .filter((maxFs) => maxFs !== undefined);\n\n // Use the highest maxFs value to ensure we don't under-request resolution for any instance\n if (maxFsValues.length > 0) {\n return Math.max(...maxFsValues);\n }\n\n // Fall back to group's resolution option\n if (this.options.resolution) {\n return getMaxFs(this.options.resolution);\n }\n\n return undefined;\n }\n\n /**\n * Get the current effective maxFs that would be used for the active speaker media request\n * @returns {number | undefined} The effective maxFs value\n */\n public getEffectiveMaxFs(): number | undefined {\n return this.getEffectiveMaxFsForActiveSpeaker();\n }\n}\n"],"mappings":"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","ignoreList":[]}
|