VoxaRTC
Documentation menu
Guides

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

PlatformStatus
AndroidDevice-tested, running in production
macOSTested
iOSExpected to work (same media engine); not CI-verified
WebNot 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 / disableVideoImplemented
muteLocalAudioStream / muteLocalVideoStream

Honoured before join and replayed on join.

Implemented
muteRemoteAudioStream / muteRemoteVideoStreamImplemented
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 / setDefaultAudioRouteToSpeakerphoneImplemented
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.remoteImplemented
setupLocalVideo / setupRemoteVideoImplemented

Camera effects

The filter runs on the capture path, before the encoder, so the effect is in the published stream rather than painted over the local preview. Frames never cross into Dart. Two companion packages plug in here and can both be installed: voxa_beauty for skin smoothing and lipstick, which runs entirely on the GPU with no licence or subscription, and voxa_deepar for DeepAR effects. Each carries its own native integration, so an app adds a dependency and writes no platform code.

enableExtension

Enables a natively-registered filter. A name nothing registered fails loudly rather than silently doing nothing.

Implemented
setExtensionProperty

Licence keys, effect paths — whatever the filter reads. Properties set before a filter registers are replayed to it.

Implemented
VoxaVideoFilter (Android) / VoxaVideoFilters (iOS, macOS)

The native extension point an effect SDK plugs into. sharedEglContext() on Android hands a filter the GL context the capturer and encoder already share, so its output reaches the encoder with no copy.

Implemented
getExtensionProperty

Filters are write-only; nothing reads state back.

Throws −4

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 audioThrows −4
Channel media relayThrows −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.

text
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 scenarios

Media-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.