AgoraRtcEngineDelegate 协议

Conforms to NSObject
Declared in AgoraRtcEngineKit.h

概览

AgoraRtcEngineDelegate 接口类采用 Delegate 方法用于向 App 发送回调通知。

SDK 会通过代理方法 AgoraRtcEngineDelegate 向 App 上报一些运行时的事件。从 1.1 版本开始,SDK 使用 Delegate 代替原有的部分 Block 回调。 原有的 Block 回调被标为废弃,目前仍然可以使用,但是建议用相应的 Delegate 方法代替。如果同一个回调 Block 和 Delegate 方法都有定义,则 SDK 只回调 Block 方法。

核心事件回调

– rtcEngine:didOccurWarning:

发生警告回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didOccurWarning:(AgoraWarningCode)warningCode

参数

engine

AgoraRtcEngineKit 对象

warningCode

AgoraWarningCode

详情

该回调方法表示 SDK 运行时出现了(网络或媒体相关的)警告。通常情况下,SDK 上报的警告信息 App 可以忽略,SDK 会自动恢复。比如和服务器失去连接时,SDK 可能会上报 AgoraWarningCodeOpenChannelTimeout(106) 警告,同时自动尝试重连。

详细的警告代码,见 AgoraWarningCode

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didOccurError:

发生错误回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didOccurError:(AgoraErrorCode)errorCode

参数

engine

AgoraRtcEngineKit 对象

errorCode

AgoraErrorCode

详情

该回调方法表示 SDK 运行时出现了(网络或媒体相关的)错误。通常情况下,SDK 上报的错误意味着 SDK 无法自动恢复,需要 App 干预或提示用户。 比如启动通话失败时,SDK 会上报 AgoraErrorCodeStartCall = 1002 错误。App 可以提示用户启动通话失败,并调用 leaveChannel 退出频道。

详细的错误代码,见 AgoraErrorCode

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didApiCallExecute:api:result:

API 方法已执行回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didApiCallExecute:(NSInteger)error api:(NSString *_Nonnull)api result:(NSString *_Nonnull)result

参数

engine

AgoraRtcEngineKit 对象

error

错误码。如果方法调用失败,会返回错误码 (AgoraErrorCode)。

api

SDK 所调用的 API

result

SDK 调用 API 的调用结果

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didJoinChannel:withUid:elapsed:

加入频道回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didJoinChannel:(NSString *_Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger)elapsed

参数

engine

AgoraRtcEngineKit 对象

channel

频道名称

uid

用户ID。 如果在joinChannelByToken方法中指定了 uid,它会返回指定的 ID; 如果没有,它将返回由 Agora 服务器自动分配的 ID。

elapsed

从调用joinChannelByToken开始到发生此事件过去的时间(ms)。

详情

该回调方法表示该客户端成功加入了指定的频道。同joinChannelByToken API 的 joinSuccessBlock 回调。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didRejoinChannel:withUid:elapsed:

重新加入频道回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didRejoinChannel:(NSString *_Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger)elapsed

参数

engine

AgoraRtcEngineKit 对象

channel

频道名称

uid

用户ID。 如果在joinChannelByToken方法中指定了 uid,它会返回指定的 ID; 如果没有,它将返回由 Agora 服务器自动分配的 ID。

elapsed

从开始重连到重连成功的时间(ms)。

详情

有时候由于网络原因,客户端可能会和服务器失去连接,SDK 会进行自动重连,自动重连成功后触发此回调方法。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didLeaveChannelWithStats:

已离开频道回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLeaveChannelWithStats:(AgoraChannelStats *_Nonnull)stats

参数

engine

AgoraRtcEngineKit 对象

stats

通话相关的统计信息:AgoraChannelStats

详情

当用户调用 leaveChannel 离开频道后,SDK 会触发该回调。在该回调方法中,App 可以得到此次通话的总通话时长、SDK 收发数据的流量等信息。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didClientRoleChanged:newRole:

用户角色已切换回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didClientRoleChanged:(AgoraClientRole)oldRole newRole:(AgoraClientRole)newRole

参数

engine

AgoraRtcEngineKit 对象.

oldRole

切换前的角色

newRole

切换后的角色

详情

