bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/audio/service.js

115 lines
3.9 KiB
JavaScript
Raw Normal View History

2017-04-19 23:01:28 +08:00
import Auth from '/imports/ui/services/auth';
2017-10-13 03:22:10 +08:00
import AudioManager from '/imports/ui/services/audio-manager';
import logger from '/imports/startup/client/logger';
import Storage from '../../services/storage/session';
import { useReactiveVar } from '@apollo/client';
2017-03-28 22:02:23 +08:00
const MUTED_KEY = 'muted';
2024-01-29 20:49:40 +08:00
const recoverMicState = (toggleVoice) => {
const muted = Storage.getItem(MUTED_KEY);
if ((muted === undefined) || (muted === null)) {
return;
}
logger.debug({
logCode: 'audio_recover_mic_state',
}, `Audio recover previous mic state: muted = ${muted}`);
toggleVoice(Auth.userID, muted);
};
2024-01-29 20:49:40 +08:00
const audioEventHandler = (toggleVoice) => (event) => {
if (!event) {
return;
}
switch (event.name) {
case 'started':
2024-01-29 20:49:40 +08:00
if (!event.isListenOnly) recoverMicState(toggleVoice);
break;
default:
break;
}
};
2024-06-14 22:35:53 +08:00
const init = (messages, intl, toggleVoice, speechLocale, voiceConf, username) => {
AudioManager.setAudioMessages(messages, intl);
if (AudioManager.initialized) return Promise.resolve(false);
const meetingId = Auth.meetingID;
2017-04-19 23:01:28 +08:00
const userId = Auth.userID;
2018-03-06 04:00:52 +08:00
const { sessionToken } = Auth;
2024-06-14 21:30:48 +08:00
const voiceBridge = voiceConf;
2017-04-19 23:01:28 +08:00
// FIX ME
2017-07-18 22:59:05 +08:00
const microphoneLockEnforced = false;
2017-04-19 22:59:57 +08:00
2017-04-19 23:01:28 +08:00
const userData = {
meetingId,
2017-04-19 23:01:28 +08:00
userId,
2017-09-29 21:38:10 +08:00
sessionToken,
2017-04-19 23:01:28 +08:00
username,
voiceBridge,
microphoneLockEnforced,
2024-04-17 06:39:29 +08:00
speechLocale,
2017-04-19 23:01:28 +08:00
};
2024-01-29 20:49:40 +08:00
return AudioManager.init(userData, audioEventHandler(toggleVoice));
2017-04-19 23:01:28 +08:00
};
2017-04-19 22:59:57 +08:00
const useIsUsingAudio = () => {
const isConnected = useReactiveVar(AudioManager._isConnected.value);
const isConnecting = useReactiveVar(AudioManager._isConnecting.value);
const isHangingUp = useReactiveVar(AudioManager._isHangingUp.value);
const isEchoTest = useReactiveVar(AudioManager._isEchoTest.value);
return Boolean(isConnected || isConnecting || isHangingUp || isEchoTest);
};
export default {
2017-04-19 22:59:57 +08:00
init,
exitAudio: () => AudioManager.exitAudio(),
forceExitAudio: () => AudioManager.forceExitAudio(),
transferCall: () => AudioManager.transferCall(),
joinListenOnly: () => AudioManager.joinListenOnly(),
joinMicrophone: () => AudioManager.joinMicrophone(),
joinEchoTest: () => AudioManager.joinEchoTest(),
changeInputDevice: (inputDeviceId) => AudioManager.changeInputDevice(inputDeviceId),
changeInputStream: (newInputStream) => { AudioManager.inputStream = newInputStream; },
liveChangeInputDevice: (inputDeviceId) => AudioManager.liveChangeInputDevice(inputDeviceId),
changeOutputDevice: (
outputDeviceId,
isLive,
) => AudioManager.changeOutputDevice(outputDeviceId, isLive),
isConnectedToBreakout: () => {
const transferStatus = AudioManager.getBreakoutAudioTransferStatus();
if (transferStatus.status
=== AudioManager.BREAKOUT_AUDIO_TRANSFER_STATES.CONNECTED) return true;
return false;
},
isConnected: () => {
const transferStatus = AudioManager.getBreakoutAudioTransferStatus();
if (!!transferStatus.breakoutMeetingId
&& transferStatus.breakoutMeetingId !== Auth.meetingID) return false;
return AudioManager.isConnected;
},
isUsingAudio: () => AudioManager.isUsingAudio(),
isConnecting: () => AudioManager.isConnecting,
isListenOnly: () => AudioManager.isListenOnly,
2017-09-29 21:38:10 +08:00
isEchoTest: () => AudioManager.isEchoTest,
isMuted: () => AudioManager.isMuted,
autoplayBlocked: () => AudioManager.autoplayBlocked,
handleAllowAutoplay: () => AudioManager.handleAllowAutoplay(),
playAlertSound: (url) => AudioManager.playAlertSound(url),
updateAudioConstraints:
(constraints) => AudioManager.updateAudioConstraints(constraints),
recoverMicState,
isReconnecting: () => AudioManager.isReconnecting,
setBreakoutAudioTransferStatus: (status) => AudioManager
.setBreakoutAudioTransferStatus(status),
getBreakoutAudioTransferStatus: () => AudioManager
.getBreakoutAudioTransferStatus(),
getStats: () => AudioManager.getStats(),
notify: (message, error, icon) => { AudioManager.notify(message, error, icon); },
useIsUsingAudio,
2017-09-29 21:42:08 +08:00
};