Agora Java API Reference for Android

Classes | Public Member Functions | List of all members
io.agora.rtc2.IRtcEngineEventHandler Class Referenceabstract

## Classes
class | AgoraFacePositionInfo
class | AudioVolumeInfo
class | ClientRole
class | DownlinkNetworkInfo
class | ErrorCode
class | LastmileProbeResult
class | LocalAudioStats
class | LocalVideoStats
class | Quality
class | RemoteAudioStats
class | RemoteVideoStats
class | RtcStats
class | UplinkNetworkInfo
class | UserOfflineReason
class | VideoLayout
class | VideoLayoutInfo
class | VideoProfile
class | VideoRenderingTracingInfo
class | WarnCode
class | WlAccStats

## Public Member Functions
void | onError (int err)
void | onJoinChannelSuccess (String channel, int uid, int elapsed)
void | onRejoinChannelSuccess (String channel, int uid, int elapsed)
void | onLeaveChannel (RtcStats stats)
void | onClientRoleChanged (int oldRole, int newRole, ClientRoleOptions newRoleOptions)
void | onClientRoleChangeFailed (int reason, int currentRole)
void | onLocalUserRegistered (int uid, String userAccount)
void | onUserInfoUpdated (int uid, UserInfo userInfo)
void | onUserStateChanged (int uid, int state)
void | onUserJoined (int uid, int elapsed)
void | onUserOffline (int uid, int reason)
void | onConnectionStateChanged (int state, int reason)
void | onWlAccMessage (int reason, int action, String wlAccMsg)
void | onWlAccStats (WlAccStats currentStats, WlAccStats averageStats)
void | onConnectionInterrupted ()
void | onConnectionLost ()
void | onConnectionBanned ()
void | onTokenPrivilegeWillExpire (String token)
void | onRequestToken ()
void | onLicenseValidationFailure (int error)
void | onAudioVolumeIndication (AudioVolumeInfo[] speakers, int totalVolume)
void | onActiveSpeaker (int uid)
void | onVideoStopped ()
void | onFirstLocalVideoFrame (Constants.VideoSourceType source, int width, int height, int elapsed)
void | onFirstLocalVideoFramePublished (Constants.VideoSourceType source, int elapsed)
void | onFirstRemoteVideoDecoded (int uid, int width, int height, int elapsed)
void | onFirstRemoteVideoFrame (int uid, int width, int height, int elapsed)
void | onUserMuteAudio (int uid, boolean muted)
void | onUserMuteVideo (int uid, boolean muted)
void | onUserEnableVideo (int uid, boolean enabled)
void | onUserEnableLocalVideo (int uid, boolean enabled)
void | onVideoSizeChanged (Constants.VideoSourceType source, int uid, int width, int height, int rotation)
void | onRemoteAudioStateChanged (int uid, int state, int reason, int elapsed)
void | onAudioPublishStateChanged (String channel, int oldState, int newState, int elapseSinceLastState)
void | onVideoPublishStateChanged (Constants.VideoSourceType source, String channel, int oldState, int newState, int elapseSinceLastState)
void | onLocalPublishFallbackToAudioOnly (boolean isFallbackOrRecover)
void | onAudioSubscribeStateChanged (String channel, int uid, int oldState, int newState, int elapseSinceLastState)
void | onVideoSubscribeStateChanged (String channel, int uid, int oldState, int newState, int elapseSinceLastState)
void | onRemoteVideoStateChanged (int uid, int state, int reason, int elapsed)
void | onChannelMediaRelayStateChanged (int state, int code)
void | onFirstLocalAudioFramePublished (int elapsed)
void | onFirstRemoteAudioFrame (int uid, int elapsed)
void | onFirstRemoteAudioDecoded (int uid, int elapsed)
void | onRemoteSubscribeFallbackToAudioOnly (int uid, boolean isFallbackOrRecover)
void | onAudioRouteChanged (int routing)
void | onCameraReady ()
void | onCameraFocusAreaChanged (Rect rect)
void | onCameraExposureAreaChanged (Rect rect)
void | onSnapshotTaken (int uid, String filePath, int width, int height, int errCode)
| snapshot taken callback More...
void | onFacePositionChanged (int imageWidth, int imageHeight, AgoraFacePositionInfo[] faceRectArr)
void | onAudioQuality (int uid, int quality, short delay, short lost)
void | onRtcStats (RtcStats stats)
void | onLastmileQuality (int quality)
void | onLastmileProbeResult (LastmileProbeResult result)
void | onNetworkQuality (int uid, int txQuality, int rxQuality)
void | onLocalAudioStats (LocalAudioStats stats)
void | onLocalVideoStats (Constants.VideoSourceType source, LocalVideoStats stats)
void | onRemoteAudioStats (RemoteAudioStats stats)
void | onRemoteVideoStats (RemoteVideoStats stats)
void | onLocalVideoStat (int sentBitrate, int sentFrameRate)
void | onRemoteVideoStat (int uid, int delay, int receivedBitrate, int receivedFrameRate)
void | onRemoteAudioTransportStats (int uid, int delay, int lost, int rxKBitRate)
void | onRemoteVideoTransportStats (int uid, int delay, int lost, int rxKBitRate)
void | onAudioMixingStateChanged (int state, int reason)
void | onAudioMixingPositionChanged (long position)
| Reports current AudioMixing progress. More...
void | onAudioMixingFinished ()
void | onAudioEffectFinished (int soundId)
void | onRhythmPlayerStateChanged (int state, int reason)
void | onLocalAudioStateChanged (int state, int reason)
void | onLocalVideoStateChanged (Constants.VideoSourceType source, int state, int reason)
void | onRtmpStreamingStateChanged (String url, int state, int reason)
void | onRtmpStreamingEvent (String url, int event)
void | onTranscodingUpdated ()
void | onStreamInjectedStatus (String url, int uid, int status)
void | onStreamMessage (int uid, int streamId, byte[] data)
void | onStreamMessageError (int uid, int streamId, int error, int missed, int cached)
void | onMediaEngineLoadSuccess ()
void | onMediaEngineStartCallSuccess ()
void | onNetworkTypeChanged (int type)
void | onIntraRequestReceived ()
void | onUplinkNetworkInfoUpdated (UplinkNetworkInfo info)
void | onDownlinkNetworkInfoUpdated (DownlinkNetworkInfo info)
void | onEncryptionError (int errorType)
void | onPermissionError (int permission)
void | onUploadLogResult (String requestId, boolean success, int reason)
void | onContentInspectResult (int result)
void | onProxyConnected (String channel, int uid, int proxyType, String localProxyIp, int elapsed)
void | onVideoRenderingTracingResult (int uid, Constants.MEDIA_TRACE_EVENT currentEvent, VideoRenderingTracingInfo tracingInfo)
void | onLocalVideoTranscoderError (LocalTranscoderConfiguration.TranscodingVideoStream stream, int error)
void | onTranscodedStreamLayoutInfo (int uid, VideoLayoutInfo info)
void | onAudioMetadataReceived (int uid, byte[] data)
| Occurs when the SDK receives audio metadata. More...

## Detailed Description

Callback methods.

The SDK uses the IRtcEngineEventHandler interface class to send callback event notifications to the application, and the application inherits the methods of this interface class to retrieve these event notifications. All methods in this interface class have their (empty) default implementations, and the application can inherit only some of the required events instead of all of them. In the callback methods, the application should avoid time-consuming tasks or call blocking APIs (such as SendMessage), otherwise, the SDK may not work properly.

## Member Function Documentation

## ◆ onError()

void io.agora.rtc2.IRtcEngineEventHandler.onError | ( | int | err | ) |

An error occurred during SDK runtime.

In most cases, reporting an error means that the SDK cannot fix the issue and resume running, and therefore requires actions from the application or simply informs the user about the issue. In this case, the application informs the user that the call initialization has failed, and calls the leaveChannel method to exit the channel.

Parameters

  err | Error code

## ◆ onJoinChannelSuccess()

void io.agora.rtc2.IRtcEngineEventHandler.onJoinChannelSuccess | ( | String | channel,
|  | int | uid,
|  | int | elapsed
| ) |  |

Occurs when the local user successfully joins the specified channel.

Parameters

  channel | The channel name.
  uid | The user ID. If you specified a `uid` in the `joinChannel` method, the SDK returns the specified ID; If not, this callback returns an ID that is automatically assigned by the Agora server.
  elapsed | The time elapsed (ms) from the local user calling joinChannel until this event occurs.

## ◆ onRejoinChannelSuccess()

void io.agora.rtc2.IRtcEngineEventHandler.onRejoinChannelSuccess | ( | String | channel,
|  | int | uid,
|  | int | elapsed
| ) |  |