直播场景下,当用户角色切换时会触发此回调,即主播切换为观众时,或观众切换为主播时。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didJoinedOfUid:elapsed:

远端用户/主播加入回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didJoinedOfUid:(NSUInteger)uid elapsed:(NSInteger)elapsed

参数

engine

AgoraRtcEngineKit 对象

uid

新加入频道的远端用户/主播 ID。如果 joinChannelByToken 中指定了 uid,则此处返回该 ID;否则使用 Agora 服务器自动分配的 ID。

elapsed

从远端用户或新主播加入频道 (joinChannelByToken/setClientRole) 开始到发生此事件过去的时间(ms)。

详情

userJoinedBlock

  • 通信模式下,该回调提示有远端用户加入了频道,并返回新加入用户的 ID;如果加入之前,已经有其他用户在频道中了,新加入的用户也会收到这些已有用户加入频道的回调。
  • 直播模式下,该回调提示有主播加入了频道,并返回该主播的 ID。如果在加入之前,已经有主播在频道中了,新加入的用户也会收到已有主播加入频道的回调。Agora 建议连麦主播不超过 17 人。

Note:

直播场景下,

  • 主播间能相互收到新主播加入频道的回调,并能获得该主播的 uid
  • 观众也能收到新主播加入频道的回调,并能获得该主播的 uid
  • 当 Web 端加入直播频道时,只要 Web 端有推流,SDK 会默认该 Web 端为主播,并触发该回调

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didOfflineOfUid:reason:

远端用户(通信模式)/主播(直播模式)离开当前频道回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didOfflineOfUid:(NSUInteger)uid reason:(AgoraUserOfflineReason)reason

参数

engine

AgoraRtcEngineKit 对象

uid

离线的用户 ID。

reason

离线原因,详见 AgoraUserOfflineReason

详情

userOfflineBlock

提示有远端用户/主播离开了频道(或掉线)。用户离开频道有两个原因,即正常离开和超时掉线:

  • 正常离开的时候,远端用户/主播会收到类似“再见”的消息,接收此消息后,判断用户离开频道。
  • 超时掉线的依据是,在一定时间内(通信场景为 20 秒,直播场景稍有延时),用户没有收到对方的任何数据包,则判定为对方掉线。在网络较差的情况下,有可能会误报。Agora 建议使用信令系统来做可靠的掉线检测。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:connectionChangedToState:reason:

网络连接状态已改变回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine connectionChangedToState:(AgoraConnectionStateType)state reason:(AgoraConnectionChangedReason)reason

参数

engine

AgoraRtcEngineKit 对象

state

当前的网络连接状态,详见 AgoraConnectionStateType

reason

引起网络连接状态发生改变的原因,详见 AgoraConnectionChangedReason

详情

该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状态,和引起网络状态改变的原因。

Declared In

AgoraRtcEngineKit.h

– rtcEngineConnectionDidLost:

网络连接丢失回调

- (void)rtcEngineConnectionDidLost:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

详情

SDK 在调用 joinChannelByToken 后无论是否加入成功,只要 10 秒和服务器无法连接就会触发该回调。

rtcEngineConnectionDidInterrupted 回调的区别是:

无论是哪种回调,除非 App 主动调用 leaveChannel,不然 SDK 会一直自动重连。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:tokenPrivilegeWillExpire:

Token 服务即将过期回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine tokenPrivilegeWillExpire:(NSString *_Nonnull)token

参数

engine

AgoraRtcEngineKit 对象

token

即将服务失效的 Token

详情

在调用 joinChannelByToken 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中如果 Token 即将失效,SDK 会提前 30 秒触发该回调,提醒应用程序更新 Token。 当收到该回调时,用户需要重新在服务端生成新的 Token,然后调用 renewToken 将新生成的 Token 传给 SDK。

Declared In

AgoraRtcEngineKit.h

– rtcEngineRequestToken:

Token 过期回调

- (void)rtcEngineRequestToken:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

详情

