音频路由使用说明
本文档基于 rtcSDK 中AudioRouterManager 的相关实现整理;在 meetingSDK 中使用时,仅需将获取和释放入口适配为 MeetingEngine:
AudioRouterManager 类型本身仍然来自 RTC 包:cn.seastart.rtc.media.audioRouter.AudioRouterManager。
1. 获取 AudioRouterManager
在 meetingSDK 中,应通过 MeetingEngine 获取:
说明
getAudioRouterManager()返回的是可空类型,业务层请做好空判断。- 从当前
meetingSDK实现看,该方法会透传到底层 RTC 引擎。 - 推荐在会议页面 / 通话页面集中持有,不要在每次按钮点击时重复获取和初始化。
2. 推荐初始化顺序
结合meetingSDK Demo,推荐在进入会议页后按以下顺序初始化:
- 通过
meetingEngine.getAudioRouterManager()获取管理类 - 设置回调监听
setAudioRouterCalllback(...) - 设置音频模式
setMode(...) - 设置自动切换策略
setAutoChangeAudioRouter(...) - 调用
init()启动路由监听
MeetingActivity.kt 的实现保持一致:
3. setMode 使用说明
会议 / 通话场景推荐:
AudioManager 为准,例如:
AudioManager.MODE_NORMALAudioManager.MODE_RINGTONEAudioManager.MODE_IN_CALLAudioManager.MODE_IN_COMMUNICATION
说明
- 当前项目
minSdk = 24。 - 在当前接入中,建议业务层主动设置 mode,不要依赖默认值。
- 如果业务中存在会议、播放、语聊等不同音频场景,切换场景时建议重新调用一次
setMode(...)。
4. setAutoChangeAudioRouter 自动切换策略
4.1 简单用法
4.2 完整用法
isAutoChangetrue:内部自动切换路由false:只监听设备变化,由业务层手动切换
isPrioritySpeakertrue:扬声器优先级高于听筒false:听筒优先级高于扬声器
isPriorityWiredEarphonetrue:有线耳机优先级高于蓝牙耳机false:蓝牙耳机优先级高于有线耳机
4.3 当前 Demo 使用策略
MeetingActivity.kt 中使用的是:
- 开启自动切换
- 扬声器优先于听筒
- 蓝牙耳机优先于有线耳机
5. 回调说明
5.1 当前可用输出设备变化
- 连接 / 断开蓝牙耳机
- 插入 / 拔出有线耳机
- 系统输出设备能力发生变化
5.2 当前生效输出设备变化
5.3 路由变化可能产生噪音
- 耳机拔出
- 蓝牙耳机断开
- 系统自动从耳机切换到外放
- 降低音量
- 暂停播放
- 给用户提示
6. 获取当前可用设备和当前生效设备
6.1 获取当前可用输出设备
6.2 获取当前活跃输出设备
6.3 蓝牙名称纠正(可选)
如果要获取更准确的蓝牙名称,请结合系统版本处理蓝牙权限;Android 12 及以上通常需要关注 BLUETOOTH_CONNECT。
7. 手动切换路由
业务层可在用户点击 UI 时主动切换:selectType 为 AudioOutputDeviceType,例如:
特殊值:UN_KNOW
- 恢复默认推荐路由
- 设备插拔后主动要求 SDK 重新选路
8. 释放资源
推荐在会议页面退出 / 销毁时调用:9. 常用设备枚举
UN_KNOW:未知 / 触发自动重新选路SPEAKER:扬声器EARPIECE:听筒WIRED_EARPHONE:有线耳机BLUETOOTH_HEADSET:蓝牙耳机
10. 推荐实践
- 通过
MeetingEngine暴露的接口接入,不要在业务层直接依赖底层rtcEngine。 - 进入会议页时初始化,退出会议页时释放,避免在单个按钮点击中重复
init()/release()。 - 每次切换业务音频场景都重新设置一次
setMode(...)。 - 展示“当前使用中的设备”时,以
activeOutputDeviceChange(...)为准。 - 展示“当前可选设备列表”时,以
exitOutputDeviceChange(...)或getExitAudioOutputDevices()为准。 - 蓝牙 / 有线耳机 / 扬声器 / 听筒切换建议在真机上完整验证。
- 当前文档中的
meetingEngine默认表示你已经持有的MeetingEngine实例。