IRtcChannelEventHandler

最近更新时间:2022-09-20 05:17:40

Public 成员函数
voidonChannelWarning (RtcChannel rtcChannel, int warn)
voidonChannelError (RtcChannel rtcChannel, int err)
voidonJoinChannelSuccess (RtcChannel rtcChannel, int uid, int elapsed)
voidonRejoinChannelSuccess (RtcChannel rtcChannel, int uid, int elapsed)
voidonLeaveChannel (RtcChannel rtcChannel, RtcStats stats)
voidonClientRoleChanged (RtcChannel rtcChannel, int oldRole, int newRole)
voidonUserJoined (RtcChannel rtcChannel, int uid, int elapsed)
voidonUserOffline (RtcChannel rtcChannel, int uid, int reason)
voidonConnectionStateChanged (RtcChannel rtcChannel, int state, int reason)
voidonConnectionLost (RtcChannel rtcChannel)
voidonTokenPrivilegeWillExpire (RtcChannel rtcChannel, String token)
voidonRequestToken (RtcChannel rtcChannel)
voidonRtcStats (RtcChannel rtcChannel, RtcStats stats)
voidonNetworkQuality (RtcChannel rtcChannel, int uid, int txQuality, int rxQuality)
voidonRemoteVideoStats (RtcChannel rtcChannel, RemoteVideoStats stats)
voidonRemoteAudioStats (RtcChannel rtcChannel, RemoteAudioStats stats)
voidonRemoteAudioStateChanged (RtcChannel rtcChannel, int uid, int state, int reason, int elapsed)
voidonAudioPublishStateChanged (RtcChannel rtcChannel, int oldState, int newState, int elapseSinceLastState)
voidonVideoPublishStateChanged (RtcChannel rtcChannel, int oldState, int newState, int elapseSinceLastState)
voidonAudioSubscribeStateChanged (RtcChannel rtcChannel, int uid, int oldState, int newState, int elapseSinceLastState)
voidonVideoSubscribeStateChanged (RtcChannel rtcChannel, int uid, int oldState, int newState, int elapseSinceLastState)
voidonActiveSpeaker (RtcChannel rtcChannel, int uid)
voidonVideoSizeChanged (RtcChannel rtcChannel, int uid, int width, int height, int rotation)
voidonRemoteVideoStateChanged (RtcChannel rtcChannel, int uid, int state, int reason, int elapsed)

详细描述

IRtcChannelEventHandler 类。

成员函数说明

onChannelWarning()

void onChannelWarning (RtcChannel rtcChannel,int warn)

报告 RtcChannel 对象发生的警告码。

参数描述
rtcChannel当前的 RtcChannel 对象
warn警告代码,详细定义见 Warning Code

onChannelError()

报告 RtcChannel 对象发生的警告码。

参数描述
rtcChannel当前的 RtcChannel 对象
err警告代码,详细定义见 Error Code

onJoinChannelSuccess()

void onJoinChannelSuccess (RtcChannel rtcChannel,String uid,int elapsed)

加入频道回调。

如果在调用 joinChannel 加入频道时没有指定 uid,服务器会指定一个。

参数描述
rtcChannel当前的 RtcChannel 对象
uid用户 ID
elapsedjoinChannel 开始到发生此事件过去的时间(毫秒)

onRejoinChannelSuccess()

void onRejoinChannelSuccess (RtcChannel rtcChannel,String uid,int elapsed)

重新加入频道回调。

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

参数描述
rtcChannel当前的 RtcChannel 对象
uid用户 ID
elapsed从本地用户开始重连到触发该回调的时间(毫秒)。

onLeaveChannel()

void onLeaveChannel()

离开频道回调。

当用户通过调用 leaveChannel 方法成功离开频道时,SDK 会触发该回调。

App 可以通过该回调获取相关频道信息,如通话时长等数据。

onClientRoleChanged()

void onClientRoleChanged(RtcChannel rtcChannel)

直播场景下用户角色已切换回调。如从观众切换为主播,反之亦然。

该回调由本地用户在加入频道后通过 setClientRole 改变用户角色触发的。

