IRtcEngineEventHandler

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

classAudioVolumeInfo
classClientRole
classErrorCode
classLocalAudioStats
classLocalVideoStats
classRemoteAudioStats
classRemoteVideoStats
classRtcStats
classWarnCode
Public 成员函数
voidonWarning (int warn)
voidonError (int err)
voidonJoinChannelSuccess (String channel, String uid, int elapsed)
voidonRejoinChannelSuccess (String channel, String uid, int elapsed)
voidonLeaveChannel (RtcStats stats)
voidonClientRoleChanged (int oldRole, int newRole)
voidonUserJoined (String uid, int elapsed)
voidonUserOffline (String uid, int reason)
voidonConnectionStateChanged (int state, int reason)
voidonConnectionLost ()
voidonTokenPrivilegeWillExpire (String token)
voidonRequestToken ()
voidonAudioVolumeIndication (AudioVolumeInfo[] speakers, int totalVolume)
voidonActiveSpeaker (String uid)
voidonFirstLocalAudioFrame (int elapsed)
voidonFirstLocalAudioFramePublished (int elapsed)
voidonFirstRemoteAudioFrame (String uid, int elapsed)
voidonFirstRemoteAudioDecoded (String uid, int elapsed)
voidonFirstRemoteVideoDecoded (String uid, int width, int height, int elapsed)
voidonFirstLocalVideoFramePublished (int elapsed)
voidonFirstLocalVideoFrame (int width, int height, int elapsed)
voidonFirstRemoteVideoFrame (String uid, int width, int height, int elapsed)
voidonVideoSizeChanged (String uid, int width, int height, int rotation)
voidonRemoteAudioStateChanged (String uid, int state, int reason, int elapsed)
voidonAudioPublishStateChanged (String channel, int oldState, int newState, int elapseSinceLastState)
voidonVideoPublishStateChanged (String channel, int oldState, int newState, int elapseSinceLastState)
voidonAudioSubscribeStateChanged (String channel, String uid, int oldState, int newState, int elapseSinceLastState)
voidonVideoSubscribeStateChanged (String channel, String uid, int oldState, int newState, int elapseSinceLastState)
voidonRemoteVideoStateChanged (String uid, int state, int reason, int elapsed)
voidonAudioRouteChanged (int routing)
voidonChannelMediaRelayStateChanged (int state, int code)
voidonChannelMediaRelayEvent (int code)
voidonCameraFocusAreaChanged (Rect rect)
voidonCameraExposureAreaChanged (Rect rect)
voidonRtcStats (RtcStats stats)
voidonLocalVideoStats (LocalVideoStats stats)
voidonRemoteVideoStats (RemoteVideoStats stats)
voidonLocalAudioStats (LocalAudioStats stats)
voidonRemoteAudioStats (RemoteAudioStats stats)
voidonAudioEffectFinished (int soundId)
voidonLocalAudioStateChanged (int state, int error)
voidonLocalVideoStateChanged (int localVideoState, int error)
voidonNetworkTypeChanged (int type)
voidonStreamInjectedStatus (String url, int uid, int status)
voidonSnapshotTaken()

详细描述

主回调事件。

IRtcEngineEventHandler 接口类用于SDK向 App 发送回调事件通知,App 通过继承该接口类的方法获取 SDK 的事件通知。 接口类的所有方法都有缺省(空)实现, App 可以根据需要只继承关心的事件。在回调方法中,App 不应该做耗时或者调用可能会引起阻塞的 API(如 SendMessage),否则可能影响 SDK 的运行。

成员函数说明

onWarning()

void onWarning(int warn)

发生警告回调。

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

参数描述
warn警告代码,详细定义见 Warning Code

onError()

void onError(int err)

发生错误回调。

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

参数描述
err错误代码,详细定义见 Error Code

onJoinChannelSuccess()

void onJoinChannelSuccess(String channel,String  uid,int elapsed)

加入频道回调。

表示客户端已经登入服务器,且分配了频道 ID 和用户 ID。频道 ID 的分配是根据 joinChannel 方法中指定的频道名称。如果调用 joinChannel 时并未指定用户 ID,服务器就会分配一个。

参数描述
channel频道名
uid用户 ID

如果 joinChannel 中指定了 uid,则此处返回该 ID;否则使用服务器自动分配的 ID
elapsedjoinChannel 开始到发生此事件过去的时间(毫秒)

onRejoinChannelSuccess()

void onRejoinChannelSuccess(String channel,String uid,int elapsed )

重新加入频道回调。

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

