UNPKG

mediasfu-reactnative

Version:
181 lines 9.42 kB
import { MediaStream } from '../methods/utils/webrtc/webrtc'; /** * Handles the successful streaming of audio by setting up the necessary transports and updating the relevant states. * * @param {StreamSuccessAudioOptions} options - The options for streaming success audio. * @param {MediaStream} options.stream - The media stream containing the audio track. * @param {Object} options.parameters - The parameters required for setting up the audio stream. * @param {Socket} options.parameters.socket - The socket connection for communication. * @param {Array<Participant>} options.parameters.participants - The list of participants. * @param {MediaStream | null} options.parameters.localStream - The local media stream. * @param {boolean} options.parameters.transportCreated - Flag indicating if the transport is created. * @param {boolean} options.parameters.transportCreatedAudio - Flag indicating if the audio transport is created. * @param {boolean} options.parameters.audioAlreadyOn - Flag indicating if the audio is already on. * @param {boolean} options.parameters.micAction - Flag indicating the microphone action. * @param {ProducerOptions} options.parameters.audioParams - The audio parameters. * @param {MediaStream | null} options.parameters.localStreamAudio - The local audio stream. * @param {string} options.parameters.defAudioID - The default audio device ID. * @param {string} options.parameters.userDefaultAudioInputDevice - The user default audio input device. * @param {ProducerOptions} options.parameters.params - Additional parameters. * @param {ProducerOptions} options.parameters.audioParamse - Additional audio parameters. * @param {ProducerOptions} options.parameters.aParams - Additional parameters for audio. * @param {string} options.parameters.hostLabel - The label of the host. * @param {string} options.parameters.islevel - The level of the user. * @param {string} options.parameters.member - The member name. * @param {boolean} options.parameters.updateMainWindow - Flag indicating if the main window should be updated. * @param {boolean} options.parameters.lock_screen - Flag indicating if the screen is locked. * @param {boolean} options.parameters.shared - Flag indicating if the screen is shared. * @param {boolean} options.parameters.videoAlreadyOn - Flag indicating if the video is already on. * @param {Function} options.parameters.showAlert - Function to show alert messages. * @param {Function} options.parameters.updateParticipants - Function to update participants. * @param {Function} options.parameters.updateTransportCreated - Function to update transport created flag. * @param {Function} options.parameters.updateTransportCreatedAudio - Function to update audio transport created flag. * @param {Function} options.parameters.updateAudioAlreadyOn - Function to update audio already on flag. * @param {Function} options.parameters.updateMicAction - Function to update microphone action flag. * @param {Function} options.parameters.updateAudioParams - Function to update audio parameters. * @param {Function} options.parameters.updateLocalStream - Function to update local stream. * @param {Function} options.parameters.updateLocalStreamAudio - Function to update local audio stream. * @param {Function} options.parameters.updateDefAudioID - Function to update default audio device ID. * @param {Function} options.parameters.updateUserDefaultAudioInputDevice - Function to update user default audio input device. * @param {Function} options.parameters.updateUpdateMainWindow - Function to update main window flag. * @param {Function} options.parameters.createSendTransport - Function to create send transport. * @param {Function} options.parameters.connectSendTransportAudio - Function to connect send transport audio. * @param {Function} options.parameters.resumeSendTransportAudio - Function to resume send transport audio. * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media. * * @returns {Promise<void>} A promise that resolves when the audio streaming setup is complete. * * @example * const options = { * stream: localStream, // MediaStream object containing the audio track * parameters: { * socket: socketInstance, * participants: participantList, * localStream: null, * transportCreated: false, * transportCreatedAudio: false, * audioAlreadyOn: false, * micAction: false, * audioParams: {}, * localStreamAudio: null, * defAudioID: "", * userDefaultAudioInputDevice: "", * params: {}, * audioParamse: {}, * aParams: {}, * hostLabel: "Host", * islevel: "1", * member: "user1", * updateMainWindow: true, * lock_screen: false, * shared: false, * videoAlreadyOn: false, * showAlert: alertFunction, * updateParticipants: updateParticipantsFunction, * updateTransportCreated: updateTransportCreatedFunction, * updateTransportCreatedAudio: updateTransportCreatedAudioFunction, * updateAudioAlreadyOn: updateAudioAlreadyOnFunction, * updateMicAction: updateMicActionFunction, * updateAudioParams: updateAudioParamsFunction, * updateLocalStream: updateLocalStreamFunction, * updateLocalStreamAudio: updateLocalStreamAudioFunction, * updateDefAudioID: updateDefAudioIDFunction, * updateUserDefaultAudioInputDevice: updateUserDefaultAudioInputDeviceFunction, * updateUpdateMainWindow: updateUpdateMainWindowFunction, * createSendTransport: createSendTransportFunction, * connectSendTransportAudio: connectSendTransportAudioFunction, * resumeSendTransportAudio: resumeSendTransportAudioFunction, * prepopulateUserMedia: prepopulateUserMediaFunction, * }, * }; * * streamSuccessAudio(options) * .then(() => { * console.log('Audio streaming setup successfully'); * }) * .catch(error => { * console.error('Error setting up audio streaming:', error); * }); */ export const streamSuccessAudio = async ({ stream, parameters, }) => { let { socket, participants, localStream, transportCreated, transportCreatedAudio, audioAlreadyOn, micAction, audioParams, localStreamAudio, defAudioID, userDefaultAudioInputDevice, params, audioParamse, aParams, hostLabel, islevel, member, updateMainWindow, lock_screen, shared, videoAlreadyOn, showAlert, // update functions updateParticipants, updateTransportCreated, updateTransportCreatedAudio, updateAudioAlreadyOn, updateMicAction, updateAudioParams, updateLocalStream, updateLocalStreamAudio, updateDefAudioID, updateUserDefaultAudioInputDevice, updateUpdateMainWindow, // mediasfu functions createSendTransport, connectSendTransportAudio, resumeSendTransportAudio, prepopulateUserMedia, } = parameters; localStreamAudio = stream; updateLocalStreamAudio(localStreamAudio); if (localStream == null) { localStream = new MediaStream([localStreamAudio.getAudioTracks()[0]]); } else { localStream.addTrack(localStreamAudio.getAudioTracks()[0]); updateLocalStream(localStream); } const audioTracked = localStream.getAudioTracks()[0]; defAudioID = audioTracked.getSettings().deviceId || ''; userDefaultAudioInputDevice = defAudioID; updateDefAudioID(defAudioID); updateUserDefaultAudioInputDevice(userDefaultAudioInputDevice); try { params = aParams; audioParamse = Object.assign({}, params); audioParams = Object.assign({ track: localStream.getAudioTracks()[0] }, audioParamse); updateAudioParams(audioParams); if (!transportCreated) { try { await createSendTransport({ parameters: Object.assign(Object.assign({}, parameters), { audioParams }), option: 'audio', }); } catch (error) { console.error('Error creating transport:', error); } } else if (!transportCreatedAudio) { await connectSendTransportAudio({ audioParams, parameters, }); } else { await resumeSendTransportAudio({ parameters }); } } catch (error) { if (showAlert) { showAlert({ message: error.message, type: 'danger', duration: 3000, }); } } audioAlreadyOn = true; updateAudioAlreadyOn(audioAlreadyOn); if (micAction === true) { micAction = false; updateMicAction(micAction); } participants.forEach((participant) => { if (participant.socketId === socket.id && participant.name === member) { participant.muted = false; } }); updateParticipants(participants); transportCreated = true; transportCreatedAudio = true; updateTransportCreated(transportCreated); updateTransportCreatedAudio(transportCreatedAudio); if (!videoAlreadyOn && islevel === '2') { if (!lock_screen && !shared) { updateMainWindow = true; updateUpdateMainWindow(updateMainWindow); await prepopulateUserMedia({ name: hostLabel, parameters }); updateMainWindow = false; updateUpdateMainWindow(updateMainWindow); } } }; //# sourceMappingURL=streamSuccessAudio.js.map