参数描述
rtcChannel当前的 RtcChannel 对象
oldRole切换前的角色 CLIENT_ROLE_BROADCASTER(1):主播。 CLIENT_ROLE_AUDIENCE(2):观众。
newRole切换后的角色 CLIENT_ROLE_BROADCASTER(1):主播 CLIENT_ROLE_AUDIENCE(2):观众

onUserJoined()

void onUserJoined(RtcChannel rtcChannel,String uid,int elapsed )

远端用户(通信场景)/主播(直播场景)加入当前频道回调。

  • 通信场景下,该回调提示有远端用户加入了频道,并返回新加入用户的 ID; 如果加入之前,已经有其他用户在频道中了,新加入的用户也会收到这些已有用户加入频道的回调。
  • 直播场景下,该回调提示有主播加入了频道,并返回该主播的用户 ID。 如果在加入之前,已经有主播在频道中了,新加入的用户也会收到已有主播加入频道的回调. 建议连麦主播不超过 17 人。
参数描述
rtcChannel当前的 RtcChannel 对象
uid新加入频道的远端用户/主播 ID
elapsed从本地用户调用 joinChannelsetClientRole(BROADCASTER) 到触发该回调的时间。

注解

直播场景下:

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

onUserOffline()

void onUserOffline(RtcChannel rtcChannel,String uid,int reason )

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

用户离开频道有两个原因,即正常离开和超时掉线:

  • 正常离开时:远端用户/主播会收到类似“再见”的消息,接收此消息后,判断用户离开频道。
  • 超时掉线:在一定时间内(约 20 秒),用户没有收到对方的任何数据包,则判定为对方掉线。 在网络较差的情况下,有可能会误报。AR 建议使用 AR 实时消息 SDK 系统来做可靠的掉线检测。
参数描述
rtcChannel当前的 RtcChannel 对象
uid离开频道或掉线的用户或主播 ID。
reason离线原因: USER_OFFLINE_QUIT(0):用户主动离开 USER_OFFLINE_DROPPED(1):因过长时间收不到对方数据包,超时掉线。注意:由于 SDK 使用的是不可靠通道,也有可能对方主动离开本方没收到对方离开消息而误判为超时掉线USER_OFFLINE_BECOME_AUDIENCE(2):直播场景下,用户身份从主播切换为观众

onConnectionStateChanged()

void onConnectionStateChanged(RtcChannel rtcChannel,int state,int reason )

参数描述
rtcChannel当前的 RtcChannel 对象
state当前的网络连接状态: CONNECTION_STATE_DISCONNECTED(1):网络连接断开CONNECTION_STATE_CONNECTING(2):建立网络连接中 CONNECTION_STATE_CONNECTED(3):网络已连接 CONNECTION_STATE_RECONNECTING(4):重新建立网络连接中CONNECTION_STATE_FAILED(5):网络连接失败
reason引起当前网络连接状态发生改变的原因: CONNECTION_CHANGED_CONNECTING(0):建立网络连接中CONNECTION_CHANGED_JOIN_SUCCESS(1):成功加入频道CONNECTION_CHANGED_INTERRUPTED(2):网络连接中断CONNECTION_CHANGED_BANNED_BY_SERVER(3):网络连接被服务器禁止CONNECTION_CHANGED_JOIN_FAILED(4):加入频道失败CONNECTION_CHANGED_LEAVE_CHANNEL(5):离开频道CONNECTION_CHANGED_INVALID_APP_ID(6):不是有效的 APP ID。请更换有效的 APP ID 重新加入频道 CONNECTION_CHANGED_INVALID_CHANNEL_NAME(7):不是有效的频道名。请更换有效的频道名重新加入频道 CONNECTION_CHANGED_INVALID_TOKEN(8):生成的 Token 无效。一般有以下原因:在控制台上启用了 App Certificate,但加入频道未使用 Token。当启用了 App Certificate,必须使用 Token在调用 joinChannel 加入频道时指定的 uid 与生成 Token 时传入的 uid 不一致CONNECTION_CHANGED_TOKEN_EXPIRED(9):当前使用的 Token 过期,不再有效,需要重新在你的服务端申请生成 Token CONNECTION_CHANGED_REJECTED_BY_SERVER(10):此用户被服务器禁止CONNECTION_CHANGED_SETTING_PROXY_SERVER(11):由于设置了代理服务器,SDK 尝试重连CONNECTION_CHANGED_RENEW_TOKEN(12):更新 Token 引起网络连接状态改变CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED(13):客户端 IP 地址变更,可能是由于网络类型,或网络运营商的 IP 或端口发生改变引起CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT(14):SDK 和服务器连接保活超时,进入自动重连状态