Occurs when the local user rejoins the channel after being disconnected due to network problems.

When the app loses connection with the server because of network problems, the SDK automatically tries to reconnect to the server, and triggers this callback method upon reconnection.

Parameters

  channel | The channel name.
  uid | The user ID.
  elapsed | Time elapsed (ms) from starting to reconnect until this callback is triggered

## ◆ onLeaveChannel()

void io.agora.rtc2.IRtcEngineEventHandler.onLeaveChannel | ( | RtcStats | stats | ) |

Occurs when the local user successfully leaves the channel.

When the user successfully leaves the channel after calling leaveChannel, the SDK uses this callback to notify the app that the user has left the channel.

This callback also reports information such as the call duration and the statistics of data received or transmitted by the SDK.

Parameters

  stats | The statistics on the call: RtcStats.

## ◆ onClientRoleChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onClientRoleChanged | ( | int | oldRole,
|  | int | newRole,
|  | ClientRoleOptions | newRoleOptions
| ) |  |

Occurs when the user role in a Live-Broadcast channel has switched, for example, from a broadcaster to an audience or vice versa.

Parameters

  oldRole | The old role of the user.
  newRole | The new role of the user.
  newRoleOptions | The client role options of the new role.

## ◆ onClientRoleChangeFailed()

void io.agora.rtc2.IRtcEngineEventHandler.onClientRoleChangeFailed | ( | int | reason,
|  | int | currentRole
| ) |  |

Occurs when the user role in a Live-Broadcast channel has switched, for example, from a broadcaster to an audience or vice versa.

Parameters

  reason | The reason of the failure of the local user role switches.
  currentRole | The current role of the user

## ◆ onLocalUserRegistered()

void io.agora.rtc2.IRtcEngineEventHandler.onLocalUserRegistered | ( | int | uid,
|  | String | userAccount
| ) |  |

Occurs when the local user registers a user account.

Since
  v2.8.0.

This callback is triggered when the local user successfully registers a user account by calling the registerLocalUserAccount method, or joins a channel by calling the joinChannelWithUserAccount method. This callback reports the user ID and user account of the local user.

Parameters

  uid | The ID of the local user.
  userAccount | The user account of the local user.

## ◆ onUserInfoUpdated()

void io.agora.rtc2.IRtcEngineEventHandler.onUserInfoUpdated | ( | int | uid,
|  | UserInfo | userInfo
| ) |  |

Occurs when the SDK gets the user ID and user account of the remote user.

Since
  v2.8.0.

After a remote user joins the channel, the SDK gets the UID and user account of the remote user, caches them in a mapping table object (UserInfo), and triggers this callback on the local client.

Parameters

  uid | The ID of the remote user.
  userInfo | The UserInfo object that contains the user ID and user account of the remote user.

## ◆ onUserStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onUserStateChanged | ( | int | uid,
|  | int | state
| ) |  |

Occurs when the remote user state is updated.

Parameters

  uid | The ID of the remote user.
  state | State of the remote user: Just & #REMOTE_USER_STATE `USER_STATE_MUTE_AUDIO(1 << 0)`: The remote user has muted the audio. `USER_STATE_MUTE_VIDEO(1 << 1)`: The remote user has muted the video. `USER_STATE_ENABLE_VIDEO(1 << 4)`: The remote user has enabled the video, which includes video capturing and encoding. `USER_STATE_ENABLE_LOCAL_VIDEO(1 << 8)`: The remote user has enabled the local video capturing.

## ◆ onUserJoined()

void io.agora.rtc2.IRtcEngineEventHandler.onUserJoined | ( | int | uid,
|  | int | elapsed
| ) |  |

Occurs when a remote user or broadcaster joins the channel.

If other users are already in the channel, the SDK also reports to the app on the existing users.

The SDK triggers this callback under one of the following circumstances:

- A broadcaster joins the channel by calling joinChannel.
- A remote user switches the user role to broadcaster by calling setClientRole. after joining the channel.
- A remote user or broadcaster rejoins the channel after a network interruption.

Note
  When a Web app joins the channel, this callback is triggered as long as the app publishes a stream.

Parameters

  uid | ID of the remote user or broadcaster joining the channel.
  elapsed | The time elapsed (ms) from the local user calling `joinChannel` or `setClientRole` until this callback is triggered.

## ◆ onUserOffline()

void io.agora.rtc2.IRtcEngineEventHandler.onUserOffline | ( | int | uid,
|  | int | reason
| ) |  |

Occurs when a remote user or broadcaster goes offline.

Parameters

  uid | ID of the remote user or broadcaster who leaves the channel or drops offline.
  reason | The reason why the remote user goes offline: `USER_OFFLINE_QUIT`(0): When the user leaves the channel, the user sends a goodbye message. When this message is received, the SDK determines that the user leaves the channel. `USER_OFFLINE_DROPPED`(1): When no data packet of the user is received for a certain period of time, the SDK assumes that the user drops offline. A poor network connection may lead to false detection, so we recommend using the RTM SDK for reliable offline detection. `USER_OFFLINE_BECOME_AUDIENCE`(2): The user switches the user role from a broadcaster to an audience.

## ◆ onConnectionStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onConnectionStateChanged | ( | int | state,
|  | int | reason
| ) |  |

Occurs when the network connection state changes.

Since
  v2.3.2.

The Agora SDK returns this callback to report on the current network connection state when it changes, and the reason to such change.

Parameters

  state | The current network connection state: CONNECTION_STATE_DISCONNECTED(1): The SDK is disconnected from Agora's edge server. CONNECTION_STATE_CONNECTING(2): The SDK is connecting to Agora's edge server. CONNECTION_STATE_CONNECTED(3): The SDK joined a channel and is connected to Agora's edge server. You can now publish or subscribe to a media stream in the channel. {CONNECTION_STATE_RECONNECTING(4)}: The SDK keeps rejoining the channel after being disconnected from a joined channel because of network issues. CONNECTION_STATE_FAILED(5): The SDK fails to join the channel.
  reason | The reason causing the change of the connection state: CONNECTION_CHANGED_CONNECTING(0): Connecting. CONNECTION_CHANGED_JOIN_SUCCESS(1): The SDK has joined the channel successfully. {CONNECTION_CHANGED_INTERRUPTED(2)}: The connection is interrupted. CONNECTION_CHANGED_BANNED_BY_SERVER(3): The connection is banned by Agora's edge server. CONNECTION_CHANGED_JOIN_FAILED(4): The SDK fails to join the channel for more than 20 minutes and stops reconnecting to the channel. CONNECTION_CHANGED_LEAVE_CHANNEL(5): The SDK has left the channel. CONNECTION_CHANGED_INVALID_APP_ID(6): The specified App ID is invalid. Try to rejoin the channel with a valid App ID. CONNECTION_CHANGED_INVALID_CHANNEL_NAME(7): The specified channel name is invalid. Try to rejoin the channel with a valid channel name. CONNECTION_CHANGED_INVALID_TOKEN(8): The generated token is invalid probably due to the following reasons: The App Certificate for the project is enabled in Console, but you do not use the token. The uid that you specify in the joinChannel method is different from the uid that you pass for generating the token. CONNECTION_CHANGED_TOKEN_EXPIRED(9): The token has expired. Generate a new token from your server. CONNECTION_CHANGED_REJECTED_BY_SERVER(10): The user is banned by the server. {CONNECTION_CHANGED_SETTING_PROXY_SERVER(11)}: The SDK tries to reconnect after setting a proxy server. {CONNECTION_CHANGED_RENEW_TOKEN(12)}: The token renews. CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED(13): The client IP address has changed, probably due to a change of the network type, IP address, or network port. CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT(14): Timeout for the keep-alive of the connection between the SDK and Agora's edge server. The connection state changes to {CONNECTION_STATE_RECONNECTING(4)}. CONNECTION_CHANGED_LICENSE_VALIDATION_FAILURE(21): The The connection is failed due to license validation failure.

## ◆ onWlAccMessage()

void io.agora.rtc2.IRtcEngineEventHandler.onWlAccMessage | ( | int | reason,
|  | int | action,
|  | String | wlAccMsg
| ) |  |

Occurs when the WIFI message need be sent to the user.

Parameters

  reason | The reason of notifying the user of a message.
  action | Suggest an action for the user.
  wlAccMsg | Notification message to the user.

## ◆ onWlAccStats()

void io.agora.rtc2.IRtcEngineEventHandler.onWlAccStats | ( | WlAccStats | currentStats,
|  | WlAccStats | averageStats
| ) |  |

