设置音频路由
音频路由是指 App 在播放音频时使用的音频输出设备。 例如,听筒、耳机、扬声器和可外放音频的蓝牙设备都可作为音频路由。
本文主要介绍音频路由的概念,并展示如何更改音频路由。
默认音频路由
默认音频路由是指设备本身采用的路由,例如移动设备上的扬声器。
在不同的场景下,SDK 使用的默认音频路由如下所示:
- 语音通话:听筒
- 视频通话:扬声器
- 语音直播:扬声器
- 视频直播:扬声器
更改音频路由
更改原则
根据使用角色的不同,你可以通过以下方法更改音频路由:
- 设备用户:添加或移除外部设备,例如耳机或蓝牙设备。
- App 开发者:
- 加入频道前,调用
setDefaultAudioRoutetoSpeakerphone
更改默认音频路由。 - 加入频道后,调用
setEnableSpeakerphone
设置当前的音频路由。
- 加入频道前,调用
无论采用何种方法对音频路由进行更改,更改生效的优先级都遵循如下原则:
- 用户行为对音频路由更改的优先级最高。
用户连接有线耳机、蓝牙耳机等外部设备后,音频路由会自动切换到外部设备。如果用户先后连接了多个外部设备,则音频路由会自动切换到最后一个连接的设备。 - 当用户没有连接外部设备时,SDK 会使用默认音频路由。
调用setDefaultAudioRoutetoSpeakerphone
可以更改该默认设置。如果当前音频路由是设备本身,setDefaultAudioRoutetoSpeakerphone
会修改当前音频路由。 - 在没有系统限制的情况下,无论当前音频路由是外接设备、扬声器还是听筒,调用
setEnableSpeakerphone
都能切换当前音频路由。
但该方法只对当前所在的频道生效,不会更改设备默认的音频路由。如果用户离开当前频道并加入新的频道,则 SDK 还是会使用默认的音频路由。
由于 iOS 系统限制,部分音频路由在通话音量模式下无法识别。因此,如需使用外接声卡,建议将音频应用场景设置为高音质场景 AgoraAudioScenarioGameStreaming
。在这种场景下,SDK 会切换到媒体音量规避该问题。
对音频路由的任何更改都会触发 didAudioRouteChanged
回调。你可以使用此回调来获取当前的音频路由。
插拔设备更改音频路由
当用户连接音频设备时,音频路由会发生改变。例如插入耳机时音频路由会自动切换到耳机。当连接多个设备时,音频路由会切换至最后连接的设备。
参考以下示例,了解插拔设备会怎样改变音频路由:
- 用户加入频道。音频路由为扬声器。
- 用户插入耳机。音频路由更改为耳机。
- 用户在没有拔出耳机的状态下,将移动设备连接至蓝牙音频设备。音频路由更改为蓝牙音频设备。
- 用户断开蓝牙音频设备与移动设备之间的连接。音频路由变回耳机。
更改默认音频路由
在通话之前,调用 setDefaultAudioRoutetoSpeakerphone
方法将默认音频路由切换为听筒或扬声器。该方法的 defaultToSpeaker
参数传入 true
代表设置默认音频路由为扬声器;传入 false
代表设置默认音频路由为听筒。该方法的设置在调用 destroy
销毁引擎前都有效。
参考以下示例,了解如何更改默认音频路由:
- 用户插入耳机。音频路由为耳机。
- 用户拔出耳机。音频路由更改为移动设备的默认音频路由,具体取决于你的使用场景。
- 在 App 中调用
setDefaultAudioRoutetoSpeakerphone(true)
。音频路由更改为扬声器。 - 用户插入耳机。音频路由更改为耳机。
- 在 App 中调用
setDefaultAudioRoutetoSpeakerphone(true)
。音频路由仍然为耳机,因为setDefaultAudioRoutetoSpeakerphone
仅对设备本身的音频路由生效。 - 用户拔出耳机。音频路由更改为扬声器。
更改当前音频路由
如果操作系统允许,你可以调用 setEnableSpeakerphone
方法,更改当前音频路由为扬声器。
参考以下示例,了解如何更改当前音频路由:
-
示例 1
- 用户加入频道。音频路由为扬声器。
- 用户插入耳机。音频路由更改为耳机。
- App 调用
setEnableSpeakerphone(true)
。音频路由仍然为耳机。
注意如果用户使用了蓝牙耳机、有线耳机等外接音频播放设备,则该方法的设置无效,音频只会通过外接设备播放。
-
示例 2
- 用户加入语音通话频道。音频路由为听筒。
- App 调用
setEnableSpeakerphone(true)
。音频路由更改为扬声器。 - 用户插入耳机。音频路由更改为耳机。
- 用户拔出耳机。音频路由更改为听筒。