参数描述
channel频道名
uid用户 ID。如果 joinChannel 中指定了 uid,则此处返回该 ID;否则使用服务器自动分配的 ID
elapsed从开始重连到重连成功的时间(毫秒)

onLeaveChannel()

void onLeaveChannel(RtcStats stats)

离开频道回调。

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

参数描述
stats话相关的统计信息:RtcStats

onClientRoleChanged()

void onClientRoleChanged(int oldRole,int newRole)

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

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

参数描述
oldRole切换前的角色
newRole切换后的角色

onUserJoined()

void onUserJoined(String uid,int elapsed )

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

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

该回调在如下情况下会被触发:

  • 远端用户/主播调用 joinChannel 方法加入频道。
  • 远端用户加入频道后调用 setClientRole 将用户角色改变为主播。
  • 远端用户/主播网络中断后重新加入频道。
参数描述
uid新加入频道的远端用户/主播 ID
elapsed从本地用户调用 joinChannel/setClientRole 到触发该回调的延迟(毫秒)

注解

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

onUserOffline()

void onUserOffline(String uid,int reason )

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

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

  • 正常离开的时候,远端用户/主播会收到类似“再见”的消息,接收此消息后,判断用户离开频道
  • 超时掉线的依据是,在一定时间内(约 20 秒),用户没有收到对方的任何数据包,则判定为对方掉线。在网络较差的情况下,有可能会误报。我们建议使用 我们实时消息 SDK 来做可靠的掉线检测。
参数描述
uid主播 ID
reason离线原因:

USER_OFFLINE_QUIT(0):用户主动离开
USER_OFFLINE_DROPPED(1):因过长时间收不到对方数据包,超时掉线。注意:由于 SDK 使用的是不可靠通道,也有可能对方主动离开本方没收到对方离开消息而误判为超时掉线USER_OFFLINE_BECOME_AUDIENCE(2):直播场景下,用户身份从主播切换为观众

onConnectionStateChanged()

void onConnectionStateChanged(int state,int reason )

网络连接状态已改变回调。

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

参数描述
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()

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

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

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

onTokenPrivilegeWillExpire()

void onTokenPrivilegeWillExpire(String token)

Token 服务即将过期回调。

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

参数描述
token即将服务失效的 Token

onRequestToken()

void onRequestToken()

Token 过期回调。

在调用 joinChannel 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中 SDK 可能由于网络原因和服务器失去连接,重连时可能需要新的 Token。该回调通知 App 需要生成新的 Token,并需调用 joinChannel 重新加入频道。

onAudioVolumeIndication()

void onAudioVolumeIndication(AudioVolumeInfo [] speakers,int totalVolume )

提示频道内谁正在说话、说话者音量及本地用户是否在说话的回调。

该回调提示频道内瞬时音量最高的几个用户(最多三个)的用户 ID、他们的音量及本地用户是否在说话。

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

每次触发,用户会收到两个独立的 onAudioVolumeIndication 回调,其中一个包含本地用户的音量信息,另一个包含远端所有用户的音量信息,详见下方参数描述。

注解

如需使用该回调 speakers 数组中的 vad 参数(即本地人声检测功能),请在 enableAudioVolumeIndication 方法中设置 report_vad 为 true。用户调用 muteLocalAudioStream 方法会对 SDK 行为产生影响:本地用户调用该方法后 SDK 即不再返回本地用户的音量提示回调。远端用户调用该方法后 20 秒,远端说话者的音量提示回调将不再包含该用户;如果所有远端用户调用该方法后 20 秒,SDK 即不再返回远端说话者的音量提示回调。

参数描述
speakers每个说话者的用户 ID 和音量信息的数组,详见 AudioVolumeInfo。在本地用户的回调中,此数组中包含以下成员:uid =“0”,表示本地用户;volume,等于 totalVolume,报告本地用户混音后的音量;vad,报告本地用户人声状态。channelId,表示当前说话者在哪个频道。在远端用户的回调中,此数组中包含以下成员:uid,表示每位说话者的用户 ID。volume,表示各说话者混音后的音量。vad 为 0,该参数对远端用户无效。channelId,表示当前说话者在哪个频道。 如果报告的 speakers 数组为空,则表示远端此时没有人说话。
totalVolume为本地用户混音后的音量。在远端用户的回调中,totalVolume 为所有说话者混音后的总音量。

onActiveSpeaker()

void onActiveSpeaker(String uid)

监测到活跃用户回调。

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

参数

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

注解

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

onFirstLocalAudioFrame()