Occurs when SDK statistics WIFI acceleration optimization effect.

Parameters

  currentStats | Instantaneous value of optimization effect.
  averageStats | Average value of cumulative optimization effect.

## ◆ onConnectionInterrupted()

void io.agora.rtc2.IRtcEngineEventHandler.onConnectionInterrupted | ( |  | ) |

The SDK has lost connection to the server. This method is triggered upon connection is lost, while the onConnectionLost method is triggered when the SDK attempts to reconnect after losing connection. Once the connection is lost, and if the application does not call leaveChannel, the SDK automatically tries to reconnect repeatedly.

## ◆ onConnectionLost()

void io.agora.rtc2.IRtcEngineEventHandler.onConnectionLost | ( |  | ) |

Occurs when the SDK cannot reconnect to the server 10 seconds after its connection to the server is interrupted.

The SDK triggers this callback when it cannot connect to the server 10 seconds after calling joinChannel, regardless of whether it is in the channel or not.

## ◆ onConnectionBanned()

void io.agora.rtc2.IRtcEngineEventHandler.onConnectionBanned | ( |  | ) |

Your connection is banned by the Agora Server.

Note: The SDK does not try to reconnect.

## ◆ onTokenPrivilegeWillExpire()

void io.agora.rtc2.IRtcEngineEventHandler.onTokenPrivilegeWillExpire | ( | String | token | ) |

Occurs when the token will expire in 30 seconds.

If the token you specified when calling joinChannel expires, the user will drop offline. This callback is triggered 30 seconds before the token expires, to remind you to renew the token.

Upon receiving this callback, generate a new token at your app server and call renewToken to pass the new Token to the SDK.

See also
  How to generate a token.

Parameters

  token | The token that will expire in 30 seconds.

## ◆ onRequestToken()

void io.agora.rtc2.IRtcEngineEventHandler.onRequestToken | ( |  | ) |

Occurs when the token has expired.

If a token is specified when calling the joinChannel method, the token expires after a certain period of time and you need a new token to reconnect to the server.

Upon receiving this callback, generate a new token at your app server and call renewToken to pass the new token to the SDK.

See also
  How to generate a token.

## ◆ onLicenseValidationFailure()

void io.agora.rtc2.IRtcEngineEventHandler.onLicenseValidationFailure | ( | int | error | ) |

Occurs when connection license verification fails You can know the reason accordding to error code

Parameters

  error | license verify fail reason: `LICENSE_ERR_INVALID(1)`: Invalid license. `LICENSE_ERR_EXPIRE(2)`: License expired. `LICENSE_ERR_MINUTES_EXCEED(3)`: Exceed license minutes limit. `LICENSE_ERR_LIMITED_PERIOD(4)`: License use in limited period. `LICENSE_ERR_DIFF_DEVICES(5)`: Same license used in different devices at the same time. `LICENSE_ERR_INTERNAL(99)`: SDK internal error.

## ◆ onAudioVolumeIndication()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioVolumeIndication | ( | AudioVolumeInfo[] | speakers,
|  | int | totalVolume
| ) |  |

Reports which users are speaking and the speaker‘s volume.

This callback reports the IDs and volumes of the loudest speakers (at most 3) at the moment in the channel, and whether the local user is speaking. Once enabled, this callback is triggered at the set interval, regardless of whether a user speaks or not.

The SDK triggers two independent `onAudioVolumeIndication` callbacks at one time, which separately report the volume information of the local user and all the remote speakers. For more information, see the detailed parameter descriptions.

Calling the muteLocalAudioStream method affects the SDK's behavior.

- If the local user calls the `muteLocalAudioStream` method, the SDK stops triggering the local user's callback.
- 20 seconds after a remote speaker calls the `muteLocalAudioStream` method, the remote speakers' callback does not include information of this remote user; 20 seconds after all remote users call the `muteLocalAudioStream` method, the SDK stops triggering the remote speakers' callback.

Parameters

  speakers | An array containing the user ID and volume information for each speaker: AudioVolumeInfo. In the local user's callback, this array contains the following members: `uid` = 0, `volume` = `totalVolume`, which reports the sum of the voice volume and audio-mixing volume of the local user. In the remote users' callback, this array contains the following members: `uid` of each remote speaker. `volume`, which reports the sum of the voice volume and audio-mixing volume of each remote speaker. An empty `speakers` array in the callback indicates that no remote user is speaking at the moment.
  totalVolume | The total volume after audio mixing. The value ranges between 0 (the lowest volume) and 255 (the highest volume). In the local user's callback, `totalVolume` is the sum of the voice volume and audio-mixing volume of the local user. In the remote users' callback, `totalVolume` is the sum of the voice volume and audio-mixing volume of all the remote speakers.

## ◆ onActiveSpeaker()

void io.agora.rtc2.IRtcEngineEventHandler.onActiveSpeaker | ( | int | uid | ) |

Occurs when an active speaker is detected.

If you have called the enableAudioVolumeIndication method, this callback is triggered when the volume detecting unit has detected an active speaker in the channel. This callback also returns the `uid` of the active speaker.

You can add relative functions on your app, for example, the active speaker, once detected, will have the portrait zoomed in.

Note
  - You need to call `enableAudioVolumeIndication` to receive this callback.
  - The active speaker means the user ID of the speaker who speaks at the highest volume during a certain period of time.

Parameters

  uid | The ID of the active speaker. A `uid` of 0 means the local user.

## ◆ onVideoStopped()

void io.agora.rtc2.IRtcEngineEventHandler.onVideoStopped | ( |  | ) |

The video has stopped playing.

The application can use this callback to change the configuration of the view (for example, display other pictures in the view) after the video stops.

## ◆ onFirstLocalVideoFrame()

void io.agora.rtc2.IRtcEngineEventHandler.onFirstLocalVideoFrame | ( | Constants.VideoSourceType | source,
|  | int | width,
|  | int | height,
|  | int | elapsed
| ) |  |

The first local video frame is displayed on the screen.

Parameters

  source | source type of the originated video source.
  width | Width (pixels) of the video stream.
  height | Height (pixels) of the video stream.
  elapsed | Time elapsed (ms) from calling token, java.lang.String channelName, java.lang.String optionalInfo, int optionalUid) joinChannel until this callback is triggered.

## ◆ onFirstLocalVideoFramePublished()

void io.agora.rtc2.IRtcEngineEventHandler.onFirstLocalVideoFramePublished | ( | Constants.VideoSourceType | source,
|  | int | elapsed
| ) |  |

Occurs when the first video frame is published.

Parameters

  source | source type of the originated video source.
  elapsed | The time elapsed (ms) from the local user calling joinChannel to the SDK triggers this callback.

## ◆ onFirstRemoteVideoDecoded()

void io.agora.rtc2.IRtcEngineEventHandler.onFirstRemoteVideoDecoded | ( | int | uid,
|  | int | width,
|  | int | height,
|  | int | elapsed
| ) |  |

Occurs when the first remote video frame is received and decoded.

Deprecated:
  This callback is deprecated. Use `REMOTE_VIDEO_STATE_STARTING(1)` or `REMOTE_VIDEO_STATE_DECODING(2)` in the onRemoteVideoStateChanged callback instead.

This callback is triggered in either of the following scenarios:

- The remote user joins the channel and sends the video stream.
- The remote user stops sending the video stream and re-sends it after 15 seconds. Possible reasons include:
  - The remote user leaves channel.
  - The remote user drops offline.
  - The remote user calls the muteLocalVideoStream method.
  - The remote user calls the disableVideo method.

Parameters

  uid | User ID of the remote user sending the video streams.
  width | Width (pixels) of the video stream.
  height | Height (pixels) of the video stream.
  elapsed | Time elapsed (ms) from the local user calling the joinChannel method until this callback is triggered.

## ◆ onFirstRemoteVideoFrame()

void io.agora.rtc2.IRtcEngineEventHandler.onFirstRemoteVideoFrame | ( | int | uid,
|  | int | width,
|  | int | height,
|  | int | elapsed
| ) |  |

The first frame of the remote video appears in the user’s video window.

The application can retrieve the data of time elapsed from user joining the channel until the first video frame is displayed.

Parameters

  uid | User ID of the user whose video streams are received.
  width | Width (pixels) of the video stream.
  height | Height (pixels) of the video stream.
  elapsed | Time elapsed (ms) from calling token, java.lang.String channelName, java.lang.String optionalInfo, int optionalUid) joinChannel until this callback is triggered.

## ◆ onUserMuteAudio()

void io.agora.rtc2.IRtcEngineEventHandler.onUserMuteAudio | ( | int | uid,
|  | boolean | muted
| ) |  |

