mediasfu-shared 1.0.1 → 1.0.2
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/LICENSE +21 -21
- package/README.md +103 -222
- package/dist/index.cjs +7500 -2163
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4203 -273
- package/dist/index.js +7521 -2184
- package/dist/index.js.map +1 -1
- package/package.json +85 -78
- package/src/ProducerClient/producerClientEmits/joinRoomClient.ts +57 -0
- package/src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts +401 -0
- package/src/consumers/addVideosGrid.ts +3 -2
- package/src/consumers/changeVids.ts +111 -41
- package/src/consumers/checkPermission.ts +35 -1
- package/src/consumers/connectRecvTransport.ts +42 -1
- package/src/consumers/consumerResume.ts +2 -2
- package/src/consumers/dispStreams.ts +83 -37
- package/src/consumers/frameworkConsumerContract.ts +6 -0
- package/src/consumers/generatePageContent.ts +24 -10
- package/src/consumers/getPipedProducersAlt.ts +112 -16
- package/src/consumers/gridLayout/addVideosGrid.engine.ts +42 -0
- package/src/consumers/gridLayout/prepopulateUserMedia.engine.ts +444 -0
- package/src/consumers/mixStreams.ts +45 -14
- package/src/consumers/onScreenChanges.ts +25 -10
- package/src/consumers/prepopulateUserMedia.ts +3 -2
- package/src/consumers/processConsumerTransports.ts +68 -23
- package/src/consumers/processConsumerTransportsAudio.ts +53 -16
- package/src/consumers/reUpdateInter.ts +61 -21
- package/src/consumers/readjust.ts +30 -14
- package/src/consumers/reorderStreams.ts +76 -42
- package/src/consumers/resumePauseAudioStreams.ts +66 -17
- package/src/consumers/resumePauseStreams.ts +53 -10
- package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +8 -0
- package/src/consumers/socketReceiveMethods/newPipeProducer.ts +114 -0
- package/src/consumers/socketReceiveMethods/producerClosed.ts +13 -0
- package/src/consumers/streamSuccessScreen.ts +2 -2
- package/src/consumers/streamSuccessVideo.ts +5 -0
- package/src/consumers/translationConsumerSwitch.ts +299 -0
- package/src/index.ts +85 -1
- package/src/methods/coHostMethods/modifyCoHostSettings.ts +9 -9
- package/src/methods/displaySettings/modifyDisplaySettings.ts +5 -0
- package/src/methods/index.ts +66 -0
- package/src/methods/message/sendMessage.ts +12 -29
- package/src/methods/panelists/focusPanelists.ts +83 -0
- package/src/methods/panelists/index.ts +3 -0
- package/src/methods/panelists/launchPanelists.ts +13 -0
- package/src/methods/panelists/updatePanelists.ts +135 -0
- package/src/methods/permissions/index.ts +3 -0
- package/src/methods/permissions/launchPermissions.ts +13 -0
- package/src/methods/permissions/updateParticipantPermission.ts +127 -0
- package/src/methods/permissions/updatePermissionConfig.ts +52 -0
- package/src/methods/polls/pollUpdated.ts +88 -0
- package/src/methods/recording/confirmRecording.ts +15 -12
- package/src/methods/recording/recordResumeTimer.ts +2 -2
- package/src/methods/recording/recordStartTimer.ts +2 -2
- package/src/methods/recording/timeLeftRecording.ts +25 -0
- package/src/methods/requests/hostRequestResponse.ts +153 -0
- package/src/methods/settings/modifySettings.ts +17 -17
- package/src/methods/socketReceive/allMembers.ts +450 -0
- package/src/methods/socketReceive/allMembersRest.ts +480 -0
- package/src/methods/socketReceive/allWaitingRoomMembers.ts +35 -0
- package/src/methods/socketReceive/banParticipant.ts +73 -0
- package/src/methods/socketReceive/controlMediaHost.ts +280 -0
- package/src/methods/socketReceive/disconnect.ts +40 -0
- package/src/methods/socketReceive/disconnectUserSelf.ts +56 -0
- package/src/methods/socketReceive/getDomains.ts +112 -0
- package/src/methods/socketReceive/meetingEnded.ts +49 -0
- package/src/methods/socketReceive/meetingStillThere.ts +26 -0
- package/src/methods/socketReceive/panelistReceiveMethods.ts +195 -0
- package/src/methods/socketReceive/participantRequested.ts +48 -0
- package/src/methods/socketReceive/permissionReceiveMethods.ts +59 -0
- package/src/methods/socketReceive/personJoined.ts +35 -0
- package/src/methods/socketReceive/producerMediaClosed.ts +223 -0
- package/src/methods/socketReceive/producerMediaPaused.ts +267 -0
- package/src/methods/socketReceive/producerMediaResumed.ts +157 -0
- package/src/methods/socketReceive/reInitiateRecording.ts +53 -0
- package/src/methods/socketReceive/receiveMessage.ts +117 -0
- package/src/methods/socketReceive/recordingNotice.ts +286 -0
- package/src/methods/socketReceive/roomRecordParams.ts +122 -0
- package/src/methods/socketReceive/screenProducerId.ts +61 -0
- package/src/methods/socketReceive/startRecords.ts +46 -0
- package/src/methods/socketReceive/stoppedRecording.ts +44 -0
- package/src/methods/socketReceive/translationReceiveMethods.ts +581 -0
- package/src/methods/socketReceive/updateConsumingDomains.ts +128 -0
- package/src/methods/socketReceive/updateMediaSettings.ts +45 -0
- package/src/methods/socketReceive/updatedCoHost.ts +75 -0
- package/src/methods/socketReceive/userWaiting.ts +45 -0
- package/src/methods/stream/clickAudio.ts +380 -0
- package/src/methods/stream/clickChat.ts +36 -0
- package/src/methods/stream/clickScreenShare.ts +173 -0
- package/src/methods/stream/clickVideo.ts +22 -5
- package/src/methods/stream/index.ts +1 -0
- package/src/methods/utils/SoundPlayer.ts +31 -0
- package/src/methods/utils/checkLimitsAndMakeRequest.ts +156 -2
- package/src/methods/utils/createResponseJoinRoom.ts +47 -0
- package/src/methods/utils/createRoomOnMediaSFU.ts +160 -0
- package/src/methods/utils/formatNumber.ts +42 -0
- package/src/methods/utils/generateRandomMessages.ts +70 -0
- package/src/methods/utils/generateRandomParticipants.ts +100 -0
- package/src/methods/utils/generateRandomPolls.ts +43 -0
- package/src/methods/utils/generateRandomRequestList.ts +51 -0
- package/src/methods/utils/generateRandomWaitingRoomList.ts +17 -0
- package/src/methods/utils/getModalPosition.ts +23 -0
- package/src/methods/utils/getOverlayPosition.ts +37 -0
- package/src/methods/utils/initialValuesState.ts +405 -0
- package/src/methods/utils/joinRoomOnMediaSFU.ts +124 -0
- package/src/methods/utils/liveSubtitle.ts +107 -0
- package/src/methods/utils/meetingTimeRemaining.ts +33 -0
- package/src/methods/utils/meetingTimer/startMeetingProgressTimer.ts +72 -0
- package/src/methods/utils/producer/aParams.ts +10 -0
- package/src/methods/utils/producer/hParams.ts +26 -0
- package/src/methods/utils/producer/screenParams.ts +13 -0
- package/src/methods/utils/producer/vParams.ts +26 -0
- package/src/methods/utils/producer/videoCaptureConstraints.ts +65 -0
- package/src/methods/utils/resolveMediaSFURoomApi.ts +16 -0
- package/src/methods/utils/sleep.ts +24 -0
- package/src/methods/utils/translationLanguages.ts +308 -0
- package/src/methods/utils/webrtc.ts +44 -0
- package/src/methods/welcome/handleWelcomeRequest.ts +11 -2
- package/src/methods/welcome/index.ts +5 -1
- package/src/methods/whiteboard/captureCanvasStream.ts +128 -0
- package/src/producers/producerEmits/joinConRoom.ts +2 -2
- package/src/producers/producerEmits/joinLocalRoom.ts +240 -0
- package/src/producers/producerEmits/joinRoom.ts +129 -0
- package/src/types/shared-base-types.ts +14 -3
- package/src/types/types.ts +255 -0
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { PrepopulateUserMediaParameters, PrepopulateUserMediaOptions, EventType } from '../types/types';
|
|
4
|
+
|
|
5
|
+
type PrepopulateUserMediaInvoker = {
|
|
6
|
+
bivarianceHack: (options: PrepopulateUserMediaOptions) => Promise<unknown>;
|
|
7
|
+
}['bivarianceHack'];
|
|
8
|
+
|
|
4
9
|
export interface ReadjustParameters extends PrepopulateUserMediaParameters {
|
|
5
10
|
eventType: EventType;
|
|
6
11
|
shareScreenStarted: boolean;
|
|
@@ -13,19 +18,21 @@ export interface ReadjustParameters extends PrepopulateUserMediaParameters {
|
|
|
13
18
|
updateMainHeightWidth: (value: number) => void;
|
|
14
19
|
|
|
15
20
|
// mediasfu functions
|
|
16
|
-
prepopulateUserMedia:
|
|
21
|
+
prepopulateUserMedia: PrepopulateUserMediaInvoker;
|
|
17
22
|
getUpdatedAllParams: () => ReadjustParameters;
|
|
18
23
|
[key: string]: any;
|
|
19
24
|
}
|
|
20
25
|
|
|
21
|
-
export interface ReadjustOptions {
|
|
26
|
+
export interface ReadjustOptions<TParameters extends ReadjustParameters = ReadjustParameters> {
|
|
22
27
|
n: number;
|
|
23
28
|
state: number;
|
|
24
|
-
parameters:
|
|
29
|
+
parameters: TParameters;
|
|
25
30
|
}
|
|
26
31
|
|
|
27
32
|
// Export the type definition for the function
|
|
28
|
-
export type ReadjustType =
|
|
33
|
+
export type ReadjustType = <TParameters extends ReadjustParameters = ReadjustParameters>(
|
|
34
|
+
options: ReadjustOptions<TParameters>
|
|
35
|
+
) => Promise<void>;
|
|
29
36
|
|
|
30
37
|
/**
|
|
31
38
|
* Adjusts the layout parameters based on the provided options.
|
|
@@ -69,9 +76,13 @@ export type ReadjustType = (options: ReadjustOptions) => Promise<void>;
|
|
|
69
76
|
* ```
|
|
70
77
|
*/
|
|
71
78
|
|
|
72
|
-
export async function readjust
|
|
73
|
-
|
|
74
|
-
|
|
79
|
+
export async function readjust<TParameters extends ReadjustParameters = ReadjustParameters>({
|
|
80
|
+
n,
|
|
81
|
+
state,
|
|
82
|
+
parameters,
|
|
83
|
+
}: ReadjustOptions<TParameters>): Promise<void> {
|
|
84
|
+
const { getUpdatedAllParams } = parameters;
|
|
85
|
+
const updatedParameters = getUpdatedAllParams() as TParameters;
|
|
75
86
|
|
|
76
87
|
try {
|
|
77
88
|
// Destructure parameters
|
|
@@ -79,6 +90,8 @@ export async function readjust({ n, state, parameters }: ReadjustOptions): Promi
|
|
|
79
90
|
eventType,
|
|
80
91
|
shareScreenStarted,
|
|
81
92
|
shared,
|
|
93
|
+
whiteboardStarted,
|
|
94
|
+
whiteboardEnded,
|
|
82
95
|
mainHeightWidth,
|
|
83
96
|
prevMainHeightWidth,
|
|
84
97
|
hostLabel,
|
|
@@ -86,7 +99,8 @@ export async function readjust({ n, state, parameters }: ReadjustOptions): Promi
|
|
|
86
99
|
lock_screen,
|
|
87
100
|
updateMainHeightWidth,
|
|
88
101
|
prepopulateUserMedia,
|
|
89
|
-
} =
|
|
102
|
+
} = updatedParameters;
|
|
103
|
+
const screenFlowActive = shareScreenStarted || shared || (whiteboardStarted && !whiteboardEnded);
|
|
90
104
|
|
|
91
105
|
if (state === 0) {
|
|
92
106
|
prevMainHeightWidth = mainHeightWidth;
|
|
@@ -107,12 +121,12 @@ export async function readjust({ n, state, parameters }: ReadjustOptions): Promi
|
|
|
107
121
|
}
|
|
108
122
|
} else if (
|
|
109
123
|
eventType === "chat" ||
|
|
110
|
-
(eventType === "conference" && !
|
|
124
|
+
(eventType === "conference" && !screenFlowActive)
|
|
111
125
|
) {
|
|
112
126
|
val1 = 12;
|
|
113
127
|
val2 = 12 - val1;
|
|
114
128
|
} else {
|
|
115
|
-
if (
|
|
129
|
+
if (screenFlowActive) {
|
|
116
130
|
val2 = 10;
|
|
117
131
|
val1 = 12 - val2;
|
|
118
132
|
} else {
|
|
@@ -151,13 +165,15 @@ export async function readjust({ n, state, parameters }: ReadjustOptions): Promi
|
|
|
151
165
|
cal1 = Math.floor((val1 / 12) * 100);
|
|
152
166
|
cal2 = 100 - cal1;
|
|
153
167
|
|
|
154
|
-
|
|
168
|
+
if (mainHeightWidth !== cal2) {
|
|
169
|
+
updateMainHeightWidth(cal2);
|
|
170
|
+
}
|
|
155
171
|
|
|
156
172
|
if (prevMainHeightWidth !== mainHeightWidth) {
|
|
157
173
|
if (!lock_screen && !shared) {
|
|
158
|
-
await prepopulateUserMedia({ name: hostLabel, parameters });
|
|
174
|
+
await prepopulateUserMedia({ name: hostLabel, parameters: updatedParameters });
|
|
159
175
|
} else if (!first_round) {
|
|
160
|
-
await prepopulateUserMedia({ name: hostLabel, parameters });
|
|
176
|
+
await prepopulateUserMedia({ name: hostLabel, parameters: updatedParameters });
|
|
161
177
|
}
|
|
162
178
|
}
|
|
163
179
|
} catch (error) {
|
|
@@ -1,42 +1,74 @@
|
|
|
1
1
|
|
|
2
|
-
import { Participant, Stream
|
|
2
|
+
import { Participant, Stream } from "../types/types";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
interface ReorderStreamLike {
|
|
5
|
+
producerId?: string | null;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface ReorderParticipantLike {
|
|
9
|
+
name: string;
|
|
10
|
+
islevel?: string | null;
|
|
11
|
+
videoID?: string | null;
|
|
12
|
+
ScreenID?: string | null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type ChangeVidsInvoker = (options: {
|
|
16
|
+
screenChanged?: boolean;
|
|
17
|
+
parameters: any;
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
|
|
20
|
+
type StreamCollectionUpdater<TEntry> = {
|
|
21
|
+
bivarianceHack: (streams: TEntry[]) => void;
|
|
22
|
+
}["bivarianceHack"];
|
|
23
|
+
|
|
24
|
+
const getProducerId = (value: unknown): string | null | undefined => {
|
|
25
|
+
return (value as ReorderStreamLike | null | undefined)?.producerId;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export interface ReorderStreamsParameters<
|
|
29
|
+
TStream extends ReorderStreamLike = Stream,
|
|
30
|
+
TParticipant extends ReorderParticipantLike = Participant,
|
|
31
|
+
TChangeVidsParameters = unknown,
|
|
32
|
+
> {
|
|
33
|
+
allVideoStreams: (TStream | TParticipant)[];
|
|
34
|
+
participants: TParticipant[];
|
|
35
|
+
oldAllStreams: (TStream | TParticipant)[];
|
|
8
36
|
screenId?: string;
|
|
9
37
|
adminVidID?: string;
|
|
10
|
-
newLimitedStreams: (
|
|
38
|
+
newLimitedStreams: (TStream | TParticipant)[];
|
|
11
39
|
newLimitedStreamsIDs: string[];
|
|
12
40
|
activeSounds: string[];
|
|
13
41
|
screenShareIDStream?: string;
|
|
14
42
|
screenShareNameStream?: string;
|
|
15
43
|
adminIDStream?: string;
|
|
16
44
|
adminNameStream?: string;
|
|
17
|
-
updateNewLimitedStreams:
|
|
45
|
+
updateNewLimitedStreams: StreamCollectionUpdater<TStream | TParticipant>;
|
|
18
46
|
updateNewLimitedStreamsIDs: (ids: string[]) => void;
|
|
19
47
|
updateActiveSounds: (sounds: string[]) => void;
|
|
20
48
|
updateScreenShareIDStream: (id: string) => void;
|
|
21
49
|
updateScreenShareNameStream: (name: string) => void;
|
|
22
50
|
updateAdminIDStream: (id: string) => void;
|
|
23
51
|
updateAdminNameStream: (name: string) => void;
|
|
24
|
-
updateYouYouStream:
|
|
52
|
+
updateYouYouStream: StreamCollectionUpdater<TStream | TParticipant>;
|
|
25
53
|
|
|
26
54
|
// mediasfu functions
|
|
27
|
-
changeVids:
|
|
28
|
-
getUpdatedAllParams: () => ReorderStreamsParameters
|
|
55
|
+
changeVids: ChangeVidsInvoker;
|
|
56
|
+
getUpdatedAllParams: () => ReorderStreamsParameters<TStream, TParticipant, TChangeVidsParameters>;
|
|
29
57
|
[key: string]: any;
|
|
30
58
|
}
|
|
31
59
|
|
|
32
|
-
export interface ReorderStreamsOptions
|
|
60
|
+
export interface ReorderStreamsOptions<
|
|
61
|
+
TParameters extends ReorderStreamsParameters<any, any, any> = ReorderStreamsParameters,
|
|
62
|
+
> {
|
|
33
63
|
add?: boolean;
|
|
34
64
|
screenChanged?: boolean;
|
|
35
|
-
parameters:
|
|
65
|
+
parameters: TParameters;
|
|
36
66
|
}
|
|
37
67
|
|
|
38
68
|
|
|
39
|
-
export type ReorderStreamsType =
|
|
69
|
+
export type ReorderStreamsType = <
|
|
70
|
+
TParameters extends ReorderStreamsParameters<any, any, any> = ReorderStreamsParameters,
|
|
71
|
+
>(options: ReorderStreamsOptions<TParameters>) => Promise<void>;
|
|
40
72
|
|
|
41
73
|
/**
|
|
42
74
|
* Reorders the video streams based on the provided options and updates the UI accordingly.
|
|
@@ -86,13 +118,15 @@ export type ReorderStreamsType = (options: ReorderStreamsOptions) => Promise<voi
|
|
|
86
118
|
* ```
|
|
87
119
|
*/
|
|
88
120
|
|
|
89
|
-
export const reorderStreams = async
|
|
121
|
+
export const reorderStreams = async <
|
|
122
|
+
TParameters extends ReorderStreamsParameters<any, any, any> = ReorderStreamsParameters,
|
|
123
|
+
>({
|
|
90
124
|
add = false,
|
|
91
125
|
screenChanged = false,
|
|
92
126
|
parameters,
|
|
93
|
-
}: ReorderStreamsOptions): Promise<void> => {
|
|
127
|
+
}: ReorderStreamsOptions<TParameters>): Promise<void> => {
|
|
94
128
|
const { getUpdatedAllParams } = parameters;
|
|
95
|
-
|
|
129
|
+
const updatedParameters = getUpdatedAllParams() as TParameters;
|
|
96
130
|
|
|
97
131
|
let {
|
|
98
132
|
allVideoStreams,
|
|
@@ -118,7 +152,7 @@ export const reorderStreams = async ({
|
|
|
118
152
|
|
|
119
153
|
//mediasfu functions
|
|
120
154
|
changeVids,
|
|
121
|
-
} =
|
|
155
|
+
} = updatedParameters;
|
|
122
156
|
|
|
123
157
|
// function to reorder streams on the ui
|
|
124
158
|
if (!add) {
|
|
@@ -127,27 +161,27 @@ export const reorderStreams = async ({
|
|
|
127
161
|
activeSounds = [];
|
|
128
162
|
}
|
|
129
163
|
|
|
130
|
-
const youyou = allVideoStreams.filter((stream) => stream
|
|
164
|
+
const youyou = allVideoStreams.filter((stream) => getProducerId(stream) === "youyou");
|
|
131
165
|
const admin = participants.filter((participant) => participant.islevel === "2");
|
|
132
166
|
|
|
133
167
|
if (admin.length > 0) {
|
|
134
|
-
adminVidID = admin[0].videoID;
|
|
168
|
+
adminVidID = admin[0].videoID ?? undefined;
|
|
135
169
|
} else {
|
|
136
170
|
adminVidID = "";
|
|
137
171
|
}
|
|
138
172
|
|
|
139
173
|
if (adminVidID) {
|
|
140
|
-
const adminStream = allVideoStreams.find((stream) => stream
|
|
174
|
+
const adminStream = allVideoStreams.find((stream) => getProducerId(stream) === adminVidID);
|
|
141
175
|
|
|
142
176
|
if (!add) {
|
|
143
177
|
newLimitedStreams = [...newLimitedStreams, ...youyou];
|
|
144
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...youyou.map((stream) => stream
|
|
178
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...youyou.map((stream) => getProducerId(stream) ?? "")];
|
|
145
179
|
} else {
|
|
146
|
-
const youyouStream = newLimitedStreams.find((stream) => stream
|
|
180
|
+
const youyouStream = newLimitedStreams.find((stream) => getProducerId(stream) === "youyou");
|
|
147
181
|
|
|
148
182
|
if (!youyouStream) {
|
|
149
183
|
newLimitedStreams = [...newLimitedStreams, ...youyou];
|
|
150
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...youyou.map((stream) => stream
|
|
184
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...youyou.map((stream) => getProducerId(stream) ?? "")];
|
|
151
185
|
}
|
|
152
186
|
}
|
|
153
187
|
|
|
@@ -156,17 +190,17 @@ export const reorderStreams = async ({
|
|
|
156
190
|
|
|
157
191
|
if (!add) {
|
|
158
192
|
newLimitedStreams = [...newLimitedStreams, adminStream];
|
|
159
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, adminStream
|
|
193
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, getProducerId(adminStream) ?? ""];
|
|
160
194
|
} else {
|
|
161
|
-
const adminStreamer = newLimitedStreams.find((stream) => stream
|
|
195
|
+
const adminStreamer = newLimitedStreams.find((stream) => getProducerId(stream) === adminVidID);
|
|
162
196
|
|
|
163
197
|
if (!adminStreamer) {
|
|
164
198
|
newLimitedStreams = [...newLimitedStreams, adminStream];
|
|
165
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, adminStream
|
|
199
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, getProducerId(adminStream) ?? ""];
|
|
166
200
|
}
|
|
167
201
|
}
|
|
168
202
|
} else {
|
|
169
|
-
const oldAdminStream = oldAllStreams.find((stream) => stream
|
|
203
|
+
const oldAdminStream = oldAllStreams.find((stream) => getProducerId(stream) === adminVidID);
|
|
170
204
|
|
|
171
205
|
if (oldAdminStream) {
|
|
172
206
|
//add it to the allVideoStream
|
|
@@ -176,13 +210,13 @@ export const reorderStreams = async ({
|
|
|
176
210
|
|
|
177
211
|
if (!add) {
|
|
178
212
|
newLimitedStreams = [...newLimitedStreams, oldAdminStream];
|
|
179
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, oldAdminStream
|
|
213
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, getProducerId(oldAdminStream) ?? ""];
|
|
180
214
|
} else {
|
|
181
|
-
const adminStreamer = newLimitedStreams.find((stream) => stream
|
|
215
|
+
const adminStreamer = newLimitedStreams.find((stream) => getProducerId(stream) === adminVidID);
|
|
182
216
|
|
|
183
217
|
if (!adminStreamer) {
|
|
184
218
|
newLimitedStreams = [...newLimitedStreams, oldAdminStream];
|
|
185
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, oldAdminStream
|
|
219
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, getProducerId(oldAdminStream) ?? ""];
|
|
186
220
|
}
|
|
187
221
|
}
|
|
188
222
|
}
|
|
@@ -191,42 +225,42 @@ export const reorderStreams = async ({
|
|
|
191
225
|
const screenParticipant = participants.filter((participant) => participant.ScreenID === screenId);
|
|
192
226
|
|
|
193
227
|
if (screenParticipant.length > 0) {
|
|
194
|
-
const screenParticipantVidID = screenParticipant[0].videoID;
|
|
195
|
-
const screenParticipantVidID_ = newLimitedStreams.filter((stream) => stream
|
|
228
|
+
const screenParticipantVidID = screenParticipant[0].videoID ?? undefined;
|
|
229
|
+
const screenParticipantVidID_ = newLimitedStreams.filter((stream) => getProducerId(stream) === screenParticipantVidID);
|
|
196
230
|
|
|
197
231
|
if (screenParticipantVidID_?.length < 1 && screenParticipantVidID) {
|
|
198
232
|
screenShareIDStream = screenParticipantVidID;
|
|
199
233
|
screenShareNameStream = screenParticipant[0].name;
|
|
200
|
-
const screenParticipantVidID__ = allVideoStreams.filter((stream) => stream
|
|
234
|
+
const screenParticipantVidID__ = allVideoStreams.filter((stream) => getProducerId(stream) === screenParticipantVidID);
|
|
201
235
|
newLimitedStreams = [...newLimitedStreams, ...screenParticipantVidID__];
|
|
202
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...screenParticipantVidID__.map((stream) => stream
|
|
236
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...screenParticipantVidID__.map((stream) => getProducerId(stream) ?? "")];
|
|
203
237
|
}
|
|
204
238
|
}
|
|
205
239
|
} else {
|
|
206
240
|
if (!add) {
|
|
207
241
|
newLimitedStreams = [...newLimitedStreams, ...youyou];
|
|
208
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...youyou.map((stream) => stream
|
|
242
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...youyou.map((stream) => getProducerId(stream) ?? "")];
|
|
209
243
|
} else {
|
|
210
|
-
const youyouStream = newLimitedStreams.find((stream) => stream
|
|
244
|
+
const youyouStream = newLimitedStreams.find((stream) => getProducerId(stream) === "youyou");
|
|
211
245
|
|
|
212
246
|
if (!youyouStream) {
|
|
213
247
|
newLimitedStreams = [...newLimitedStreams, ...youyou];
|
|
214
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...youyou.map((stream) => stream
|
|
248
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...youyou.map((stream) => getProducerId(stream) ?? "")];
|
|
215
249
|
}
|
|
216
250
|
}
|
|
217
251
|
|
|
218
252
|
const screenParticipant = participants.filter((participant) => participant.ScreenID === screenId);
|
|
219
253
|
|
|
220
254
|
if (screenParticipant.length > 0) {
|
|
221
|
-
const screenParticipantVidID = screenParticipant[0].videoID;
|
|
222
|
-
const screenParticipantVidID_ = newLimitedStreams.filter((stream) => stream
|
|
255
|
+
const screenParticipantVidID = screenParticipant[0].videoID ?? undefined;
|
|
256
|
+
const screenParticipantVidID_ = newLimitedStreams.filter((stream) => getProducerId(stream) === screenParticipantVidID);
|
|
223
257
|
|
|
224
258
|
if (screenParticipantVidID_?.length < 1 && screenParticipantVidID) {
|
|
225
259
|
screenShareIDStream = screenParticipantVidID;
|
|
226
260
|
screenShareNameStream = screenParticipant[0].name;
|
|
227
|
-
const screenParticipantVidID__ = allVideoStreams.filter((stream) => stream
|
|
261
|
+
const screenParticipantVidID__ = allVideoStreams.filter((stream) => getProducerId(stream) === screenParticipantVidID);
|
|
228
262
|
newLimitedStreams = [...newLimitedStreams, ...screenParticipantVidID__];
|
|
229
|
-
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...screenParticipantVidID__.map((stream) => stream
|
|
263
|
+
newLimitedStreamsIDs = [...newLimitedStreamsIDs, ...screenParticipantVidID__.map((stream) => getProducerId(stream) ?? "")];
|
|
230
264
|
}
|
|
231
265
|
}
|
|
232
266
|
}
|
|
@@ -241,6 +275,6 @@ export const reorderStreams = async ({
|
|
|
241
275
|
updateYouYouStream(youyou);
|
|
242
276
|
|
|
243
277
|
//reflect the changes on the ui
|
|
244
|
-
await changeVids({ screenChanged, parameters });
|
|
278
|
+
await changeVids({ screenChanged, parameters: updatedParameters });
|
|
245
279
|
};
|
|
246
280
|
|
|
@@ -1,28 +1,74 @@
|
|
|
1
|
-
import { Participant, Stream,
|
|
1
|
+
import { Participant, Stream, ProcessConsumerTransportsAudioParameters, Transport, EventType } from '../types/types';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
interface BreakoutParticipantLike {
|
|
4
|
+
name: string;
|
|
5
|
+
breakRoom?: number | null;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface ParticipantLike {
|
|
9
|
+
name: string;
|
|
10
|
+
islevel?: string | null;
|
|
11
|
+
audioID?: string | null;
|
|
12
|
+
producerId?: string | null;
|
|
13
|
+
breakRoom?: number | null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface MediaEntryLike {
|
|
17
|
+
producerId?: string | null;
|
|
18
|
+
audioID?: string | null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface AudioTransportLike {
|
|
22
|
+
producerId?: string | null;
|
|
23
|
+
consumer?: {
|
|
24
|
+
paused?: boolean;
|
|
25
|
+
kind?: string;
|
|
26
|
+
pause: () => unknown;
|
|
27
|
+
resume: () => unknown;
|
|
28
|
+
};
|
|
29
|
+
socket_: {
|
|
30
|
+
emit: (
|
|
31
|
+
event: string,
|
|
32
|
+
payload: { serverConsumerId: string },
|
|
33
|
+
callback?: ((payload?: { resumed: boolean }) => void | Promise<unknown>)
|
|
34
|
+
) => void;
|
|
35
|
+
};
|
|
36
|
+
serverConsumerTransportId: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ResumePauseAudioStreamsParameters<
|
|
40
|
+
TTransport extends AudioTransportLike = Transport,
|
|
41
|
+
TMediaEntry extends MediaEntryLike | ParticipantLike = Stream | Participant,
|
|
42
|
+
> extends ProcessConsumerTransportsAudioParameters {
|
|
43
|
+
breakoutRooms: BreakoutParticipantLike[][];
|
|
44
|
+
ref_participants: ParticipantLike[];
|
|
45
|
+
allAudioStreams: TMediaEntry[];
|
|
46
|
+
participants: ParticipantLike[];
|
|
8
47
|
islevel: string;
|
|
9
48
|
eventType: EventType;
|
|
10
|
-
consumerTransports:
|
|
11
|
-
limitedBreakRoom:
|
|
49
|
+
consumerTransports: TTransport[];
|
|
50
|
+
limitedBreakRoom: BreakoutParticipantLike[];
|
|
12
51
|
hostNewRoom: number;
|
|
13
52
|
member: string;
|
|
14
|
-
updateLimitedBreakRoom: (limitedBreakRoom:
|
|
53
|
+
updateLimitedBreakRoom: (limitedBreakRoom: BreakoutParticipantLike[]) => void;
|
|
15
54
|
|
|
16
55
|
// mediasfu functions
|
|
17
|
-
processConsumerTransportsAudio:
|
|
18
|
-
|
|
56
|
+
processConsumerTransportsAudio: (options: {
|
|
57
|
+
consumerTransports: TTransport[];
|
|
58
|
+
lStreams: TMediaEntry[];
|
|
59
|
+
parameters: ProcessConsumerTransportsAudioParameters;
|
|
60
|
+
}) => Promise<void>;
|
|
61
|
+
getUpdatedAllParams: () => ResumePauseAudioStreamsParameters<TTransport, TMediaEntry>;
|
|
19
62
|
[key: string]: any;
|
|
20
63
|
}
|
|
21
64
|
|
|
22
|
-
export interface ResumePauseAudioStreamsOptions
|
|
65
|
+
export interface ResumePauseAudioStreamsOptions<
|
|
66
|
+
TTransport extends AudioTransportLike = Transport,
|
|
67
|
+
TMediaEntry extends MediaEntryLike | ParticipantLike = Stream | Participant,
|
|
68
|
+
> {
|
|
23
69
|
breakRoom?: number;
|
|
24
70
|
inBreakRoom?: boolean;
|
|
25
|
-
parameters: ResumePauseAudioStreamsParameters
|
|
71
|
+
parameters: ResumePauseAudioStreamsParameters<TTransport, TMediaEntry>;
|
|
26
72
|
}
|
|
27
73
|
|
|
28
74
|
// Export the type definition for the function
|
|
@@ -54,11 +100,14 @@ export type ResumePauseAudioStreamsType = (
|
|
|
54
100
|
* ```
|
|
55
101
|
*/
|
|
56
102
|
|
|
57
|
-
export const resumePauseAudioStreams = async
|
|
103
|
+
export const resumePauseAudioStreams = async <
|
|
104
|
+
TTransport extends AudioTransportLike = Transport,
|
|
105
|
+
TMediaEntry extends MediaEntryLike | ParticipantLike = Stream | Participant,
|
|
106
|
+
>({
|
|
58
107
|
breakRoom = -1,
|
|
59
108
|
inBreakRoom = false,
|
|
60
109
|
parameters,
|
|
61
|
-
}: ResumePauseAudioStreamsOptions): Promise<void> => {
|
|
110
|
+
}: ResumePauseAudioStreamsOptions<TTransport, TMediaEntry>): Promise<void> => {
|
|
62
111
|
const { getUpdatedAllParams } = parameters;
|
|
63
112
|
parameters = getUpdatedAllParams();
|
|
64
113
|
|
|
@@ -76,8 +125,8 @@ export const resumePauseAudioStreams = async ({
|
|
|
76
125
|
processConsumerTransportsAudio,
|
|
77
126
|
} = parameters;
|
|
78
127
|
|
|
79
|
-
let room:
|
|
80
|
-
let currentStreams:
|
|
128
|
+
let room: BreakoutParticipantLike[] = [];
|
|
129
|
+
let currentStreams: TMediaEntry[] = [];
|
|
81
130
|
// Determine the room based on breakout status
|
|
82
131
|
if (inBreakRoom && breakRoom !== -1) {
|
|
83
132
|
room = breakoutRooms[breakRoom];
|
|
@@ -1,24 +1,62 @@
|
|
|
1
1
|
import { Participant, Transport, Stream } from "../types/types";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
interface ParticipantLike {
|
|
4
|
+
name: string;
|
|
5
|
+
islevel?: string | null;
|
|
6
|
+
videoID?: string | null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface ConsumerLike {
|
|
10
|
+
kind?: string;
|
|
11
|
+
resume: () => unknown;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface SocketLike {
|
|
15
|
+
emit: (
|
|
16
|
+
event: string,
|
|
17
|
+
payload: { serverConsumerId: string },
|
|
18
|
+
callback?: ((payload: { resumed: boolean }) => void | Promise<unknown>)
|
|
19
|
+
) => void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface TransportLike {
|
|
23
|
+
producerId?: string | null;
|
|
24
|
+
consumer: ConsumerLike;
|
|
25
|
+
socket_: SocketLike;
|
|
26
|
+
serverConsumerTransportId: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface ResumePauseStreamsParameters<
|
|
30
|
+
TParticipant extends ParticipantLike = Participant,
|
|
31
|
+
TTransport extends TransportLike = Transport,
|
|
32
|
+
TStream = Stream,
|
|
33
|
+
> {
|
|
34
|
+
participants: TParticipant[];
|
|
5
35
|
dispActiveNames: string[];
|
|
6
|
-
remoteScreenStream:
|
|
7
|
-
consumerTransports:
|
|
36
|
+
remoteScreenStream: TStream[];
|
|
37
|
+
consumerTransports: TTransport[];
|
|
8
38
|
screenId?: string;
|
|
9
39
|
islevel: string;
|
|
10
40
|
|
|
11
41
|
// mediasfu functions
|
|
12
|
-
getUpdatedAllParams: () => ResumePauseStreamsParameters
|
|
42
|
+
getUpdatedAllParams: () => ResumePauseStreamsParameters<TParticipant, TTransport, TStream>;
|
|
13
43
|
[key: string]: any;
|
|
14
44
|
}
|
|
15
45
|
|
|
16
|
-
export interface ResumePauseStreamsOptions
|
|
17
|
-
|
|
46
|
+
export interface ResumePauseStreamsOptions<
|
|
47
|
+
TParticipant extends ParticipantLike = Participant,
|
|
48
|
+
TTransport extends TransportLike = Transport,
|
|
49
|
+
TStream = Stream,
|
|
50
|
+
> {
|
|
51
|
+
parameters: ResumePauseStreamsParameters<TParticipant, TTransport, TStream>;
|
|
18
52
|
}
|
|
19
53
|
|
|
20
54
|
// Export the type definition for the function
|
|
21
|
-
export type ResumePauseStreamsType =
|
|
55
|
+
export type ResumePauseStreamsType = <
|
|
56
|
+
TParticipant extends ParticipantLike = Participant,
|
|
57
|
+
TTransport extends TransportLike = Transport,
|
|
58
|
+
TStream = Stream,
|
|
59
|
+
>(options: ResumePauseStreamsOptions<TParticipant, TTransport, TStream>) => Promise<void>;
|
|
22
60
|
|
|
23
61
|
/**
|
|
24
62
|
* Resumes or pauses streams based on the provided parameters.
|
|
@@ -49,9 +87,13 @@ export type ResumePauseStreamsType = (options: ResumePauseStreamsOptions) => Pro
|
|
|
49
87
|
* ```
|
|
50
88
|
*/
|
|
51
89
|
|
|
52
|
-
export async function resumePauseStreams
|
|
90
|
+
export async function resumePauseStreams<
|
|
91
|
+
TParticipant extends ParticipantLike = Participant,
|
|
92
|
+
TTransport extends TransportLike = Transport,
|
|
93
|
+
TStream = Stream,
|
|
94
|
+
>({
|
|
53
95
|
parameters,
|
|
54
|
-
}: ResumePauseStreamsOptions): Promise<void> {
|
|
96
|
+
}: ResumePauseStreamsOptions<TParticipant, TTransport, TStream>): Promise<void> {
|
|
55
97
|
try {
|
|
56
98
|
// Destructure parameters
|
|
57
99
|
const { participants, dispActiveNames, consumerTransports, screenId, islevel } = parameters;
|
|
@@ -85,6 +127,7 @@ export async function resumePauseStreams({
|
|
|
85
127
|
// Get consumer transports with producerId in allVideoIDs
|
|
86
128
|
const consumerTransportsToResume = consumerTransports.filter(
|
|
87
129
|
(transport) =>
|
|
130
|
+
transport.producerId &&
|
|
88
131
|
allVideoIDs.includes(transport.producerId) &&
|
|
89
132
|
transport.consumer.kind !== "audio"
|
|
90
133
|
);
|
|
@@ -120,6 +120,14 @@ export const joinConsumeRoom = async ({
|
|
|
120
120
|
|
|
121
121
|
// Receive all piped transports
|
|
122
122
|
await receiveAllPipedTransports({ nsock: remote_sock, parameters });
|
|
123
|
+
|
|
124
|
+
setTimeout(async () => {
|
|
125
|
+
try {
|
|
126
|
+
await receiveAllPipedTransports({ nsock: remote_sock, parameters });
|
|
127
|
+
} catch (error) {
|
|
128
|
+
console.log('[joinConsumeRoom] Retry receiveAllPipedTransports failed:', error);
|
|
129
|
+
}
|
|
130
|
+
}, 30000);
|
|
123
131
|
}
|
|
124
132
|
|
|
125
133
|
return data;
|