UNPKG

mediasfu-reactnative

Version:
140 lines 7.05 kB
/** * Controls the media host by disabling specific media types (audio, video, screenshare, chat) * and updating the corresponding states. * * @param {ControlMediaHostOptions} options - The options for controlling the media host. * @param {string} options.type - The type of media to control. Can be "audio", "video", "screenshare", "chat", or "all". * @param {Object} options.parameters - The parameters required for controlling the media host. * @param {Function} options.parameters.updateAdminRestrictSetting - Function to update the admin restrict setting. * @param {MediaStream} options.parameters.localStream - The local media stream. * @param {Function} options.parameters.updateLocalStream - Function to update the local media stream. * @param {Function} options.parameters.updateAudioAlreadyOn - Function to update the audio state. * @param {MediaStream} options.parameters.localStreamScreen - The local screen share stream. * @param {Function} options.parameters.updateLocalStreamScreen - Function to update the local screen share stream. * @param {MediaStream} options.parameters.localStreamVideo - The local video stream. * @param {Function} options.parameters.updateLocalStreamVideo - Function to update the local video stream. * @param {Function} options.parameters.updateScreenAlreadyOn - Function to update the screen share state. * @param {Function} options.parameters.updateVideoAlreadyOn - Function to update the video state. * @param {Function} options.parameters.updateChatAlreadyOn - Function to update the chat state. * @param {Function} options.parameters.onScreenChanges - Function to handle screen changes. * @param {Function} options.parameters.stopShareScreen - Function to stop screen sharing. * @param {Function} options.parameters.disconnectSendTransportVideo - Function to disconnect the video transport. * @param {Function} options.parameters.disconnectSendTransportAudio - Function to disconnect the audio transport. * @param {Function} options.parameters.disconnectSendTransportScreen - Function to disconnect the screen share transport. * * @returns {Promise<void>} A promise that resolves when the media control actions are completed. * * @example * ```typescript * await controlMediaHost({ * type: "video", * parameters: { * updateAdminRestrictSetting: setAdminRestrict, * localStream: userMediaStream, * updateLocalStream: setUserMediaStream, * updateAudioAlreadyOn: setAudioState, * localStreamScreen: screenMediaStream, * updateLocalStreamScreen: setScreenMediaStream, * localStreamVideo: videoMediaStream, * updateLocalStreamVideo: setVideoMediaStream, * updateScreenAlreadyOn: setScreenState, * updateVideoAlreadyOn: setVideoState, * updateChatAlreadyOn: setChatState, * onScreenChanges: handleScreenChanges, * stopShareScreen: stopScreenSharing, * disconnectSendTransportVideo: disconnectVideoTransport, * disconnectSendTransportAudio: disconnectAudioTransport, * disconnectSendTransportScreen: disconnectScreenTransport, * } * }); * ``` */ export const controlMediaHost = async ({ type, parameters }) => { const { updateAdminRestrictSetting, updateLocalStream, updateAudioAlreadyOn, updateLocalStreamScreen, updateLocalStreamVideo, updateScreenAlreadyOn, updateVideoAlreadyOn, updateChatAlreadyOn, onScreenChanges, stopShareScreen, disconnectSendTransportVideo, disconnectSendTransportAudio, disconnectSendTransportScreen, } = parameters; const { localStream, localStreamScreen, localStreamVideo } = parameters.getUpdatedAllParams(); try { updateAdminRestrictSetting(true); if (type === 'audio') { if (localStream) { localStream.getAudioTracks()[0].enabled = false; updateLocalStream(localStream); } await disconnectSendTransportAudio({ parameters }); updateAudioAlreadyOn(false); } else if (type === 'video') { try { localStream.getVideoTracks()[0].enabled = false; updateLocalStream(localStream); await disconnectSendTransportVideo({ parameters }); await onScreenChanges({ changed: true, parameters }); updateVideoAlreadyOn(false); } catch ( /* empty */_a) { /* empty */ } try { localStreamVideo.getVideoTracks()[0].enabled = false; updateLocalStreamVideo(localStreamVideo); await disconnectSendTransportVideo({ parameters }); await onScreenChanges({ changed: true, parameters }); updateVideoAlreadyOn(false); } catch (_b) { onScreenChanges({ changed: true, parameters }); } } else if (type === 'screenshare') { localStreamScreen.getVideoTracks()[0].enabled = false; updateLocalStreamScreen(localStreamScreen); await disconnectSendTransportScreen({ parameters }); await stopShareScreen({ parameters }); updateScreenAlreadyOn(false); } else if (type === 'chat') { updateChatAlreadyOn(false); } else if (type === 'all') { try { if (localStream) { localStream.getAudioTracks()[0].enabled = false; updateLocalStream(localStream); } await disconnectSendTransportAudio({ parameters }); updateAudioAlreadyOn(false); } catch ( /* empty */_c) { /* empty */ } try { localStreamScreen.getVideoTracks()[0].enabled = false; updateLocalStreamScreen(localStreamScreen); await disconnectSendTransportScreen({ parameters }); await stopShareScreen({ parameters }); updateScreenAlreadyOn(false); } catch ( /* empty */_d) { /* empty */ } try { localStream.getVideoTracks()[0].enabled = false; updateLocalStream(localStream); await disconnectSendTransportVideo({ parameters }); await onScreenChanges({ changed: true, parameters }); updateVideoAlreadyOn(false); } catch ( /* empty */_e) { /* empty */ } try { localStreamVideo.getVideoTracks()[0].enabled = false; updateLocalStreamVideo(localStreamVideo); await disconnectSendTransportVideo({ parameters }); await onScreenChanges({ changed: true, parameters }); updateVideoAlreadyOn(false); } catch (_f) { onScreenChanges({ changed: true, parameters }); } } } catch (error) { console.error('Error in controlMediaHost:', error); } }; //# sourceMappingURL=controlMediaHost.js.map