Occurs when a remote user stops/resumes sending the audio stream.

The SDK triggers this callback when the remote user stops or resumes sending the audio stream by calling the muteLocalAudioStream method.

Note
  This callback does not work properly when the number of users (in the `COMMUNICATION` profile) or hosts (in the `LIVE_BROADCASTING` profile) in the channel exceeds 17.

Parameters

  uid | ID of the remote user.
  muted | Whether the remote user's audio stream playback pauses/resumes: True: User's audio is paused. False: User's audio is resumed.

## ◆ onUserMuteVideo()

void io.agora.rtc2.IRtcEngineEventHandler.onUserMuteVideo | ( | int | uid,
|  | boolean | muted
| ) |  |

Occurs when a remote user stops/resumes sending the video stream.

The SDK triggers this callback when the remote user stops or resumes sending the video stream by calling the muteLocalVideoStream method.

Note
  This callback does not work properly when the number of users (in the `COMMUNICATION` profile) or hosts (in the `LIVE_BROADCASTING` profile) in the channel exceeds 17.

Parameters

  uid | ID of the remote user.
  muted | Whether the remote user's video stream playback pauses/resumes: True: User's video is paused. False: User's video is resumed.

## ◆ onUserEnableVideo()

void io.agora.rtc2.IRtcEngineEventHandler.onUserEnableVideo | ( | int | uid,
|  | boolean | enabled
| ) |  |

Occurs when a remote user enables/disables the video module.

Once the video module is disabled, the remote user can only use a voice call. The remote user cannot send or receive any video from other users.

The SDK triggers this callback when the remote user enables or disables the video module by calling the enableVideo or disableVideo method.

Note
  This callback is invalid when the number of users or hosts in the channel exceeds 20.

Parameters

  uid | User ID of the remote user.
  enabled | Whether the specific remote user enables/disables the video module: true: Enabled. The remote user can enter a video session. false: Disabled. The remote user can only enter a voice session, and cannot send or receive any video stream.

## ◆ onUserEnableLocalVideo()

void io.agora.rtc2.IRtcEngineEventHandler.onUserEnableLocalVideo | ( | int | uid,
|  | boolean | enabled
| ) |  |

Occurs when a remote user enables/disables the local video capture function.

Deprecated:
  This callback is deprecated and replaced by the onRemoteVideoStateChanged callback with the following parameters:
  - `REMOTE_VIDEO_STATE_STOPPED(0)` and `REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED(5)`.
  - `REMOTE_VIDEO_STATE_DECODING(2)` and `REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED(6)`.

The SDK triggers this callback when the remote user resumes or stops capturing the video stream by calling the enableLocalVideo method.

This callback is only applicable to the scenario when the remote user only wants to watch the remote video without sending any video stream to the other user.

Parameters

  uid | User ID of the remote user.
  enabled | Whether the specific remote user enables/disables the local video capturing function: true: Enabled. Other users in the channel can see the video of this remote user. false: Disabled. Other users in the channel can no longer receive the video stream from this remote user, while this remote user can still receive the video streams from other users.

## ◆ onVideoSizeChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onVideoSizeChanged | ( | Constants.VideoSourceType | source,
|  | int | uid,
|  | int | width,
|  | int | height,
|  | int | rotation
| ) |  |

Occurs when the local or remote video size or rotation has changed.

Parameters

  source | The video source type.
  uid | The user ID. 0 indicates the local user.
  width | The new width (pixels) of the video.
  height | The new height (pixels) of the video.
  rotation | The rotation information of the video.

## ◆ onRemoteAudioStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onRemoteAudioStateChanged | ( | int | uid,
|  | int | state,
|  | int | reason,
|  | int | elapsed
| ) |  |

Occurs when the remote audio state changes.

This callback indicates the state change of the remote audio stream.

Parameters

  uid | ID of the user whose audio state changes.
  state | The state of the remote audio: REMOTE_AUDIO_STATE_STOPPED(0): The remote audio is in the default state, probably due to `REMOTE_AUDIO_REASON_LOCAL_MUTED(3)`, `REMOTE_AUDIO_REASON_REMOTE_MUTED(5)`, or `REMOTE_AUDIO_REASON_REMOTE_OFFLINE(7)`. {REMOTE_AUDIO_STATE_STARTING(1)}: The first remote audio packet is received. REMOTE_AUDIO_STATE_DECODING(2): The remote audio stream is decoded and plays normally, probably due to `REMOTE_AUDIO_REASON_NETWORK_RECOVERY(2)`, `REMOTE_AUDIO_REASON_LOCAL_UNMUTED(4)` or `REMOTE_AUDIO_REASON_REMOTE_UNMUTED(6)`. {REMOTE_AUDIO_STATE_FROZEN(3)}: The remote audio is frozen, probably due to `REMOTE_AUDIO_REASON_NETWORK_CONGESTION(1)`. {REMOTE_AUDIO_STATE_FAILED(4)}: The remote audio fails to start, probably due to `REMOTE_AUDIO_REASON_INTERNAL(0)`.
  reason | The reason of the remote audio state change. REMOTE_AUDIO_REASON_INTERNAL(0): Internal reasons. REMOTE_AUDIO_REASON_NETWORK_CONGESTION(1): Network congestion. {REMOTE_AUDIO_REASON_NETWORK_RECOVERY(2)}: Network recovery. REMOTE_AUDIO_REASON_LOCAL_MUTED(3): The local user stops receiving the remote audio stream or disables the audio module. REMOTE_AUDIO_REASON_LOCAL_UNMUTED(4): The local user resumes receiving the remote audio stream or enables the audio module. REMOTE_AUDIO_REASON_REMOTE_MUTED(5): The remote user stops sending the audio stream or disables the audio module. REMOTE_AUDIO_REASON_REMOTE_UNMUTED(6): The remote user resumes sending the audio stream or enables the audio module. REMOTE_AUDIO_REASON_REMOTE_OFFLINE(7): The remote user leaves the channel.
  elapsed | Time elapsed (ms) from the local user calling the joinChannel method until the SDK triggers this callback.

## ◆ onAudioPublishStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioPublishStateChanged | ( | String | channel,
|  | int | oldState,
|  | int | newState,
|  | int | elapseSinceLastState
| ) |  |

Occurs when the audio publish state changed.

The publishing states include:

- PUB_STATE_IDLE(0)
- PUB_STATE_NO_PUBLISHED(1)
- PUB_STATE_PUBLISHING(2)
- PUB_STATE_PUBLISHED(3)

Parameters

  channel | The channel name of user joined.
  oldState | The old state of the audio stream publish.
  newState | The new state of the audio stream publish.
  elapseSinceLastState | The time elapsed (ms) from the old state to the new state.

## ◆ onVideoPublishStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onVideoPublishStateChanged | ( | Constants.VideoSourceType | source,
|  | String | channel,
|  | int | oldState,
|  | int | newState,
|  | int | elapseSinceLastState
| ) |  |

Occurs when the audio publish state changed.

The publishing states include:

- PUB_STATE_IDLE(0)
- PUB_STATE_NO_PUBLISHED(1)
- PUB_STATE_PUBLISHING(2)
- PUB_STATE_PUBLISHED(3)

Parameters

  source | source type of the originated video source.
  channel | The channel name of user joined.
  oldState | The old state of the video stream subscribe state.
  newState | The new state of the video stream subscribe state.
  elapseSinceLastState | The time elapsed (ms) from the old state to the new state.

## ◆ onAudioSubscribeStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioSubscribeStateChanged | ( | String | channel,
|  | int | uid,
|  | int | oldState,
|  | int | newState,
|  | int | elapseSinceLastState
| ) |  |

Occurs when the audio subscribe state changed. The subscribing states include:

- SUB_STATE_IDLE(0)
- SUB_STATE_NO_SUBSCRIBED(1)
- SUB_STATE_SUBSCRIBING(2)
- SUB_STATE_SUBSCRIBED(3)

Parameters

  channel | The channel name of user joined.
  uid | The remote user ID that is subscribed to.
  oldState | The old state of the audio stream subscribe.
  newState | The new state of the audio stream subscribe .
  elapseSinceLastState | The time elapsed (ms) from the old state to the new state.

## ◆ onVideoSubscribeStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onVideoSubscribeStateChanged | ( | String | channel,
|  | int | uid,
|  | int | oldState,
|  | int | newState,
|  | int | elapseSinceLastState
| ) |  |

Occurs when the video subscribe state changed.

The subscribing states include:

- SUB_STATE_IDLE(0)
- SUB_STATE_NO_SUBSCRIBED(1)
- SUB_STATE_SUBSCRIBING(2)
- SUB_STATE_SUBSCRIBED(3)