void onFirstLocalAudioFrame(int elapsed)

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

参数描述
elapsed从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒)

onFirstLocalAudioFramePublished()

void onFirstLocalAudioFramePublished(String uid,int width,int height,int elapsed)

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

本地收到远端第一个视频帧并解码成功后,会触发该回调。有两种情况:

  • 远端用户首次上线后发送视频
  • 远端用户视频离线再上线后发送视频

其中,视频离线与用户离线不同。视频离线指本地在 15 秒内没有收到视频包,可能有如下原因:

  • 远端用户离开频道
  • 远端用户掉线
  • 远端用户停止发送本地视频流(调用了 muteLocalVideoStream)
  • 远端用户关闭本地视频模块(调用了 disableVideo)
参数描述
uid用户 ID,指定是哪个用户的视频流
width本地渲染视频的宽(px)
heightheight本地渲染视频的高(px)
elapsed从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒) 如果在 joinChannel 之前调用了 startPreview,则返回的是从调用 startPreview 直至该回调被触发的延迟(毫秒)

onFirstLocalVideoFrame()

void onFirstLocalVideoFrame(int width,int height,int elapsed)

已显示本地视频首帧回调。

第一帧本地视频显示在本地视图上时,触发此回调。

参数描述
width本地渲染视频的宽(px)
heightheight本地渲染视频的高(px)
elapsed从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒) 如果在 joinChannel 之前调用了 startPreview,则返回的是从调用 startPreview 直至该回调被触发的延迟(毫秒)

onFirstRemoteAudioFrame()

void onFirstRemoteAudioFrame(Stirng uid,int elapsed)

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

参数描述
uid发送音频帧的远端用户的 ID
elapsed从调用 joinChannel 方法直至该回调被触发的延迟(毫秒)

onFirstRemoteAudioDecoded()

void onFirstRemoteAudioDecoded(String uid,int elapsed)

已解码远端音频首帧回调。

参数描述
uid用户 ID,指定是哪个用户的音频流
elapsed从本地用户调用 joinChannel 加入频道开始到发生此事件过去的时间(毫秒)

SDK 完成远端音频首帧解码,并发送给音频模块用以播放时,会触发此回调。有两种情况:

  • 远端用户首次上线后发送音频。

远端用户音频离线再上线发送音频。音频离线指本地在 15 秒内没有收到音频包,可能有如下原因:

  • 远端用户离开频道。
  • 远端用户掉线。
  • 远端用户停止发送音频流(调用了 muteLocalAudioStream 方法)。
  • 远端用户关闭音频(调用了 disableAudio 方法)。

onFirstRemoteVideoDecoded()

void onFirstRemoteVideoDecoded(String uid,int width,int height,int elapsed)

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

参数描述
uid用户 ID,指定是哪个用户的视频流
width视频流宽(像素)
height视频流高(像素)
elapsed从本地用户调用 joinChannel 加入频道开始到发生此事件过去的时间(毫秒)

本地收到远端第一个视频帧并解码成功后,会触发该回调。有两种情况:

  • 远端用户首次上线后发送视频
  • 远端用户视频离线再上线后发送视频

其中,视频离线与用户离线不同。视频离线指本地在 15 秒内没有收到视频包,可能有如下原因:

  • 远端用户离开频道
  • 远端用户掉线
  • 远端用户停止发送本地视频流(调用了 muteLocalVideoStream)
  • 远端用户关闭本地视频模块(调用了 disableVideo)

onFirstLocalVideoFramePublished

void onFirstLocalVideoFramePublished(String uid,int elapsed)

已发布本地视频首帧回调。

SDK 会在以下时机触发该回调:

  • 开启本地视频的情况下,调用 joinChannel 成功加入频道后。
  • 调用 muteLocalVideoStream(true),再调用 muteLocalVideoStream(false) 后。
  • 调用 disableVideo,再调用 enableVideo 后。
  • 调用 pushExternalVideoFrame 成功向 SDK 推送视频帧后。
参数描述
elapsed从调用 joinChannel 方法到触发该回调的时间间隔(毫秒)。

onFirstRemoteVideoFrame()

void onFirstRemoteVideoFrame(String uid,int width,int height,int elapsed)

已显示远端视频首帧回调。 第一帧远端视频显示在视图上时,触发此调用。App 可在此调用中获知出图时间(elapsed)。

参数描述
uid用户 ID,指定是哪个用户的视频流
width视频流宽(像素)
height视频流高(像素)
elapsed从本地用户调用 joinChannel 加入频道开始到发生此事件过去的时间(毫秒)

