音频路由
提示
SDK 从 5.2.3 开始提供音频路由功能。
SDK 提供音频路由功能,用于管理 App 播放音频时的输出设备。主要功能如下:
- 设置默认音频路由。在无外接设备时,可设置默认使用设备内置音频输出设备(听筒或扬声器)。一旦接入外部设备,SDK 仅会使用外接设备。
- 在接入有线耳机、蓝牙耳机、蓝牙音响等外部设备时,自动根据设备连接顺序、可用状态切换当前输出设备。当有多个外接设备时,音频会通过最后接入的设备播放。
本文主要描述了 SDK 在不同场景下的默认音频路由、默认音频路由修改方式和音频路由监听方法。
默认音频路由
默认音频路由是指 App 所在设备的默认音频输出设备,例如移动设备上的听筒或扬声器。SDK 默认音频路由为扬声器。
更改默认音频路由
当用户没有连接外部音频输出设备时,SDK 会使用默认音频路由。
在加入房间前,您可以调用 setDefaultAudioRouteToSpeaker 更改默认音频路由。通过该方法的 defaultToSpeaker
参数控制 SDK 是否使用扬声器播放音频。
接口原型
Objective C
- (int)setDefaultAudioRouteToSpeaker:(BOOL)defaultToSpeaker;
参数说明
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
defaultToSpeaker | BOOL | 是 | 是否使用扬声器作为默认音频路由。YES:扬声器;NO:听筒 |
返回值
设置成功返回 0
,失败返回 -1
。
代码示例
Objective C
#import <RongRTCLib/RongRTCLib.h>
[[RCRTCEngine sharedInstance] setDefaultAudioRouteToSpeaker:YES];
更改当前音频路由
在用户未接入任何外接音频输出设备时,SDK 会使用默认音频路由的设置。如需更改当前音频路由,有两种方 式:
- 直接修改 SDK 默认音频路由配置,您可以在通信过程中在扬声器、听筒之间动态切换。
- 在 App 已将 SDK 默认音频路由设置为听筒的前提下,可调用 EnableSpeaker 方法并设置
YES
,实现将音频从听筒转为扬声器输出的效果。设置为NO
时 SDK 会恢复使用默认音频路由的配置。该方法在加入房间前后调用均可生效。该方法只切换当前的音频路由为扬声器,不会影响 SDK 的默认音频路由设置。
接口原型
Objective C
- (int)enableSpeaker:(BOOL)enable;
参数说明
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
enable | BOOL | 是 | 是否强制使用扬声器。YES:扬声器;NO:恢复默认音频路由 |
返回值
设置成功返回 0
,失败返回 -1
。
代码示例
Objective C
#import <RongRTCLib/RongRTCLib.h>
// 更改当前音频路由为扬声器
[[RCRTCEngine sharedInstance] enableSpeaker:YES];
在用户接入外接音频输出设备后,SDK 会自动管理音频路由。具体行为如下:
- 音频路由自动切换到用户连接的外部音频输出设备。
- 如果用户先后连接了多个外部设备,则音频路由会自动切换到最后一个连接的音频输出设备。
- 如果用户移除当前输出设备,则音频路由会自动切换到上一个连接的音频输出设备。
- 如果用户移除所有外接音频输出设备,SDK 切换到使用默认音频路由输出。
提示
因为 iOS 系统限制,当移动设备连接到耳机或蓝牙音频设备时,无法将音频路由更改为扬声器。
获取当前音频路由
对音频路由的任 何更改都会触发 RCRTCEngineEventDelegate 中的 didAudioRouteChanged 回调。您可以使用此回调来获取当前的音频路由。
接口原型
Objective C
- (void)didAudioRouteChanged:(RCRTCAudioRouteType)audioRouteType;
参数说明
参数 | 类型 | 说明 |
---|---|---|
audioRouteType | RCRTCAudioRouteType | 当前音频路由类型 |
RCRTCAudioRouteType 枚举值
枚举值 | 说明 |
---|---|
RCRTCAudioRouteTypeSpeaker | 扬声器 |
RCRTCAudioRouteTypeReceiver | 听筒 |
RCRTCAudioRouteTypeHeadphone | 耳机 |
RCRTCAudioRouteTypeBluetooth | 蓝牙 |
代码示例
Objective C
#import <RongRTCLib/RongRTCLib.h>
// 实现音频路由变更回调
- (void)didAudioRouteChanged:(RCRTCAudioRouteType)audioRouteType {
switch (audioRouteType) {
case RCRTCAudioRouteTypeSpeaker:
// 当前音频路由为扬声器
break;
case RCRTCAudioRouteTypeReceiver:
// 当前音频路由为听筒
break;
case RCRTCAudioRouteTypeHeadphone:
// 当前音频路由为耳机
break;
case RCRTCAudioRouteTypeBluetooth:
// 当前音频路由为蓝牙设备
break;
}
}