在调用 joinChannelByToken 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中 SDK 可能由于网络原因和服务器失去连接,重连时可能需要新的 Token。 该回调通知 App 需要生成新的 Token,并需调用 renewToken 为 SDK 指定新的 Token。 之前的处理方法是在 didOccurError 回调报告 AgoraErrorCodeTokenExpired = 109, AgoraErrorCodeInvalidToken = 110. 时,App 需要生成新的 Token。 在新版本中,原来的处理仍然有效,但建议把相关逻辑放进该回调里。

Declared In

AgoraRtcEngineKit.h

媒体事件回调

– rtcEngine:didMicrophoneEnabled:

麦克风状态已改变回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didMicrophoneEnabled:(BOOL)enabled

参数

enabled
  • YES: 麦克风已启用
  • NO: 麦克风已禁用

Declared In

AgoraRtcEngineKit.h

– rtcEngine:reportAudioVolumeIndicationOfSpeakers:totalVolume:

音量提示的回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine reportAudioVolumeIndicationOfSpeakers:(NSArray<AgoraRtcAudioVolumeInfo*> *_Nonnull)speakers totalVolume:(NSInteger)totalVolume

参数

engine

AgoraRtcEngineKit 对象

speakers

以数组的形式返回每个说话者的用户 ID 和音量信息: AgoraRtcAudioVolumeInfo

  • uid: 说话者的用户 ID。如果返回的 uid 为 0,则为本地用户。
  • volume:说话者的音量,范围为 [0,255]
totalVolume

(混音后的)总音量,范围为 [0,255]

详情

audioVolumeIndicationBlock 相同。

该回调提示频道内谁在说话以及说话者的音量。默认禁用。可通过 enableAudioVolumeIndication 方法开启;开启后,无论频道内是否有人说话,都会按方法中设置的时间间隔返回提示音量。

在返回的 speakers 数组中:

  • 如果返回的 uid 为 0,即当频道内的说话者为本地用户时,说话者的音量 volume 为 totalVolume,即频道内的总音量。
  • 如果返回的 uid 不是 0,且 volume 为 0,则默认该 uid 对应的远端用户没有说话。
  • 如果有 uid 出现在上次返回的数组中,但不在本次返回的数组中,则默认该 uid 对应的远端用户没有说话。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:activeSpeaker:

监测到活跃用户的回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine activeSpeaker:(NSUInteger)speakerUid

参数

engine

AgoraRtcEngineKit 对象

speakerUid

当前时间段声音最大的用户的 uid。如果返回的 uid 为 0,则为本地用户

详情

如果用户开启了 enableAudioVolumeIndication 功能,则当音量检测模块监测到频道内有新的活跃用户说话时,会通过本回调返回该用户的 uid。

Note:

  • 你需要开启 enableAudioVolumeIndication 方法才能收到该回调。
  • uid 返回的是当前时间段内声音最大的用户 uid,而不是瞬时声音最大的用户 uid。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:firstLocalAudioFrame:

已发送本地音频首帧的回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstLocalAudioFrame:(NSInteger)elapsed

参数

engine

AgoraRtcEngineKit 对象

elapsed

从调用joinChannelByToken开始到发生此事件过去的时间(ms)。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:firstRemoteAudioFrameOfUid:elapsed:

已接收远端音频首帧的回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteAudioFrameOfUid:(NSUInteger)uid elapsed:(NSInteger)elapsed

参数

engine

AgoraRtcEngineKit 对象

uid

远端用户 UID

elapsed

从调用joinChannelByToken到发生此事件的时间(ms)。

Declared In

AgoraRtcEngineKit.h

– rtcEngineVideoDidStop:

视频功能停止回调

- (void)rtcEngineVideoDidStop:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

详情

提示视频功能已停止。 App 如需在停止视频后对 view 做其他处理(比如显示其他画面),可以在这个回调中进行。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:firstLocalVideoFrameWithSize:elapsed:

已发送本地视频首帧的回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstLocalVideoFrameWithSize:(CGSize)size elapsed:(NSInteger)elapsed

参数

engine

AgoraRtcEngineKit 对象

size

视频流尺寸(宽度和高度)

elapsed

从调用joinChannelByToken到发生此事件过去的时间(ms)。 如果在joinChannelByToken前调用了startPreview,是从startPreview到发生此事件过去的时间。

详情

第一帧本地视频发送时,触发此回调。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:firstRemoteVideoDecodedOfUid:size:elapsed:

已完成远端视频首帧解码回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteVideoDecodedOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed

参数

engine

AgoraRtcEngineKit 对象

uid

远端用户的 uid。

size

视频流尺寸(宽度和高度)

elapsed

从调用 joinChannelByToken到发生此事件过去的时间(ms)。

详情

firstRemoteVideoDecodedBlock。提示已收到第一帧远端视频流并解码。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:firstRemoteVideoFrameOfUid:size:elapsed:

已显示远端视频首帧回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteVideoFrameOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed

参数

engine

AgoraRtcEngineKit 对象

uid

远端用户 UID

size

视频尺寸(宽和高)

elapsed

从调用joinChannelByToken到发生此事件过去的时间(ms)。

详情

firstRemoteVideoFrameBlock。提示第一帧远端视频显示在视图上。 App 可在此调用中获知出图时间(elapsed)。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didAudioMuted:byUid:

远端用户音频静音回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioMuted:(BOOL)muted byUid:(NSUInteger)uid

参数

engine

AgoraRtcEngineKit 对象

muted

该用户是否静音:

  • YES: 静音
  • NO: 取消静音
uid

远端用户ID

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didVideoMuted:byUid:

远端用户暂停/重新发送视频回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid

参数

engine

AgoraRtcEngineKit 对象

muted

暂停或恢复发送视频流:

  • Yes: 该用户已暂停发送其视频流
  • No: 该用户已恢复发送其视频流
uid

远端用户 UID

详情

userMuteVideoBlock

Note:

现阶段,当频道内用户数超过 20 人,该回调会失效。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didVideoEnabled:byUid:

其他用户启用/关闭视频回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoEnabled:(BOOL)enabled byUid:(NSUInteger)uid

参数

engine

AgoraRtcEngineKit 对象

enabled

是否启用了视频功能

  • YES: 该用户已启用了视频功能。启用后,该用户可以进行视频通话或直播。
  • NO: 该用户已关闭了视频功能。关闭后,该用户只能进行语音通话或直播,不能显示、发送自己的视频,也不能接收、显示别人的视频。
uid

远端用户 UID

详情

提示有其他用户启用/关闭了视频功能。关闭视频功能是指该用户只能进行语音直播,不能显示、发送自己的视频,也不能接收、显示别人的视频。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didLocalVideoEnabled:byUid:

其他用户启用/关闭本地视频回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLocalVideoEnabled:(BOOL)enabled byUid:(NSUInteger)uid

参数

engine

AgoraRtcEngineKit 对象

enabled

是否启用了视频功能

  • YES: 该用户已启用本地视频功能。启用后,其他用户可以接收到该用户的视频流。
  • NO: 该用户已关闭视频功能。关闭后,该用户仍然可以接收其他用户的视频流,但其他用户接收不到该用户的视频流。
uid

远端用户 UID

详情

提示有其他用户启用/关闭了本地视频功能。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:videoSizeChangedOfUid:size:rotation:

本地或远端视频大小和旋转信息发生改变回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine videoSizeChangedOfUid:(NSUInteger)uid size:(CGSize)size rotation:(NSInteger)rotation

参数

engine

AgoraRtcEngineKit 对象

uid

图像尺寸和旋转信息发生变化的用户的用户 ID(本地用户的 uid 为 0)

size

新的视频尺寸

rotation

旋转信息 (0 到 360)

Declared In

AgoraRtcEngineKit.h

– rtcEngine:remoteVideoStateChangedOfUid:state:

远端用户视频流状态发生改变回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteVideoStateChangedOfUid:(NSUInteger)uid state:(AgoraVideoRemoteState)state

参数

engine

AgoraRtcEngineKit 对象

uid

发生视频流状态改变的远端用户的 ID

state

远端视频流状态:停止播放、正常播放或视频卡住,详见 AgoraVideoRemoteState

详情

该回调方法表示远端的视频流状态发生了改变。

Note:

该回调在两个视频帧间隔大于等于 600 ms 时才会触发。

Declared In

AgoraRtcEngineKit.h

音视频流回退事件回调

– rtcEngine:didLocalPublishFallbackToAudioOnly:

本地发布流已回退为音频流

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLocalPublishFallbackToAudioOnly:(BOOL)isFallbackOrRecover

参数

engine

AgoraRtcEngineKit 对象

isFallbackOrRecover
  • YES: 由于网络环境不理想,本地发布的媒体流已回退为音频流
  • NO: 由于网络环境改善,发布的音频流已恢复为音视频流

详情

Note:

如果本地推流已回退为音频流,远端的 App 上会收到 didVideoMuted 的回调事件。

如果你调用了设置本地推流回退选项 setLocalPublishFallbackOption 接口并将选项设置为 AgoraStreamFallbackOptionAudioOnly,当上行网络环境不理想、本地发布的媒体流回退为音频流时,或当上行网络改善、媒体流恢复为音视频流时,会触发该回调。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didRemoteSubscribeFallbackToAudioOnly:byUid:

远端订阅流已回退为音频流

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didRemoteSubscribeFallbackToAudioOnly:(BOOL)isFallbackOrRecover byUid:(NSUInteger)uid

参数

engine

AgoraRtcEngineKit 对象

isFallbackOrRecover

回退为音频流或恢复为音视频流:

  • YES: 由于网络环境不理想,远端订阅流已回退为音频流
  • NO: 由于网络环境改善,订阅的音频流已恢复为音视频流
uid

远端用户ID

详情

如果你调用了 setRemoteSubscribeFallbackOption, 接口并将回退选项设置为 AgoraStreamFallbackOptionAudioOnly,当下行网络环境不理想、仅接收远端音频流时,或当下行网络改善、恢复订阅音视频流时,会触发该回调。

Note:

远端订阅流因弱网环境不能同时满足音视频而回退为小流时,你可以使用 remoteVideoStats 方法来监控远端视频大小流的切换。

Declared In

AgoraRtcEngineKit.h

媒体设备事件回调

– rtcEngine:device:type:stateChanged:

设备状态改变回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine device:(NSString *_Nonnull)deviceId type:(AgoraMediaDeviceType)deviceType stateChanged:(NSInteger)state

参数

engine

AgoraRtcEngineKit 对象

deviceId

设备ID

deviceType

设备类型,详见 AgoraMediaDeviceType

state

设备的状态:

  • 0: 已添加。
  • 1: 删除。

详情

Warning: 该回调仅适用于 macOS 平台。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didAudioRouteChanged:

语音路由已发生变化回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioRouteChanged:(AgoraAudioOutputRouting)routing

参数

engine

AgoraRtcEngineKit 对象

routing

设置语音路由: AgoraAudioOutputRouting

详情

当语音路由发生变化时,SDK 会触发此回调。

Declared In

AgoraRtcEngineKit.h

– rtcEngineCameraDidReady:

摄像头就绪回调

- (void)rtcEngineCameraDidReady:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

详情

cameraReadyBlock。提示已成功打开摄像头,可以开始捕获视频。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:cameraFocusDidChangedToRect:

摄像头对焦区域已改变回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine cameraFocusDidChangedToRect:(CGRect)rect

参数

engine

AgoraRtcEngineKit 对象

rect

镜头内表示对焦区域的长方形

详情

该回调仅适用于 iOS 平台。

该回调表示摄像头的对焦区域发生了改变。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:cameraExposureDidChangedToRect:

摄像头曝光区域已改变回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine cameraExposureDidChangedToRect:(CGRect)rect

参数

engine

AgoraRtcEngineKit 对象

rect

镜头内表示曝光的区域

详情

该回调仅适用于 iOS 平台。

Declared In

AgoraRtcEngineKit.h

统计数据事件回调

– rtcEngine:remoteAudioStats:

通话中远端音频流的统计信息回调,用于取代 audioQualityOfUid

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteAudioStats:(AgoraRtcRemoteAudioStats *_Nonnull)stats

参数

engine

AgoraRtcEngineKit 对象

stats

远端音频统计数据,详细定义见 AgoraRtcRemoteAudioStats

详情

该回调描述远端用户在通话中端到端的音频流统计信息,针对每个远端用户/主播每 2 秒触发一次。

如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。

audioTransportStatsOfUid 回调相比,该回调更贴近用户的主观感受。