onVideoSizeChanged()

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

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

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

onRemoteAudioStateChanged()

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

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

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

注解

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

参数描述
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(String channel,int oldState,int newState,int elapseSinceLastState)

音频发布状态改变回调。

参数描述
channel频道名。
oldState之前的发布状态。
newState当前的发布状态。
elapseSinceLastState两次状态变化时间间隔(毫秒)。

发布状态包括:

onVideoPublishStateChanged()

void onVideoPublishStateChanged(String channel,int oldState,int newState,int elapseSinceLastState)

视频发布状态改变回调。

参数描述
channel频道名。
oldState之前的发布状态。
newState当前的发布状态。
elapseSinceLastState两次状态变化时间间隔(毫秒)。

发布状态包括:

onAudioSubscribeStateChanged()

void onAudioSubscribeStateChanged(String channel,String uid,int oldState,int newState,int elapseSinceLastState)

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

参数描述
channel频道名。
uid远端用户的 ID。
oldState之前的发布状态。
newState当前的发布状态。
elapseSinceLastState两次状态变化时间间隔(毫秒)。

订阅状态包括:

onVideoSubscribeStateChanged()

void onVideoSubscribeStateChanged(String channel,String uid,int oldState,int newState,int elapseSinceLastState)

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

参数描述
channel频道名。
uid远端用户的 ID。
oldState之前的发布状态。
newState当前的发布状态。
elapseSinceLastState两次状态变化时间间隔(毫秒)。

订阅状态包括:

onRemoteVideoStateChanged()

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

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

注解

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

参数描述
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

onChannelMediaRelayStateChanged()

void onChannelMediaRelayStateChanged (int state,int code )  

跨频道媒体流转发状态发生改变回调。

当跨频道媒体流转发状态发生改变时,SDK 会触发该回调,并报告当前的转发状态以及相关的错误信息。

参数描述
state跨频道媒体流转发状态:
RELAY_STATE_IDLE(0):SDK 正在初始化
RELAY_STATE_CONNECTING(1):SDK 尝试跨频道
RELAY_STATE_RUNNING(2):源频道主播成功加入目标频道
RELAY_STATE_FAILURE(3):发生异常,详见 code 中提示的错误信息
code跨频道媒体流转发出错的错误码:
RELAY_OK(0):一切正常
RELAY_ERROR_SERVER_ERROR_RESPONSE(1):服务器回应出错
RELAY_ERROR_SERVER_NO_RESPONSE(2):服务器无回应。你可以调用 leaveChannel 方法离开频道
RELAY_ERROR_NO_RESOURCE_AVAILABLE(3):SDK 无法获取服务,可能是因为服务器资源有限导致
RELAY_ERROR_FAILED_JOIN_SRC(4):发起跨频道转发媒体流请求失败
RELAY_ERROR_FAILED_JOIN_DEST(5):接受跨频道转发媒体流请求失败
RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC(6):服务器接收跨频道转发媒体流失败
RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST(7):服务器发送跨频道转发媒体流失败
RELAY_ERROR_SERVER_CONNECTION_LOST(8):SDK 因网络质量不佳与服务器断开。你可以调用 leaveChannel 方法离开当前频道
RELAY_ERROR_INTERNAL_ERROR(9):服务器内部出错
RELAY_ERROR_SRC_TOKEN_EXPIRED(10):源频道的 Token 已过期
RELAY_ERROR_DEST_TOKEN_EXPIRED(11):目标频道的 Token 已过期

onChannelMediaRelayEvent

void onChannelMediaRelayEvent(int code)

跨频道媒体流转发事件回调。

该回调报告跨频道媒体流转发过程中发生的事件。

参数描述
code跨频道媒体流转发事件码:
RELAY_EVENT_NETWORK_DISCONNECTED(0):网络中断导致用户与服务器连接断开RELAY_EVENT_NETWORK_CONNECTED(1):用户与服务器建立连接RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL(2):用户已加入源频道RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL(3):用户已加入目标频道RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL(4):SDK 开始向目标频道发送数据包RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC(5):服务器收到了目标频道发送的视频流RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC(6):服务器收到了目标频道发送的音频流RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL(7):目标频道已更新RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED(8):内部原因导致目标频道更新失败RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE(9):目标频道未发生改变,即目标频道更新失败
RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL(10):目标频道名为 NULL
RELAY_EVENT_VIDEO_PROFILE_UPDATE(11):视频属性已发送至服务器

