
# 事件回调（HWRtcConnection）
本章节介绍了iOS/macOS SDK的回调接口HWRtcConnectionDelegate的详情。
表1事件回调说明 
| 接口                                                                                    | 描述                  |
|:---|:---|
| [connection:onJoinSuccess]                        | 成功加入跨房房间回调          |
| [connection:onJoinRoomFailure]                       | 加入跨房房间失败回调          |
| [connection:onRejoinRoomSuccess]                     | 重新加入跨房房间成功回调        |
| [connection:onLeaveRoom]                          | 离开跨房房间回调            |
| [connection:onRemoteUserOnline]                     | 用户加入跨房房间回调          |
| [connection:onRemoteUserOffline]                   | 用户离开跨房房间回调          |
| [connection:onFirstRemoteVideoDecoded]               | 引擎收到第一帧远端视频流并解码成功回调 |
| [connection:onUserRoleChangedNotify]                | 用户角色切换成功回调          |
| [connection:onConnectionChangedNotify]            | 连接状态改变回调            |
| [connection:onError]                               | 错误回调                |
| [connectionOnSignatureExpired]                   | 签名过期回调              |
| [connection:onRemoteAudioStateChange]               | 远端用户音频流状态改变回调       |
| [connection:onRemoteVideoStateChange]                | 远端用户视频流状态改变回调       |
| [connection:onUserVolumeStatsNotify]                | 音频音量回调              |
| [connection:onNetworkQualityNotify]                | 入会中网络质量回调，2s触发一次回调  |
| [connection:onVideoStatsNotify]                     | 视频流详情，2s触发一次回调      |
| [connection:onAudioStatsNotify]                     | 音频流详情，2s触发一次回调      |
| [connection:onAuxiliaryStreamStatsNotify]         | 辅流流详情，2s触发一次回调      |
| [connection:onUserAuxiliaryStreamAvailable]       | 辅流状态回调              |
| [connection:onRenderSuccessNotify]                  | 用户视频流渲染成功通知回调       |
| [connection:onRemoteVideoStatsNotify]              | 远端视频统计回调            |
| [connection:onRemoteAudioStatsNotify]             | 远端音频统计回调            |
| [connection:onRemoteVideoResolutionChangedNotify] | 远端视频大小流改变回调         |
| [connection:onFirstRemoteAuxiliaryStreamDecoded]    | 远端辅流首帧解码通知          |
| [connection:onTopActiveSpeaker]                     | 返回当前音量最大的用户ID       |
| [connection:onRemoteMicrophoneStateChanged]       | 远端麦克风设备状态变更通知       |
| [connection:onMediaAddressNotify]                | 加入房间成功之后sfuip地址回调   |
   
 #### connection:onJoinSuccess
```
- (void)connection:(HWRtcConnection *)connection
 onjoinSuccess:(NSString * _Nonnull)userId;
```
【**功能说明**】
成功加入跨房房间，触发此回调。
【**回调参数** 】
- connection：跨房引擎。
- userId：新加入房间的用户ID。
 
 #### connection:onJoinRoomFailure