Parameters

  channel | The channel name of user joined.
  uid | The remote user ID that is subscribed to.
  oldState | The old state of the video stream subscribe state.
  newState | The new state of the video stream subscribe state.
  elapseSinceLastState | The time elapsed (ms) from the old state to the new state.

## ◆ onRemoteVideoStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onRemoteVideoStateChanged | ( | int | uid,
|  | int | state,
|  | int | reason,
|  | int | elapsed
| ) |  |

Occurs when the remote video state has changed.

Note
  This callback does not work properly when the number of users (in the `COMMUNICATION` profile) or hosts (in the `LIVE_BROADCASTING` profile) in the channel exceeds 17.

Parameters

  uid | ID of the user whose video state has changed.
  state | State of the remote video: REMOTE_VIDEO_STATE_STOPPED(0): The remote video is in the default state, probably due to REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED(3), REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED(5), or REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE(7). REMOTE_VIDEO_STATE_STARTING(1): The first remote video packet is received. REMOTE_VIDEO_STATE_DECODING(2): The remote video stream is decoded and plays normally, probably due to REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY (2), REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED(4), REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED(6), or REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY(9). REMOTE_VIDEO_STATE_FROZEN(3): The remote video is frozen, probably due to REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION(1) or REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK(8). REMOTE_VIDEO_STATE_FAILED(4): The remote video fails to start, probably due to REMOTE_VIDEO_STATE_REASON_INTERNAL(0).
  reason | The reason of the remote video state change: REMOTE_VIDEO_STATE_REASON_INTERNAL(0): Internal reasons. REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION(1): Network congestion. REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY(2): Network recovery. REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED(3): The local user stops receiving the remote video stream or disables the video module. REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED(4): The local user resumes receiving the remote video stream or enables the video module. REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED(5): The remote user stops sending the video stream or disables the video module. REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED(6): The remote user resumes sending the video stream or enables the video module. REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE(7): The remote user leaves the channel. REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK(8): The remote media stream falls back to the audio-only stream due to poor network conditions. REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY(9): The remote media stream switches back to the video stream after the network conditions improve.
  elapsed | The time elapsed (ms) from the local user calling `joinChannel` until this callback is triggered.

## ◆ onChannelMediaRelayStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onChannelMediaRelayStateChanged | ( | int | state,
|  | int | code
| ) |  |

Occurs when the state of the media stream relay changes.

The SDK reports the state of the current media relay and possible error messages in this callback.

Parameters

  state | The state code: `RELAY_STATE_IDLE(0)`: The SDK is initializing. `RELAY_STATE_CONNECTING(1)`: The SDK tries to relay the media stream to the destination channel. `RELAY_STATE_RUNNING(2)`: The SDK successfully relays the media stream to the destination channel. `RELAY_STATE_FAILURE(3)`: A failure occurs. See the details in `code`.
  code | The error code: `RELAY_OK(0)`: The state is normal. `RELAY_ERROR_SERVER_ERROR_RESPONSE(1)`: An error occurs in the server response. `RELAY_ERROR_SERVER_NO_RESPONSE(2)`: No server response. You can call the leaveChannel method to leave the channel. `RELAY_ERROR_NO_RESOURCE_AVAILABLE(3)`: The SDK fails to access the service, probably due to limited resources of the server. `RELAY_ERROR_FAILED_JOIN_SRC(4)`: Fails to send the relay request. `RELAY_ERROR_FAILED_JOIN_DEST(5)`: Fails to accept the relay request. `RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC(6)`: The server fails to receive the media stream. `RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST(7)`: The server fails to send the media stream. `RELAY_ERROR_SERVER_CONNECTION_LOST(8)`: The SDK disconnects from the server due to poor network connections. You can call the leaveChannel method to leave the channel. `RELAY_ERROR_INTERNAL_ERROR(9)`: An internal error occurs in the server. `RELAY_ERROR_SRC_TOKEN_EXPIRED(10)`: The token of the source channel has expired. `RELAY_ERROR_DEST_TOKEN_EXPIRED(11)`: The token of the destination channel has expired.

## ◆ onFirstLocalAudioFramePublished()

void io.agora.rtc2.IRtcEngineEventHandler.onFirstLocalAudioFramePublished | ( | int | elapsed | ) |

Occurs when the first audio frame is published.

Parameters

  elapsed | The time elapsed (ms) from the local user calling joinChannel to the SDK triggers this callback.

## ◆ onFirstRemoteAudioFrame()

void io.agora.rtc2.IRtcEngineEventHandler.onFirstRemoteAudioFrame | ( | int | uid,
|  | int | elapsed
| ) |  |

Occurs when the first remote audio frame is received.

Parameters

  uid | ID of the remote user.
  elapsed | The time elapsed (ms) from the local user calling RtcEngine#joinChannel until this callback is triggered.

## ◆ onFirstRemoteAudioDecoded()

void io.agora.rtc2.IRtcEngineEventHandler.onFirstRemoteAudioDecoded | ( | int | uid,
|  | int | elapsed
| ) |  |

Occurs when the SDK decodes the first remote audio frame for playback.

Parameters

  uid | User ID of the remote user sending the audio stream.
  elapsed | The time elapsed (ms) from the loca user calling joinChannel() until this callback is triggered.

## ◆ onAudioRouteChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioRouteChanged | ( | int | routing | ) |

Occurs when the local audio playback route changes.

This callback returns that the audio route switched to an earpiece, speakerphone, headset, or Bluetooth device.

The definition of the routing is listed as follows:

- AUDIO_ROUTE_DEFAULT(-1): The default audio route.
- AUDIO_ROUTE_HEADSET(0): Headset.
- AUDIO_ROUTE_EARPIECE(1): Earpiece.
- AUDIO_ROUTE_HEADSETNOMIC(2): Headset with no microphone.
- AUDIO_ROUTE_SPEAKERPHONE(3): Speakerphone.
- AUDIO_ROUTE_LOUDSPEAKER(4): Loudspeaker.
- AUDIO_ROUTE_BLUETOOTH_DEVICE_HFP(5): Bluetooth headset.

## ◆ onCameraReady()

void io.agora.rtc2.IRtcEngineEventHandler.onCameraReady | ( |  | ) |

The camera is turned on and ready to capture video.

If the camera fails to turn on, an error is passed in the onError method.

## ◆ onCameraFocusAreaChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onCameraFocusAreaChanged | ( | Rect | rect | ) |

Occurs when the camera focus area has changed.

Parameters

  rect | Rectangular area in the camera zoom that specifies the focus area.

## ◆ onCameraExposureAreaChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onCameraExposureAreaChanged | ( | Rect | rect | ) |

Occurs when the camera exposure area has changed.

Parameters

  rect | Rectangular area in the camera zoom that specifies the focus area.

## ◆ onSnapshotTaken()

void io.agora.rtc2.IRtcEngineEventHandler.onSnapshotTaken | ( | int | uid,
|  | String | filePath,
|  | int | width,
|  | int | height,
|  | int | errCode
| ) |  |

snapshot taken callback

Occurs when takeSnapshot API result is obtained

Parameters

  uid | user id
  filePath | image is saveed file path
  width | image width
  height | image height
  errCode | 0 is ok negative is error

## ◆ onFacePositionChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onFacePositionChanged | ( | int | imageWidth,
|  | int | imageHeight,
|  | AgoraFacePositionInfo[] | faceRectArr
| ) |  |

Occurs when the camera exposure area has changed.

Parameters

  imageWidth | width of output image.
  imageHeight | height of output image.
  faceRectArr | Rectangular area in the camera zoom that specifies the focus area.

## ◆ onAudioQuality()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioQuality | ( | int | uid,
|  | int | quality,
|  | short | delay,
|  | short | lost
| ) |  |

The audio quality of the specified user every two seconds.

By default, this callback is enabled.

Parameters

  uid | User ID of the speaker.
  quality | Rating of the audio quality: QUALITY_UNKNOWN(0) QUALITY_EXCELLENT(1) {QUALITY_GOOD(2)}QUALITY_POOR(3) QUALITY_BAD(4) {QUALITY_VBAD(5)}
  delay | Time delay (ms).
  lost | Packet loss rate (%).

## ◆ onRtcStats()

void io.agora.rtc2.IRtcEngineEventHandler.onRtcStats | ( | RtcStats | stats | ) |

Reports the statistics of the current call.

This callback is triggered once every two seconds after the user joins the channel.

Parameters

  stats | The statistics on the current call: RtcStats.

