概述
外设相关的接口都挂在SMeeting 上,你不需要自己去处理 iOS 与 macOS 的平台差异:
设备能力不依赖会议状态:登录后(甚至进入会议前)就可以枚举设备、监听插拔,方便你做「入会前设备检测」页面。
枚举设备
DeviceInfo 包含 deviceId、name、kind、isDefault。
平台差异需要留意:
- macOS:音频列表里会出现一个指向系统默认输入 / 输出的虚拟设备
- iOS 音频输入:返回的是可用的音频输入路由(蓝牙、有线耳机、内置麦克风等)
- iOS 音频输出:系统不提供枚举能力,
kind: .audioOutput在 iOS 上返回空数组 —— iOS 的输出控制是一个「是否外放」的布尔开关,见下文
切换摄像头
SMeetingError.deviceError。如果用户是在未开摄像头时先在下拉框里选好设备,建议把选择先记在业务状态里,等 requestOpenCamera(deviceId:) 时一起传进去。
切换麦克风
- 已开麦:切换正在采集的输入设备
- 未开麦(iOS):预选音频输入路由,例如入会前先选好蓝牙耳机
- 未开麦(macOS):录音链路尚未启动,调用直接返回,不做任何事也不报错
音频输出
输出侧两个平台的能力模型不同,因此接口也拆开了。macOS:选择输出设备
iOS:外放开关
AVRoutePickerView 选择,应用无法直接指定。
与「扬声器静音」的区别
这两件事是正交的,不要混用:监听设备插拔
设备变化通过SMeetingDelegate 上报:
- 回调里只刷新设备列表状态,UI 层按新列表自动更新选择器
- 当前选中的
deviceId如果已经从列表里消失,回退到默认设备
正在使用的设备被拔出时,SDK 会自行降级到可用设备,你不需要重建整套容错逻辑,但仍应刷新 UI,避免界面上还显示着一个已经不存在的设备。