比如,当网络发生丢包时,因 FEC(Forward Error Correction,向前纠错码)或重传恢复,最终的音频丢帧率不高,则可以认为整个质量较好。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:reportRtcStats:

Rtc Engine 统计数据回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine reportRtcStats:(AgoraChannelStats *_Nonnull)stats

参数

engine

AgoraRtcEngineKit 对象

stats

频道的统计数据,详见 AgoraChannelStats

详情

rtcStatsBlock。该回调定期上报 Rtc Engine 的运行时的状态,每 2 秒触发一次。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:lastmileQuality:

通话前网络上下行 last mile 质量报告回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine lastmileQuality:(AgoraNetworkQuality)quality

参数

engine

AgoraRtcEngineKit 对象

quality

网络上下行质量,基于上下行网络的丢包率和抖动计算,探测结果主要反映上行网络的状态。详见 AgoraNetworkQuality。

详情

该回调描述本地用户在加入频道前的 last mile 网络探测的结果,其中 last mile 是指设备到 Agora 边缘服务器的网络状态。

在调用 enableLastmileTest 之后,该回调每 2 秒触发一次。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:networkQuality:txQuality:rxQuality:

通话中每个用户的网络上下行 last mile 质量报告回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine networkQuality:(NSUInteger)uid txQuality:(AgoraNetworkQuality)txQuality rxQuality:(AgoraNetworkQuality)rxQuality

参数

engine

AgoraRtcEngineKit 对象

uid

用户 ID。表示该回调报告的是持有该 ID 的用户的网络质量。当 uid 为 0 时,返回的是本地用户的网络质量。

txQuality

该用户的上行网络质量。基于上行视频的发送码率、上行丢包率、平均往返时延和网络抖动计算。该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。

假设上行码率是 500 Kbps,那么支持 480 x 480 的分辨率、30 fps 的帧率没有问题,但是支持 1280 x 720 的分辨率就会有困难。详见 AgoraNetworkQuality。

rxQuality

该用户的下行网络质量。基于下行网络的丢包率、平均往返延时和网络抖动计算。详见 AgoraNetworkQuality。

详情

该回调描述每个用户/主播在通话中的 last mile 网络状态,其中 last mile 是指设备到 Agora 边缘服务器的网络状态。

该回调每 2 秒触发一次。如果远端有多个用户/主播,该回调每 2 秒会被触发多次。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:localVideoStats:

本地视频流统计信息回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine localVideoStats:(AgoraRtcLocalVideoStats *_Nonnull)stats

参数

engine

AgoraRtcEngineKit 对象

stats

本地视频的统计信息: AgoraRtcLocalVideoStats

详情

localVideoStatBlock。报告更新本地视频统计信息,该回调方法每两秒触发一次。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:remoteVideoStats:

通话中远端视频流的统计信息回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteVideoStats:(AgoraRtcRemoteVideoStats *_Nonnull)stats

参数

engine

AgoraRtcEngineKit 对象

stats

远端视频统计数据,详细定义见 AgoraRtcRemoteVideoStats

详情

该回调描述远端用户在通话中端到端的视频流统计信息,针对每个远端用户/主播每 2 秒触发一次。

如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。

videoTransportStatsOfUid 相比,该回调更贴近用户的主观感受。比如,当网络发生丢包时,因 FEC(Forward Error Correction,向前纠错码)或重传恢复,最终的视频丢帧率不高,则可以认为整个质量较好。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:audioTransportStatsOfUid:delay:lost:rxKBitRate:

通话中远端音频流传输的统计信息回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine audioTransportStatsOfUid:(NSUInteger)uid delay:(NSUInteger)delay lost:(NSUInteger)lost rxKBitRate:(NSUInteger)rxKBitRate

参数

engine

AgoraRtcEngineKit 对象

uid

用户 ID,指定是哪个用户/主播的音频包

delay

音频包从发送端到接收端的延时(毫秒)

lost

音频包从发送端到接收端 800 ms 的丢包率(%)

rxKBitRate

远端音频包的接收码率(Kbps)

详情

该回调描述远端用户通话中端到端的网络统计信息,通过音频包计算,用客观的数据,如丢包、网络延迟等,展示当前网络状态。

