// // ARtcChannelDelegate.h // ARtcKit // // Created by 余生丶 on 2020/3/24. // Copyright © 2020 zjq. All rights reserved. // #ifndef ARtcChannelDelegate_h #define ARtcChannelDelegate_h @protocol ARtcChannelDelegate @optional /** 发生警告回调 @param rtcChannel ARtcChannel 类。 @param warningCode ARWarningCode */ - (void)rtcChannel:(ARtcChannel *_Nonnull)rtcChannel didOccurWarning:(ARWarningCode)warningCode; /** 发生错误回调 @param rtcChannel ARtcChannel 类。 @param errorCode ARErrorCode */ - (void)rtcChannel:(ARtcChannel *_Nonnull)rtcChannel didOccurError:(ARErrorCode)errorCode; /** 加入频道回调 @param rtcChannel ARtcChannel 类。 @param uid 用户ID @param elapsed 从调用joinChannelByToken开始到发生此事件过去的时间(ms)。 */ - (void)rtcChannelDidJoinChannel:(ARtcChannel *_Nonnull)rtcChannel withUid:(NSString *_Nonnull)uid elapsed:(NSInteger)elapsed; /** 重新加入频道回调 @param rtcChannel ARtcChannel 类。 @param uid 用户ID @param elapsed 从开始重连到重连成功的时间(ms)。 */ - (void)rtcChannelDidRejoinChannel:(ARtcChannel *_Nonnull)rtcChannel withUid:(NSString *_Nonnull)uid elapsed:(NSInteger)elapsed; /** 已离开频道回调 当用户调用 leaveChannel 离开频道后,SDK 会触发该回调。在该回调方法中,App 可以得到此次通话的总通话时长、SDK 收发数据的流量等信息。 @param rtcChannel ARtcChannel 类。 @param stats 通话相关的统计信息:ARChannelStats */ - (void)rtcChannelDidLeaveChannel:(ARtcChannel *_Nonnull)rtcChannel withStats:(ARChannelStats *_Nonnull)stats; /** 用户角色已切换回调 直播场景下,当本地用户在加入频道后调用 setClientRole 切换角色时会触发此回调,即主播切换为观众时,或观众切换为主播时。 @param rtcChannel ARtcChannel 类。 @param oldRole 切换前的角色 @param newRole 切换后的角色 */ - (void)rtcChannel:(ARtcChannel *_Nonnull)rtcChannel didClientRoleChanged:(ARClientRole)oldRole newRole:(ARClientRole)newRole; /** 远端用户/主播加入回调 @param rtcChannel ARtcChannel 类。 @param uid 新加入频道的远端用户/主播 ID。如果 joinChannelByToken 中指定了 uid,则此处返回该 ID;否则使用ar云平台服务器自动分配的 ID。 @param elapsed 从本地用户加入频道 joinChannelByToken开始到发生此事件过去的时间(ms)。 */ - (void)rtcChannel:(ARtcChannel *_Nonnull)rtcChannel didJoinedOfUid:(NSString *_Nonnull)uid elapsed:(NSInteger)elapsed; /** 远端用户(通信场景)/主播(直播场景)离开当前频道回调 @param rtcChannel ARtcChannel 类。 @param uid 离线的用户 ID。 @param reason 离线原因,详见 ARUserOfflineReason。 */ - (void)rtcChannel:(ARtcChannel *_Nonnull)rtcChannel didOfflineOfUid:(NSString *_Nonnull)uid reason:(ARUserOfflineReason)reason; /** 网络连接状态已改变回调 该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状态,和引起网络状态改变的原因。 @param rtcChannel ARtcChannel 类。 @param state 当前的网络连接状态,详见 ARConnectionStateType。 @param reason 引起网络连接状态发生改变的原因,详见 ARConnectionChangedReason。 */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel connectionChangedToState:(ARConnectionStateType)state reason:(ARConnectionChangedReason)reason; /** 网络连接中断,且 SDK 无法在 10 秒内连接服务器回调 SDK 在调用 joinChannelByToken 后无论是否加入成功,只要 10 秒和服务器无法连接就会触发该回调。 如果 SDK 在断开连接后,20 分钟内还是没能重新加入频道,SDK 会停止尝试重连。 @param rtcChannel ARtcChannel 类。 */ - (void)rtcChannelDidLost:(ARtcChannel * _Nonnull)rtcChannel; /** Token 服务即将过期回调 在调用 joinChannelByToken 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中如果 Token 即将失效,SDK 会提前 30 秒触发该回调,提醒应用程序更新 Token。 当收到该回调时,用户需要重新在服务端生成新的 Token,然后调用 renewToken 将新生成的 Token 传给 SDK。 @param rtcChannel ARtcChannel 类。 @param token 即将服务失效的 Token */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel tokenPrivilegeWillExpire:(NSString *_Nonnull)token; /** Token 过期回调 在调用 joinChannelByToken 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中 SDK 可能由于网络原因和服务器失去连接,重连时可能需要新的 Token。 该回调通知 App 需要生成新的 Token,并需调用 renewToken 为 SDK 指定新的 Token。 @param rtcChannel ARtcChannel 类。 */ - (void)rtcChannelRequestToken:(ARtcChannel *_Nonnull)rtcChannel; /** 监测到活跃用户的回调 该回调获取当前时间段内累积音量最大者。如果用户开启了 enableAudioVolumeIndication 功能,则当音量检测模块监测到频道内有新的活跃用户说话时,会通过本回调返回该用户的 uid。 **Note** - 你需要开启 enableAudioVolumeIndication 方法才能收到该回调 - uid 返回的是当前时间段内声音最大的用户 uid,而不是瞬时声音最大的用户 uid。 @param rtcChannel ARtcChannel 类。 @param speakerUid 当前时间段声音最大的用户的 uid。 */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel activeSpeaker:(NSString * _Nonnull)speakerUid; /** 本地或远端视频大小和旋转信息发生改变回调 @param rtcChannel ARtcChannel 类。 @param uid 图像尺寸和旋转信息发生变化的用户的用户 ID @param size 新的视频尺寸 @param rotation 旋转信息 (0 到 360) */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel videoSizeChangedOfUid:(NSString *_Nonnull)uid size:(CGSize)size rotation:(NSInteger)rotation; /** 远端视频状态发生改变回调 @param rtcChannel ARtcChannel 类。 @param uid 发生视频状态改变的远端用户 ID。 @param state 远端视频流状态。详见 ARVideoRemoteState。 @param reason 远端视频流状态改变的具体原因。详见 ARVideoRemoteStateReason。 @param elapsed 从本地用户调用 joinChannelByToken 方法到发生本事件经历的时间,单位为 ms。 */ - (void)rtcChannel:(ARtcChannel *_Nonnull)rtcChannel remoteVideoStateChangedOfUid:(NSString *_Nonnull)uid state:(ARVideoRemoteState)state reason:(ARVideoRemoteStateReason)reason elapsed:(NSInteger)elapsed; /** 远端音频流状态发生改变回调。 远端用户/主播音频状态发生改变时,SDK 会触发该回调向本地用户报告当前的远端音频流状态。 @param rtcChannel ARtcChannel 类。 @param uid 发生音频状态改变的远端用户 ID。 @param state 远端音频流状态。详见 ARAudioRemoteState。 @param reason 远端音频流状态改变的具体原因。详见 ARAudioRemoteStateReason。 @param elapsed 从本地用户调用 joinChannelByToken 方法到发生本事件经历的时间,单位为 ms。 */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel remoteAudioStateChangedOfUid:(NSString *_Nonnull)uid state:(ARAudioRemoteState)state reason:(ARAudioRemoteStateReason)reason elapsed:(NSInteger)elapsed; /** 当前通话统计回调。 该回调在通话或直播中每两秒触发一次。 @param rtcChannel ARtcChannel 类。 @param stats 通话相关的数据统计信息,详见 ARChannelStats */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel reportRtcStats:(ARChannelStats * _Nonnull)stats; /** 通话中每个用户的网络上下行 last mile 质量报告回调 该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到 ar云平台 边缘服务器的网络状态。 该回调每 2 秒触发一次。如果远端有多个用户,该回调每 2 秒会被触发多次。 @param rtcChannel ARtcChannel 类。 @param uid 用户 ID。表示该回调报告的是持有该 ID 的用户的网络质量。 @param txQuality 该用户的上行网络质量。基于上行视频的发送码率、上行丢包率、平均往返时延和网络抖动计算。该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。 假设上行码率是 500 Kbps,那么支持 480 x 480 的分辨率、30 fps 的帧率没有问题,但是支持 1280 x 720 的分辨率就会有困难。详见 ARNetworkQuality。 @param rxQuality 该用户的下行网络质量。基于下行网络的丢包率、平均往返延时和网络抖动计算。详见 ARNetworkQuality。 */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel networkQuality:(NSString * _Nonnull)uid txQuality:(ARNetworkQuality)txQuality rxQuality:(ARNetworkQuality)rxQuality; /** 通话中远端视频流的统计信息回调 该回调描述远端用户在通话中端到端的视频流统计信息,针对每个远端用户/主播每 2 秒触发一次。 如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。 @param rtcChannel ARtcChannel 类。 @param stats 远端视频统计数据,详见 ARtcRemoteVideoStats */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel remoteVideoStats:(ARtcRemoteVideoStats * _Nonnull)stats; /** 通话中远端音频流的统计信息回调,用于取代 audioQualityOfUid 该回调描述远端用户在通话中端到端的音频流统计信息,针对每个远端用户/主播每 2 秒触发一次。 如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。 和 audioTransportStatsOfUid 回调相比,该回调更贴近用户的主观感受。 比如,当网络发生丢包时,因 FEC(Forward Error Correction,向前纠错码)或重传恢复,最终的音频丢帧率不高,则可以认为整个质量较好。 @param rtcChannel ARtcChannel 类。 @param stats 远端音频统计数据,详细定义见 ARtcRemoteAudioStats。 */ - (void)rtcChannel:(ARtcChannel * _Nonnull)rtcChannel remoteAudioStats:(ARtcRemoteAudioStats * _Nonnull)stats; @end #endif /* ARtcChannelDelegate_h */