onConnectionLost()

void onConnectionLost(RtcChannel rtcChannel)

网络连接中断,且 SDK 无法在 10 秒内连接服务器回调。

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

如果 SDK 在断开连接后,20 分钟内还是没能重新加入频道,SDK 会停止尝试重连。

参数描述
rtcChannel当前的 RtcChannel 对象

onTokenPrivilegeWillExpire()#

void onTokenPrivilegeWillExpire(RtcChannel rtcChannel,String token)

Token 服务即将过期回调。

在调用 joinChannel 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中如果 Token 即将失效,SDK 会提前 30 秒触发该回调,提醒 App 更新 Token。

当收到该回调时,你需要重新在服务端生成新的 Token,然后调用 renewToken 将新生成的 Token 传给 SDK。

参数描述
rtcChannel当前的 RtcChannel 对象
token服务即将失效的 token。

onRequestToken()

void onRequestToken(RtcChannel rtcChannel)

Token 已过期回调。

如果在加入频道时指定了 token,由于 token 具有一定的时效,在通话过程中如果 token 已经失效,SDK 会触发该回调。

收到该回调时,你需要重新在服务端生成新的 Token,然后调用 renewToken 方法将新生成的 token 传给 SDK。

参数描述
rtcChannel当前的 RtcChannel 对象

onRtcStats()

void onRtcStats(RtcChannel rtcChannel,RtcStats stats)

当前通话统计回调。

该回调在通话过程中每两秒触发一次。

参数描述
rtcChannel当前的 RtcChannel 对象
statsRtcChannel对象数据:RtcStats

onNetworkQuality()

void onNetworkQuality (RtcChannel rtcChannel,String uid, int txQuality,int rxQuality )

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

该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到 边缘服务器的网络状态。 该回调每 2 秒触发一次。如果远端有多个用户/主播,该回调每 2 秒会被触发多次。

参数描述
rtcChannel当前的 RtcChannel 对象
uid用户 ID。表示该回调报告的是持有该 ID 的用户的网络质量。当 uid 为" 0" 时,返回的是本地用户的网络质量。
txQuality该用户的上行网络质量,基于上行视频的发送码率、上行丢包率、平均往返时延和网络抖动计算。该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。 假设上行码率是 1000 Kbps,那么支持 640 × 480 的分辨率、30 fps 的帧率没有问题,但是支持 1280 x 720 的分辨率就会有困难。 QUALITY_UNKNOWN(0):质量未知。 QUALITY_EXCELLENT(1):质量极好。 QUALITY_GOOD(2):用户主观感觉和极好差不多,但码率可能略低于极好。 QUALITY_POOR(3):用户主观感受有瑕疵但不影响沟通。 QUALITY_BAD(4):勉强能沟通但不顺畅。 QUALITY_VBAD(5):网络质量非常差,基本不能沟通。 QUALITY_DOWN(6):网络连接断开,完全无法沟通。 QUALITY_DETECTING(8):SDK 正在探测网络质量。
rxQuality该用户的下行网络质量,基于下行网络的丢包率、平均往返延时和网络抖动计算。 QUALITY_UNKNOWN(0):质量未知。 QUALITY_EXCELLENT(1):质量极好。 QUALITY_GOOD(2):用户主观感觉和极好差不多,但码率可能略低于极好。 QUALITY_POOR(3):用户主观感受有瑕疵但不影响沟通。 QUALITY_BAD(4):勉强能沟通但不顺畅。 QUALITY_VBAD(5):网络质量非常差,基本不能沟通。 QUALITY_DOWN(6):网络连接断开,完全无法沟通。 QUALITY_DETECTING(8):SDK 正在探测网络质量。

onRemoteVideoStats()

void onRemoteVideoStats(RtcChannel rtcChannel,RemoteVideoStats stats)

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

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

参数描述
rtcChannel当前的 RtcChannel 对象
stats远端视频统计数据,详细定义见 Remote Video Stats

onRemoteAudioStats()