通话中,当用户收到远端用户/主播发送的音频数据包后,会每 2 秒触发一次该回调。

remoteAudioStats 回调相比,该回调以数据展示当前网络状态,因此更客观。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:videoTransportStatsOfUid:delay:lost:rxKBitRate:

通话中远端视频流传输的统计信息回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine videoTransportStatsOfUid:(NSUInteger)uid delay:(NSUInteger)delay lost:(NSUInteger)lost rxKBitRate:(NSUInteger)rxKBitRate

参数

engine

AgoraRtcEngineKit 对象

uid

用户 ID,指定是哪个用户/主播的视频包

delay

视频包从发送端到接收端的延时(毫秒)

lost

视频包从发送端到接收端 800 ms 内的丢包率(%)

rxKBitRate

远端视频包的接收码率(Kbps)

详情

该回调描述远端用户通话中端到端的网络统计信息,通过视频包计算,用客观的数据,如丢包、网络延迟等,展示当前网络状态。

通话中,当用户收到远端用户/主播发送的视频数据包后,会每 2 秒触发一次该回调。

remoteVideoStats 回调相比,该回调以数据展示当前网络状态,因此更客观。

Declared In

AgoraRtcEngineKit.h

音频播放事件回调

– rtcEngineLocalAudioMixingDidFinish:

本地音乐文件播放已结束回调

- (void)rtcEngineLocalAudioMixingDidFinish:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

详情

当调用 startAudioMixing 播放音乐文件音乐结束后,会触发该回调。如果调用 startAudioMixing 失败,会在 didOccurWarning 回调里,返回警告代码 AgoraWarningCodeAudioMixingOpenError。

Declared In

AgoraRtcEngineKit.h

– rtcEngineRemoteAudioMixingDidStart:

远端音乐文件播放已开始回调

- (void)rtcEngineRemoteAudioMixingDidStart:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

详情

当远端有用户调用 startAudioMixing 播放音乐文件音乐,会触发该回调。

Declared In

AgoraRtcEngineKit.h

– rtcEngineRemoteAudioMixingDidFinish:

远端音效文件播放已结束回调

- (void)rtcEngineRemoteAudioMixingDidFinish:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

Declared In

AgoraRtcEngineKit.h

– rtcEngineDidAudioEffectFinish:soundId:

本地音效文件播放已结束回调

- (void)rtcEngineDidAudioEffectFinish:(AgoraRtcEngineKit *_Nonnull)engine soundId:(NSInteger)soundId

参数

engine

AgoraRtcEngineKit 对象

soundId

自行设定的音效 ID,需保证唯一性。

详情

当调用 playEffect 播放音效结束后,会触发该回调。

Declared In

AgoraRtcEngineKit.h

CDN 旁路推流事件回滴

– rtcEngine:streamPublishedWithUrl:errorCode:

旁路推流开启回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamPublishedWithUrl:(NSString *_Nonnull)url errorCode:(AgoraErrorCode)errorCode

参数

engine

AgoraRtcEngineKit 对象

url

RTMP 推流地址

errorCode

常见的错误码如下,详情见 AgoraErrorCode

  • AgoraErrorCodeNoError(0):推流成功
  • AgoraErrorCodeFailed(1):推流失败
  • AgoraErrorCodeInvalidArgument(2):参数错误,如果你在调用 addPublishStreamUrl 前没有调用 setLiveTranscoding 配置 AgoraLiveTranscoding ,会导致此错误。
  • AgoraErrorCodeTimedOut(10):推流超时未成功
  • AgoraErrorCodeAlreadyInUse(19):推流地址已经在推流
  • AgoraErrorCodeAbort(20): SDK 与推流服务器断开连接,推流中断。
  • AgoraErrorCodeResourceLimited(22):后台没有足够资源推流

Declared In

AgoraRtcEngineKit.h

– rtcEngine:streamUnpublishedWithUrl:

旁路推流停止回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamUnpublishedWithUrl:(NSString *_Nonnull)url

参数

engine

AgoraRtcEngineKit 对象

url

主播停止推流的地址

Declared In

AgoraRtcEngineKit.h