## ◆ onLastmileQuality()

void io.agora.rtc2.IRtcEngineEventHandler.onLastmileQuality | ( | int | quality | ) |

Reports the last-mile network quality of the local user.

This callback is triggered once after `startLastmileProbeTest` is called.

When the user is not in a channel and the last-mile network probe test is enabled (by calling `startLastmileProbeTest`), this callback function is triggered to update the app on the network connection quality of the local user.

Parameters

  quality | The network quality: `QUALITY_UNKNOWN(0)`: The quality is unknown. `QUALITY_EXCELLENT(1)`: The quality is excellent. `QUALITY_GOOD QUALITY_GOOD(2)`: The quality is quite good, but the bitrate may be slightly lower than excellent. `QUALITY_POOR(3)`: Users can feel the communication slightly impaired. `QUALITY_BAD(4)`: Users can communicate not very smoothly. `QUALITY_VBAD(5)`: The quality is so bad that users can barely communicate. `QUALITY_DOWN(6)`: The network is disconnected and users cannot communicate at all.

## ◆ onLastmileProbeResult()

void io.agora.rtc2.IRtcEngineEventHandler.onLastmileProbeResult | ( | LastmileProbeResult | result | ) |

Reports the last-mile network probe result.

The SDK triggers this callback within 30 seconds after the app calls the {startLastmileProbeTest} method. result The uplink and downlink lastmile network probe test result. For details, see LastmileProbeResult LastmileProbeResult}.

## ◆ onNetworkQuality()

void io.agora.rtc2.IRtcEngineEventHandler.onNetworkQuality | ( | int | uid,
|  | int | txQuality,
|  | int | rxQuality
| ) |  |

Reports the network quality of each user.

This callback is triggered once every two seconds after the user joins the channel.

Parameters

  uid | User ID. If `uid` is 0, the SDK reports the local network quality.
  txQuality | The transmission quality of the user: `QUALITY_UNKNOWN(0)`: The quality is unknown. `QUALITY_EXCELLENT(1)`: The quality is excellent. `QUALITY_GOOD QUALITY_GOOD(2)`: The quality is quite good, but the bitrate may be slightly lower than excellent. `QUALITY_POOR(3)`: Users can feel the communication slightly impaired. `QUALITY_BAD(4)`: Users can communicate not very smoothly. `QUALITY_VBAD(5)`: The quality is so bad that users can barely communicate. `QUALITY_DOWN(6)`: The network is disconnected and users cannot communicate at all.
  rxQuality | The receiving quality of the user: `QUALITY_UNKNOWN(0)`: The quality is unknown. `QUALITY_EXCELLENT(1)`: The quality is excellent. `QUALITY_GOOD QUALITY_GOOD(2)`: The quality is quite good, but the bitrate may be slightly lower than excellent. `QUALITY_POOR(3)`: Users can feel the communication slightly impaired. `QUALITY_BAD(4)`: Users can communicate not very smoothly. `QUALITY_VBAD(5)`: The quality is so bad that users can barely communicate. `QUALITY_DOWN(6)`: The network is disconnected and users cannot communicate at all.

## ◆ onLocalAudioStats()

void io.agora.rtc2.IRtcEngineEventHandler.onLocalAudioStats | ( | LocalAudioStats | stats | ) |

Reports the statistics of the local audio stream.

The SDK triggers this callback once every two seconds.

Parameters

  stats | The statistics of the local audio stream. See LocalAudioStats.

## ◆ onLocalVideoStats()

void io.agora.rtc2.IRtcEngineEventHandler.onLocalVideoStats | ( | Constants.VideoSourceType | source,
|  | LocalVideoStats | stats
| ) |  |

Reports the statistics of the local video streams.

The SDK triggers this callback once every two seconds for each user/host. If there are multiple users/hosts in the channel, the SDK triggers this callback as many times.

Parameters

  source | source type of the originated video source
  stats | The statistics of the local video stream. See LocalVideoStats.

## ◆ onRemoteAudioStats()

void io.agora.rtc2.IRtcEngineEventHandler.onRemoteAudioStats | ( | RemoteAudioStats | stats | ) |

Reports the statistics of the audio from each remote user or broadcaster.

The SDK triggers this callback once every two seconds for each remote user or broadcaster. If a channel has multiple remote users, the SDK triggers this callback as many times.

Parameters

  stats | The statistics of the received audio: RemoteAudioStats.

## ◆ onRemoteVideoStats()

void io.agora.rtc2.IRtcEngineEventHandler.onRemoteVideoStats | ( | RemoteVideoStats | stats | ) |

Reports the statistics of the video stream from each remote user/host.

The SDK triggers this callback once every two seconds for each remote user/host. If a channel includes multiple remote users, the SDK triggers this callback as many times.

Parameters

  stats | The statistics of the remote video streams. See RemoteVideoStats.

## ◆ onLocalVideoStat()

void io.agora.rtc2.IRtcEngineEventHandler.onLocalVideoStat | ( | int | sentBitrate,
|  | int | sentFrameRate
| ) |  |

Deprecated:
  The statistics of the uploading local video streams once every two seconds.

Parameters

  sentBitrate | Data sending bitrate (kbit/s) since last count.
  sentFrameRate | Data sending frame rate (fps) since last count.

## ◆ onRemoteVideoStat()

void io.agora.rtc2.IRtcEngineEventHandler.onRemoteVideoStat | ( | int | uid,
|  | int | delay,
|  | int | receivedBitrate,
|  | int | receivedFrameRate
| ) |  |

Deprecated:
  The statistics of receiving remote video streams once every two seconds.

Parameters

  uid | User ID of the user whose video streams are received.
  delay | Time delay (ms).
  receivedBitrate | Data receiving bitrate (kbit/s).
  receivedFrameRate | Data receiving frame rate (fps).

## ◆ onAudioMixingStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioMixingStateChanged | ( | int | state,
|  | int | reason
| ) |  |

Occurs when the state of the local user's audio mixing file changes.

When you call the startAudioMixing method and the state of audio mixing file changes, the Agora SDK triggers this callback.

- When the audio mixing file plays, pauses playing, or stops playing, this callback returns 710, 711, or 713 in state, and 0 in errorCode.
- When exceptions occur during playback, this callback returns 714 in state and an error in errorCode.
- If the local audio mixing file does not exist, or if the SDK does not support the file format or cannot access the music file URL, the SDK returns {WARN_AUDIO_MIXING_OPEN_ERROR = 701}. state The state code: Constants#AUDIO_MIXING_STATE_PLAYING AUDIO_MIXING_STATE_PLAYING(710)}: The audio mixing file is playing. Constants#AUDIO_MIXING_STATE_PAUSED AUDIO_MIXING_STATE_PAUSED(711)}: The audio mixing file pauses playing. Constants#AUDIO_MIXING_STATE_STOPPED AUDIO_MIXING_STATE_STOPPED(713)}: The audio mixing file stops playing. Constants#AUDIO_MIXING_STATE_FAILED AUDIO_MIXING_STATE_FAILED(714)}: An exception occurs when playing the audio mixing file. See the errorCode for details. reason The error code: Constants#AUDIO_MIXING_REASON_OK AUDIO_MIXING_ERROR_OK(701)}: No error. Constants#AUDIO_MIXING_REASON_CAN_NOT_OPEN AUDIO_MIXING_ERROR_CAN_NOT_OPEN(701)}: The SDK cannot open the audio mixing file. Constants#AUDIO_MIXING_REASON_TOO_FREQUENT_CALL AUDIO_MIXING_REASON_TOO_FREQUENT_CALL(702)}: The SDK opens the audio mixing file too frequently. Constants#AUDIO_MIXING_REASON_INTERRUPTED_EOF AUDIO_MIXING_ERROR_INTERRUPTED_EOF(703)}: The audio mixing file playback is interrupted.

## ◆ onAudioMixingPositionChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioMixingPositionChanged | ( | long | position | ) |

Reports current AudioMixing progress.

The callback occurs once every one second during the playback and reports the current playback progress.

Parameters

  position | Current AudioMixing progress (millisecond).

## ◆ onAudioMixingFinished()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioMixingFinished | ( |  | ) |

The audio mixing file playback is finished after calling {startAudioMixing}. If you failed to execute the filePath, boolean loopback, int cycle) startAudioMixing method, it returns the error code in the onError callback.

## ◆ onAudioEffectFinished()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioEffectFinished | ( | int | soundId | ) |

The local audio effect playback has finished.

Parameters

  soundId | ID of the audio effect. Each audio effect has a unique ID.

