mediasfu-shared 1.1.0 → 1.2.0
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 +17 -0
- package/dist/ProducerClient/producerClientEmits/createDeviceClient.d.ts +1 -1
- package/dist/ProducerClient/producerClientEmits/createDeviceClient.d.ts.map +1 -1
- package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts +1 -1
- package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts.map +1 -1
- package/dist/consumers/connectIps.d.ts +1 -1
- package/dist/consumers/connectIps.d.ts.map +1 -1
- package/dist/consumers/connectRecvTransport.d.ts +1 -1
- package/dist/consumers/connectRecvTransport.d.ts.map +1 -1
- package/dist/consumers/connectSendTransport.d.ts +1 -1
- package/dist/consumers/connectSendTransport.d.ts.map +1 -1
- package/dist/consumers/connectSendTransportAudio.d.ts +1 -1
- package/dist/consumers/connectSendTransportAudio.d.ts.map +1 -1
- package/dist/consumers/connectSendTransportScreen.d.ts +1 -1
- package/dist/consumers/connectSendTransportScreen.d.ts.map +1 -1
- package/dist/consumers/connectSendTransportVideo.d.ts +1 -1
- package/dist/consumers/connectSendTransportVideo.d.ts.map +1 -1
- package/dist/consumers/createSendTransport.d.ts +1 -1
- package/dist/consumers/createSendTransport.d.ts.map +1 -1
- package/dist/consumers/disconnectSendTransportAudio.d.ts +1 -1
- package/dist/consumers/disconnectSendTransportAudio.d.ts.map +1 -1
- package/dist/consumers/disconnectSendTransportScreen.d.ts +1 -1
- package/dist/consumers/disconnectSendTransportScreen.d.ts.map +1 -1
- package/dist/consumers/disconnectSendTransportVideo.d.ts +1 -1
- package/dist/consumers/disconnectSendTransportVideo.d.ts.map +1 -1
- package/dist/consumers/index.cjs +80 -0
- package/dist/consumers/index.cjs.map +1 -0
- package/dist/consumers/index.d.ts +62 -0
- package/dist/consumers/index.d.ts.map +1 -0
- package/dist/consumers/index.js +80 -0
- package/dist/consumers/index.js.map +1 -0
- package/dist/consumers/resumeSendTransportAudio.d.ts +1 -1
- package/dist/consumers/resumeSendTransportAudio.d.ts.map +1 -1
- package/dist/consumers/signalNewConsumerTransport.d.ts +1 -1
- package/dist/consumers/signalNewConsumerTransport.d.ts.map +1 -1
- package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts +1 -1
- package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts.map +1 -1
- package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts +1 -1
- package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts.map +1 -1
- package/dist/consumers/streamSuccessAudio.d.ts +1 -1
- package/dist/consumers/streamSuccessAudio.d.ts.map +1 -1
- package/dist/consumers/streamSuccessAudioSwitch.d.ts +1 -1
- package/dist/consumers/streamSuccessAudioSwitch.d.ts.map +1 -1
- package/dist/consumers/streamSuccessVideo.d.ts +1 -1
- package/dist/consumers/streamSuccessVideo.d.ts.map +1 -1
- package/dist/getParticipantMedia-B0JS6d2b.js +3555 -0
- package/dist/getParticipantMedia-B0JS6d2b.js.map +1 -0
- package/dist/getParticipantMedia-CdcYqcbD.cjs +3554 -0
- package/dist/getParticipantMedia-CdcYqcbD.cjs.map +1 -0
- package/dist/index.cjs +299 -252
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1994 -1947
- package/dist/index.js.map +1 -1
- package/dist/index.native.cjs +230 -224
- package/dist/index.native.cjs.map +1 -1
- package/dist/index.native.js +349 -343
- package/dist/index.native.js.map +1 -1
- package/dist/joinLocalRoom-BdM1msQt.cjs +673 -0
- package/dist/joinLocalRoom-BdM1msQt.cjs.map +1 -0
- package/dist/joinLocalRoom-CvteNe4R.js +657 -0
- package/dist/joinLocalRoom-CvteNe4R.js.map +1 -0
- package/dist/joinRoomOnMediaSFU-CC8RVJgr.cjs +1222 -0
- package/dist/joinRoomOnMediaSFU-CC8RVJgr.cjs.map +1 -0
- package/dist/joinRoomOnMediaSFU-y6vJ1OBo.js +1223 -0
- package/dist/joinRoomOnMediaSFU-y6vJ1OBo.js.map +1 -0
- package/dist/methods/index.cjs +3975 -0
- package/dist/methods/index.cjs.map +1 -0
- package/dist/methods/index.js +3976 -0
- package/dist/methods/index.js.map +1 -0
- package/dist/methods/socketReceive/getDomains.d.ts +1 -1
- package/dist/methods/socketReceive/getDomains.d.ts.map +1 -1
- package/dist/methods/utils/headless/virtualBackground.d.ts +2 -2
- package/dist/methods/utils/headless/virtualBackground.d.ts.map +1 -1
- package/dist/methods/utils/virtualBackgroundCompositor.d.ts +21 -0
- package/dist/methods/utils/virtualBackgroundCompositor.d.ts.map +1 -0
- package/dist/methods/whiteboard/captureCanvasStream.d.ts +1 -1
- package/dist/methods/whiteboard/captureCanvasStream.d.ts.map +1 -1
- package/dist/producers/producerEmits/joinConRoom.d.ts +1 -1
- package/dist/producers/producerEmits/joinConRoom.d.ts.map +1 -1
- package/dist/producers/producerEmits/joinRoom.d.ts +1 -1
- package/dist/producers/producerEmits/joinRoom.d.ts.map +1 -1
- package/dist/translationConsumerSwitch-C20MfNNq.cjs +509 -0
- package/dist/translationConsumerSwitch-C20MfNNq.cjs.map +1 -0
- package/dist/translationConsumerSwitch-zKuS5wgH.js +510 -0
- package/dist/translationConsumerSwitch-zKuS5wgH.js.map +1 -0
- package/dist/types/index.cjs +85 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +85 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/shared-base-types.d.ts +1 -1
- package/dist/types/shared-base-types.d.ts.map +1 -1
- package/dist/updateParticipantAudioDecibels-DLd8Y-Fh.js +5392 -0
- package/dist/updateParticipantAudioDecibels-DLd8Y-Fh.js.map +1 -0
- package/dist/updateParticipantAudioDecibels-DPmHiy3K.cjs +5391 -0
- package/dist/updateParticipantAudioDecibels-DPmHiy3K.cjs.map +1 -0
- package/dist/validateAlphanumeric-DKn5BsUP.cjs +15 -0
- package/dist/validateAlphanumeric-DKn5BsUP.cjs.map +1 -0
- package/dist/validateAlphanumeric-Dk1JB80W.js +16 -0
- package/dist/validateAlphanumeric-Dk1JB80W.js.map +1 -0
- package/package.json +1 -1
- package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +1 -2
- package/src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts +1 -1
- package/src/consumers/connectIps.ts +1 -1
- package/src/consumers/connectRecvTransport.ts +1 -1
- package/src/consumers/connectSendTransport.ts +1 -1
- package/src/consumers/connectSendTransportAudio.ts +1 -1
- package/src/consumers/connectSendTransportScreen.ts +1 -1
- package/src/consumers/connectSendTransportVideo.ts +1 -1
- package/src/consumers/createSendTransport.ts +1 -1
- package/src/consumers/disconnectSendTransportAudio.ts +1 -1
- package/src/consumers/disconnectSendTransportScreen.ts +1 -1
- package/src/consumers/disconnectSendTransportVideo.ts +1 -1
- package/src/consumers/index.ts +61 -0
- package/src/consumers/resumeSendTransportAudio.ts +1 -1
- package/src/consumers/signalNewConsumerTransport.ts +1 -2
- package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +1 -1
- package/src/consumers/socketReceiveMethods/newPipeProducer.ts +1 -1
- package/src/consumers/streamSuccessAudio.ts +1 -2
- package/src/consumers/streamSuccessAudioSwitch.ts +1 -2
- package/src/consumers/streamSuccessVideo.ts +1 -1
- package/src/index.ts +2 -0
- package/src/methods/socketReceive/getDomains.ts +1 -1
- package/src/methods/utils/headless/virtualBackground.ts +45 -30
- package/src/methods/utils/virtualBackgroundCompositor.ts +53 -0
- package/src/methods/whiteboard/captureCanvasStream.ts +2 -2
- package/src/producers/producerEmits/joinConRoom.ts +1 -1
- package/src/producers/producerEmits/joinRoom.ts +1 -1
- package/src/types/index.ts +1 -0
- package/src/types/shared-base-types.ts +2 -3
- package/dist/getParticipantMedia-D9ChmEqq.js +0 -15265
- package/dist/getParticipantMedia-D9ChmEqq.js.map +0 -1
- package/dist/getParticipantMedia-DWvIhPPY.cjs +0 -15281
- package/dist/getParticipantMedia-DWvIhPPY.cjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RtpCapabilities } from 'mediasoup-client/
|
|
1
|
+
import { RtpCapabilities } from 'mediasoup-client/types';
|
|
2
2
|
import { AltDomains, ConsumeSocket } from '../../types/types';
|
|
3
3
|
export interface ConnectIpsLikeOptions<TParameters = unknown, TConsumeSocket = ConsumeSocket> {
|
|
4
4
|
consume_sockets: TConsumeSocket[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDomains.d.ts","sourceRoot":"","sources":["../../../src/methods/socketReceive/getDomains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"getDomains.d.ts","sourceRoot":"","sources":["../../../src/methods/socketReceive/getDomains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACd,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB,CACpC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa;IAE9B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,CAC5B,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,IAC5B,CACF,OAAO,EAAE,qBAAqB,CAAC,WAAW,EAAE,cAAc,CAAC,KACxD,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAEpC,MAAM,WAAW,oBAAoB,CACnC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe;IAElC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,UAAU,EAAE,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC5D,mBAAmB,EAAE,MAAM,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,WAAW,CAAC;IAC7G,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAChC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe;IAElC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,WAAW,CAAC;CAC/F;AAED,MAAM,MAAM,cAAc,CACxB,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe,IAChC,CAAC,OAAO,EAAE,iBAAiB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjG;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACrB,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe,EAClC,sEAOC,iBAAiB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAG,OAAO,CAAC,IAAI,CAyBjF,CAAC"}
|
|
@@ -37,8 +37,8 @@ export type ApplyVirtualBackgroundType = (options: ApplyVirtualBackgroundOptions
|
|
|
37
37
|
* without mounting the modal off-screen and simulating a click.
|
|
38
38
|
*
|
|
39
39
|
* This runs the same MediaPipe pipeline the modal uses — identical compositing:
|
|
40
|
-
* draw the segmentation mask,
|
|
41
|
-
*
|
|
40
|
+
* draw the segmentation mask, retain the person with `source-in`, then paint
|
|
41
|
+
* the replacement behind them with `destination-over` — against an offscreen video and
|
|
42
42
|
* canvas it creates and owns.
|
|
43
43
|
*
|
|
44
44
|
* It also keeps the SDK's own state honest (`virtualStream`, `processedStream`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtualBackground.d.ts","sourceRoot":"","sources":["../../../../src/methods/utils/headless/virtualBackground.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"virtualBackground.d.ts","sourceRoot":"","sources":["../../../../src/methods/utils/headless/virtualBackground.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAgCrD,MAAM,WAAW,6BAA8B,SAAQ,eAAe;IACpE;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,CAAC;IAC5D,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,6BAA6B,KACnC,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,KAAK,EACL,SAAc,EACd,cAAkB,EAClB,OAAc,EACd,SAAyB,GAC1B,EAAE,6BAA6B,GAAG,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAwIhG;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,GACX,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuBjD;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Options for composing one segmented camera frame. */
|
|
2
|
+
export interface CompositeVirtualBackgroundFrameOptions {
|
|
3
|
+
ctx: CanvasRenderingContext2D;
|
|
4
|
+
segmentationMask: CanvasImageSource;
|
|
5
|
+
sourceImage: CanvasImageSource;
|
|
6
|
+
backgroundImage?: CanvasImageSource | null;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
repeatPattern?: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';
|
|
10
|
+
blurFallbackPixels?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Paint the segmented person over a replacement background.
|
|
14
|
+
*
|
|
15
|
+
* Keeping this operation in the shared runtime makes headless web adapters and
|
|
16
|
+
* the React SDK use the same compositing contract. It is deliberately not
|
|
17
|
+
* exported from the native entry point; native platforms use their camera
|
|
18
|
+
* processor instead of a browser canvas.
|
|
19
|
+
*/
|
|
20
|
+
export declare function compositeVirtualBackgroundFrame({ ctx, segmentationMask, sourceImage, backgroundImage, width, height, repeatPattern, blurFallbackPixels, }: CompositeVirtualBackgroundFrameOptions): void;
|
|
21
|
+
//# sourceMappingURL=virtualBackgroundCompositor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualBackgroundCompositor.d.ts","sourceRoot":"","sources":["../../../src/methods/utils/virtualBackgroundCompositor.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,sCAAsC;IACrD,GAAG,EAAE,wBAAwB,CAAC;IAC9B,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,eAAe,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,GAAG,EACH,gBAAgB,EAChB,WAAW,EACX,eAAsB,EACtB,KAAK,EACL,MAAM,EACN,aAAwB,EACxB,kBAAsB,GACvB,EAAE,sCAAsC,GAAG,IAAI,CAuB/C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Producer } from 'mediasoup-client/
|
|
1
|
+
import { Producer } from 'mediasoup-client/types';
|
|
2
2
|
import { ConnectSendTransportScreenParameters, ConnectSendTransportScreenType, CreateSendTransportParameters, CreateSendTransportType, DisconnectSendTransportScreenParameters, DisconnectSendTransportScreenType, SleepType } from '../../types/types';
|
|
3
3
|
import { Socket } from 'socket.io-client';
|
|
4
4
|
export interface CaptureCanvasStreamParameters extends CreateSendTransportParameters, DisconnectSendTransportScreenParameters, ConnectSendTransportScreenParameters {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captureCanvasStream.d.ts","sourceRoot":"","sources":["../../../src/methods/whiteboard/captureCanvasStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"captureCanvasStream.d.ts","sourceRoot":"","sources":["../../../src/methods/whiteboard/captureCanvasStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EACV,oCAAoC,EACpC,8BAA8B,EAC9B,6BAA6B,EAC7B,uBAAuB,EACvB,uCAAuC,EACvC,iCAAiC,EACjC,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,6BACf,SAAQ,6BAA6B,EACnC,uCAAuC,EACvC,oCAAoC;IACtC,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,mBAAmB,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,yBAAyB,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAErE,KAAK,EAAE,SAAS,CAAC;IACjB,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,0BAA0B,EAAE,8BAA8B,CAAC;IAC3D,6BAA6B,EAAE,iCAAiC,CAAC;IAEjE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,6BAA6B,CAAC;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAU,wBAGvC,0BAA0B,KAAG,OAAO,CAAC,IAAI,CAuE3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joinConRoom.d.ts","sourceRoot":"","sources":["../../../src/producers/producerEmits/joinConRoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"joinConRoom.d.ts","sourceRoot":"","sources":["../../../src/producers/producerEmits/joinConRoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAID,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,wBAAsB,WAAW,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,kBAAkB,GAC1E,OAAO,CAAC,mBAAmB,CAAC,CA0F9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joinRoom.d.ts","sourceRoot":"","sources":["../../../src/producers/producerEmits/joinRoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"joinRoom.d.ts","sourceRoot":"","sources":["../../../src/producers/producerEmits/joinRoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEnF;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,GAAG,EACH,WAAW,GACZ,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmF7C"}
|
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
function buildAddVideosGridPlan({
|
|
3
|
+
mainGridStreams,
|
|
4
|
+
altGridStreams,
|
|
5
|
+
numToAdd
|
|
6
|
+
}) {
|
|
7
|
+
const safeMain = Array.isArray(mainGridStreams) ? mainGridStreams : [];
|
|
8
|
+
const safeAlt = Array.isArray(altGridStreams) ? altGridStreams : [];
|
|
9
|
+
const bounded = Math.max(0, Math.min(numToAdd ?? safeMain.length, safeMain.length));
|
|
10
|
+
const mainEntries = safeMain.slice(0, bounded).map((stream, index) => ({
|
|
11
|
+
stream,
|
|
12
|
+
index
|
|
13
|
+
}));
|
|
14
|
+
const altEntries = safeAlt.map((stream, index) => ({
|
|
15
|
+
stream,
|
|
16
|
+
index
|
|
17
|
+
}));
|
|
18
|
+
return { mainEntries, altEntries };
|
|
19
|
+
}
|
|
20
|
+
function resolveMainHostRenderMode({
|
|
21
|
+
islevel,
|
|
22
|
+
localUIMode,
|
|
23
|
+
videoAlreadyOn,
|
|
24
|
+
audioAlreadyOn,
|
|
25
|
+
hostVideoOn,
|
|
26
|
+
hostMuted
|
|
27
|
+
}) {
|
|
28
|
+
const hostVideoOffPath = islevel !== "2" && !hostVideoOn || islevel === "2" && (!hostVideoOn || !videoAlreadyOn) || localUIMode === true;
|
|
29
|
+
if (!hostVideoOffPath) {
|
|
30
|
+
return "video";
|
|
31
|
+
}
|
|
32
|
+
if (islevel === "2" && videoAlreadyOn) {
|
|
33
|
+
return "adminVideo";
|
|
34
|
+
}
|
|
35
|
+
const audOn = islevel === "2" && audioAlreadyOn || islevel !== "2" && hostMuted === false;
|
|
36
|
+
return audOn ? "audio" : "mini";
|
|
37
|
+
}
|
|
38
|
+
function resolveHostVideoStream({
|
|
39
|
+
islevel,
|
|
40
|
+
keepBackground,
|
|
41
|
+
virtualStream,
|
|
42
|
+
localStreamVideo,
|
|
43
|
+
oldAllStreams,
|
|
44
|
+
hostVideoID
|
|
45
|
+
}) {
|
|
46
|
+
if (islevel === "2") {
|
|
47
|
+
return keepBackground && virtualStream ? virtualStream : localStreamVideo;
|
|
48
|
+
}
|
|
49
|
+
const safeOldStreams = Array.isArray(oldAllStreams) ? oldAllStreams : [];
|
|
50
|
+
const matched = safeOldStreams.find((stream) => stream.producerId === hostVideoID);
|
|
51
|
+
return matched?.stream ?? null;
|
|
52
|
+
}
|
|
53
|
+
function buildMainScreenState({
|
|
54
|
+
filled,
|
|
55
|
+
adminOnMainScreen,
|
|
56
|
+
mainScreenPerson
|
|
57
|
+
}) {
|
|
58
|
+
return {
|
|
59
|
+
filled,
|
|
60
|
+
adminOnMainScreen,
|
|
61
|
+
mainScreenPerson
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function buildMainHostCardPlan({
|
|
65
|
+
islevel,
|
|
66
|
+
localUIMode,
|
|
67
|
+
videoAlreadyOn,
|
|
68
|
+
audioAlreadyOn,
|
|
69
|
+
hostVideoOn,
|
|
70
|
+
hostMuted,
|
|
71
|
+
hostIsAdmin,
|
|
72
|
+
hostName,
|
|
73
|
+
hostVideoID,
|
|
74
|
+
fallbackName,
|
|
75
|
+
member,
|
|
76
|
+
keepBackground,
|
|
77
|
+
virtualStream,
|
|
78
|
+
localStreamVideo,
|
|
79
|
+
oldAllStreams
|
|
80
|
+
}) {
|
|
81
|
+
const mode = resolveMainHostRenderMode({
|
|
82
|
+
islevel,
|
|
83
|
+
localUIMode,
|
|
84
|
+
videoAlreadyOn,
|
|
85
|
+
audioAlreadyOn,
|
|
86
|
+
hostVideoOn,
|
|
87
|
+
hostMuted
|
|
88
|
+
});
|
|
89
|
+
if (mode === "adminVideo") {
|
|
90
|
+
return {
|
|
91
|
+
kind: "video",
|
|
92
|
+
key: hostVideoID || hostName || "host-video",
|
|
93
|
+
name: hostName,
|
|
94
|
+
remoteProducerId: hostVideoID || "",
|
|
95
|
+
videoStream: keepBackground && virtualStream ? virtualStream : localStreamVideo,
|
|
96
|
+
doMirror: true,
|
|
97
|
+
state: buildMainScreenState({
|
|
98
|
+
filled: true,
|
|
99
|
+
adminOnMainScreen: true,
|
|
100
|
+
mainScreenPerson: hostName
|
|
101
|
+
})
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (mode === "audio") {
|
|
105
|
+
return {
|
|
106
|
+
kind: "audio",
|
|
107
|
+
key: hostName || fallbackName,
|
|
108
|
+
name: hostName,
|
|
109
|
+
state: buildMainScreenState({
|
|
110
|
+
filled: true,
|
|
111
|
+
adminOnMainScreen: islevel === "2",
|
|
112
|
+
mainScreenPerson: hostName
|
|
113
|
+
})
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
if (mode === "mini") {
|
|
117
|
+
return {
|
|
118
|
+
kind: "mini",
|
|
119
|
+
key: fallbackName,
|
|
120
|
+
name: hostName,
|
|
121
|
+
initials: fallbackName,
|
|
122
|
+
state: buildMainScreenState({
|
|
123
|
+
filled: false,
|
|
124
|
+
adminOnMainScreen: islevel === "2",
|
|
125
|
+
mainScreenPerson: hostName
|
|
126
|
+
})
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const hostStream = resolveHostVideoStream({
|
|
130
|
+
islevel,
|
|
131
|
+
keepBackground,
|
|
132
|
+
virtualStream,
|
|
133
|
+
localStreamVideo,
|
|
134
|
+
oldAllStreams,
|
|
135
|
+
hostVideoID
|
|
136
|
+
});
|
|
137
|
+
if (!hostStream) {
|
|
138
|
+
return {
|
|
139
|
+
kind: "mini",
|
|
140
|
+
key: fallbackName,
|
|
141
|
+
name: hostName,
|
|
142
|
+
initials: fallbackName,
|
|
143
|
+
state: buildMainScreenState({
|
|
144
|
+
filled: false,
|
|
145
|
+
adminOnMainScreen: islevel === "2",
|
|
146
|
+
mainScreenPerson: hostName
|
|
147
|
+
})
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
kind: "video",
|
|
152
|
+
key: hostVideoID || hostName || "host-video",
|
|
153
|
+
name: hostName,
|
|
154
|
+
remoteProducerId: hostVideoID || "",
|
|
155
|
+
videoStream: hostStream,
|
|
156
|
+
doMirror: member === hostName,
|
|
157
|
+
state: buildMainScreenState({
|
|
158
|
+
filled: true,
|
|
159
|
+
adminOnMainScreen: hostIsAdmin,
|
|
160
|
+
mainScreenPerson: hostName
|
|
161
|
+
})
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function buildScreenShareHostCardPlan({
|
|
165
|
+
hostName,
|
|
166
|
+
hostScreenID,
|
|
167
|
+
hostIsAdmin,
|
|
168
|
+
shared,
|
|
169
|
+
hostStream,
|
|
170
|
+
screenForceFullDisplay,
|
|
171
|
+
annotateScreenStream
|
|
172
|
+
}) {
|
|
173
|
+
return {
|
|
174
|
+
key: hostScreenID || hostName || "host-screen",
|
|
175
|
+
name: hostName,
|
|
176
|
+
remoteProducerId: hostScreenID || "",
|
|
177
|
+
videoStream: shared ? hostStream : hostStream?.stream ?? null,
|
|
178
|
+
forceFullDisplay: annotateScreenStream && shared ? false : screenForceFullDisplay,
|
|
179
|
+
doMirror: false,
|
|
180
|
+
state: buildMainScreenState({
|
|
181
|
+
filled: true,
|
|
182
|
+
adminOnMainScreen: hostIsAdmin,
|
|
183
|
+
mainScreenPerson: hostName
|
|
184
|
+
})
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function buildPrepopulateUserMediaPlan({
|
|
188
|
+
participants,
|
|
189
|
+
allVideoStreams,
|
|
190
|
+
member,
|
|
191
|
+
shared,
|
|
192
|
+
shareScreenStarted,
|
|
193
|
+
eventType,
|
|
194
|
+
screenId,
|
|
195
|
+
whiteboardStarted,
|
|
196
|
+
whiteboardEnded,
|
|
197
|
+
remoteScreenStream,
|
|
198
|
+
localStreamScreen,
|
|
199
|
+
checkOrientation,
|
|
200
|
+
isWideScreen,
|
|
201
|
+
forceFullDisplay,
|
|
202
|
+
includeWhiteboardAsScreenFlow = false
|
|
203
|
+
}) {
|
|
204
|
+
const safeParticipants = Array.isArray(participants) ? participants : [];
|
|
205
|
+
const safeVideoStreams = Array.isArray(allVideoStreams) ? allVideoStreams : [];
|
|
206
|
+
const safeRemoteScreenStreams = Array.isArray(remoteScreenStream) ? remoteScreenStream : [];
|
|
207
|
+
const whiteboardActive = whiteboardStarted && !whiteboardEnded;
|
|
208
|
+
const screenFlowActive = shareScreenStarted || shared || includeWhiteboardAsScreenFlow && whiteboardActive;
|
|
209
|
+
let screenForceFullDisplay = forceFullDisplay;
|
|
210
|
+
const orientation = checkOrientation();
|
|
211
|
+
if ((orientation === "portrait" || !isWideScreen) && (shareScreenStarted || shared)) {
|
|
212
|
+
screenForceFullDisplay = false;
|
|
213
|
+
}
|
|
214
|
+
if (!screenFlowActive) {
|
|
215
|
+
if (eventType === "conference") {
|
|
216
|
+
return {
|
|
217
|
+
screenFlowActive,
|
|
218
|
+
shouldReturnEarly: true,
|
|
219
|
+
shouldUpdateAdminOnMainScreen: false,
|
|
220
|
+
screenForceFullDisplay,
|
|
221
|
+
host: null,
|
|
222
|
+
hostStream: null,
|
|
223
|
+
adminOnMainScreen: false,
|
|
224
|
+
mainScreenPerson: ""
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
const host2 = safeParticipants.find((participant) => participant.islevel === "2") ?? null;
|
|
228
|
+
return {
|
|
229
|
+
screenFlowActive,
|
|
230
|
+
shouldReturnEarly: false,
|
|
231
|
+
shouldUpdateAdminOnMainScreen: false,
|
|
232
|
+
screenForceFullDisplay,
|
|
233
|
+
host: host2,
|
|
234
|
+
hostStream: null,
|
|
235
|
+
adminOnMainScreen: false,
|
|
236
|
+
mainScreenPerson: host2?.name ?? ""
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
let host = null;
|
|
240
|
+
let hostStream = null;
|
|
241
|
+
if (shared) {
|
|
242
|
+
host = { name: member, audioID: "", videoID: "" };
|
|
243
|
+
hostStream = localStreamScreen;
|
|
244
|
+
} else {
|
|
245
|
+
host = safeParticipants.find(
|
|
246
|
+
(participant) => participant.ScreenID === screenId && participant.ScreenOn === true
|
|
247
|
+
) ?? null;
|
|
248
|
+
if (whiteboardActive) {
|
|
249
|
+
host = {
|
|
250
|
+
name: "WhiteboardActive",
|
|
251
|
+
islevel: "2",
|
|
252
|
+
audioID: "",
|
|
253
|
+
videoID: ""
|
|
254
|
+
};
|
|
255
|
+
hostStream = { producerId: "WhiteboardActive" };
|
|
256
|
+
}
|
|
257
|
+
if (host === null) {
|
|
258
|
+
host = safeParticipants.find((participant) => participant.ScreenOn === true) ?? null;
|
|
259
|
+
}
|
|
260
|
+
if (host && !String(host.name ?? "").includes("WhiteboardActive")) {
|
|
261
|
+
if (safeRemoteScreenStreams.length === 0) {
|
|
262
|
+
hostStream = safeVideoStreams.find((stream) => stream.producerId === host?.ScreenID) ?? null;
|
|
263
|
+
} else {
|
|
264
|
+
hostStream = safeRemoteScreenStreams[0];
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
screenFlowActive,
|
|
270
|
+
shouldReturnEarly: false,
|
|
271
|
+
shouldUpdateAdminOnMainScreen: true,
|
|
272
|
+
screenForceFullDisplay,
|
|
273
|
+
host,
|
|
274
|
+
hostStream,
|
|
275
|
+
adminOnMainScreen: (host && host.islevel === "2") ?? false,
|
|
276
|
+
mainScreenPerson: host?.name ?? ""
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
const isSpeakerInMyBreakoutRoom = (speakerName, parameters) => {
|
|
280
|
+
const {
|
|
281
|
+
breakOutRoomStarted = false,
|
|
282
|
+
breakOutRoomEnded = false,
|
|
283
|
+
limitedBreakRoom = [],
|
|
284
|
+
participants = [],
|
|
285
|
+
islevel = "1",
|
|
286
|
+
eventType = "conference",
|
|
287
|
+
hostNewRoom = -1,
|
|
288
|
+
breakoutRooms = [],
|
|
289
|
+
member = ""
|
|
290
|
+
} = parameters;
|
|
291
|
+
if (!breakOutRoomStarted || breakOutRoomEnded) {
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
const host = participants.find((p) => p.islevel === "2");
|
|
295
|
+
const speakerIsHost = host?.name === speakerName;
|
|
296
|
+
if (islevel !== "2") {
|
|
297
|
+
if (eventType === "webinar" && speakerIsHost) {
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
if (eventType === "conference" && speakerIsHost) {
|
|
301
|
+
const roomMember = breakoutRooms.find(
|
|
302
|
+
(r) => r.find((p) => p.name === member)
|
|
303
|
+
);
|
|
304
|
+
const memberBreakRoom = roomMember ? breakoutRooms.indexOf(roomMember) : -1;
|
|
305
|
+
const inBreakRoom = memberBreakRoom !== -1;
|
|
306
|
+
if (inBreakRoom) {
|
|
307
|
+
return memberBreakRoom === hostNewRoom;
|
|
308
|
+
}
|
|
309
|
+
if (hostNewRoom === -1) {
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
return hostNewRoom === memberBreakRoom && memberBreakRoom !== -1;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return limitedBreakRoom.some((p) => p.name === speakerName);
|
|
316
|
+
};
|
|
317
|
+
const pauseOriginalProducer = async ({
|
|
318
|
+
originalProducerId,
|
|
319
|
+
speakerId,
|
|
320
|
+
parameters
|
|
321
|
+
}) => {
|
|
322
|
+
try {
|
|
323
|
+
const { consumerTransports } = parameters;
|
|
324
|
+
if (speakerId && !isSpeakerInMyBreakoutRoom(speakerId, parameters)) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const transport = consumerTransports.find(
|
|
328
|
+
(t) => t.producerId === originalProducerId && t.consumer?.kind === "audio"
|
|
329
|
+
);
|
|
330
|
+
if (!transport?.consumer) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
if (transport.consumer.track) {
|
|
334
|
+
transport.consumer.track.enabled = false;
|
|
335
|
+
}
|
|
336
|
+
if (transport.consumer.paused) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
transport.consumer.pause();
|
|
340
|
+
transport.socket_?.emit(
|
|
341
|
+
"consumer-pause",
|
|
342
|
+
{ serverConsumerId: transport.serverConsumerTransportId },
|
|
343
|
+
async () => {
|
|
344
|
+
}
|
|
345
|
+
);
|
|
346
|
+
} catch (error) {
|
|
347
|
+
console.error("[TranslationSwitch] Error pausing original producer:", error);
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
const resumeOriginalProducer = async ({
|
|
351
|
+
originalProducerId,
|
|
352
|
+
speakerId,
|
|
353
|
+
parameters
|
|
354
|
+
}) => {
|
|
355
|
+
try {
|
|
356
|
+
const { consumerTransports } = parameters;
|
|
357
|
+
if (speakerId && !isSpeakerInMyBreakoutRoom(speakerId, parameters)) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
const transport = consumerTransports.find(
|
|
361
|
+
(t) => t.producerId === originalProducerId && t.consumer?.kind === "audio"
|
|
362
|
+
);
|
|
363
|
+
if (!transport?.consumer) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
if (!transport.consumer.paused) {
|
|
367
|
+
if (transport.consumer.track) {
|
|
368
|
+
transport.consumer.track.enabled = true;
|
|
369
|
+
}
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
transport.socket_?.emit(
|
|
373
|
+
"consumer-resume",
|
|
374
|
+
{ serverConsumerId: transport.serverConsumerTransportId },
|
|
375
|
+
async ({ resumed }) => {
|
|
376
|
+
if (resumed) {
|
|
377
|
+
if (transport.consumer.track) {
|
|
378
|
+
transport.consumer.track.enabled = true;
|
|
379
|
+
}
|
|
380
|
+
transport.consumer.resume();
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
);
|
|
384
|
+
} catch (error) {
|
|
385
|
+
console.error("[TranslationSwitch] Error resuming original producer:", error);
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
const isConsumingTranslationForSpeaker = (speakerId, consumerTransports, translationProducerMap) => {
|
|
389
|
+
const translationInfo = translationProducerMap.get(speakerId);
|
|
390
|
+
if (translationInfo) {
|
|
391
|
+
const hasConsumer = consumerTransports.some(
|
|
392
|
+
(t) => t.producerId === translationInfo.translationProducerId
|
|
393
|
+
);
|
|
394
|
+
if (hasConsumer) {
|
|
395
|
+
return {
|
|
396
|
+
consuming: true,
|
|
397
|
+
language: translationInfo.language,
|
|
398
|
+
translationProducerId: translationInfo.translationProducerId,
|
|
399
|
+
originalProducerId: translationInfo.originalProducerId
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return { consuming: false };
|
|
404
|
+
};
|
|
405
|
+
const getActiveTranslationConsumers = (translationProducerMap, consumerTransports) => {
|
|
406
|
+
const results = [];
|
|
407
|
+
translationProducerMap.forEach((info, speakerId) => {
|
|
408
|
+
const hasConsumer = consumerTransports.some(
|
|
409
|
+
(t) => t.producerId === info.translationProducerId
|
|
410
|
+
);
|
|
411
|
+
if (hasConsumer) {
|
|
412
|
+
results.push({
|
|
413
|
+
speakerId,
|
|
414
|
+
...info
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
return results;
|
|
419
|
+
};
|
|
420
|
+
const findOriginalProducerForSpeaker = (speakerId, allAudioStreams) => {
|
|
421
|
+
const stream = allAudioStreams.find(
|
|
422
|
+
(s) => s.name === speakerId || s.producerId?.includes(speakerId)
|
|
423
|
+
);
|
|
424
|
+
return stream?.producerId || null;
|
|
425
|
+
};
|
|
426
|
+
const stopConsumingTranslation = async (options) => {
|
|
427
|
+
const { language, translationProducerMap, parameters } = options;
|
|
428
|
+
try {
|
|
429
|
+
const { consumerTransports, updateConsumerTransports } = parameters;
|
|
430
|
+
let originalProducerId = null;
|
|
431
|
+
let translationProducerId = null;
|
|
432
|
+
for (const [origId, langMap] of Object.entries(translationProducerMap)) {
|
|
433
|
+
if (langMap && langMap[language]) {
|
|
434
|
+
translationProducerId = langMap[language];
|
|
435
|
+
originalProducerId = origId;
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (!translationProducerId) {
|
|
440
|
+
return originalProducerId;
|
|
441
|
+
}
|
|
442
|
+
const transportIndex = consumerTransports.findIndex(
|
|
443
|
+
(t) => t.producerId === translationProducerId
|
|
444
|
+
);
|
|
445
|
+
if (transportIndex === -1) {
|
|
446
|
+
return originalProducerId;
|
|
447
|
+
}
|
|
448
|
+
const transport = consumerTransports[transportIndex];
|
|
449
|
+
if (transport.socket_ && transport.consumer) {
|
|
450
|
+
transport.socket_.emit(
|
|
451
|
+
"consumer-close",
|
|
452
|
+
{ serverConsumerId: transport.serverConsumerTransportId },
|
|
453
|
+
() => {
|
|
454
|
+
}
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
if (transport.consumer) {
|
|
458
|
+
transport.consumer.close();
|
|
459
|
+
}
|
|
460
|
+
const updatedTransports = consumerTransports.filter((_, i) => i !== transportIndex);
|
|
461
|
+
updateConsumerTransports(updatedTransports);
|
|
462
|
+
return originalProducerId;
|
|
463
|
+
} catch (error) {
|
|
464
|
+
console.error("[TranslationSwitch] Error stopping translation consumer:", error);
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
const syncTranslationStateAfterBreakoutChange = async (translationProducerMap, speakerIdByProducerId, parameters) => {
|
|
469
|
+
try {
|
|
470
|
+
const { consumerTransports } = parameters;
|
|
471
|
+
for (const [originalProducerId, langMap] of Object.entries(translationProducerMap)) {
|
|
472
|
+
const speakerId = speakerIdByProducerId[originalProducerId];
|
|
473
|
+
if (!speakerId) continue;
|
|
474
|
+
const inMyRoom = isSpeakerInMyBreakoutRoom(speakerId, parameters);
|
|
475
|
+
const hasTranslation = Object.keys(langMap).length > 0;
|
|
476
|
+
const originalConsumer = consumerTransports.find(
|
|
477
|
+
(t) => t.producerId === originalProducerId && t.consumer?.kind === "audio"
|
|
478
|
+
);
|
|
479
|
+
if (!originalConsumer) continue;
|
|
480
|
+
if (inMyRoom && hasTranslation) {
|
|
481
|
+
if (!originalConsumer.consumer.paused) {
|
|
482
|
+
await pauseOriginalProducer({
|
|
483
|
+
originalProducerId,
|
|
484
|
+
speakerId,
|
|
485
|
+
parameters
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
} catch (error) {
|
|
491
|
+
console.error("[TranslationSwitch] Error syncing translation state:", error);
|
|
492
|
+
}
|
|
493
|
+
};
|
|
494
|
+
exports.buildAddVideosGridPlan = buildAddVideosGridPlan;
|
|
495
|
+
exports.buildMainHostCardPlan = buildMainHostCardPlan;
|
|
496
|
+
exports.buildMainScreenState = buildMainScreenState;
|
|
497
|
+
exports.buildPrepopulateUserMediaPlan = buildPrepopulateUserMediaPlan;
|
|
498
|
+
exports.buildScreenShareHostCardPlan = buildScreenShareHostCardPlan;
|
|
499
|
+
exports.findOriginalProducerForSpeaker = findOriginalProducerForSpeaker;
|
|
500
|
+
exports.getActiveTranslationConsumers = getActiveTranslationConsumers;
|
|
501
|
+
exports.isConsumingTranslationForSpeaker = isConsumingTranslationForSpeaker;
|
|
502
|
+
exports.isSpeakerInMyBreakoutRoom = isSpeakerInMyBreakoutRoom;
|
|
503
|
+
exports.pauseOriginalProducer = pauseOriginalProducer;
|
|
504
|
+
exports.resolveHostVideoStream = resolveHostVideoStream;
|
|
505
|
+
exports.resolveMainHostRenderMode = resolveMainHostRenderMode;
|
|
506
|
+
exports.resumeOriginalProducer = resumeOriginalProducer;
|
|
507
|
+
exports.stopConsumingTranslation = stopConsumingTranslation;
|
|
508
|
+
exports.syncTranslationStateAfterBreakoutChange = syncTranslationStateAfterBreakoutChange;
|
|
509
|
+
//# sourceMappingURL=translationConsumerSwitch-C20MfNNq.cjs.map
|