– rtcEngineTranscodingUpdated:

旁路推流设置被更新回调

- (void)rtcEngineTranscodingUpdated:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

Declared In

AgoraRtcEngineKit.h

直播导入在线媒体流事件回调

– rtcEngine:streamInjectedStatusOfUrl:uid:status:

导入外部视频流状态回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamInjectedStatusOfUrl:(NSString *_Nonnull)url uid:(NSUInteger)uid status:(AgoraInjectStreamStatus)status

参数

engine

AgoraRtcEngineKit 对象

url

导入进直播的外部视频源 HTTP/HTTPS 地址

uid

用户 ID

status

AgoraInjectStreamStatus

Declared In

AgoraRtcEngineKit.h

数据流事件回调

– rtcEngine:receiveStreamMessageFromUid:streamId:data:

接收到对方数据流消息的回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine receiveStreamMessageFromUid:(NSUInteger)uid streamId:(NSInteger)streamId data:(NSData *_Nonnull)data

参数

engine

AgoraRtcEngineKit 对象

uid

用户ID

streamId

数据流 ID

data

接收到的数据

详情

提示本地用户已在5秒内收到对方发送的数据包。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:didOccurStreamMessageErrorFromUid:streamId:error:missed:cached:

接收对方数据流消息错误的回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didOccurStreamMessageErrorFromUid:(NSUInteger)uid streamId:(NSInteger)streamId error:(NSInteger)error missed:(NSInteger)missed cached:(NSInteger)cached

参数

engine

AgoraRtcEngineKit 对象

uid

用户 ID

streamId

数据流 ID

error

错误代码: AgoraErrorCode

missed

丢失的消息数量

cached

数据流中断时,后面缓存的消息数量

详情

提示本地用户没有在 5 秒内收到对方发送的数据包。

Declared In

AgoraRtcEngineKit.h

其他回调

– rtcEngineMediaEngineDidLoaded:

媒体引擎成功加载的回调

- (void)rtcEngineMediaEngineDidLoaded:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

Declared In

AgoraRtcEngineKit.h

– rtcEngineMediaEngineDidStartCall:

媒体引擎成功启动的回调

- (void)rtcEngineMediaEngineDidStartCall:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

Declared In

AgoraRtcEngineKit.h

已废弃回调

– rtcEngineConnectionDidInterrupted:

网络连接中断回调

- (void)rtcEngineConnectionDidInterrupted:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

详情

DEPRECATED 从 v2.3.2 起废弃

SDK 在和服务器建立连接后,失去了网络连接超过 4 秒,会触发该回调。在触发事件后,SDK 会主动重连服务器,所以该事件可以用于 UI 提示。

rtcEngineConnectionDidLost 回调的区别是:

无论是哪种回调,除非 App 主动调用 leaveChannel,不然 SDK 会一直自动重连。

Declared In

AgoraRtcEngineKit.h

– rtcEngineConnectionDidBanned:

连接已被禁止回调

- (void)rtcEngineConnectionDidBanned:(AgoraRtcEngineKit *_Nonnull)engine

参数

engine

AgoraRtcEngineKit 对象

详情

DEPRECATED 从 v2.3.2 起废弃

当你被服务端禁掉连接的权限时,会触发该回调。

Declared In

AgoraRtcEngineKit.h

– rtcEngine:audioQualityOfUid:quality:delay:lost:

远端音频质量回调

- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine audioQualityOfUid:(NSUInteger)uid quality:(AgoraNetworkQuality)quality delay:(NSUInteger)delay lost:(NSUInteger)lost

参数

engine

AgoraRtcEngineKit 对象。

uid

用户 ID,指定是谁发的音频流。

quality

语音质量,详见 AgoraNetworkQuality

delay

音频包从发送端到接收端的延迟(毫秒)。包括声音采样前处理、网络传输、网络抖动缓冲引起的延迟。

lost

音频包从发送端到接收端的丢包率(%)

详情

DEPRECATED 从 v2.3.2 起废弃

audioQualityBlock

该回调描述远端用户在通话中的音频质量,针对每个远端用户/主播每 2 秒触发一次。如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。

推荐使用

Declared In

AgoraRtcEngineKit.h