## ◆ onRhythmPlayerStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onRhythmPlayerStateChanged | ( | int | state,
|  | int | reason
| ) |  |

Occurs when the state of the local user's rhythm player changes. When you call the startRhythmPlayer method and the state of rhythm player changes, the SDK triggers this callback.

Parameters

  state | The state code. See #RHYTHM_PLAYER_STATE_TYPE.
  reason | The error code. See #RHYTHM_PLAYER_REASON_TYPE.

## ◆ onLocalAudioStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onLocalAudioStateChanged | ( | int | state,
|  | int | reason
| ) |  |

Occurs when the local audio stream state changes.

This callback indicates the state change of the local audio stream, including the state of the audio recording and encoding, and allows you to troubleshoot issues when exceptions occur.

Note
  When the state is `LOCAL_AUDIO_STREAM_STATE_FAILED(3)`, see the `error` parameter for details.

Parameters

  state | State of the local audio: LOCAL_AUDIO_STREAM_STATE_STOPPED(0): The local audio is in the initial state. {LOCAL_AUDIO_STREAM_STATE_CAPTURING(1)}: The recording device starts successfully. LOCAL_AUDIO_STREAM_STATE_ENCODING(2): The first audio frame encodes successfully. {LOCAL_AUDIO_STREAM_STATE_FAILED(3)}: The local audio fails to start.
  reason | The reason information of the local audio: LOCAL_AUDIO_STREAM_REASON_OK(0): The local audio is normal. LOCAL_AUDIO_STREAM_REASON_FAILURE(1): No specified reason for the local audio failure. LOCAL_AUDIO_STREAM_REASON_DEVICE_NO_PERMISSION(2): No permission to use the local audio device. LOCAL_AUDIO_STREAM_REASON_DEVICE_BUSY(3): The microphone is in use. {LOCAL_AUDIO_STREAM_REASON_CAPTURE_FAILURE(4)}: The local audio recording fails. Check whether the recording device is working properly. {LOCAL_AUDIO_STREAM_REASON_ENCODE_FAILURE(5)}: The local audio encoding fails.

## ◆ onLocalVideoStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onLocalVideoStateChanged | ( | Constants.VideoSourceType | source,
|  | int | state,
|  | int | reason
| ) |  |

Occurs when the local video stream state changes.

This callback indicates the state of the local video stream, including camera capturing and video encoding, and allows you to troubleshoot issues when exceptions occur.

Note
  For some device models, the SDK will not trigger this callback when the state of the local video changes while the local video capturing device is in use, so you have to make your own timeout judgment.

Parameters

  source | source type of the originated video source.
  state | The local video state: LOCAL_VIDEO_STREAM_STATE_STOPPED(0): The local video is in the initial state. LOCAL_VIDEO_STREAM_STATE_CAPTURING(1): The local video capturer starts successfully. LOCAL_VIDEO_STREAM_STATE_ENCODING(2): The first local video frame encodes successfully. LOCAL_VIDEO_STREAM_STATE_FAILED(3): The local video fails to start.
  reason | The detailed reason information of the local video: LOCAL_VIDEO_STREAM_REASON_OK(0): The local video is normal. LOCAL_VIDEO_STREAM_REASON_FAILURE(1): No specified reason for the local video failure. LOCAL_VIDEO_STREAM_REASON_DEVICE_NO_PERMISSION(2): No permission to use the local video device. LOCAL_VIDEO_STREAM_REASON_DEVICE_BUSY(3): The local video capturer is in use. LOCAL_VIDEO_STREAM_REASON_CAPTURE_FAILURE(4): The local video capture fails. Check whether the capturer is working properly. If your app runs in the background on a device running Android 9 or later, you cannot access the camera. If your app runs on a device running Android 6 or later, this error is reported if the camera is occupied by a third-part app and not property released. Once the camera is released, the SDK triggers this callback again, reporting state `CAPTURING(1)`, and error `ERROR_OK(0)`. LOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT(5): The local video encoding fails.

## ◆ onRtmpStreamingStateChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onRtmpStreamingStateChanged | ( | String | url,
|  | int | state,
|  | int | reason
| ) |  |

Occurs when the state of the RTMP streaming changes.

Parameters

  url | The RTMP URL address.
  state | The RTMP streaming state: RTMP_STREAM_PUBLISH_STATE_IDLE(0): The RTMP or RTMPS streaming has not started or has ended. This state is also triggered after you remove an RTMP or RTMPS stream from the CDN by calling removePublishStreamUrl. {RTMP_STREAM_PUBLISH_STATE_CONNECTING(1)}: The SDK is connecting to Agora streaming server and the CDN server. This state is triggered after you call the RtcEngine#addPublishStreamUrl addPublishStreamUrl} method. {RTMP_STREAM_PUBLISH_STATE_RUNNING(2)}: The RTMP or RTMPS streaming publishes. The SDK successfully publishes the RTMP or RTMPS streaming and returns this state. RTMP_STREAM_PUBLISH_STATE_RECOVERING(3): The RTMP or RTMPS streaming is recovering. When exceptions occur to the CDN, or the streaming is interrupted, the SDK attempts to resume RTMP or RTMPS streaming and returns this state. If the SDK successfully resumes the streaming, RTMP_STREAM_PUBLISH_STATE_RUNNING(2) returns. If the streaming does not resume within 60 seconds or server errors occur, RTMP_STREAM_PUBLISH_STATE_FAILURE(4) returns. You can also reconnect to the server by calling the removePublishStreamUrl and {addPublishStreamUrl} methods. RTMP_STREAM_PUBLISH_STATE_FAILURE(4): The RTMP or RTMPS streaming fails. See the errCode parameter for the detailed error information. You can also call the {addPublishStreamUrl} method to publish the RTMP or RTMPS streaming again. RTMP_STREAM_PUBLISH_STATE_DISCONNECTING(5): The SDK is disconnecting from the Agora streaming server and CDN. When you call `remove` or `stop` to stop the streaming normally, the SDK reports the streaming state as `DISCONNECTING`, `IDLE` in sequence.
  reason | The detailed reason information for streaming: RTMP_STREAM_PUBLISH_REASON_OK(0): The RTMP or RTMPS streaming publishes successfully. {RTMP_STREAM_PUBLISH_REASON_INVALID_ARGUMEN(1)}: Invalid argument used. If, for example, you do not call the RtcEngine#setLiveTranscoding setLiveTranscoding} method to configure the LiveTranscoding parameters before calling the RtcEngine#addPublishStreamUrl addPublishStreamUrl} method, the SDK returns this error. Check whether you set the parameters in the RtcEngine#setLiveTranscoding setLiveTranscoding} method properly. {RTMP_STREAM_PUBLISH_REASON_ENCRYPTED_STREAM_NOT_ALLOWED(2)}: The RTMP or RTMPS streaming is encrypted and cannot be published. {RTMP_STREAM_PUBLISH_REASON_CONNECTION_TIMEOUT(3)}: Timeout for the RTMP or RTMPS streaming. Call the RtcEngine#addPublishStreamUrl addPublishStreamUrl} method to publish the streaming again. RTMP_STREAM_PUBLISH_REASON_INTERNAL_SERVER_ERROR(4): An error occurs in Agora streaming server. Call the addPublishStreamUrl method to publish the streaming again. RTMP_STREAM_PUBLISH_REASON_RTMP_SERVER_ERROR(5): An error occurs in the CDN server. RTMP_STREAM_PUBLISH_REASON_TOO_OFTEN(6): Reserved. {RTMP_STREAM_PUBLISH_REASON_REACH_LIMIT(7)}: The host publishes more than 10 URLs. Delete the unnecessary URLs before adding new ones. RTMP_STREAM_PUBLISH_REASON_NOT_AUTHORIZED(8): The host manipulates other hosts' URLs. Check your app logic. RTMP_STREAM_PUBLISH_REASON_STREAM_NOT_FOUND(9): Agora server fails to find the RTMP or RTMPS streaming. RTMP_STREAM_PUBLISH_REASON_FORMAT_NOT_SUPPORTED(10): The format of the CDN streaming URL is not supported. Check whether the URL format is correct. {RTMP_STREAM_PUBLISH_REASON_NOT_BROADCASTER(11)}: The user role is not host, so the user cannot use the CDN live streaming function. Check your application code logic. {RTMP_STREAM_PUBLISH_REASON_TRANSCODING_NO_MIX_STREAM(13)}: The `updateRtmpTranscoding` or `setLiveTranscoding` method is called to update the transcoding configuration in a scenario where there is streaming without transcoding. Check your application code logic. {RTMP_STREAM_PUBLISH_REASON_NET_DOWN(14)}: Errors occurred in the host's network. RTMP_STREAM_PUBLISH_REASON_INVALID_APPID(15): Your App ID does not have permission to use the CDN live streaming function. Refer to Prerequisites to enable the CDN live streaming permission. {RTMP_STREAM_UNPUBLISH_REASON_OK(100)}: The streaming has been stopped normally.

