跳到主要内容

音频路由

提示

SDK 从 5.2.3 开始提供音频路由功能。

SDK 提供音频路由功能,用于管理 App 播放音频时的输出设备。主要功能如下:

  • 设置默认音频路由。在无外接设备时,可设置默认使用设备内置音频输出设备(听筒或扬声器)。一旦接入外部设备,SDK 仅会使用外接设备。
  • 在接入有线耳机、蓝牙耳机、蓝牙音响等外部设备时,自动根据设备连接顺序、可用状态切换当前输出设备。当有多个外接设备时,音频会通过最后接入的设备播放。

本文主要描述了 SDK 在不同场景下的默认音频路由、默认音频路由修改方式和音频路由监听方法。

默认音频路由

默认音频路由是指 App 所在设备的默认音频输出设备,例如移动设备上的听筒或扬声器。SDK 默认音频路由为扬声器。

更改默认音频路由

当用户没有连接外部音频输出设备时,SDK 会使用默认音频路由。 在加入房间前,您可以调用 setDefaultAudioRouteToSpeaker 更改默认音频路由。通过该方法的 defaultToSpeaker 参数控制 SDK 是否使用扬声器播放音频。

接口原型

Objective C
- (int)setDefaultAudioRouteToSpeaker:(BOOL)defaultToSpeaker;

参数说明

参数类型是否必填说明
defaultToSpeakerBOOL是否使用扬声器作为默认音频路由。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;

参数说明

参数类型是否必填说明
enableBOOL是否强制使用扬声器。YES:扬声器;NO:恢复默认音频路由

返回值

设置成功返回 0,失败返回 -1

代码示例

Objective C
#import <RongRTCLib/RongRTCLib.h>

// 更改当前音频路由为扬声器
[[RCRTCEngine sharedInstance] enableSpeaker:YES];

在用户接入外接音频输出设备后,SDK 会自动管理音频路由。具体行为如下:

  1. 音频路由自动切换到用户连接的外部音频输出设备。
  2. 如果用户先后连接了多个外部设备,则音频路由会自动切换到最后一个连接的音频输出设备。
  3. 如果用户移除当前输出设备,则音频路由会自动切换到上一个连接的音频输出设备。
  4. 如果用户移除所有外接音频输出设备,SDK 切换到使用默认音频路由输出。
提示

因为 iOS 系统限制,当移动设备连接到耳机或蓝牙音频设备时,无法将音频路由更改为扬声器。

获取当前音频路由

对音频路由的任何更改都会触发 RCRTCEngineEventDelegate 中的 didAudioRouteChanged 回调。您可以使用此回调来获取当前的音频路由。

接口原型

Objective C
- (void)didAudioRouteChanged:(RCRTCAudioRouteType)audioRouteType;

参数说明

参数类型说明
audioRouteTypeRCRTCAudioRouteType当前音频路由类型

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;
}
}

API 文档