onAudioRouteChanged()

void onAudioRouteChanged(int routing)

语音路由已变更回调。

当调用 setEnableSpeakerphone 成功时, SDK 会通过该回调通知 App 语音路由状态已发生变化。该回调返回当前的语音路由已切换至听筒,外放(扬声器),耳机或蓝牙。 其中 routing 定义如下:

  • AUDIO_ROUTE_DEFAULT(-1):使用默认的音频路由。
  • AUDIO_ROUTE_HEADSET(0):使用耳机为语音路由。
  • AUDIO_ROUTE_EARPIECE(1):使用听筒为语音路由。
  • AUDIO_ROUTE_HEADSETNOMIC(2):使用不带麦的耳机为语音路由。
  • AUDIO_ROUTE_SPEAKERPHONE(3):使用手机的扬声器为语音路由。
  • AUDIO_ROUTE_LOUDSPEAKER(4):使用外接的扬声器为语音路由。
  • AUDIO_ROUTE_HEADSETBLUETOOTH(5):使用蓝牙耳机为语音路由。

onCameraFocusAreaChanged()

void onCameraFocusAreaChanged(Rect rect)

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

该回调表示相机的对焦区域发生了改变。

该回调是由本地用户调用 setCameraFocusPositionInPreview 方法改变对焦位置触发的。

参数描述
rect镜头内表示对焦的区域

onCameraExposureAreaChanged()

void onCameraExposureAreaChanged(Rect rect)

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

该回调是由本地用户调用 setCameraExposurePosition 方法改变曝光位置触发的。

参数描述
rect镜头内表示曝光的区域

onRtcStats()

void IRtcEngineEventHandler.onRtcStats

当前通话统计回调。 该回调在通话中每两秒触发一次。

参数描述
statsRtcEngine 数据,详细定义见 RtcStats

onLocalVideoStats()

void onLocalVideoStats(LocalVideoStats stats)

通话中本地视频流的统计信息回调。

该回调描述本地设备发送视频流的统计信息,每 2 秒触发一次。

参数描述
stats本地视频统计数据,详细定义见 Local Video Stats

onRemoteVideoStats()

void onRemoteVideoStats(RemoteVideoStats stats)

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

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

参数描述
stats远端视频统计数据,详细定义见 Remote Video Stats

onLocalAudioStats()

void onLocalAudioStats(LocalAudioStats stats)

通话中本地音频流的统计信息回调。

该回调描述本地设备发送音频流的统计信息。SDK 每 2 秒触发该回调一次。

参数描述
stats本地音频统计数据,详见 LocalAudioStats

onRemoteAudioStats()

void onRemoteAudioStats(RemoteAudioStats stats)

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

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

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

onAudioEffectFinished()

void onAudioEffectFinished(int soundId)

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

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

参数描述
soundId指定音效的 ID。每个音效均有唯一的 ID

onLocalAudioStateChanged()

void onLocalAudioStateChanged(int state,int error)

本地音频状态发生改变回调。

本地音频的状态发生改变时(包括本地麦克风录制状态和音频编码状态),SDK 会触发该回调报告当前的本地音频状态。 在本地音频出现故障时,该回调可以帮助你了解当前音频的状态以及出现故障的原因,方便你排查问题。

注解

当状态为 LOCAL_AUDIO_STREAM_STATE_FAILED(3) 时,你可以在 error 参数中查看返回的错误信息。

参数描述
state当前的本地音频状态:LOCAL_AUDIO_STREAM_STATE_STOPPED(0):本地音频默认初始状态LOCAL_AUDIO_STREAM_STATE_CAPTURING(1):本地音频录制设备启动成功LOCAL_AUDIO_STREAM_STATE_ENCODING(2):本地音频首帧编码成功LOCAL_AUDIO_STREAM_STATE_FAILED(3):本地音频启动失败
error本地音频出错原因:LOCAL_AUDIO_STREAM_ERROR_OK(0):本地音频状态正常LOCAL_AUDIO_STREAM_ERROR_FAILURE(1):本地音频出错原因不明确LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION(2):没有权限启动本地音频录制设备LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY(3):本地音频录制设备已经在使用中LOCAL_AUDIO_STREAM_ERROR_CAPTURE_FAILURE(4):本地音频录制失败,建议你检查录制设备是否正常工作LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE(5):本地音频编码失败

onLocalVideoStateChanged()

void onLocalVideoStateChanged(int localVideoState,int error)

本地视频状态发生改变回调。

