mediasfu-shared 1.0.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/LICENSE +21 -0
- package/README.md +228 -0
- package/dist/index.cjs +7707 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +7285 -0
- package/dist/index.js +7690 -0
- package/dist/index.js.map +1 -0
- package/package.json +78 -0
- package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +68 -0
- package/src/consumers/addVideosGrid.ts +18 -0
- package/src/consumers/autoAdjust.ts +100 -0
- package/src/consumers/calculateRowsAndColumns.ts +51 -0
- package/src/consumers/changeVids.ts +753 -0
- package/src/consumers/checkGrid.ts +100 -0
- package/src/consumers/checkPermission.ts +89 -0
- package/src/consumers/checkScreenShare.ts +114 -0
- package/src/consumers/closeAndResize.ts +401 -0
- package/src/consumers/compareActiveNames.ts +122 -0
- package/src/consumers/compareScreenStates.ts +117 -0
- package/src/consumers/connectIps.ts +175 -0
- package/src/consumers/connectLocalIps.ts +103 -0
- package/src/consumers/connectRecvTransport.ts +158 -0
- package/src/consumers/connectSendTransport.ts +150 -0
- package/src/consumers/connectSendTransportAudio.ts +161 -0
- package/src/consumers/connectSendTransportScreen.ts +169 -0
- package/src/consumers/connectSendTransportVideo.ts +149 -0
- package/src/consumers/consumerResume.ts +25 -0
- package/src/consumers/controlMedia.ts +118 -0
- package/src/consumers/createSendTransport.ts +312 -0
- package/src/consumers/disconnectSendTransportAudio.ts +170 -0
- package/src/consumers/disconnectSendTransportScreen.ts +130 -0
- package/src/consumers/disconnectSendTransportVideo.ts +161 -0
- package/src/consumers/dispStreams.ts +694 -0
- package/src/consumers/generatePageContent.ts +118 -0
- package/src/consumers/getEstimate.ts +124 -0
- package/src/consumers/getPipedProducersAlt.ts +96 -0
- package/src/consumers/getProducersPiped.ts +89 -0
- package/src/consumers/getVideos.ts +107 -0
- package/src/consumers/mixStreams.ts +97 -0
- package/src/consumers/onScreenChanges.ts +106 -0
- package/src/consumers/prepopulateUserMedia.ts +18 -0
- package/src/consumers/processConsumerTransports.ts +157 -0
- package/src/consumers/processConsumerTransportsAudio.ts +121 -0
- package/src/consumers/rePort.ts +123 -0
- package/src/consumers/reUpdateInter.ts +289 -0
- package/src/consumers/readjust.ts +170 -0
- package/src/consumers/receiveAllPipedTransports.ts +77 -0
- package/src/consumers/receiveRoomMessages.ts +55 -0
- package/src/consumers/reorderStreams.ts +246 -0
- package/src/consumers/requestScreenShare.ts +103 -0
- package/src/consumers/resumePauseAudioStreams.ts +174 -0
- package/src/consumers/resumePauseStreams.ts +110 -0
- package/src/consumers/resumeSendTransportAudio.ts +143 -0
- package/src/consumers/signalNewConsumerTransport.ts +179 -0
- package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +130 -0
- package/src/consumers/socketReceiveMethods/newPipeProducer.ts +138 -0
- package/src/consumers/socketReceiveMethods/producerClosed.ts +102 -0
- package/src/consumers/startShareScreen.ts +124 -0
- package/src/consumers/stopShareScreen.ts +241 -0
- package/src/consumers/streamSuccessAudio.ts +297 -0
- package/src/consumers/streamSuccessAudioSwitch.ts +315 -0
- package/src/consumers/streamSuccessScreen.ts +255 -0
- package/src/consumers/streamSuccessVideo.ts +373 -0
- package/src/consumers/switchUserAudio.ts +140 -0
- package/src/consumers/switchUserVideo.ts +201 -0
- package/src/consumers/switchUserVideoAlt.ts +331 -0
- package/src/consumers/trigger.ts +250 -0
- package/src/consumers/updateMiniCardsGrid.ts +150 -0
- package/src/consumers/updateParticipantAudioDecibels.ts +56 -0
- package/src/index.ts +119 -0
- package/src/methods/background/launchBackground.ts +16 -0
- package/src/methods/breakoutRooms/breakoutRoomUpdated.ts +161 -0
- package/src/methods/breakoutRooms/handleStartBreakout.ts +96 -0
- package/src/methods/breakoutRooms/handleStopBreakout.ts +72 -0
- package/src/methods/breakoutRooms/index.ts +4 -0
- package/src/methods/breakoutRooms/launchBreakoutRooms.ts +31 -0
- package/src/methods/coHost/launchCoHost.ts +28 -0
- package/src/methods/coHostMethods/index.ts +2 -0
- package/src/methods/coHostMethods/modifyCoHostSettings.ts +94 -0
- package/src/methods/displaySettings/index.ts +1 -0
- package/src/methods/displaySettings/launchDisplaySettings.ts +31 -0
- package/src/methods/displaySettings/modifyDisplaySettings.ts +242 -0
- package/src/methods/exit/confirmExit.ts +60 -0
- package/src/methods/exit/index.ts +2 -0
- package/src/methods/exit/launchConfirmExit.ts +29 -0
- package/src/methods/index.ts +5 -0
- package/src/methods/mediaSettings/launchMediaSettings.ts +61 -0
- package/src/methods/menu/launchMenuModal.ts +28 -0
- package/src/methods/message/index.ts +1 -0
- package/src/methods/message/launchMessages.ts +27 -0
- package/src/methods/message/sendMessage.ts +175 -0
- package/src/methods/participants/index.ts +3 -0
- package/src/methods/participants/launchParticipants.ts +25 -0
- package/src/methods/participants/messageParticipants.ts +78 -0
- package/src/methods/participants/muteParticipants.ts +79 -0
- package/src/methods/participants/removeParticipants.ts +97 -0
- package/src/methods/polls/handleCreatePoll.ts +66 -0
- package/src/methods/polls/handleEndPoll.ts +64 -0
- package/src/methods/polls/handleVotePoll.ts +76 -0
- package/src/methods/polls/index.ts +3 -0
- package/src/methods/polls/launchPoll.ts +25 -0
- package/src/methods/prejoin/handleCreateRoom.ts +441 -0
- package/src/methods/prejoin/handleJoinRoom.ts +153 -0
- package/src/methods/prejoin/index.ts +14 -0
- package/src/methods/recording/checkPauseState.ts +57 -0
- package/src/methods/recording/checkResumeState.ts +42 -0
- package/src/methods/recording/confirmRecording.ts +241 -0
- package/src/methods/recording/launchRecording.ts +114 -0
- package/src/methods/recording/recordPauseTimer.ts +52 -0
- package/src/methods/recording/recordResumeTimer.ts +92 -0
- package/src/methods/recording/recordStartTimer.ts +106 -0
- package/src/methods/recording/recordUpdateTimer.ts +49 -0
- package/src/methods/recording/startRecording.ts +268 -0
- package/src/methods/recording/stopRecording.ts +124 -0
- package/src/methods/recording/updateRecording.ts +245 -0
- package/src/methods/requests/index.ts +1 -0
- package/src/methods/requests/launchRequests.ts +25 -0
- package/src/methods/requests/respondToRequests.ts +108 -0
- package/src/methods/settings/index.ts +2 -0
- package/src/methods/settings/launchSettings.ts +25 -0
- package/src/methods/settings/modifySettings.ts +99 -0
- package/src/methods/stream/clickVideo.ts +337 -0
- package/src/methods/stream/index.ts +3 -0
- package/src/methods/stream/switchAudio.ts +73 -0
- package/src/methods/stream/switchVideo.ts +148 -0
- package/src/methods/stream/switchVideoAlt.ts +152 -0
- package/src/methods/utils/checkLimitsAndMakeRequest.ts +103 -0
- package/src/methods/utils/validateAlphanumeric.ts +41 -0
- package/src/methods/waiting/index.ts +1 -0
- package/src/methods/waiting/launchWaiting.ts +26 -0
- package/src/methods/waiting/respondToWaiting.ts +82 -0
- package/src/methods/welcome/handleWelcomeRequest.ts +189 -0
- package/src/methods/welcome/index.ts +5 -0
- package/src/methods/whiteboard/handleStartWhiteboard.ts +65 -0
- package/src/methods/whiteboard/handleStopWhiteboard.ts +48 -0
- package/src/methods/whiteboard/index.ts +4 -0
- package/src/methods/whiteboard/launchConfigureWhiteboard.ts +29 -0
- package/src/producers/producerEmits/joinConRoom.ts +153 -0
- package/src/sockets/SocketManager.ts +232 -0
- package/src/types/shared-base-types.ts +752 -0
- package/src/types/types.ts +84 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import type { ProducerOptions } from 'mediasoup-client/lib/types';
|
|
2
|
+
import { ConnectSendTransportAudioType, ConnectSendTransportVideoType, ConnectSendTransportScreenType, ConnectSendTransportAudioParameters, ConnectSendTransportVideoParameters, ConnectSendTransportScreenParameters } from '../types/types';
|
|
3
|
+
export interface ConnectSendTransportParameters extends ConnectSendTransportAudioParameters, ConnectSendTransportVideoParameters, ConnectSendTransportScreenParameters {
|
|
4
|
+
audioParams: ProducerOptions
|
|
5
|
+
videoParams: ProducerOptions;
|
|
6
|
+
localStreamScreen: MediaStream | null;
|
|
7
|
+
canvasStream: MediaStream | null;
|
|
8
|
+
whiteboardStarted: boolean;
|
|
9
|
+
whiteboardEnded: boolean;
|
|
10
|
+
shared: boolean;
|
|
11
|
+
islevel: string;
|
|
12
|
+
|
|
13
|
+
//mediasfu functions
|
|
14
|
+
connectSendTransportAudio: ConnectSendTransportAudioType;
|
|
15
|
+
connectSendTransportVideo: ConnectSendTransportVideoType;
|
|
16
|
+
connectSendTransportScreen: ConnectSendTransportScreenType;
|
|
17
|
+
|
|
18
|
+
getUpdatedAllParams: () => ConnectSendTransportParameters;
|
|
19
|
+
[key: string]: any;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ConnectSendTransportOptions {
|
|
23
|
+
option: 'audio' | 'video' | 'screen' | 'all';
|
|
24
|
+
targetOption?: 'local' | 'remote' | 'all';
|
|
25
|
+
parameters: ConnectSendTransportParameters;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Export the type definition for the function
|
|
29
|
+
export type ConnectSendTransportType = (options: ConnectSendTransportOptions) => Promise<void>;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Connects the send transport based on the specified option.
|
|
33
|
+
*
|
|
34
|
+
* @param {ConnectSendTransportOptions} options - The options for connecting the send transport.
|
|
35
|
+
* @param {string} options.option - The type of transport to connect ("audio", "video", "screen", or "all").
|
|
36
|
+
* @param {boolean} options.targetOption - The target option to connect ("local", "remote", or "all").
|
|
37
|
+
* @param {ConnectSendTransportParameters} options.parameters - The parameters required for connecting the transport.
|
|
38
|
+
* @param {ProducerOptions} options.parameters.audioParams - The audio parameters.
|
|
39
|
+
* @param {ProducerOptions} options.parameters.videoParams - The video parameters.
|
|
40
|
+
* @param {MediaStream} options.parameters.localStreamScreen - The local screen stream.
|
|
41
|
+
* @param {MediaStream} options.parameters.canvasStream - The canvas stream.
|
|
42
|
+
* @param {boolean} options.parameters.whiteboardStarted - Indicates if the whiteboard has started.
|
|
43
|
+
* @param {boolean} options.parameters.whiteboardEnded - Indicates if the whiteboard has ended.
|
|
44
|
+
* @param {boolean} options.parameters.shared - Indicates if the screen is shared.
|
|
45
|
+
* @param {string} options.parameters.islevel - The level of the screen sharing.
|
|
46
|
+
* @param {Function} options.parameters.connectSendTransportAudio - Function to connect the audio send transport.
|
|
47
|
+
* @param {Function} options.parameters.connectSendTransportVideo - Function to connect the video send transport.
|
|
48
|
+
* @param {Function} options.parameters.connectSendTransportScreen - Function to connect the screen send transport.
|
|
49
|
+
*
|
|
50
|
+
* @returns {Promise<void>} A promise that resolves when the transport is connected.
|
|
51
|
+
*
|
|
52
|
+
* @throws Will throw an error if the connection fails.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* const options = {
|
|
56
|
+
* option: 'audio',
|
|
57
|
+
* targetOption: 'local',
|
|
58
|
+
* parameters: {
|
|
59
|
+
* audioParams: audioProducerOptions,
|
|
60
|
+
* videoParams: videoProducerOptions,
|
|
61
|
+
* localStreamScreen: localStream,
|
|
62
|
+
* canvasStream: canvasStream,
|
|
63
|
+
* whiteboardStarted: false,
|
|
64
|
+
* whiteboardEnded: false,
|
|
65
|
+
* shared: false,
|
|
66
|
+
* islevel: '1',
|
|
67
|
+
* connectSendTransportAudio: connectAudioFunction,
|
|
68
|
+
* connectSendTransportVideo: connectVideoFunction,
|
|
69
|
+
* connectSendTransportScreen: connectScreenFunction,
|
|
70
|
+
* },
|
|
71
|
+
* };
|
|
72
|
+
*
|
|
73
|
+
* connectSendTransport(options)
|
|
74
|
+
* .then(() => {
|
|
75
|
+
* console.log('Transport connected successfully');
|
|
76
|
+
* })
|
|
77
|
+
* .catch((error) => {
|
|
78
|
+
* console.error('Error connecting transport:', error);
|
|
79
|
+
* });
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
export const connectSendTransport = async ({ option, targetOption = "all", parameters }: ConnectSendTransportOptions): Promise<void> => {
|
|
83
|
+
try {
|
|
84
|
+
let {
|
|
85
|
+
audioParams,
|
|
86
|
+
videoParams,
|
|
87
|
+
localStreamScreen,
|
|
88
|
+
canvasStream,
|
|
89
|
+
whiteboardStarted,
|
|
90
|
+
whiteboardEnded,
|
|
91
|
+
shared,
|
|
92
|
+
islevel,
|
|
93
|
+
|
|
94
|
+
//media functions
|
|
95
|
+
connectSendTransportAudio,
|
|
96
|
+
connectSendTransportVideo,
|
|
97
|
+
connectSendTransportScreen,
|
|
98
|
+
} = parameters;
|
|
99
|
+
|
|
100
|
+
// Connect send transport based on the specified option
|
|
101
|
+
if (option === "audio") {
|
|
102
|
+
await connectSendTransportAudio({
|
|
103
|
+
targetOption,
|
|
104
|
+
audioParams,
|
|
105
|
+
parameters,
|
|
106
|
+
});
|
|
107
|
+
} else if (option === "video") {
|
|
108
|
+
await connectSendTransportVideo({
|
|
109
|
+
targetOption,
|
|
110
|
+
videoParams,
|
|
111
|
+
parameters,
|
|
112
|
+
});
|
|
113
|
+
} else if (option === "screen") {
|
|
114
|
+
if (
|
|
115
|
+
whiteboardStarted &&
|
|
116
|
+
!whiteboardEnded &&
|
|
117
|
+
canvasStream &&
|
|
118
|
+
islevel === "2" &&
|
|
119
|
+
!shared
|
|
120
|
+
) {
|
|
121
|
+
await connectSendTransportScreen({
|
|
122
|
+
targetOption,
|
|
123
|
+
stream: canvasStream,
|
|
124
|
+
parameters,
|
|
125
|
+
});
|
|
126
|
+
} else {
|
|
127
|
+
await connectSendTransportScreen({
|
|
128
|
+
targetOption,
|
|
129
|
+
stream: localStreamScreen!,
|
|
130
|
+
parameters,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
} else {
|
|
134
|
+
// Connect both audio and video send transports
|
|
135
|
+
await connectSendTransportAudio({
|
|
136
|
+
targetOption,
|
|
137
|
+
audioParams,
|
|
138
|
+
parameters,
|
|
139
|
+
});
|
|
140
|
+
await connectSendTransportVideo({
|
|
141
|
+
targetOption,
|
|
142
|
+
videoParams,
|
|
143
|
+
parameters,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.log("connectSendTransport error", error);
|
|
148
|
+
// throw error;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import type { Transport, Producer, ProducerOptions } from 'mediasoup-client/lib/types';
|
|
2
|
+
|
|
3
|
+
export interface ConnectSendTransportAudioParameters {
|
|
4
|
+
audioProducer: Producer | null;
|
|
5
|
+
producerTransport: Transport | null;
|
|
6
|
+
localAudioProducer?: Producer | null;
|
|
7
|
+
localProducerTransport?: Transport | null;
|
|
8
|
+
updateAudioProducer: (producer: Producer | null) => void;
|
|
9
|
+
updateProducerTransport: (transport: Transport | null) => void;
|
|
10
|
+
updateLocalAudioProducer?: (localProducer: Producer | null) => void;
|
|
11
|
+
updateLocalProducerTransport?: (localTransport: Transport | null) => void;
|
|
12
|
+
updateAudioLevel: (level: number) => void;
|
|
13
|
+
|
|
14
|
+
// Function to get all parameters
|
|
15
|
+
getUpdatedAllParams: () => ConnectSendTransportAudioParameters;
|
|
16
|
+
[key: string]: any; // Extendable for additional parameters
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ConnectSendTransportAudioOptions {
|
|
21
|
+
audioParams: ProducerOptions;
|
|
22
|
+
parameters: ConnectSendTransportAudioParameters;
|
|
23
|
+
targetOption?: 'all' | 'local' | 'remote';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Export the type definition for the function
|
|
27
|
+
export type ConnectSendTransportAudioType = (options: ConnectSendTransportAudioOptions) => Promise<void>;
|
|
28
|
+
|
|
29
|
+
const connectLocalSendTransportAudio = async ({
|
|
30
|
+
parameters,
|
|
31
|
+
audioParams
|
|
32
|
+
}: ConnectSendTransportAudioOptions): Promise<void> => {
|
|
33
|
+
try {
|
|
34
|
+
let {
|
|
35
|
+
localAudioProducer,
|
|
36
|
+
localProducerTransport,
|
|
37
|
+
updateLocalAudioProducer,
|
|
38
|
+
updateLocalProducerTransport,
|
|
39
|
+
} = parameters;
|
|
40
|
+
|
|
41
|
+
if (localProducerTransport) {
|
|
42
|
+
localAudioProducer = await localProducerTransport.produce(audioParams);
|
|
43
|
+
|
|
44
|
+
updateLocalAudioProducer?.(localAudioProducer);
|
|
45
|
+
updateLocalProducerTransport?.(localProducerTransport);
|
|
46
|
+
}
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error("Error connecting local audio transport:", error);
|
|
49
|
+
throw error; // Re-throw to let the parent handle it
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const updateMicLevel = async (audioProducer: Producer, updateAudioLevel: (level: number) => void) => {
|
|
54
|
+
try {
|
|
55
|
+
setInterval(() => {
|
|
56
|
+
const sender = audioProducer!.rtpSender;
|
|
57
|
+
|
|
58
|
+
sender?.getStats().then((stats) => {
|
|
59
|
+
stats.forEach((report) => {
|
|
60
|
+
|
|
61
|
+
if (report.type === "media-source" && report.kind === "audio" && report.audioLevel !== undefined) {
|
|
62
|
+
const newLevel = 127.5 + (report.audioLevel * 127.5);
|
|
63
|
+
updateAudioLevel(newLevel);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}, 1000);
|
|
69
|
+
} catch {
|
|
70
|
+
// Handle error
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Connects the send transport for audio by producing audio data and updating the audio producer and producer transport objects.
|
|
77
|
+
*
|
|
78
|
+
* If the primary connection fails, it attempts to connect using the local transport via a separate function.
|
|
79
|
+
*
|
|
80
|
+
* @param {ConnectSendTransportAudioOptions} options - The options for connecting the send transport.
|
|
81
|
+
* @param {ProducerOptions} options.audioParams - The audio parameters.
|
|
82
|
+
* @param {ConnectSendTransportAudioParameters} options.parameters - The parameters required for connecting the transport.
|
|
83
|
+
* @param {Producer | null} options.parameters.audioProducer - The audio producer object.
|
|
84
|
+
* @param {Transport | null} options.parameters.producerTransport - The producer transport object.
|
|
85
|
+
* @param {Producer | null} [options.parameters.localAudioProducer] - The local audio producer object.
|
|
86
|
+
* @param {Transport | null} [options.parameters.localProducerTransport] - The local producer transport object.
|
|
87
|
+
* @param {(producer: Producer | null) => void} options.parameters.updateAudioProducer - The function to update the audio producer object.
|
|
88
|
+
* @param {(transport: Transport | null) => void} options.parameters.updateProducerTransport - The function to update the producer transport object.
|
|
89
|
+
* @param {(localProducer: Producer | null) => void} [options.parameters.updateLocalAudioProducer] - The function to update the local audio producer object.
|
|
90
|
+
* @param {(localTransport: Transport | null) => void} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport object.
|
|
91
|
+
* @param {(level: number) => void} [options.parameters.updateAudioLevel] - The function to update the audio level.
|
|
92
|
+
* @returns {Promise<void>} A promise that resolves when the connection is established.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* const options = {
|
|
96
|
+
* audioParams: { codec: "opus", maxBitrate: 128000 },
|
|
97
|
+
* parameters: {
|
|
98
|
+
* audioProducer: null,
|
|
99
|
+
* producerTransport: transport,
|
|
100
|
+
* localAudioProducer: null,
|
|
101
|
+
* localProducerTransport: localTransport,
|
|
102
|
+
* updateAudioProducer: (producer) => console.log("Updated producer:", producer),
|
|
103
|
+
* updateProducerTransport: (transport) => console.log("Updated transport:", transport),
|
|
104
|
+
* updateLocalAudioProducer: (localProducer) => console.log("Updated local producer:", localProducer),
|
|
105
|
+
* updateLocalProducerTransport: (localTransport) => console.log("Updated local transport:", localTransport),
|
|
106
|
+
* updateAudioLevel: (level) => console.log("Updated audio level:", level),
|
|
107
|
+
* },
|
|
108
|
+
* };
|
|
109
|
+
*
|
|
110
|
+
* connectSendTransportAudio(options)
|
|
111
|
+
* .then(() => console.log("Audio transport connected successfully"))
|
|
112
|
+
* .catch((error) => console.error("Error connecting audio transport:", error));
|
|
113
|
+
*/
|
|
114
|
+
|
|
115
|
+
export const connectSendTransportAudio: ConnectSendTransportAudioType = async ({
|
|
116
|
+
parameters,
|
|
117
|
+
audioParams,
|
|
118
|
+
targetOption = "all",
|
|
119
|
+
}: ConnectSendTransportAudioOptions): Promise<void> => {
|
|
120
|
+
try {
|
|
121
|
+
let {
|
|
122
|
+
audioProducer,
|
|
123
|
+
producerTransport,
|
|
124
|
+
updateAudioProducer,
|
|
125
|
+
updateProducerTransport,
|
|
126
|
+
} = parameters;
|
|
127
|
+
|
|
128
|
+
// Attempt to connect the primary send transport
|
|
129
|
+
if (targetOption === "all" || targetOption === "remote") {
|
|
130
|
+
audioProducer = await producerTransport!.produce(audioParams);
|
|
131
|
+
|
|
132
|
+
// Update the audio level
|
|
133
|
+
updateMicLevel(audioProducer, parameters.updateAudioLevel);
|
|
134
|
+
|
|
135
|
+
// Update state with the new producer and transport
|
|
136
|
+
updateAudioProducer(audioProducer);
|
|
137
|
+
updateProducerTransport(producerTransport);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Attempt to connect the local send transport
|
|
141
|
+
if (targetOption === "all" || targetOption === "local") {
|
|
142
|
+
try {
|
|
143
|
+
await connectLocalSendTransportAudio({ parameters, audioParams });
|
|
144
|
+
|
|
145
|
+
// Update the audio level
|
|
146
|
+
if (targetOption === "local" && parameters.updateAudioLevel) {
|
|
147
|
+
if (!parameters.localAudioProducer) {
|
|
148
|
+
parameters = parameters.getUpdatedAllParams();
|
|
149
|
+
}
|
|
150
|
+
updateMicLevel(parameters.localAudioProducer!, parameters.updateAudioLevel);
|
|
151
|
+
}
|
|
152
|
+
} catch (localError) {
|
|
153
|
+
console.error("Local audio transport connection failed:", localError);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
} catch (primaryError) {
|
|
158
|
+
console.error("audio transport connection failed:", primaryError);
|
|
159
|
+
throw new Error("Failed to connect to audio transport.");
|
|
160
|
+
}
|
|
161
|
+
};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { Transport, Producer, Device, ProducerOptions } from 'mediasoup-client/lib/types';
|
|
2
|
+
|
|
3
|
+
export interface ConnectSendTransportScreenParameters {
|
|
4
|
+
screenProducer: Producer | null;
|
|
5
|
+
localScreenProducer?: Producer | null;
|
|
6
|
+
device: Device | null;
|
|
7
|
+
screenParams: ProducerOptions;
|
|
8
|
+
producerTransport: Transport | null;
|
|
9
|
+
localProducerTransport?: Transport | null;
|
|
10
|
+
params: ProducerOptions;
|
|
11
|
+
updateScreenProducer: (producer: Producer | null) => void;
|
|
12
|
+
updateLocalScreenProducer?: (localProducer: Producer | null) => void;
|
|
13
|
+
updateProducerTransport: (transport: Transport | null) => void;
|
|
14
|
+
updateLocalProducerTransport?: (localTransport: Transport | null) => void;
|
|
15
|
+
|
|
16
|
+
getUpdatedAllParams: () => ConnectSendTransportScreenParameters;
|
|
17
|
+
[key: string]: any; // Extendable for additional parameters
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ConnectSendTransportScreenOptions {
|
|
21
|
+
stream: MediaStream;
|
|
22
|
+
parameters: ConnectSendTransportScreenParameters;
|
|
23
|
+
targetOption?: "all" | "local" | "remote";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Export the type definition for the function
|
|
27
|
+
export type ConnectSendTransportScreenType = (options: ConnectSendTransportScreenOptions) => Promise<void>;
|
|
28
|
+
|
|
29
|
+
const connectLocalSendTransportScreen = async ({
|
|
30
|
+
stream,
|
|
31
|
+
parameters,
|
|
32
|
+
}: ConnectSendTransportScreenOptions): Promise<void> => {
|
|
33
|
+
try {
|
|
34
|
+
let {
|
|
35
|
+
localScreenProducer,
|
|
36
|
+
localProducerTransport,
|
|
37
|
+
updateLocalScreenProducer,
|
|
38
|
+
updateLocalProducerTransport,
|
|
39
|
+
device,
|
|
40
|
+
} = parameters;
|
|
41
|
+
|
|
42
|
+
// Find VP9 codec for local screen share
|
|
43
|
+
const codec = device?.rtpCapabilities?.codecs?.find(
|
|
44
|
+
(codec: { mimeType: string }) =>
|
|
45
|
+
codec.mimeType.toLowerCase() === "video/vp9"
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
// Produce local screen share data
|
|
49
|
+
if (localProducerTransport) {
|
|
50
|
+
localScreenProducer = await localProducerTransport.produce({
|
|
51
|
+
track: stream.getVideoTracks()[0],
|
|
52
|
+
codec,
|
|
53
|
+
appData: { mediaTag: "screen-video" },
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Update the local producer and transport objects
|
|
57
|
+
updateLocalScreenProducer?.(localScreenProducer);
|
|
58
|
+
updateLocalProducerTransport?.(localProducerTransport);
|
|
59
|
+
}
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error("Error connecting local screen transport:", error);
|
|
62
|
+
throw error; // Re-throw to propagate the error
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Sets up and connects a screen sharing transport for sending video streams.
|
|
68
|
+
*
|
|
69
|
+
* This function supports both a primary and a local screen producer, delegating local handling to a separate function.
|
|
70
|
+
*
|
|
71
|
+
* @param {ConnectSendTransportScreenOptions} options - The configuration options for setting up the screen transport.
|
|
72
|
+
* @param {"all" | "local" | "remote"} [options.targetOption] - The target option for connecting the transport.
|
|
73
|
+
* @param {MediaStream} options.stream - The screen stream to be shared.
|
|
74
|
+
* @param {ConnectSendTransportScreenParameters} options.parameters - The parameters required for setting up the screen transport.
|
|
75
|
+
* @param {Producer | null} options.parameters.screenProducer - The screen producer object to be updated.
|
|
76
|
+
* @param {Device | null} options.parameters.device - The device object for media capabilities.
|
|
77
|
+
* @param {ProducerOptions} options.parameters.screenParams - The parameters for the screen producer.
|
|
78
|
+
* @param {Transport | null} options.parameters.producerTransport - The producer transport object.
|
|
79
|
+
* @param {ProducerOptions} options.parameters.params - The parameters for the producer.
|
|
80
|
+
* @param {Function} options.parameters.updateScreenProducer - The function to update the screen producer object.
|
|
81
|
+
* @param {Function} options.parameters.updateProducerTransport - The function to update the producer transport object.
|
|
82
|
+
* @param {Function} [options.parameters.updateLocalScreenProducer] - The function to update the local screen producer object.
|
|
83
|
+
* @param {Function} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport object.
|
|
84
|
+
* @param {Function} options.parameters.getUpdatedAllParams - The function to get updated parameters.
|
|
85
|
+
* @param {Object} [options.parameters.*] - Additional parameters for future use.
|
|
86
|
+
*
|
|
87
|
+
* @returns {Promise<void>} - A promise that resolves once the screen transport is successfully connected and set up.
|
|
88
|
+
*
|
|
89
|
+
* @throws Will throw an error if there is an issue with the connection or setup process.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* await connectSendTransportScreen({
|
|
94
|
+
* stream: screenStream,
|
|
95
|
+
* targetOption: "all",
|
|
96
|
+
* parameters: {
|
|
97
|
+
* screenProducer: null,
|
|
98
|
+
* localScreenProducer: null,
|
|
99
|
+
* device: mediaDevice,
|
|
100
|
+
* screenParams: { encodings: [{ maxBitrate: 1500000 }] },
|
|
101
|
+
* producerTransport: sendTransport,
|
|
102
|
+
* localProducerTransport: localSendTransport,
|
|
103
|
+
* params: { track: screenStream.getVideoTracks()[0] },
|
|
104
|
+
* updateScreenProducer: setScreenProducer,
|
|
105
|
+
* updateLocalScreenProducer: setLocalScreenProducer,
|
|
106
|
+
* updateProducerTransport: setProducerTransport,
|
|
107
|
+
* updateLocalProducerTransport: setLocalProducerTransport,
|
|
108
|
+
* getUpdatedAllParams: getParams,
|
|
109
|
+
* },
|
|
110
|
+
* });
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
export const connectSendTransportScreen: ConnectSendTransportScreenType = async ({
|
|
115
|
+
stream,
|
|
116
|
+
parameters,
|
|
117
|
+
targetOption = "all",
|
|
118
|
+
}: ConnectSendTransportScreenOptions): Promise<void> => {
|
|
119
|
+
try {
|
|
120
|
+
let {
|
|
121
|
+
screenProducer,
|
|
122
|
+
device,
|
|
123
|
+
screenParams,
|
|
124
|
+
producerTransport,
|
|
125
|
+
params,
|
|
126
|
+
updateScreenProducer,
|
|
127
|
+
updateProducerTransport,
|
|
128
|
+
} = parameters;
|
|
129
|
+
|
|
130
|
+
// Fetch updated device information
|
|
131
|
+
device = parameters.getUpdatedAllParams().device;
|
|
132
|
+
|
|
133
|
+
// Retrieve screen share parameters
|
|
134
|
+
params = screenParams;
|
|
135
|
+
|
|
136
|
+
// Find VP9 codec for screen share
|
|
137
|
+
const codec = device?.rtpCapabilities?.codecs?.find(
|
|
138
|
+
(codec: { mimeType: string }) =>
|
|
139
|
+
codec.mimeType.toLowerCase() === "video/vp9"
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
// Produce screen share data using the producer transport
|
|
143
|
+
if (targetOption === "remote" || targetOption === "all") {
|
|
144
|
+
screenProducer = await producerTransport!.produce({
|
|
145
|
+
track: stream.getVideoTracks()[0],
|
|
146
|
+
...params,
|
|
147
|
+
codec,
|
|
148
|
+
appData: { mediaTag: "screen-video" },
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// Update the screen producer and producer transport objects
|
|
152
|
+
updateScreenProducer(screenProducer);
|
|
153
|
+
updateProducerTransport(producerTransport);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Produce screen share data using the local producer transport
|
|
157
|
+
if (targetOption === "local" || targetOption === "all") {
|
|
158
|
+
try {
|
|
159
|
+
await connectLocalSendTransportScreen({ stream, parameters });
|
|
160
|
+
} catch (localError) {
|
|
161
|
+
console.log("Error connecting local screen transport:", localError);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
} catch (error) {
|
|
166
|
+
console.log("connectSendTransportScreen error", error);
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { Device, Producer, ProducerOptions, Transport } from 'mediasoup-client/lib/types';
|
|
2
|
+
|
|
3
|
+
export interface ConnectSendTransportVideoParameters {
|
|
4
|
+
videoProducer: Producer | null;
|
|
5
|
+
localVideoProducer?: Producer | null;
|
|
6
|
+
device: Device | null;
|
|
7
|
+
producerTransport: Transport | null;
|
|
8
|
+
localProducerTransport?: Transport | null;
|
|
9
|
+
islevel: string;
|
|
10
|
+
updateMainWindow: boolean;
|
|
11
|
+
updateVideoProducer: (producer: Producer | null) => void;
|
|
12
|
+
updateLocalVideoProducer?: (localProducer: Producer | null) => void;
|
|
13
|
+
updateProducerTransport: (transport: Transport | null) => void;
|
|
14
|
+
updateLocalProducerTransport?: (localTransport: Transport | null) => void;
|
|
15
|
+
updateUpdateMainWindow: (state: boolean) => void;
|
|
16
|
+
[key: string]: any; // Extendable for additional parameters
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface ConnectSendTransportVideoOptions {
|
|
20
|
+
videoParams: ProducerOptions;
|
|
21
|
+
parameters: ConnectSendTransportVideoParameters;
|
|
22
|
+
targetOption?: "all" | "local" | "remote";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Export the type definition for the function
|
|
26
|
+
export type ConnectSendTransportVideoType = (options: ConnectSendTransportVideoOptions) => Promise<void>;
|
|
27
|
+
|
|
28
|
+
const connectLocalSendTransportVideo = async ({
|
|
29
|
+
videoParams,
|
|
30
|
+
parameters,
|
|
31
|
+
}: ConnectSendTransportVideoOptions): Promise<void> => {
|
|
32
|
+
try {
|
|
33
|
+
let {
|
|
34
|
+
localVideoProducer,
|
|
35
|
+
localProducerTransport,
|
|
36
|
+
updateLocalVideoProducer,
|
|
37
|
+
updateLocalProducerTransport,
|
|
38
|
+
} = parameters;
|
|
39
|
+
|
|
40
|
+
// Produce local video data if transport exists
|
|
41
|
+
if (localProducerTransport) {
|
|
42
|
+
localVideoProducer = await localProducerTransport.produce(videoParams);
|
|
43
|
+
|
|
44
|
+
// Update local producer and transport
|
|
45
|
+
updateLocalVideoProducer?.(localVideoProducer);
|
|
46
|
+
updateLocalProducerTransport?.(localProducerTransport);
|
|
47
|
+
}
|
|
48
|
+
} catch (error) {
|
|
49
|
+
console.error("Error connecting local video transport:", error);
|
|
50
|
+
throw error; // Re-throw to propagate the error
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Connects the send transport for video by producing video data and updates the relevant states.
|
|
56
|
+
*
|
|
57
|
+
* This function supports both a primary and a local video producer, delegating local handling to a separate function.
|
|
58
|
+
*
|
|
59
|
+
* @param {ConnectSendTransportVideoOptions} options - The options for connecting the send transport for video.
|
|
60
|
+
* @param {ProducerOptions} options.videoParams - The parameters for the video producer.
|
|
61
|
+
* @param {"all" | "local" | "remote"} [options.targetOption] - The target option for the video transport connection.
|
|
62
|
+
* @param {ConnectSendTransportVideoParameters} options.parameters - The parameters for the video transport connection.
|
|
63
|
+
* @param {Producer | null} options.parameters.videoProducer - The primary video producer.
|
|
64
|
+
* @param {Producer | null} [options.parameters.localVideoProducer] - The local video producer.
|
|
65
|
+
* @param {Device | null} options.parameters.device - The device information.
|
|
66
|
+
* @param {Transport | null} options.parameters.producerTransport - The primary producer transport.
|
|
67
|
+
* @param {Transport | null} [options.parameters.localProducerTransport] - The local producer transport.
|
|
68
|
+
* @param {string} options.parameters.islevel - The connection level for the video transport.
|
|
69
|
+
* @param {boolean} options.parameters.updateMainWindow - The flag to update the main window state.
|
|
70
|
+
* @param {(producer: Producer | null) => void} options.parameters.updateVideoProducer - The function to update the video producer state.
|
|
71
|
+
* @param {(localProducer: Producer | null) => void} [options.parameters.updateLocalVideoProducer] - The function to update the local video producer state.
|
|
72
|
+
* @param {(transport: Transport | null) => void} options.parameters.updateProducerTransport - The function to update the producer transport state.
|
|
73
|
+
* @param {(localTransport: Transport | null) => void} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport state.
|
|
74
|
+
* @param {(state: boolean) => void} options.parameters.updateUpdateMainWindow - The function to update the main window state.
|
|
75
|
+
* @param {any} [options.parameters] - Additional parameters for future use.
|
|
76
|
+
* @returns {Promise<void>} A promise that resolves when the send transport for video is connected.
|
|
77
|
+
*
|
|
78
|
+
* @throws Will throw an error if the connection fails.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* const options = {
|
|
82
|
+
* videoParams: {
|
|
83
|
+
* // video producer options (e.g., codec, bitrate)
|
|
84
|
+
* },
|
|
85
|
+
* targetOption: "all",
|
|
86
|
+
* parameters: {
|
|
87
|
+
* videoProducer: null,
|
|
88
|
+
* localVideoProducer: null,
|
|
89
|
+
* producerTransport: transport,
|
|
90
|
+
* localProducerTransport: localTransport,
|
|
91
|
+
* islevel: '2',
|
|
92
|
+
* updateMainWindow: false,
|
|
93
|
+
* updateVideoProducer: (producer) => console.log("Updated producer"),
|
|
94
|
+
* updateLocalVideoProducer: (localProducer) => console.log("Updated local producer"),
|
|
95
|
+
* updateProducerTransport: (transport) => console.log("Updated transport"),
|
|
96
|
+
* updateLocalProducerTransport: (localTransport) => console.log("Updated local transport"),
|
|
97
|
+
* updateUpdateMainWindow: (state) => console.log("Updated main window:", state),
|
|
98
|
+
* },
|
|
99
|
+
* };
|
|
100
|
+
*
|
|
101
|
+
* connectSendTransportVideo(options)
|
|
102
|
+
* .then(() => console.log("Video transport connected successfully"))
|
|
103
|
+
* .catch((error) => console.error("Error connecting video transport:", error));
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
export const connectSendTransportVideo: ConnectSendTransportVideoType = async ({
|
|
107
|
+
videoParams,
|
|
108
|
+
parameters,
|
|
109
|
+
targetOption = "all",
|
|
110
|
+
}: ConnectSendTransportVideoOptions): Promise<void> => {
|
|
111
|
+
try {
|
|
112
|
+
let {
|
|
113
|
+
videoProducer,
|
|
114
|
+
producerTransport,
|
|
115
|
+
islevel,
|
|
116
|
+
updateMainWindow,
|
|
117
|
+
updateVideoProducer,
|
|
118
|
+
updateProducerTransport,
|
|
119
|
+
updateUpdateMainWindow,
|
|
120
|
+
} = parameters;
|
|
121
|
+
|
|
122
|
+
// Produce video data using the primary transport
|
|
123
|
+
if (targetOption === "all" || targetOption === "remote"){
|
|
124
|
+
videoProducer = await producerTransport!.produce(videoParams);
|
|
125
|
+
|
|
126
|
+
// Update main window state based on the video connection level
|
|
127
|
+
if (islevel === "2") {
|
|
128
|
+
updateMainWindow = true;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Update video producer, transport, and UI state
|
|
132
|
+
updateVideoProducer(videoProducer);
|
|
133
|
+
updateProducerTransport(producerTransport);
|
|
134
|
+
updateUpdateMainWindow(updateMainWindow);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Handle local video transport regardless of primary success or
|
|
138
|
+
if (targetOption === "all" || targetOption === "local") {
|
|
139
|
+
try {
|
|
140
|
+
await connectLocalSendTransportVideo({ videoParams, parameters });
|
|
141
|
+
} catch (localError) {
|
|
142
|
+
console.log("Error connecting local video transport:", localError);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
} catch (error) {
|
|
146
|
+
console.log("connectSendTransportVideo error", error);
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Stub export for consumerResume
|
|
2
|
+
// This is a React component in the original and not needed for the shared package
|
|
3
|
+
|
|
4
|
+
import { Socket } from 'socket.io-client';
|
|
5
|
+
|
|
6
|
+
export interface ConsumerResumeParameters {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ConsumerResumeOptions {
|
|
11
|
+
track: MediaStreamTrack;
|
|
12
|
+
kind: string;
|
|
13
|
+
remoteProducerId: string;
|
|
14
|
+
params: any;
|
|
15
|
+
parameters: ConsumerResumeParameters;
|
|
16
|
+
nsock: Socket;
|
|
17
|
+
consumer?: any; // mediasoup Consumer
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type ConsumerResumeType = (options: ConsumerResumeOptions) => Promise<void>;
|
|
21
|
+
|
|
22
|
+
export const consumerResume: ConsumerResumeType = async () => {
|
|
23
|
+
// Stub implementation - actual logic handled in framework-specific packages
|
|
24
|
+
console.warn('consumerResume called on shared package - should be implemented in framework package');
|
|
25
|
+
};
|