void onRemoteAudioStats(RtcChannel rtcChannel,RemoteAudioStats stats)

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

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

参数描述
rtcChannel当前的 RtcChannel 对象
stats接收到的远端音频统计数据,详细定义见 Remote Audio Stats

onRemoteAudioStateChanged()

void onRemoteAudioStateChanged(RtcChannel rtcChannel,String uid,int state,int reason,int elapsed)

远端音频状态发生改变回调。

远端用户(通信场景)或主播(直播场景)音频状态发生改变时,SDK 会触发该回调向本地用户报告当前的远端音频流状态。

注解

当频道内的用户(通信场景)或主播(直播场景)的人数超过 17 时,该回调可能不准确。

参数描述
rtcChannel当前的 RtcChannel 对象
uid发生音频状态改变的远端用户 ID
state远端音频流状态:REMOTE_AUDIO_STATE_STOPPED(0):远端音频流默认初始状态。 在 REMOTE_AUDIO_REASON_LOCAL_MUTED(3)、REMOTE_AUDIO_REASON_REMOTE_MUTED(5) 或 REMOTE_AUDIO_REASON_REMOTE_OFFLINE(7) 的情况下,会报告该状态。REMOTE_AUDIO_STATE_STARTING(1):本地用户已接收远端音频首包REMOTE_AUDIO_STATE_DECODING(2):远端音频流正在解码,正常播放。在 REMOTE_AUDIO_REASON_NETWORK_RECOVERY(2)、 REMOTE_AUDIO_REASON_LOCAL_UNMUTED(4) 或 REMOTE_AUDIO_REASON_REMOTE_UNMUTED(6) 的情况下,会报告该状态REMOTE_AUDIO_STATE_FROZEN(3):远端音频流卡顿。在 REMOTE_AUDIO_REASON_NETWORK_CONGESTION(1) 的情况下,会报告该状态REMOTE_AUDIO_STATE_FAILED(4):远端音频流播放失败。在 REMOTE_AUDIO_REASON_INTERNAL(0) 的情况下,会报告该状态
reason远端音频流状态改变的具体原因:REMOTE_AUDIO_REASON_INTERNAL(0):内部原因REMOTE_AUDIO_REASON_NETWORK_CONGESTION(1):网络阻塞REMOTE_AUDIO_REASON_NETWORK_RECOVERY(2):网络恢复正常REMOTE_AUDIO_REASON_LOCAL_MUTED(3):本地用户停止接收远端音频流或本地用户禁用音频模块REMOTE_AUDIO_REASON_LOCAL_UNMUTED(4):本地用户恢复接收远端音频流或本地用户启用音频模块REMOTE_AUDIO_REASON_REMOTE_MUTED(5):远端用户停止发送音频流或远端用户禁用音频模块REMOTE_AUDIO_REASON_REMOTE_UNMUTED(6):远端用户恢复发送音频流或远端用户启用音频模块REMOTE_AUDIO_REASON_REMOTE_OFFLINE(7):远端用户离开频道
elapsed从本地用户调用 joinChannel 方法到发生本事件经历的时间,单位为 ms

onAudioPublishStateChanged()

void onAudioPublishStateChanged (RtcChannel rtcChannel,int oldState,int newState,int elapseSinceLastState)

音频发布状态改变回调。

发布状态包括:

  • PUB_STATE_IDLE(0)
  • PUB_STATE_NO_PUBLISHED(1)
  • PUB_STATE_PUBLISHING(2)
  • PUB_STATE_PUBLISHED(3)
参数描述
rtcChannel当前的 RtcChannel 对象
oldState之前的发布状态。
newState当前的发布状态。
elapseSinceLastState两次状态变化时间间隔(毫秒)。

onVideoPublishStateChanged()

void onVideoPublishStateChanged (RtcChannel rtcChannel,int oldState,int newState,int elapseSinceLastState)

视频发布状态改变回调。

发布状态包括:

  • PUB_STATE_IDLE(0)
  • PUB_STATE_NO_PUBLISHED(1)
  • PUB_STATE_PUBLISHING(2)
  • PUB_STATE_PUBLISHED(3)
参数描述
rtcChannel当前的 RtcChannel 对象
oldState之前的发布状态。
newState当前的发布状态。
elapseSinceLastState两次状态变化时间间隔(毫秒)。

