DeviceManager / AudioRouteSession。
设备枚举
DeviceKind:audioInput / audioOutput / videoInput。
做设备下拉框用
cachedDevices() —— 它不会每次渲染都去问系统。
配合热插拔事件刷新即可。DeviceInfo 字段:deviceId、name、kind、isDefault。
热插拔监听
SMeetingDelegate 里的 onDeviceAdd / onDeviceRemove
(第二个参数直接是 DeviceInfo):
切换摄像头
这两个是原地换设备、不重建轨道,所以不需要重新发布 —— 比直接用 SRTC 的
changeDeviceId 少一层心智负担。音频输出路由
两种设置,优先级不同
状态查询
判断”免提”按钮的选中态用
effectiveAudioRouteTarget,不是 defaultAudioRoute ——
后者在有临时设置时不代表当前状态。为什么可切换目标只有两个
扬声器快捷开关
speaker 与 earpiece 之间切,用于”免提”按钮。
系统通话状态
来电会抢走音频通道。监听onCallStateChange:
AudioCallState:unknown / dialing / incoming / connected / disconnected。
incoming/connected:提示”通话中已静音”disconnected:恢复