AgoraRtcEngineKit Class Reference
Inherits from | NSObject |
---|---|
Declared in | AgoraRtcEngineKit.h |
Overview
提供所有可供 App 调用的方法
声网通过全球部署的虚拟网络专为 WebRTC 以及移动端到移动端的 App 进行过优化。可以为全世界的音视频通信提供质量保证的体验(QoE)。
AgoraRtcEngineKit 是 SDK 的入口类。它为 App 提供了快速搭建音视频通信的 API。
核心方法
+ sharedEngineWithAppId:delegate:
创建 AgoraRtcEngineKit 实例
+ (instancetype _Nonnull)sharedEngineWithAppId:(NSString *_Nonnull)appId delegate:(id<AgoraRtcEngineDelegate> _Nullable)delegate
Parameters
appId |
声网为 app 开发者签发的 App ID,详见获取 App ID。使用同一个 App ID 的 app 才能进入同一个频道进行通话或直播。一个 App ID 只能用于创建一个 AgoraRtcEngineKit。如需更换 App ID,必须先调用 destroy 销毁当前 AgoraRtcEngineKit,并在 |
---|---|
delegate |
Return Value
- 方法调用成功,返回一个 AgoraRtcEngineKit 对象。
方法调用失败,返回错误码。
-1
(AgoraErrorCodeFailed
): 一般性的错误(未明确归类)-2
(AgoraErrorCodeInvalidArgument
): 未提供AgoraRtcEngineDelegate
对象-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化-101
(AgoraErrorCodeInvalidAppId
):不是有效的 App ID。
Discussion
AgoraRtcEngineKit 类的所有接口函数,如无特殊说明,都是异步调用,对接口的调用建议在同一个线程进行。
Note
- 请确保在调用其他 API 前先调用该方法创建并初始化 AgoraRtcEngineKit。
- 调用该方法和 sharedEngineWithConfig 均能创建 AgoraRtcEngineKit 实例。该方法与
sharedEngineWithConfig
的区别在于,sharedEngineWithConfig
支持在创建 AgoraRtcEngineKit 实例时指定访问区域。 - 目前声网 RTC Native SDK 只支持每个 app 创建一个 AgoraRtcEngineKit 实例。
Declared In
AgoraRtcEngineKit.h
+ sharedEngineWithConfig:delegate:
创建 AgoraRtcEngineKit 实例
+ (instancetype _Nonnull)sharedEngineWithConfig:(AgoraRtcEngineConfig *_Nonnull)config delegate:(id<AgoraRtcEngineDelegate> _Nullable)delegate
Parameters
config |
AgoraRtcEngineKit 实例的配置,详见 AgoraRtcEngineConfig 。 |
---|---|
delegate |
Return Value
- 方法调用成功,返回一个 AgoraRtcEngineKit 对象。
方法调用失败,返回错误码。
-1
(AgoraErrorCodeFailed
): 一般性的错误(未明确归类)-2
(AgoraErrorCodeInvalidArgument
): 未提供AgoraRtcEngineDelegate
对象-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化-101
(AgoraErrorCodeInvalidAppId
):不是有效的 App ID。
Discussion
AgoraRtcEngineKit 类的所有接口函数,如无特殊说明,都是异步调用,对接口的调用建议在同一个线程进行。
Note
- 请确保在调用其他 API 前先调用该方法创建并初始化 AgoraRtcEngineKit。
- 调用该方法和 sharedEngineWithAppId 均能创建 AgoraRtcEngineKit 实例。该方法与
sharedEngineWithAppId
的区别在于,该方法支持在创建 AgoraRtcEngineKit 实例时指定访问区域。 - 目前声网 RTC Native SDK 只支持每个 app 创建一个 AgoraRtcEngineKit 实例。
Declared In
AgoraRtcEngineKit.h
+ destroy
销毁 AgoraRtcEngineKit
实例
+ (void)destroy
Discussion
该方法释放 SDK 使用的所有资源。有些 app 只在用户需要时才进行实时音视频通信,不需要时则将资源释放出来用于其他操作,该方法适用于此类情况。调用 destroy
方法后,你将无法再使用 SDK 的其它方法和回调。如需再次使用实时音视频通信功能,你必须重新调用
sharedEngineWithAppId 方法创建一个新的 AgoraRtcEngineKit
实例。
Note:
- 该方法为同步调用,需要等待
AgoraRtcEngineKit
实例资源释放后才能执行其他操作,所以我们建议在子线程中调用该方法,避免主线程阻塞。此外,我们不建议 在 SDK 的回调中调用destroy
,否则由于 SDK 要等待回调返回才能回收相关的对象资源,会造成死锁。 - 如需在销毁后再次创建
AgoraRtcEngineKit 实例,需要等待
destroy` 方法执行结束后再创建实例。
Declared In
AgoraRtcEngineKit.h
– setChannelProfile:
该方法用于设置 AgoraRtcEngineKit 频道的使用场景。
- (int)setChannelProfile:(AgoraChannelProfile)profile
Parameters
profile |
频道使用场景。详见 AgoraChannelProfile。 |
---|
Return Value
0
(AgoraErrorCodeNoError
): 方法调用成功<
0
: 方法调用失败-2
(AgoraErrorCodeInvalidArgument
): 参数无效-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化
Discussion
SDK 初始化后默认的频道场景为通信场景,AgoraRtcEngineKit 会针对不同的使用场景采用不同的优化策略, 如通信场景偏好流畅,直播场景偏好画质。
Note:
- 为保证实时音视频质量,我们建议相同频道内的用户使用同一种频道场景。
- 该方法必须在加入频道前调用,进入频道后无法再设置频道场景。
- 不同的频道场景下,SDK 的默认音频路由和默认视频编码码率是不同的,详见 setDefaultAudioRouteToSpeakerphone 和 setVideoEncoderConfiguration 中的说明。
Declared In
AgoraRtcEngineKit.h
– setClientRole:
设置直播场景下的用户角色。
- (int)setClientRole:(AgoraClientRole)role
Parameters
role |
直播场景里的用户角色,详见 AgoraClientRole。 |
---|
Return Value
- 0(
AgoraErrorCodeNoError
): 方法调用成功。 < 0: 方法调用失败。
- -1(
AgoraErrorCodeFailed
): 一般性的错误(未明确归类)。 - -2(
AgoraErrorCodeInvalidArgument
): 参数无效。 -5 (
AgoraErrorCodeRefused
): 调用被拒绝。在多频道场景中, 如果你已在一个频道中进行如下设置,则用户在另一个频道内切换角色为主播时会返回该错误码:- 调用带
options
参数的 joinChannelByToken, 并使用默认设置publishLocalAudio = YES
或publishLocalVideo = YES
。 - 调用
setClientRole
,并设置用户角色为主播。 调用
muteLocalAudioStream(NO)
或muteLocalVideoStream(NO)
。-7(
AgoraErrorCodeNotInitialized
): SDK 尚未初始化。
- 调用带
- -1(
Discussion
调用 setChannelProfile(AgoraChannelProfileLiveBroadcasting)
后,SDK 会默认设置用户角色为观众,你可以调用 setClientRole
设置用户角色为主播。
该方法在加入频道前后均可调用。如果你在加入频道后调用该方法切换用户角色,调用成功后,SDK 会自动进行如下操作:
- 调用 muteLocalAudioStream 和 muteLocalVideoStream 修改发布状态。
- 本地触发 didClientRoleChanged 或 didClientRoleChangeFailed 。
- 远端触发 didJoinedOfUid 或 didOfflineOfUid(AgoraUserOfflineReasonBecomeAudience)。
Note: 该方法仅适用于直播场景。
Declared In
AgoraRtcEngineKit.h
– setClientRole:options:
设置直播场景下的用户角色。
- (int)setClientRole:(AgoraClientRole)role options:(AgoraClientRoleOptions *_Nullable)options
Parameters
role |
直播场景中的用户角色,详见 AgoraClientRole。 |
---|---|
options |
用户具体设置,包含用户级别,详见 AgoraClientRoleOptions。 |
Return Value
- 0(
AgoraErrorCodeNoError
): 方法调用成功。 < 0: 方法调用失败。
- -1(
AgoraErrorCodeFailed
): 一般性的错误(未明确归类)。 - -2(
AgoraErrorCodeInvalidArgument
): 参数无效。 -5 (
AgoraErrorCodeRefused
): 调用被拒绝。在多频道场景中, 如果你已在一个频道中进行如下设置,则用户在另一个频道内切换角色为主播时会返回该错误码:- 调用带
options
参数的 joinChannelByToken, 并使用默认设置publishLocalAudio = YES
或publishLocalVideo = YES
。 - 调用
setClientRole
,并设置用户角色为主播。 调用
muteLocalAudioStream(NO)
或muteLocalVideoStream(NO)
。-7(
AgoraErrorCodeNotInitialized
): SDK 尚未初始化。
- 调用带
- -1(
Availability
v3.2.0
调用 setChannelProfile(AgoraChannelProfileLiveBroadcasting)
后,SDK 会默认设置用户角色为观众,你可以调用 setClientRole
设置用户角色为主播。
该方法在加入频道前后均可调用。如果你在加入频道后调用该方法切换用户角色,调用成功后,SDK 会自动进行如下操作:
- 调用 muteLocalAudioStream 和 muteLocalVideoStream 修改发布状态。
- 本地触发 didClientRoleChanged 或 didClientRoleChangeFailed 。
- 远端触发 didJoinedOfUid 或 didOfflineOfUid(AgoraUserOfflineReasonBecomeAudience)。
Note
- 该方法仅适用于直播场景。
该方法与 setClientRole1 的区别在于,该方法还支持设置用户级别。
- 用户角色 (
role
) 确定用户在 SDK 层的权限,包含是否可以发送流、是否可以接收流、是否可以推流到 CDN 等。 - 用户级别 (
level
) 需要与角色结合使用,确定用户在其权限范围内,可以操作和享受到的服务级别。 例如对于观众,选择接收低延时还是超低延时的视频流。用户级别会影响计费。
- 用户角色 (
Declared In
AgoraRtcEngineKit.h
– joinChannelByToken:channelId:info:uid:joinSuccess:
加入频道
- (int)joinChannelByToken:(NSString *_Nullable)token channelId:(NSString *_Nonnull)channelId info:(NSString *_Nullable)info uid:(NSUInteger)uid joinSuccess:(void ( ^ _Nullable ) ( NSString *_Nonnull channel , NSUInteger uid , NSInteger elapsed ))joinSuccessBlock
Parameters
token |
在你服务器上生成的 Token。详见使用 Token 鉴权。 |
---|---|
channelId |
标识通话频道的字符串,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符):
|
info |
(非必选项) 开发者需加入的任何附加信息。一般可设置为空字符串,或频道相关信息。该信息不会传递给频道内的其他用户。 |
uid |
用户 ID,32 位无符号整数。建议设置范围:1到 (232-1),并保证唯一性。如果不填或设为 0,SDK 会自动分配一个,并在 joinSuccessBlock 回调方法中返回,App 层必须记住该返回值并维护,SDK 不对该返回值进行维护。 |
joinSuccessBlock |
成功加入频道回调。joinSuccessBlock 优先级高于 didJoinChannel,2 个同时存在时,didJoinChannel 会被忽略。 需要有 didJoinChannel 回调时,请将 joinSuccessBlock 设置为 nil 。 |
Return Value
0
(AgoraErrorCodeNoError
): 方法调用成功<
0
: 方法调用失败-2
(AgoraErrorCodeInvalidArgument
): 参数无效。-3
(AgoraErrorCodeNotReady
): SDK 初始化失败,请尝试重新初始化 SDK。-5
(AgoraErrorCodeRefused
):调用被拒绝。可能有如下两个原因:- 已经创建了一个同名的
AgoraRtcChannel
频道。 - 已经通过
AgoraRtcChannel
加入了一个频道,并在该AgoraRtcChannel
频道中发布了音视频流。由于通过AgoraRtcEngineKit
加入频道会默认发布音视频流,而 SDK 不支持同时在两个频道发布音视频流,因此会报错。
- 已经创建了一个同名的
-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建AgoraRtcEngineKit
并完成初始化。-17(AgoraErrorCodeJoinChannelRejected))
:加入频道被拒绝。由于 SDK 仅支持用户同一时间加入一个AgoraRtcEngineKit
频道,当已经加入 AgoraRtcEngineKit 频道的用户使用有效的频道名再次调用 AgoraRtcEngineKit 类中的加入频道方法时,会返回此错误码。
Discussion
该方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。 使用不同 App ID 的 App 是不能互通的。如果已在通话中,用户必须调用 leaveChannel 退出当前通话,才能进入下一个频道。SDK 在通话中使用 iOS 系统的 AVAudioSession 共享对象进行采集和播放, App 对该对象的操作可能会影响 SDK 的音频相关功能。
调用该 API 后会触发 joinSuccessBlock 或 didJoinChannel 回调。block 比 delegate 优先级高,如果两种回调都实现了,只有 block 会触发。
我们建议你将 joinSuccessBlock 设置为 nil,使用 delegate 回调。
加入频道后,本地会触发 didJoinChannel 回调;通信场景下的用户和直播场景下的主播加入频道后,远端会触发 didJoinedOfUid 回调。
用户成功加入频道后,默认订阅频道内所有其他用户的音频流和视频流,因此产生用量并影响计费。如果想取消订阅,可以通过调用相应的 mute
方法实现。
在网络状况不理想的情况下,客户端可能会与声网的服务器失去连接;SDK 会自动尝试重连,重连成功后,本地会触发 didRejoinChannel 回调。
Note:
- 频道内每个用户的 UID 必须是唯一的。如果将 UID 设为 0,系统将自动分配一个 UID。如果想要从不同的设备同时接入同一个频道,请确保每个设备上使用的 UID 是不同的。
- 在加入频道时,SDK 调用 setCategory(AVAudioSessionCategoryPlayAndRecord) 将 AVAudioSession 设置到 PlayAndRecord 模式, App 不应将其设置到其他模式。设置该模式时,正在播放的音频会被打断(比如正在播放的响铃声)。
Declared In
AgoraRtcEngineKit.h
– joinChannelByToken:channelId:info:uid:options:
加入频道并设置是否发布或自动订阅音频或视频流。
- (int)joinChannelByToken:(NSString *_Nullable)token channelId:(NSString *_Nonnull)channelId info:(NSString *_Nullable)info uid:(NSUInteger)uid options:(AgoraRtcChannelMediaOptions *_Nonnull)options
Parameters
token |
在 app 服务端生成的用于鉴权的 Token。详见服务端生成 Token。 |
---|---|
channelId |
标识通话的频道名称,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符):
|
info |
(非必选项) 开发者需加入的任何附加信息。一般可设置为空字符串,或频道相关信息。该信息不会传递给频道内的其他用户。 |
uid |
(非必选项)用户 ID,32 位无符号整数。建议设置范围:1 到 (232-1),并保证唯一性。如果不指定(即设为 0),SDK 会自动分配一个,并在
Note: 频道内每个用户的 UID 必须是唯一的。如果想要从不同的设备同时接入同一个频道,请确保每个设备上使用的 UID 是不同的。 |
options |
频道媒体设置选项:AgoraRtcChannelMediaOptions 。 |
Return Value
0
(AgoraErrorCodeNoError
): 方法调用成功。<
0
: 方法调用失败。-2
(AgoraErrorCodeInvalidArgument
): 参数无效。-3
(AgoraErrorCodeNotReady
): SDK 初始化失败,请尝试重新初始化 SDK。-5
(AgoraErrorCodeRefused
): 调用被拒绝。可能有如下两个原因:- 已经创建了一个同名的
AgoraRtcChannel
频道。 - 已经通过
AgoraRtcChannel
加入了一个频道,并在该AgoraRtcChannel
频道中发布了音视频流。由于通过AgoraRtcEngineKit
加入频道会默认发布音视频流,而 SDK 不支持同时在两个频道发布音视频流,因此会报错。
- 已经创建了一个同名的
-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建AgoraRtcEngineKit
并完成初始化。-17(AgoraErrorCodeJoinChannelRejected)
:加入频道被拒绝。由于 SDK 仅支持用户同一时间加入一个AgoraRtcEngineKit
频道,当已经加入 AgoraRtcEngineKit 频道的用户使用有效的频道名再次调用 AgoraRtcEngineKit 类中的加入频道方法时,会返回此错误码。
Availability
v3.3.0
该方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。使用不同 App ID 的 App 是不能互通的。
如果已在通话中,用户必须调用 leaveChannel 退出当前通话,才能进入下一个频道。
成功调用该方法加入频道后,本地会触发 didJoinChannel 回调; 通信场景下的用户和直播场景下的主播加入频道后,远端会触发 didJoinedOfUid 回调。
在网络状况不理想的情况下,客户端可能会与声网的服务器失去连接;SDK 会自动尝试重连,重连成功后,本地会触发 didRejoinChannel 回调。
Note
- 相比于 joinChannelByToken1,
该方法加了
options
参数,用于配置用户加入频道时是否发布或自动订阅音视频流。默认情况下,用户发布本地音视频流并自动订阅频道内所有其他用户的音视频流。 订阅音视频流会产生用量并影响计费。如果想取消订阅,可以通过设置options
参数或相应的mute
方法实现。 - 请确保用于生成 Token 的 App ID 与用 sharedEngineWithAppId 方法创建
AgoraRtcEngineKit
对象时的 App ID 一致。
Declared In
AgoraRtcEngineKit.h
– joinChannelByUserAccount:token:channelId:joinSuccess:
使用 User Account 加入频道
- (int)joinChannelByUserAccount:(NSString *_Nonnull)userAccount token:(NSString *_Nullable)token channelId:(NSString *_Nonnull)channelId joinSuccess:(void ( ^ _Nullable ) ( NSString *_Nonnull channel , NSUInteger uid , NSInteger elapsed ))joinSuccessBlock
Parameters
userAccount |
用户 User Account。该参数为必需,最大不超过 255 字节,不可为
|
---|---|
token |
在你服务器上生成的 Token。详见使用 Token 鉴权。 |
channelId |
标识通话频道的字符串,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符):
|
joinSuccessBlock |
成功加入频道回调。joinSuccessBlock 优先级高于 didJoinChannel,2 个同时存在时,didJoinChannel 会被忽略。 需要有 didJoinChannel 回调时,请将 joinSuccessBlock 设置为 nil 。 |
Return Value
- 0: 方法调用成功
< 0: 方法调用失败
AgoraErrorCodeInvalidToken(110):不是有效的 Token。请更换有效的 Token 重新加入频道。建议你进行如下检查:
- 检查生成 Token 的 uid 与
joinChannelByUserAccount
方法中的 uid 是否一致 - 检查 Token 的格式是否有效
- 检查 Token 与 App ID 是否匹配
- 检查生成 Token 的 uid 与
-17(AgoraErrorCodeJoinChannelRejected)
:加入频道被拒绝。由于 SDK 仅支持用户同一时间加入一个AgoraRtcEngineKit
频道,当已经加入 AgoraRtcEngineKit 频道的用户使用有效的频道名再次调用 AgoraRtcEngineKit 类中的加入频道方法时,会返回此错误码。
Discussion
该方法允许本地用户使用 User Account 加入频道。成功加入频道后,会触发以下回调:
- 本地:didRegisteredLocalUser 和 didJoinChannel 回调
- 远端:通信场景下的用户和直播场景下的主播加入频道后,远端会依次触发 didJoinedOfUid 和 didUpdatedUserInfo 回调
用户成功加入频道后,默认订阅频道内所有其他用户的音频流和视频流,因此产生用量并影响计费。如果想取消订阅,可以通过调用相应的 mute
方法实现。
Note
- 请确保在使用 String 型用户名前阅读如何使用 String 型用户 ID,了解使用限制及实现方法。
- 为保证通信质量,请确保频道内使用同一类型的数据标识用户身份。即同一频道内需要统一使用 UID 或 User Account。如果有用户通过 Web SDK 加入频道,请确保 Web 加入的用户也是同样类型。
Declared In
AgoraRtcEngineKit.h
– joinChannelByUserAccount:token:channelId:options:
使用 User Account 加入频道,并设置是否自动订阅音频或视频流。
- (int)joinChannelByUserAccount:(NSString *_Nonnull)userAccount token:(NSString *_Nullable)token channelId:(NSString *_Nonnull)channelId options:(AgoraRtcChannelMediaOptions *_Nonnull)options
Parameters
userAccount |
用户 User Account。该参数为必需,最大不超过 255 字节,不可为
|
---|---|
token |
在 app 服务端生成的用于鉴权的 Token。详见服务端生成 Token。 |
channelId |
标识频道的频道名,最大不超过 64 字节。以下为支持的字符集范围(共 89 个字符):
|
options |
频道媒体设置选项:AgoraRtcChannelMediaOptions 。 |
Return Value
- 0: 方法调用成功。
< 0: 方法调用失败。
AgoraErrorCodeInvalidArgument
(-2)AgoraErrorCodeNotReady
(-3)AgoraErrorCodeRefused
(-5)AgoraErrorCodeSDKNotInitialized
(-7)AgoraErrorCodeJoinChannelRejected(-17)
:加入频道被拒绝。由于 SDK 仅支持用户同一时间加入一个AgoraRtcEngineKit
频道,当已经加入 AgoraRtcEngineKit 频道的用户使用有效的频道名再次调用 AgoraRtcEngineKit 类中的加入频道方法时,会返回此错误码。
Availability
v3.3.0
该方法允许本地用户使用 User Account 加入频道。
成功加入频道后,会触发以下回调:
- 本地: didRegisteredLocalUser 和 didJoinChannel 回调。
- 通信场景下的用户和直播场景下的主播加入频道后,远端会依次触发 didJoinedOfUid 和 didUpdatedUserInfo 回调。
Note
- 请确保在使用 String 型用户名前阅读如何使用 String 型用户 ID,了解使用限制及实现方法。
- 相比 joinChannelByUserAccount1,
该方法加了
options
参数,用于配置用户加入频道时是否自动订阅频道内所有远端音视频流。默认情况下,用户订阅频道内所有其他用户的音频流和视频流, 因此会产生用量并影响计费。如果想取消订阅,可以通过设置options
参数或相应的mute
方法实现。 - 为保证通信质量,请确保频道内使用同一类型的数据标识用户身份。即同一频道内需要统一使用 UID 或 User Account。 如果有用户通过 Web SDK 加入频道,请确保 Web 加入的用户也是同样类型。
Declared In
AgoraRtcEngineKit.h
– registerLocalUserAccount:appId:
注册本地用户 User Account
- (int)registerLocalUserAccount:(NSString *_Nonnull)userAccount appId:(NSString *_Nonnull)appId
Parameters
userAccount |
用户 User Account。该参数为必填,最大不超过 255 字节,不可填
|
---|---|
appId |
你的项目在声网控制台注册的 App ID |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法为本地用户注册一个 User Account。注册成功后,该 User Account 即可标识该本地用户的身份,用户可以使用它加入频道。成功注册 User Account 后,本地会触发 didRegisteredLocalUser 回调,告知本地用户的 UID 和 User Account。
该方法为可选。如果你希望用户使用 User Account 加入频道,可以选用以下两种方式:
- 先调用 registerLocalUserAccount 方法注册 User Account,再调用 joinChannelByUserAccount 方法加入频道
- 直接调用 joinChannelByUserAccount 方法加入频道
两种方式的区别在于,提前调用 registerLocalUserAccount,可以缩短使用 joinChannelByUserAccount 进入频道的时间。
Note:
- userAccount 不能为空,否则该方法不生效。
- 请确保在该方法中设置的 userAccount 在频道中的唯一性。
- 为保证通信质量,请确保频道内使用同一类型的数据标识用户身份。即同一频道内需要统一使用 UID 或 User Account。如果有用户通过 Web SDK 加入频道,请确保 Web 加入的用户也是同样类型。
Declared In
AgoraRtcEngineKit.h
– getUserInfoByUserAccount:withError:
通过 User Account 获取用户信息
- (AgoraUserInfo *_Nullable)getUserInfoByUserAccount:(NSString *_Nonnull)userAccount withError:(AgoraErrorCode *_Nullable)error
Parameters
userAccount |
用户 User Account。该参数为必填。 |
---|---|
error |
AgoraErrorCode 的指针,可以为空。 |
Return Value
一个包含了用户 User Account 和 UID 的 AgoraUserInfo 对象
Discussion
远端用户加入频道后,SDK 会获取到该用户的 UID 和 User Account,然后缓存一个包含了远端用户 UID 和 User Account 的映射表,并在本地触发 didUpdatedUserInfo 回调。
收到这个回调后,你可以调用该方法,通过传入 User Account 获取包含了指定用户 UID 的 AgoraUserInfo 对象。
Declared In
AgoraRtcEngineKit.h
– getUserInfoByUid:withError:
通过 UID 获取用户信息
- (AgoraUserInfo *_Nullable)getUserInfoByUid:(NSUInteger)uid withError:(AgoraErrorCode *_Nullable)error
Parameters
uid |
用户 UID。该参数为必填 |
---|---|
error |
AgoraErrorCode 的指针,可以为空。 |
Return Value
一个包含了用户 User Account 和 UID 的 AgoraUserInfo 对象
Discussion
远端用户加入频道后,SDK 会获取到该用户的 UID 和 User Account,然后缓存一个包含了用户 UID 和 User Account 的映射表,并在本地触发 didUpdatedUserInfo 回调。
收到这个回调后,你可以调用该方法,通过传入 UID 获取包含了指定用户 User Account 的 AgoraUserInfo 对象。
Declared In
AgoraRtcEngineKit.h
– switchChannelByToken:channelId:joinSuccess:
快速切换直播频道。
- (int)switchChannelByToken:(NSString *_Nullable)token channelId:(NSString *_Nonnull)channelId joinSuccess:(void ( ^ _Nullable ) ( NSString *_Nonnull channel , NSUInteger uid , NSInteger elapsed ))joinSuccessBlock
Parameters
token |
在你服务器上生成的 Token。详见使用 Token 鉴权。 |
---|---|
channelId |
标识频道的频道名,最大不超过 64 字节。以下为支持的字符集范围(共 89 个字符):
|
joinSuccessBlock |
成功加入频道回调。 |
Return Value
0
(AgoraErrorCodeNoError
): 方法调用成功<
0
: 方法调用失败-1
(AgoraErrorCodeFailed
): 一般性的错误(未明确归类)-2
(AgoraErrorCodeInvalidArgument
): 参数无效-5
(AgoraErrorCodeRefused
): 调用被拒绝。可能因为用户角色不是观众-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化-102
(AgoraErrorCodeInvalidChannelId
):频道名无效。请更换有效的频道名-113
(AgoraErrorCodeNotInChannel
):用户不在频道内
Discussion
当直播频道中的观众想从一个频道切换到另一个频道时,可以调用该方法,实现快速切换。
成功调用该方切换频道后,本地会先收到离开原频道的回调 didLeaveChannelWithStats,再收到成功加入新频道的回调 didJoinChannel。
用户成功切换频道后,默认订阅频道内所有其他用户的音频流和视频流,因此产生用量并影响计费。如果想取消订阅,可以通过调用相应的 mute
方法实现。
Note: 该方法仅适用直播频道中的观众用户。
Declared In
AgoraRtcEngineKit.h
– switchChannelByToken:channelId:options:
快速切换直播频道,并设置是否自动订阅目标频道的音频流或视频流。
- (int)switchChannelByToken:(NSString *_Nullable)token channelId:(NSString *_Nonnull)channelId options:(AgoraRtcChannelMediaOptions *_Nonnull)options
Parameters
token |
在 app 服务端生成的用于鉴权的 Token。详见服务端生成 Token。 |
---|---|
channelId |
标识频道的频道名,最大不超过 64 字节。以下为支持的字符集范围(共 89 个字符):
|
options |
频道媒体设置选项:AgoraRtcChannelMediaOptions 。 |
Return Value
0
(AgoraErrorCodeNoError
): 方法调用成功。<
0
: 方法调用失败。-1
(AgoraErrorCodeFailed
): 一般性的错误(未明确归类)。-2
(AgoraErrorCodeInvalidArgument
): 参数无效。-5
(AgoraErrorCodeRefused
): 调用被拒绝。可能因为用户角色不是观众。-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化。-102
(AgoraErrorCodeInvalidChannelId
): 频道名无效。请更换有效的频道名。-113
(AgoraErrorCodeNotInChannel
): 用户不在频道内。
Availability
v3.3.0
当直播频道中的观众想从一个频道切换到另一个频道时,可以调用该方法,实现快速切换。
成功调用该方法切换频道后,本地会先收到离开原频道的回调 didLeaveChannelWithStats, 再收到成功加入新频道的回调 didJoinChannel。
用户成功切换频道后,默认订阅频道内所有其他用户的音频流和视频流,因此产生用量并影响计费。如果想取消订阅,可以通过调用相应的 mute
方法实现。
Note
- 该方法仅适用直播频道中的观众用户。
- 该方法和 switchChannelByToken1 的区别在于,
该方法加了
options
参数,用于配置终端用户在切换到新的频道时是否自动订阅频道内所有远端音视频流。 默认情况下,用户订阅新的频道内所有其他用户的音频流和视频流,因此会产生用量并影响计费。如果想取消订阅, 可以通过设置options
参数或相应的mute
方法实现。
Declared In
AgoraRtcEngineKit.h
– leaveChannel:
离开频道
- (int)leaveChannel:(void ( ^ _Nullable ) ( AgoraChannelStats *_Nonnull stat ))leaveChannelBlock
Parameters
leaveChannelBlock |
成功离开频道的回调,提供通话相关的统计信息,详见 AgoraChannelStats |
---|
Return Value
0
(AgoraErrorCodeNoError
): 方法调用成功<
0
: 方法调用失败-1
(AgoraErrorCodeFailed
): 一般性的错误(未明确归类)-2
(AgoraErrorCodeInvalidArgument
): 参数无效-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化
Discussion
离开频道,即挂断或退出通话。
当调用 joinChannelByToken 方法后,必须调用 leaveChannel 结束通话,否则无法开始下一次通话。 不管当前是否在通话中,都可以调用本方法,没有副作用。该方法会把会话相关的所有资源释放掉。该方法是异步操作,调用返回时并没有真正退出频道。
成功调用该方法离开频道后,本地会触发 didLeaveChannelWithStats 回调;通信场景下的用户和直播场景下的主播离开频道后,远端会触发 didOfflineOfUid(AgoraUserOfflineReasonBecomeAudience) 回调。
Note:
- 如果你调用了本方法后立即调用 destroy 方法,SDK 将无法触发 didLeaveChannelWithStats 回调。
- 如果你在旁路推流时调用本方法, SDK 将自动调用 removePublishStreamUrl 方法。
- 在调用本方法时,iOS 默认情况下 SDK 会停用 audio session,可能会对其他应用程序造成影响。如果想改变这种默认行为,可以通过setAudioSessionOperationRestriction 方法设置
AgoraAudioSessionOperationRestrictionDeactivateSession
,这样在 leaveChannel 时,SDK 不会停用 audio session。
Declared In
AgoraRtcEngineKit.h
– setAVSyncSource:uid:
设置发流端音画同步。
- (int)setAVSyncSource:(NSString *_Nullable)channelId uid:(NSUInteger)uid
Parameters
channelId |
标识音频发送端所在频道的频道名。 |
---|---|
uid |
音频发送端的用户 ID。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.6.0
同一用户可能使用两个设备分别发送音频流和视频流,为保证接收端听到和看到的音频和视频的时间同步性,你可以在视频发送端调用该方法,并传入音频发送端的频道名、用户 ID。SDK 会以发送的音频流的时间戳为基准进行自动调节发送的视频流,以保证即使在两个发送端的上行网络情况不一致(如分别使用 Wi-Fi 和 4G 网络)的情况下,也能让接收到的音视频具有时间同步性。
Discussion
Note: 声网推荐你在加入频道前调用该方法。
Declared In
AgoraRtcEngineKit.h
– renewToken:
更新 Token
- (int)renewToken:(NSString *_Nonnull)token
Parameters
token |
新的 Token |
---|
Return Value
0
(AgoraErrorCodeNoError
): 方法调用成功<
0
: 方法调用失败-1
(AgoraErrorCodeFailed
): 一般性的错误(未明确归类)-2
(AgoraErrorCodeInvalidArgument
): 参数无效-7
(AgoraErrorCodeNotInitialized
): SDK 尚未初始化
Discussion
该方法用于更新 Token。如果启用了 Token 机制,过一段时间后使用的 Token 会失效。当以下任意一种情况发生时:
- tokenPrivilegeWillExpire 回调。
- connectionChangedToState 回调的
reason
参数报告 AgoraConnectionChangedTokenExpired(9)。
App 应重新获取 Token,然后调用该 API 更新 Token,否则 SDK 无法和服务器建立连接。
Declared In
AgoraRtcEngineKit.h
– getConnectionState
获取当前网络连接状态
- (AgoraConnectionStateType)getConnectionState
Return Value
当前的网络连接状态,详见 AgoraConnectionStateType。
Discussion
该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
跨频道媒体流转发
– startChannelMediaRelay:
开始跨频道媒体流转发。该方法可用于实现跨频道连麦等场景。
- (int)startChannelMediaRelay:(AgoraChannelMediaRelayConfiguration *_Nonnull)config
Parameters
config |
跨频道媒体流转发参数配置: AgoraChannelMediaRelayConfiguration 类。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
成功调用该方法后,SDK 会触发 channelMediaRelayStateDidChange 和 didReceiveChannelMediaRelayEvent 回调,并在回调中报告当前的跨频道媒体流转发状态和事件。
- 如果
channelMediaRelayStateDidChange
回调报告 AgoraChannelMediaRelayStateRunning(2) 和 AgoraChannelMediaRelayStateIdle(0),且didReceiveChannelMediaRelayEvent
回调报告 AgoraChannelMediaRelayEventSentToDestinationChannel(4),则表示 SDK 开始在源频道和目标频道之间转发媒体流。 - 如果
channelMediaRelayStateDidChange
回调报告 AgoraChannelMediaRelayStateFailure(3),则表示跨频道媒体流转发出现异常。
Note
- 请在成功加入频道后调用该方法。
- 该方法仅对直播场景下的主播有效。
- 成功调用该方法后,若你想再次调用该方法,必须先调用 stopChannelMediaRelay 方法退出当前的转发状态。
- 跨频道媒体流转发功能需要提交工单联系技术支持开通。
- 该功能不支持 String 型 UID。
Declared In
AgoraRtcEngineKit.h
– updateChannelMediaRelay:
更新媒体流转发的频道。成功开始跨频道转发媒体流后,如果你希望将流转发到多个目标频道,或退出当前的转发频道,可以调用该方法。
- (int)updateChannelMediaRelay:(AgoraChannelMediaRelayConfiguration *_Nonnull)config
Parameters
config |
跨频道媒体流转发参数配置: AgoraChannelMediaRelayConfiguration 类。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
成功调用该方法后,SDK 会触发 didReceiveChannelMediaRelayEvent 回调,并在回调中报告状态码 AgoraChannelMediaRelayEventUpdateDestinationChannel(7)。
Note
- 请在成功调用 startChannelMediaRelay
方法并收到 channelMediaRelayStateDidChange
(AgoraChannelMediaRelayStateRunning, AgoraChannelMediaRelayErrorNone)
后调用该方法;否则,方法调用会失败。 - 跨频道媒体流转发最多支持 4 个目标频道。如果直播间里已经有 4 个频道了,你可以在调用该方法之前,调用 AgoraChannelMediaRelayConfiguration 中的
removeDestinationInfoForChannelName
方法移除不需要的频道。
Declared In
AgoraRtcEngineKit.h
– pauseAllChannelMediaRelay
暂停向所有目标频道转发媒体流。
- (int)pauseAllChannelMediaRelay
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.5.1
开始跨频道转发媒体流后,如果你需要暂停向所有频道转发媒体流,可以调用该方法;暂停后, 如果要恢复跨频道媒体流转发,可以调用 resumeAllChannelMediaRelay 方法。
成功调用该方法后,SDK 会触发 didReceiveChannelMediaRelayEvent 回调,并在回调中报告是否成功暂停媒体流转发。
Discussion
Note: 该方法需要在 startChannelMediaRelay 后调用。
Declared In
AgoraRtcEngineKit.h
– resumeAllChannelMediaRelay
恢复向所有目标频道转发媒体流。
- (int)resumeAllChannelMediaRelay
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.5.1
调用 pauseAllChannelMediaRelay 方法后,如果你需要恢复向所有目标频道转发媒体流,可以调用该方法。
成功调用该方法后,SDK 会触发 didReceiveChannelMediaRelayEvent 回调,并在回调中报告是否成功恢复媒体流转发。
Discussion
Note: 该方法需要在 pauseAllChannelMediaRelay
后调用。
Declared In
AgoraRtcEngineKit.h
– stopChannelMediaRelay
停止跨频道媒体流转发。一旦停止,主播会退出所有目标频道。
- (int)stopChannelMediaRelay
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
成功调用该方法后,SDK 会触发 channelMediaRelayStateDidChange 回调。如果报告 AgoraChannelMediaRelayStateIdle(0) 和 AgoraChannelMediaRelayErrorNone(0),则表示已停止转发媒体流。
Note: 如果该方法调用不成功,SDK 会触发 channelMediaRelayStateDidChange 回调,并报告错误码 AgoraChannelMediaRelayErrorServerNoResponse(2) 或 AgoraChannelMediaRelayEventUpdateDestinationChannelRefused(8)。你可以调用 leaveChannel 方法离开频道,跨频道媒体流转发会自动停止。
Declared In
AgoraRtcEngineKit.h
网络代理
– setCloudProxy:
设置声网云代理服务。
- (int)setCloudProxy:(AgoraCloudProxyType)proxyType
Parameters
proxyType |
云代理类型,详见 AgoraCloudProxyType 。该参数为必填参数,如果你不赋值,SDK 会报错。 |
---|
Return Value
- 0: 方法调用成功。
< 0: 方法调用失败。
-2(AgoraErrorCodeInvalidArgument)
: 传入的参数无效。-7(AgoraErrorCodeNotInitialized)
: SDK 尚未初始化。
Availability
v3.3.0
当用户的网络访问受到防火墙限制时,你需要将声网提供的 IP 和端口号添加到防火墙白名单,然后调用该方法开启云代理,并通过 proxyType
参数设置云代理类型。
成功连接云代理后,SDK 会触发 connectionChangedToState(AgoraConnectionStateConnecting, AgoraConnectionChangedSettingProxyServer) 回调。
自 v3.6.2 起,当用户调用该方法并成功加入频道后,SDK 会触发 didProxyConnected 回调,报告用户 ID、连接的代理类型和用户调用 joinChannelByToken
到 SDK 触发该回调的经过的时间等。
如果你想关闭已设置的云代理,请调用 setCloudProxy(AgoraNoneProxy)
。如果你想更改已设置的云代理类型,请先调用 setCloudProxy(AgoraNoneProxy)
,
再调用 setCloudProxy
并传入你期望的 proxyType
值。
Note
- 声网推荐你在频道外调用该方法。
- 对 3.3.x 版 SDK,使用 Force UDP 云代理时,旁路推流和跨频道媒体流转发功能不可用。对 3.4.0 及之后版 SDK,如果用户处于内网防火墙环境下,使用 Force UDP 云代理时,旁路推流和跨频道媒体流转发功能不可用。
- 使用 Force TCP 云代理时:
- 调用 startAudioMixing 方法时无法播放 HTTP 协议的在线音频文件。
- 旁路推流和跨频道媒体流转发功能会用 TCP 协议的云代理。
Declared In
AgoraRtcEngineKit.h
– setLocalAccessPoint:
设置本地代理。
- (int)setLocalAccessPoint:(AgoraLocalAccessPointConfiguration *_Nonnull)config
Parameters
config |
Local Access Point 的配置。详见 AgoraLocalAccessPointConfiguration 。 |
---|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Availability
v3.7.1
成功部署声网混合云或声网私有化平台并在内网终端集成声网 Native SDK 后,你需要调用该方法指定 Local Access Point 来设置本地代理。成功设置本地代理后,SDK 会自动将日志上传到声网日志服务器。如果你需要将日志上传到指定的服务器,可以在通过 AgoraLocalAccessPointConfiguration
的 AdvancedConfigInfo
设置。
Note:
- 该方法仅在部署声网混合云或声网实时音视频私有化平台后生效。你可以联系 sales@agora.io 了解和部署声网混合云或声网私有化平台。
- 该方法需要加入频道前调用。
Declared In
AgoraRtcEngineKit.h
音频核心方法
– enableAudio
启用音频模块
- (int)enableAudio
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
本方法可以启用音频模块。(音频模块默认为开启状态)
Note:
该方法设置的是音频模块为开启状态,在频道内和频道外均可调用,且在 leaveChannel 后仍然有效。
该方法开启整个音频模块,响应速度较慢,因此声网建议使用如下方法来控制音频模块:
- enableLocalAudio:是否启动麦克风采集并创建本地音频流
- muteLocalAudioStream:是否发布本地音频流
- muteRemoteAudioStream:是否接收并播放远端音频流
- muteAllRemoteAudioStreams:是否接收并播放所有远端音频流
Declared In
AgoraRtcEngineKit.h
– disableAudio
关闭音频模块
- (int)disableAudio
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
Note:
该方法设置的是音频模块为禁用状态,在频道内和频道外均可调用,且在 leaveChannel 后仍然有效。
该方法关闭整个音频模块,响应速度较慢,因此声网建议使用如下方法来控制音频模块:
- enableLocalAudio:是否启动麦克风采集并创建本地音频流
- muteLocalAudioStream:是否发布本地音频流
- muteRemoteAudioStream:是否接收并播放远端音频流
- muteAllRemoteAudioStreams:是否接收并播放所有远端音频流
Declared In
AgoraRtcEngineKit.h
– setAudioProfile:scenario:
设置音频编码配置
- (int)setAudioProfile:(AgoraAudioProfile)profile scenario:(AgoraAudioScenario)scenario
Parameters
profile |
设置采样率,码率,编码模式和声道数: AgoraAudioProfile。 |
---|---|
scenario |
设置音频应用场景,详细定义见 AgoraAudioScenario。不同的音频场景下,设备的音量类型不同。详见 如何区分媒体音量和通话音量。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
Note:
- 该方法需要在 joinChannelByToken 之前设置好,joinChannelByToken 之后设置不生效
- 通信场景下,该方法设置
profile
生效,设置scenario
不生效 - 通信和直播场景下,音质(码率)会有网络自适应的调整,通过该方法设置的是一个最高码率
- 在有高音质需求的场景(例如音乐教学场景)中,建议将
profile
设置为AgoraAudioProfileMusicHighQuality(4)
,scenario
设置为AgoraAudioScenarioGameStreaming(3)
Declared In
AgoraRtcEngineKit.h
– adjustRecordingSignalVolume:
调节麦克风采集信号音量
- (int)adjustRecordingSignalVolume:(NSInteger)volume
Parameters
volume |
麦克风采集信号音量。取值范围为 [0,400],其中:
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
– adjustLoopbackRecordingSignalVolume:
调节声卡采集信号音量
- (int)adjustLoopbackRecordingSignalVolume:(NSInteger)volume
Parameters
volume |
声卡采集信号音量。取值范围为 [0,100],其中:
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
Note: 该方法仅适用于 macOS。
Declared In
AgoraRtcEngineKit.h
– adjustPlaybackSignalVolume:
调节本地播放的所有远端用户的信号音量
- (int)adjustPlaybackSignalVolume:(NSInteger)volume
Parameters
volume |
播放音量。取值范围为 [0,400],其中:
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法在加入频道前后都能调用。
Note
- 该方法调节的是本地播放的所有远端用户混音后的音量。
- 从 v2.3.2 开始,静音本地音频需同时调用
adjustPlaybackSignalVolume
和 adjustAudioMixingPlayoutVolume 方法,并将volume
参数设置为 0。
Declared In
AgoraRtcEngineKit.h
– enableAudioVolumeIndication:smooth:report_vad:
启用用户音量提示
- (int)enableAudioVolumeIndication:(NSInteger)interval smooth:(NSInteger)smooth report_vad:(BOOL)report_vad
Parameters
interval |
指定音量提示的时间间隔:
|
---|---|
smooth |
指定音量提示的灵敏度。取值范围为 [0,10],建议值为 3,数字越大,波动越灵敏;数字越小,波动越平滑。 |
report_vad |
|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法允许 SDK 定期向 app 报告本地发流用户和瞬时音量最高的远端用户(最多 3 位)的音量相关信息。启用该方法后,只要频道内有发流用户,SDK 会在加入频道后按设置的时间间隔触发 reportAudioVolumeIndicationOfSpeakers 回调。
该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
– enableLocalVoicePitchCallback:
开启本地语音音调回调。
- (int)enableLocalVoicePitchCallback:(NSInteger)interval
Parameters
interval |
设置 SDK 触发
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.7.0
该方法允许 SDK 定期向 app 报告本地用户的语音音调。开启本地音频采集并调用该方法后,SDK 会按设置的时间间隔触发 reportLocalVoicePitchFrequency 回调。
Discussion
Note: 该方法在加入频道前后均可调用。
Declared In
AgoraRtcEngineKit.h
– enableLocalAudio:
开关本地音频采集
- (int)enableLocalAudio:(BOOL)enabled
Parameters
enabled |
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
当 App 加入频道时,它的语音功能默认是开启的。该方法可以关闭或重新开启本地语音功能,即停止或重新开始本地音频采集。
该方法不影响接收远端音频流,enableLocalAudio(NO)
适用于只听不发的用户场景。
语音功能关闭或重新开启后,会收到 localAudioStateChange 回调并报告 AgoraAudioLocalStateStopped(0)
或 AgoraAudioLocalStateRecording(1)
。
Note:
- 该方法在加入频道前后均可调用。在加入频道前调用只能设置设备状态,在加入频道后才会立即生效。
该方法与 muteLocalAudioStream 的区别在于:
- enableLocalAudio:开启或关闭本地语音采集及处理。使用
enableLocalAudio
关闭或开启本地采集后,本地听远端播放会有短暂中断。 - muteLocalAudioStream:停止或继续发送本地音频流。
- enableLocalAudio:开启或关闭本地语音采集及处理。使用
Declared In
AgoraRtcEngineKit.h
– muteLocalAudioStream:
取消或恢复发布本地音频流。
- (int)muteLocalAudioStream:(BOOL)mute
Parameters
mute |
是否取消发布本地音频流:
|
---|
Return Value
- 0: 方法调用成功。
< 0: 方法调用失败。
-5
(AgoraErrorCodeRefused
): 调用被拒绝。
Discussion
自 v3.4.5 起,该方法仅设置用户在 AgoraRtcEngineKit
频道中的音频发布状态。
成功调用该方法后,远端会触发 didAudioMuted 回调。
同一时间,本地的音视频流只能发布到一个频道。如果你创建了多个频道,请确保你只在一个频道中调用
muteLocalAudioStream(NO)
,否则方法会调用失败并返回 -5 (AgoraErrorCodeRefused)
。
Note:
- 该方法不会改变音频采集设备的使用状态。
- 该方法的调用是否生效受 joinChannelByToken 和 setClientRole 方法的影响,详见《设置发布状态》。
Declared In
AgoraRtcEngineKit.h
– muteRemoteAudioStream:mute:
取消或恢复订阅指定远端用户的音频流。
- (int)muteRemoteAudioStream:(NSUInteger)uid mute:(BOOL)mute
Parameters
uid |
指定用户的用户 ID。 |
---|---|
mute |
是否取消订阅指定远端用户的音频流。
|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
Note
- 该方法需要在加入频道后调用。
- 该方法的推荐设置详见《设置订阅状态》。
Declared In
AgoraRtcEngineKit.h
– muteAllRemoteAudioStreams:
取消或恢复订阅所有远端用户的音频流。
- (int)muteAllRemoteAudioStreams:(BOOL)mute
Parameters
mute |
是否取消订阅所有远端用户的音频流。
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
成功调用该方法后,本地用户会取消或恢复订阅所有远端用户的音频流, 包括在调用该方法后加入频道的用户的音频流。
Note
- 该方法需要在加入频道后调用。
- 自 v3.3.0 起,该方法包含了
setDefaultMuteAllRemoteAudioStreams
的功能。声网建议不要一起调用
muteAllRemoteAudioStreams
和setDefaultMuteAllRemoteAudioStreams
,否则设置可能会不生效。详见《设置订阅状态》。
Declared In
AgoraRtcEngineKit.h
– adjustUserPlaybackSignalVolume:volume:
调节本地播放的指定远端用户的信号音量。
- (int)adjustUserPlaybackSignalVolume:(NSUInteger)uid volume:(int)volume
Parameters
uid |
远端用户 ID,需和远端用户加入频道时用的 uid 一致。 |
---|---|
volume |
播放音量。取值范围为 [0,100],其中:
|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
加入频道后,你可以多次调用该方法调节不同远端用户在本地播放的音量,或对某个远端用户在本地播放的音量调节多次。
Note
- 该方法要在加入频道后调用。
- 该方法调节的是本地播放的指定远端用户混音后的音量。
- 该方法每次只能调整一位远端用户在本地播放的音量。若需调整多位远端用户在本地播放的音量,则需多次调用该方法。
Declared In
AgoraRtcEngineKit.h
视频核心方法
– enableVideo
启用视频模块
- (int)enableVideo
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法用于打开视频模式。可以在加入频道前或者通话中调用,在加入频道前调用,则自动开启视频模式,在通话中调用则由音频模式切换为视频模式。调用 disableVideo 方法可关闭视频模式。
成功调用该方法后,远端会触发 didVideoEnabled(YES) 回调。
Note:
- 该方法设置的是内部引擎为启用状态,在 leaveChannel 后仍然有效。
该方法重置整个引擎,响应速度较慢,因此声网建议使用如下方法来控制视频模块:
- enableLocalVideo:是否启动摄像头采集并创建本地视频流
- muteLocalVideoStream:是否发布本地视频流
- muteRemoteVideoStream:是否接收并播放远端视频流
- muteAllRemoteVideoStreams:是否接收并播放所有远端视频流
Declared In
AgoraRtcEngineKit.h
– disableVideo
关闭视频模块
- (int)disableVideo
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法用于关闭视频。可以在加入频道前或者通话中调用,在加入频道前调用,则自动开启纯音频模式,在通话中调用则由视频模式切换为纯音频模式。调用 enableVideo 方法可开启视频模式。
成功调用该方法后,远端会触发 didVideoEnabled(NO) 回调。
Note:
该方法设置的是内部引擎为禁用状态,在 leaveChannel 后仍然有效。
该方法重置整个引擎,响应速度较慢,因此声网建议使用如下方法来控制视频模块:
- enableLocalVideo:是否启动摄像头采集并创建本地视频流
- muteLocalVideoStream:是否发布本地视频流
- muteRemoteVideoStream:是否接收并播放远端视频流
- muteAllRemoteVideoStreams:是否接收并播放所有远端视频流
Declared In
AgoraRtcEngineKit.h
– setVideoEncoderConfiguration:
设置视频编码配置
- (int)setVideoEncoderConfiguration:(AgoraVideoEncoderConfiguration *_Nonnull)config
Parameters
config |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法设置视频编码配置。每个配置对应一套视频参数,如分辨率、帧率、码率、视频方向等。 所有设置的参数均为理想情况下的最大值。当视频引擎因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,会取最接近最大值的那个值。
如果加入频道后不需要重新设置视频编码配置,声网建议在 enableVideo 之前调用该方法,可以加快首帧出图时间。
该方法在加入频道前后都能调用。
Note:
在 v2.3.0 版本中,如下接口已废弃,声网不再推荐使用:
Declared In
AgoraRtcEngineKit.h
– setupLocalVideo:
初始化本地视图。
- (int)setupLocalVideo:(AgoraRtcVideoCanvas *_Nullable)local
Parameters
local |
通过 AgoraRtcVideoCanvas 设置本地视频显示属性。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法初始化本地视图并设置本地用户视频显示信息,只影响本地用户看到的视频画面,不影响本地发布视频。调用该方法绑定本地视频流的显示视窗(view
),并设置本地用户视图的渲染模式和镜像模式。在 App 开发中,通常在初始化后调用该方法进行本地视频设置,然后再加入频道。退出频道后,绑定仍然有效,如果需要解除绑定,可以指定空 (nil
) view 调用本方法。
该方法在加入频道前后都能调用。
Note
如果你希望在通话中更新本地用户视图的渲染或镜像模式,请使用 setLocalRenderMode 方法。
Declared In
AgoraRtcEngineKit.h
– setupRemoteVideo:
初始化远端用户视图。
- (int)setupRemoteVideo:(AgoraRtcVideoCanvas *_Nonnull)remote
Parameters
remote |
通过 AgoraRtcVideoCanvas 设置远端视频显示属性。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法绑定远端用户和显示视图,并设置远端用户视图在本地显示时的渲染模式和镜像模式,只影响本地用户看到的视频画面。调用该接口时需要指定远端用户的 uid
,一般可以在进频道前提前设置好。
如果 App 不能事先知道对方的 uid
,可以在 APP 收到 didJoinedOfUid 事件时设置。如果启用了视频录制功能,视频录制服务会做为一个哑客户端加入频道,因此其他客户端也会收到它的 didJoinedOfUid 事件,App 不应给它绑定视图(因为它不会发送视频流),如果 App 不能识别哑客户端,可以在 firstRemoteVideoDecodedOfUid 事件时再绑定视图。解除某个用户的绑定视图可以把 view 设置为空。退出频道后,SDK 会把远端用户的绑定关系清除掉。
Note: 如果你希望在通话中更新远端用户视图的渲染或镜像模式,请使用 setRemoteRenderMode 方法。
Declared In
AgoraRtcEngineKit.h
– setLocalRenderMode:mirrorMode:
更新本地视图显示模式。
- (int)setLocalRenderMode:(AgoraVideoRenderMode)renderMode mirrorMode:(AgoraVideoMirrorMode)mirrorMode
Parameters
renderMode |
本地视图的渲染模式,详见 AgoraVideoRenderMode |
---|---|
mirrorMode |
本地视图的镜像模式,详见 AgoraVideoMirrorMode Note 如果你使用前置摄像头,默认启动本地用户视图镜像模式;如果你使用后置摄像头,默认关闭本地视图镜像模式。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
自从 v3.0.0
初始化本地用户视图后,你可以调用该方法更新本地用户视图的渲染和镜像模式。该方法只影响本地用户看到的视频画面,不影响本地发布视频。
Note
- 请在调用 setupLocalVideo 方法初始化本地视图后,调用该方法。
- 你可以在通话中多次调用该方法,多次更新本地用户视图的显示模式。
Declared In
AgoraRtcEngineKit.h
– setRemoteRenderMode:renderMode:mirrorMode:
更新远端视图显示模式。
- (int)setRemoteRenderMode:(NSUInteger)uid renderMode:(AgoraVideoRenderMode)renderMode mirrorMode:(AgoraVideoMirrorMode)mirrorMode
Parameters
uid |
远端用户 ID。 |
---|---|
renderMode |
远端用户视图的渲染模式,详见 AgoraVideoRenderMode 。 |
mirrorMode |
远端用户视图的镜像模式,详见 AgoraVideoMirrorMode 。 Note 默认关闭远端用户的镜像模式。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
自从 v3.0.0
初始化远端用户视图后,你可以调用该方法更新远端用户视图在本地显示时的渲染和镜像模式。该方法只影响本地用户看到的视频画面。
Note
- 请在调用 setupRemoteVideo 方法初始化远端视图后,调用该方法。
- 你可以在通话中多次调用该方法,多次更新远端用户视图的显示模式。
Declared In
AgoraRtcEngineKit.h
– startPreview
开启视频预览
- (int)startPreview
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法用于在进入频道前启动本地视频预览。本地预览默认开启镜像功能。
调用该 API 前,必须
- 调用 setupLocalVideo 设置预览窗口及属性
- 调用 enableVideo 开启视频功能
启用了本地视频预览后,如果调用 leaveChannel 退出频道,本地预览依然处于启动状态,如需要关闭本地预览,需要调用 stopPreview 。
Declared In
AgoraRtcEngineKit.h
– stopPreview
停止本地视频预览
- (int)stopPreview
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
– enableLocalVideo:
开关本地视频采集
- (int)enableLocalVideo:(BOOL)enabled
Parameters
enabled |
是否启用本地视频:
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法禁用或重新启用本地视频采集,不影响接收远端视频。
调用 enableVideo 后,本地视频即默认开启。你可以调用 enableLocalVideo(NO) 关闭本地视频采集。关闭后如果想要重新开启,则可调用 enableLocalVideo(YES)。
成功禁用或启用本地视频采集后,远端会触发 remoteVideoStateChangedOfUid 回调。
该方法在加入频道前后都能调用。
Note:
该方法设置的是内部引擎为启用/禁用状态,在 leaveChannel 后仍然有效。
Declared In
AgoraRtcEngineKit.h
– muteLocalVideoStream:
取消或恢复发布本地视频流。
- (int)muteLocalVideoStream:(BOOL)mute
Parameters
mute |
是否取消发布本地视频流:
|
---|
Return Value
- 0: 方法调用成功。
< 0: 方法调用失败。
-5
(AgoraErrorCodeRefused
): 调用被拒绝。
Discussion
自 v3.4.5 起,该方法仅设置用户在 AgoraRtcEngineKit
频道中的视频发布状态。
成功调用该方法后,远端会触发 didVideoMuted 回调。
同一时间,本地的音视频流只能发布到一个频道。如果你创建了多个频道,请确保你只在一个频道中调用
muteLocalVideoStream(NO)
,否则方法会调用失败并返回 -5 (AgoraErrorCodeRefused)
。
Note:
- 该方法不会改变视频采集设备的使用状态。
- 该方法的调用是否生效受 joinChannelByToken 和 setClientRole 方法的影响,详见《设置发布状态》。
Declared In
AgoraRtcEngineKit.h
– muteAllRemoteVideoStreams:
取消或恢复订阅所有远端用户的视频流。
- (int)muteAllRemoteVideoStreams:(BOOL)mute
Parameters
mute |
是否取消订阅所有远端用户的视频流。
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
成功调用该方法后,本地用户会取消或恢复订阅所有远端用户的视频流, 包括在调用该方法后加入频道的用户的视频流。
Note
- 该方法需要在加入频道后调用。
- 自 v3.3.0 起,该方法包含了
setDefaultMuteAllRemoteVideoStreams
的功能。声网建议不要一起调用
muteAllRemoteVideoStreams
和setDefaultMuteAllRemoteVideoStreams
,否则设置可能会不生效。详见《设置订阅状态》。
Declared In
AgoraRtcEngineKit.h
– muteRemoteVideoStream:mute:
取消或恢复订阅指定远端用户的视频流。
- (int)muteRemoteVideoStream:(NSUInteger)uid mute:(BOOL)mute
Parameters
uid |
指定用户的用户 ID。 |
---|---|
mute |
是否取消订阅指定远端用户的视频流。
|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
Note
- 该方法需要在加入频道后调用。
- 该方法的推荐设置详见《设置订阅状态》。
Declared In
AgoraRtcEngineKit.h
视频前处理及后处理
– setBeautyEffectOptions:options:
设置美颜效果选项。
- (int)setBeautyEffectOptions:(BOOL)enable options:(AgoraBeautyOptions *_Nullable)options
Parameters
enable |
是否开启美颜功能:
|
---|---|
options |
美颜选项,详见 AgoraBeautyOptions |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
开启本地美颜功能,并设置美颜效果选项。
Note:
- 请在调用 enableVideo 方法后,调用该方法。
- 声网从 3.6.0 版起更新了基础美颜算法,能提升基础美颜效果并支持锐度调节功能。如果你想体验优化后的基础美颜效果或设置锐度,请在调用该方法前,将
AgoraVideoProcessExtension.xcframework
动态库集成到项目文件中。
Declared In
AgoraRtcEngineKit.h
– setLowlightEnhanceOptions:options:
设置暗光增强功能。
- (int)setLowlightEnhanceOptions:(BOOL)enable options:(AgoraLowlightEnhanceOptions *_Nullable)options
Parameters
enable |
是否开启暗光增强功能:
|
---|---|
options |
暗光增强选项,用于设置暗光增强的效果。详见 AgoraLowLightEnhanceOptions。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.6.2
暗光增强功能可以在光线亮度偏低(如背光、阴天、暗场景)和亮度不均匀的环境下自适应调整视频画面的亮度值,恢复或凸显图像的细节信息,最终提升视频图像的整体视觉效果。
你可以调用该方法开启暗光增强功能并设置暗光增强的效果。
Note:
- 调用该方法前,请确保已集成
AgoraVideoProcessExtension.xcframework
动态库。 - 请在 enableVideo 后调用该方法。
- 暗光增强对设备性能有一定要求。开启暗光增强后,如果设备出现严重发烫等问题,声网推荐你将暗光增强等级修改为消耗性能较少的等级或关闭暗光增强功能。
Declared In
AgoraRtcEngineKit.h
– setVideoDenoiserOptions:options:
设置视频降噪功能。
- (int)setVideoDenoiserOptions:(BOOL)enable options:(AgoraVideoDenoiserOptions *_Nullable)options
Parameters
enable |
是否开启视频降噪功能:
|
---|---|
options |
视频降噪选项,用于设置视频降噪的效果。详见 AgoraVideoDenoiserOptions 。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.6.2
采光不足的环境和低端视频采集设备会使视频图像含有明显的噪声,影响视频画质。在实时互动场景下,视频噪声还会在编码过程中占用码流资源并降低编码效率。
你可以调用该方法开启视频降噪功能并设置视频降噪的效果。
Note:
- 调用该方法前,请确保已集成
AgoraVideoProcessExtension.xcframework
动态库。 - 请在 enableVideo 后调用该方法。
- 视频降噪对设备性能有一定要求。开启视频降噪后,如果设备出现严重发烫等问题,声网推荐你将视频降噪等级修改为消耗性能较少的等级或关闭视频降噪功能。
Declared In
AgoraRtcEngineKit.h
– setColorEnhanceOptions:options:
设置色彩增强功能。
- (int)setColorEnhanceOptions:(BOOL)enable options:(AgoraColorEnhanceOptions *_Nullable)options
Parameters
enable |
是否开启色彩增强功能:
|
---|---|
options |
色彩增强选项,用于设置色彩增强的效果。详见 AgoraColorEnhanceOptions 。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.6.2
摄像头采集到的视频画面可能存在色彩失真的现象。色彩增强功能可以通过智能调节饱和度和对比度等视频特性,提升视频色彩丰富度和色彩还原度,最终使视频画面更生动。
你可以调用该方法开启色彩增强功能并设置色彩增强的效果。
Note:
- 调用该方法前,请确保已集成
AgoraVideoProcessExtension.xcframework
动态库。 - 请在 enableVideo 后调用该方法。
- 色彩增强对设备性能有一定要求。开启色彩增强后,如果设备出现严重发烫等问题,声网推荐你将色彩增强等级修改为消耗性能较少的等级或关闭色彩增强功能。
Declared In
AgoraRtcEngineKit.h
– enableVirtualBackground:backData:
开启/关闭虚拟背景。
- (int)enableVirtualBackground:(BOOL)enable backData:(AgoraVirtualBackgroundSource *_Nullable)backData
Parameters
enable |
设置是否开启虚拟背景:
|
---|---|
backData |
自定义的背景图。详见 AgoraVirtualBackgroundSource 。 Note:为将自定义背景图的分辨率与 SDK 的视频采集分辨率适配, SDK 会在保证自定义背景图内容不变形的前提下,对自定义背景图进行缩放和裁剪。 |
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Availability
自 v3.4.5 起支持 macOS 平台,自 v3.5.0 起支持 iOS 平台。
开启虚拟背景功能后,你可以使用自定义的背景图替代本地用户原来的背景图。替换后, 频道内所有用户都能看到自定义的背景图。你可以从 virtualBackgroundSourceEnabled 回调了解虚拟背景是否成功开启和相应的出错原因。
Note:
- 调用该方法前,请确保你已经将
AgoraVideoSegmentationExtension.xcframework
动态库集成到项目中。 - 请在 enableVideo 后调用该方法。
- 对早于 3.6.1 版,虚拟背景功能不支持 Texture 格式视频和来自 Push 自采集的视频。
该功能对设备性能要求较高,声网推荐你在如下设备上使用:
- macOS:CPU 为 i5 及更好的设备
iOS:搭载 A9 及以上芯片的如下设备:
- iPhone 6S 及以上
- iPad Air 第三代及以上
- iPad 第五代及以上
- iPad Pro 第一代及以上
- iPad mini 第五代及以上
声网建议你在满足如下条件的场景中使用该功能:
- 使用高清摄像设备、摄像环境光照均匀。
- 摄像画面中,物件较少,用户的人像为半身人像且基本无遮挡,背景色较单一且与用户着装颜色不同。
Declared In
AgoraRtcEngineKit.h
– enableRemoteSuperResolution:mode:uid:
开启/关闭远端视频超分辨率。(beta 功能)
- (int)enableRemoteSuperResolution:(BOOL)enabled mode:(AgoraVideoSRMode)mode uid:(NSUInteger)uid
Parameters
enabled |
是否对远端视频开启超级分辨率:
|
---|---|
mode |
超分辨率的模式。详见 AgoraVideoSRMode 。 |
uid |
远端用户 ID。该参数仅在 |
Return Value
- 0: 方法调用成功
< 0: 方法调用失败
- -157(
AgoraErrorCodeModuleNotFound
): 尚未集成超分辨率动态库。
- -157(
Availability
v3.7.1
该功能可以有效地提升用户看到的远端视频画面的分辨率,即对接收到的某个远端用户的视频宽和高均扩大为 2 倍像素。
调用该方法后,SDK 会触发 superResolutionEnabledOfUid 回调报告超分辨率是否成功开启。
Discussion
Note: 调用该方法前,请确保你已经将 AgoraSuperResolutionExtension.xcframework
动态库集成到项目中。
使用限制: 超分辨率功能会额外耗费系统资源。为平衡视觉体验和系统消耗,该功能有如下使用限制:
- 只可以对一个远端用户开启超分辨率。
- 远端用户视频的原始分辨率不能超过 640 × 360。
- 该功能不支持在部分低端机型上开启。
Declared In
AgoraRtcEngineKit.h
人脸检测
– enableFaceDetection:
开启/关闭本地人脸检测。
- (int)enableFaceDetection:(bool)enable
Parameters
enable |
是否开启人脸检测:
|
---|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Discussion
自从: v3.0.1.
开启本地人脸检测后,SDK 会触发 facePositionDidChangeWidth 回调向你报告人脸检测的信息:
- 摄像头采集的画面大小
- 人脸在 View 中的位置
- 人脸距设备屏幕的距离
Note
- 该方法在加入频道前后都能调用。
- 该方法仅使用于 iOS 平台。
Declared In
AgoraRtcEngineKit.h
音频播放路由
– setDefaultAudioRouteToSpeakerphone:
设置默认的音频路由。
- (int)setDefaultAudioRouteToSpeakerphone:(BOOL)defaultToSpeaker
Parameters
defaultToSpeaker |
设置默认的音频路由:
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
如果 SDK 默认的音频路由(见《设置音频路由》)无法满足你的需求, 你可以调用该方法切换默认的音频路由。成功切换音频路由后,SDK 会触发 didAudioRouteChanged 回调提示音频路由已更改。
Note
- 该方法仅适用于 iOS 平台。
- 该方法需要在 joinChannelByToken 前调用。如需在加入频道后切换音频路由,请调用 setEnableSpeakerphone。
- 如果用户使用了蓝牙耳机、有线耳机等外接音频播放设备,则该方法的设置无效, 音频只会通过外接设备播放。当有多个外接设备时,音频会通过最后一个接入的设备播放。
Declared In
AgoraRtcEngineKit.h
– setEnableSpeakerphone:
开启/关闭扬声器播放。
- (int)setEnableSpeakerphone:(BOOL)enableSpeaker
Parameters
enableSpeaker |
设置是否开启扬声器播放:
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
如果 SDK 默认的音频路由(见《设置音频路由》)或
setDefaultAudioRouteToSpeakerphone
的设置无法满足你的需求,你可以调用 setEnableSpeakerphone
切换当前的音频路由。
成功切换音频路由后,SDK 会触发
didAudioRouteChanged
回调提示音频路由已更改。
该方法只设置用户在当前频道内使用的音频路由,不会影响 SDK 默认的音频路由。 如果用户离开当前频道并加入新的频道,则用户还是会使用 SDK 默认的音频路由。
Note
- 该方法仅适用于 iOS 平台。
- 该方法需要在 joinChannelByToken 后调用。
- 如果用户使用了蓝牙耳机、有线耳机等外接音频播放设备,则该方法的设置无效, 音频只会通过外接设备播放。当有多个外接设备时,音频会通过最后一个接入的设备播放。
Declared In
AgoraRtcEngineKit.h
– isSpeakerphoneEnabled
查询扬声器启用状态
- (BOOL)isSpeakerphoneEnabled
Return Value
- YES: 扬声器已开启,语音会输出到扬声器
- NO: 扬声器未开启,语音会输出到非扬声器(听筒、耳机等)
Discussion
该方法仅适用于 iOS。 该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
耳返设置
– enableInEarMonitoring:
开启耳返功能
- (int)enableInEarMonitoring:(BOOL)enabled
Parameters
enabled |
|
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法在加入频道前后都能调用。
Note
- 该方法仅适用于 iOS 平台。
- 用户必须使用耳机(有线和蓝牙均可)才能听到耳返效果。
Declared In
AgoraRtcEngineKit.h
– setInEarMonitoringVolume:
设置耳返音量
- (int)setInEarMonitoringVolume:(NSInteger)volume
Parameters
volume |
设置耳返音量,取值范围在 [0,100]。默认值为 100 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法在加入频道前后都能调用。
Note
- 该方法仅适用于 iOS 平台。
- 用户必须使用耳机(有线和蓝牙均可)才能听到耳返效果。
Declared In
AgoraRtcEngineKit.h
设置人声效果
– setLocalVoicePitch:
设置本地语音音调
- (int)setLocalVoicePitch:(double)pitch
Parameters
pitch |
语音频率。可以在 [0.5,2.0] 范围内设置。取值越小,则音调越低。默认值为 1.0,表示不需要修改音调。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法改变本地说话人声音的音调。该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
– setLocalVoiceEqualizationOfBandFrequency:withGain:
设置本地语音音效均衡
- (int)setLocalVoiceEqualizationOfBandFrequency:(AgoraAudioEqualizationBandFrequency)bandFrequency withGain:(NSInteger)gain
Parameters
bandFrequency |
频谱子带索引,取值范围是 [0,9],分别代表 10 个 频带,对应的中心频率是 [31,62,125,250,500,1k,2k,4k,8k,16k] Hz,详见 AgoraAudioEqualizationBandFrequency 。 |
---|---|
gain |
每个 band 的增益,单位是 dB,每一个值的范围是 [-15,15],默认值为 0。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
– setLocalVoiceReverbOfType:withValue:
设置本地音效混响
- (int)setLocalVoiceReverbOfType:(AgoraAudioReverbType)reverbType withValue:(NSInteger)value
Parameters
reverbType |
混响音效类型,详见 AgoraAudioReverbType |
---|---|
value |
设置混响音效的效果数值,各混响音效对应的取值范围请参考 AgoraAudioReverbType |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
SDK 在 v3.2.0 版本中提供一个使用更为简便的方法 setAudioEffectPreset,直接实现流行、R&B、KTV 等预置的混响效果。
该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
– setVoiceBeautifierPreset:
设置 SDK 预设的美声效果。
- (int)setVoiceBeautifierPreset:(AgoraVoiceBeautifierPreset)preset
Parameters
preset |
预设的美声效果选项:AgoraVoiceBeautifierPreset。 |
---|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Availability
v3.2.0
调用该方法可以为本地发流用户设置 SDK 预设的人声美化效果。设置美声效果后,频道内所有用户都能听到该效果。根据不同的场景,你可以为用户设置不同的美声效果, 各美声效果的适用场景可参考《设置人声效果》。
为获取更好的人声效果,声网推荐你在调用该方法前将 setAudioProfile 的 scenario
设为
AgoraAudioScenarioGameStreaming(3)
,并将 profile
设为 AgoraAudioProfileMusicHighQuality(4)
或 AgoraAudioProfileMusicHighQualityStereo(5)
。
Note
- 该方法在加入频道前后都能调用。
- 请勿将
setAudioProfile
的profile
参数设置为AgoraAudioProfileSpeechStandard(1)
,否则该方法不生效。 - 该方法对人声的处理效果最佳,声网不推荐调用该方法处理含音乐的音频数据。
调用该方法后,声网不推荐调用以下方法,否则该方法设置的效果会被覆盖:
Declared In
AgoraRtcEngineKit.h
– setVoiceBeautifierParameters:param1:param2:
设置 SDK 预设美声效果的参数。
- (int)setVoiceBeautifierParameters:(AgoraVoiceBeautifierPreset)preset param1:(int)param1 param2:(int)param2
Parameters
preset |
SDK 预设的音效:
|
---|---|
param1 |
歌声的性别特征:
|
param2 |
歌声的混响效果:
|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Availability
v3.3.0
调用该方法可以设置歌唱美声效果的性别特征和混响效果。该方法对本地发流用户进行设置。设置后,频道内所有用户都能听到该效果。
为获取更好的人声效果,声网推荐你在调用该方法前将 setAudioProfile
的 scenario
设为 AgoraAudioScenarioGameStreaming(3)
,并将 profile
设为 AgoraAudioProfileMusicHighQuality(4)
或
AgoraAudioProfileMusicHighQualityStereo(5)
。
Note
- 该方法在加入频道前后都能调用。
- 请勿将
setAudioProfile
的profile
参数设置为AgoraAudioProfileSpeechStandard(1)
,否则该方法不生效。 - 该方法对人声的处理效果最佳,声网不推荐调用该方法处理含音乐的音频数据。
调用该方法后,声网不推荐调用以下方法,否则该方法设置的效果会被覆盖:
Declared In
AgoraRtcEngineKit.h
– setAudioEffectPreset:
设置 SDK 预设的人声音效。
- (int)setAudioEffectPreset:(AgoraAudioEffectPreset)preset
Parameters
preset |
预设的音效选项:AgoraAudioEffectPreset。 |
---|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Availability
v3.2.0
调用该方法可以为本地发流用户设置 SDK 预设的人声音效,且不会改变原声的性别特征。设置音效后,频道内所有用户都能听到该效果。
根据不同的场景,你可以为用户设置不同的音效,各音效的适用场景可参考《设置人声效果》。
为获取更好的人声效果,声网推荐你在调用该方法前将 setAudioProfile 的 scenario
设为 AgoraAudioScenarioGameStreaming(3)
。
Note:
- 该方法在加入频道前后都能调用。
- 请勿将
setAudioProfile
的profile
参数设置为AgoraAudioProfileSpeechStandard(1)
,否则该方法不生效。 - 该方法对人声的处理效果最佳,声网不推荐调用该方法处理含音乐的音频数据。
- 如果调用该方法并设置除
AgoraRoomAcoustics3DVoice
或AgoraPitchCorrection
外的枚举,请勿再调用 setAudioEffectParameters,否则该方法设置的效果会被覆盖。 调用该方法后,声网不推荐调用以下方法,否则该方法设置的效果会被覆盖:
Declared In
AgoraRtcEngineKit.h
– setVoiceConversionPreset:
设置 SDK 预设的变声效果。
- (int)setVoiceConversionPreset:(AgoraVoiceConversionPreset)preset
Parameters
preset |
预设的变声效果选项:AgoraVoiceConversionPreset。 |
---|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Availability
v3.3.1
调用该方法可以为本地发流用户设置 SDK 预设的变声效果。设置变声效果后,频道内所有用户都能听到该效果。 根据不同的场景,你可以为用户设置不同的变声效果,各变声效果的适用场景可参考《设置人声效果》。
为获取更好的人声效果,声网推荐你在调用该方法前将 setAudioProfile
的 profile
设为 AgoraAudioProfileMusicHighQuality(4)
或 AgoraAudioProfileMusicHighQualityStereo(5)
,并将
scenario
设为 AgoraAudioScenarioGameStreaming(3)
。
Note:
- 该方法在加入频道前后都能调用。
- 请勿将
setAudioProfile
的profile
参数设置为AgoraAudioProfileSpeechStandard(1)
,否则该方法不生效。 - 该方法对人声的处理效果最佳,声网不推荐调用该方法处理含音乐的音频数据。
调用该方法后,声网不推荐调用以下方法,否则该方法设置的效果会被覆盖:
Declared In
AgoraRtcEngineKit.h
– setAudioEffectParameters:param1:param2:
设置 SDK 预设人声音效的参数。
- (int)setAudioEffectParameters:(AgoraAudioEffectPreset)preset param1:(int)param1 param2:(int)param2
Parameters
preset |
SDK 预设的音效:
|
---|---|
param1 |
|
param2 |
|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Availability
v3.2.0
调用该方法可以对本地发流用户进行如下设置:
- 3D 人声音效:设置 3D 人声音效的环绕周期。
- 电音音效:设置电音音效的基础调式和主音音高。为方便用户自行调节电音音效,声网推荐你将基础调式和主音音高配置选项与应用的 UI 元素绑定。
设置后,频道内所有用户都能听到该效果。
Note:
- 该方法在加入频道前后都能调用。
- 为获取更好的人声效果,声网推荐你在调用该方法前将 setAudioProfile 的
scenario
设为AgoraAudioScenarioGameStreaming(3)
。 - 请勿将
setAudioProfile
的profile
参数设置为AgoraAudioProfileSpeechStandard(1)
,否则该方法不生效。 - 该方法对人声的处理效果最佳,声网不推荐调用该方法处理含音乐的音频数据。
调用该方法后,声网不推荐调用以下方法,否则该方法设置的效果会被覆盖:
Declared In
AgoraRtcEngineKit.h
听声辨位
– enableSoundPositionIndication:
开启/关闭远端用户的语音立体声。
- (int)enableSoundPositionIndication:(BOOL)enabled
Parameters
enabled |
是否开启远端用户语音立体声:
- |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
如果想调用 setRemoteVoicePosition 实现听声辨位的功能,请确保在加入频道前调用本方法开启远端用户的语音立体声。
Declared In
AgoraRtcEngineKit.h
– setRemoteVoicePosition:pan:gain:
设置远端用户的语音位置
- (int)setRemoteVoicePosition:(NSUInteger)uid pan:(double)pan gain:(double)gain
Parameters
uid |
远端用户的 ID |
---|---|
pan |
设置远端用户声音的空间位置,取值范围为 [-1.0,1.0]:
|
gain |
设置远端用户声音的音量,取值范围为 [0.0,100.0],默认值为 100.0,表示该用户的原始音量。取值越小,则音量越低。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
设置远端用户声音的空间位置和音量,方便本地用户听声辨位。
通过调用该接口设置远端用户声音出现的位置,左右声道的声音差异会产生声音的方位感,从而判断出远端用户的实时位置。在多人在线游戏场景,如吃鸡游戏中,该方法能有效增加游戏角色的方位感,模拟真实场景。
Note:
- 该方法需要在加入频道后调用。使用该方法需要在加入频道前调用 enableSoundPositionIndication 开启远端用户的语音立体声
为获得最佳听觉体验,我们建议:
- 在 iOS 使用该方法时佩戴有线耳机
- 在 macOS 使用该方法时使用立体声外放
Declared In
AgoraRtcEngineKit.h
音乐文件播放及混音设置
– startAudioMixing:loopback:replace:cycle:startPos:
开始播放音乐文件。
- (int)startAudioMixing:(NSString *_Nonnull)filePath loopback:(BOOL)loopback replace:(BOOL)replace cycle:(NSInteger)cycle startPos:(NSInteger)startPos
Parameters
filePath |
音乐文件的绝对路径或 URL 地址,需精确到文件名及后缀。例如: |
---|---|
loopback |
是否只在本地播放音乐文件:
|
replace |
是否用音乐文件替换麦克风采集的音频:
|
cycle |
音乐文件的播放次数。
|
startPos |
音乐文件的播放位置,单位为毫秒。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.4.0
该方法支持将本地或在线音乐文件和麦克风采集的音频进行混音或替换。成功播放音乐文件后,本地会触发
localAudioMixingStateDidChanged(AgoraAudioMixingStatePlaying, AgoraAudioMixingReasonStartedByUser)
回调。
播放结束后,本地会触发 localAudioMixingStateDidChanged(AgoraAudioMixingStateStopped, AgoraAudioMixingReasonAllLoopsCompleted)
回调。
Note:
- 为避免阻塞,自 v3.4.5 起,该方法由同步调用改为异步调用。
- 如需多次调用
startAudioMixing
,请确保调用间隔大于 500 ms。 - 如果本地音乐文件不存在、文件格式不支持或无法访问在线音乐文件 URL,则 SDK 会报告
AgoraWarningCodeAudioMixingOpenError(701)
。 - 该方法支持的音频文件格式见 声网 RTC SDK 支持播放哪些格式的音频文件。
Declared In
AgoraRtcEngineKit.h
– setAudioMixingPlaybackSpeed:
设置当前音乐文件的播放速度。
- (int)setAudioMixingPlaybackSpeed:(int)speed
Parameters
speed |
播放速度。推荐取值范围为 [50,400],其中:
|
---|
Return Value
- 0: 方法调用成功.
- < 0: 方法调用失败.
Availability
v3.5.1
Discussion
Note: 你需要在调用 startAudioMixing 并收到
localAudioMixingStateDidChanged(AgoraAudioMixingStatePlaying
)
回调后调用该方法。
Declared In
AgoraRtcEngineKit.h
– stopAudioMixing
停止播放音乐文件
- (int)stopAudioMixing
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
请在频道内调用该方法。
Declared In
AgoraRtcEngineKit.h
– pauseAudioMixing
暂停播放音乐文件
- (int)pauseAudioMixing
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
请在频道内调用该方法。
Declared In
AgoraRtcEngineKit.h
– resumeAudioMixing
恢复播放音乐文件
- (int)resumeAudioMixing
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
请在频道内调用该方法。
Declared In
AgoraRtcEngineKit.h
– selectAudioTrack:
指定当前音乐文件的播放音轨。
- (int)selectAudioTrack:(NSInteger)index
Parameters
index |
指定的播放音轨。取值范围为 [0, |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.5.1
获取音乐文件的音轨数量后,你可以调用该方法指定任一音轨进行播放。例如, 如果一个多音轨文件的不同音轨存放了不同语言的歌曲,则你可以调用该方法设置音乐文件的播放语言。
Notes
- 你需要在调用 startAudioMixing 并收到
localAudioMixingStateDidChanged(
AgoraAudioMixingStatePlaying
) 回调后调用该方法。 - 该方法仅适用于 iOS。
- 该方法支持的音频文件格式见 声网 RTC SDK 支持播放哪些格式的音频文件。
Declared In
AgoraRtcEngineKit.h
– getAudioTrackCount
获取当前音乐文件的音轨数量。
- (int)getAudioTrackCount
Return Value
- > 0: 方法调用成功,返回当前音乐文件的音轨数量。
- < 0: 方法调用失败。
Availability
v3.5.1
Notes
- 你需要在调用 startAudioMixing 并收到
localAudioMixingStateDidChanged(
AgoraAudioMixingStatePlaying
) 回调后调用该方法。 - 该方法仅适用于 iOS。
- 该方法支持的音频文件格式见 声网 RTC SDK 支持播放哪些格式的音频文件。
Declared In
AgoraRtcEngineKit.h
– setAudioMixingDualMonoMode:
设置当前音乐文件的声道模式。
- (int)setAudioMixingDualMonoMode:(AgoraAudioMixingDualMonoMode)mode
Parameters
mode |
声道模式。详见 AgoraAudioMixingDualMonoMode 。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.5.1
在双声道音乐文件中,左声道和右声道可以存储不同的音频数据。根据实际需要, 你可以设置声道模式为原始模式、左声道模式、右声道模式或混合模式。例如,在 KTV 场景中, 音乐文件的左声道存储了伴奏,右声道存储了原唱的歌声。如果你只需听伴奏, 调用该方法设置音乐文件的声道模式为左声道模式;如果你需要同时听伴奏和原唱, 调用该方法设置声道模式为混合模式。
Notes
- 你需要在调用 startAudioMixing 并收到
localAudioMixingStateDidChanged(
AgoraAudioMixingStatePlaying
) 回调后调用该方法。 - 该方法仅适用于双声道的音乐文件。
Declared In
AgoraRtcEngineKit.h
– adjustAudioMixingVolume:
调节音乐文件的播放音量
- (int)adjustAudioMixingVolume:(NSInteger)volume
Parameters
volume |
音乐文件播放音量范围为 0~100。默认 100 为原始文件音量 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法调节混音的音乐文件在本地和远端播放的音量大小。该方法需要在 startAudioMixing 后调用。
Note:
- 调用该方法不影响调用 playEffect 播放音效文件的音量。
- 你需要在调用 startAudioMixing 并收到
localAudioMixingStateDidChanged(
AgoraAudioMixingStatePlaying
) 回调后调用该方法。
Declared In
AgoraRtcEngineKit.h
– adjustAudioMixingPlayoutVolume:
调节音乐文件在本地播放的音量
- (int)adjustAudioMixingPlayoutVolume:(NSInteger)volume
Parameters
volume |
音乐文件播放音量范围为 0~100。默认 100 为原始文件音量 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法调节混音的音乐文件在本地播放的音量大小。该方法需要在 startAudioMixing 后调用。
Declared In
AgoraRtcEngineKit.h
– adjustAudioMixingPublishVolume:
调节音乐文件在远端播放的音量
- (int)adjustAudioMixingPublishVolume:(NSInteger)volume
Parameters
volume |
音乐文件播放音量范围为 0~100。默认 100 为原始文件音量 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法调节混音的音乐文件在远端播放的音量大小。该方法需要在 startAudioMixing 后调用。
Declared In
AgoraRtcEngineKit.h
– getAudioMixingPublishVolume
获取音乐文件的远端播放音量
- (int)getAudioMixingPublishVolume
Return Value
- ≥ 0: 方法调用成功则返回音量值,范围为 [0,100]
- <0:方法调用失败
Discussion
该方法获取混音的音乐文件远端播放音量,方便排查音量相关问题。
Note: 你需要在调用 startAudioMixing 并收到
localAudioMixingStateDidChanged(AgoraAudioMixingStatePlaying
) 回调后调用该方法。
Declared In
AgoraRtcEngineKit.h
– getAudioMixingPlayoutVolume
获取音乐文件的本地播放音量
- (int)getAudioMixingPlayoutVolume
Return Value
- ≥ 0: 方法调用成功则返回音量值,范围为 [0,100]
- <0:方法调用失败
Discussion
该方法获取混音的音乐文件本地播放音量,方便排查音量相关问题。
Note: 你需要在调用 startAudioMixing 并收到
localAudioMixingStateDidChanged(AgoraAudioMixingStatePlaying
) 回调后调用该方法。
Declared In
AgoraRtcEngineKit.h
– getAudioMixingCurrentPosition
获取音乐文件播放进度,单位为毫秒。
- (int)getAudioMixingCurrentPosition
Return Value
- ≥ 0: 方法调用成功,返回当前音乐文件播放进度(ms)。0 表示当前音乐文件未开始播放。
- < 0: 方法调用失败
Discussion
Note:
- 你需要在调用 startAudioMixing 并收到
localAudioMixingStateDidChanged(
AgoraAudioMixingStatePlaying
) 回调后调用该方法。 - 如需多次调用
getAudioMixingCurrentPosition
,请确保调用间隔大于 500 ms。
Declared In
AgoraRtcEngineKit.h
– setAudioMixingPosition:
设置音频文件的播放位置
- (int)setAudioMixingPosition:(NSInteger)pos
Parameters
pos |
整数。进度条位置,单位为毫秒。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法可以设置音频文件的播放位置,这样你可以根据实际情况播放文件,而不是非得从头到尾播放一个文件。该方法需要在 startAudioMixing 后调用。
Declared In
AgoraRtcEngineKit.h
– setAudioMixingPitch:
调整本地播放的音乐文件的音调。
- (int)setAudioMixingPitch:(NSInteger)pitch
Parameters
pitch |
按半音音阶调整本地播放的音乐文件的音调,默认值为 0,即不调整音调。取值范围为 [-12,12],每相邻两个值的音高距离相差半音。取值的绝对值越大,音调升高或降低得越多。 |
---|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Declared In
AgoraRtcEngineKit.h
音效文件播放管理
– getEffectsVolume
获取音效文件播放音量,范围为 [0.0,100.0]。
- (double)getEffectsVolume
Return Value
- 方法调用成功返回音效的音量值
- < 0: 方法调用失败
Discussion
该方法需要在 playEffect 后调用。
Declared In
AgoraRtcEngineKit.h
– setEffectsVolume:
设置音效文件播放音量
- (int)setEffectsVolume:(double)volume
Parameters
volume |
取值范围为 [0.0,100.0]。 100.0 为默认值 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法需要在 playEffect 后调用。
Declared In
AgoraRtcEngineKit.h
– setVolumeOfEffect:withVolume:
实时调整音效文件播放音量,范围为 [0.0,100.0]。
- (int)setVolumeOfEffect:(int)soundId withVolume:(double)volume
Parameters
soundId |
自行设定的音效 ID,需保证唯一性。 |
---|---|
volume |
取值范围为 [0.0,100.0]。100.0 为默认值 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法需要在 playEffect 后调用。
Declared In
AgoraRtcEngineKit.h
– playEffect:filePath:loopCount:pitch:pan:gain:publish:startPos:
播放指定的本地或在线音效文件。
- (int)playEffect:(int)soundId filePath:(NSString *_Nullable)filePath loopCount:(int)loopCount pitch:(double)pitch pan:(double)pan gain:(double)gain publish:(BOOL)publish startPos:(int)startPos
Parameters
soundId |
音效的 ID。每个音效的 ID 具有唯一性。如果你已通过 preloadEffect 将音效加载至内存,
请确保该参数与 |
---|---|
filePath |
音效文件的绝对路径或 URL 地址,需精确到文件名及后缀。例如: |
loopCount |
音效循环播放的次数。
|
pitch |
音效的音调,取值范围为 [0.5,2.0]。默认值为 |
pan |
音效的空间位置。取值范围为 [-1.0,1.0],例如:
|
gain |
音效的音量。取值范围为 [0.0,100.0]。默认值为 |
publish |
是否将音效发布至远端:
|
startPos |
音效文件的播放位置,单位为毫秒。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
你可以多次调用该方法,传入不同的 soundId
和 filePath
,同时播放多个音效文件。为获得最佳用户体验,声网推荐同时播放的音效文件不超过 3 个。
音效文件播放结束后,SDK 会触发 rtcEngineDidAudioEffectFinish 回调。
Note
- 该方法需要在加入频道后调用。
- 该方法支持的音频文件格式见 声网 RTC SDK 支持播放哪些格式的音频文件。
- 如果你需要通过
playEffect
播放在线音效文件,声网建议你将在线音效文件缓存到本地设备,调用 preloadEffect 将音效加载至内存,确保这里设置的 soundId 与 preloadEffect 将缓存的音效文件预加载到内存中,再调用playEffect
播放音效。否则,可能出现因在线音效文件加载超时、加载失败而导致的播放失败和无声的问题。
Declared In
AgoraRtcEngineKit.h
– stopEffect:
停止播放指定音效文件
- (int)stopEffect:(int)soundId
Parameters
soundId |
自行设定的音效 ID,需保证唯一性。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
– preloadEffect:filePath:
将指定音效文件预加载至内存
- (int)preloadEffect:(int)soundId filePath:(NSString *_Nullable)filePath
Parameters
soundId |
自行设定的音效 ID,需保证唯一性。 |
---|---|
filePath |
音效文件的绝对路径 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
Note
- 该方法不支持在线音效文件。
- 该方法支持的音频文件格式见 声网 RTC SDK 支持播放哪些格式的音频文件。
- 为保证通信畅通,请注意控制预加载音效文件的大小。
- 该方法在加入频道前后均可调用。
Declared In
AgoraRtcEngineKit.h
– unloadEffect:
从内存释放某个预加载的音效文件
- (int)unloadEffect:(int)soundId
Parameters
soundId |
自行设定的音效 ID,需保证唯一性。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
– pauseEffect:
暂停音效文件播放
- (int)pauseEffect:(int)soundId
Parameters
soundId |
自行设定的音效 ID,需保证唯一性。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
– pauseAllEffects
暂停所有音效文件播放
- (int)pauseAllEffects
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
– resumeEffect:
恢复播放指定音效文件
- (int)resumeEffect:(int)soundId
Parameters
soundId |
自行设定的音效 ID,需保证唯一性。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
– resumeAllEffects
恢复播放所有音效文件
- (int)resumeAllEffects
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
– getEffectCurrentPosition:
获取指定音效文件的播放进度。
- (int)getEffectCurrentPosition:(int)soundId
Parameters
soundId |
音效 ID。请确保与 |
---|
Return Value
- ≥ 0: 方法调用成功,返回指定音效文件的播放进度(毫秒)。
< 0: 方法调用失败。
-22(AgoraErrorCodeResourceLimited)
: 无法找到音效文件。请填写正确的soundId
。
Availability
v3.4.0
Discussion
Note: 该方法需要在 playEffect 后调用。
Declared In
AgoraRtcEngineKit.h
– setEffectPosition:pos:
设置指定音效文件的播放位置。
- (int)setEffectPosition:(int)soundId pos:(NSInteger)pos
Parameters
soundId |
音效 ID。请确保与 |
---|---|
pos |
音效文件的播放位置,单位为毫秒。 |
Return Value
- 0: 方法调用成功。
< 0: 方法调用失败。
-22(AgoraErrorCodeResourceLimited)
: 无法找到音效文件。请填写正确的soundId
。
Availability
v3.4.0
成功设置后,本地音效文件会在指定位置开始播放。
Discussion
Note: 该方法需要在 playEffect 后调用。
Declared In
AgoraRtcEngineKit.h
– getEffectDuration:
获取指定音频文件信息。
- (int)getEffectDuration:(NSString *_Nonnull)filePath
Parameters
filePath |
音频文件的绝对路径或 URL 地址,需精确到文件名及后缀。例如: |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.4.0
成功调用该方法后,SDK 会触发 didRequestAudioFileInfo 回调,报告指定音频文件的时长等信息。你可以多次调用该方法,获取多个音频文件的信息。
Note
- 该方法需要在加入频道后调用。
- 该方法支持的音频文件格式见 声网 RTC SDK 支持播放哪些格式的音频文件。
- 自 v3.7.0 起,
getEffectDuration
的行为从“获取指定音效文件总时长”变更为“获取音频文件信息”。
Declared In
AgoraRtcEngineKit.h
虚拟节拍器
– startRhythmPlayer:sound2:config:
开启虚拟节拍器(仅 iOS)
- (int)startRhythmPlayer:(NSString *_Nonnull)sound1 sound2:(NSString *_Nonnull)sound2 config:(AgoraRtcRhythmPlayerConfig *_Nonnull)config
Parameters
sound1 |
强拍文件的绝对路径,需精确到文件名及后缀。例如: |
---|---|
sound2 |
弱拍文件的绝对路径,需精确到文件名及后缀。例如: |
config |
节拍器配置。详见 AgoraRtcRhythmPlayerConfig。 |
Return Value
- 0: 方法调用成功。
< 0: 方法调用失败。
-22(AgoraErrorCodeResourceLimited)
: 无法找到音频文件。请填写正确的sound1
和sound2
。
Availability
v3.4.0
在音乐教学、体育教学等场景中,老师通常需要使用节拍器,让学生跟着正确的节拍练习。节拍由强拍和弱拍组成,每小节的第一拍称为强拍,其余称为弱拍。 你需要在该方法中设置强拍和弱拍的文件路径、每小节的拍数、节拍速度以及是否将节拍器的声音发送至远端。
Note
- 开启虚拟节拍器后,SDK 会从头开始播放指定的音频文件,并根据你设置的 beatsPerMinute 控制每个文件的播放时长。
例如,将
beatsPerMinute
设为60
,则 SDK 会 1 秒播放 1 个节拍。如果文件时长超过了节拍时长,则 SDK 只播放节拍时长部分的音频。 - 该方法支持的音频文件格式见 声网 RTC SDK 支持播放哪些格式的音频文件。
Declared In
AgoraRtcEngineKit.h
– stopRhythmPlayer
关闭虚拟节拍器(仅 iOS)
- (int)stopRhythmPlayer
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Declared In
AgoraRtcEngineKit.h
– configRhythmPlayer:
配置虚拟节拍器(仅 iOS)
- (int)configRhythmPlayer:(AgoraRtcRhythmPlayerConfig *_Nonnull)config
Parameters
config |
节拍器配置。详见 AgoraRtcRhythmPlayerConfig。 |
---|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
Discussion
Note: 重新配置虚拟节拍器后,SDK 会从头开始播放指定的音效文件,并根据你设置的 beatsPerMinute 控制每个文件的播放时长。
例如,将 beatsPerMinute
设为 60
,则 SDK 会 1 秒播放 1 个节拍。如果文件时长超过了节拍时长,则 SDK 只播放节拍时长部分的音频。
Declared In
AgoraRtcEngineKit.h
音频录制
– startAudioRecordingWithConfig:
开始客户端录音。
- (int)startAudioRecordingWithConfig:(AgoraAudioRecordingConfiguration *_Nonnull)config
Parameters
config |
录音配置。详见 AgoraAudioRecordingConfiguration。 |
---|
Return Value
- 0: 方法调用成功。
< 0: 方法调用失败。
-160(
AgoraErrorCodeAlreadyInRecording
): 客户端正在录音。如需开始新的录音,请先调用 stopAudioRecording 停止当前录音,再调用startAudioRecordingWithConfig
。
Availability
v3.4.0
SDK 支持通话过程中在客户端进行录音。调用该方法后,你可以录制频道内用户的音频,并得到一个录音文件。录音文件格式可以为:
- WAV: 音质保真度较高,文件较大。例如,采样率为 32000 Hz,录音时长为 10 分钟的文件大小约为 73 M。
- AAC: 音质保真度较低,文件较小。例如,采样率为 32000 Hz,录音音质为
AgoraAudioRecordingQualityMedium
,录音时长为 10 分钟的文件大小约为 2 M。
一旦用户离开频道,录音会自动停止。
Discussion
Note: 该方法需要在加入频道后调用。
Declared In
AgoraRtcEngineKit.h
– stopAudioRecording
停止客户端录音。
- (int)stopAudioRecording
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
开启声卡采集
– enableLoopbackRecording:deviceName:
开启声卡采集(仅 macOS)
- (int)enableLoopbackRecording:(BOOL)enabled deviceName:(NSString *_Nullable)deviceName
Parameters
enabled |
|
---|---|
deviceName |
deviceName: 声卡的设备名。默认为空,代表使用当前声卡采集。如果你使用虚拟声卡,如 AgoraALD(Agora Audio Loopback Device),你可以将该参数设置为声卡的名称( |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
启用声卡采集功能后,声卡播放的音频会被合到本地音频流中,从而可以发送到远端。
Note:
- 该方法在加入频道后调用。
- macOS 系统默认声卡不支持采集功能,如果你需要使用该功能,请启用一个虚拟声卡,并将该虚拟声卡的名字传入
deviceName
参数。声网推荐你启用 AgoraALD (Agora Audio Loopback Device) 并向该参数传入"AgoraALD"
。
Declared In
AgoraRtcEngineKit.h
音频其他方法
– setAudioSessionOperationRestriction:
设置 SDK 对 Audio Session 的操作权限。
- (void)setAudioSessionOperationRestriction:(AgoraAudioSessionOperationRestriction)restriction
Parameters
restriction |
SDK 对 Audio Session 的操作权限,详见 AgoraAudioSessionOperationRestriction。该参数为 Bit Mask,每个 Bit 对应一个权限。 |
---|
Discussion
在默认情况下,SDK 和 app 对 Audio Session 都有操作权限。如果你只需使用 app 对 Audio Session 进行操作,你可以调用该方法限制 SDK 对 Audio Session 的操作权限。
该方法在加入频道前后都能调用。一旦调用该方法限制了 SDK 对 Audio Session 的操作权限,该限制会在 SDK 需要更改 Audio Session 时生效。
Note:
- 该方法仅适用于 iOS 平台。
- 该方法不会限制 app 对 Audio Session 的操作权限。
Declared In
AgoraRtcEngineKit.h
– enableDeepLearningDenoise:
开启或关闭 AI 降噪模式。
- (int)enableDeepLearningDenoise:(BOOL)enabled
Parameters
enabled |
是否开启 AI 降噪模式:
|
---|
Return Value
- 0: 方法调用成功。
- < 0: 方法调用失败。
- -
157
(AgoraErrorCodeModuleNotFound
): 未集成 AI 降噪库。
- -
Discussion
SDK 默认开启传统降噪模式,以消除大部分平稳噪声。如果你还需要消除非平稳噪声,声网推荐你按如下步骤开启 AI 降噪模式:
确保已集成
AgoraAIDenoiseExtension.xcframework
库:调用
enableDeepLearningDenoise(YES)
。
AI 降噪模式对设备性能有要求。只有在设备性能良好的情况下,SDK 才会成功开启 AI 降噪模式。支持在如下设备及其之后的型号中开启 AI 降噪模式:
- iPhone 6S
- MacBook Pro 2015
- iPad Pro 第二代
- iPad mini 第五代
- iPad Air 第三代
成功开启 AI 降噪模式后,如果 SDK 检测到当前设备的性能不足,SDK 会自动关闭 AI 降噪模式,并开启传统降噪模式。
在频道内,如果你调用了 enableDeepLearningDenoise(NO)
或 SDK 自动关闭了 AI 降噪模式,当你需要重新开启 AI 降噪模式时,
你需要先调用 leaveChannel,再调用 enableDeepLearningDenoise(YES)
。
Note
- 该方法需要动态加载
AgoraAIDenoiseExtension
库,所以声网推荐在加入频道前调用该方法。 - 该方法对人声的处理效果最佳,声网不推荐调用该方法处理含音乐的音频数据。
Declared In
AgoraRtcEngineKit.h
网络相关测试
– startEchoTestWithInterval:successBlock:
开始语音通话回路测试
- (int)startEchoTestWithInterval:(NSInteger)interval successBlock:(void ( ^ _Nullable ) ( NSString *_Nonnull channel , NSUInteger uid , NSInteger elapsed ))successBlock
Parameters
interval |
返回语音通话回路测试结果的时间间隔,取值范围为 [2,10],单位为秒,默认值为 10 秒。 |
---|---|
successBlock |
成功开始语音通话测试回调。 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法启动语音通话测试,目的是测试系统的音频设备(耳麦、扬声器等)和网络连接是否正常。在测试过程中,用户先说一段话,声音会在设置的时间间隔后回放出来。如果用户能正常听到自己刚才说的话,就表示系统音频设备和网络连接都是正常的。
Note:
- 请在加入频道前调用该方法。
- 调用该方法后必须调用 stopEchoTest 以结束测试,否则不能进行下一次回声测试,也无法加入频道。
- 直播场景下,该方法仅能由用户角色为主播的用户调用。
Declared In
AgoraRtcEngineKit.h
– startEchoTestWithConfig:
开始音视频通话回路测试。
- (int)startEchoTestWithConfig:(AgoraEchoTestConfiguration *_Nonnull)config
Parameters
config |
音视频通话回路测试的配置。详见 AgoraEchoTestConfiguration |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.5.2
加入频道前,为测试用户本地发流、收流是否正常,你可以调用该方法进行音视频通话回路测试,即测试系统的音视频设备和用户的上下行网络是否正常。
开始测试后,用户需发出声音或面对摄像头,音频或视频会在约 2 秒后播放出来。如果音频播放正常,则表示系统音频设备和用户上下行网络均正常;如果视频播放正常,则表示系统视频设备和用户上下行网络均正常。
Note:
- 请在加入频道前调用该方法。
- 调用该方法后,必须调用 stopEchoTest 结束测试,否则该用户无法进行下一次音视频通话回路测试,也无法加入频道。
- 直播场景下,该方法仅能由主播调用。
Declared In
AgoraRtcEngineKit.h
– stopEchoTest
停止通话回路测试。
- (int)stopEchoTest
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败。如 -5(AgoraErrorCodeRefused):不能停止测试,可能语音通话测试没有成功启动。
Discussion
调用 startEchoTestWithInterval 或 startEchoTestWithConfig 后,如果你想停止通话回路测试,请调用本方法。
Declared In
AgoraRtcEngineKit.h
– enableLastmileTest
启动网络测试
- (int)enableLastmileTest
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法启用网络连接质量测试,用于检测用户网络接入质量。默认该功能为关闭状态。
该方法主要用于以下场景:
- 用户加入频道前,可以调用该方法判断和预测目前的上行网络质量是否足够好。
- 直播场景下,当用户角色想由观众切换为主播时,可以调用该方法判断和预测目前的上行网络质量是否足够好。
启用该方法会消耗一定的网络流量,影响通话质量,因此我们建议不要和 startLastmileProbeTest 同时使用。
在收到 lastmileQuality 回调后须调用 disableLastmileTest 停止测试,再加入频道或切换用户角色。
Note:
- 调用该方法后,在收到 lastmileQuality 回调之前请不要调用其他方法,否则可能会由于 API 操作过于频繁导致此回调无法执行。
- 直播场景下,主播在加入频道后请勿调用该方法。
- 加入频道前调用该方法检测网络质量后,SDK 会占用一路视频的带宽,码率与 setVideoEncoderConfiguration 中设置的码率相同。加入频道后,无论是否调用了
disableLastmileTest
,SDK 均会自动停止带宽占用。
Declared In
AgoraRtcEngineKit.h
– disableLastmileTest
关闭网络测试
- (int)disableLastmileTest
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcEngineKit.h
– startLastmileProbeTest:
开始通话前网络质量探测
- (int)startLastmileProbeTest:(AgoraLastmileProbeConfig *_Nullable)config
Parameters
config |
Last mile 网络探测配置,详见 AgoraLastmileProbeConfig |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
开始通话前网络质量探测,向用户反馈上下行网络的带宽、丢包、网络抖动和往返时延数据。
启用该方法后,SDK 会依次返回如下 2 个回调:
- lastmileQuality,视网络情况约 2 秒内返回。该回调通过打分反馈上下行网络质量,更贴近用户的主观感受。
- lastmileProbeResult,视网络情况约 30 秒内返回。该回调通过具体数据反馈上下行网络质量,更加客观。
该方法主要用于以下两种场景:
- 用户加入频道前,可以调用该方法判断和预测目前的上行网络质量是否足够好。
- 直播场景下,当用户角色想由观众切换为主播时,可以调用该方法判断和预测目前的上行网络质量是否足够好。
Note:
- 该方法会消耗一定的网络流量,影响通话质量,因此我们建议不要和 enableLastmileTest 同时使用。
- 调用该方法后,在收到 lastmileQuality 和 lastmileProbeResult 回调之前请不要调用其他方法,否则可能会由于 API 操作过于频繁导致此方法无法执行。
- 直播场景下,如果本地用户为主播,请勿在加入频道后调用该方法。
Declared In
AgoraRtcEngineKit.h
– stopLastmileProbeTest
停止通话前网络质量探测
- (int)stopLastmileProbeTest
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
停止通话前网络质量探测。
Declared In
AgoraRtcEngineKit.h
自定义视频模块
– setVideoSource:
设置自定义视频源
- (void)setVideoSource:(id<AgoraVideoSourceProtocol> _Nullable)videoSource
Parameters
videoSource |
自定义的视频源,详见 AgoraVideoSourceProtocol |
---|
Discussion
该方法设置视频源。实时通讯过程中,SDK 通常会启动默认的视频输入设备,即内置的摄像头,进行视频推流。当需要自定义视频设备时,App 可以先通过 AgoraVideoSourceProtocol 自定义视频源,然后调用该方法将自定义的视频源加入到 SDK 中。
该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
– setLocalVideoRenderer:
本地自定义视频渲染器
- (void)setLocalVideoRenderer:(id<AgoraVideoSinkProtocol> _Nullable)videoRenderer
Parameters
videoRenderer |
自定义的视频渲染器,详见 AgoraVideoSinkProtocol |
---|
Discussion
该方法设置本地视频渲染器。实时通讯过程中,SDK 通常会启动默认的视频渲染器进行视频渲染。当需要自定义视频渲染设备时,App 可以先通过 AgoraVideoSinkProtocol 自定义渲染器,然后调用该方法将视频渲染器加入到 SDK 中。
该方法在加入频道前后都能调用。
Declared In
AgoraRtcEngineKit.h
– setRemoteVideoRenderer:forUserId:
远端自定义视频渲染器
- (void)setRemoteVideoRenderer:(id<AgoraVideoSinkProtocol> _Nullable)videoRenderer forUserId:(NSUInteger)userId
Parameters
videoRenderer |
自定义的视频渲染器,详见 AgoraVideoSinkProtocol |
---|---|
userId |
远端用户的 uid |
Discussion
实时音视频互动过程中,SDK 通常会启动默认的视频渲染器进行视频渲染。当需要自定义视频渲染设备时,App 可以先通过 AgoraVideoSinkProtocol 自定义渲染器,然后调用该方法将视频渲染器加入到 SDK 中。
该方法在加入频道前后都能调用。如果在加入频道前调用,需要自行维护远端用户的 uid
。
Declared In
AgoraRtcEngineKit.h
– videoSource
获取当前视频源
- (id<AgoraVideoSourceProtocol> _Nullable)videoSource
Return Value
Declared In
AgoraRtcEngineKit.h
– localVideoRenderer
获取本地视频渲染器
- (id<AgoraVideoSinkProtocol> _Nullable)localVideoRenderer
Return Value
Declared In
AgoraRtcEngineKit.h
– remoteVideoRendererOfUserId:
获取远端视频渲染器
- (id<AgoraVideoSinkProtocol> _Nullable)remoteVideoRendererOfUserId:(NSUInteger)userId
Parameters
userId |
远端用户的 uid |
---|
Return Value
Discussion
该方法获取远端视频渲染器。
Declared In
AgoraRtcEngineKit.h
– setVideoDataFrame:
注册原始视频数据协议。
- (void)setVideoDataFrame:(id<AgoraVideoDataFrameProtocol> _Nullable)videoData
Parameters
videoData |
原始视频数据。详见 AgoraVideoDataFrameProtocol 。 传空表示取消注册原始视频数据观测器。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.4.5
成功注册原始视频数据协议后,SDK 会在捕捉到每个视频帧时,触发你在 AgoraVideoDataFrameProtocol 中实现的回调。
Note:
- 该方法仅适用于 iOS 平台。
- 该方法需要在加入频道前调用。
- 通过协议获取的视频宽高可能会因网络情况变差和用户自行调整分辨率而变化。
- 使用 3.0.1 或之后版本的 SDK 时,请注意如下:
- SDK 不再保证 AgoraVideoDataFrameProtocol 中的回调函数在同一个线程中报告。SDK 只会保证这些回调的顺序性。
- 如果你使用 OpenGL 对视频原始数据进行美颜处理,为适应多线程场景,你需要在 AgoraVideoDataFrameProtocol 中的回调函数中主动切换 OpenGL 的上下文,否则美颜可能失效。
Declared In
AgoraRtcEngineKit.h
– setVideoEncodedFrame:
注册本地视频编码数据协议。
- (void)setVideoEncodedFrame:(id<AgoraVideoEncodedFrameProtocol> _Nullable)videoEncode
Parameters
videoEncode |
本地视频编码数据。详见 AgoraVideoEncodedFrameProtocol 。 传空表示取消注册本地视频编码数据观测器。 |
---|
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Availability
v3.4.5
成功注册本地视频编码数据协议后,SDK 会在捕捉到每个视频帧时,触发你在 AgoraVideoEncodedFrameProtocol 中实现的回调。
Note:
- 该方法仅适用于 iOS 平台。
- 该方法需要在加入频道前调用。
- 通过协议获取的视频宽高可能会因网络情况变差和用户自行调整分辨率而变化。
Declared In
AgoraRtcEngineKit.h
音频自渲染
– enableExternalAudioSink:channels:
开启外部音频渲染。
- (void)enableExternalAudioSink:(NSUInteger)sampleRate channels:(NSUInteger)channels
Parameters
sampleRate |
外部音频渲染的采样率 (Hz),可设置为 16000,32000,44100 或 48000。 |
---|---|
channels |
外部音频渲染的声道数,可设置为 1 或 2:
|
Discussion
该方法适用于需要自行渲染音频的场景。开启外部音频渲染后,你可以通过调用 pullPlaybackAudioFrameRawData / pullPlaybackAudioFrameSampleBufferByLengthInByte 方法拉取远端音频数据App 可以对拉取到的原始音频数据进行处理后再渲染,获取想要的音频效果。
该方法需要在加入频道前调用。
Note: 使用早于 3.5.0 版的 SDK 时,设置 Pull 方式的音频自渲染后,你将无法收到 onPlaybackAudioFrame 回调。
Declared In
AgoraRtcEngineKit.h
– disableExternalAudioSink
关闭外部音频渲染。
- (void)disableExternalAudioSink
Declared In
AgoraRtcEngineKit.h
– pullPlaybackAudioFrameRawData:lengthInByte:
拉取 RawData 格式的远端音频数据。
- (BOOL)pullPlaybackAudioFrameRawData:(void *_Nonnull)data lengthInByte:(NSUInteger)lengthInByte
Parameters
data |
需要拉取的音频数据,格式为 byte[]。 |
---|---|
lengthInByte |
待拉取音频数据的字节数,单位为 byte。该参数的取值与音频数据的时长、你在 enableExternalAudioSink 中设置的 |
Return Value
- YES: 方法调用成功。
- NO: 方法调用失败。
Discussion
使用该方法前,你需要调用 enableExternalAudioSink 方法通知 app 开启并设置外部渲染。
调用该方法后,app 会采取主动拉取的方式获取远端已解码和混音后的音频数据,用于音频播放。
Note
- 该方法需要在加入频道后调用。
- 使用早于 3.5.0 版的 SDK 时,设置 Pull 方式的音频自渲染后,你将无法收到 onPlaybackAudioFrame 回调。
- 该方法和
onPlaybackAudioFrame
回调相比,区别在于:onPlaybackAudioFrame
:SDK 通过该回调将音频数据传输给 app。如果 app 处理延时,可能会导致音频播放抖动。pullPlaybackAudioFrameRawData
:app 主动拉取音频数据。通过设置音频帧的数据和字节数,SDK 可以调整缓存,帮助 app 处理延时,从而有效避免音频播放抖动。
Declared In
AgoraRtcEngineKit.h
– pullPlaybackAudioFrameSampleBufferByLengthInByte:
拉取 SampleBuffer 格式的远端音频数据。
- (CMSampleBufferRef _Nullable)pullPlaybackAudioFrameSampleBufferByLengthInByte:(NSUInteger)lengthInByte
Parameters
lengthInByte |
待拉取音频数据的字节数,单位为 byte。该参数的取值与音频数据的时长、你在 enableExternalAudioSink 中设置的 |
---|
Return Value
- YES: 方法调用成功。
- NO: 方法调用失败。
Discussion
调用该方法前,你需要调用 enableExternalAudioSink 方法通知 app 开启并设置外部渲染。
调用该方法后,app 会采取主动拉取的方式获取远端已解码和混音后的音频数据,用于音频播放。
Note
- 该方法需要在加入频道后调用。
- 使用早于 3.5.0 版的 SDK 时,设置 Pull 方式的音频自渲染后,你将无法收到 onPlaybackAudioFrame 回调。
该方法和
onPlaybackAudioFrame
方法相比,区别在于:onPlaybackAudioFrame
:SDK 通过该回调将音频数据传输给 app。如果 app 处理延时,可能会导致音频播放抖动;pullPlaybackAudioFrameSampleBufferByLengthInByte
:app 主动拉取音频数据。通过设置音频帧的数据和字节数,SDK 可以调整缓存,帮助 app 处理延时,从而有效避免音频播放抖动。
Declared In
AgoraRtcEngineKit.h
音频自采集 (仅适用于 push 模式)
– enableExternalAudioSourceWithSampleRate:channelsPerFrame:
开启外部音频采集
- (void)enableExternalAudioSourceWithSampleRate:(NSUInteger)sampleRate channelsPerFrame:(NSUInteger)channelsPerFrame
Parameters
sampleRate |
外部音频源的采样率 (Hz),可设置为 8000,16000,32000,44100 或 48000 |
---|---|
channelsPerFrame |
外部音频源的通道数,可设置为 1 或 2:
|
Discussion
该方法必须在 joinChannelByToken 和 startPreview 前调用。
Declared In
AgoraRtcEngineKit.h
– disableExternalAudioSource
关闭外部音频采集
- (void)disableExternalAudioSource
Declared In
AgoraRtcEngineKit.h
– setExternalAudioSourceVolume:volume:
设置指定位置的外部音频帧音量。
- (void)setExternalAudioSourceVolume:(AgoraAudioExternalSourcePos)sourcePos volume:(NSUInteger)volume
Parameters
sourcePos |
外部音频帧的推送位置。详见 AgoraAudioExternalSourcePos。 |
---|---|
volume |
外部音频帧的音量。取值范围为 [0,100]。默认值为 100,表示原始音量。 |
Availability
v3.5.1
你可以多次调用该方法,设置不同位置的外部音频帧音量。 音量设置对被推送到指定位置的所有外部音频帧都有效。
Discussion
Note: 该方法需要在加入频道后调用。
Declared In
AgoraRtcEngineKit.h
– pushExternalAudioFrameRawData:frame:
推送外部原始音频帧到指定位置。
- (int)pushExternalAudioFrameRawData:(AgoraAudioExternalSourcePos)sourcePos frame:(AgoraAudioFrame *_Nonnull)frame
Parameters
sourcePos |
外部音频帧的推送位置。详见 AgoraAudioExternalSourcePos。 |
---|---|
frame |
外部音频帧。详见 AgoraAudioFrame。音频帧长度范围为 [10,60],单位为 ms。 |
Return Value
- 0: 方法调用成功
< 0: 方法调用失败
- -2 (
AgoraErrorCodeInvalidArgument
): 无效参数。 - -12 (
AgoraErrorCodeTooOften
): 调用频率太高,导致内部缓冲区溢出。 建议在 30 - 50 ms 后重新调用该方法。
- -2 (
Availability
v3.5.1
根据实际需求,你可以将外部音频帧推送到音频采集后、编码前或本地播放前的位置。你可以多次调用该方法, 将一个音频帧推送到多个位置或者将多个音频帧推送到不同位置。例如,在 KTV 场景中, 你可以将歌声推送到音频采集后的位置,让歌声经过 SDK 音频模块的处理,从而获取优质的音频体验; 将伴奏推送到音频编码前的位置,让伴奏不受 SDK 音频模块的影响。
Discussion
Note: 该方法需要在加入频道后调用。
Declared In
AgoraRtcEngineKit.h
– pushExternalAudioFrameSampleBuffer:sampleBuffer:
推送外部 CMSampleBufferRef 音频帧到指定位置。
- (int)pushExternalAudioFrameSampleBuffer:(AgoraAudioExternalSourcePos)sourcePos sampleBuffer:(CMSampleBufferRef _Nonnull)sampleBuffer
Parameters
sourcePos |
外部音频帧的推送位置。详见 AgoraAudioExternalSourcePos。 |
---|---|
sampleBuffer |
采样缓冲区。音频帧长度范围为 [10,60],单位为 ms。 |
Return Value
- 0: 方法调用成功
< 0: 方法调用失败
- -2 (
AgoraErrorCodeInvalidArgument
): 无效参数。 - -12 (
AgoraErrorCodeTooOften
): 调用频率太高,导致内部缓冲区溢出。 建议在 30 - 50 ms 后重新调用该方法。
- -2 (
Availability
v3.5.1
根据实际需求,你可以将外部音频帧推送到音频采集后、编码前或本地播放前的位置。你可以多次调用该方法, 将一个音频帧推送到多个位置或者将多个音频帧推送到不同位置。例如,在 KTV 场景中, 你可以将歌声推送到音频采集后的位置,让歌声经过 SDK 音频模块的处理,从而获取优质的音频体验; 将伴奏推送到音频编码前的位置,让伴奏不受 SDK 音频模块的影响。
Discussion
Note: 该方法需要在加入频道后调用。
Declared In
AgoraRtcEngineKit.h
视频自采集 (仅适用于 push 模式)
– setExternalVideoSource:useTexture:pushMode:
配置外部视频源
- (void)setExternalVideoSource:(BOOL)enable useTexture:(BOOL)useTexture pushMode:(BOOL)pushMode
Parameters
enable |
是否使用外部视频源:
|
---|---|
useTexture |
是否使用 Texture 作为输入:
|
pushMode |
是否外部视频源需要调用 pushExternalVideoFrame 将视频帧主动推送给 SDK:
|
Discussion
Note: 该方法需要在加入频道前调用。
Declared In
AgoraRtcEngineKit.h
– pushExternalVideoFrame:
推送外部视频帧
- (BOOL)pushExternalVideoFrame:(AgoraVideoFrame *_Nonnull)frame
Parameters
frame |
该视频帧包含待 SDK 编码的视频数据,详见 AgoraVideoFrame |
---|
Return Value
- YES: 该帧推送成功
- NO: 该帧推送不成功
Discussion
该方法主动将视频帧数据用 AgoraVideoFrame 类封装后传递给 SDK。请确保在你调用本方法前已调用 setExternalVideoSource,并将参数 pushMode 设为 YES,不然调用本方法后会一直报错。
Note: SDK 目前不支持 alpha 通道。传入的 alpha 值将被丢弃。
Declared In
AgoraRtcEngineKit.h
原始音频数据处理
– setRecordingAudioFrameParametersWithSampleRate:channel:mode:samplesPerCall:
设置采集的音频格式
- (int)setRecordingAudioFrameParametersWithSampleRate:(NSInteger)sampleRate channel:(NSInteger)channel mode:(AgoraAudioRawFrameOperationMode)mode samplesPerCall:(NSInteger)samplesPerCall
Parameters
sampleRate |
指定 |
---|---|
channel |
指定
|
mode |
|
samplesPerCall |
指定 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法设置 onRecordAudioFrame 回调数据的格式,详情请参考原始音频数据
该方法需要在加入频道前调用。
Note
SDK 会通过该方法的 samplesPerCall
、sampleRate
和 channel
参数计算出采样间隔,计算公式为采样间隔 = samplesPerCall
/(sampleRate
* channel
)。请确保采样间隔不得小于 0.01 (s)。SDK 会根据该采样间隔触发 onRecordAudioFrame
回调。
Declared In
AgoraRtcEngineKit.h
– setPlaybackAudioFrameParametersWithSampleRate:channel:mode:samplesPerCall:
设置播放的音频格式
- (int)setPlaybackAudioFrameParametersWithSampleRate:(NSInteger)sampleRate channel:(NSInteger)channel mode:(AgoraAudioRawFrameOperationMode)mode samplesPerCall:(NSInteger)samplesPerCall
Parameters
sampleRate |
指定 |
---|---|
channel |
指定
|
mode |
|
samplesPerCall |
指定 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法设置 onPlaybackAudioFrame
回调数据的格式,详情请参考原始音视频数据
该方法需要在加入频道前调用。
Note
SDK 会通过该方法的 samplesPerCall
、sampleRate
和 channel
参数计算出采样间隔,计算公式为采样间隔 = samplesPerCall
/(sampleRate
* channel
)。请确保采样间隔不得小于 0.01 (s)。SDK 会根据该采样间隔触发 onPlaybackAudioFrame
回调。
Declared In
AgoraRtcEngineKit.h
– setMixedAudioFrameParametersWithSampleRate:samplesPerCall:
设置采集和播放的音频混音后的数据格式
- (int)setMixedAudioFrameParametersWithSampleRate:(NSInteger)sampleRate samplesPerCall:(NSInteger)samplesPerCall
Parameters
sampleRate |
指定 |
---|---|
samplesPerCall |
指定 |
Return Value
- 0: 方法调用成功
- < 0: 方法调用失败
Discussion
该方法设置 onMixedAudioFrame
回调数据的格式,详情请参考原始音视频数据
该方法需要在加入频道前调用。
Note
SDK 会通过该方法的 samplesPerCall
、sampleRate
和 channel
参数计算出采样间隔,计算公式为采样间隔 = samplesPerCall
/(sampleRate
* channel
)。请确保采样间隔不得小于 0.01 (s)。SDK 会根据该采样间隔触发 onMixedAudioFrame
回调。