@tencentcloud/roomkit-web-vue3
Version:
<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,
77 lines (76 loc) • 3.18 kB
JavaScript
import { TUIMediaDeviceType, TUIMediaDeviceState } from "@tencentcloud/tuiroom-engine-js";
import useDeviceManager from "../../../hooks/useDeviceManager.mjs";
import logger from "../../../utils/common/logger/index.mjs";
import useAudioDeviceManagerState, { isMicrophoneListInitiated, isSpeakerListInitiated } from "./audioDeviceManagerState.mjs";
const {
microphoneList,
currentMicrophoneDevice,
speakerList,
currentSpeakerDevice
} = useAudioDeviceManagerState();
const deviceManager = useDeviceManager();
async function initMediaDeviceList() {
var _a, _b, _c, _d;
if (!deviceManager.instance) {
return;
}
microphoneList.value = await ((_a = deviceManager.instance) == null ? void 0 : _a.getDevicesList({
type: TUIMediaDeviceType.kMediaDeviceTypeAudioInput
})) || [];
isMicrophoneListInitiated.value = true;
speakerList.value = await ((_b = deviceManager.instance) == null ? void 0 : _b.getDevicesList({
type: TUIMediaDeviceType.kMediaDeviceTypeAudioOutput
})) || [];
isSpeakerListInitiated.value = true;
currentMicrophoneDevice.value = (_c = deviceManager.instance) == null ? void 0 : _c.getCurrentDevice({
type: TUIMediaDeviceType.kMediaDeviceTypeAudioInput
});
currentSpeakerDevice.value = (_d = deviceManager.instance) == null ? void 0 : _d.getCurrentDevice({
type: TUIMediaDeviceType.kMediaDeviceTypeAudioOutput
});
}
async function onDeviceChanged(eventInfo) {
var _a, _b, _c, _d;
const { deviceId, type, state } = eventInfo;
if (!deviceManager.instance || type === TUIMediaDeviceType.kMediaDeviceTypeVideoCamera) {
return;
}
const deviceTypeTextObj = {
[TUIMediaDeviceType.kMediaDeviceTypeAudioInput]: "mic",
[TUIMediaDeviceType.kMediaDeviceTypeAudioOutput]: "speaker",
[TUIMediaDeviceType.kMediaDeviceTypeVideoCamera]: "camera",
[TUIMediaDeviceType.kMediaDeviceTypeUnknown]: "unknown"
};
const stateTextObj = {
[TUIMediaDeviceState.kMediaDeviceStateAdd]: "add",
[TUIMediaDeviceState.kMediaDeviceStateRemove]: "remove",
[TUIMediaDeviceState.kMediaDeviceStateActive]: "active"
};
logger.log(
`onDeviceChanged: deviceId: ${deviceId}, type: ${deviceTypeTextObj[type]}, state: ${stateTextObj[state]}`
);
if (type === TUIMediaDeviceType.kMediaDeviceTypeAudioInput) {
microphoneList.value = await ((_a = deviceManager.instance) == null ? void 0 : _a.getDevicesList({
type
})) || [];
if (state === TUIMediaDeviceState.kMediaDeviceStateActive) {
currentMicrophoneDevice.value = ((_b = deviceManager.instance) == null ? void 0 : _b.getCurrentDevice({
type: TUIMediaDeviceType.kMediaDeviceTypeAudioInput
})) || null;
}
}
if (type === TUIMediaDeviceType.kMediaDeviceTypeAudioOutput) {
speakerList.value = await ((_c = deviceManager.instance) == null ? void 0 : _c.getDevicesList({
type
})) || [];
if (state === TUIMediaDeviceState.kMediaDeviceStateActive) {
currentSpeakerDevice.value = ((_d = deviceManager.instance) == null ? void 0 : _d.getCurrentDevice({
type: TUIMediaDeviceType.kMediaDeviceTypeAudioOutput
})) || null;
}
}
}
export {
initMediaDeviceList,
onDeviceChanged
};