概述
Swift SDK 把设备管理抽成了DeviceManager.shared,这意味着设备枚举、热插拔监听和音频会话中断处理,不需要业务层自己从零拼平台差异。
常见需求包括:
- 枚举摄像头、麦克风、扬声器
- 用户手动切换设备
- 监听设备插拔
- iOS 来电 / Siri 中断后的恢复
枚举设备
枚举摄像头
macOS:枚举麦克风和扬声器
iOS:枚举音频路由
iOS 下这里更准确的说法是“音频路由”,因为蓝牙耳机、有线耳机、扬声器切换本质上是 AVAudioSession 路由切换,不是桌面系统那种独立输入 / 输出设备模型。
通用查询
如果你想统一写一层设备选择 UI,也可以用:切换摄像头
对已创建的LocalCameraTrack,可以直接切换指定设备:
LocalCameraTrack。
切换麦克风或音频路由
macOS
iOS
- macOS:切换输入设备
- iOS:切换音频输入 / 输出路由,比如蓝牙耳机、听筒、扬声器
deviceId 会是 "speaker"。
macOS 切换扬声器
macOS 的输出设备切换走DeviceManager:
LocalMicTrack 上,而是绑定在底层音频模块的输出链路上。
监听设备变化
通过DeviceManagerDelegate 注册监听:
- 回调里只刷新本地设备列表状态
- UI 层根据新的设备列表自动更新下拉框或选择器
SDK 已做的自动恢复
Swift SDK 在内部已经处理了几类常见恢复逻辑:- 正在使用的摄像头被拔出时,尝试切到可用摄像头
- macOS 正在使用的麦克风被拔出时,尝试切回默认输入
- iOS 音频会话被来电等中断后,按条件恢复
- iOS 前后台切换时,摄像头采集可在回前台后恢复
- 把错误信息展示给用户
- 在设备列表变化后刷新 UI
- 不要缓存过期的
deviceId
业务层推荐写法
可以参考rtc-swift Demo 里的思路:
- 页面初始化时调用
refreshDeviceList() - 保存当前选中的
deviceId - 设备变化后,如果原来的
deviceId不存在了,自动回退到默认设备