Skip to main content
This page doesn’t replicate every internal implementation field from the source code; it covers the public types most commonly used and most important to understand when integrating.

JoinOptions

Optional parameters for joining a channel. Example:

ChannelInfo

Channel info.

UserInfo

User info.

TrackInfo

Track description.

Codec

Codec enum.

VideoRotation

Video frame rotation, used by pushFrame(_:rotation:timestampNs:) and VideoFrame. The raw value is the angle, using the same convention as the rotation parameter of inputData on Android.

StreamVendor

Media streaming engine vendor. The SDK automatically selects the engine based on stream_vendor in the token / join response.

ConnectionState

DisconnectReason


Preset types

MicPreset

Common presets:
  • .speech
  • .music
  • .musicStereo
  • .musicHighQuality
  • .musicHighQualityStereo

CameraPreset

Common presets:
  • .h180p
  • .h360p
  • .h720p
  • .h1080p

ScreenPreset

Common presets:
  • .h720p
  • .h1080p

ScreenAudioPreset

Common presets:
  • .default
These presets are essentially combinations of “capture parameters + publishing parameters”. In other words, a preset isn’t syntactic sugar; it packages a set of sensible defaults into one object, reducing repeated configuration in your app.

ScreenCaptureMode

iOS screen capture mode, passed to createLocalScreenTrack(mode:). Ignored on macOS (which always uses ScreenCaptureKit).
For integration steps, see Screen sharing.

DeviceInfo

The unified device structure returned by the device manager. Possible values of DeviceKind:
  • audioInput
  • audioOutput
  • videoInput
On iOS, getDevices(kind: .audioOutput) returns an empty array—the system doesn’t expose output device enumeration. To control where output goes, use the audio route types below—see Audio routing.

AudioRoute

iOS only. The current audio output route, read-only, for reporting, with five states. Helper properties:

AudioRouteTarget

iOS only. Route targets you can switch to actively, with only two states. It’s deliberately separate from AudioRoute: iOS doesn’t provide the ability to switch to a specific Bluetooth / wired device; external devices are taken over by the system, and the SDK can only control “built-in speaker or receiver”. asRoute maps back to AudioRoute (.earpiece → .receiver).

AudioRouteInfo

iOS only. A snapshot of a system audio port, for diagnostics / display, not a list to choose from.

AudioCallState

iOS only. The system call state, from CallKit. The SDK uses it to decide when it can recover after an audio interruption.

ConnectionQuality

Connection quality level, parsed from the reports sent by the server. When comparing which level is worse, the order is unknown < excellent < good < poor < lost.

QualitySample

A snapshot of quality values in one direction; a signal-strength icon / network panel can render directly from these fields.

QualityReport

A complete quality report. The SDK emits one each time the server sends a report.

QualityEvaluation

A simplified level evaluation snapshot, used by getConnectionQuality() and the level-change event.

ConnectionQualityChange


ActiveSpeakerInfo / ActiveSpeakersSnapshot

speakers is the full list: the SDK has already merged the server’s incremental protocol and sorted it by level in descending order; when nobody is speaking, it’s an empty array.

LayerSwitchedInfo

For how to use the quality-related types above, see Call quality and active speakers.

ReceiveStreamStatus

The payload of a receive status change for one remote video, delivered by the channel(_:didChangeReceiveStreamStatus:) callback. It’s judged per track, looking only at whether this video is producing frames, and is unrelated to the quality level of the whole link—don’t use ConnectionQualityChange in its place; see Events for details.
It corresponds to engineChannel:onReceiveStreamStatusChange:trackId:status: in the older RTCEngineKit; timedOut has the same truth value as the old status (true means timed out), so you don’t need to invert it when migrating.