//
|
// ARtcChannelDelegate.h
|
// ARtcKit
|
//
|
// Created by 余生丶 on 2020/3/24.
|
// Copyright © 2020 zjq. All rights reserved.
|
//
|
|
#ifndef ARtcChannelDelegate_h
|
#define ARtcChannelDelegate_h
|
|
@protocol ARtcChannelDelegate <NSObject>
|
|
@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 */
|