```
- (void)connection:(HWRtcConnection *)connection
  onJoinRoomFailure:(int)errorCode
           errorMsg:(NSString * _Nonnull)errorMsg;
```
【**功能说明**】
加入房间失败，触发此回调。
【**回调参数**】
- connection：跨房引擎。
- errorCode：错误码，具体请参见[HRTCErrorCode](https://support.huaweicloud.com/csdk-rtc/rtc_05_0080.html)。
- errorMsg：错误信息描述。
 
 #### connection:onRejoinRoomSuccess
```
- (void)connection:(HWRtcConnection *)connection
 onRejoinRoomSuccess:(NSString * _Nonnull)userid;
```
【**功能说明**】
重新加入房间回调。例如，网络异常后重连成功加入房间触发。
【**回调参数** 】
- connection：跨房引擎。
- userid：用户ID。
 
 #### connection:onLeaveRoom
```
-(void)connection:(HWRtcConnection *)connection
       onLeaveRoom:(HWRtcLeaveReason)leaveReason
         statsInfo:(HWRtcStatsInfo * _Nonnull)statsInfo;
```
【**功能说明**】
离开房间，触发此回调。
【**回调参数**】
- connection：跨房引擎。
- leaveReason：离开的房间原因，具体请参见[HWRtcLeaveReason](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section1020461223716)。
- statsInfo：卡顿统计信息，具体请参见[HWRtcStatsInfo](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section793512313340)。
![](https://support.huaweicloud.com/csdk-rtc/public_sys-resources/caution_3.0-zh-cn.png)
APP调用[leaveRoom](https://support.huaweicloud.com/csdk-rtc/rtc_05_0069.html#rtc_05_0069__section16904698255)接口时，会返回HWRtcLeaveReasonUserLeaveRoom，APP可以通过以下任一方式回退到登录界面。
- APP在调用[leaveRoom](https://support.huaweicloud.com/csdk-rtc/rtc_05_0069.html#rtc_05_0069__section16904698255)接口时退到登录界面，或者在收到onLeaveRoom回调，且回调消息不等于HWRtcLeaveReasonUserLeaveRoom时（防止重复操作），退到登录界面。
- APP只在收到onLeaveRoom消息时退到登录界面。
 
 #### connection:onRemoteUserOnline
```
- (void)connection:(HWRtcConnection *)connection
       onRemoteUserOnline:(NSString * _Nonnull)userId
           userName:(NSString * _Nonnull)userName;
```
【**功能说明**】
远端用户加入跨房房间成功，触发此回调。该回调提示有远端用户加入了跨房房间，并返回新加入用户信息。
【**回调参数**】
- connection：跨房引擎。
- userId：远端用户ID。
- userName：远端用户昵称。
 
 #### connection:onRemoteUserOffline
```
- (void)connection:(HWRtcConnection *)connection
      onRemoteUserOffline:(NSString * _Nonnull)userId
             reason:(NSInteger)reason;
```
【**功能说明**】
远端用户离开跨房房间，触发此回调。
本端用户离开当前房间，会回调当前房间所有用户offline。
【**回调参数** 】
- connection：跨房引擎。
- userId：离开房间的远端用户ID。
- reason：远端用户离线原因，预留参数。
 
 #### connection:onFirstRemoteVideoDecoded
```
- (void)connection:(HWRtcConnection *)connection
 onFirstRemoteVideoDecoded:(NSString * _Nonnull)userId
             width:(int)width height:(int)height;
```
【**功能说明**】
跨房引擎收到第一帧远端视频流并解码成功回调。
【**回调参数** 】
- connection：跨房引擎。
- userId：用户ID。
- width：视频流宽度。
- height：视频流高度。
 
#### connection:onFirstRemoteVideoDecoded
```
- (void)connection:(HWRtcConnection *)connection
 onFirstRemoteVideoDecoded:(NSString * _Nonnull)userId
             width:(int)width height:(int)height elapsed:(NSUInteger)elapsed;
```
【**功能说明**】
跨房引擎收到第一帧远端视频流并解码成功回调。
【**回调参数** 】
- connection：跨房引擎。
- userId：用户ID。
- width：视频流宽度。
- height：视频流高度。
- elapsed: 首帧解码后消耗的时间，单位ms。
 
 #### connection:onUserRoleChangedNotify
```
- (void)connection:(HWRtcConnection *)connection
 onUserRoleChangedNotify:(HWRtcRole)oldRole
           newRole:(HWRtcRole)newRole;
```
【**功能说明**】
用户跨房的房间内角色切换成功，触发此回调。
【**回调参数**】
- connection：跨房引擎。
- oldRole：切换前的角色，具体请参见[HWRtcRole](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section181001014124014)。
- newRole：切换成功后的角色，具体请参见[HWRtcRole](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section181001014124014)。
 
 #### connection:onConnectionChangedNotify
```
- (void)connection:(HWRtcConnection *)connection
 onConnectionChangedNotify:(HWRtcConnStateType)state
            reason:(HWRtcConnChangeReason)reason
       description:(NSString * _Nonnull)description;
```
【**功能说明**】
网络连接状态发生变化，触发此回调。
【**回调参数**】
- connection：跨房引擎。
- state：链接服务器状态，具体请参见[HWRtcConnStateType](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section1263474584118)。
- reason：连接状态改变原因，具体请参见[HWRtcConnChangeReason](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section83735472204)。
- description：连接状态改变描述。
 
 #### connection:onError
```
- (void)connection:(HWRtcConnection *)connection
           onError:(int)errorCode
          errorMsg:(NSString * _Nonnull)errorMsg;
```
【**功能说明**】
发生错误，触发此回调。返回客户端错误码或者服务端错误码。
【**回调参数**】
- connection：跨房引擎。
- errorCode：错误码，具体请参见[HRTCErrorCode](https://support.huaweicloud.com/csdk-rtc/rtc_05_0080.html)。
- errorMsg：错误信息描述。
 
 #### connection:onAuthorizationExpired
```
- (void)connectionOnSignatureExpired:(HWRtcConnection *)connection;
```
【**功能说明**】
鉴权签名过期回调，需要app调用[renewAuthorization](https://support.huaweicloud.com/csdk-rtc/rtc_05_0068.html#rtc_05_0068__section1223254913206)更新签名。
【**回调参数**】
connection：跨房引擎。
 #### connection:onRemoteAudioStateChange
```
- (void)connection:(HWRtcConnection *)connection
onRemoteAudioStateChange:(NSString * _Nonnull)roomid
            userid:(NSString * _Nonnull)userid
             state:(HWRtcRemoteAudioState)state
            reason:(HWRtcRemoteAudioStateReason)reason;
```
【**功能说明**】
远端用户音频流状态发生改变，会触发此回调。
【**回调参数**】
- connection：跨房引擎。
- roomid：房间ID。

- userid：远端用户ID。

- state：远端音频流状态，具体请参见[HWRtcRemoteAudioState](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section65941497369)。
- reason：远端音频流状态改变原因，具体请参见[HWRtcRemoteAudioStateReason](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section98555542368)。
 
 #### connection:onRemoteVideoStateChange
```
- (void)connection:(HWRtcConnection *)connection
onRemoteVideoStateChange:(NSString * _Nonnull)roomid
            userid:(NSString * _Nonnull)userid
             state:(HWRtcRemoteVideoState)state
            reason:(HWRtcRemoteVideoStateReason)reason
```
【**功能说明**】
远端用户视频流状态发生改变，会触发此回调。
【**回调参数**】
- connection：跨房引擎。
- roomid：房间ID。
- userid：远端用户ID。
- state：远端视频流状态，具体请参见[HWRtcRemoteVideoState](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section34581017377)。
- reason：远端视频流状态改变原因，具体请参见[HWRtcRemoteVideoStateReason](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section102046773713)。
 
 #### connection:onUserVolumeStatsNotify
```
- (void)connection:(HWRtcConnection *)connection
 onUserVolumeStatsNotify:(NSArray <HWRtcMediaUsersVolumeInfo *> *_Nullable)usersVolumeArray
        userNumber:(NSUInteger)userNumber totalVolume:(NSUInteger)totalVolume;
```
【**功能说明**】
用户音量状态回调。通过[setVolumeNotifyInterval](https://support.huaweicloud.com/csdk-rtc/rtc_05_0056.html#rtc_05_0056__section37939461531)开启并设置回调周期，定时上报。包括总音量以及各发言人及其对应音量上报显示回调
【**回调参数**】
- connection：跨房引擎。
- usersVolumeArray：回调发言人音量信息，具体请参见[HWRtcMediaUsersVolumeInfo](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section1240729145117)。
- userNumber：上报的发言人人数，最多上报4人，包含本地用户。
- totalVolume：总音量。
 
 #### connection:onNetworkQualityNotify
```
- (void)connection:(HWRtcConnection *)connection
  onNetworkQualityNotify:(NSArray <HWRtcQualityInfo *> * _Nullable)upStreamQualityArray
downStreamQualityInfo:(NSArray <HWRtcQualityInfo *> * _Nullable)downStreamQualityArray;
```
【**功能说明**】
会中基于流级别的网络质量检测回调，音频流、视频流分别回调。
【**回调参数**】
- connection：跨房引擎。
- upStreamQualityArray：上行网络质量上报。
- downStreamQualityArray：下行网络质量上报。
 
 #### connection:onVideoStatsNotify
```
- (void)connection:(HWRtcConnection *)connection
      onVideoStatsNotify:(NSArray <HWRtcVideoStatsInfo *> * _Nullable)videoStatsArray
   remoteVideoInfo:(NSArray <HWRtcVideoStatsInfo *>* _Nullable)remoteVideoStatsInfos;
```
【**功能说明**】
视频流详情，2s触发一次回调。
【**回调参数**】
- connection：跨房引擎。
- videoStatsArray：本地视频发流详情，具体请参见[HWRtcVideoStatsInfo](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section1644823716312)。

- remoteVideoStatsInfo：远端视频收流详情，具体请参见[HWRtcVideoStatsInfo](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section1644823716312)。
 
 #### connection:onAudioStatsNotify
```
- (void)connection:(HWRtcConnection *)connection
      onAudioStatsNotify:(NSArray <HWRtcAudioStatsInfo *> * _Nullable)audioStatsArray
   remoteAudioInfo:(NSArray <HWRtcAudioStatsInfo *> * _Nullable)remoteAudioStatsInfos;
```
【**功能说明**】
音频流详情，2s触发一次回调。
【**回调参数**】
- connection：跨房引擎。

- audioStatsArray：本地音频发流详情，具体请参见[HWRtcAudioStatsInfo](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section16303932153110)。
- remoteAudioStatsInfos：远端音频收流详情，具体请参见[HWRtcAudioStatsInfo](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section16303932153110)。
 
 #### connection:onAuxiliaryStreamStatsNotify
```
- (void)connection:(HWRtcConnection *)connection
  onAuxiliaryStreamStatsNotify:(NSArray <HWRtcVideoStatsInfo *> * _Nullable)subStreamStatsArray
   remoteVideoInfo:(NSArray <HWRtcVideoStatsInfo *> * _Nullable)remoteVideoStatsInfos;
```
【**功能说明**】
辅流详情，2s触发一次回调。
【**回调参数**】
- connection：跨房引擎。

- subStreamStatsArray：本地辅流发流详情，具体请参见[HWRtcVideoStatsInfo](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section1644823716312)。
- remoteVideoStatsInfos：远端辅流收流详情，具体请参见[HWRtcVideoStatsInfo](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section1644823716312)。
 
 #### connection:onUserAuxiliaryStreamAvailable
```
- (void)connection:(HWRtcConnection *)connection
onUserAuxiliaryStreamAvailable:(NSString * _Nonnull)userId
       isAvailable:(BOOL)isAvailable;
```
【**功能说明**】
远端开启，停止辅流后，触发此回调。
【**回调参数**】
- connection：跨房引擎。

- userId：远端用户ID。
- isAvailable：YES表示远端开启屏幕共享，NO表示远端停止屏幕共享。
 
 #### connection:onRenderSuccessNotify
```
- (void)connection:(HWRtcConnection *)connection
onRenderSuccessNotify:(NSString *_Nonnull)userId
             isAux:(NSUInteger)isAux;
```
【**功能说明**】
用户视频流渲染成功通知回调。首帧渲染成功、分辨率变化或视频流中断后恢复触发。
【**回调参数**】
- connection：跨房引擎。
- userId：用户ID。
- isAux：YES表示是辅流，NO表示不是辅流。
 
 #### connection:onRemoteVideoStatsNotify
```
- (void)connection:(HWRtcConnection *)connection
onRemoteVideoStatsNotify:(NSArray <HWRtcRemoteVideoStats *> * _Nullable)remoteVideoStatsArray;
```
【**功能说明**】
远端视频流详情，2s触发一次回调。
【**回调参数**】
- connection：跨房引擎。
- remoteVideoStatsArray：远端视频收流详情参数，具体请参见[HWRtcRemoteVideoStats](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section1994111423574)。
 
 #### connection:onRemoteAudioStatsNotify
```
- (void)connection:(HWRtcConnection *)connection
onRemoteAudioStatsNotify:(NSArray <HWRtcRemoteAudioStats *> * _Nullable)remoteAudioStatsArray;
```
【**功能说明**】
远端音频流详情，2s触发一次回调。
【**回调参数**】
- connection：跨房引擎。
- remoteAudioStatsArray：远端音频收流详情，具体请参见[HWRtcRemoteAudioStats](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section89674306213)。
 
 #### connection:onRemoteVideoResolutionChangedNotify
```
- (void)connection:(HWRtcConnection *)connection onRemoteVideoResolutionChangedNotify:(NSString *_Nullable)userId width:(NSInteger)width height:(NSInteger)height;
```
【**功能说明**】
远端视频大小改变回调。
【**回调参数**】
- connection：跨房引擎。

- userId：用户ID。
- width：视频流宽度。
- height：视频流高度。
 
 #### connection:onFirstRemoteAuxiliaryStreamDecoded
```
-(void)connection:(HWRtcConnection *)connection
onFirstRemoteAuxiliaryStreamDecoded:(NSString * _Nonnull)userId
                        width:(int)width
                        height:(int)height；
```
【**功能说明**】
引擎收到第一帧远端视频流并解码成功回调。
【**回调参数** 】
- connection：跨房引擎。
- userId：视频流对应的用户ID。
- width：视频流宽度。
- height：视频流高度。
 
#### connection:onFirstRemoteAuxiliaryStreamDecoded
```
-(void)connection:(HWRtcConnection *)connection
onFirstRemoteAuxiliaryStreamDecoded:(NSString * _Nonnull)userId
                        width:(int)width
                        height:(int)height 
                        elapsed:(NSUInteger)elapsed;
```
【**功能说明**】
引擎收到第一帧远端视频流并解码成功回调。
【**回调参数** 】
- connection：跨房引擎。
- userId：视频流对应的用户ID。
- width：视频流宽度。
- height：视频流高度。
- elapsed：首帧解码后消耗的时间，单位ms。
 
 #### connection:onTopActiveSpeaker
```
- (void)connection:(HWRtcConnection *)connection onTopActiveSpeaker:(NSString *_Nonnull)userId noStream:(BOOL)noStream;
```
【**功能说明**】
返回当前音量最大的用户ID。
【**回调参数**】
- connection：跨房引擎
- userId：用户ID。
- noStream：该用户是否有视频流。
 
 #### connection:onRemoteMicrophoneStateChanged
```
- (void)connection:(HWRtcConnection *)connection 
   onRemoteMicrophoneStateChanged:(NSString * _Nonnull)userId state:(HWRtcRemoteMicState)state;
```
【**功能说明**】
远端用户麦克风状态变更通知。
【**回调参数**】
- connection：跨房引擎
- userId：远端用户userId。
- state：麦克风设备状态，具体请参见[HWRtcRemoteMicState](https://support.huaweicloud.com/csdk-rtc/rtc_05_0082.html#rtc_05_0082__section24861113131417)。
 
 #### connection:onMediaAddressNotify
```
- (void)connection:(HWRtcConnection *)connection onMediaAddressNotify:(NSString * _Nonnull)mediaIpv4 mediaIpv6:(NSString * _Nonnull)mediaIpv6;
```
【**功能说明**】
加入房间成功之后，回调SFU的ipv4和ipv6地址。
**【回调参数**】
- connection：跨房引擎
- mediaIpv4：sfu ipv4地址。
- mediaIpv6：sfu ipv6地址。
 