## ◆ onRtmpStreamingEvent()

void io.agora.rtc2.IRtcEngineEventHandler.onRtmpStreamingEvent | ( | String | url,
|  | int | event
| ) |  |

Reports events during the RTMP or RTMPS streaming.

Since
  v3.1.0.

Parameters

  url | The CDN streaming URL.
  error | The event code. RTMP_STREAMING_EVENT_FAILED_LOAD_IMAGE(1): An error occurs when you add a background image or a watermark image to the RTMP or RTMPS stream. RTMP_STREAMING_EVENT_URL_ALREADY_IN_USE(2): The chosen URL address is already in use for CDN live streaming. RTMP_STREAMING_EVENT_ADVANCED_FEATURE_NOT_SUPPORT(3):advanced feature not support. RTMP_STREAMING_EVENT_REQUEST_TOO_OFTEN(4): Client request too frequently.

## ◆ onTranscodingUpdated()

void io.agora.rtc2.IRtcEngineEventHandler.onTranscodingUpdated | ( |  | ) |

Transcoding was successfully updated.

## ◆ onStreamInjectedStatus()

void io.agora.rtc2.IRtcEngineEventHandler.onStreamInjectedStatus | ( | String | url,
|  | int | uid,
|  | int | status
| ) |  |

The status of the injected stream.

Parameters

  url | URL address added into the broadcast.
  uid | User ID.
  status | Status of the injected stream: {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)

## ◆ onStreamMessage()

void io.agora.rtc2.IRtcEngineEventHandler.onStreamMessage | ( | int | uid,
|  | int | streamId,
|  | byte[] | data
| ) |  |

Receives the data stream. onRtmpStreamingEvent The SDK triggers this callback when the user receives the data stream that another user sends by calling the sendStreamMessage method within 5 seconds.

Parameters

  uid | User ID.
  streamId | Stream ID.
  data | Data received by the recipients.

## ◆ onStreamMessageError()

void io.agora.rtc2.IRtcEngineEventHandler.onStreamMessageError | ( | int | uid,
|  | int | streamId,
|  | int | error,
|  | int | missed,
|  | int | cached
| ) |  |

Fails to receive the data stream.

The SDK triggers this callback when the user does not receive the data stream that another user sends by calling the sendStreamMessage method within 5 seconds.

Parameters

  uid | ID of the user who sends the data stream.
  streamId | The ID of the stream data.
  error | The error code. See Error code.
  missed | The number of lost messages.
  cached | The number of incoming cached messages when the data stream is interrupted.

## ◆ onMediaEngineLoadSuccess()

void io.agora.rtc2.IRtcEngineEventHandler.onMediaEngineLoadSuccess | ( |  | ) |

Occurs when the media engine is loaded.

## ◆ onMediaEngineStartCallSuccess()

void io.agora.rtc2.IRtcEngineEventHandler.onMediaEngineStartCallSuccess | ( |  | ) |

Occurs when the media engine starts.

## ◆ onNetworkTypeChanged()

void io.agora.rtc2.IRtcEngineEventHandler.onNetworkTypeChanged | ( | int | type | ) |

Occurs when the network type is changed.

Parameters

  type | The network type. NETWORK_TYPE_UNKNOWN(-1): unknown. NETWORK_TYPE_DISCONNECTED(0): disconnected. NETWORK_TYPE_LAN(1): LAN. NETWORK_TYPE_WIFI(2): WIFI. NETWORK_TYPE_MOBILE_2G(3): 2G. NETWORK_TYPE_MOBILE_3G(4): 3G. NETWORK_TYPE_MOBILE_4G(5): 4G.

## ◆ onIntraRequestReceived()

void io.agora.rtc2.IRtcEngineEventHandler.onIntraRequestReceived | ( |  | ) |

Occurs when intra request from remote user is received.

This callback is triggered once remote user needs one Key frame.

## ◆ onUplinkNetworkInfoUpdated()

void io.agora.rtc2.IRtcEngineEventHandler.onUplinkNetworkInfoUpdated | ( | UplinkNetworkInfo | info | ) |

Occurs when uplink network info is updated.

This callback is used for notifying user to adjust the send pace based on the target bitrate.

Parameters

  info | The uplink network info.

## ◆ onDownlinkNetworkInfoUpdated()

void io.agora.rtc2.IRtcEngineEventHandler.onDownlinkNetworkInfoUpdated | ( | DownlinkNetworkInfo | info | ) |

Occurs when downlink network info is updated.

This callback is used for notifying user to switch major/minor stream if needed.

Parameters

  info | The network info.

## ◆ onEncryptionError()

void io.agora.rtc2.IRtcEngineEventHandler.onEncryptionError | ( | int | errorType | ) |

Reports the error type of encryption.

Parameters

  type | See #ENCRYPTION_ERROR_TYPE.

## ◆ onPermissionError()

void io.agora.rtc2.IRtcEngineEventHandler.onPermissionError | ( | int | permission | ) |

Reports the permission error.

Parameters

  permission | of Constants.RECORD_AUDIO, Constants.CAMERA and {}

## ◆ onUploadLogResult()

void io.agora.rtc2.IRtcEngineEventHandler.onUploadLogResult | ( | String | requestId,
|  | boolean | success,
|  | int | reason
| ) |  |

Reports the user log upload result

Parameters

  requestId | RequestId of the upload
  success | Is upload success
  reason | Reason of the upload, 0: OK, 1 Network Error, 2 Server Error.

## ◆ onProxyConnected()

void io.agora.rtc2.IRtcEngineEventHandler.onProxyConnected | ( | String | channel,
|  | int | uid,
|  | int | proxyType,
|  | String | localProxyIp,
|  | int | elapsed
| ) |  |

Occurs when the local user joins a specified channel after calling {setLocalAccessPoint} or { RtcEngine#setCloudProxy(int) setCloudProxy}. The channel name assignment is based on channelName specified in the { RtcEngine#joinChannel(String, String, String, int) joinChannel} method If the `uid` is not specified when RtcEngine#joinChannel(String, String, String, int) joinChannel} is called, the server automatically assigns a uid. channel The channel name. uid User ID. proxyType type of proxy agora sdk connected, proxyType will be PROXY_TYPE_NONE_PROXY if not connected to proxy(fallback). localProxyIp local proxy ip, if not join local proxy, it will be "" elapsed Time elapsed (ms) from the user calling RtcEngine#joinChannel(String, String, String, int) joinChannel} until this callback is triggered.

## ◆ onVideoRenderingTracingResult()

void io.agora.rtc2.IRtcEngineEventHandler.onVideoRenderingTracingResult | ( | int | uid,
|  | Constants.MEDIA_TRACE_EVENT | currentEvent,
|  | VideoRenderingTracingInfo | tracingInfo
| ) |  |

Reports the tracing result of video rendering event of the user.

Parameters

  uid | The user ID.
  currentEvent | The current event of the tracing result: #MEDIA_TRACE_EVENT.
  tracingInfo | The tracing result: #VideoRenderingTracingInfo.

## ◆ onLocalVideoTranscoderError()

void io.agora.rtc2.IRtcEngineEventHandler.onLocalVideoTranscoderError | ( | LocalTranscoderConfiguration.TranscodingVideoStream | stream,
|  | int | error
| ) |  |

Occurs when local video transcoder stream has an error.

Parameters

  stream | Stream type of TranscodingVideoStream.
  error | The error code: `VT_ERR_OK(0)`: No error. `VT_ERR_VIDEO_SOURCE_NOT_READY(1)`: The video track of the video source is not started. `VT_ERR_INVALID_VIDEO_SOURCE_TYPE(2)`: The video source type is not supported. `VT_ERR_INVALID_IMAGE_PATH(3)`: The image source url is not correct. `VT_ERR_UNSUPPORT_IMAGE_FORMAT(4)`: The image format not the type png/jpeg/gif of image source. `VT_ERR_INVALID_LAYOUT(5)`: The layout is invalid. Possible reason: The width of the layout is zero.

## ◆ onAudioMetadataReceived()

void io.agora.rtc2.IRtcEngineEventHandler.onAudioMetadataReceived | ( | int | uid,
|  | byte[] | data
| ) |  |

Occurs when the SDK receives audio metadata.

Since
  v4.3.1

Parameters

  metadata | The pointer of metadata
  length | Size of metadata @technical preview