本地视频的状态发生改变时,SDK 会触发该回调返回当前的本地视频状态;当状态为 LOCAL_VIDEO_STREAM_STATE_FAILED(3) 时,你可以在 error 参数中查看返回的错误信息。 该接口在本地视频出现故障时,方便你了解当前视频的状态以及出现故障的原因,方便排查问题。

参数描述
localVideoState当前的本地视频状态:LOCAL_VIDEO_STREAM_STATE_STOPPED(0):本地视频默认初始状态LOCAL_VIDEO_STREAM_STATE_CAPTURING(1):本地视频采集设备启动成功LOCAL_VIDEO_STREAM_STATE_ENCODING(2):本地视频首帧编码成功LOCAL_VIDEO_STREAM_STATE_FAILED(3):本地视频启动失败
error本地视频出错原因:
LOCAL_VIDEO_STREAM_ERROR_OK(0):本地视频状态正常LOCAL_VIDEO_STREAM_ERROR_FAILURE(1):出错原因不明确LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION(2):没有权限启动本地视频采集设备LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY(3):本地视频采集设备正在使用中LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE(4):本地视频采集失败,建议检查采集设备是否正常工作Android 9 及以上版本,app 切后台一段时间后,系统收回相机权限Android 6 及以上版本,如果相机被第三方应用占用,且未被及时释放。如果一段时间后,相机被释放,则 SDK 会再次出发该回调,并报告 state 为 CAPTURING,error 为 ERROR_OK.LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE(5):本地视频编码失败

onNetworkTypeChanged()

void onNetworkTypeChanged(int type)

本地网络类型发生改变回调。

本地网络连接类型发生改变时,SDK 会触发该回调,并在回调中明确当前的网络连接类型。 你可以通过该回调获取正在使用的网络类型;当连接中断时,该回调能辨别引起中断的原因是网络切换还是网络条件不好。

参数描述
type网络连接类型:
NETWORK_TYPE_UNKNOWN(-1):网络连接类型未知
NETWORK_TYPE_DISCONNECTED(0):网络连接已断开
NETWORK_TYPE_LAN(1):网络类型为 LAN
NETWORK_TYPE_WIFI(2):网络类型为 Wi-Fi(包含热点)
NETWORK_TYPE_MOBILE_2G(3):网络类型为 2G 移动网络
NETWORK_TYPE_MOBILE_3G(4):网络类型为 3G 移动网络
NETWORK_TYPE_MOBILE_4G(5):网络类型为 4G 移动网络

onStreamInjectedStatus()

void onStreamInjectedStatus (String url,String uid,int status ) 

输入在线媒体流状态回调。

该回调表明向直播输入的外部视频流的状态。

参数描述
url输入进直播的外部视频源的 URL 地址
uid用户 ID
status输入的外部视频源状态:
INJECT_STREAM_STATUS_START_SUCCESS(0):外部视频流输入成功INJECT_STREAM_STATUS_START_ALREADY_EXIST(1):外部视频流已存在INJECT_STREAM_STATUS_START_UNAUTHORIZED(2):外部视频流输入未经授权INJECT_STREAM_STATUS_START_TIMEDOUT(3):输入外部视频流超时INJECT_STREAM_STATUS_START_FAILED(4):外部视频流输入失败INJECT_STREAM_STATUS_STOP_SUCCESS(5):外部视频流停止输入成功INJECT_STREAM_STATUS_STOP_NOT_FOUND = 6:未找到要停止输入的外部视频流INJECT_STREAM_STATUS_STOP_UNAUTHORIZED(7):要停止输入的外部视频流未经授权INJECT_STREAM_STATUS_STOP_TIMEDOUT(8):停止输入外部视频流超时INJECT_STREAM_STATUS_STOP_FAILED(9):停止输入外部视频流失败INJECT_STREAM_STATUS_BROKEN(10):输入的外部视频流被中断onSnapshotTaken

onSnapshotTaken

视频截图结果回调。

void onSnapshotTaken    (String channel, String uid, String filePath, int width, int height, int errCode )  
参数描述
channel所处频道
uid用户 ID。如果 uid 为 “0”,表示本地用户。
filePath截图的本地保存路径。
width图片宽度(px)。
height图片高度(px)。
errCode截图成功的提示或失败的原因

注解

  • 0:截图成功。
  • < 0: 截图失败。
    • -1:写入文件失败或 JPEG 编码失败。
    • -2:takeSnapshot 方法调用成功后 1 秒内没有发现指定用户的视频流。
    • -3:takeSnapshot 方法调用过于频繁。