Skip to main content
AudioRouteSession.shared音频输出走哪儿。输入设备的枚举与选择是另一套 (设备管理)。

两种设置,优先级不同

这是这套 API 最需要先理解的一点:
回读状态:

为什么 AudioRoute 有五态、AudioRouteTarget 只有两态

因为外接设备由系统接管。SDK 能上报”你现在走的是蓝牙”,但不能主动切到某个具体外设 —— 那是系统的职责,抢不过也不该抢。
收到 onAudioRouteChange 时不要在回调里再切回去。用户插上耳机 → 系统切到 wired → 你的回调里又 setAudioRoute(speaker) → 系统再切回 wired……这样会打起来,表现是声音在两个设备间反复跳。正确做法是:更新 UI 指示,把选择权交给用户。

监听变化

isObserving 可以回读监听状态,refreshCurrentRoute() 主动刷一次当前路由。
delegates 是强引用,而 AudioRouteSession.shared 是全局单例。注册后不摘除就是永久泄漏 —— 页面早已销毁,回调还在往一个不该存在的对象上打。 必须在 aboutToDisappearremove

系统通话状态

AudioCallState 有五个值:unknown / dialing / incoming / connected / disconnected 来电会抢走音频通道,此时 RTC 的音频会被系统中断。业务侧通常需要:
  • incoming / connected:暂停或提示”通话中已静音”
  • disconnected:恢复

会议场景的典型配置

判断按钮的选中态用 effectiveRouteTarget(当前生效的目标), 而不是 defaultAudioRoute(持久设置)—— 后者在有临时设置时不代表当前状态。

相关阅读