AudioRouteSession.shared 管音频输出走哪儿。输入设备的枚举与选择是另一套
(设备管理)。
两种设置,优先级不同
这是这套 API 最需要先理解的一点:
回读状态:
为什么 AudioRoute 有五态、AudioRouteTarget 只有两态
因为外接设备由系统接管。SDK 能上报”你现在走的是蓝牙”,但不能主动切到某个具体外设 ——
那是系统的职责,抢不过也不该抢。
收到 onAudioRouteChange 时不要在回调里再切回去。用户插上耳机 → 系统切到 wired → 你的回调里又 setAudioRoute(speaker) →
系统再切回 wired……这样会打起来,表现是声音在两个设备间反复跳。正确做法是:更新 UI 指示,把选择权交给用户。
监听变化
isObserving 可以回读监听状态,refreshCurrentRoute() 主动刷一次当前路由。
delegates 是强引用,而 AudioRouteSession.shared 是全局单例。注册后不摘除就是永久泄漏 —— 页面早已销毁,回调还在往一个不该存在的对象上打。
必须在 aboutToDisappear 里 remove。
系统通话状态
AudioCallState 有五个值:unknown / dialing / incoming / connected / disconnected。
来电会抢走音频通道,此时 RTC 的音频会被系统中断。业务侧通常需要:
incoming / connected:暂停或提示”通话中已静音”
disconnected:恢复
会议场景的典型配置
判断按钮的选中态用 effectiveRouteTarget(当前生效的目标),
而不是 defaultAudioRoute(持久设置)—— 后者在有临时设置时不代表当前状态。
相关阅读