Documentation menu
API compatibility
The complete public surface of agora_rtc_engine 6.6.3 is present so your code compiles. This page is about what actually does something behind each call.
Platforms
| Platform | Status |
|---|---|
| Android | Device-tested, running in production |
| macOS | Tested |
| iOS | Expected to work (same media engine); not CI-verified |
| Web | Not supported yet |
Channel & lifecycle
| createAgoraRtcEngine / initialize / release Full state machine, including double-initialize semantics. | Implemented |
| joinChannel / leaveChannel uid 0 auto-assign, double-join and leave-before-join quirks replicated. | Implemented |
| renewToken Re-exchanges at the gateway; connection is preserved. | Implemented |
| onConnectionStateChanged Agora's state/reason pairs. | Implemented |
| Auto-reconnect / onRejoinChannelSuccess Driven by the SFU's own reconnection. | Implemented |
| onTokenPrivilegeWillExpire / onRequestToken Scheduled from the Agora token's expiry, not the media credential's. | Implemented |
Audio & video
| enableAudio / enableVideo / disableAudio / disableVideo | Implemented |
| muteLocalAudioStream / muteLocalVideoStream Honoured before join and replayed on join. | Implemented |
| muteRemoteAudioStream / muteRemoteVideoStream | Implemented |
| muteAllRemoteAudioStreams / muteAllRemoteVideoStreams Applies to current and future participants. | Implemented |
| setClientRole Fires onClientRoleChanged. | Implemented |
| updateChannelMediaOptions Role change fires the callback; publish-flag-only updates are silent, as in Agora. | Implemented |
| switchCamera Works on a pre-join preview too; the view rebinds on flip. | Implemented |
| setEnableSpeakerphone / setDefaultAudioRouteToSpeakerphone | Implemented |
| startPreview / stopPreview Pre-join preview with a real camera track. | Implemented |
| setVideoEncoderConfiguration Dimensions, framerate and bitrate map onto the media engine's capture options. | Implemented |
| enableDualStreamMode / setRemoteVideoStreamType Simulcast. | Implemented |
| startScreenCapture / stopScreenCapture Published as a separate track; never targeted by switchCamera. | Implemented |
| enableAudioVolumeIndication Volumes mapped through dB onto Agora's 0–255 scale. | Implemented |
Rendering
| AgoraVideoView / VideoViewController Including the cached-controller pattern Agora's docs recommend. | Implemented |
| VideoViewController.remote | Implemented |
| setupLocalVideo / setupRemoteVideo | Implemented |
Statistics
| onRtcStats / onNetworkQuality Fields are populated from the media engine's stats; values are not numerically identical to Agora's. | Partial |
| onRemoteVideoStats / onRemoteAudioStats Subset of fields available from the SFU. | Partial |
Not implemented
These throw AgoraRtcException(-4, errNotSupported) rather than failing silently, so an app that depends on them fails at the call site instead of at runtime in front of a user.
| Media player (createMediaPlayer, …) | Throws −4 |
| Spatial audio | Throws −4 |
| Channel media relay | Throws −4 |
| Raw frame observers (registerVideoFrameObserver, …) | Throws −4 |
| RTM / signaling Out of scope: RTM is a separate Agora product. | Throws −4 |
How parity is verified
Documentation is not a specification of behaviour — the ordering quirks that break migrations are not written down anywhere. So the behaviour is recorded: a scenario app drives both SDKs through the same flow, the Agora run against the live Agora service is saved as a golden transcript, and the VoxaRTC run is diffed against it.
scenario: role_switch
✓ onJoinChannelSuccess(channel=parity, uid=1001, elapsed≈)
✓ onClientRoleChanged(old=broadcaster, new=audience)
✓ onUserJoined(remoteUid=1002)
✓ onUserPublished(remoteUid=1002, media=video)
PARITY OK — 8/8 scenariosMedia-burst events are compared as multisets (their interleaving is genuinely nondeterministic); everything else is compared in order. Several real bugs were found this way that no unit test would have caught.