onAudioSubscribeStateChanged()

void onAudioSubscribeStateChanged (RtcChannel rtcChannel,String uid,int oldState,int newState,int elapseSinceLastState)

音频订阅状态发生改变回调。

订阅状态包括:

  • SUB_STATE_IDLE(0)
  • SUB_STATE_NO_SUBSCRIBED(1)
  • SUB_STATE_SUBSCRIBING(2)
  • SUB_STATE_SUBSCRIBED(3)
参数描述
rtcChannel当前的 RtcChannel 对象
uid远端用户的 ID。
oldState之前的发布状态。
newState当前的发布状态。
elapseSinceLastState两次状态变化时间间隔(毫秒)。

onVideoSubscribeStateChanged()

void onVideoSubscribeStateChanged (RtcChannel rtcChannel,String uid,int oldState,int newState,int elapseSinceLastState)

视频订阅状态发生改变回调。

订阅状态包括:

  • SUB_STATE_IDLE(0)
  • SUB_STATE_NO_SUBSCRIBED(1)
  • SUB_STATE_SUBSCRIBING(2)
  • SUB_STATE_SUBSCRIBED(3)
参数描述
rtcChannel当前的 RtcChannel 对象
uid远端用户的 ID。
oldState之前的发布状态。
newState当前的发布状态。
elapseSinceLastState两次状态变化时间间隔(毫秒)。

onActiveSpeaker()

void onActiveSpeaker(RtcChannel rtcChannel,String uid)

监测到活跃用户回调。

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

参数描述
rtcChannel当前的 RtcChannel 对象
uid当前时间段声音最大的用户的 uid。如果返回的 uid 为 "0",则默认为本地用户。

注解

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

onVideoSizeChanged()

void onVideoSizeChanged(RtcChannel rtcChannel,String uid,int width,int height,int rotation)

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

参数描述
rtcChannel当前的 RtcChannel 对象
uid图像尺寸和旋转信息发生变化的用户 ID。如果返回的 uid 为"0",则表示本地用户
width视频流的宽度(像素)
height视频流的高度(像素)
rotation旋转信息 [0,360]

onRemoteVideoStateChanged()

void onRemoteVideoStateChanged(RtcChannel rtcChannel,String uid,int state,int reason,int elapsed)

远端用户视频状态发生已变化回调。

注解

当频道内的用户(通信场景)或主播(直播场景)的人数超过 17 时,该回调可能不准确。

参数描述
rtcChannel当前的 RtcChannel 对象
uid发生视频状态改变的远端用户 ID
state远端视频流状态:REMOTE_VIDEO_STATE_STOPPED(0):远端视频默认初始状态。在 REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED(3)、REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED(5) 或 REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE(7) 的情况下,会报告该状态。REMOTE_VIDEO_STATE_STARTING(1):本地用户已接收远端视频首包REMOTE_VIDEO_STATE_DECODING(2):远端视频流正在解码,正常播放。在 REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY(2)、REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED(4)、REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED(6) 或 REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY(9) 的情况下,会报告该状态REMOTE_VIDEO_STATE_FROZEN(3):远端视频流卡顿。在 REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION(1) 或 REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK(8) 的情况下,会报告该状态REMOTE_VIDEO_STATE_FAILED(4):远端视频流播放失败。在 REMOTE_VIDEO_STATE_REASON_INTERNAL(0) 的情况下,会报告该状态。
reason远端视频流状态改变的具体原因:REMOTE_VIDEO_STATE_REASON_INTERNAL(0):内部原因REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION(1):网络阻塞REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY(2):网络恢复正常REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED(3):本地用户停止接收远端视频流或本地用户禁用视频模块REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED(4):本地用户恢复接收远端视频流或本地用户启动视频模块REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED(5):远端用户停止发送视频流或远端用户禁用视频模块REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED(6):远端用户恢复发送视频流或远端用户启用视频模块REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE(7):远端用户离开频道REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK(8):远端视频流已回退为音频流REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY(9):回退的远端音频流恢复为视频流
elapsed从本地用户调用 joinChannel 方法到发生本事件经历的时间,单位为 ms