设备管理 API
摄像头、麦克风、扬声器设备枚举和切换。
API 参考
getCameraList()
获取可用摄像头列表。
必须在 init() 之后调用,否则返回 TResultCode.NOT_INITIALIZED。
返回值: Promise<TResult<TDeviceInfo[]>>
getCurrentDeviceId()
获取当前正在使用的设备 ID(同步)。
与响应式 state.currentCameraId$ / currentMicId$ / currentSpeakerId$ 等价, 用于在不订阅 Signal 的场景下做一次性读取。 for one-shot reads when subscribing to a Signal isn't needed.
| 参数 | 类型 | 说明 |
|---|---|---|
| type | DeviceType | 设备类型(DeviceType.Camera |
返回值: string | undefined
示例:
const camId = classroom.getCurrentDeviceId(DeviceType.Camera);
console.log('当前摄像头:', camId);getMicrophoneList()
获取可用麦克风列表。
必须在 init() 之后调用。
返回值: Promise<TResult<TDeviceInfo[]>>
getSpeakerList()
获取可用扬声器列表。
必须在 init() 之后调用。
返回值: Promise<TResult<TDeviceInfo[]>>
refreshDeviceLists()
刷新所有设备列表(同时枚举摄像头/麦克风/扬声器)。
使用场景:用户插拔了 USB 摄像头/耳机后主动调用,或在系统级设备变更事件后刷新。 SDK 内部已订阅 navigator.mediaDevices.devicechange,正常情况下会自动刷新; 此方法用于业务侧需要立即拿到最新列表时强制触发。
刷新结果通过 state.cameraList$ / micList$ / speakerList$ 同步推送。
返回值: Promise<TResult<void>>
示例:
// 用户点击"刷新设备"按钮 / User clicks "Refresh devices"
await classroom.refreshDeviceLists();
const cams = classroom.state.cameraList$.get();switchDevice()
切换正在使用的设备(支持推流中热切换,不会中断音视频流)。
| 参数 | 类型 | 说明 |
|---|---|---|
| type | DeviceType | 设备类型(DeviceType.Camera |
| deviceId | string | 目标设备 ID |
返回值: Promise<TResult<void>>
示例:
// 切换摄像头 / Switch camera
const cams = await classroom.getCameraList();
if (cams.ok) await classroom.switchDevice(DeviceType.Camera, cams.data[1].deviceId);
// 切换麦克风 / Switch microphone
const mics = await classroom.getMicrophoneList();
if (mics.ok) await classroom.switchDevice(DeviceType.Microphone, mics.data[0].deviceId);