Agora C++ API Reference for All Platforms

Loading...
Searching...
No Matches
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
agora::rtc Namespace Reference

## Namespaces
namespace | protocol

## Classes
class | AAudioDeviceManager
struct | AdvancedAudioOptions
struct | AdvancedConfigInfo
struct | AdvanceOptions
class | AiEchoCancellationContollerExtension
class | AiEchoCancellationExtension
class | AINoiseSuppressorControllerExtension
class | AINoiseSuppressorExtension
struct | AlphaChannel
struct | audio_packet_t
struct | audio_transport_packet_info
struct | AudioDeviceInfo
struct | AudioEncFrameRecvParams
struct | AudioEncodedFrameObserverConfig
struct | AudioEncoderConfiguration
struct | AudioFrameHandleInfo
struct | AudioOptions
struct | AudioParameters
struct | AudioPcmDataInfo
struct | AudioRecordingConfiguration
struct | AudioSinkWants
struct | AudioTrackConfig
struct | AudioVolumeInfo
struct | AudioVolumeInformation
class | AVideoDeviceManager
struct | BeautyOptions
struct | BitrateConstraints
struct | broadcast_packet_t
struct | CameraCapturerConfiguration
struct | CameraCharacteristicProfile
struct | CameraInfo
struct | canvas_info
struct | Capabilities
struct | CapabilityItem
struct | CapabilityItemMap
struct | ChannelMediaInfo
struct | ChannelMediaOptions
struct | ChannelMediaRelayConfiguration
struct | ClientRoleOptions
struct | CodecCapInfo
struct | CodecCapLevels
struct | ColorEnhanceOptions
class | ConnInfosIterator
class | ContentInspectExtension
struct | control_broadcast_packet_t
class | CustomExtensionWrapper
struct | DataStreamConfig
struct | DeviceInfo
struct | DirectCdnStreamingMediaOptions
struct | DirectCdnStreamingStats
struct | distribution_property_t
struct | DownlinkNetworkInfo
struct | EchoTestConfiguration
struct | EncodedAudioFrameAdvancedSettings
struct | EncodedAudioFrameInfo
struct | EncodedVideoFrameInfo
struct | EncryptionConfig
class | EncryptionConfigInternal
struct | ExtensionContext
class | ExtensionEncodedImage
struct | ExtensionInfo
struct | ExtensionInterfaceVersion
struct | ExtensionInterfaceVersion< IAudioFilter >
struct | ExtensionInterfaceVersion< IAudioFilterV2 >
struct | ExtensionInterfaceVersion< ICustomExtensionProvider >
struct | ExtensionInterfaceVersion< IExtensionProvider >
struct | ExtensionInterfaceVersion< IExtensionProviderV2 >
struct | ExtensionInterfaceVersion< IExtensionVideoFilter >
struct | ExtensionInterfaceVersion< IScreenCaptureSource >
struct | ExtensionVersion
class | ExtensionVideoCodecSettings
class | ExtProviderDeleter
struct | FaceShapeAreaOptions
struct | FaceShapeBeautyOptions
struct | FilterEffectOptions
struct | FocalLengthInfo
struct | FrameProcessResult
struct | GlobalResourceMetaInfo
class | IAgoraVideoQualityAnalyzer
class | IAudioDeviceManagerObserver
class | IAudioEncodedFrameObserver
class | IAudioEncodedFrameReceiver
class | IAudioEncodedFrameSender
class | IAudioFilter
class | IAudioFilterBase
class | IAudioFilterV2
class | IAudioFrameDumpObserver
class | IAudioMixerSource
class | IAudioPcmDataSender
class | IAudioSinkBase
class | IAudioTrack
class | IAVDataObserver
class | ICameraCaptureObserver
class | ICameraCapturer
class | ICameraCapturerEx
class | ICapabilitesObserver
class | IConfigCenter
class | ICustomExtensionProvider
class | IDiagnosticService
class | IDirectCdnStreamingEventHandler
class | IDumpStateObserver
class | IExtensionControl
class | IExtensionDecoderCallback
class | IExtensionEncoderCallback
class | IExtensionProvider
class | IExtensionProviderV2
class | IExtensionVideoCodecProvider
class | IExtensionVideoDecoder
class | IExtensionVideoDecoderProvider
class | IExtensionVideoEncoder
class | IExtensionVideoEncoderProvider
class | IExtensionVideoFilter
class | IExtensionVideoFilterControlEx
class | IExtensionVideoSink
class | IFileUploaderService
class | IH265Transcoder
class | IH265TranscoderObserver
class | ILipSyncFilter
class | ILocalAudioTrack
class | ILocalAudioTrackEx
class | ILocalAudioTrackObserver
class | ILocalUser
class | ILocalUserEx
class | ILocalUserObserver
class | ILocalVideoTrack
class | ILocalVideoTrackEx
struct | ImagePayloadData
struct | ImageTrackOptions
class | IMediaControlPacketCallback
class | IMediaControlPacketReceiver
class | IMediaControlPacketSender
class | IMediaControlPacketSenderEx
class | IMediaExtensionObserver
class | IMediaNodeFactory
class | IMediaNodeFactoryEx
class | IMediaPacketCallback
class | IMediaPacketReceiver
class | IMediaPacketSender
class | IMediaPacketSenderEx
class | IMediaPlayerSource
class | IMediaPlayerSourceEx
class | IMediaPlayerSourceObserver
class | IMediaPlayerVideoFrameObserverEx
class | IMediaRecorder
class | IMediaRecorder2
class | IMediaRecorder2Ex
class | IMediaRecorderEx
class | IMediaRelayObserver
class | IMediaRelayService
class | IMediaStreamingSource
class | IMediaStreamingSourceEx
class | IMediaStreamingSourceObserver
class | IMetadataObserver
class | INetworkObserver
class | INGAudioDeviceManager
class | INGVideoDeviceManager
class | INGVideoDeviceManagerEx
struct | InjectStreamConfig
struct | InputSeiData
struct | InternalEngineStatus
class | IObservableVideoFilter
class | IObservableVideoSink
class | IPacketObserver
class | IRecordingDeviceSource
class | IRemoteAudioMixerSource
class | IRemoteAudioTrack
class | IRemoteAudioTrackEx
class | IRemoteVideoTrack
class | IRemoteVideoTrackEx
class | IRtcAvTransportPacketInfoObserver
class | IRtcConnection
class | IRtcConnectionEx
class | IRtcConnectionObserver
class | IRtcEngine
class | IRtcEngineEventHandler
class | IRtcEngineEventHandlerEx
class | IRtcEngineEventHandlerInternal
class | IRtcEngineEx
class | IRtcEngineInternal
class | IRtmpConnection
class | IRtmpConnectionEx
class | IRtmpConnectionObserver
class | IRtmpLocalUser
class | IRtmpLocalUserObserver
class | IRtmpStreamingObserver
class | IRtmpStreamingService
class | IScreenCaptureObserver
class | IScreenCapturer
class | IScreenCapturer2
class | IScreenCapturerEx
class | IScreenCapturerEx2
class | IScreenCaptureSource
class | IScreenCaptureSourceList
class | ITransportPacketObserver
class | IVideoBeautyFilter
class | IVideoDeviceCollection
class | IVideoDeviceManager
class | IVideoDeviceManagerObserver
class | IVideoEffectObject
class | IVideoEncodedImageCallback
class | IVideoEncodedImageSender
class | IVideoEncodedImageSenderEx
class | IVideoFilter
class | IVideoFilterBase
class | IVideoFilterEx
class | IVideoFrame
class | IVideoFrameAdapter
class | IVideoFrameEx
class | IVideoFrameMemoryPool
class | IVideoFrameMemoryPoolEx
class | IVideoFrameObserver2
class | IVideoFrameSender
class | IVideoFrameSenderEx
class | IVideoFrameTransceiver
class | IVideoFrameTransceiverEx
class | IVideoLayoutObserver
class | IVideoMixerSource
class | IVideoMixerSourceEx
class | IVideoRenderer
class | IVideoRendererEx
class | IVideoSinkBase
class | IVideoTrack
class | IVideoTrackObserver
struct | LastmileProbeConfig
struct | LastmileProbeOneWayResult
struct | LastmileProbeResult
struct | layout_info
struct | LayoutInternal
struct | LeaveChannelOptions
struct | LiveStreamAdvancedFeature
struct | LiveTranscoding
struct | LocalAccessPointConfiguration
struct | LocalAudioMixerConfiguration
struct | LocalAudioStats
struct | LocalTranscoderConfiguration
struct | LocalVideoStats
struct | LocalVideoTrackStats
struct | LocalVideoTrackStatsEx
struct | LogUploadServerInfo
struct | LoopbackRecordingOption
struct | LowlightEnhanceOptions
struct | MixedAudioStream
struct | MixerLayoutConfig
struct | MultipathStats
struct | PacketOptions
struct | PaddedRawPixelBuffer
struct | PathStats
struct | peer_message_t
struct | PreviewMetaInfo
struct | PublisherConfiguration
struct | RawPixelBuffer
struct | rdt_message_t
struct | ReceivePacketHandler
struct | RecorderStreamInfo
struct | Rectangle
struct | region_info
struct | RemoteAudioStats
struct | RemoteAudioTrackStats
struct | RemoteVideoStats
struct | RemoteVideoTrackStats
struct | RemoteVideoTrackStatsEx
struct | rtc_packet_t
struct | RtcConnection
struct | RtcConnectionConfiguration
struct | RtcConnectionConfigurationEx
struct | RtcConnStats
struct | RtcEngineContext
struct | RtcEngineContextInternal
class | RtcEngineLibHelper
struct | RtcImage
struct | RtcStats
struct | RtmpConnectionConfiguration
struct | RtmpConnectionInfo
struct | RtmpStreamingAudioConfiguration
struct | RtmpStreamingVideoConfiguration
struct | SAudioFrame
struct | SAudioPacket
struct | ScreenAudioParameters
struct | ScreenCaptureConfiguration
struct | ScreenCaptureMetaInfo
struct | ScreenCaptureParameters
struct | ScreenCaptureParameters2
struct | ScreenCaptureProfilingStatistics
struct | ScreenCaptureSourceInfo
struct | ScreenVideoParameters
struct | SegmentationProperty
struct | SenderOptions
struct | SimulcastConfig
struct | SimulcastConfigInternal
struct | SimulcastStreamConfig
struct | SimulcastStreamProfile
struct | SIZE
struct | SMediaFrame
class | StateNotifier
struct | StreamLayerConfigInternal
struct | TConnectionInfo
struct | TConnectSettings
struct | TextureInfo
struct | ThumbImageBuffer
struct | TranscodingUser
struct | TranscodingVideoStream
struct | UplinkNetworkInfo
struct | UserInfo
struct | video_custom_ctrl_broadcast_packet_t
struct | video_packet_t
struct | video_transport_packet_info
struct | VideoAvailabilityIndicator
struct | VideoBeautyParam
struct | VideoCanvas
struct | VideoCompositingLayout
struct | VideoConfigurationEx
struct | VideoDataPipeFormat
struct | VideoDenoiserOptions
class | VideoDeviceInfo
struct | VideoDimensions
struct | VideoEncodedImageData
struct | VideoEncoderConfiguration
struct | VideoFormat
struct | VideoFrameData
struct | VideoFrameDataV2
struct | VideoHWCodecSpec
class | VideoLayoutInfoInternal
struct | VideoQoEAnalyzerParameter
struct | VideoRendererInfo
struct | VideoRenderingTracingInfo
struct | VideoSubscriptionOptions
struct | VideoTrackInfo
struct | VirtualBackgroundSource
struct | WatermarkBuffer
struct | WatermarkBufferInner
struct | WatermarkConfig
struct | WatermarkConfigInner
struct | WatermarkLiteral
struct | WatermarkLiteralInner
struct | WatermarkOptions
struct | WatermarkRatio
struct | WatermarkTimestamp
struct | WatermarkTimestampInner
struct | WebAgentVideoStats
struct | YuvConvertStats

## Typedefs
using | PipelineBuilder = std::shared_ptr<webrtc::Call>
using | WeakPipelineBuilder = std::weak_ptr<webrtc::Call>
template<typename T>
using | ExtRefCountedObject = agora::RefCountedObject<T, ExtProviderDeleter>
using | StreamsFecStatsMap = std::map<uint8_t, std::pair<uint16_t, uint32_t>>
using | SharedSAudioFrame = std::shared_ptr<SAudioFrame>
template<typename STATE_TYPE, typename REASON_TYPE>
using | StateEvent = std::pair<uint64_t, std::pair<STATE_TYPE, REASON_TYPE>>
template<typename STATE_TYPE, typename REASON_TYPE>
using | StateEvents = std::vector<StateEvent<STATE_TYPE, REASON_TYPE>>
using | CameraInfoList = std::vector<CameraInfo>
typedef int32_t | VideoSourceType
typedef struct agora::rtc::RtcImage | RtcImage
typedef unsigned int | uid_t
typedef unsigned int | track_id_t
typedef unsigned int | conn_id_t
typedef unsigned int | video_track_id_t
using | RtcEngineReleaseCallback = void(*)()

## Enumerations
enum | RTMP_CHANNEL_EVENT { RTMP_CHANNEL_EVENT_DISCONNECT = 0 , RTMP_CHANNEL_EVENT_LEAVE_CHANNEL = 1 , RTMP_CHANNEL_EVENT_BANNED_BY_SERVER = 2 }
enum class | AUDIO_FRAME_SOURCE_TYPE { UNKNOWN = 0 , RECORD = 1 << 0 , PUSH_DIRECT = 1 << 1 , PUSH_EXTERNAL = 1 << 2 , SIMPLE_MEDIA_PLAYER = 1 << 3 , FFMPEG_MEDIA_PLAYER = 1 << 4 , KNOWN_TYPE_COUNT = 5 }
enum | ADM_ANDROID_MODE { JAVA_INPUT_AND_JAVA_OUTPUT = 5 , OPENSL_INPUT_AND_OPENSL_OUTPUT = 6 , JAVA_INPUT_AND_OPENSL_OUTPUT = 7 , OBOE_INPUT_AND_OBOE_OUTPUT = 8 , JAVA_INPUT_AND_OBOE_OUTPUT = 9 , OPENSL_INPUT_AND_OBOE_OUTPUT = 10 }
enum | : int { INVLAID_VALUE = -1 }
enum | LocalExtensionCounter { LOCAL_EXTENSION_COUNTER_LOWLIGHT_ENHANCE_COST_TIME = 248 , LOCAL_EXTENSION_COUNTER_BEAUTY_COST_TIME = 307 , LOCAL_EXTENSION_COUNTER_PVC_STATUS = 717 , LOCAL_EXTENSION_COUNTER_PVC_COST_TIME = 308 , LOCAL_EXTENSION_COUNTER_FACE_DETECT_COST_TIME = 636 , LOCAL_EXTENSION_COUNTER_SEG_ENABLE = 658 , LOCAL_EXTENSION_COUNTER_SEG_COST_TIME = 659 , LOCAL_EXTENSION_COUNTER_BACKREPLACE_ENABLE = 660 , LOCAL_EXTENSION_COUNTER_BACKREPLACE_COST_TIME = 661 , LOCAL_EXTENSION_COUNTER_BLUR_COST_TIME = 768 , LOCAL_EXTENSION_COUNTER_DENOISER_COST_TIME = 746 , LOCAL_EXTENSION_COUNTER_COLOR_ENHANCE_COST_TIME = 747 , LOCAL_EXTENSION_REMOTE_COUNTER_SUPER_RESOLUTION_TYPE =241 , LOCAL_EXTENSION_REMOTE_COUNTER_SUPER_RESOLUTION_COST_TIME =242 , LOCAL_EXTENSION_LOCAL_COUNTER_SUPER_RESOLUTION_COST_TIME =1181 , LOCAL_EXTENSION_COUNTER_TEXTTURE2YUV_COST_TIME =911 , LOCAL_EXTENSION_LOCAL_COUNTER_FACE_CAPTURE_COST_TIME = 961 , LOCAL_EXTENSION_COUNTER_METAKIT_RENDERING_COST_TIME = 962 , LOCAL_EXTENSION_LOCAL_COUNTER_LIP_SYNC_COST_TIME = 1001 , LOCAL_EXTENSION_COUNTER_RHYTHM_TYPE =992 , LOCAL_EXTENSION_COUNTER_RHYTHM_COSTTIME = 993 , LOCAL_EXTENSION_COUNTER_ADVANCED_BEAUTY_COST_TIME = 1017 , LOCAL_EXTENSION_COUNTER_FILTER_COST_TIME = 1085 , LOCAL_EXTENSION_COUNTER_METAKIT_GPU_FRAME_TIME = 1110 , LOCAL_EXTENSION_COUNTER_MAKEUP_COST_TIME = 1109 }
enum | MEDIA_STREAM_TYPE { MEDIA_STREAM_TYPE_AUDIO = (1 << 0) , MEDIA_STREAM_TYPE_VIDEO_LOW = (1 << 1) , MEDIA_STREAM_TYPE_VIDEO_HIGH = (1 << 2) , MEDIA_STREAM_TYPE_VIDEO_LAYER_0 = MEDIA_STREAM_TYPE_VIDEO_HIGH , MEDIA_STREAM_TYPE_VIDEO_LAYER_1 = (1 << 16) , MEDIA_STREAM_TYPE_VIDEO_LAYER_2 = (1 << 17) , MEDIA_STREAM_TYPE_VIDEO_LAYER_3 = (1 << 18) , MEDIA_STREAM_TYPE_VIDEO_LAYER_4 = (1 << 19) , MEDIA_STREAM_TYPE_VIDEO_LAYER_5 = (1 << 20) , MEDIA_STREAM_TYPE_VIDEO_LAYER_6 = (1 << 21) , MEDIA_STREAM_TYPE_VIDEO , MEDIA_STREAM_TYPE_MEDIA = MEDIA_STREAM_TYPE_AUDIO | MEDIA_STREAM_TYPE_VIDEO }
enum | MEDIA_FRAMERATE_LEVEL { MEDIA_FRAMERATE_LEVEL_HIGH = (0b00 << 24) , MEDIA_FRAMERATE_LEVEL_MIDDLE = (0b01 << 24) , MEDIA_FRAMERATE_LEVEL_LOW = (0b10 << 24) }
enum | VideoStreamType { MASTER_VIDEO_STREAM = 0 , LOW_BITRATE_VIDEO_STREAM = 1 , MEDIUM_BITRATE_VIDEO_STREAM = 2 , LIVE_VIDEO_STREAM = 3 }
enum | CongestionControlType { CONGESTION_CONTROLLER_TYPE_AGORA_CC = 0 , CONGESTION_CONTROLLER_TYPE_REMB , CONGESTION_CONTROLLER_TYPE_TRANSPORT_CC , CONGESTION_CONTROLLER_TYPE_AUT_CC }
enum | ConnectionMode { CONNECTION_MODE_ACTIVE , CONNECTION_MODE_PASSIVE }
enum | InternalRendererType { RENDERER_NONE = -1 , RENDERER_BUILT_IN_RENDERER = 0 , RENDERER_EXT_OBSERVER = 3 }
enum | CAMERA_OUTPUT_DATA_TYPE { CAMERA_OUTPUT_RAW = 0 , CAMERA_OUTPUT_TEXTURE = 1 , CAMERA_OUTPUT_TEXTURE_AND_RAW = 2 }
enum class | InternalVideoSourceType : unsigned { None = 0 , Camera = 1 , Custom = 2 , Screen = 3 , CustomYuvSource = 4 , CustomEncodedImageSource = 5 , CustomPacketSource = 6 , MixedSource = 7 , TranscodedSource = 8 }
enum | VideoModuleId { VideoModuleCapture = 1 , VideoModulePreprocess , VideoModuleEncode , VideoModuleNetwork , VideoModuleDecode , VideoModulePostprocess , VideoModuleRender , VideoModulePipeline , VideoModuleQoE , VideoModuleExtension }
enum | VideoAvailabilityLevel { VideoAvailabilityLevel1 = 1 , VideoAvailabilityLevel2 , VideoAvailabilityLevel3 }
enum | VideoPipelineEvent { kVideoUplinkEventStaticFrames = 1 }
enum | VideoQoeEvent { kVideoQoeCriticalDrop = 1 , kVideoQoe600msFreezeDrop = 2 , kVideoQoe200msFreezeDrop = 3 , kVideoQoeFpsSubstandard = 4 , kVideoTimestampException = 5 , kVideoQoePipelineException = 6 , kVideoGlitchDetection = 7 , kVideoExtensionStatusDetection = 8 }
enum | VideoProcessEvent { kVideoProcessEventNone = 0 , kVideoProcessEventPreprocessEnqueueFailure = 1000 , kVideoProcessEventPreprocessFrameFailure = 1001 , kVideoProcessEventPreprocessNoIncomingFrame = 1002 , kVideoProcessEventPreprocessCongested = 1003 }
enum | VideoCodecAvailableEvent { kVideoHwH265EncoderAvailable = 2000 , kVideoHwH264EncoderHighProfileAvailable = 2001 }
enum | VideoDumpMode { VIDEO_DUMP_DEFAULT = 0 , VIDEO_DUMP_ALL = 0xFFFF , VIDEO_DUMP_CAPTURED_YUV = (1 << 0) , VIDEO_DUMP_FILTERED_YUV = (1 << 1) , VIDEO_DUMP_ENCODED_STREAM = (1 << 2) , VIDEO_DUMP_RECEIVED_STREAM = (1 << 3) , VIDEO_DUMP_DECODED_YUV = (1 << 4) , VIDEO_DUMP_RENDERED_YUV = (1 << 5) , VIDEO_DUMP_PRE_ENCODER_YUV = (1 << 6) }
enum | AudioTrackType { LOCAL_AUDIO_TRACK , REMOTE_AUDIO_TRACK }
enum | RTMP_CONNECTION_ERROR { RTMP_CONNECTION_ERR_OK = 0 , RTMP_CONNECTION_ERR_FAILED = 1 , RTMP_CONNECTION_ERR_INVALID_URL = 2 , RTMP_CONNECTION_ERR_BAD_NAME = 3 }
enum | RTMP_CONNECTION_STATE { STATE_DISCONNECTED = 1 , STATE_CONNECTING = 2 , STATE_CONNECTED = 3 , STATE_RECONNECTING = 4 , STATE_FAILED = 5 , STATE_RECONNECTED = 6 }
enum | PublishAudioError { PUBLISH_AUDIO_ERR_OK = 0 , PUBLISH_AUDIO_ERR_FAILED = 1 }
enum | PublishVideoError { PUBLISH_VIDEO_ERR_OK = 0 , PUBLISH_VIDEO_ERR_FAILED = 1 }
enum | ImageType { kUnknownPic , kPng , kJpeg , kGif }
enum | StreamLayerIndexInternal { STREAM_LAYER_1 = 1 , STREAM_LAYER_2 = 2 , STREAM_LAYER_3 = 3 , STREAM_LAYER_4 = 4 , STREAM_LAYER_5 = 5 , STREAM_LAYER_6 = 6 , STREAM_LOW = 7 , STREAM_LAYER_COUNT_MAX = 8 }
enum | VideoTrackType { LOCAL_VIDEO_TRACK , REMOTE_VIDEO_TRACK , REMOTE_VIDEO_IMAGE_TRACK }
enum | USER_OFFLINE_REASON_TYPE { USER_OFFLINE_QUIT = 0 , USER_OFFLINE_DROPPED = 1 , USER_OFFLINE_BECOME_AUDIENCE = 2 }
enum | INTERFACE_ID_TYPE { AGORA_IID_AUDIO_DEVICE_MANAGER = 1 , AGORA_IID_VIDEO_DEVICE_MANAGER = 2 , AGORA_IID_PARAMETER_ENGINE = 3 , AGORA_IID_MEDIA_ENGINE = 4 , AGORA_IID_AUDIO_ENGINE = 5 , AGORA_IID_VIDEO_ENGINE = 6 , AGORA_IID_RTC_CONNECTION = 7 , AGORA_IID_SIGNALING_ENGINE = 8 , AGORA_IID_MEDIA_ENGINE_REGULATOR = 9 , AGORA_IID_LOCAL_SPATIAL_AUDIO = 11 , AGORA_IID_STATE_SYNC = 13 , AGORA_IID_META_SERVICE = 14 , AGORA_IID_MUSIC_CONTENT_CENTER = 15 , AGORA_IID_H265_TRANSCODER = 16 }
enum | QUALITY_TYPE { __deprecated = 0 , QUALITY_EXCELLENT = 1 , QUALITY_GOOD = 2 , QUALITY_POOR = 3 , QUALITY_BAD = 4 , QUALITY_VBAD = 5 , QUALITY_DOWN = 6 , QUALITY_UNSUPPORTED = 7 , QUALITY_DETECTING = 8 }
enum | FIT_MODE_TYPE { MODE_COVER = 1 , MODE_CONTAIN = 2 }
enum | VIDEO_ORIENTATION { VIDEO_ORIENTATION_0 = 0 , VIDEO_ORIENTATION_90 = 90 , VIDEO_ORIENTATION_180 = 180 , VIDEO_ORIENTATION_270 = 270 }
enum | FRAME_RATE { FRAME_RATE_FPS_1 = 1 , FRAME_RATE_FPS_7 = 7 , FRAME_RATE_FPS_10 = 10 , FRAME_RATE_FPS_15 = 15 , FRAME_RATE_FPS_24 = 24 , FRAME_RATE_FPS_30 = 30 , FRAME_RATE_FPS_60 = 60 }
enum | FRAME_WIDTH { FRAME_WIDTH_960 = 960 }
enum | FRAME_HEIGHT { FRAME_HEIGHT_540 = 540 }
enum | VIDEO_FRAME_TYPE { VIDEO_FRAME_TYPE_BLANK_FRAME = 0 , VIDEO_FRAME_TYPE_KEY_FRAME = 3 , VIDEO_FRAME_TYPE_DELTA_FRAME = 4 , VIDEO_FRAME_TYPE_B_FRAME = 5 , VIDEO_FRAME_TYPE_DROPPABLE_FRAME = 6 , VIDEO_FRAME_TYPE_UNKNOW }
enum | ORIENTATION_MODE { ORIENTATION_MODE_ADAPTIVE = 0 , ORIENTATION_MODE_FIXED_LANDSCAPE = 1 , ORIENTATION_MODE_FIXED_PORTRAIT = 2 }
enum | DEGRADATION_PREFERENCE { MAINTAIN_AUTO = -1 , MAINTAIN_QUALITY = 0 , MAINTAIN_FRAMERATE = 1 , MAINTAIN_BALANCED = 2 , MAINTAIN_RESOLUTION = 3 , DISABLED = 100 }
enum | SCREEN_CAPTURE_FRAMERATE_CAPABILITY { SCREEN_CAPTURE_FRAMERATE_CAPABILITY_15_FPS = 0 , SCREEN_CAPTURE_FRAMERATE_CAPABILITY_30_FPS = 1 , SCREEN_CAPTURE_FRAMERATE_CAPABILITY_60_FPS = 2 }
enum | VIDEO_CODEC_CAPABILITY_LEVEL { CODEC_CAPABILITY_LEVEL_UNSPECIFIED = -1 , CODEC_CAPABILITY_LEVEL_BASIC_SUPPORT = 5 , CODEC_CAPABILITY_LEVEL_1080P30FPS = 10 , CODEC_CAPABILITY_LEVEL_1080P60FPS = 20 , CODEC_CAPABILITY_LEVEL_4K60FPS = 30 }
enum | VIDEO_CODEC_TYPE { VIDEO_CODEC_NONE = 0 , VIDEO_CODEC_VP8 = 1 , VIDEO_CODEC_H264 = 2 , VIDEO_CODEC_H265 = 3 , VIDEO_CODEC_GENERIC = 6 , VIDEO_CODEC_GENERIC_H264 = 7 , VIDEO_CODEC_AV1 = 12 , VIDEO_CODEC_VP9 = 13 , VIDEO_CODEC_GENERIC_JPEG = 20 }
enum | CAMERA_FOCAL_LENGTH_TYPE { CAMERA_FOCAL_LENGTH_DEFAULT = 0 , CAMERA_FOCAL_LENGTH_WIDE_ANGLE = 1 , CAMERA_FOCAL_LENGTH_ULTRA_WIDE = 2 , CAMERA_FOCAL_LENGTH_TELEPHOTO = 3 }
enum | TCcMode { CC_ENABLED , CC_DISABLED }
enum | AUDIO_CODEC_TYPE { AUDIO_CODEC_OPUS = 1 , AUDIO_CODEC_PCMA = 3 , AUDIO_CODEC_PCMU = 4 , AUDIO_CODEC_G722 = 5 , AUDIO_CODEC_AACLC = 8 , AUDIO_CODEC_HEAAC = 9 , AUDIO_CODEC_JC1 = 10 , AUDIO_CODEC_HEAAC2 = 11 , AUDIO_CODEC_LPCNET = 12 , AUDIO_CODEC_OPUSMC = 13 }
enum | AUDIO_ENCODING_TYPE { AUDIO_ENCODING_TYPE_AAC_16000_LOW = 0x010101 , AUDIO_ENCODING_TYPE_AAC_16000_MEDIUM = 0x010102 , AUDIO_ENCODING_TYPE_AAC_32000_LOW = 0x010201 , AUDIO_ENCODING_TYPE_AAC_32000_MEDIUM = 0x010202 , AUDIO_ENCODING_TYPE_AAC_32000_HIGH = 0x010203 , AUDIO_ENCODING_TYPE_AAC_48000_MEDIUM = 0x010302 , AUDIO_ENCODING_TYPE_AAC_48000_HIGH = 0x010303 , AUDIO_ENCODING_TYPE_OPUS_16000_LOW = 0x020101 , AUDIO_ENCODING_TYPE_OPUS_16000_MEDIUM = 0x020102 , AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM = 0x020302 , AUDIO_ENCODING_TYPE_OPUS_48000_HIGH = 0x020303 }
enum | WATERMARK_FIT_MODE { FIT_MODE_COVER_POSITION = 0 , FIT_MODE_USE_IMAGE_RATIO = 1 }
enum | H264PacketizeMode { NonInterleaved = 0 , SingleNalUnit }
enum | VIDEO_STREAM_TYPE { VIDEO_STREAM_HIGH = 0 , VIDEO_STREAM_LOW = 1 , VIDEO_STREAM_LAYER_1 = 4 , VIDEO_STREAM_LAYER_2 = 5 , VIDEO_STREAM_LAYER_3 = 6 , VIDEO_STREAM_LAYER_4 = 7 , VIDEO_STREAM_LAYER_5 = 8 , VIDEO_STREAM_LAYER_6 = 9 }
enum | MAX_USER_ACCOUNT_LENGTH_TYPE { MAX_USER_ACCOUNT_LENGTH = 256 }
enum | COMPRESSION_PREFERENCE { PREFER_COMPRESSION_AUTO = -1 , PREFER_LOW_LATENCY = 0 , PREFER_QUALITY = 1 }
enum | ENCODING_PREFERENCE { PREFER_AUTO = -1 , PREFER_SOFTWARE = 0 , PREFER_HARDWARE = 1 }
enum | VIDEO_MIRROR_MODE_TYPE { VIDEO_MIRROR_MODE_AUTO = 0 , VIDEO_MIRROR_MODE_ENABLED = 1 , VIDEO_MIRROR_MODE_DISABLED = 2 }
enum | CAMERA_FORMAT_TYPE { CAMERA_FORMAT_NV12 , CAMERA_FORMAT_BGRA }
enum | VIDEO_MODULE_TYPE { VIDEO_MODULE_CAPTURER = 0 , VIDEO_MODULE_SOFTWARE_ENCODER = 1 , VIDEO_MODULE_HARDWARE_ENCODER = 2 , VIDEO_MODULE_SOFTWARE_DECODER = 3 , VIDEO_MODULE_HARDWARE_DECODER = 4 , VIDEO_MODULE_RENDERER = 5 }
enum | HDR_CAPABILITY { HDR_CAPABILITY_UNKNOWN = -1 , HDR_CAPABILITY_UNSUPPORTED = 0 , HDR_CAPABILITY_SUPPORTED = 1 }
enum | CODEC_CAP_MASK { CODEC_CAP_MASK_NONE = 0 , CODEC_CAP_MASK_HW_DEC = 1 << 0 , CODEC_CAP_MASK_HW_ENC = 1 << 1 , CODEC_CAP_MASK_SW_DEC = 1 << 2 , CODEC_CAP_MASK_SW_ENC = 1 << 3 }
enum | SIMULCAST_STREAM_MODE { AUTO_SIMULCAST_STREAM = -1 , DISABLE_SIMULCAST_STREAM = 0 , ENABLE_SIMULCAST_STREAM = 1 }
enum | WATERMARK_SOURCE_TYPE { IMAGE = 0 , BUFFER = 1 , LITERAL = 2 , TIMESTAMPS = 3 }
enum | MultipathMode { Duplicate = 0 , Dynamic }
enum | MultipathType { LAN = 0 , WIFI , Mobile , Unknown = 99 }
enum | CLIENT_ROLE_TYPE { CLIENT_ROLE_BROADCASTER = 1 , CLIENT_ROLE_AUDIENCE = 2 }
enum | QUALITY_ADAPT_INDICATION { ADAPT_NONE = 0 , ADAPT_UP_BANDWIDTH = 1 , ADAPT_DOWN_BANDWIDTH = 2 }
enum | AUDIENCE_LATENCY_LEVEL_TYPE { AUDIENCE_LATENCY_LEVEL_LOW_LATENCY = 1 , AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY = 2 }
enum | EXPERIENCE_QUALITY_TYPE { EXPERIENCE_QUALITY_GOOD = 0 , EXPERIENCE_QUALITY_BAD = 1 }
enum | EXPERIENCE_POOR_REASON { EXPERIENCE_REASON_NONE = 0 , REMOTE_NETWORK_QUALITY_POOR = 1 , LOCAL_NETWORK_QUALITY_POOR = 2 , WIRELESS_SIGNAL_POOR = 4 , WIFI_BLUETOOTH_COEXIST = 8 }
enum | AUDIO_AINS_MODE { AINS_MODE_BALANCED = 0 , AINS_MODE_AGGRESSIVE = 1 , AINS_MODE_ULTRALOWLATENCY = 2 }
enum | AUDIO_PROFILE_TYPE { AUDIO_PROFILE_DEFAULT = 0 , AUDIO_PROFILE_SPEECH_STANDARD = 1 , AUDIO_PROFILE_MUSIC_STANDARD = 2 , AUDIO_PROFILE_MUSIC_STANDARD_STEREO = 3 , AUDIO_PROFILE_MUSIC_HIGH_QUALITY = 4 , AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO = 5 , AUDIO_PROFILE_IOT = 6 , AUDIO_PROFILE_NUM = 7 }
enum | AUDIO_SCENARIO_TYPE { AUDIO_SCENARIO_DEFAULT = 0 , AUDIO_SCENARIO_GAME_STREAMING = 3 , AUDIO_SCENARIO_CHATROOM = 5 , AUDIO_SCENARIO_CHORUS = 7 , AUDIO_SCENARIO_MEETING = 8 , AUDIO_SCENARIO_AI_SERVER = 9 , AUDIO_SCENARIO_AI_CLIENT = 10 , AUDIO_SCENARIO_NUM = 11 }
enum | VIDEO_CONTENT_HINT { CONTENT_HINT_NONE , CONTENT_HINT_MOTION , CONTENT_HINT_DETAILS }
enum | SCREEN_SCENARIO_TYPE { SCREEN_SCENARIO_DOCUMENT = 1 , SCREEN_SCENARIO_GAMING = 2 , SCREEN_SCENARIO_VIDEO = 3 , SCREEN_SCENARIO_RDC = 4 }
enum | VIDEO_APPLICATION_SCENARIO_TYPE { APPLICATION_SCENARIO_GENERAL = 0 , APPLICATION_SCENARIO_MEETING = 1 , APPLICATION_SCENARIO_1V1 = 2 , APPLICATION_SCENARIO_LIVESHOW = 3 }
enum | VIDEO_QOE_PREFERENCE_TYPE { VIDEO_QOE_PREFERENCE_BALANCE = 1 , VIDEO_QOE_PREFERENCE_DELAY_FIRST = 2 , VIDEO_QOE_PREFERENCE_PICTURE_QUALITY_FIRST = 3 , VIDEO_QOE_PREFERENCE_FLUENCY_FIRST = 4 }
enum | CAPTURE_BRIGHTNESS_LEVEL_TYPE { CAPTURE_BRIGHTNESS_LEVEL_INVALID = -1 , CAPTURE_BRIGHTNESS_LEVEL_NORMAL = 0 , CAPTURE_BRIGHTNESS_LEVEL_BRIGHT = 1 , CAPTURE_BRIGHTNESS_LEVEL_DARK = 2 }
enum | CAMERA_STABILIZATION_MODE { CAMERA_STABILIZATION_MODE_OFF = -1 , CAMERA_STABILIZATION_MODE_AUTO = 0 , CAMERA_STABILIZATION_MODE_LEVEL_1 = 1 , CAMERA_STABILIZATION_MODE_LEVEL_2 = 2 , CAMERA_STABILIZATION_MODE_LEVEL_3 = 3 , CAMERA_STABILIZATION_MODE_MAX_LEVEL = CAMERA_STABILIZATION_MODE_LEVEL_3 }
enum | LOCAL_AUDIO_STREAM_STATE { LOCAL_AUDIO_STREAM_STATE_STOPPED = 0 , LOCAL_AUDIO_STREAM_STATE_RECORDING = 1 , LOCAL_AUDIO_STREAM_STATE_ENCODING = 2 , LOCAL_AUDIO_STREAM_STATE_FAILED = 3 }
enum | LOCAL_AUDIO_STREAM_REASON { LOCAL_AUDIO_STREAM_REASON_OK = 0 , LOCAL_AUDIO_STREAM_REASON_FAILURE = 1 , LOCAL_AUDIO_STREAM_REASON_DEVICE_NO_PERMISSION = 2 , LOCAL_AUDIO_STREAM_REASON_DEVICE_BUSY = 3 , LOCAL_AUDIO_STREAM_REASON_RECORD_FAILURE = 4 , LOCAL_AUDIO_STREAM_REASON_ENCODE_FAILURE = 5 , LOCAL_AUDIO_STREAM_REASON_NO_RECORDING_DEVICE = 6 , LOCAL_AUDIO_STREAM_REASON_NO_PLAYOUT_DEVICE = 7 , LOCAL_AUDIO_STREAM_REASON_INTERRUPTED = 8 , LOCAL_AUDIO_STREAM_REASON_RECORD_INVALID_ID = 9 , LOCAL_AUDIO_STREAM_REASON_PLAYOUT_INVALID_ID = 10 }
enum | LOCAL_VIDEO_STREAM_STATE { LOCAL_VIDEO_STREAM_STATE_STOPPED = 0 , LOCAL_VIDEO_STREAM_STATE_CAPTURING = 1 , LOCAL_VIDEO_STREAM_STATE_ENCODING = 2 , LOCAL_VIDEO_STREAM_STATE_FAILED = 3 }
enum | LOCAL_VIDEO_EVENT_TYPE { LOCAL_VIDEO_EVENT_TYPE_SCREEN_CAPTURE_WINDOW_HIDDEN = 1 , LOCAL_VIDEO_EVENT_TYPE_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN = 2 , LOCAL_VIDEO_EVENT_TYPE_SCREEN_CAPTURE_STOPPED_BY_USER = 3 , LOCAL_VIDEO_EVENT_TYPE_SCREEN_CAPTURE_SYSTEM_INTERNAL_ERROR = 4 }
enum | LOCAL_VIDEO_STREAM_REASON { LOCAL_VIDEO_STREAM_REASON_OK = 0 , LOCAL_VIDEO_STREAM_REASON_FAILURE = 1 , LOCAL_VIDEO_STREAM_REASON_DEVICE_NO_PERMISSION = 2 , LOCAL_VIDEO_STREAM_REASON_DEVICE_BUSY = 3 , LOCAL_VIDEO_STREAM_REASON_CAPTURE_FAILURE = 4 , LOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT = 5 , LOCAL_VIDEO_STREAM_REASON_CAPTURE_INBACKGROUND = 6 , LOCAL_VIDEO_STREAM_REASON_CAPTURE_MULTIPLE_FOREGROUND_APPS = 7 , LOCAL_VIDEO_STREAM_REASON_DEVICE_NOT_FOUND = 8 , LOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTED = 9 , LOCAL_VIDEO_STREAM_REASON_DEVICE_INVALID_ID = 10 , LOCAL_VIDEO_STREAM_REASON_DEVICE_INTERRUPT = 14 , LOCAL_VIDEO_STREAM_REASON_DEVICE_FATAL_ERROR = 15 , LOCAL_VIDEO_STREAM_REASON_DEVICE_SYSTEM_PRESSURE = 101 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_MINIMIZED = 11 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_CLOSED = 12 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_OCCLUDED = 13 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_NOT_SUPPORTED = 20 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_FAILURE = 21 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_NO_PERMISSION = 22 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_AUTO_FALLBACK = 24 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_HIDDEN = 25 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN = 26 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED = 27 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_PAUSED = 28 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_RESUMED = 29 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTED = 30 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_STOPPED_BY_USER = 31 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_INTERRUPTED_BY_OTHER = 32 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_STOPPED_BY_CALL = 33 , LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_EXCLUDE_WINDOW_FAILED = 34 }
enum | REMOTE_AUDIO_STATE { REMOTE_AUDIO_STATE_STOPPED , REMOTE_AUDIO_STATE_STARTING = 1 , REMOTE_AUDIO_STATE_DECODING , REMOTE_AUDIO_STATE_FROZEN = 3 , REMOTE_AUDIO_STATE_FAILED = 4 }
enum | REMOTE_AUDIO_STATE_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 , REMOTE_AUDIO_REASON_NO_PACKET_RECEIVE = 8 , REMOTE_AUDIO_REASON_LOCAL_PLAY_FAILED = 9 }
enum | REMOTE_VIDEO_STATE { REMOTE_VIDEO_STATE_STOPPED = 0 , REMOTE_VIDEO_STATE_STARTING = 1 , REMOTE_VIDEO_STATE_DECODING = 2 , REMOTE_VIDEO_STATE_FROZEN = 3 , REMOTE_VIDEO_STATE_FAILED = 4 }
enum | REMOTE_VIDEO_STATE_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 , REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_LOW = 10 , REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_HIGH = 11 , REMOTE_VIDEO_STATE_REASON_SDK_IN_BACKGROUND = 12 , REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT = 13 }
enum | REMOTE_USER_STATE { USER_STATE_MUTE_AUDIO = (1 << 0) , USER_STATE_MUTE_VIDEO = (1 << 1) , USER_STATE_ENABLE_VIDEO = (1 << 4) , USER_STATE_ENABLE_LOCAL_VIDEO = (1 << 8) }
enum | REMOTE_VIDEO_DOWNSCALE_LEVEL { REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE , REMOTE_VIDEO_DOWNSCALE_LEVEL_1 , REMOTE_VIDEO_DOWNSCALE_LEVEL_2 , REMOTE_VIDEO_DOWNSCALE_LEVEL_3 , REMOTE_VIDEO_DOWNSCALE_LEVEL_4 }
enum | AUDIO_SAMPLE_RATE_TYPE { AUDIO_SAMPLE_RATE_32000 = 32000 , AUDIO_SAMPLE_RATE_44100 = 44100 , AUDIO_SAMPLE_RATE_48000 = 48000 }
enum | VIDEO_CODEC_TYPE_FOR_STREAM { VIDEO_CODEC_H264_FOR_STREAM = 1 , VIDEO_CODEC_H265_FOR_STREAM = 2 }
enum | VIDEO_CODEC_PROFILE_TYPE { VIDEO_CODEC_PROFILE_BASELINE = 66 , VIDEO_CODEC_PROFILE_MAIN = 77 , VIDEO_CODEC_PROFILE_HIGH = 100 }
enum | AUDIO_CODEC_PROFILE_TYPE { AUDIO_CODEC_PROFILE_LC_AAC = 0 , AUDIO_CODEC_PROFILE_HE_AAC = 1 , AUDIO_CODEC_PROFILE_HE_AAC_V2 = 2 }
enum | RTMP_STREAM_PUBLISH_STATE { RTMP_STREAM_PUBLISH_STATE_IDLE = 0 , RTMP_STREAM_PUBLISH_STATE_CONNECTING = 1 , RTMP_STREAM_PUBLISH_STATE_RUNNING = 2 , RTMP_STREAM_PUBLISH_STATE_RECOVERING = 3 , RTMP_STREAM_PUBLISH_STATE_FAILURE = 4 , RTMP_STREAM_PUBLISH_STATE_DISCONNECTING = 5 }
enum | RTMP_STREAM_PUBLISH_REASON { RTMP_STREAM_PUBLISH_REASON_OK = 0 , RTMP_STREAM_PUBLISH_REASON_INVALID_ARGUMENT = 1 , RTMP_STREAM_PUBLISH_REASON_ENCRYPTED_STREAM_NOT_ALLOWED = 2 , RTMP_STREAM_PUBLISH_REASON_CONNECTION_TIMEOUT = 3 , RTMP_STREAM_PUBLISH_REASON_INTERNAL_SERVER_ERROR = 4 , RTMP_STREAM_PUBLISH_REASON_RTMP_SERVER_ERROR = 5 , RTMP_STREAM_PUBLISH_REASON_TOO_OFTEN = 6 , RTMP_STREAM_PUBLISH_REASON_REACH_LIMIT = 7 , RTMP_STREAM_PUBLISH_REASON_NOT_AUTHORIZED = 8 , RTMP_STREAM_PUBLISH_REASON_STREAM_NOT_FOUND = 9 , RTMP_STREAM_PUBLISH_REASON_FORMAT_NOT_SUPPORTED = 10 , RTMP_STREAM_PUBLISH_REASON_NOT_BROADCASTER , RTMP_STREAM_PUBLISH_REASON_TRANSCODING_NO_MIX_STREAM , RTMP_STREAM_PUBLISH_REASON_NET_DOWN = 14 , RTMP_STREAM_PUBLISH_REASON_INVALID_APPID , RTMP_STREAM_PUBLISH_REASON_INVALID_PRIVILEGE = 16 , RTMP_STREAM_UNPUBLISH_REASON_OK = 100 }
enum | RTMP_STREAMING_EVENT { RTMP_STREAMING_EVENT_FAILED_LOAD_IMAGE = 1 , RTMP_STREAMING_EVENT_URL_ALREADY_IN_USE = 2 , RTMP_STREAMING_EVENT_ADVANCED_FEATURE_NOT_SUPPORT = 3 , RTMP_STREAMING_EVENT_REQUEST_TOO_OFTEN = 4 }
enum | CONNECTION_STATE_TYPE { CONNECTION_STATE_DISCONNECTED = 1 , CONNECTION_STATE_CONNECTING = 2 , CONNECTION_STATE_CONNECTED = 3 , CONNECTION_STATE_RECONNECTING = 4 , CONNECTION_STATE_FAILED = 5 }
enum | VIDEO_TRANSCODER_ERROR { VT_ERR_VIDEO_SOURCE_NOT_READY = 1 , VT_ERR_INVALID_VIDEO_SOURCE_TYPE = 2 , VT_ERR_INVALID_IMAGE_PATH = 3 , VT_ERR_UNSUPPORT_IMAGE_FORMAT = 4 , VT_ERR_INVALID_LAYOUT = 5 , VT_ERR_INTERNAL = 20 }
enum | LASTMILE_PROBE_RESULT_STATE { LASTMILE_PROBE_RESULT_COMPLETE = 1 , LASTMILE_PROBE_RESULT_INCOMPLETE_NO_BWE = 2 , LASTMILE_PROBE_RESULT_UNAVAILABLE = 3 }
enum | CONNECTION_CHANGED_REASON_TYPE { 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 , CONNECTION_CHANGED_INVALID_CHANNEL_NAME = 7 , CONNECTION_CHANGED_INVALID_TOKEN = 8 , CONNECTION_CHANGED_TOKEN_EXPIRED = 9 , CONNECTION_CHANGED_REJECTED_BY_SERVER = 10 , CONNECTION_CHANGED_SETTING_PROXY_SERVER = 11 , CONNECTION_CHANGED_RENEW_TOKEN = 12 , CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED = 13 , CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT = 14 , CONNECTION_CHANGED_REJOIN_SUCCESS = 15 , CONNECTION_CHANGED_LOST = 16 , CONNECTION_CHANGED_ECHO_TEST = 17 , CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED_BY_USER = 18 , CONNECTION_CHANGED_SAME_UID_LOGIN = 19 , CONNECTION_CHANGED_TOO_MANY_BROADCASTERS = 20 , CONNECTION_CHANGED_LICENSE_VALIDATION_FAILURE = 21 , CONNECTION_CHANGED_CERTIFICATION_VERYFY_FAILURE = 22 , CONNECTION_CHANGED_STREAM_CHANNEL_NOT_AVAILABLE = 23 , CONNECTION_CHANGED_INCONSISTENT_APPID = 24 }
enum | CLIENT_ROLE_CHANGE_FAILED_REASON { CLIENT_ROLE_CHANGE_FAILED_TOO_MANY_BROADCASTERS = 1 , CLIENT_ROLE_CHANGE_FAILED_NOT_AUTHORIZED = 2 , __deprecated = 0 , __deprecated = 0 }
enum | NETWORK_TYPE { NETWORK_TYPE_UNKNOWN = -1 , NETWORK_TYPE_DISCONNECTED = 0 , NETWORK_TYPE_LAN = 1 , NETWORK_TYPE_WIFI = 2 , NETWORK_TYPE_MOBILE_2G = 3 , NETWORK_TYPE_MOBILE_3G = 4 , NETWORK_TYPE_MOBILE_4G = 5 , NETWORK_TYPE_MOBILE_5G = 6 }
enum | VIDEO_VIEW_SETUP_MODE { VIDEO_VIEW_SETUP_REPLACE = 0 , VIDEO_VIEW_SETUP_ADD = 1 , VIDEO_VIEW_SETUP_REMOVE = 2 }
enum | AUDIO_TRACK_TYPE { AUDIO_TRACK_INVALID = -1 , AUDIO_TRACK_MIXABLE = 0 , AUDIO_TRACK_DIRECT = 1 }
enum | VOICE_BEAUTIFIER_PRESET { VOICE_BEAUTIFIER_OFF = 0x00000000 , CHAT_BEAUTIFIER_MAGNETIC = 0x01010100 , CHAT_BEAUTIFIER_FRESH = 0x01010200 , CHAT_BEAUTIFIER_VITALITY = 0x01010300 , SINGING_BEAUTIFIER = 0x01020100 , TIMBRE_TRANSFORMATION_VIGOROUS = 0x01030100 , TIMBRE_TRANSFORMATION_DEEP = 0x01030200 , TIMBRE_TRANSFORMATION_MELLOW = 0x01030300 , TIMBRE_TRANSFORMATION_FALSETTO = 0x01030400 , TIMBRE_TRANSFORMATION_FULL = 0x01030500 , TIMBRE_TRANSFORMATION_CLEAR = 0x01030600 , TIMBRE_TRANSFORMATION_RESOUNDING = 0x01030700 , TIMBRE_TRANSFORMATION_RINGING = 0x01030800 , ULTRA_HIGH_QUALITY_VOICE = 0x01040100 }
enum | AUDIO_EFFECT_PRESET { AUDIO_EFFECT_OFF = 0x00000000 , ROOM_ACOUSTICS_KTV = 0x02010100 , ROOM_ACOUSTICS_VOCAL_CONCERT = 0x02010200 , ROOM_ACOUSTICS_STUDIO = 0x02010300 , ROOM_ACOUSTICS_PHONOGRAPH = 0x02010400 , ROOM_ACOUSTICS_VIRTUAL_STEREO = 0x02010500 , ROOM_ACOUSTICS_SPACIAL = 0x02010600 , ROOM_ACOUSTICS_ETHEREAL = 0x02010700 , ROOM_ACOUSTICS_3D_VOICE = 0x02010800 , ROOM_ACOUSTICS_VIRTUAL_SURROUND_SOUND = 0x02010900 , ROOM_ACOUSTICS_CHORUS = 0x02010D00 , VOICE_CHANGER_EFFECT_UNCLE = 0x02020100 , VOICE_CHANGER_EFFECT_OLDMAN = 0x02020200 , VOICE_CHANGER_EFFECT_BOY = 0x02020300 , VOICE_CHANGER_EFFECT_SISTER = 0x02020400 , VOICE_CHANGER_EFFECT_GIRL = 0x02020500 , VOICE_CHANGER_EFFECT_PIGKING = 0x02020600 , VOICE_CHANGER_EFFECT_HULK = 0x02020700 , STYLE_TRANSFORMATION_RNB = 0x02030100 , STYLE_TRANSFORMATION_POPULAR = 0x02030200 , PITCH_CORRECTION = 0x02040100 }
enum | VOICE_CONVERSION_PRESET { VOICE_CONVERSION_OFF = 0x00000000 , VOICE_CHANGER_NEUTRAL = 0x03010100 , VOICE_CHANGER_SWEET = 0x03010200 , VOICE_CHANGER_SOLID = 0x03010300 , VOICE_CHANGER_BASS = 0x03010400 , VOICE_CHANGER_CARTOON = 0x03010500 , VOICE_CHANGER_CHILDLIKE = 0x03010600 , VOICE_CHANGER_PHONE_OPERATOR = 0x03010700 , VOICE_CHANGER_MONSTER = 0x03010800 , VOICE_CHANGER_TRANSFORMERS = 0x03010900 , VOICE_CHANGER_GROOT = 0x03010A00 , VOICE_CHANGER_DARTH_VADER = 0x03010B00 , VOICE_CHANGER_IRON_LADY = 0x03010C00 , VOICE_CHANGER_SHIN_CHAN = 0x03010D00 , VOICE_CHANGER_GIRLISH_MAN = 0x03010E00 , VOICE_CHANGER_CHIPMUNK = 0x03010F00 }
enum | HEADPHONE_EQUALIZER_PRESET { HEADPHONE_EQUALIZER_OFF = 0x00000000 , HEADPHONE_EQUALIZER_OVEREAR = 0x04000001 , HEADPHONE_EQUALIZER_INEAR = 0x04000002 }
enum | VOICE_AI_TUNER_TYPE { VOICE_AI_TUNER_MATURE_MALE , VOICE_AI_TUNER_FRESH_MALE , VOICE_AI_TUNER_ELEGANT_FEMALE , VOICE_AI_TUNER_SWEET_FEMALE , VOICE_AI_TUNER_WARM_MALE_SINGING , VOICE_AI_TUNER_GENTLE_FEMALE_SINGING , VOICE_AI_TUNER_HUSKY_MALE_SINGING , VOICE_AI_TUNER_WARM_ELEGANT_FEMALE_SINGING , VOICE_AI_TUNER_POWERFUL_MALE_SINGING , VOICE_AI_TUNER_DREAMY_FEMALE_SINGING }
enum | AUDIO_RECORDING_QUALITY_TYPE { AUDIO_RECORDING_QUALITY_LOW = 0 , AUDIO_RECORDING_QUALITY_MEDIUM = 1 , AUDIO_RECORDING_QUALITY_HIGH = 2 , AUDIO_RECORDING_QUALITY_ULTRA_HIGH = 3 }
enum | AUDIO_FILE_RECORDING_TYPE { AUDIO_FILE_RECORDING_MIC = 1 , AUDIO_FILE_RECORDING_PLAYBACK = 2 , AUDIO_FILE_RECORDING_MIXED = 3 }
enum | AUDIO_ENCODED_FRAME_OBSERVER_POSITION { AUDIO_ENCODED_FRAME_OBSERVER_POSITION_RECORD = 1 , AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK = 2 , AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED = 3 }
enum | AREA_CODE { AREA_CODE_CN = 0x00000001 , AREA_CODE_NA = 0x00000002 , AREA_CODE_EU = 0x00000004 , AREA_CODE_AS = 0x00000008 , AREA_CODE_JP = 0x00000010 , AREA_CODE_IN = 0x00000020 , AREA_CODE_GLOB = (0xFFFFFFFF) }
enum | AREA_CODE_EX { AREA_CODE_OC = 0x00000040 , AREA_CODE_SA = 0x00000080 , AREA_CODE_AF = 0x00000100 , AREA_CODE_KR = 0x00000200 , AREA_CODE_HKMC = 0x00000400 , AREA_CODE_US = 0x00000800 , AREA_CODE_RU = 0x00001000 , AREA_CODE_OVS = 0xFFFFFFFE }
enum | CHANNEL_MEDIA_RELAY_ERROR { RELAY_OK = 0 , RELAY_ERROR_SERVER_ERROR_RESPONSE = 1 , RELAY_ERROR_SERVER_NO_RESPONSE = 2 , RELAY_ERROR_NO_RESOURCE_AVAILABLE = 3 , 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 , RELAY_ERROR_INTERNAL_ERROR = 9 , RELAY_ERROR_SRC_TOKEN_EXPIRED = 10 , RELAY_ERROR_DEST_TOKEN_EXPIRED = 11 }
enum | CHANNEL_MEDIA_RELAY_STATE { RELAY_STATE_IDLE = 0 , RELAY_STATE_CONNECTING = 1 , RELAY_STATE_RUNNING = 2 , RELAY_STATE_FAILURE = 3 }
enum | ENCRYPTION_MODE { AES_128_XTS = 1 , AES_128_ECB = 2 , AES_256_XTS = 3 , SM4_128_ECB = 4 , AES_128_GCM = 5 , AES_256_GCM = 6 , AES_128_GCM2 = 7 , AES_256_GCM2 = 8 , MODE_END }
enum | ENCRYPTION_ERROR_TYPE { ENCRYPTION_ERROR_INTERNAL_FAILURE = 0 , ENCRYPTION_ERROR_DECRYPTION_FAILURE = 1 , ENCRYPTION_ERROR_ENCRYPTION_FAILURE = 2 , ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILURE = 3 , ENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE = 4 }
enum | UPLOAD_ERROR_REASON { UPLOAD_SUCCESS = 0 , UPLOAD_NET_ERROR = 1 , UPLOAD_SERVER_ERROR = 2 }
enum | RENEW_TOKEN_ERROR_CODE { RENEW_TOKEN_SUCCESS = 0 , RENEW_TOKEN_FAILURE = 1 , RENEW_TOKEN_TOKEN_EXPIRED = 2 , RENEW_TOKEN_INVALID_TOKEN = 3 , RENEW_TOKEN_INVALID_CHANNEL_NAME = 4 , RENEW_TOKEN_INCONSISTENT_APPID = 5 , RENEW_TOKEN_CANCELED_BY_NEW_REQUEST = 6 }
enum | PERMISSION_TYPE { RECORD_AUDIO = 0 , CAMERA = 1 , SCREEN_CAPTURE = 2 }
enum | STREAM_SUBSCRIBE_STATE { SUB_STATE_IDLE = 0 , SUB_STATE_NO_SUBSCRIBED = 1 , SUB_STATE_SUBSCRIBING = 2 , SUB_STATE_SUBSCRIBED = 3 }
enum | STREAM_PUBLISH_STATE { PUB_STATE_IDLE = 0 , PUB_STATE_NO_PUBLISHED = 1 , PUB_STATE_PUBLISHING = 2 , PUB_STATE_PUBLISHED = 3 }
enum | EAR_MONITORING_FILTER_TYPE { EAR_MONITORING_FILTER_NONE = (1 << 0) , EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS = (1 << 1) , EAR_MONITORING_FILTER_NOISE_SUPPRESSION = (1 << 2) , EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTER = (1 << 15) }
enum | THREAD_PRIORITY_TYPE { LOWEST = 0 , LOW = 1 , NORMAL = 2 , HIGH = 3 , HIGHEST = 4 , CRITICAL = 5 }
enum | MEDIA_TRACE_EVENT { MEDIA_TRACE_EVENT_VIDEO_RENDERED = 0 , MEDIA_TRACE_EVENT_VIDEO_DECODED }
enum | CONFIG_FETCH_TYPE { CONFIG_FETCH_TYPE_INITIALIZE = 1 , CONFIG_FETCH_TYPE_JOIN_CHANNEL = 2 }
enum | LOCAL_PROXY_MODE { ConnectivityFirst = 0 , LocalOnly = 1 }
enum | RecorderStreamType { RTC , PREVIEW }
enum | RdtStreamType { RDT_STREAM_CMD , RDT_STREAM_DATA , RDT_STREAM_COUNT }
enum | RdtState { RDT_STATE_CLOSED , RDT_STATE_OPENED , RDT_STATE_BLOCKED , RDT_STATE_PENDING , RDT_STATE_BROKEN }
enum | VIDEO_SOURCE_TYPE { VIDEO_SOURCE_CAMERA_PRIMARY = 0 , VIDEO_SOURCE_CAMERA = VIDEO_SOURCE_CAMERA_PRIMARY , VIDEO_SOURCE_CAMERA_SECONDARY = 1 , VIDEO_SOURCE_SCREEN_PRIMARY = 2 , VIDEO_SOURCE_SCREEN = VIDEO_SOURCE_SCREEN_PRIMARY , VIDEO_SOURCE_SCREEN_SECONDARY = 3 , VIDEO_SOURCE_CUSTOM = 4 , VIDEO_SOURCE_MEDIA_PLAYER = 5 , VIDEO_SOURCE_RTC_IMAGE_PNG = 6 , VIDEO_SOURCE_RTC_IMAGE_JPEG = 7 , VIDEO_SOURCE_RTC_IMAGE_GIF = 8 , VIDEO_SOURCE_REMOTE = 9 , VIDEO_SOURCE_TRANSCODED = 10 , VIDEO_SOURCE_CAMERA_THIRD = 11 , VIDEO_SOURCE_CAMERA_FOURTH = 12 , VIDEO_SOURCE_SCREEN_THIRD = 13 , VIDEO_SOURCE_SCREEN_FOURTH = 14 , VIDEO_SOURCE_SPEECH_DRIVEN = 15 , VIDEO_SOURCE_UNKNOWN = 100 }
enum | AUDIO_SOURCE_TYPE { AUDIO_SOURCE_MICROPHONE = 0 , AUDIO_SOURCE_CUSTOM = 1 , AUDIO_SOURCE_MEDIA_PLAYER = 2 , AUDIO_SOURCE_LOOPBACK_RECORDING = 3 , AUDIO_SOURCE_MIXED_STREAM = 4 , AUDIO_SOURCE_REMOTE_USER = 5 , AUDIO_SOURCE_REMOTE_CHANNEL = 6 , AUDIO_SOURCE_UNKNOWN = 100 }
enum | AudioRoute { ROUTE_DEFAULT = -1 , ROUTE_HEADSET = 0 , ROUTE_EARPIECE = 1 , ROUTE_HEADSETNOMIC = 2 , ROUTE_SPEAKERPHONE = 3 , ROUTE_LOUDSPEAKER = 4 , ROUTE_BLUETOOTH_DEVICE_HFP = 5 , ROUTE_USB = 6 , ROUTE_HDMI = 7 , ROUTE_DISPLAYPORT = 8 , ROUTE_AIRPLAY = 9 , ROUTE_BLUETOOTH_DEVICE_A2DP = 10 }
enum | BYTES_PER_SAMPLE { TWO_BYTES_PER_SAMPLE = 2 }
enum | RAW_AUDIO_FRAME_OP_MODE_TYPE { RAW_AUDIO_FRAME_OP_MODE_READ_ONLY = 0 , RAW_AUDIO_FRAME_OP_MODE_READ_WRITE = 2 }
enum | STREAMING_SRC_ERR { STREAMING_SRC_ERR_NONE = 0 , STREAMING_SRC_ERR_UNKNOWN = 1 , STREAMING_SRC_ERR_INVALID_PARAM = 2 , STREAMING_SRC_ERR_BAD_STATE = 3 , STREAMING_SRC_ERR_NO_MEM = 4 , STREAMING_SRC_ERR_BUFFER_OVERFLOW = 5 , STREAMING_SRC_ERR_BUFFER_UNDERFLOW = 6 , STREAMING_SRC_ERR_NOT_FOUND = 7 , STREAMING_SRC_ERR_TIMEOUT = 8 , STREAMING_SRC_ERR_EXPIRED = 9 , STREAMING_SRC_ERR_UNSUPPORTED = 10 , STREAMING_SRC_ERR_NOT_EXIST = 11 , STREAMING_SRC_ERR_EXIST = 12 , STREAMING_SRC_ERR_OPEN = 13 , STREAMING_SRC_ERR_CLOSE = 14 , STREAMING_SRC_ERR_READ = 15 , STREAMING_SRC_ERR_WRITE = 16 , STREAMING_SRC_ERR_SEEK = 17 , STREAMING_SRC_ERR_EOF = 18 , STREAMING_SRC_ERR_CODECOPEN = 19 , STREAMING_SRC_ERR_CODECCLOSE = 20 , STREAMING_SRC_ERR_CODECPROC = 21 }
enum | STREAMING_SRC_STATE { STREAMING_SRC_STATE_CLOSED = 0 , STREAMING_SRC_STATE_OPENING = 1 , STREAMING_SRC_STATE_IDLE = 2 , STREAMING_SRC_STATE_PLAYING = 3 , STREAMING_SRC_STATE_SEEKING = 4 , STREAMING_SRC_STATE_EOF = 5 , STREAMING_SRC_STATE_ERROR = 6 }
enum | H265_TRANSCODE_RESULT { H265_TRANSCODE_RESULT_UNKNOWN = -1 , H265_TRANSCODE_RESULT_SUCCESS = 0 , H265_TRANSCODE_RESULT_REQUEST_INVALID = 1 , H265_TRANSCODE_RESULT_UNAUTHORIZED = 2 , H265_TRANSCODE_RESULT_TOKEN_EXPIRED = 3 , H265_TRANSCODE_RESULT_FORBIDDEN = 4 , H265_TRANSCODE_RESULT_NOT_FOUND = 5 , H265_TRANSCODE_RESULT_CONFLICTED = 6 , H265_TRANSCODE_RESULT_NOT_SUPPORTED = 7 , H265_TRANSCODE_RESULT_TOO_OFTEN = 8 , H265_TRANSCODE_RESULT_SERVER_INTERNAL_ERROR = 9 , H265_TRANSCODE_RESULT_SERVICE_UNAVAILABLE = 10 }
enum | MEDIA_DEVICE_TYPE { UNKNOWN_AUDIO_DEVICE = -1 , AUDIO_PLAYOUT_DEVICE = 0 , AUDIO_RECORDING_DEVICE = 1 , VIDEO_RENDER_DEVICE = 2 , VIDEO_CAPTURE_DEVICE = 3 , AUDIO_APPLICATION_PLAYOUT_DEVICE = 4 , AUDIO_VIRTUAL_PLAYOUT_DEVICE = 5 , AUDIO_VIRTUAL_RECORDING_DEVICE = 6 }
enum | AUDIO_MIXING_STATE_TYPE { AUDIO_MIXING_STATE_PLAYING = 710 , AUDIO_MIXING_STATE_PAUSED = 711 , AUDIO_MIXING_STATE_STOPPED = 713 , AUDIO_MIXING_STATE_FAILED = 714 }
enum | AUDIO_MIXING_REASON_TYPE { AUDIO_MIXING_REASON_CAN_NOT_OPEN = 701 , AUDIO_MIXING_REASON_TOO_FREQUENT_CALL = 702 , AUDIO_MIXING_REASON_INTERRUPTED_EOF = 703 , AUDIO_MIXING_REASON_ONE_LOOP_COMPLETED = 721 , AUDIO_MIXING_REASON_ALL_LOOPS_COMPLETED = 723 , AUDIO_MIXING_REASON_STOPPED_BY_USER = 724 , AUDIO_MIXING_REASON_RESUMED_BY_USER = 726 , AUDIO_MIXING_REASON_OK = 0 }
enum | INJECT_STREAM_STATUS { INJECT_STREAM_STATUS_START_SUCCESS = 0 , INJECT_STREAM_STATUS_START_ALREADY_EXISTS = 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 }
enum | AUDIO_EQUALIZATION_BAND_FREQUENCY { AUDIO_EQUALIZATION_BAND_31 = 0 , AUDIO_EQUALIZATION_BAND_62 = 1 , AUDIO_EQUALIZATION_BAND_125 = 2 , AUDIO_EQUALIZATION_BAND_250 = 3 , AUDIO_EQUALIZATION_BAND_500 = 4 , AUDIO_EQUALIZATION_BAND_1K = 5 , AUDIO_EQUALIZATION_BAND_2K = 6 , AUDIO_EQUALIZATION_BAND_4K = 7 , AUDIO_EQUALIZATION_BAND_8K = 8 , AUDIO_EQUALIZATION_BAND_16K = 9 }
enum | AUDIO_REVERB_TYPE { AUDIO_REVERB_DRY_LEVEL = 0 , AUDIO_REVERB_WET_LEVEL = 1 , AUDIO_REVERB_ROOM_SIZE = 2 , AUDIO_REVERB_WET_DELAY = 3 , AUDIO_REVERB_STRENGTH = 4 }
enum | STREAM_FALLBACK_OPTIONS { STREAM_FALLBACK_OPTION_DISABLED = 0 , STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW = 1 , STREAM_FALLBACK_OPTION_AUDIO_ONLY = 2 , STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_1 = 3 , STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_2 = 4 , STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_3 = 5 , STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_4 = 6 , STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_5 = 7 , STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_6 = 8 }
enum | PRIORITY_TYPE { PRIORITY_HIGH = 50 , PRIORITY_NORMAL = 100 }
enum | RTMP_STREAM_LIFE_CYCLE_TYPE { RTMP_STREAM_LIFE_CYCLE_BIND2CHANNEL = 1 , RTMP_STREAM_LIFE_CYCLE_BIND2OWNER = 2 }
enum | CAMERA_DIRECTION { CAMERA_REAR = 0 , CAMERA_FRONT = 1 }
enum | CLOUD_PROXY_TYPE { NONE_PROXY = 0 , UDP_PROXY = 1 }
enum | ScreenCaptureSourceType { ScreenCaptureSourceType_Unknown = -1 , ScreenCaptureSourceType_Window = 0 , ScreenCaptureSourceType_Screen = 1 , ScreenCaptureSourceType_Custom = 2 }
enum | PROXY_TYPE { NONE_PROXY_TYPE = 0 , UDP_PROXY_TYPE = 1 , TCP_PROXY_TYPE = 2 , LOCAL_PROXY_TYPE = 3 , TCP_PROXY_AUTO_FALLBACK_TYPE = 4 , HTTP_PROXY_TYPE = 5 , HTTPS_PROXY_TYPE = 6 }
enum | FeatureType { VIDEO_VIRTUAL_BACKGROUND = 1 , VIDEO_BEAUTY_EFFECT = 2 }
enum | DIRECT_CDN_STREAMING_REASON { DIRECT_CDN_STREAMING_REASON_OK = 0 , DIRECT_CDN_STREAMING_REASON_FAILED = 1 , DIRECT_CDN_STREAMING_REASON_AUDIO_PUBLICATION = 2 , DIRECT_CDN_STREAMING_REASON_VIDEO_PUBLICATION = 3 , DIRECT_CDN_STREAMING_REASON_NET_CONNECT = 4 , DIRECT_CDN_STREAMING_REASON_BAD_NAME = 5 }
enum | DIRECT_CDN_STREAMING_STATE { DIRECT_CDN_STREAMING_STATE_IDLE = 0 , DIRECT_CDN_STREAMING_STATE_RUNNING = 1 , DIRECT_CDN_STREAMING_STATE_STOPPED = 2 , DIRECT_CDN_STREAMING_STATE_FAILED = 3 , DIRECT_CDN_STREAMING_STATE_RECOVERING = 4 }
enum | QUALITY_REPORT_FORMAT_TYPE { QUALITY_REPORT_JSON = 0 , QUALITY_REPORT_HTML = 1 }
enum | MEDIA_DEVICE_STATE_TYPE { MEDIA_DEVICE_STATE_IDLE = 0 , MEDIA_DEVICE_STATE_ACTIVE = 1 , MEDIA_DEVICE_STATE_DISABLED = 2 , MEDIA_DEVICE_STATE_PLUGGED_IN = 3 , MEDIA_DEVICE_STATE_NOT_PRESENT = 4 , MEDIA_DEVICE_STATE_UNPLUGGED = 8 }
enum | VIDEO_PROFILE_TYPE { VIDEO_PROFILE_LANDSCAPE_120P = 0 , VIDEO_PROFILE_LANDSCAPE_120P_3 = 2 , VIDEO_PROFILE_LANDSCAPE_180P = 10 , VIDEO_PROFILE_LANDSCAPE_180P_3 = 12 , VIDEO_PROFILE_LANDSCAPE_180P_4 = 13 , VIDEO_PROFILE_LANDSCAPE_240P = 20 , VIDEO_PROFILE_LANDSCAPE_240P_3 = 22 , VIDEO_PROFILE_LANDSCAPE_240P_4 = 23 , VIDEO_PROFILE_LANDSCAPE_360P = 30 , VIDEO_PROFILE_LANDSCAPE_360P_3 = 32 , VIDEO_PROFILE_LANDSCAPE_360P_4 = 33 , VIDEO_PROFILE_LANDSCAPE_360P_6 = 35 , VIDEO_PROFILE_LANDSCAPE_360P_7 = 36 , VIDEO_PROFILE_LANDSCAPE_360P_8 = 37 , VIDEO_PROFILE_LANDSCAPE_360P_9 = 38 , VIDEO_PROFILE_LANDSCAPE_360P_10 = 39 , VIDEO_PROFILE_LANDSCAPE_360P_11 = 100 , VIDEO_PROFILE_LANDSCAPE_480P = 40 , VIDEO_PROFILE_LANDSCAPE_480P_3 = 42 , VIDEO_PROFILE_LANDSCAPE_480P_4 = 43 , VIDEO_PROFILE_LANDSCAPE_480P_6 = 45 , VIDEO_PROFILE_LANDSCAPE_480P_8 = 47 , VIDEO_PROFILE_LANDSCAPE_480P_9 = 48 , VIDEO_PROFILE_LANDSCAPE_480P_10 = 49 , VIDEO_PROFILE_LANDSCAPE_720P = 50 , VIDEO_PROFILE_LANDSCAPE_720P_3 = 52 , VIDEO_PROFILE_LANDSCAPE_720P_5 = 54 , VIDEO_PROFILE_LANDSCAPE_720P_6 = 55 , VIDEO_PROFILE_LANDSCAPE_1080P = 60 , VIDEO_PROFILE_LANDSCAPE_1080P_3 = 62 , VIDEO_PROFILE_LANDSCAPE_1080P_5 = 64 , VIDEO_PROFILE_LANDSCAPE_1440P = 66 , VIDEO_PROFILE_LANDSCAPE_1440P_2 = 67 , VIDEO_PROFILE_LANDSCAPE_4K = 70 , VIDEO_PROFILE_LANDSCAPE_4K_3 = 72 , VIDEO_PROFILE_PORTRAIT_120P = 1000 , VIDEO_PROFILE_PORTRAIT_120P_3 = 1002 , VIDEO_PROFILE_PORTRAIT_180P = 1010 , VIDEO_PROFILE_PORTRAIT_180P_3 = 1012 , VIDEO_PROFILE_PORTRAIT_180P_4 = 1013 , VIDEO_PROFILE_PORTRAIT_240P = 1020 , VIDEO_PROFILE_PORTRAIT_240P_3 = 1022 , VIDEO_PROFILE_PORTRAIT_240P_4 = 1023 , VIDEO_PROFILE_PORTRAIT_360P = 1030 , VIDEO_PROFILE_PORTRAIT_360P_3 = 1032 , VIDEO_PROFILE_PORTRAIT_360P_4 = 1033 , VIDEO_PROFILE_PORTRAIT_360P_6 = 1035 , VIDEO_PROFILE_PORTRAIT_360P_7 = 1036 , VIDEO_PROFILE_PORTRAIT_360P_8 = 1037 , VIDEO_PROFILE_PORTRAIT_360P_9 = 1038 , VIDEO_PROFILE_PORTRAIT_360P_10 = 1039 , VIDEO_PROFILE_PORTRAIT_360P_11 = 1100 , VIDEO_PROFILE_PORTRAIT_480P = 1040 , VIDEO_PROFILE_PORTRAIT_480P_3 = 1042 , VIDEO_PROFILE_PORTRAIT_480P_4 = 1043 , VIDEO_PROFILE_PORTRAIT_480P_6 = 1045 , VIDEO_PROFILE_PORTRAIT_480P_8 = 1047 , VIDEO_PROFILE_PORTRAIT_480P_9 = 1048 , VIDEO_PROFILE_PORTRAIT_480P_10 = 1049 , VIDEO_PROFILE_PORTRAIT_720P = 1050 , VIDEO_PROFILE_PORTRAIT_720P_3 = 1052 , VIDEO_PROFILE_PORTRAIT_720P_5 = 1054 , VIDEO_PROFILE_PORTRAIT_720P_6 = 1055 , VIDEO_PROFILE_PORTRAIT_1080P = 1060 , VIDEO_PROFILE_PORTRAIT_1080P_3 = 1062 , VIDEO_PROFILE_PORTRAIT_1080P_5 = 1064 , VIDEO_PROFILE_PORTRAIT_1440P = 1066 , VIDEO_PROFILE_PORTRAIT_1440P_2 = 1067 , VIDEO_PROFILE_PORTRAIT_4K = 1070 , VIDEO_PROFILE_PORTRAIT_4K_3 = 1072 , VIDEO_PROFILE_DEFAULT = VIDEO_PROFILE_LANDSCAPE_360P }
enum | INTERFACE_ID_EX_TYPE { AGORA_IID_RTC_ENGINE_EX = 0xacbd }
enum | SCREEN_SHARING_MODE { SCREEN_SHARING_NORMAL = 0 , SCREEN_SHARING_MOVIE = 1 }
enum class | RecordingEventType : unsigned { RECORDING_EVENT_UNKNOWN , RECORDING_EVENT_START , RECORDING_EVENT_JOIN = RECORDING_EVENT_START , RECORDING_EVENT_LEAVE , RECORDING_EVENT_END = RECORDING_EVENT_LEAVE }
enum | RecordingEventKeyIndex { RECORDING_JOIN_EVT_START = 1 , RECORDING_JOIN_EVT_MIXMODE = RECORDING_JOIN_EVT_START , RECORDING_JOIN_EVT_MIXEDVIDEOAUDIOMODE = 2 , RECORDING_JOIN_EVT_MIXHIGH = 3 , RECORDING_JOIN_EVT_MIXLOW = 4 , RECORDING_JOIN_EVT_MIXFPS = 5 , RECORDING_JOIN_EVT_MIXKBPS = 6 , RECORDING_JOIN_EVT_MINUDPPORT = 7 , RECORDING_JOIN_EVT_MAXUDPPORT = 8 , RECORDING_JOIN_EVT_DECODEAUDIOTYPE = 9 , RECORDING_JOIN_EVT_DECODEVIDEOTYPE = 10 , RECORDING_JOIN_EVT_LIVEMODE = 11 , RECORDING_JOIN_EVT_IDLE = 12 , RECORDING_JOIN_EVT_AUDIOONLY = 13 , RECORDING_JOIN_EVT_VIDEOONLY = 14 , RECORDING_JOIN_EVT_SYSLOGFACILITY = 15 , RECORDING_JOIN_EVT_STREAMTYPE = 16 , RECORDING_JOIN_EVT_TRIGGERMODE = 17 , RECORDING_JOIN_EVT_LANGUAGE = 18 , RECORDING_JOIN_EVT_RESERVE1 = 19 , MAX_RECORDING_JOIN_EVT_RESERVE15 = RECORDING_JOIN_EVT_RESERVE1 + 14 , RECORDING_JOIN_EVT_MAX = MAX_RECORDING_JOIN_EVT_RESERVE15 , RECORDING_LEAVE_EVT_START = 101 , RECORDING_LEAVE_EVT_LEAVEPATHCODE = RECORDING_LEAVE_EVT_START , RECORDING_LEAVE_EVT_RESERVE1 , RECORDING_LEAVE_EVT_RESERVE5 = RECORDING_LEAVE_EVT_RESERVE1 + 4 , RECORDING_LEAVE_EVT_MAX = RECORDING_LEAVE_EVT_RESERVE5 }
enum | APP_TYPE { APP_TYPE_INVALID_VALUE = -1 , APP_TYPE_NATIVE = 0 , APP_TYPE_COCOS = 1 , APP_TYPE_UNITY = 2 , APP_TYPE_ELECTRON = 3 , APP_TYPE_FLUTTER = 4 , APP_TYPE_UNREAL = 5 , APP_TYPE_XAMARIN = 6 , APP_TYPE_APICLOUD = 7 , APP_TYPE_REACT_NATIVE = 8 , APP_TYPE_PYTHON = 9 , APP_TYPE_COCOS_CREATOR = 10 , APP_TYPE_RUST = 11 , APP_TYPE_C_SHARP = 12 , APP_TYPE_CEF = 13 , APP_TYPE_UNI_APP = 14 , APP_TYPE_UNREAL_BP = 15 }
enum class | RTC_EVENT { NATIVE_LOG = 100 , ERROR_EVENT = 101 , WARNING_EVENT = 102 , MEDIA_ENGINE_LOAD_SUCCESS = 1002 , MEDIA_ENGINE_START_CAMERA_SUCCESS = 1005 , MEDIA_ENGINE_START_CALL_SUCCESS = 1006 , VIDEO_STOPPED = 1007 , TRANSPORT_QUALITY = 1101 , AUDIO_QUALITY = 1102 , TRANSPORT_SERVER_INSTANCE = 1103 , MEDIA_ENGINE_EVENT = 1104 , AUDIO_DEVICE_STATE_CHANGED = 1105 , VIDEO_DEVICE_STATE_CHANGED = 1107 , REQUEST_TOKEN = 1108 , CLIENT_ROLE_CHANGED = 1109 , PUBLISH_URL = 1110 , UNPUBLISH_URL = 1111 , LIVE_TRANSCODING = 1112 , JOIN_PUBLISHER_REQUEST = 1113 , JOIN_PUBILSHER_RESPONSE = 1114 , REMOVE_PUBLISHER_REQUEST = 1115 , STREAM_INJECTED_STATUS = 1116 , PRIVILEGE_WILL_EXPIRE = 1117 , LOCAL_VIDEO_STATE_CHANGED = 1118 , RTMP_STREAMING_STATE = 1119 , PUBLISH_STREAM_STATE = 1120 , CLIENT_ROLE_CHANGE_FAILED = 1121 , PUBLISH_STREAM_EVENT = 1122 , RENEW_TOKEN_RESULT = 1123 , LOCAL_VIDEO_EVENT = 1124 , OPEN_CHANNEL_SUCCESS = 13001 , LEAVE_CHANNEL = 13006 , NETWORK_QUALITY = 13007 , USER_OFFLINE = 13008 , RTC_STATS = 13010 , USER_JOINED = 13013 , USER_MUTE_AUDIO = 13014 , USER_MUTE_VIDEO = 13015 , USER_ENABLE_VIDEO = 13016 , LASTMILE_QUALITY = 13017 , AUDIO_EFFECT_FINISHED = 13018 , USER_ENABLE_LOCAL_VIDEO = 13019 , LASTMILE_PROBE_RESULT = 13020 , UPLINK_NETWORK_INFO_UPDATE = 13021 , DOWNLINK_NETWORK_INFO_UPDATE = 13022 , USER_STATE_CHANGED = 13023 , RECAP_INDICATION = 14000 , AUDIO_VOLUME_INDICATION = 14001 , FIRST_REMOTE_VIDEO_FRAME = 14002 , LOCAL_VIDEO_STAT = 14003 , REMOTE_VIDEO_STAT = 14004 , FIRST_LOCAL_VIDEO_FRAME = 14005 , FIRST_REMOTE_VIDEO_DECODED = 14007 , CONNECTION_LOST = 14008 , STREAM_MESSAGE = 14009 , CONNECTION_INTERRUPTED = 14010 , QUERY_RECORDING_SERVICE_STATUS = 14011 , STREAM_MESSAGE_ERROR = 14012 , VIDEO_SIZE_CHANGED = 14013 , FIRST_LOCAL_AUDIO_FRAME_PUBLISHED = 14014 , FIRST_LOCAL_VIDEO_FRAME_PUBLISHED = 14015 , ACTIVE_SPEAKER = 14016 , AUDIO_DEVICE_VOLUME_CHANGED = 14017 , _INTERNAL_ENGINE_STATUS = 14018 , CONNECTION_BANNED = 14019 , CAMERA_FOCUS_AREA_CHANGED = 14020 , REMOTE_VIDEO_STATE_CHANGED = 14021 , REMOTE_SUBSCRIBE_FALLBACK_TO_AUDIO_ONLY = 14023 , USER_TRANSPORT_STAT = 14024 , CONNECTION_STATE_CHANGED = 14028 , CAMERA_EXPOSURE_AREA_CHANGED = 14029 , REMOTE_AUDIO_STAT = 14030 , NETWORK_TYPE_CHANGED = 14031 , AUDIO_ROUTING_CHANGED = 14032 , FIRST_REMOTE_AUDIO_DECODED = 14033 , LOCAL_USER_REGISTERED = 14034 , USER_INFO_UPDATED = 14035 , REMOTE_VIDEO_STATE_CHANGED_EXT = 14036 , CROSS_CHANNEL_STATE = 14037 , CROSS_CHANNEL_EVENT = 14038 , REMOTE_AUDIO_STATE_CHANGED = 14040 , LOCAL_AUDIO_STAT = 14041 , LOCAL_AUDIO_STATE_CHANGED = 14042 , AUDIO_MIXING_STATE_CHANGED = 14043 , INTRA_REQUEST_RECEIVED = 14044 , PEER_USER_INFO_UPDATED = 14045 , ENCRYPTION_ERROR_EVENT = 14046 , REMOTE_VIDEO_STREAM_INFO_UPDATED = 14047 , AUDIO_SUBSCRIBE_STATE_CHANGED = 14048 , VIDEO_SUBSCRIBE_STATE_CHANGED = 14049 , AUDIO_PUBLISH_STATE_CHANGED = 14050 , VIDEO_PUBLISH_STATE_CHANGED = 14051 , PERMISSION_ERROR_EVENT = 14052 , FACE_DETECT_VALUE = 14053 , RHYTHM_PLAYFR_STATE_CHANGED = 14054 , UPLOAD_LOG_RESULT = 14055 , FIRST_REMOTE_AUDIO_FRAME = 14058 , PROXY_SUCCESS = 14059 , WLACC_MESSAGE = 14060 , WLACC_STATS = 14061 , SNAPSHOT_TAKEN = 14062 , CONTENT_INSPECT_RESULT = 14063 , AUDIO_MIXING_POSITION_CHANGED = 14064 , LICENSE_VERIFY = 14065 , VIDEO_RENDERING_TRACING_RESULT = 14066 , LOCAL_TRANSCODING = 14067 , SET_RTM_FLAG_RESULT = 14068 , VIDEO_LAYOUT_INFO = 14069 , AUDIO_METADATA_RECEIVED = 14070 , RDT_MESSAGE = 14071 , RDT_STATE_CHANGED = 14072 , MEDIA_CONTROL_MESSAGE = 14073 , PATH_STATS = 14074 , PERMISSION_GRANTED_EVENT = 14075 }
enum | ENGINE_INIT_TS_POSITION { CREATE_BEGIN , CREATE_END , INIT_BEGIN , INIT_END , INIT_END_INTERNAL }
enum | ENGINE_INIT_STATUS { STATUS_UNINIT , STATUS_INITIALIZING , STATUS_INITIALIZED }

## Functions
template<typename T>
static T | MinPositive (T a, T b)
template<typename T>
static void | SetFrom (Optional< T > *s, const Optional< T > &o)
template<typename T>
static void | ReplaceBy (Optional< T > *s, const Optional< T > &o)
AGORA_API bool AGORA_CALL | decode_sei_layout (const void *data, unsigned size, layout_info *layout)
AGORA_API agora::rtc::IRtcEngineInternal *AGORA_CALL | getInternalAgoraRtcEngine ()

## Variables
static const int | kNoSourceValidForDownlink = -1379
const std::string | AUDIO_PIPELINE_POS_RECORD_ORIGIN
const std::string | AUDIO_PIPELINE_POS_APM
const std::string | AUDIO_PIPELINE_POS_PRE_SEND_PROC
const std::string | AUDIO_PIPELINE_POS_ENC
const std::string | AUDIO_PIPELINE_POS_TX_MIXER
const std::string | AUDIO_PIPELINE_POS_AT_RECORD
const std::string | AUDIO_PIPELINE_POS_ATW_RECORD
const std::string | AUDIO_PIPELINE_POS_DEC
const std::string | AUDIO_PIPELINE_POS_PLAY
const std::string | AUDIO_PIPELINE_POS_RX_MIXER
const std::string | AUDIO_PIPELINE_POS_PLAYBACK_MIXER
const std::string | AUDIO_PIPELINE_POS_PCM_SOURCE_PLAYBAC_MIXER
const std::string | AUDIO_PIPELINE_POS_PRE_PLAY_PROC
const std::string | AUDIO_PIPELINE_POS_AT_PLAYOUT
const std::string | AUDIO_PIPELINE_POS_ATW_PLAYOUT
const int64_t | AUDIO_FRAME_DUMP_MIN_DURATION_MS = 0
const int64_t | AUDIO_FRAME_DUMP_MAX_DURATION_MS = 150000
static const uint8_t | kVideoEngineFlagHasIntraRequest = 0x10
static const uint8_t | kVideoEngineFlagStdCodec = 0x8
static const uint8_t | kVideoEngineFlagNasa = 0x40
static const uint8_t | kVideoEngineFlagScalableDelta = 0x80
static const uint8_t | kVideoEngineFlagMajorStreamOnly = 0x01
static const uint8_t | kAgoraHeaderLength = 3
static const uint8_t | kAgoraAudioExtendLength = 5
static const uint8_t | AUDIO_MEDIA_PACKET_PAYLOAD_TYPE = 127
static const char *const | BUILT_IN_SOURCE_FILTER = "built-in-source-filter"
static const char *const | BUILT_IN_METADATA_OBSERVER = "built-in-metadata-observer"
static const char *const | BUILT_IN_ADAPTER = "built-in-adapter"
static const char *const | BUILT_IN_REMOTE_ADAPTER = "built-in-remote-adapter"
static const char *const | BUILT_IN_PRE_ENCODER_WATERMARK_FILTER = "built-in-pre-encoder-watermarker"
static const char *const | BUILT_IN_POST_CAPTURER_WATERMARK_FILTER = "built-in-post-capturer-watermarker"
static const char *const | BUILT_IN_PRE_ENCODER_FACEDETECE_FILTER = "built-in-pre-encoder-facedetect"
static const char *const | BUILT_IN_SOURCE_TEE = "built-in-source-tee"
static const char *const | BUILT_IN_PREVIEW_TEE = "built-in-preview-tee"
static const char *const | BUILT_IN_MAJOR_TEE = "built-in-major-tee"
static const char *const | BUILT_IN_SIMULCAST_TEE = "built-in-simulcast-tee"
static const char *const | BUILT_IN_MINOR_ADAPTER = "built-in-minor-adapter"
static const char *const | BUILT_IN_POST_CAPTURER_FILTER_OBSERVER = "built-in-post-capturer-filter-observer"
static const char *const | BUILT_IN_PRE_ENCODER_FILTER_OBSERVER = "built-in-pre-encoder-filter-observer"
static const char *const | BUILT_IN_POST_CAPTURER_FILTER_FRAME_OBSERVER = "CaptureFilterModeObserver"
static const char *const | BUILT_IN_PRE_ENCODER_FILTER_FRAME_OBSERVER = "PreEncoderFilterModeObserver"
static const char *const | BUILT_IN_STITCH_FRAME = "built-in-stitch-frame"
static const char *const | BUILT_IN_SCREEN_CAPTURE_FILTER = "built-in-screen-capture-filter"
static const char *const | GLFW_RESOURCE = "glfw_resource"
static const int | kAdmMaxDeviceNameSize = 128
static const int | kAdmMaxGuidSize = 128
static const int | kIntervalInMillseconds = 200
static const int | kDeviceIdSize = 128
static const int | kVdmMaxDeviceSize = 260
OPTIONAL_ENUM_CLASS | VideoFrameMetaDataType
OPTIONAL_ENUM_CLASS | VideoFrameGravityRotation
const int | STANDARD_BITRATE = 0
const int | COMPATIBLE_BITRATE = -1
const int | DEFAULT_MIN_BITRATE = -1
const int | DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE = -2
static const unsigned int | INVALID_TRACK_ID = 0xffffffff
static const unsigned int | DEFAULT_CONNECTION_ID = 0
static const unsigned int | DUMMY_CONNECTION_ID = (std::numeric_limits<unsigned int>::max)()

## Typedef Documentation

## ◆ PipelineBuilder

using agora::rtc::PipelineBuilder = std::shared_ptr<webrtc::Call>

## ◆ WeakPipelineBuilder

using agora::rtc::WeakPipelineBuilder = std::weak_ptr<webrtc::Call>

## ◆ ExtRefCountedObject

template<typename T>

using agora::rtc::ExtRefCountedObject = agora::RefCountedObject<T, ExtProviderDeleter>

## ◆ StreamsFecStatsMap

using agora::rtc::StreamsFecStatsMap = std::map<uint8_t, std::pair<uint16_t, uint32_t>>

## ◆ SharedSAudioFrame

using agora::rtc::SharedSAudioFrame = std::shared_ptr<SAudioFrame>

## ◆ StateEvent

template<typename STATE_TYPE, typename REASON_TYPE>

using agora::rtc::StateEvent = std::pair<uint64_t, std::pair<STATE_TYPE, REASON_TYPE>>

## ◆ StateEvents

template<typename STATE_TYPE, typename REASON_TYPE>

using agora::rtc::StateEvents = std::vector<StateEvent<STATE_TYPE, REASON_TYPE>>

## ◆ CameraInfoList

using agora::rtc::CameraInfoList = std::vector<CameraInfo>

## ◆ VideoSourceType

typedef int32_t agora::rtc::VideoSourceType

## ◆ RtcImage

typedef struct agora::rtc::RtcImage agora::rtc::RtcImage

Image properties.

This class sets the properties of the watermark and background images in the live video.

## ◆ uid_t

typedef unsigned int agora::rtc::uid_t

## ◆ track_id_t

typedef unsigned int agora::rtc::track_id_t

## ◆ conn_id_t

typedef unsigned int agora::rtc::conn_id_t

## ◆ video_track_id_t

typedef unsigned int agora::rtc::video_track_id_t

## ◆ RtcEngineReleaseCallback

using agora::rtc::RtcEngineReleaseCallback = void(*)()

Callback triggered when `IRtcEngine` is released.

Since
  v4.6.0

This callback is triggered when the `release` method is called to asynchronously release the `IRtcEngine` object. Call timing: This callback is triggered when the `release` method is called to asynchronously release the `IRtcEngine` object.

## Enumeration Type Documentation

## ◆ RTMP_CHANNEL_EVENT

enum agora::rtc::RTMP_CHANNEL_EVENT

The events in the RTMP channel.

Enumerator
RTMP_CHANNEL_EVENT_DISCONNECT | 0: The live stream service is disconnected.
RTMP_CHANNEL_EVENT_LEAVE_CHANNEL | 1: The live stream service has left the channel.
RTMP_CHANNEL_EVENT_BANNED_BY_SERVER | 2: The live stream service is banned by the server.

## ◆ AUDIO_FRAME_SOURCE_TYPE

enum class agora::rtc::AUDIO_FRAME_SOURCE_TYPE
| strong

Enumerator
UNKNOWN |
RECORD |
PUSH_DIRECT |
PUSH_EXTERNAL |
SIMPLE_MEDIA_PLAYER |
FFMPEG_MEDIA_PLAYER |
KNOWN_TYPE_COUNT |

## ◆ ADM_ANDROID_MODE

enum agora::rtc::ADM_ANDROID_MODE

ADM Android mode

Enumerator
JAVA_INPUT_AND_JAVA_OUTPUT | Java input and Java output webrtc::AudioDeviceModule::kAndroidJavaAudio
OPENSL_INPUT_AND_OPENSL_OUTPUT | OpenSL input and OpenSL output webrtc::AudioDeviceModule::kAndroidOpenSLESAudio
JAVA_INPUT_AND_OPENSL_OUTPUT | Java input and OpenSL output webrtc::AudioDeviceModule::kAndroidJavaInputAndOpenSLESOutputAudio
OBOE_INPUT_AND_OBOE_OUTPUT | Oboe input and Oboe output webrtc::AudioDeviceModule::kAndroidAAudioAudio
JAVA_INPUT_AND_OBOE_OUTPUT | Java input and Oboe output webrtc::AudioDeviceModule::kAndroidJavaInputAndAAudioOutputAudio
OPENSL_INPUT_AND_OBOE_OUTPUT | OpenSL input and Oboe output webrtc::AudioDeviceModule::kAndroidOpenSLESInputAndAAudioOutputAudio

## ◆ anonymous enum

anonymous enum : int

Enumerator
INVLAID_VALUE |

## ◆ LocalExtensionCounter

enum agora::rtc::LocalExtensionCounter

Enumerator
LOCAL_EXTENSION_COUNTER_LOWLIGHT_ENHANCE_COST_TIME |
LOCAL_EXTENSION_COUNTER_BEAUTY_COST_TIME |
LOCAL_EXTENSION_COUNTER_PVC_STATUS |
LOCAL_EXTENSION_COUNTER_PVC_COST_TIME |
LOCAL_EXTENSION_COUNTER_FACE_DETECT_COST_TIME |
LOCAL_EXTENSION_COUNTER_SEG_ENABLE |
LOCAL_EXTENSION_COUNTER_SEG_COST_TIME |
LOCAL_EXTENSION_COUNTER_BACKREPLACE_ENABLE |
LOCAL_EXTENSION_COUNTER_BACKREPLACE_COST_TIME |
LOCAL_EXTENSION_COUNTER_BLUR_COST_TIME |
LOCAL_EXTENSION_COUNTER_DENOISER_COST_TIME |
LOCAL_EXTENSION_COUNTER_COLOR_ENHANCE_COST_TIME |
LOCAL_EXTENSION_REMOTE_COUNTER_SUPER_RESOLUTION_TYPE |
LOCAL_EXTENSION_REMOTE_COUNTER_SUPER_RESOLUTION_COST_TIME |
LOCAL_EXTENSION_LOCAL_COUNTER_SUPER_RESOLUTION_COST_TIME |
LOCAL_EXTENSION_COUNTER_TEXTTURE2YUV_COST_TIME |
LOCAL_EXTENSION_LOCAL_COUNTER_FACE_CAPTURE_COST_TIME |
LOCAL_EXTENSION_COUNTER_METAKIT_RENDERING_COST_TIME |
LOCAL_EXTENSION_LOCAL_COUNTER_LIP_SYNC_COST_TIME |
LOCAL_EXTENSION_COUNTER_RHYTHM_TYPE |
LOCAL_EXTENSION_COUNTER_RHYTHM_COSTTIME |
LOCAL_EXTENSION_COUNTER_ADVANCED_BEAUTY_COST_TIME |
LOCAL_EXTENSION_COUNTER_FILTER_COST_TIME |
LOCAL_EXTENSION_COUNTER_METAKIT_GPU_FRAME_TIME |
LOCAL_EXTENSION_COUNTER_MAKEUP_COST_TIME |

## ◆ MEDIA_STREAM_TYPE

enum agora::rtc::MEDIA_STREAM_TYPE

Enumerator
MEDIA_STREAM_TYPE_AUDIO |
MEDIA_STREAM_TYPE_VIDEO_LOW |
MEDIA_STREAM_TYPE_VIDEO_HIGH |
MEDIA_STREAM_TYPE_VIDEO_LAYER_0 |
MEDIA_STREAM_TYPE_VIDEO_LAYER_1 |
MEDIA_STREAM_TYPE_VIDEO_LAYER_2 |
MEDIA_STREAM_TYPE_VIDEO_LAYER_3 |
MEDIA_STREAM_TYPE_VIDEO_LAYER_4 |
MEDIA_STREAM_TYPE_VIDEO_LAYER_5 |
MEDIA_STREAM_TYPE_VIDEO_LAYER_6 |
MEDIA_STREAM_TYPE_VIDEO |
MEDIA_STREAM_TYPE_MEDIA |

## ◆ MEDIA_FRAMERATE_LEVEL

enum agora::rtc::MEDIA_FRAMERATE_LEVEL

Enumerator
MEDIA_FRAMERATE_LEVEL_HIGH |
MEDIA_FRAMERATE_LEVEL_MIDDLE |
MEDIA_FRAMERATE_LEVEL_LOW |

## ◆ VideoStreamType

enum agora::rtc::VideoStreamType

Enumerator
MASTER_VIDEO_STREAM |
LOW_BITRATE_VIDEO_STREAM |
MEDIUM_BITRATE_VIDEO_STREAM |
LIVE_VIDEO_STREAM |

## ◆ CongestionControlType

enum agora::rtc::CongestionControlType

Enumerator
CONGESTION_CONTROLLER_TYPE_AGORA_CC |
CONGESTION_CONTROLLER_TYPE_REMB |
CONGESTION_CONTROLLER_TYPE_TRANSPORT_CC |
CONGESTION_CONTROLLER_TYPE_AUT_CC |

## ◆ ConnectionMode

enum agora::rtc::ConnectionMode

Enumerator
CONNECTION_MODE_ACTIVE |
CONNECTION_MODE_PASSIVE |

## ◆ InternalRendererType

enum agora::rtc::InternalRendererType

Enumerator
RENDERER_NONE |
RENDERER_BUILT_IN_RENDERER |
RENDERER_EXT_OBSERVER |

## ◆ CAMERA_OUTPUT_DATA_TYPE

enum agora::rtc::CAMERA_OUTPUT_DATA_TYPE

Enumerator
CAMERA_OUTPUT_RAW |
CAMERA_OUTPUT_TEXTURE |
CAMERA_OUTPUT_TEXTURE_AND_RAW |

## ◆ InternalVideoSourceType

enum class agora::rtc::InternalVideoSourceType : unsigned
| strong

Enumerator
None |
Camera |
Custom |
Screen |
CustomYuvSource |
CustomEncodedImageSource |
CustomPacketSource |
MixedSource |
TranscodedSource |

## ◆ VideoModuleId

enum agora::rtc::VideoModuleId

Enumerator
VideoModuleCapture |
VideoModulePreprocess |
VideoModuleEncode |
VideoModuleNetwork |
VideoModuleDecode |
VideoModulePostprocess |
VideoModuleRender |
VideoModulePipeline |
VideoModuleQoE |
VideoModuleExtension |

## ◆ VideoAvailabilityLevel

enum agora::rtc::VideoAvailabilityLevel

Enumerator
VideoAvailabilityLevel1 |
VideoAvailabilityLevel2 |
VideoAvailabilityLevel3 |

## ◆ VideoPipelineEvent

enum agora::rtc::VideoPipelineEvent

Enumerator
kVideoUplinkEventStaticFrames |

## ◆ VideoQoeEvent

enum agora::rtc::VideoQoeEvent

Enumerator
kVideoQoeCriticalDrop |
kVideoQoe600msFreezeDrop |
kVideoQoe200msFreezeDrop |
kVideoQoeFpsSubstandard |
kVideoTimestampException |
kVideoQoePipelineException |
kVideoGlitchDetection |
kVideoExtensionStatusDetection |

## ◆ VideoProcessEvent

enum agora::rtc::VideoProcessEvent

Enumerator
kVideoProcessEventNone |
kVideoProcessEventPreprocessEnqueueFailure |
kVideoProcessEventPreprocessFrameFailure |
kVideoProcessEventPreprocessNoIncomingFrame |
kVideoProcessEventPreprocessCongested |

## ◆ VideoCodecAvailableEvent

enum agora::rtc::VideoCodecAvailableEvent

Enumerator
kVideoHwH265EncoderAvailable |
kVideoHwH264EncoderHighProfileAvailable |

## ◆ VideoDumpMode

enum agora::rtc::VideoDumpMode

Enumerator
VIDEO_DUMP_DEFAULT |
VIDEO_DUMP_ALL |
VIDEO_DUMP_CAPTURED_YUV |
VIDEO_DUMP_FILTERED_YUV |
VIDEO_DUMP_ENCODED_STREAM |
VIDEO_DUMP_RECEIVED_STREAM |
VIDEO_DUMP_DECODED_YUV |
VIDEO_DUMP_RENDERED_YUV |
VIDEO_DUMP_PRE_ENCODER_YUV |

## ◆ AudioTrackType

enum agora::rtc::AudioTrackType

Enumerator
LOCAL_AUDIO_TRACK |
REMOTE_AUDIO_TRACK |

## ◆ RTMP_CONNECTION_ERROR

enum agora::rtc::RTMP_CONNECTION_ERROR

The RTMP Connection error codes.

Enumerator
RTMP_CONNECTION_ERR_OK | 0: No error occurs.
RTMP_CONNECTION_ERR_FAILED | 1: A general error occurs (no specified reason).
RTMP_CONNECTION_ERR_INVALID_URL | 2: The rtmp url is invalid.
RTMP_CONNECTION_ERR_BAD_NAME | 3: Already exist stream name.

## ◆ RTMP_CONNECTION_STATE

enum agora::rtc::RTMP_CONNECTION_STATE

The connection state between the SDK and the RTMP server.

Enumerator
STATE_DISCONNECTED | 1: The SDK is disconnected from the RTMP server. This is the initial state when an RTMP Connetion is created by the createRtmpConnection method. The RTMP Connection also enters this state if you call the disconnect method when the SDK is in the STATE_CONNECTING(2), STATE_CONNECTED(3), STATE_RECONNECTING(4) or STATE_FAILED(5) state.
STATE_CONNECTING | 2: The SDK is connecting to the RTMP server. The SDK goes to this state after you call the connect method, indicating that the SDK is in the process of establishing a connection to the RTMP server. Once successfully connected, it enters the STATE_CONNECTED(3) state. If the SDK fails to connect to RTMP server, the SDK goes to STATE_FAILED(5).
STATE_CONNECTED | 3: The SDK is connected to the RTMP server. This state indicates that the SDK has established a connection to the RTMP server, and you can publish media streams through this connection. Once the connection is interrupted, for example, due to network deterioration or network type change, the SDK tries to reconnect to the RTMP server and enters the STATE_RECONNECTING(4) state.
STATE_RECONNECTING | 4: The SDK is reconnecting to the RTMP server. This state indicates that the connection is interrupted by some network issue. The SDK keeps trying connecting to the server. If the SDK fails to reconnect, the SDK goes to STATE_FAILED(5).
STATE_FAILED | 5: The SDK fails to connect to the RTMP server. In this state, SDK stops connecting to the server. Call the disconnect method to leave this state and the connect method to reconnect.
STATE_RECONNECTED | 6: The SDK is reconnected to the RTMP server. This state indicates that the connection is interrupted by some network issue. The SDK keeps trying connecting to the server. If the SDK reconnected to server, the SDK goes to STATE_RECONNECTED(6).

## ◆ PublishAudioError

enum agora::rtc::PublishAudioError

The error occurs while publising audio stream.

Enumerator
PUBLISH_AUDIO_ERR_OK | 0: No error occurs.
PUBLISH_AUDIO_ERR_FAILED | 1: A general error occurs (no specified reason).

## ◆ PublishVideoError

enum agora::rtc::PublishVideoError

The error occurs while publising video stream.

Enumerator
PUBLISH_VIDEO_ERR_OK | 0: No error occurs.
PUBLISH_VIDEO_ERR_FAILED | 1: A general error occurs (no specified reason).

## ◆ ImageType

enum agora::rtc::ImageType

Enumerator
kUnknownPic |
kPng |
kJpeg |
kGif |

## ◆ StreamLayerIndexInternal

enum agora::rtc::StreamLayerIndexInternal

Enumerator
STREAM_LAYER_1 |
STREAM_LAYER_2 |
STREAM_LAYER_3 |
STREAM_LAYER_4 |
STREAM_LAYER_5 |
STREAM_LAYER_6 |
STREAM_LOW |
STREAM_LAYER_COUNT_MAX |

## ◆ VideoTrackType

enum agora::rtc::VideoTrackType

Enumerator
LOCAL_VIDEO_TRACK |
REMOTE_VIDEO_TRACK |
REMOTE_VIDEO_IMAGE_TRACK |

## ◆ USER_OFFLINE_REASON_TYPE

enum agora::rtc::USER_OFFLINE_REASON_TYPE

Reasons for a user being offline.

Enumerator
USER_OFFLINE_QUIT | 0: The user quits the call.
USER_OFFLINE_DROPPED | 1: The SDK times out and the user drops offline because no data packet is received within a certain period of time. Note If the user quits the call and the message is not passed to the SDK (due to an unreliable channel), the SDK assumes the user dropped offline.
USER_OFFLINE_BECOME_AUDIENCE | 2: The user switches the client role from the host to the audience.

## ◆ INTERFACE_ID_TYPE

enum agora::rtc::INTERFACE_ID_TYPE

The interface class.

Enumerator
AGORA_IID_AUDIO_DEVICE_MANAGER | 1: The `IAudioDeviceManager` interface class.
AGORA_IID_VIDEO_DEVICE_MANAGER | 2: The `IVideoDeviceManager` interface class.
AGORA_IID_PARAMETER_ENGINE | This interface class is deprecated.
AGORA_IID_MEDIA_ENGINE | 4: The `IMediaEngine` interface class.
AGORA_IID_AUDIO_ENGINE |
AGORA_IID_VIDEO_ENGINE |
AGORA_IID_RTC_CONNECTION |
AGORA_IID_SIGNALING_ENGINE | This interface class is deprecated.
AGORA_IID_MEDIA_ENGINE_REGULATOR |
AGORA_IID_LOCAL_SPATIAL_AUDIO |
AGORA_IID_STATE_SYNC |
AGORA_IID_META_SERVICE |
AGORA_IID_MUSIC_CONTENT_CENTER |
AGORA_IID_H265_TRANSCODER |

## ◆ QUALITY_TYPE

enum agora::rtc::QUALITY_TYPE

Network quality types.

Enumerator
__deprecated | 0: The network quality is unknown. Deprecated This member is deprecated. 3: The request is timed out. Agora recommends you prompt the user to check the network connection and try to switch their user role again. Deprecated This reason is deprecated. 4: The SDK is disconnected from the Agora edge server. You can troubleshoot the failure through the `reason` reported by `onConnectionStateChanged`. Deprecated This reason is deprecated.
QUALITY_EXCELLENT | 1: The network quality is excellent.
QUALITY_GOOD | 2: The network quality is quite good, but the bitrate may be slightly lower than excellent.
QUALITY_POOR | 3: Users can feel the communication is slightly impaired.
QUALITY_BAD | 4: Users cannot communicate smoothly.
QUALITY_VBAD | 5: The quality is so bad that users can barely communicate.
QUALITY_DOWN | 6: The network is down and users cannot communicate at all.
QUALITY_UNSUPPORTED | 7: (For future use) The network quality cannot be detected.
QUALITY_DETECTING | 8: The last-mile network probe test is in progress.

## ◆ FIT_MODE_TYPE

enum agora::rtc::FIT_MODE_TYPE

Content fit modes.

Enumerator
MODE_COVER | 1: Uniformly scale the video until it fills the visible boundaries (cropped). One dimension of the video may have clipped contents.
MODE_CONTAIN | 2: Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to disparity in the aspect ratio are filled with black.

## ◆ VIDEO_ORIENTATION

enum agora::rtc::VIDEO_ORIENTATION

The clockwise rotation of the video.

Enumerator
VIDEO_ORIENTATION_0 | 0: (Default) No rotation.
VIDEO_ORIENTATION_90 | 90: 90 degrees.
VIDEO_ORIENTATION_180 | 180: 180 degrees.
VIDEO_ORIENTATION_270 | 270: 270 degrees.

## ◆ FRAME_RATE

enum agora::rtc::FRAME_RATE

The video frame rate.

Enumerator
FRAME_RATE_FPS_1 | 1: 1 fps.
FRAME_RATE_FPS_7 | 7: 7 fps.
FRAME_RATE_FPS_10 | 10: 10 fps.
FRAME_RATE_FPS_15 | 15: 15 fps.
FRAME_RATE_FPS_24 | 24: 24 fps.
FRAME_RATE_FPS_30 | 30: 30 fps.
FRAME_RATE_FPS_60 | 60: 60 fps. Note For Windows and macOS only.

## ◆ FRAME_WIDTH

enum agora::rtc::FRAME_WIDTH

Enumerator
FRAME_WIDTH_960 |

## ◆ FRAME_HEIGHT

enum agora::rtc::FRAME_HEIGHT

Enumerator
FRAME_HEIGHT_540 |

## ◆ VIDEO_FRAME_TYPE

enum agora::rtc::VIDEO_FRAME_TYPE

The video frame type.

Enumerator
VIDEO_FRAME_TYPE_BLANK_FRAME | 0: A black frame.
VIDEO_FRAME_TYPE_KEY_FRAME | 3: Key frame.
VIDEO_FRAME_TYPE_DELTA_FRAME | 4: Delta frame.
VIDEO_FRAME_TYPE_B_FRAME | 5: The B frame.
VIDEO_FRAME_TYPE_DROPPABLE_FRAME | 6: A discarded frame.
VIDEO_FRAME_TYPE_UNKNOW | Unknown frame.

## ◆ ORIENTATION_MODE

enum agora::rtc::ORIENTATION_MODE

Video output orientation mode.

Enumerator
ORIENTATION_MODE_ADAPTIVE | 0: (Default) The output video always follows the orientation of the captured video. The receiver takes the rotational information passed on from the video encoder. This mode applies to scenarios where video orientation can be adjusted on the receiver. If the captured video is in landscape mode, the output video is in landscape mode. If the captured video is in portrait mode, the output video is in portrait mode.
ORIENTATION_MODE_FIXED_LANDSCAPE | 1: In this mode, the SDK always outputs videos in landscape (horizontal) mode. If the captured video is in portrait mode, the video encoder crops it to fit the output. Applies to situations where the receiving end cannot process the rotational information. For example, CDN live streaming.
ORIENTATION_MODE_FIXED_PORTRAIT | 2: In this mode, the SDK always outputs video in portrait (portrait) mode. If the captured video is in landscape mode, the video encoder crops it to fit the output. Applies to situations where the receiving end cannot process the rotational information. For example, CDN live streaming.

## ◆ DEGRADATION_PREFERENCE

enum agora::rtc::DEGRADATION_PREFERENCE

Video degradation preferences when the bandwidth is a constraint.

Enumerator
MAINTAIN_AUTO | -1: (Default) Automatic mode. The SDK will automatically select MAINTAIN_FRAMERATE, MAINTAIN_BALANCED or MAINTAIN_RESOLUTION based on the video scenario you set, in order to achieve the best overall quality of experience (QoE).
MAINTAIN_QUALITY | 0: Prefers to reduce the video frame rate while maintaining video resolution during video encoding under limited bandwidth. This degradation preference is suitable for scenarios where video quality is prioritized.
MAINTAIN_FRAMERATE | 1: Reduces the video resolution while maintaining the video frame rate during video encoding under limited bandwidth. This degradation preference is suitable for scenarios where smoothness is prioritized and video quality is allowed to be reduced.
MAINTAIN_BALANCED | 2: Reduces the video frame rate and video resolution simultaneously during video encoding under limited bandwidth. The MAINTAIN_BALANCED has a lower reduction than MAINTAIN_QUALITY and MAINTAIN_FRAMERATE, and this preference is suitable for scenarios where both smoothness and video quality are a priority. Note The resolution of the video sent may change, so remote users need to handle this issue. See `onVideoSizeChanged`.
MAINTAIN_RESOLUTION | 3: Reduces the video frame rate while maintaining the video resolution during video encoding under limited bandwidth. This degradation preference is suitable for scenarios where video quality is prioritized.
DISABLED | 4: Disable VQC adjustion.

## ◆ SCREEN_CAPTURE_FRAMERATE_CAPABILITY

enum agora::rtc::SCREEN_CAPTURE_FRAMERATE_CAPABILITY

The highest frame rate supported by the screen sharing device.

Enumerator
SCREEN_CAPTURE_FRAMERATE_CAPABILITY_15_FPS | 0: The device supports the frame rate of up to 15 fps.
SCREEN_CAPTURE_FRAMERATE_CAPABILITY_30_FPS | 1: The device supports the frame rate of up to 30 fps.
SCREEN_CAPTURE_FRAMERATE_CAPABILITY_60_FPS | 2: The device supports the frame rate of up to 60 fps.

## ◆ VIDEO_CODEC_CAPABILITY_LEVEL

enum agora::rtc::VIDEO_CODEC_CAPABILITY_LEVEL

The level of the codec capability.

Enumerator
CODEC_CAPABILITY_LEVEL_UNSPECIFIED | -1: Unsupported video type. Currently, only H.264 and H.265 formats are supported. If the video is in another format, this value will be returned.
CODEC_CAPABILITY_LEVEL_BASIC_SUPPORT | 5: Supports encoding and decoding videos up to 1080p and 30 fps.
CODEC_CAPABILITY_LEVEL_1080P30FPS | 10: Supports encoding and decoding videos up to1080p and 30 fps.
CODEC_CAPABILITY_LEVEL_1080P60FPS | 20: Support encoding and decoding videos up to 1080p and 60 fps.
CODEC_CAPABILITY_LEVEL_4K60FPS | 30: Support encoding and decoding videos up to 4K and 30 fps.

## ◆ VIDEO_CODEC_TYPE

enum agora::rtc::VIDEO_CODEC_TYPE

Video codec types.

Enumerator
VIDEO_CODEC_NONE | 0: (Default) Unspecified codec format. The SDK automatically matches the appropriate codec format based on the current video stream's resolution and device performance.
VIDEO_CODEC_VP8 | 1: Standard VP8.
VIDEO_CODEC_H264 | 2: Standard H.264.
VIDEO_CODEC_H265 | 3: Standard H.265.
VIDEO_CODEC_GENERIC | 6: Generic. This type is used for transmitting raw video data, such as encrypted video frames. The SDK returns this type of video frames in callbacks, and you need to decode and render the frames yourself.
VIDEO_CODEC_GENERIC_H264 | 7: Generic H264. Deprecated This codec type is deprecated.
VIDEO_CODEC_AV1 | 12: AV1. @technical preview
VIDEO_CODEC_VP9 | 13: VP9.
VIDEO_CODEC_GENERIC_JPEG | 20: Generic JPEG. This type consumes minimum computing resources and applies to IoT devices.

## ◆ CAMERA_FOCAL_LENGTH_TYPE

enum agora::rtc::CAMERA_FOCAL_LENGTH_TYPE

The camera focal length types.

Note
  This enumeration class applies to Android and iOS only.

Enumerator
CAMERA_FOCAL_LENGTH_DEFAULT | 0: (Default) Standard lens.
CAMERA_FOCAL_LENGTH_WIDE_ANGLE | 1: Wide-angle lens.
CAMERA_FOCAL_LENGTH_ULTRA_WIDE | 2: Ultra-wide-angle lens.
CAMERA_FOCAL_LENGTH_TELEPHOTO | 3: (For iOS only) Telephoto lens.

## ◆ TCcMode

enum agora::rtc::TCcMode

The CC (Congestion Control) mode options.

Enumerator
CC_ENABLED | Enable CC mode.
CC_DISABLED | Disable CC mode.

## ◆ AUDIO_CODEC_TYPE

enum agora::rtc::AUDIO_CODEC_TYPE

The codec type of audio.

Enumerator
AUDIO_CODEC_OPUS | 1: OPUS.
AUDIO_CODEC_PCMA | 3: PCMA.
AUDIO_CODEC_PCMU | 4: PCMU.
AUDIO_CODEC_G722 | 5: G722.
AUDIO_CODEC_AACLC | 7: AAC. 8: LC-AAC.
AUDIO_CODEC_HEAAC | 9: HE-AAC.
AUDIO_CODEC_JC1 | 10: JC1.
AUDIO_CODEC_HEAAC2 | 11: HE-AAC v2.
AUDIO_CODEC_LPCNET | 12: LPCNET.
AUDIO_CODEC_OPUSMC | 13: Opus codec, supporting 3 to 8 channels audio.

## ◆ AUDIO_ENCODING_TYPE

enum agora::rtc::AUDIO_ENCODING_TYPE

Audio encoding type.

Enumerator
AUDIO_ENCODING_TYPE_AAC_16000_LOW | 0x010101: AAC encoding format, 16000 Hz sampling rate, bass quality. A file with an audio duration of 10 minutes is approximately 1.2 MB after encoding.
AUDIO_ENCODING_TYPE_AAC_16000_MEDIUM | 0x010102: AAC encoding format, 16000 Hz sampling rate, medium sound quality. A file with an audio duration of 10 minutes is approximately 2 MB after encoding.
AUDIO_ENCODING_TYPE_AAC_32000_LOW | 0x010201: AAC encoding format, 32000 Hz sampling rate, bass quality. A file with an audio duration of 10 minutes is approximately 1.2 MB after encoding.
AUDIO_ENCODING_TYPE_AAC_32000_MEDIUM | 0x010202: AAC encoding format, 32000 Hz sampling rate, medium sound quality. A file with an audio duration of 10 minutes is approximately 2 MB after encoding.
AUDIO_ENCODING_TYPE_AAC_32000_HIGH | 0x010203: AAC encoding format, 32000 Hz sampling rate, high sound quality. A file with an audio duration of 10 minutes is approximately 3.5 MB after encoding.
AUDIO_ENCODING_TYPE_AAC_48000_MEDIUM | 0x010302: AAC encoding format, 48000 Hz sampling rate, medium sound quality. A file with an audio duration of 10 minutes is approximately 2 MB after encoding.
AUDIO_ENCODING_TYPE_AAC_48000_HIGH | 0x010303: AAC encoding format, 48000 Hz sampling rate, high sound quality. A file with an audio duration of 10 minutes is approximately 3.5 MB after encoding.
AUDIO_ENCODING_TYPE_OPUS_16000_LOW | 0x020101: OPUS encoding format, 16000 Hz sampling rate, bass quality. A file with an audio duration of 10 minutes is approximately 2 MB after encoding.
AUDIO_ENCODING_TYPE_OPUS_16000_MEDIUM | 0x020102: OPUS encoding format, 16000 Hz sampling rate, medium sound quality. A file with an audio duration of 10 minutes is approximately 2 MB after encoding.
AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM | 0x020302: OPUS encoding format, 48000 Hz sampling rate, medium sound quality. A file with an audio duration of 10 minutes is approximately 2 MB after encoding.
AUDIO_ENCODING_TYPE_OPUS_48000_HIGH | 0x020303: OPUS encoding format, 48000 Hz sampling rate, high sound quality. A file with an audio duration of 10 minutes is approximately 3.5 MB after encoding.

## ◆ WATERMARK_FIT_MODE

enum agora::rtc::WATERMARK_FIT_MODE

The adaptation mode of the watermark.

Enumerator
FIT_MODE_COVER_POSITION | 0: Use the `positionInLandscapeMode` and `positionInPortraitMode` values you set in `WatermarkOptions`. The settings in `WatermarkRatio` are invalid.
FIT_MODE_USE_IMAGE_RATIO | 1: Use the value you set in `WatermarkRatio`. The settings in `positionInLandscapeMode` and `positionInPortraitMode` in `WatermarkOptions` are invalid.

## ◆ H264PacketizeMode

enum agora::rtc::H264PacketizeMode

Packetization modes. Applies to H.264 only.

Enumerator
NonInterleaved | Non-interleaved mode. See RFC 6184.
SingleNalUnit | Single NAL unit mode. See RFC 6184.

## ◆ VIDEO_STREAM_TYPE

enum agora::rtc::VIDEO_STREAM_TYPE

The type of video streams.

Enumerator
VIDEO_STREAM_HIGH | 0: High-quality video stream, that is, a video stream with the highest resolution and bitrate.
VIDEO_STREAM_LOW | 1: Low-quality video stream, that is, a video stream with the lowest resolution and bitrate.
VIDEO_STREAM_LAYER_1 | Video stream layer 1. The resolution of this quality level is only lower than that of VIDEO_STREAM_HIGH.
VIDEO_STREAM_LAYER_2 | 5: Video stream layer 2. The resolution of this quality level is only lower than that of VIDEO_STREAM_LAYER_1.
VIDEO_STREAM_LAYER_3 | 6: Video stream layer 3. The resolution of this quality level is only lower than that of VIDEO_STREAM_LAYER_2.
VIDEO_STREAM_LAYER_4 | 7: Video stream layer 4. The resolution of this quality level is only lower than that of VIDEO_STREAM_LAYER_3.
VIDEO_STREAM_LAYER_5 | 8: Video stream layer 5. The resolution of this quality level is only lower than that of VIDEO_STREAM_LAYER_4.
VIDEO_STREAM_LAYER_6 | 9: Video stream layer 6. The resolution of this quality level is only lower than that of VIDEO_STREAM_LAYER_5.

## ◆ MAX_USER_ACCOUNT_LENGTH_TYPE

enum agora::rtc::MAX_USER_ACCOUNT_LENGTH_TYPE

The maximum length of the user account.

Enumerator
MAX_USER_ACCOUNT_LENGTH | The maximum length of the user account is 256 bytes.

## ◆ COMPRESSION_PREFERENCE

enum agora::rtc::COMPRESSION_PREFERENCE

Compression preference for video encoding.

Enumerator
PREFER_COMPRESSION_AUTO | -1: (Default) Automatic mode. The SDK will automatically select PREFER_LOW_LATENCY or PREFER_QUALITY based on the video scenario you set to achieve the best user experience.
PREFER_LOW_LATENCY | 0: Low latency preference. The SDK compresses video frames to reduce latency. This preference is suitable for scenarios where smoothness is prioritized and reduced video quality is acceptable.
PREFER_QUALITY | 1: High quality preference. The SDK compresses video frames while maintaining video quality. This preference is suitable for scenarios where video quality is prioritized.

## ◆ ENCODING_PREFERENCE

enum agora::rtc::ENCODING_PREFERENCE

Video encoder preference.

Enumerator
PREFER_AUTO | -1: Adaptive preference. The SDK automatically selects the optimal encoding type for encoding based on factors such as platform and device type.
PREFER_SOFTWARE | 0: Software coding preference. The SDK prefers software encoders for video encoding.
PREFER_HARDWARE | 1: Hardware encoding preference. The SDK prefers a hardware encoder for video encoding. When the device does not support hardware encoding, the SDK automatically uses software encoding and reports the currently used video encoder type through `hwEncoderAccelerating` in the `onLocalVideoStats` callback.

## ◆ VIDEO_MIRROR_MODE_TYPE

enum agora::rtc::VIDEO_MIRROR_MODE_TYPE

Video mirror mode.

Enumerator
VIDEO_MIRROR_MODE_AUTO | 0: The SDK determines the mirror mode. For the mirror mode of the local video view: If you use a front camera, the SDK enables the mirror mode by default; if you use a rear camera, the SDK disables the mirror mode by default. For the remote user: The mirror mode is disabled by default.
VIDEO_MIRROR_MODE_ENABLED | 1: Enable mirror mode.
VIDEO_MIRROR_MODE_DISABLED | 2: Disable mirror mode.

## ◆ CAMERA_FORMAT_TYPE

enum agora::rtc::CAMERA_FORMAT_TYPE

Camera capturer configuration for format type.

Enumerator
CAMERA_FORMAT_NV12 | 0: (Default) NV12.
CAMERA_FORMAT_BGRA | 1: BGRA.

## ◆ VIDEO_MODULE_TYPE

enum agora::rtc::VIDEO_MODULE_TYPE

Enumerator
VIDEO_MODULE_CAPTURER | Video capture module
VIDEO_MODULE_SOFTWARE_ENCODER | Video software encoder module
VIDEO_MODULE_HARDWARE_ENCODER | Video hardware encoder module
VIDEO_MODULE_SOFTWARE_DECODER | Video software decoder module
VIDEO_MODULE_HARDWARE_DECODER | Video hardware decoder module
VIDEO_MODULE_RENDERER | Video render module

## ◆ HDR_CAPABILITY

enum agora::rtc::HDR_CAPABILITY

Enumerator
HDR_CAPABILITY_UNKNOWN | The result of static check is not reliable, by defualt
HDR_CAPABILITY_UNSUPPORTED | The module you query doesn't support HDR
HDR_CAPABILITY_SUPPORTED | The module you query supports HDR

## ◆ CODEC_CAP_MASK

enum agora::rtc::CODEC_CAP_MASK

The bit mask of the codec type.

Enumerator
CODEC_CAP_MASK_NONE | (0): The device does not support encoding or decoding.
CODEC_CAP_MASK_HW_DEC | (1 << 0): The device supports hardware decoding.
CODEC_CAP_MASK_HW_ENC | (1 << 1): The device supports hardware encoding.
CODEC_CAP_MASK_SW_DEC | (1 << 2): The device supports software decoding.
CODEC_CAP_MASK_SW_ENC | (1 << 3): The device supports software ecoding.

## ◆ SIMULCAST_STREAM_MODE

enum agora::rtc::SIMULCAST_STREAM_MODE

The mode in which the video stream is sent.

Enumerator
AUTO_SIMULCAST_STREAM | -1: By default, do not send the low-quality video stream until a subscription request for the low-quality video stream is received from the receiving end, then automatically start sending low-quality video stream.
DISABLE_SIMULCAST_STREAM | 0: Never send low-quality video stream.
ENABLE_SIMULCAST_STREAM | 1: Always send low-quality video stream.

## ◆ WATERMARK_SOURCE_TYPE

enum agora::rtc::WATERMARK_SOURCE_TYPE

Type of watermark source.

Since
  4.6.0

Enumerator
IMAGE | (0): The watermark source is an image.
BUFFER | (1): The watermark source is a buffer.
LITERAL | 2: The watermark source is a literal. Note This is only supported in linux platform.
TIMESTAMPS | 3: The watermark source is a timestamp. Note This is only supported in linux platform.

## ◆ MultipathMode

enum agora::rtc::MultipathMode

The transmission mode of data over multiple network paths.

Since
  4.6.0

Enumerator
Duplicate | Duplicate mode, the same piece of data is redundantly transmitted over all available paths. @technical preview
Dynamic | (1): Dynamic transmission mode. The SDK dynamically selects the optimal path for data transmission based on the current network conditions to improve transmission performance.

## ◆ MultipathType

enum agora::rtc::MultipathType

Network path types used in multipath transmission.

Since
  4.6.0

Enumerator
LAN | (0): Local Area Network (LAN) path.
WIFI | (1): Wi-Fi path.
Mobile | (2): Mobile network path.
Unknown | (99): Unknown or unspecified network path.

## ◆ CLIENT_ROLE_TYPE

enum agora::rtc::CLIENT_ROLE_TYPE

The user role in the interactive live streaming.

Enumerator
CLIENT_ROLE_BROADCASTER | 1: Host. A host can both send and receive streams.
CLIENT_ROLE_AUDIENCE | 2: (Default) Audience. An audience member can only receive streams.

## ◆ QUALITY_ADAPT_INDICATION

enum agora::rtc::QUALITY_ADAPT_INDICATION

Quality change of the local video in terms of target frame rate and target bit rate since last count.

Enumerator
ADAPT_NONE | 0: The local video quality stays the same.
ADAPT_UP_BANDWIDTH | 1: The local video quality improves because the network bandwidth increases.
ADAPT_DOWN_BANDWIDTH | 2: The local video quality deteriorates because the network bandwidth decreases.

## ◆ AUDIENCE_LATENCY_LEVEL_TYPE

enum agora::rtc::AUDIENCE_LATENCY_LEVEL_TYPE

The latency level of an audience member in interactive live streaming. This enum takes effect only when the user role is set to CLIENT_ROLE_AUDIENCE .

Enumerator
AUDIENCE_LATENCY_LEVEL_LOW_LATENCY | 1: Low latency.
AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY | 2: (Default) Ultra low latency.

## ◆ EXPERIENCE_QUALITY_TYPE

enum agora::rtc::EXPERIENCE_QUALITY_TYPE

The Quality of Experience (QoE) of the local user when receiving a remote audio stream.

Enumerator
EXPERIENCE_QUALITY_GOOD | 0: The QoE of the local user is good.
EXPERIENCE_QUALITY_BAD | 1: The QoE of the local user is poor.

## ◆ EXPERIENCE_POOR_REASON

enum agora::rtc::EXPERIENCE_POOR_REASON

Reasons why the QoE of the local user when receiving a remote audio stream is poor.

Enumerator
EXPERIENCE_REASON_NONE | 0: No reason, indicating a good QoE of the local user.
REMOTE_NETWORK_QUALITY_POOR | 1: The remote user's network quality is poor.
LOCAL_NETWORK_QUALITY_POOR | 2: The local user's network quality is poor.
WIRELESS_SIGNAL_POOR | 4: The local user's Wi-Fi or mobile network signal is weak.
WIFI_BLUETOOTH_COEXIST | 8: The local user enables both Wi-Fi and bluetooth, and their signals interfere with each other. As a result, audio transmission quality is undermined.

## ◆ AUDIO_AINS_MODE

enum agora::rtc::AUDIO_AINS_MODE

AI noise suppression modes.

Enumerator
AINS_MODE_BALANCED | 0: (Default) Balance mode. This mode allows for a balanced performance on noice suppression and time delay.
AINS_MODE_AGGRESSIVE | 1: Aggressive mode. In scenarios where high performance on noise suppression is required, such as live streaming outdoor events, this mode reduces nosie more dramatically, but may sometimes affect the original character of the audio.
AINS_MODE_ULTRALOWLATENCY | 2: Aggressive mode with low latency. The noise suppression delay of this mode is about only half of that of the balance and aggressive modes. It is suitable for scenarios that have high requirements on noise suppression with low latency, such as sing together online in real time.

## ◆ AUDIO_PROFILE_TYPE

enum agora::rtc::AUDIO_PROFILE_TYPE

The audio profile.

Enumerator
AUDIO_PROFILE_DEFAULT | 0: The default audio profile. For the interactive streaming profile: A sample rate of 48 kHz, music encoding, mono, and a bitrate of up to 64 Kbps. For the communication profile: Windows: A sample rate of 16 kHz, audio encoding, mono, and a bitrate of up to 16 Kbps. Android/macOS/iOS: A sample rate of 32 kHz, audio encoding, mono, and a bitrate of up to 18 Kbps.
AUDIO_PROFILE_SPEECH_STANDARD | 1: A sample rate of 32 kHz, audio encoding, mono, and a bitrate of up to 18 Kbps.
AUDIO_PROFILE_MUSIC_STANDARD | 2: A sample rate of 48 kHz, music encoding, mono, and a bitrate of up to 64 Kbps.
AUDIO_PROFILE_MUSIC_STANDARD_STEREO | 3: A sample rate of 48 kHz, music encoding, stereo, and a bitrate of up to 80 Kbps. To implement stereo audio, you also need to call `setAdvancedAudioOptions` and set `audioProcessingChannels` to `AUDIO_PROCESSING_STEREO` in `AdvancedAudioOptions`.
AUDIO_PROFILE_MUSIC_HIGH_QUALITY | 4: A sample rate of 48 kHz, music encoding, mono, and a bitrate of up to 96 Kbps.
AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO | 5: A sample rate of 48 kHz, music encoding, stereo, and a bitrate of up to 128 Kbps. To implement stereo audio, you also need to call `setAdvancedAudioOptions` and set `audioProcessingChannels` to `AUDIO_PROCESSING_STEREO` in `AdvancedAudioOptions`.
AUDIO_PROFILE_IOT | 6: A sample rate of 16 kHz, audio encoding, mono, and Acoustic Echo Cancellation (AEC) enabled.
AUDIO_PROFILE_NUM | Enumerator boundary.

## ◆ AUDIO_SCENARIO_TYPE

enum agora::rtc::AUDIO_SCENARIO_TYPE

The audio scenarios.

Enumerator
AUDIO_SCENARIO_DEFAULT | 0: (Default) Automatic scenario match, where the SDK chooses the appropriate audio quality according to the user role and audio route.
AUDIO_SCENARIO_GAME_STREAMING | 3: High-quality audio scenario, where users mainly play music. For example, instrument tutoring.
AUDIO_SCENARIO_CHATROOM | 5: Chatroom scenario, where users need to frequently switch the user role or mute and unmute the microphone. For example, education scenarios.
AUDIO_SCENARIO_CHORUS | 7: Real-time chorus scenario, where users have good network conditions and require ultra-low latency.
AUDIO_SCENARIO_MEETING | 8: Meeting scenario that mainly contains the human voice.
AUDIO_SCENARIO_AI_SERVER | 9: AI Server. @technical preview
AUDIO_SCENARIO_AI_CLIENT | 10: AI conversation scenario, which is only applicable to scenarios where the user interacts with the conversational AI agent created by `Conversational AI Engine`.
AUDIO_SCENARIO_NUM | The number of enumerations.

## ◆ VIDEO_CONTENT_HINT

enum agora::rtc::VIDEO_CONTENT_HINT

The content hint for screen sharing.

Enumerator
CONTENT_HINT_NONE | (Default) No content hint.
CONTENT_HINT_MOTION | Motion-intensive content. Choose this option if you prefer smoothness or when you are sharing a video clip, movie, or video game.
CONTENT_HINT_DETAILS | Motionless content. Choose this option if you prefer sharpness or when you are sharing a picture, PowerPoint slides, or texts.

## ◆ SCREEN_SCENARIO_TYPE

enum agora::rtc::SCREEN_SCENARIO_TYPE

The screen sharing scenario.

Enumerator
SCREEN_SCENARIO_DOCUMENT | 1: (Default) Document. This scenario prioritizes the video quality of screen sharing and reduces the latency of the shared video for the receiver. If you share documents, slides, and tables, you can set this scenario.
SCREEN_SCENARIO_GAMING | 2: Game. This scenario prioritizes the smoothness of screen sharing. If you share games, you can set this scenario.
SCREEN_SCENARIO_VIDEO | 3: Video. This scenario prioritizes the smoothness of screen sharing. If you share movies or live videos, you can set this scenario.
SCREEN_SCENARIO_RDC | 4: Remote control. This scenario prioritizes the video quality of screen sharing and reduces the latency of the shared video for the receiver. If you share the device desktop being remotely controlled, you can set this scenario.

## ◆ VIDEO_APPLICATION_SCENARIO_TYPE

enum agora::rtc::VIDEO_APPLICATION_SCENARIO_TYPE

The video application scenarios.

Enumerator
APPLICATION_SCENARIO_GENERAL | 0: (Default) The general scenario.
APPLICATION_SCENARIO_MEETING | 1: The meeting scenario. `APPLICATION_SCENARIO_MEETING` (1) is suitable for meeting scenarios. The SDK automatically enables the following strategies: In meeting scenarios where low-quality video streams are required to have a high bitrate, the SDK automatically enables multiple technologies used to deal with network congestions, to enhance the performance of the low-quality streams and to ensure the smooth reception by subscribers. The SDK monitors the number of subscribers to the high-quality video stream in real time and dynamically adjusts its configuration based on the number of subscribers. If nobody subscribers to the high-quality stream, the SDK automatically reduces its bitrate and frame rate to save upstream bandwidth. If someone subscribes to the high-quality stream, the SDK resets the high-quality stream to the `VideoEncoderConfiguration` configuration used in the most recent calling of `setVideoEncoderConfiguration`. If no configuration has been set by the user previously, the following values are used: Resolution: (Windows and macOS) 1280 × 720; (Android and iOS) 960 × 540 Frame rate: 15 fps Bitrate: (Windows and macOS) 1600 Kbps; (Android and iOS) 1000 Kbps The SDK monitors the number of subscribers to the low-quality video stream in real time and dynamically enables or disables it based on the number of subscribers. If nobody subscribes to the low-quality stream, the SDK automatically disables it to save upstream bandwidth. If someone subscribes to the low-quality stream, the SDK enables the low-quality stream and resets it to the `SimulcastStreamConfig` configuration used in the most recent calling of `setDualStreamMode(SIMULCAST_STREAM_MODE mode, const SimulcastStreamConfig& streamConfig)`. If no configuration has been set by the user previously, the following values are used: Resolution: 480 × 272 Frame rate: 15 fps Bitrate: 500 Kbps Note If the user has called `setDualStreamMode(SIMULCAST_STREAM_MODE mode, const SimulcastStreamConfig& streamConfig)` to set that never send low-quality video stream ( `DISABLE_SIMULCAST_STREAM` ), the dynamic adjustment of the low-quality stream in meeting scenarios will not take effect.
APPLICATION_SCENARIO_1V1 | 2: 1v1 video call scenario. `APPLICATION_SCENARIO_1V1` (2) This is applicable to the `one to one live` scenario. To meet the requirements for low latency and high-quality video in this scenario, the SDK optimizes its strategies, improving performance in terms of video quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under weak network conditions. Note This enumeration value is only applicable to the broadcaster vs. broadcaster scenario.
APPLICATION_SCENARIO_LIVESHOW | Live show scenario. `APPLICATION_SCENARIO_LIVESHOW` (3) This is applicable to the `show room` scenario. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, including automatically enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to call `enableInstantMediaRendering` ), and B-frame encoding to achieve better image quality and bandwidth efficiency. The SDK also provides enhanced video quality and smooth playback, even in poor network conditions or on lower-end devices.

## ◆ VIDEO_QOE_PREFERENCE_TYPE

enum agora::rtc::VIDEO_QOE_PREFERENCE_TYPE

The video QoE preference type.

Enumerator
VIDEO_QOE_PREFERENCE_BALANCE | 1: Default QoE type, balance the delay, picture quality and fluency.
VIDEO_QOE_PREFERENCE_DELAY_FIRST | 2: lower the e2e delay.
VIDEO_QOE_PREFERENCE_PICTURE_QUALITY_FIRST | 3: picture quality.
VIDEO_QOE_PREFERENCE_FLUENCY_FIRST | 4: more fluency.

## ◆ CAPTURE_BRIGHTNESS_LEVEL_TYPE

enum agora::rtc::CAPTURE_BRIGHTNESS_LEVEL_TYPE

The brightness level of the video image captured by the local camera.

Enumerator
CAPTURE_BRIGHTNESS_LEVEL_INVALID | -1: The SDK does not detect the brightness level of the video image. Wait a few seconds to get the brightness level from `captureBrightnessLevel` in the next callback.
CAPTURE_BRIGHTNESS_LEVEL_NORMAL | 0: The brightness level of the video image is normal.
CAPTURE_BRIGHTNESS_LEVEL_BRIGHT | 1: The brightness level of the video image is too bright.
CAPTURE_BRIGHTNESS_LEVEL_DARK | 2: The brightness level of the video image is too dark.

## ◆ CAMERA_STABILIZATION_MODE

enum agora::rtc::CAMERA_STABILIZATION_MODE

Camera stabilization modes.

The camera stabilization effect increases in the order of 1 < 2 < 3, and the latency will also increase accordingly.

Enumerator
CAMERA_STABILIZATION_MODE_OFF | -1: (Default) Camera stabilization mode off.
CAMERA_STABILIZATION_MODE_AUTO | 0: Automatic camera stabilization. The system automatically selects a stabilization mode based on the status of the camera. However, the latency is relatively high in this mode, so it is recommended not to use this enumeration.
CAMERA_STABILIZATION_MODE_LEVEL_1 | 1: (Recommended) Level 1 camera stabilization.
CAMERA_STABILIZATION_MODE_LEVEL_2 | 2: Level 2 camera stabilization.
CAMERA_STABILIZATION_MODE_LEVEL_3 | 3: Level 3 camera stabilization.
CAMERA_STABILIZATION_MODE_MAX_LEVEL | The maximum level of the camera stabilization mode.

## ◆ LOCAL_AUDIO_STREAM_STATE

enum agora::rtc::LOCAL_AUDIO_STREAM_STATE

The state of the local audio.

Enumerator
LOCAL_AUDIO_STREAM_STATE_STOPPED | 0: The local audio is in the initial state.
LOCAL_AUDIO_STREAM_STATE_RECORDING | 1: The local audio capturing 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.

## ◆ LOCAL_AUDIO_STREAM_REASON

enum agora::rtc::LOCAL_AUDIO_STREAM_REASON

Reasons for local audio state changes.

Enumerator
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. Remind your users to try to rejoin the channel.
LOCAL_AUDIO_STREAM_REASON_DEVICE_NO_PERMISSION | 2: No permission to use the local audio capturing device. Remind your users to grant permission.
LOCAL_AUDIO_STREAM_REASON_DEVICE_BUSY | 3: (Android and iOS only) The local audio capture device is already in use. Remind your users to check whether another application occupies the microphone. Local audio capture automatically resumes after the microphone is idle for about five seconds. You can also try to rejoin the channel after the microphone is idle.
LOCAL_AUDIO_STREAM_REASON_RECORD_FAILURE | 4: The local audio capture fails.
LOCAL_AUDIO_STREAM_REASON_ENCODE_FAILURE | 5: The local audio encoding fails.
LOCAL_AUDIO_STREAM_REASON_NO_RECORDING_DEVICE | 6: (Windows and macOS only) No local audio capture device. Remind your users to check whether the microphone is connected to the device properly in the control panel of the device or if the microphone is working properly.
LOCAL_AUDIO_STREAM_REASON_NO_PLAYOUT_DEVICE | 7: (Windows and macOS only) No local audio capture device. Remind your users to check whether the speaker is connected to the device properly in the control panel of the device or if the speaker is working properly.
LOCAL_AUDIO_STREAM_REASON_INTERRUPTED | 8: (Android and iOS only) The local audio capture is interrupted by a system call, smart assistants, or alarm clock. Prompt your users to end the phone call, smart assistants, or alarm clock if the local audio capture is required.
LOCAL_AUDIO_STREAM_REASON_RECORD_INVALID_ID | 9: (Windows only) The ID of the local audio-capture device is invalid. Prompt the user to check the audio capture device ID.
LOCAL_AUDIO_STREAM_REASON_PLAYOUT_INVALID_ID | 10: (Windows only) The ID of the local audio-playback device is invalid. Prompt the user to check the audio playback device ID.

## ◆ LOCAL_VIDEO_STREAM_STATE

enum agora::rtc::LOCAL_VIDEO_STREAM_STATE

Local video state types.

Enumerator
LOCAL_VIDEO_STREAM_STATE_STOPPED | 0: The local video is in the initial state.
LOCAL_VIDEO_STREAM_STATE_CAPTURING | 1: The local video capturing device starts successfully. The SDK also reports this state when you call `startScreenCaptureByWindowId` to share a maximized window.
LOCAL_VIDEO_STREAM_STATE_ENCODING | 2: The first video frame is successfully encoded.
LOCAL_VIDEO_STREAM_STATE_FAILED | 3: Fails to start the local video.

## ◆ LOCAL_VIDEO_EVENT_TYPE

enum agora::rtc::LOCAL_VIDEO_EVENT_TYPE

The local video event type.

Since
  v4.6.1

Enumerator
LOCAL_VIDEO_EVENT_TYPE_SCREEN_CAPTURE_WINDOW_HIDDEN | 1: (Android only) The screen capture window is hidden.
LOCAL_VIDEO_EVENT_TYPE_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN | 2: (Android only) The screen capture window is recovered from hidden.
LOCAL_VIDEO_EVENT_TYPE_SCREEN_CAPTURE_STOPPED_BY_USER | 3: (Android only) The screen capture is stopped by user.
LOCAL_VIDEO_EVENT_TYPE_SCREEN_CAPTURE_SYSTEM_INTERNAL_ERROR | 4: (Android only) An internal error occurs during the screen capture.

## ◆ LOCAL_VIDEO_STREAM_REASON

enum agora::rtc::LOCAL_VIDEO_STREAM_REASON

Reasons for local video state changes.

Enumerator
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 capturing device. Prompt the user to grant permissions and rejoin the channel.
LOCAL_VIDEO_STREAM_REASON_DEVICE_BUSY | 3: The local video capturing device is in use. Prompt the user to check if the camera is being used by another app, or try to rejoin the channel.
LOCAL_VIDEO_STREAM_REASON_CAPTURE_FAILURE | 4: The local video capture fails. Prompt the user to check whether the video capture device is working properly, whether the camera is used by another app, or try to rejoin the channel.
LOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT | 5: The local video encoding fails.
LOCAL_VIDEO_STREAM_REASON_CAPTURE_INBACKGROUND | 6: (iOS only) The app is in the background. Prompt the user that video capture cannot be performed normally when the app is in the background.
LOCAL_VIDEO_STREAM_REASON_CAPTURE_MULTIPLE_FOREGROUND_APPS | 7: (iOS only) The current app window is running in Slide Over, Split View, or Picture in Picture mode, and another app is occupying the camera. Prompt the user that the app cannot capture video properly when it is running in Slide Over, Split View, or Picture in Picture mode and another app is occupying the camera.
LOCAL_VIDEO_STREAM_REASON_DEVICE_NOT_FOUND | 8: Fails to find a local video capture device. Remind the user to check whether the camera is connected to the device properly or the camera is working properly, and then to rejoin the channel.
LOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTED | 9: (macOS and Windows only) The video capture device currently in use is disconnected (such as being unplugged).
LOCAL_VIDEO_STREAM_REASON_DEVICE_INVALID_ID | 10: (macOS and Windows only) The SDK cannot find the video device in the video device list. Check whether the ID of the video device is valid.
LOCAL_VIDEO_STREAM_REASON_DEVICE_INTERRUPT | 14: (Android only) Video capture is interrupted. Possible reasons include the following: The camera is being used by another app. Prompt the user to check if the camera is being used by another app. The current app has been switched to the background. You can use foreground services to notify the operating system and ensure that the app can still collect video when it switches to the background.
LOCAL_VIDEO_STREAM_REASON_DEVICE_FATAL_ERROR | 15: (Android only) The video capture device encounters an error. Prompt the user to close and restart the camera to restore functionality. If this operation does not solve the problem, check if the camera has a hardware failure.
LOCAL_VIDEO_STREAM_REASON_DEVICE_SYSTEM_PRESSURE | 101: The current video capture device is unavailable due to excessive system pressure.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_MINIMIZED | 11: (macOS and Windows only) The shared window is minimized when you call the `startScreenCaptureByWindowId` method to share a window. The SDK cannot share a minimized window. Please prompt the user to unminimize the shared window.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_CLOSED | 12: (macOS and Windows only) The error code indicates that a window shared by the window ID has been closed or a full-screen window shared by the window ID has exited full-screen mode. After exiting full-screen mode, remote users cannot see the shared window. To prevent remote users from seeing a black screen, Agora recommends that you immediately stop screen sharing. Common scenarios reporting this error code: The local user closes the shared window. The local user shows some slides in full-screen mode first, and then shares the windows of the slides. After the user exits full-screen mode, the SDK reports this error code. The local user watches a web video or reads a web document in full-screen mode first, and then shares the window of the web video or document. After the user exits full-screen mode, the SDK reports this error code.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_OCCLUDED | 13: (Windows only) The window being shared is overlapped by another window, so the overlapped area is blacked out by the SDK during window sharing.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_NOT_SUPPORTED | 20: The local screen capture window is not supported.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_FAILURE | 21: (Windows and Android only) The currently captured window has no data.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_NO_PERMISSION | 22: (Windows and macOS only) No permission for screen capture.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_AUTO_FALLBACK | 24: (Windows only) An unexpected error occurred during screen sharing (possibly due to window blocking failure), resulting in decreased performance, but the screen sharing process itself was not affected. Note During screen sharing, if blocking a specific window fails due to device driver issues, the SDK will report this event and automatically fall back to sharing the entire screen. If your use case requires masking specific windows to protect privacy, we recommend listening for this event and implementing additional privacy protection mechanisms when it is triggered.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_HIDDEN | 25: (Windows only) The window for the current screen capture is hidden and not visible on the current screen.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN | 26: (Windows only) The window for screen capture has been restored from hidden state.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED | 27: (macOS and Windows only) The window for screen capture has been restored from the minimized state.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_PAUSED | 28: (Windows only) Screen capture has been paused. Common scenarios reporting this error code: The current screen may have been switched to a secure desktop, such as a UAC dialog box or Winlogon desktop.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_RESUMED | 29: (Windows only) Screen capture has resumed from paused state.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTED | 30: (Windows and macOS only) The displayer used for screen capture is disconnected. The current screen sharing has been paused. Prompt the user to restart the screen sharing.
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_STOPPED_BY_USER |
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_INTERRUPTED_BY_OTHER |
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_STOPPED_BY_CALL |
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_EXCLUDE_WINDOW_FAILED | 34: (Windows only) Some windows of the exclude window list failed to be excluded from the screen capture.

## ◆ REMOTE_AUDIO_STATE

enum agora::rtc::REMOTE_AUDIO_STATE

Remote audio states.

Enumerator
REMOTE_AUDIO_STATE_STOPPED | 0: The local audio is in the initial state. The SDK reports this state in the case of `REMOTE_AUDIO_REASON_LOCAL_MUTED`, `REMOTE_AUDIO_REASON_REMOTE_MUTED` or `REMOTE_AUDIO_REASON_REMOTE_OFFLINE`.
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. The SDK reports this state in the case of `REMOTE_AUDIO_REASON_NETWORK_RECOVERY`, `REMOTE_AUDIO_REASON_LOCAL_UNMUTED` or `REMOTE_AUDIO_REASON_REMOTE_UNMUTED`.
REMOTE_AUDIO_STATE_FROZEN | 3: The remote audio is frozen. The SDK reports this state in the case of `REMOTE_AUDIO_REASON_NETWORK_CONGESTION`.
REMOTE_AUDIO_STATE_FAILED | 4: The remote audio fails to start. The SDK reports this state in the case of `REMOTE_AUDIO_REASON_INTERNAL`.

## ◆ REMOTE_AUDIO_STATE_REASON

enum agora::rtc::REMOTE_AUDIO_STATE_REASON

The reason for the remote audio state change.

Enumerator
REMOTE_AUDIO_REASON_INTERNAL | 0: The SDK reports this reason when the audio state changes.
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.
REMOTE_AUDIO_REASON_NO_PACKET_RECEIVE | 8: The local user does not receive any audio packet from remote user.
REMOTE_AUDIO_REASON_LOCAL_PLAY_FAILED | 9: The local user receives remote audio packet but fails to play.

## ◆ REMOTE_VIDEO_STATE

enum agora::rtc::REMOTE_VIDEO_STATE

The state of the remote video stream.

Enumerator
REMOTE_VIDEO_STATE_STOPPED | 0: The remote video is in the initial state. The SDK reports this state in the case of `REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED`, `REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED`, or `REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE`.
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. The SDK reports this state in the case of `REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY`, `REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED`, `REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED`, or `REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY`.
REMOTE_VIDEO_STATE_FROZEN | 3: The remote video is frozen. The SDK reports this state in the case of `REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION` or `REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK`.
REMOTE_VIDEO_STATE_FAILED | 4: The remote video fails to start. The SDK reports this state in the case of `REMOTE_VIDEO_STATE_REASON_INTERNAL`.

## ◆ REMOTE_VIDEO_STATE_REASON

enum agora::rtc::REMOTE_VIDEO_STATE_REASON

The reason for the remote video state change.

Enumerator
REMOTE_VIDEO_STATE_REASON_INTERNAL | 0: The SDK reports this reason when the video state changes.
REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION | 1: Network congestion.
REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY | 2: Network is recovered.
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 audio-and-video stream falls back to the audio-only stream due to poor network conditions.
REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY | 9: The remote audio-only stream switches back to the audio-and-video stream after the network conditions improve.
REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_LOW | (Internal use only) 10: The remote video stream type change to low stream type
REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_HIGH | (Internal use only) 11: The remote video stream type change to high stream type
REMOTE_VIDEO_STATE_REASON_SDK_IN_BACKGROUND | 12: (iOS only) The remote user's app has switched to the background.
REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT | 13: The local video decoder does not support decoding the remote video stream.

## ◆ REMOTE_USER_STATE

enum agora::rtc::REMOTE_USER_STATE

The remote user state information.

Enumerator
USER_STATE_MUTE_AUDIO | The remote user has muted the audio.
USER_STATE_MUTE_VIDEO | The remote user has muted the video.
USER_STATE_ENABLE_VIDEO | The remote user has enabled the video, which includes video capturing and encoding.
USER_STATE_ENABLE_LOCAL_VIDEO | The remote user has enabled the local video capturing.

## ◆ REMOTE_VIDEO_DOWNSCALE_LEVEL

enum agora::rtc::REMOTE_VIDEO_DOWNSCALE_LEVEL

The downscale level of the remote video stream . The higher the downscale level, the more the video downscales.

Enumerator
REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE | No downscale.
REMOTE_VIDEO_DOWNSCALE_LEVEL_1 | Downscale level 1.
REMOTE_VIDEO_DOWNSCALE_LEVEL_2 | Downscale level 2.
REMOTE_VIDEO_DOWNSCALE_LEVEL_3 | Downscale level 3.
REMOTE_VIDEO_DOWNSCALE_LEVEL_4 | Downscale level 4.

## ◆ AUDIO_SAMPLE_RATE_TYPE

enum agora::rtc::AUDIO_SAMPLE_RATE_TYPE

The audio sampling rate of the stream to be pushed to the CDN.

Enumerator
AUDIO_SAMPLE_RATE_32000 | 32000: 32 kHz
AUDIO_SAMPLE_RATE_44100 | 44100: 44.1 kHz
AUDIO_SAMPLE_RATE_48000 | 48000: (Default) 48 kHz

## ◆ VIDEO_CODEC_TYPE_FOR_STREAM

enum agora::rtc::VIDEO_CODEC_TYPE_FOR_STREAM

The codec type of the output video.

Enumerator
VIDEO_CODEC_H264_FOR_STREAM | 1: (Default) H.264.
VIDEO_CODEC_H265_FOR_STREAM | 2: H.265.

## ◆ VIDEO_CODEC_PROFILE_TYPE

enum agora::rtc::VIDEO_CODEC_PROFILE_TYPE

Video codec profile types.

Enumerator
VIDEO_CODEC_PROFILE_BASELINE | 66: Baseline video codec profile; generally used for video calls on mobile phones.
VIDEO_CODEC_PROFILE_MAIN | 77: Main video codec profile; generally used in mainstream electronics such as MP4 players, portable video players, PSP, and iPads.
VIDEO_CODEC_PROFILE_HIGH | 100: (Default) High video codec profile; generally used in high-resolution live streaming or television.

## ◆ AUDIO_CODEC_PROFILE_TYPE

enum agora::rtc::AUDIO_CODEC_PROFILE_TYPE

Self-defined audio codec profile.

Enumerator
AUDIO_CODEC_PROFILE_LC_AAC | 0: (Default) LC-AAC.
AUDIO_CODEC_PROFILE_HE_AAC | 1: HE-AAC.
AUDIO_CODEC_PROFILE_HE_AAC_V2 | 2: HE-AAC v2.

## ◆ RTMP_STREAM_PUBLISH_STATE

enum agora::rtc::RTMP_STREAM_PUBLISH_STATE

States of the Media Push.

Enumerator
RTMP_STREAM_PUBLISH_STATE_IDLE | 0: The Media Push has not started or has ended.
RTMP_STREAM_PUBLISH_STATE_CONNECTING | 1: The streaming server and CDN server are being connected.
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 tries 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. If you feel that 60 seconds is too long, you can also actively try to reconnect.
RTMP_STREAM_PUBLISH_STATE_FAILURE | 4: The RTMP or RTMPS streaming fails. After a failure, you can troubleshoot the cause of the error through the returned error code.
RTMP_STREAM_PUBLISH_STATE_DISCONNECTING | 5: The SDK is disconnecting from the Agora streaming server and CDN. When you call `stopRtmpStream` to stop the Media Push normally, the SDK reports the Media Push state as `RTMP_STREAM_PUBLISH_STATE_DISCONNECTING` and `RTMP_STREAM_PUBLISH_STATE_IDLE` in sequence.

## ◆ RTMP_STREAM_PUBLISH_REASON

enum agora::rtc::RTMP_STREAM_PUBLISH_REASON

Reasons for changes in the status of RTMP or RTMPS streaming.

Enumerator
RTMP_STREAM_PUBLISH_REASON_OK | 0: The RTMP or RTMPS streaming has not started or has ended.
RTMP_STREAM_PUBLISH_REASON_INVALID_ARGUMENT | 1: Invalid argument used. Check the parameter setting.
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.
RTMP_STREAM_PUBLISH_REASON_INTERNAL_SERVER_ERROR | 4: An error occurs in Agora's streaming server.
RTMP_STREAM_PUBLISH_REASON_RTMP_SERVER_ERROR | 5: An error occurs in the CDN server.
RTMP_STREAM_PUBLISH_REASON_TOO_OFTEN | 6: The RTMP or RTMPS streaming publishes too frequently.
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. For example, the host updates or stops other hosts' streams. Check your app logic.
RTMP_STREAM_PUBLISH_REASON_STREAM_NOT_FOUND | 9: Agora's server fails to find the RTMP or RTMPS streaming.
RTMP_STREAM_PUBLISH_REASON_FORMAT_NOT_SUPPORTED | 10: The format of the RTMP or RTMPS 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` 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.
RTMP_STREAM_PUBLISH_REASON_INVALID_PRIVILEGE | 16: Your project does not have permission to use streaming services.
RTMP_STREAM_UNPUBLISH_REASON_OK | 100: The streaming has been stopped normally. After you stop the Media Push, the SDK returns this value.

## ◆ RTMP_STREAMING_EVENT

enum agora::rtc::RTMP_STREAMING_EVENT

Events during the Media Push.

Enumerator
RTMP_STREAMING_EVENT_FAILED_LOAD_IMAGE | 1: An error occurs when you add a background image or a watermark image in the Media Push.
RTMP_STREAMING_EVENT_URL_ALREADY_IN_USE | 2: The streaming URL is already being used for Media Push. If you want to start new streaming, use a new streaming URL.
RTMP_STREAMING_EVENT_ADVANCED_FEATURE_NOT_SUPPORT | 3: The feature is not supported.
RTMP_STREAMING_EVENT_REQUEST_TOO_OFTEN | 4: Reserved.

## ◆ CONNECTION_STATE_TYPE

enum agora::rtc::CONNECTION_STATE_TYPE

Connection states.

Enumerator
CONNECTION_STATE_DISCONNECTED | 1: The SDK is disconnected from the Agora edge server. The state indicates the SDK is in one of the following phases: Theinitial state before calling the `joinChannel(const char* token, const char* channelId, uid_t uid, const ChannelMediaOptions& options)` method. The app calls the `leaveChannel()` method.
CONNECTION_STATE_CONNECTING | 2: The SDK is connecting to the Agora edge server. This state indicates that the SDK is establishing a connection with the specified channel after the app calls `joinChannel(const char* token, const char* channelId, uid_t uid, const ChannelMediaOptions& options)`. If the SDK successfully joins the channel, it triggers the `onConnectionStateChanged` callback and the connection state switches to CONNECTION_STATE_CONNECTED. After the connection is established, the SDK also initializes the media and triggers `onJoinChannelSuccess` when everything is ready.
CONNECTION_STATE_CONNECTED | 3: The SDK is connected to the Agora edge server. This state also indicates that the user has joined a channel and can now publish or subscribe to a media stream in the channel. If the connection to the channel is lost because, for example, if the network is down or switched, the SDK automatically tries to reconnect and triggers `onConnectionStateChanged` callback, notifying that the current network state becomes CONNECTION_STATE_RECONNECTING.
CONNECTION_STATE_RECONNECTING | 4: The SDK keeps reconnecting to the Agora edge server. The SDK keeps rejoining the channel after being disconnected from a joined channel because of network issues. If the SDK cannot rejoin the channel within 10 seconds, it triggers `onConnectionLost`, stays in the CONNECTION_STATE_RECONNECTING state, and keeps rejoining the channel. If the SDK fails to rejoin the channel 20 minutes after being disconnected from the Agora edge server, the SDK triggers the `onConnectionStateChanged` callback, switches to the CONNECTION_STATE_FAILED state, and stops rejoining the channel.
CONNECTION_STATE_FAILED | 5: The SDK fails to connect to the Agora edge server or join the channel. This state indicates that the SDK stops trying to rejoin the channel. You must call `leaveChannel()` to leave the channel. You can call `joinChannel(const char* token, const char* channelId, uid_t uid, const ChannelMediaOptions& options)` to rejoin the channel. If the SDK is banned from joining the channel by the Agora edge server through the RESTful API, the SDK triggers the `onConnectionStateChanged` callback.

## ◆ VIDEO_TRANSCODER_ERROR

enum agora::rtc::VIDEO_TRANSCODER_ERROR

The error code of the local video mixing failure.

Enumerator
VT_ERR_VIDEO_SOURCE_NOT_READY | 1: The selected video source has not started video capture. You need to create a video track for it and start video capture.
VT_ERR_INVALID_VIDEO_SOURCE_TYPE | 2: The video source type is invalid. You need to re-specify the supported video source type.
VT_ERR_INVALID_IMAGE_PATH | 3: The image path is invalid. You need to re-specify the correct image path.
VT_ERR_UNSUPPORT_IMAGE_FORMAT | 4: The image format is invalid. Make sure the image format is one of PNG, JPEG, or GIF.
VT_ERR_INVALID_LAYOUT | 5: The video encoding resolution after video mixing is invalid.
VT_ERR_INTERNAL | 20: Unknown internal error.

## ◆ LASTMILE_PROBE_RESULT_STATE

enum agora::rtc::LASTMILE_PROBE_RESULT_STATE

The status of the last-mile probe test.

Enumerator
LASTMILE_PROBE_RESULT_COMPLETE | 1: The last-mile network probe test is complete.
LASTMILE_PROBE_RESULT_INCOMPLETE_NO_BWE | 2: The last-mile network probe test is incomplete because the bandwidth estimation is not available due to limited test resources. One possible reason is that testing resources are temporarily limited.
LASTMILE_PROBE_RESULT_UNAVAILABLE | 3: The last-mile network probe test is not carried out. Probably due to poor network conditions.

## ◆ CONNECTION_CHANGED_REASON_TYPE

enum agora::rtc::CONNECTION_CHANGED_REASON_TYPE

Reasons causing the change of the connection state.

Enumerator
CONNECTION_CHANGED_CONNECTING | 0: The SDK is connecting to the Agora edge server.
CONNECTION_CHANGED_JOIN_SUCCESS | 1: The SDK has joined the channel successfully.
CONNECTION_CHANGED_INTERRUPTED | 2: The connection between the SDK and the Agora edge server is interrupted.
CONNECTION_CHANGED_BANNED_BY_SERVER | 3: The connection between the SDK and the Agora edge server is banned by the Agora edge server. For example, when a user is kicked out of the channel, this status will be returned.
CONNECTION_CHANGED_JOIN_FAILED | 4: The SDK fails to join the channel. When the SDK fails to join the channel for more than 20 minutes, this code will be returned and the SDK stops reconnecting to the channel. You need to prompt the user to try to switch to another network and rejoin the channel.
CONNECTION_CHANGED_LEAVE_CHANNEL | 5: The SDK has left the channel.
CONNECTION_CHANGED_INVALID_APP_ID | 6: The App ID is invalid. You need to rejoin the channel with a valid APP ID and make sure the App ID you are using is consistent with the one generated in the Agora Console.
CONNECTION_CHANGED_INVALID_CHANNEL_NAME | 7: Invalid channel name. Rejoin the channel with a valid channel name. A valid channel name is a string of up to 64 bytes in length. Supported characters (89 characters in total): All lowercase English letters: a to z. All uppercase English letters: A to Z. All numeric characters: 0 to 9. "!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "=", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", ","
CONNECTION_CHANGED_INVALID_TOKEN | 8: Invalid token. Possible reasons are as follows: The App Certificate for the project is enabled in Agora Console, but you do not pass in a token when joining a channel. The uid specified when calling `joinChannel(const char* token, const char* channelId, uid_t uid, const ChannelMediaOptions& options)` to join the channel is inconsistent with the uid passed in when generating the token. The generated token and the token used to join the channel are not consistent. Ensure the following: When your project enables App Certificate, you need to pass in a token to join a channel. The user ID specified when generating the token is consistent with the user ID used when joining the channel. The generated token is the same as the token passed in to join the channel.
CONNECTION_CHANGED_TOKEN_EXPIRED | 9: The token currently being used has expired. You need to generate a new token on your server and rejoin the channel with the new token.
CONNECTION_CHANGED_REJECTED_BY_SERVER | 10: The connection is rejected by server. Possible reasons are as follows: The user is already in the channel and still calls a method, for example, `joinChannel(const char* token, const char* channelId, uid_t uid, const ChannelMediaOptions& options)`, to join the channel. Stop calling this method to clear this error. The user tries to join a channel while a test call is in progress. The user needs to join the channel after the call test ends.
CONNECTION_CHANGED_SETTING_PROXY_SERVER | 11: The connection state changed to reconnecting because the SDK has set a proxy server.
CONNECTION_CHANGED_RENEW_TOKEN | 12: The connection state changed because the token is renewed.
CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED | 13: Client IP address changed. If you receive this code multiple times, You need to prompt the user to switch networks and try joining the channel again.
CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT | 14: Timeout for the keep-alive of the connection between the SDK and the Agora edge server. The SDK tries to reconnect to the server automatically.
CONNECTION_CHANGED_REJOIN_SUCCESS | 15: The user has rejoined the channel successfully.
CONNECTION_CHANGED_LOST | 16: The connection between the SDK and the server is lost.
CONNECTION_CHANGED_ECHO_TEST | 17: The connection state changes due to the echo test.
CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED_BY_USER | 18: The local IP address was changed by the user.
CONNECTION_CHANGED_SAME_UID_LOGIN | 19: The user joined the same channel from different devices with the same UID.
CONNECTION_CHANGED_TOO_MANY_BROADCASTERS | 20: The number of hosts in the channel has reached the upper limit.
CONNECTION_CHANGED_LICENSE_VALIDATION_FAILURE | 21: The connection is failed due to license validation failure.
CONNECTION_CHANGED_CERTIFICATION_VERYFY_FAILURE |
CONNECTION_CHANGED_STREAM_CHANNEL_NOT_AVAILABLE | 23: The connection is failed due to the lack of granting permission to the stream channel.
CONNECTION_CHANGED_INCONSISTENT_APPID | 24: The connection is failed due to join channel with an inconsistent appid.

## ◆ CLIENT_ROLE_CHANGE_FAILED_REASON

enum agora::rtc::CLIENT_ROLE_CHANGE_FAILED_REASON

The reason for a user role switch failure.

Enumerator
CLIENT_ROLE_CHANGE_FAILED_TOO_MANY_BROADCASTERS | 1: The number of hosts in the channel exceeds the limit. Note This enumerator is reported only when the support for 128 users is enabled. The maximum number of hosts is based on the actual number of hosts configured when you enable the 128-user feature.
CLIENT_ROLE_CHANGE_FAILED_NOT_AUTHORIZED | 2: The request is rejected by the Agora server. Agora recommends you prompt the user to try to switch their user role again.
__deprecated | 0: The network quality is unknown. Deprecated This member is deprecated. 3: The request is timed out. Agora recommends you prompt the user to check the network connection and try to switch their user role again. Deprecated This reason is deprecated. 4: The SDK is disconnected from the Agora edge server. You can troubleshoot the failure through the `reason` reported by `onConnectionStateChanged`. Deprecated This reason is deprecated.
__deprecated | 0: The network quality is unknown. Deprecated This member is deprecated. 3: The request is timed out. Agora recommends you prompt the user to check the network connection and try to switch their user role again. Deprecated This reason is deprecated. 4: The SDK is disconnected from the Agora edge server. You can troubleshoot the failure through the `reason` reported by `onConnectionStateChanged`. Deprecated This reason is deprecated.

## ◆ NETWORK_TYPE

enum agora::rtc::NETWORK_TYPE

Network type.

Enumerator
NETWORK_TYPE_UNKNOWN | -1: The network type is unknown.
NETWORK_TYPE_DISCONNECTED | 0: The SDK disconnects from the network.
NETWORK_TYPE_LAN | 1: The network type is LAN.
NETWORK_TYPE_WIFI | 2: The network type is Wi-Fi (including hotspots).
NETWORK_TYPE_MOBILE_2G | 3: The network type is mobile 2G.
NETWORK_TYPE_MOBILE_3G | 4: The network type is mobile 3G.
NETWORK_TYPE_MOBILE_4G | 5: The network type is mobile 4G.
NETWORK_TYPE_MOBILE_5G | 6: The network type is mobile 5G.

## ◆ VIDEO_VIEW_SETUP_MODE

enum agora::rtc::VIDEO_VIEW_SETUP_MODE

Setting mode of the view.

Enumerator
VIDEO_VIEW_SETUP_REPLACE | 0: (Default) Clear all added views and replace with a new view.
VIDEO_VIEW_SETUP_ADD | 1: Adds a view.
VIDEO_VIEW_SETUP_REMOVE | 2: Deletes a view. Note When you no longer need to use a certain view, it is recommended to delete the view by setting `setupMode` to VIDEO_VIEW_SETUP_REMOVE, otherwise it may lead to leak of rendering resources.

## ◆ AUDIO_TRACK_TYPE

enum agora::rtc::AUDIO_TRACK_TYPE

The type of the audio track.

Enumerator
AUDIO_TRACK_INVALID | -1: Invalid audio track
AUDIO_TRACK_MIXABLE | 0: Mixable audio tracks. This type of audio track supports mixing with other audio streams (such as audio streams captured by microphone) and playing locally or publishing to channels after mixing. The latency of mixable audio tracks is higher than that of direct audio tracks.
AUDIO_TRACK_DIRECT | 1: Direct audio tracks. This type of audio track will replace the audio streams captured by the microphone and does not support mixing with other audio streams. The latency of direct audio tracks is lower than that of mixable audio tracks. Note If `AUDIO_TRACK_DIRECT` is specified for this parameter, you must set `publishMicrophoneTrack` to `false` in `ChannelMediaOptions` when calling `joinChannel(const char* token, const char* channelId, uid_t uid, const ChannelMediaOptions& options)` to join the channel; otherwise, joining the channel fails and returns the error code -2.

## ◆ VOICE_BEAUTIFIER_PRESET

enum agora::rtc::VOICE_BEAUTIFIER_PRESET

The options for SDK preset voice beautifier effects.

Preset local voice reverberation options. bitmap allocation:

bit31 | bit30 - bit24 | bit23 - bit16 | bit15 - bit8 | bit7 - bit0
--- | --- | --- | --- | ---
reserved | 0x1: voice beauty | 0x1: chat beautification | effect types | effect settings
|  | 0x2: singing beautification |  |
|  | 0x3: timbre transform |  |
|  | 0x4: ultra high_quality |  |
| -----------------— | --------------------------— |  |
| 0x2: audio effect | 0x1: space construction |  |
|  | 0x2: voice changer effect |  |
|  | 0x3: style transform |  |
|  | 0x4: electronic sound |  |
|  | 0x5: magic tone |  |
| -----------------— | --------------------------— |  |
| 0x3: voice changer | 0x1: voice transform |  |

Enumerator
VOICE_BEAUTIFIER_OFF | Turn off voice beautifier effects and use the original voice.
CHAT_BEAUTIFIER_MAGNETIC | A more magnetic voice. Note Agora recommends using this enumerator to process a male-sounding voice; otherwise, you may experience vocal distortion.
CHAT_BEAUTIFIER_FRESH | A fresher voice. Note Agora recommends using this enumerator to process a female-sounding voice; otherwise, you may experience vocal distortion.
CHAT_BEAUTIFIER_VITALITY | A more vital voice. Note Agora recommends using this enumerator to process a female-sounding voice; otherwise, you may experience vocal distortion.
SINGING_BEAUTIFIER | Singing beautifier effect. If you call `setVoiceBeautifierPreset` ( SINGING_BEAUTIFIER ), you can beautify a male-sounding voice and add a reverberation effect that sounds like singing in a small room. Agora recommends using this enumerator to process a male-sounding voice; otherwise, you might experience vocal distortion. If you call `setVoiceBeautifierParameters` ( SINGING_BEAUTIFIER, param1, param2), you can beautify a male or female-sounding voice and add a reverberation effect.
TIMBRE_TRANSFORMATION_VIGOROUS | A more vigorous voice.
TIMBRE_TRANSFORMATION_DEEP | A deep voice.
TIMBRE_TRANSFORMATION_MELLOW | A mellower voice.
TIMBRE_TRANSFORMATION_FALSETTO | Falsetto.
TIMBRE_TRANSFORMATION_FULL | A fuller voice.
TIMBRE_TRANSFORMATION_CLEAR | A clearer voice.
TIMBRE_TRANSFORMATION_RESOUNDING | A more resounding voice.
TIMBRE_TRANSFORMATION_RINGING | A more ringing voice.
ULTRA_HIGH_QUALITY_VOICE | A ultra-high quality voice, which makes the audio clearer and restores more details. To achieve better audio effect quality, Agora recommends that you set the `profile` of `setAudioProfile(AUDIO_PROFILE_TYPE profile)` to `AUDIO_PROFILE_MUSIC_HIGH_QUALITY` (4) or `AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO` (5) and `scenario` to `AUDIO_SCENARIO_GAME_STREAMING` (3) before calling `setVoiceBeautifierPreset`. If you have an audio capturing device that can already restore audio details to a high degree, Agora recommends that you do not enable ultra-high quality; otherwise, the SDK may over-restore audio details, and you may not hear the anticipated voice effect.

## ◆ AUDIO_EFFECT_PRESET

enum agora::rtc::AUDIO_EFFECT_PRESET

Preset audio effects.

To get better audio effects, Agora recommends calling `setAudioProfile(AUDIO_PROFILE_TYPE profile, AUDIO_SCENARIO_TYPE scenario)` and setting the `profile` parameter as recommended below before using the preset audio effects.

Preset audio effects | `profile`
--- | ---
- ROOM_ACOUSTICS_VIRTUAL_STEREO - ROOM_ACOUSTICS_3D_VOICE - ROOM_ACOUSTICS_VIRTUAL_SURROUND_SOUND | `AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO` or `AUDIO_PROFILE_MUSIC_STANDARD_STEREO`
Other preset audio effects (except for `AUDIO_EFFECT_OFF` ) | `AUDIO_PROFILE_MUSIC_HIGH_QUALITY` or `AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO`

Enumerator
AUDIO_EFFECT_OFF | Turn off voice effects, that is, use the original voice.
ROOM_ACOUSTICS_KTV | The voice effect typical of a KTV venue.
ROOM_ACOUSTICS_VOCAL_CONCERT | The voice effect typical of a concert hall.
ROOM_ACOUSTICS_STUDIO | The voice effect typical of a recording studio.
ROOM_ACOUSTICS_PHONOGRAPH | The voice effect typical of a vintage phonograph.
ROOM_ACOUSTICS_VIRTUAL_STEREO | The virtual stereo effect, which renders monophonic audio as stereo audio.
ROOM_ACOUSTICS_SPACIAL | A more spatial voice effect.
ROOM_ACOUSTICS_ETHEREAL | A more ethereal voice effect.
ROOM_ACOUSTICS_3D_VOICE | A 3D voice effect that makes the voice appear to be moving around the user. The default cycle period is 10 seconds. After setting this effect, you can call `setAudioEffectParameters` to modify the movement period. Note If the 3D voice effect is enabled, users need to use stereo audio playback devices to hear the anticipated voice effect.
ROOM_ACOUSTICS_VIRTUAL_SURROUND_SOUND | Virtual surround sound, that is, the SDK generates a simulated surround sound field on the basis of stereo channels, thereby creating a surround sound effect. Note If the virtual surround sound is enabled, users need to use stereo audio playback devices to hear the anticipated audio effect.
ROOM_ACOUSTICS_CHORUS | The audio effect of chorus. Agora recommends using this effect in chorus scenarios to enhance the sense of depth and dimension in the vocals.
VOICE_CHANGER_EFFECT_UNCLE | A middle-aged man's voice. Note Agora recommends using this preset to process a male-sounding voice; otherwise, you may not hear the anticipated voice effect.
VOICE_CHANGER_EFFECT_OLDMAN | An older man's voice. Note Agora recommends using this preset to process a male-sounding voice; otherwise, you may not hear the anticipated voice effect.
VOICE_CHANGER_EFFECT_BOY | A boy's voice. Note Agora recommends using this preset to process a male-sounding voice; otherwise, you may not hear the anticipated voice effect.
VOICE_CHANGER_EFFECT_SISTER | A young woman's voice. Note Agora recommends using this preset to process a female-sounding voice; otherwise, you may not hear the anticipated voice effect.
VOICE_CHANGER_EFFECT_GIRL | A girl's voice. Note Agora recommends using this preset to process a female-sounding voice; otherwise, you may not hear the anticipated voice effect.
VOICE_CHANGER_EFFECT_PIGKING | The voice of Pig King, a character in Journey to the West who has a voice like a growling bear.
VOICE_CHANGER_EFFECT_HULK | The Hulk's voice.
STYLE_TRANSFORMATION_RNB | The voice effect typical of R&B music.
STYLE_TRANSFORMATION_POPULAR | The voice effect typical of popular music.
PITCH_CORRECTION | A pitch correction effect that corrects the user's pitch based on the pitch of the natural C major scale. After setting this voice effect, you can call `setAudioEffectParameters` to adjust the basic mode of tuning and the pitch of the main tone.

## ◆ VOICE_CONVERSION_PRESET

enum agora::rtc::VOICE_CONVERSION_PRESET

The options for SDK preset voice conversion effects.

Enumerator
VOICE_CONVERSION_OFF | Turn off voice conversion effects and use the original voice.
VOICE_CHANGER_NEUTRAL | A gender-neutral voice. To avoid audio distortion, ensure that you use this enumerator to process a female-sounding voice.
VOICE_CHANGER_SWEET | A sweet voice. To avoid audio distortion, ensure that you use this enumerator to process a female-sounding voice.
VOICE_CHANGER_SOLID | A steady voice. To avoid audio distortion, ensure that you use this enumerator to process a male-sounding voice.
VOICE_CHANGER_BASS | A deep voice. To avoid audio distortion, ensure that you use this enumerator to process a male-sounding voice.
VOICE_CHANGER_CARTOON | A voice like a cartoon character.
VOICE_CHANGER_CHILDLIKE | A voice like a child.
VOICE_CHANGER_PHONE_OPERATOR | A voice like a phone operator.
VOICE_CHANGER_MONSTER | A monster voice.
VOICE_CHANGER_TRANSFORMERS | A voice like Transformers.
VOICE_CHANGER_GROOT | A voice like Groot.
VOICE_CHANGER_DARTH_VADER | A voice like Darth Vader.
VOICE_CHANGER_IRON_LADY | A rough female voice.
VOICE_CHANGER_SHIN_CHAN | A voice like Crayon Shin-chan.
VOICE_CHANGER_GIRLISH_MAN | A voice like a castrato.
VOICE_CHANGER_CHIPMUNK | A voice like chipmunk.

## ◆ HEADPHONE_EQUALIZER_PRESET

enum agora::rtc::HEADPHONE_EQUALIZER_PRESET

Preset headphone equalizer types.

Enumerator
HEADPHONE_EQUALIZER_OFF | The headphone equalizer is disabled, and the original audio is heard.
HEADPHONE_EQUALIZER_OVEREAR | An equalizer is used for headphones.
HEADPHONE_EQUALIZER_INEAR | An equalizer is used for in-ear headphones.

## ◆ VOICE_AI_TUNER_TYPE

enum agora::rtc::VOICE_AI_TUNER_TYPE

Voice AI tuner sound types.

Enumerator
VOICE_AI_TUNER_MATURE_MALE | 0: Mature male voice. A deep and magnetic male voice.
VOICE_AI_TUNER_FRESH_MALE | 1: Fresh male voice. A fresh and slightly sweet male voice.
VOICE_AI_TUNER_ELEGANT_FEMALE | 2: Elegant female voice. A deep and charming female voice.
VOICE_AI_TUNER_SWEET_FEMALE | 3: Sweet female voice. A high-pitched and cute female voice.
VOICE_AI_TUNER_WARM_MALE_SINGING | 4: Warm male singing. A warm and melodious male voice.
VOICE_AI_TUNER_GENTLE_FEMALE_SINGING | 5: Gentle female singing. A soft and delicate female voice.
VOICE_AI_TUNER_HUSKY_MALE_SINGING | 6: Husky male singing. A unique husky male voice.
VOICE_AI_TUNER_WARM_ELEGANT_FEMALE_SINGING | 7: Warm elegant female singing. A warm and mature female voice.
VOICE_AI_TUNER_POWERFUL_MALE_SINGING | 8: Powerful male singing. A strong and powerful male voice.
VOICE_AI_TUNER_DREAMY_FEMALE_SINGING | 9: Dreamy female singing. A dreamy and soft female voice.

## ◆ AUDIO_RECORDING_QUALITY_TYPE

enum agora::rtc::AUDIO_RECORDING_QUALITY_TYPE

Recording quality.

Enumerator
AUDIO_RECORDING_QUALITY_LOW | 0: Low quality. The sample rate is 32 kHz, and the file size is around 1.2 MB after 10 minutes of recording.
AUDIO_RECORDING_QUALITY_MEDIUM | 1: Medium quality. The sample rate is 32 kHz, and the file size is around 2 MB after 10 minutes of recording.
AUDIO_RECORDING_QUALITY_HIGH | 2: High quality. The sample rate is 32 kHz, and the file size is around 3.75 MB after 10 minutes of recording.
AUDIO_RECORDING_QUALITY_ULTRA_HIGH | 3: Ultra high quality. The sample rate is 32 kHz, and the file size is around 7.5 MB after 10 minutes of recording.

## ◆ AUDIO_FILE_RECORDING_TYPE

enum agora::rtc::AUDIO_FILE_RECORDING_TYPE

Recording content. Set in `startAudioRecording [3/3]`.

Enumerator
AUDIO_FILE_RECORDING_MIC | 1: Only records the audio of the local user.
AUDIO_FILE_RECORDING_PLAYBACK | 2: Only records the audio of all remote users.
AUDIO_FILE_RECORDING_MIXED | 3: Records the mixed audio of the local and all remote users.

## ◆ AUDIO_ENCODED_FRAME_OBSERVER_POSITION

enum agora::rtc::AUDIO_ENCODED_FRAME_OBSERVER_POSITION

Audio profile.

Enumerator
AUDIO_ENCODED_FRAME_OBSERVER_POSITION_RECORD | 1: Only records the audio of the local user.
AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK | 2: Only records the audio of all remote users.
AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED | 3: Records the mixed audio of the local and all remote users.

## ◆ AREA_CODE

enum agora::rtc::AREA_CODE

The region for connection, which is the region where the server the SDK connects to is located.

Enumerator
AREA_CODE_CN | Mainland China.
AREA_CODE_NA | North America.
AREA_CODE_EU | Europe.
AREA_CODE_AS | Asia, excluding Mainland China.
AREA_CODE_JP | Japan.
AREA_CODE_IN | India.
AREA_CODE_GLOB | Global.

## ◆ AREA_CODE_EX

enum agora::rtc::AREA_CODE_EX

Extra region code @technical preview

Enumerator
AREA_CODE_OC | Oceania
AREA_CODE_SA | South-American
AREA_CODE_AF | Africa
AREA_CODE_KR | South Korea
AREA_CODE_HKMC | Hong Kong and Macou
AREA_CODE_US | United States
AREA_CODE_RU | Russia
AREA_CODE_OVS | The global area (except China)

## ◆ CHANNEL_MEDIA_RELAY_ERROR

enum agora::rtc::CHANNEL_MEDIA_RELAY_ERROR

The error code of the channel media relay.

Enumerator
RELAY_OK | 0: No error.
RELAY_ERROR_SERVER_ERROR_RESPONSE | 1: An error occurs in the server response.
RELAY_ERROR_SERVER_NO_RESPONSE | 2: No server response. This error may be caused by poor network connections. If this error occurs when initiating a channel media relay, you can try again later; if this error occurs during channel media relay, you can call `leaveChannel(const LeaveChannelOptions& options)` to leave the channel. This error can also occur if the channel media relay service is not enabled in the project. You can contact `technical support` to enable the service.
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 `leaveChannel(const LeaveChannelOptions& options)` 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.

## ◆ CHANNEL_MEDIA_RELAY_STATE

enum agora::rtc::CHANNEL_MEDIA_RELAY_STATE

The state code of the channel media relay.

Enumerator
RELAY_STATE_IDLE | 0: The initial state. After you successfully stop the channel media relay by calling `stopChannelMediaRelay`, the `onChannelMediaRelayStateChanged` callback returns this state.
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: An error occurs. See `code` in `onChannelMediaRelayStateChanged` for the error code.

## ◆ ENCRYPTION_MODE

enum agora::rtc::ENCRYPTION_MODE

The built-in encryption mode.

Agora recommends using AES_128_GCM2 or AES_256_GCM2 encrypted mode. These two modes support the use of salt for higher security.

Enumerator
AES_128_XTS | 1: 128-bit AES encryption, XTS mode.
AES_128_ECB | 2: 128-bit AES encryption, ECB mode.
AES_256_XTS | 3: 256-bit AES encryption, XTS mode.
SM4_128_ECB | 4: 128-bit SM4 encryption, ECB mode.
AES_128_GCM | 5: 128-bit AES encryption, GCM mode.
AES_256_GCM | 6: 256-bit AES encryption, GCM mode.
AES_128_GCM2 | 7: (Default) 128-bit AES encryption, GCM mode. This encryption mode requires the setting of salt (`encryptionKdfSalt`).
AES_256_GCM2 | 8: 256-bit AES encryption, GCM mode. This encryption mode requires the setting of salt (`encryptionKdfSalt`).
MODE_END | Enumerator boundary.

## ◆ ENCRYPTION_ERROR_TYPE

enum agora::rtc::ENCRYPTION_ERROR_TYPE

Encryption error type.

Enumerator
ENCRYPTION_ERROR_INTERNAL_FAILURE | 0: Internal reason.
ENCRYPTION_ERROR_DECRYPTION_FAILURE | 1: Media stream decryption error. Ensure that the receiver and the sender use the same encryption mode and key.
ENCRYPTION_ERROR_ENCRYPTION_FAILURE | 2: Media stream encryption error.
ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILURE | 3: Data stream decryption error. Ensure that the receiver and the sender use the same encryption mode and key.
ENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE | 4: Data stream encryption error.

## ◆ UPLOAD_ERROR_REASON

enum agora::rtc::UPLOAD_ERROR_REASON

Enumerator
UPLOAD_SUCCESS |
UPLOAD_NET_ERROR |
UPLOAD_SERVER_ERROR |

## ◆ RENEW_TOKEN_ERROR_CODE

enum agora::rtc::RENEW_TOKEN_ERROR_CODE

Represents the error codes after calling `renewToken`.

Since
  4.6.0

Enumerator
RENEW_TOKEN_SUCCESS | (0): Token updated successfully.
RENEW_TOKEN_FAILURE | (1): Token update failed due to an unknown server error. It is recommended to check the parameters used to generate the Token, regenerate the Token, and retry `renewToken`.
RENEW_TOKEN_TOKEN_EXPIRED | (2): Token update failed because the provided Token has expired. It is recommended to generate a new Token with a longer expiration time and retry `renewToken`.
RENEW_TOKEN_INVALID_TOKEN | (3): Token update failed because the provided Token is invalid. Common reasons include: the project has enabled App Certificate in the Agora Console but did not use a Token when joining the channel; the uid specified in `joinChannel` is inconsistent with the uid used when generating the Token; the channel name specified in `joinChannel` is inconsistent with the one used when generating the Token. It is recommended to check the Token generation process, generate a new Token, and retry `renewToken`.
RENEW_TOKEN_INVALID_CHANNEL_NAME | (4): Token update failed because the channel name in the Token does not match the current channel. It is recommended to check the channel name, generate a new Token, and retry `renewToken`.
RENEW_TOKEN_INCONSISTENT_APPID | (5): Token update failed because the App ID in the Token does not match the current App ID. It is recommended to check the App ID, generate a new Token, and retry `renewToken`.
RENEW_TOKEN_CANCELED_BY_NEW_REQUEST | (6): The previous Token update request was canceled due to a new request being initiated.

## ◆ PERMISSION_TYPE

enum agora::rtc::PERMISSION_TYPE

The type of the device permission.

Enumerator
RECORD_AUDIO | 0: Permission for the audio capture device.
CAMERA | 1: Permission for the camera.
SCREEN_CAPTURE | (For Android only) 2: Permission for screen sharing.

## ◆ STREAM_SUBSCRIBE_STATE

enum agora::rtc::STREAM_SUBSCRIBE_STATE

The subscribing state.

Enumerator
SUB_STATE_IDLE | 0: The initial publishing state after joining the channel.
SUB_STATE_NO_SUBSCRIBED | 1: Fails to subscribe to the remote stream. Possible reasons: The remote user: Calls `muteLocalAudioStream` (`true`) or `muteLocalVideoStream` (`true`) to stop sending local media stream. Calls `disableAudio` or `disableVideo` to disable the local audio or video module. Calls `enableLocalAudio` ( false ) or `enableLocalVideo` ( false ) to disable local audio or video capture. The role of the remote user is audience. The local user calls the following methods to stop receiving remote streams: Call `muteRemoteAudioStream` ( true ) or `muteAllRemoteAudioStreams` ( true ) to stop receiving the remote audio stream. Call `muteRemoteVideoStream` ( true ) or `muteAllRemoteVideoStreams` ( true ) to stop receiving the remote video stream.
SUB_STATE_SUBSCRIBING | 2: Subscribing.
SUB_STATE_SUBSCRIBED | 3: The remote stream is received, and the subscription is successful.

## ◆ STREAM_PUBLISH_STATE

enum agora::rtc::STREAM_PUBLISH_STATE

The publishing state.

Enumerator
PUB_STATE_IDLE | 0: The initial publishing state after joining the channel.
PUB_STATE_NO_PUBLISHED | 1: Fails to publish the local stream. Possible reasons: The local user calls `muteLocalAudioStream` (`true`) or `muteLocalVideoStream` (`true`) to stop sending local media streams. The local user calls `disableAudio` or `disableVideo` to disable the local audio or video module. The local user calls `enableLocalAudio` (`false`) or `enableLocalVideo` (`false`) to disable the local audio or video capture. The role of the local user is audience.
PUB_STATE_PUBLISHING | 2: Publishing.
PUB_STATE_PUBLISHED | 3: Publishes successfully.

## ◆ EAR_MONITORING_FILTER_TYPE

enum agora::rtc::EAR_MONITORING_FILTER_TYPE

The audio filter types of in-ear monitoring.

Enumerator
EAR_MONITORING_FILTER_NONE | 1<<0: No audio filter added to in-ear monitoring.
EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS | 1<<1: Add vocal effects audio filter to in-ear monitoring. If you implement functions such as voice beautifier and audio effect, users can hear the voice after adding these effects.
EAR_MONITORING_FILTER_NOISE_SUPPRESSION | 1<<2: Add noise suppression audio filter to in-ear monitoring.
EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTER | 1<<15: Reuse the audio filter that has been processed on the sending end for in-ear monitoring. This enumerator reduces CPU usage while increasing in-ear monitoring latency, which is suitable for latency-tolerant scenarios requiring low CPU consumption.

## ◆ THREAD_PRIORITY_TYPE

enum agora::rtc::THREAD_PRIORITY_TYPE

Thread priority type.

Enumerator
LOWEST | 0: Lowest priority.
LOW | 1: Low priority.
NORMAL | 2: Normal priority.
HIGH | 3: High priority.
HIGHEST | Highest priority.
CRITICAL | Critical priority.

## ◆ MEDIA_TRACE_EVENT

enum agora::rtc::MEDIA_TRACE_EVENT

The rendering state of the media frame.

Enumerator
MEDIA_TRACE_EVENT_VIDEO_RENDERED | 0: The video frame has been rendered.
MEDIA_TRACE_EVENT_VIDEO_DECODED | 1: The video frame has been decoded.

## ◆ CONFIG_FETCH_TYPE

enum agora::rtc::CONFIG_FETCH_TYPE

Enumerator
CONFIG_FETCH_TYPE_INITIALIZE | 1: Fetch config when initializing RtcEngine, without channel info.
CONFIG_FETCH_TYPE_JOIN_CHANNEL | 2: Fetch config when joining channel with channel info, such as channel name and uid.

## ◆ LOCAL_PROXY_MODE

enum agora::rtc::LOCAL_PROXY_MODE

Connection mode with the Agora Private Media Server.

Enumerator
ConnectivityFirst | 0: The SDK first tries to connect to the specified Agora Private Media Server; if it fails, it connects to the Agora SD-RTN™.
LocalOnly | 1: The SDK only tries to connect to the specified Agora Private Media Server.

## ◆ RecorderStreamType

enum agora::rtc::RecorderStreamType

Type of video stream to be recorded.

Enumerator
RTC | 0: (Default) Video stream in the channel.
PREVIEW | 1: Local preview video stream before joining the channel.

## ◆ RdtStreamType

enum agora::rtc::RdtStreamType

Reliable Data Transmission Tunnel message stream type.

@technical preview

Enumerator
RDT_STREAM_CMD | Command stream type. Characterized by: reliability, high priority, and not affected by congestion control. Transmission limits: a maximum of 256 bytes per packet, and 100 packets per second.
RDT_STREAM_DATA | Data stream type. Characterized by: reliability, low priority, and affected by congestion control. Transmission limits: a maximum of 128 KBytes per packet, with a rate of 4 Mbps.
RDT_STREAM_COUNT | Reliable Data Transmission stream type count

## ◆ RdtState

enum agora::rtc::RdtState

Reliable Data Transmission tunnel state.

@technical preview

Enumerator
RDT_STATE_CLOSED | The RDT tunnel is in the initial or is closed.
RDT_STATE_OPENED | The RDT tunnel is open, and data can only be sent in this state.
RDT_STATE_BLOCKED | The send buffer of the RDT tunnel is full. RDT_STREAM_DATA cannot be sent, but RDT_STREAM_CMD can be sent, as the latter is not affected by congestion control.
RDT_STATE_PENDING | The RDT tunnel is in a suspended state because SDK has disconnected. It will automatically resume to the RDT_STATE_OPENED state after rejoining the channel.
RDT_STATE_BROKEN | The RDT channel is broken, and the data being sent and received will be cleared. It will automatically resume to the RDT_STATE_OPENED state later. Reason for occurrence: The remote user actively called the API to leave the channel and then rejoined the channel, without being detected by this end.

## ◆ VIDEO_SOURCE_TYPE

enum agora::rtc::VIDEO_SOURCE_TYPE

The type of the video source.

Enumerator
VIDEO_SOURCE_CAMERA_PRIMARY | 0: (Default) The primary camera.
VIDEO_SOURCE_CAMERA | 0: (Default) The primary camera.
VIDEO_SOURCE_CAMERA_SECONDARY | 1: The secondary camera.
VIDEO_SOURCE_SCREEN_PRIMARY | 2: The primary screen.
VIDEO_SOURCE_SCREEN | 2: The primary screen.
VIDEO_SOURCE_SCREEN_SECONDARY | 3: The secondary screen.
VIDEO_SOURCE_CUSTOM | 4: A custom video source.
VIDEO_SOURCE_MEDIA_PLAYER | 5: The media player.
VIDEO_SOURCE_RTC_IMAGE_PNG | 6: One PNG image.
VIDEO_SOURCE_RTC_IMAGE_JPEG | 7: One JPEG image.
VIDEO_SOURCE_RTC_IMAGE_GIF | 8: One GIF image.
VIDEO_SOURCE_REMOTE | 9: One remote video acquired by the network.
VIDEO_SOURCE_TRANSCODED | 10: One transcoded video source.
VIDEO_SOURCE_CAMERA_THIRD | 11: (For Android, Windows, and macOS only) The third camera.
VIDEO_SOURCE_CAMERA_FOURTH | 12: (For Android, Windows, and macOS only) The fourth camera.
VIDEO_SOURCE_SCREEN_THIRD | 13: (For Windows and macOS only) The third screen.
VIDEO_SOURCE_SCREEN_FOURTH | 14: (For Windows and macOS only) The fourth screen.
VIDEO_SOURCE_SPEECH_DRIVEN | 15: Video processed by the speech driven extension.
VIDEO_SOURCE_UNKNOWN | 100: An unknown video source.

## ◆ AUDIO_SOURCE_TYPE

enum agora::rtc::AUDIO_SOURCE_TYPE

The audio source type.

Enumerator
AUDIO_SOURCE_MICROPHONE | 0: (Default) Microphone.
AUDIO_SOURCE_CUSTOM | 1: Custom audio stream.
AUDIO_SOURCE_MEDIA_PLAYER | 2: Media player.
AUDIO_SOURCE_LOOPBACK_RECORDING | 3: System audio stream captured during screen sharing.
AUDIO_SOURCE_MIXED_STREAM | Audio captured by mixed source.
AUDIO_SOURCE_REMOTE_USER | 5: Audio stream from a specified remote user.
AUDIO_SOURCE_REMOTE_CHANNEL | 6: Mixed audio streams from all users in the current channel.
AUDIO_SOURCE_UNKNOWN | 100: An unknown audio source.

## ◆ AudioRoute

enum agora::rtc::AudioRoute

The type of the audio route.

Enumerator
ROUTE_DEFAULT | -1: The default audio route.
ROUTE_HEADSET | 0: Audio output routing is a headset with microphone.
ROUTE_EARPIECE | 1: The audio route is an earpiece.
ROUTE_HEADSETNOMIC | 2: The audio route is a headset without a microphone.
ROUTE_SPEAKERPHONE | 3: The audio route is the speaker that comes with the device.
ROUTE_LOUDSPEAKER | 4: The audio route is an external speaker. (iOS and macOS only)
ROUTE_BLUETOOTH_DEVICE_HFP | 5: The audio route is a Bluetooth device using the HFP protocol.
ROUTE_USB | 6: The audio route is a USB peripheral device. (For macOS only)
ROUTE_HDMI | 7: The audio route is an HDMI peripheral device. (For macOS only)
ROUTE_DISPLAYPORT | 8: The audio route is a DisplayPort peripheral device. (For macOS only)
ROUTE_AIRPLAY | 9: The audio route is Apple AirPlay. (For macOS only)
ROUTE_BLUETOOTH_DEVICE_A2DP | 10: The audio route is a Bluetooth device using the A2DP protocol.

## ◆ BYTES_PER_SAMPLE

enum agora::rtc::BYTES_PER_SAMPLE

Bytes per sample

Enumerator
TWO_BYTES_PER_SAMPLE | two bytes per sample

## ◆ RAW_AUDIO_FRAME_OP_MODE_TYPE

enum agora::rtc::RAW_AUDIO_FRAME_OP_MODE_TYPE

The use mode of the audio data.

Enumerator
RAW_AUDIO_FRAME_OP_MODE_READ_ONLY | 0: Read-only mode, the user only read the original data from `AudioFrame` without any modification. For example, when users acquire the data with the Agora SDK, then start the media push.
RAW_AUDIO_FRAME_OP_MODE_READ_WRITE | 2: Read and write mode, Users read the data from `AudioFrame`, modify it, and then play it. For example, when users have their own audio-effect processing module and perform some voice preprocessing, such as a voice change.

## ◆ STREAMING_SRC_ERR

enum agora::rtc::STREAMING_SRC_ERR

The error code of streaming source.

Deprecated
  Since version 4.6.0, this feature has been turned off by default.

Enumerator
STREAMING_SRC_ERR_NONE | no error
STREAMING_SRC_ERR_UNKNOWN | unknown error
STREAMING_SRC_ERR_INVALID_PARAM | invalid parameter
STREAMING_SRC_ERR_BAD_STATE | bad status
STREAMING_SRC_ERR_NO_MEM | not enough memory
STREAMING_SRC_ERR_BUFFER_OVERFLOW | buffer overflow
STREAMING_SRC_ERR_BUFFER_UNDERFLOW | buffer underflow
STREAMING_SRC_ERR_NOT_FOUND | buffer underflow
STREAMING_SRC_ERR_TIMEOUT | buffer underflow
STREAMING_SRC_ERR_EXPIRED | expired
STREAMING_SRC_ERR_UNSUPPORTED | unsupported
STREAMING_SRC_ERR_NOT_EXIST | component not exist
STREAMING_SRC_ERR_EXIST | component already exist
STREAMING_SRC_ERR_OPEN | fail to IO open
STREAMING_SRC_ERR_CLOSE | fail to IO close
STREAMING_SRC_ERR_READ | fail to IO read
STREAMING_SRC_ERR_WRITE | fail to IO write
STREAMING_SRC_ERR_SEEK | fail to IO seek
STREAMING_SRC_ERR_EOF | reach to IO EOF, can do nothing
STREAMING_SRC_ERR_CODECOPEN | fail to codec open
STREAMING_SRC_ERR_CODECCLOSE | fail to codec close
STREAMING_SRC_ERR_CODECPROC | fail to codec process

## ◆ STREAMING_SRC_STATE

enum agora::rtc::STREAMING_SRC_STATE

The state machine of Streaming Source.

Deprecated
  Since version 4.6.0, this feature has been turned off by default.

Enumerator
STREAMING_SRC_STATE_CLOSED | streaming source still closed, can do nothing
STREAMING_SRC_STATE_OPENING | after call open() method and start parsing streaming source
STREAMING_SRC_STATE_IDLE | streaming source is ready waiting for play
STREAMING_SRC_STATE_PLAYING | after call play() method, playing & pushing the AV data
STREAMING_SRC_STATE_SEEKING | after call seek() method, start seeking poisition
STREAMING_SRC_STATE_EOF | The position is located at end, can NOT playing.
STREAMING_SRC_STATE_ERROR | The error status and can do nothing except close.

## ◆ H265_TRANSCODE_RESULT

enum agora::rtc::H265_TRANSCODE_RESULT

The result of IH265Transcoder interface invoking.

Enumerator
H265_TRANSCODE_RESULT_UNKNOWN | -1: Unknown error.
H265_TRANSCODE_RESULT_SUCCESS | 0: The request of operation is successfully.
H265_TRANSCODE_RESULT_REQUEST_INVALID | 1: This request is invalid. Possible reasons include incorrect parameters.
H265_TRANSCODE_RESULT_UNAUTHORIZED | 2: Authentication failed, please check for correctness of token.
H265_TRANSCODE_RESULT_TOKEN_EXPIRED | 3: The token is expired, please update token.
H265_TRANSCODE_RESULT_FORBIDDEN | 4: No permission to access the interface.
H265_TRANSCODE_RESULT_NOT_FOUND | 5: The url of request is not found.
H265_TRANSCODE_RESULT_CONFLICTED | 6: The request encountered a conflict, please try again.
H265_TRANSCODE_RESULT_NOT_SUPPORTED | 7: Content type not supported.
H265_TRANSCODE_RESULT_TOO_OFTEN | 8: The requests are too frequent.
H265_TRANSCODE_RESULT_SERVER_INTERNAL_ERROR | 9: Internal Server Error, you can try sending the request again.
H265_TRANSCODE_RESULT_SERVICE_UNAVAILABLE | 10: Service is unavailable.

## ◆ MEDIA_DEVICE_TYPE

enum agora::rtc::MEDIA_DEVICE_TYPE

Media device types.

Enumerator
UNKNOWN_AUDIO_DEVICE | -1: Unknown device type.
AUDIO_PLAYOUT_DEVICE | 0: Audio playback device.
AUDIO_RECORDING_DEVICE | 1: Audio capturing device.
VIDEO_RENDER_DEVICE | 2: Video rendering device (graphics card).
VIDEO_CAPTURE_DEVICE | 3: Video capturing device.
AUDIO_APPLICATION_PLAYOUT_DEVICE | 4: Audio playback device for an app.
AUDIO_VIRTUAL_PLAYOUT_DEVICE | (For macOS only) 5: Virtual audio playback device (virtual sound card).
AUDIO_VIRTUAL_RECORDING_DEVICE | (For macOS only) 6: Virtual audio capturing device (virtual sound card).

## ◆ AUDIO_MIXING_STATE_TYPE

enum agora::rtc::AUDIO_MIXING_STATE_TYPE

The playback state of the music file.

Enumerator
AUDIO_MIXING_STATE_PLAYING | 710: The music file is playing.
AUDIO_MIXING_STATE_PAUSED | 711: The music file pauses playing.
AUDIO_MIXING_STATE_STOPPED | 713: The music file stops playing. The possible reasons include: AUDIO_MIXING_REASON_ALL_LOOPS_COMPLETED (723) AUDIO_MIXING_REASON_STOPPED_BY_USER (724)
AUDIO_MIXING_STATE_FAILED | 714: An error occurs during the playback of the audio mixing file. The possible reasons include: AUDIO_MIXING_REASON_CAN_NOT_OPEN (701) AUDIO_MIXING_REASON_TOO_FREQUENT_CALL (702) AUDIO_MIXING_REASON_INTERRUPTED_EOF (703)

## ◆ AUDIO_MIXING_REASON_TYPE

enum agora::rtc::AUDIO_MIXING_REASON_TYPE

The reason why the playback state of the music file changes. Reported in the `onAudioMixingStateChanged` callback.

Enumerator
AUDIO_MIXING_REASON_CAN_NOT_OPEN | 701: The SDK cannot open the music file. For example, the local music file does not exist, the SDK does not support the file format, or the the SDK cannot access the music file URL.
AUDIO_MIXING_REASON_TOO_FREQUENT_CALL | 702: The SDK opens the music file too frequently. If you need to call `startAudioMixing` multiple times, ensure that the call interval is more than 500 ms.
AUDIO_MIXING_REASON_INTERRUPTED_EOF | 703: The music file playback is interrupted.
AUDIO_MIXING_REASON_ONE_LOOP_COMPLETED | 721: The music file completes a loop playback.
AUDIO_MIXING_REASON_ALL_LOOPS_COMPLETED | 723: The music file completes all loop playback.
AUDIO_MIXING_REASON_STOPPED_BY_USER | 724: Successfully call `stopAudioMixing` to stop playing the music file.
AUDIO_MIXING_REASON_RESUMED_BY_USER | 726: The audio mixing playback has resumed by user
AUDIO_MIXING_REASON_OK | 0: The SDK opens music file successfully.

## ◆ INJECT_STREAM_STATUS

enum agora::rtc::INJECT_STREAM_STATUS

The status of importing an external video stream in a live broadcast.

Enumerator
INJECT_STREAM_STATUS_START_SUCCESS | 0: The media stream is injected successfully.
INJECT_STREAM_STATUS_START_ALREADY_EXISTS | 1: The media stream already exists.
INJECT_STREAM_STATUS_START_UNAUTHORIZED | 2: The media stream injection is unauthorized.
INJECT_STREAM_STATUS_START_TIMEDOUT | 3: Timeout occurs when injecting a media stream.
INJECT_STREAM_STATUS_START_FAILED | 4: The media stream injection fails.
INJECT_STREAM_STATUS_STOP_SUCCESS | 5: The media stream stops being injected successfully.
INJECT_STREAM_STATUS_STOP_NOT_FOUND | 6: The media stream injection that you want to stop is found.
INJECT_STREAM_STATUS_STOP_UNAUTHORIZED | 7: You are not authorized to stop the media stream injection.
INJECT_STREAM_STATUS_STOP_TIMEDOUT | 8: Timeout occurs when you stop injecting the media stream.
INJECT_STREAM_STATUS_STOP_FAILED | 9: Stopping injecting the media stream fails.
INJECT_STREAM_STATUS_BROKEN | 10: The media stream is broken.

## ◆ AUDIO_EQUALIZATION_BAND_FREQUENCY

enum agora::rtc::AUDIO_EQUALIZATION_BAND_FREQUENCY

The midrange frequency for audio equalization.

Enumerator
AUDIO_EQUALIZATION_BAND_31 | 0: 31 Hz
AUDIO_EQUALIZATION_BAND_62 | 1: 62 Hz
AUDIO_EQUALIZATION_BAND_125 | 2: 125 Hz
AUDIO_EQUALIZATION_BAND_250 | 3: 250 Hz
AUDIO_EQUALIZATION_BAND_500 | 4: 500 Hz
AUDIO_EQUALIZATION_BAND_1K | 5: 1 kHz
AUDIO_EQUALIZATION_BAND_2K | 6: 2 kHz
AUDIO_EQUALIZATION_BAND_4K | 7: 4 kHz
AUDIO_EQUALIZATION_BAND_8K | 8: 8 kHz
AUDIO_EQUALIZATION_BAND_16K | 9: 16 kHz

## ◆ AUDIO_REVERB_TYPE

enum agora::rtc::AUDIO_REVERB_TYPE

Audio reverberation types.

Enumerator
AUDIO_REVERB_DRY_LEVEL | 0: The level of the dry signal (dB). The value is between -20 and 10.
AUDIO_REVERB_WET_LEVEL | 1: The level of the early reflection signal (wet signal) (dB). The value is between -20 and 10.
AUDIO_REVERB_ROOM_SIZE | 2: The room size of the reflection. The value is between 0 and 100.
AUDIO_REVERB_WET_DELAY | 3: The length of the initial delay of the wet signal (ms). The value is between 0 and 200.
AUDIO_REVERB_STRENGTH | 4: The reverberation strength. The value is between 0 and 100.

## ◆ STREAM_FALLBACK_OPTIONS

enum agora::rtc::STREAM_FALLBACK_OPTIONS

Options for handling audio and video stream fallback when network conditions are weak.

Enumerator
STREAM_FALLBACK_OPTION_DISABLED | 0: No fallback processing is performed on audio and video streams, the quality of the audio and video streams cannot be guaranteed.
STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW | 1: Only receive low-quality (low resolution, low bitrate) video stream.
STREAM_FALLBACK_OPTION_AUDIO_ONLY | 2: When the network conditions are weak, try to receive the low-quality video stream first. If the video cannot be displayed due to extremely weak network environment, then fall back to receiving audio-only stream.
STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_1 | 3~8: If the receiver SDK uses RtcEngineParameters::setRemoteSubscribeFallbackOption，it will receive one of the streams from agora::rtc::VIDEO_STREAM_LAYER_1 to agora::rtc::VIDEO_STREAM_LAYER_6 if the related layer exists when the network condition is poor. The lower bound of fallback depends on the STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_X.
STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_2 |
STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_3 |
STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_4 |
STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_5 |
STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_6 |

## ◆ PRIORITY_TYPE

enum agora::rtc::PRIORITY_TYPE

Enumerator
PRIORITY_HIGH | 50: High priority.
PRIORITY_NORMAL | 100: (Default) normal priority.

## ◆ RTMP_STREAM_LIFE_CYCLE_TYPE

enum agora::rtc::RTMP_STREAM_LIFE_CYCLE_TYPE

Lifecycle of the CDN live video stream.

Enumerator
RTMP_STREAM_LIFE_CYCLE_BIND2CHANNEL | Bind to the channel lifecycle. If all hosts leave the channel, the CDN live streaming stops after 30 seconds.
RTMP_STREAM_LIFE_CYCLE_BIND2OWNER | Bind to the owner of the RTMP stream. If the owner leaves the channel, the CDN live streaming stops immediately.

## ◆ CAMERA_DIRECTION

enum agora::rtc::CAMERA_DIRECTION

The camera direction.

Enumerator
CAMERA_REAR | 0: The rear camera.
CAMERA_FRONT | 1: (Default) The front camera.

## ◆ CLOUD_PROXY_TYPE

enum agora::rtc::CLOUD_PROXY_TYPE

The cloud proxy type.

Since
  v3.3.0

Enumerator
NONE_PROXY | 0: The automatic mode. The SDK has this mode enabled by default. In this mode, the SDK attempts a direct connection to SD-RTN™ and automatically switches to TCP/TLS 443 if the attempt fails.
UDP_PROXY | 1: The cloud proxy for the UDP protocol, that is, the Force UDP cloud proxy mode. In this mode, the SDK always transmits data over UDP.

## ◆ ScreenCaptureSourceType

enum agora::rtc::ScreenCaptureSourceType

The type of the shared target. Set in `ScreenCaptureSourceInfo`.

Enumerator
ScreenCaptureSourceType_Unknown | -1: Unknown type.
ScreenCaptureSourceType_Window | 0: The shared target is a window.
ScreenCaptureSourceType_Screen | 1: The shared target is a screen of a particular monitor.
ScreenCaptureSourceType_Custom | 2: Reserved parameter.

## ◆ PROXY_TYPE

enum agora::rtc::PROXY_TYPE

The cloud proxy type.

Enumerator
NONE_PROXY_TYPE | 0: Reserved for future use.
UDP_PROXY_TYPE | 1: The cloud proxy for the UDP protocol, that is, the Force UDP cloud proxy mode. In this mode, the SDK always transmits data over UDP.
TCP_PROXY_TYPE | 2: The cloud proxy for the TCP (encryption) protocol, that is, the Force TCP cloud proxy mode. In this mode, the SDK always transmits data over TCP/TLS 443.
LOCAL_PROXY_TYPE | 3: Reserved for future use.
TCP_PROXY_AUTO_FALLBACK_TYPE | 4: Automatic mode. In this mode, the SDK attempts a direct connection to SD-RTN™ and automatically switches to TCP/TLS 443 if the attempt fails.
HTTP_PROXY_TYPE | 5: The http proxy.
HTTPS_PROXY_TYPE | 6: The https proxy.

## ◆ FeatureType

enum agora::rtc::FeatureType

The type of the advanced feature.

Enumerator
VIDEO_VIRTUAL_BACKGROUND | 1: Virtual background.
VIDEO_BEAUTY_EFFECT | 2: Image enhancement.

## ◆ DIRECT_CDN_STREAMING_REASON

enum agora::rtc::DIRECT_CDN_STREAMING_REASON

Reasons for the changes in CDN streaming status.

Deprecated
  v4.6.0.

Enumerator
DIRECT_CDN_STREAMING_REASON_OK | 0: No error.
DIRECT_CDN_STREAMING_REASON_FAILED | 1: A general error; no specific reason. You can try to push the media stream again.
DIRECT_CDN_STREAMING_REASON_AUDIO_PUBLICATION | 2: An error occurs when pushing audio streams. For example, the local audio capture device is not working properly, is occupied by another process, or does not get the permission required.
DIRECT_CDN_STREAMING_REASON_VIDEO_PUBLICATION | 3: An error occurs when pushing video streams. For example, the local video capture device is not working properly, is occupied by another process, or does not get the permission required.
DIRECT_CDN_STREAMING_REASON_NET_CONNECT | 4: Fails to connect to the CDN.
DIRECT_CDN_STREAMING_REASON_BAD_NAME | 5: The URL is already being used. Use a new URL for streaming.

## ◆ DIRECT_CDN_STREAMING_STATE

enum agora::rtc::DIRECT_CDN_STREAMING_STATE

The current CDN streaming state.

Deprecated
  v4.6.0.

Enumerator
DIRECT_CDN_STREAMING_STATE_IDLE | 0: The initial state before the CDN streaming starts.
DIRECT_CDN_STREAMING_STATE_RUNNING | 1: Streams are being pushed to the CDN. The SDK returns this value when you call the `startDirectCdnStreaming` method to push streams to the CDN.
DIRECT_CDN_STREAMING_STATE_STOPPED | 2: Stops pushing streams to the CDN. The SDK returns this value when you call the `stopDirectCdnStreaming` method to stop pushing streams to the CDN.
DIRECT_CDN_STREAMING_STATE_FAILED | 3: Fails to push streams to the CDN. You can troubleshoot the issue with the information reported by the `onDirectCdnStreamingStateChanged` callback, and then push streams to the CDN again.
DIRECT_CDN_STREAMING_STATE_RECOVERING | 4: Tries to reconnect the Agora server to the CDN. The SDK attempts to reconnect a maximum of 10 times; if the connection is not restored, the streaming state becomes DIRECT_CDN_STREAMING_STATE_FAILED.

## ◆ QUALITY_REPORT_FORMAT_TYPE

enum agora::rtc::QUALITY_REPORT_FORMAT_TYPE

Enumerator
QUALITY_REPORT_JSON | 0: The quality report in JSON format,
QUALITY_REPORT_HTML | 1: The quality report in HTML format.

## ◆ MEDIA_DEVICE_STATE_TYPE

enum agora::rtc::MEDIA_DEVICE_STATE_TYPE

Media device states.

Enumerator
MEDIA_DEVICE_STATE_IDLE | 0: The device is ready for use.
MEDIA_DEVICE_STATE_ACTIVE | 1: The device is in use.
MEDIA_DEVICE_STATE_DISABLED | 2: The device is disabled.
MEDIA_DEVICE_STATE_PLUGGED_IN | 3: The device is plugged in.
MEDIA_DEVICE_STATE_NOT_PRESENT | 4: The device is not found.
MEDIA_DEVICE_STATE_UNPLUGGED | 8: The device is unplugged.

## ◆ VIDEO_PROFILE_TYPE

enum agora::rtc::VIDEO_PROFILE_TYPE

Enumerator
VIDEO_PROFILE_LANDSCAPE_120P | 0: 160 x 120 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_120P_3 | 2: 120 x 120 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_180P | 10: 320 x 180 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_180P_3 | 12: 180 x 180 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_180P_4 | 13: 240 x 180 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_240P | 20: 320 x 240 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_240P_3 | 22: 240 x 240 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_240P_4 | 23: 424 x 240 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_360P | 30: 640 x 360 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_360P_3 | 32: 360 x 360 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_360P_4 | 33: 640 x 360 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_360P_6 | 35: 360 x 360 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_360P_7 | 36: 480 x 360 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_360P_8 | 37: 480 x 360 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_360P_9 | 38: 640 x 360 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_360P_10 | 39: 640 x 360 @ 24 fps
VIDEO_PROFILE_LANDSCAPE_360P_11 | 100: 640 x 360 @ 24 fps
VIDEO_PROFILE_LANDSCAPE_480P | 40: 640 x 480 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_480P_3 | 42: 480 x 480 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_480P_4 | 43: 640 x 480 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_480P_6 | 45: 480 x 480 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_480P_8 | 47: 848 x 480 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_480P_9 | 48: 848 x 480 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_480P_10 | 49: 640 x 480 @ 10 fps
VIDEO_PROFILE_LANDSCAPE_720P | 50: 1280 x 720 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_720P_3 | 52: 1280 x 720 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_720P_5 | 54: 960 x 720 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_720P_6 | 55: 960 x 720 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_1080P | 60: 1920 x 1080 @ 15 fps
VIDEO_PROFILE_LANDSCAPE_1080P_3 | 62: 1920 x 1080 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_1080P_5 | 64: 1920 x 1080 @ 60 fps
VIDEO_PROFILE_LANDSCAPE_1440P | 66: 2560 x 1440 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_1440P_2 | 67: 2560 x 1440 @ 60 fps
VIDEO_PROFILE_LANDSCAPE_4K | 70: 3840 x 2160 @ 30 fps
VIDEO_PROFILE_LANDSCAPE_4K_3 | 72: 3840 x 2160 @ 60 fps
VIDEO_PROFILE_PORTRAIT_120P | 1000: 120 x 160 @ 15 fps
VIDEO_PROFILE_PORTRAIT_120P_3 | 1002: 120 x 120 @ 15 fps
VIDEO_PROFILE_PORTRAIT_180P | 1010: 180 x 320 @ 15 fps
VIDEO_PROFILE_PORTRAIT_180P_3 | 1012: 180 x 180 @ 15 fps
VIDEO_PROFILE_PORTRAIT_180P_4 | 1013: 180 x 240 @ 15 fps
VIDEO_PROFILE_PORTRAIT_240P | 1020: 240 x 320 @ 15 fps
VIDEO_PROFILE_PORTRAIT_240P_3 | 1022: 240 x 240 @ 15 fps
VIDEO_PROFILE_PORTRAIT_240P_4 | 1023: 240 x 424 @ 15 fps
VIDEO_PROFILE_PORTRAIT_360P | 1030: 360 x 640 @ 15 fps
VIDEO_PROFILE_PORTRAIT_360P_3 | 1032: 360 x 360 @ 15 fps
VIDEO_PROFILE_PORTRAIT_360P_4 | 1033: 360 x 640 @ 30 fps
VIDEO_PROFILE_PORTRAIT_360P_6 | 1035: 360 x 360 @ 30 fps
VIDEO_PROFILE_PORTRAIT_360P_7 | 1036: 360 x 480 @ 15 fps
VIDEO_PROFILE_PORTRAIT_360P_8 | 1037: 360 x 480 @ 30 fps
VIDEO_PROFILE_PORTRAIT_360P_9 | 1038: 360 x 640 @ 15 fps
VIDEO_PROFILE_PORTRAIT_360P_10 | 1039: 360 x 640 @ 24 fps
VIDEO_PROFILE_PORTRAIT_360P_11 | 1100: 360 x 640 @ 24 fps
VIDEO_PROFILE_PORTRAIT_480P | 1040: 480 x 640 @ 15 fps
VIDEO_PROFILE_PORTRAIT_480P_3 | 1042: 480 x 480 @ 15 fps
VIDEO_PROFILE_PORTRAIT_480P_4 | 1043: 480 x 640 @ 30 fps
VIDEO_PROFILE_PORTRAIT_480P_6 | 1045: 480 x 480 @ 30 fps
VIDEO_PROFILE_PORTRAIT_480P_8 | 1047: 480 x 848 @ 15 fps
VIDEO_PROFILE_PORTRAIT_480P_9 | 1048: 480 x 848 @ 30 fps
VIDEO_PROFILE_PORTRAIT_480P_10 | 1049: 480 x 640 @ 10 fps
VIDEO_PROFILE_PORTRAIT_720P | 1050: 720 x 1280 @ 15 fps
VIDEO_PROFILE_PORTRAIT_720P_3 | 1052: 720 x 1280 @ 30 fps
VIDEO_PROFILE_PORTRAIT_720P_5 | 1054: 720 x 960 @ 15 fps
VIDEO_PROFILE_PORTRAIT_720P_6 | 1055: 720 x 960 @ 30 fps
VIDEO_PROFILE_PORTRAIT_1080P | 1060: 1080 x 1920 @ 15 fps
VIDEO_PROFILE_PORTRAIT_1080P_3 | 1062: 1080 x 1920 @ 30 fps
VIDEO_PROFILE_PORTRAIT_1080P_5 | 1064: 1080 x 1920 @ 60 fps
VIDEO_PROFILE_PORTRAIT_1440P | 1066: 1440 x 2560 @ 30 fps
VIDEO_PROFILE_PORTRAIT_1440P_2 | 1067: 1440 x 2560 @ 60 fps
VIDEO_PROFILE_PORTRAIT_4K | 1070: 2160 x 3840 @ 30 fps
VIDEO_PROFILE_PORTRAIT_4K_3 | 1072: 2160 x 3840 @ 60 fps
VIDEO_PROFILE_DEFAULT | Default 640 x 360 @ 15 fps

## ◆ INTERFACE_ID_EX_TYPE

enum agora::rtc::INTERFACE_ID_EX_TYPE

Enumerator
AGORA_IID_RTC_ENGINE_EX |

## ◆ SCREEN_SHARING_MODE

enum agora::rtc::SCREEN_SHARING_MODE

Enumerator
SCREEN_SHARING_NORMAL |
SCREEN_SHARING_MOVIE |

## ◆ RecordingEventType

enum class agora::rtc::RecordingEventType : unsigned
| strong

Enumerator
RECORDING_EVENT_UNKNOWN |
RECORDING_EVENT_START |
RECORDING_EVENT_JOIN |
RECORDING_EVENT_LEAVE |
RECORDING_EVENT_END |

## ◆ RecordingEventKeyIndex

enum agora::rtc::RecordingEventKeyIndex

Enumerator
RECORDING_JOIN_EVT_START |
RECORDING_JOIN_EVT_MIXMODE |
RECORDING_JOIN_EVT_MIXEDVIDEOAUDIOMODE |
RECORDING_JOIN_EVT_MIXHIGH |
RECORDING_JOIN_EVT_MIXLOW |
RECORDING_JOIN_EVT_MIXFPS |
RECORDING_JOIN_EVT_MIXKBPS |
RECORDING_JOIN_EVT_MINUDPPORT |
RECORDING_JOIN_EVT_MAXUDPPORT |
RECORDING_JOIN_EVT_DECODEAUDIOTYPE |
RECORDING_JOIN_EVT_DECODEVIDEOTYPE |
RECORDING_JOIN_EVT_LIVEMODE |
RECORDING_JOIN_EVT_IDLE |
RECORDING_JOIN_EVT_AUDIOONLY |
RECORDING_JOIN_EVT_VIDEOONLY |
RECORDING_JOIN_EVT_SYSLOGFACILITY |
RECORDING_JOIN_EVT_STREAMTYPE |
RECORDING_JOIN_EVT_TRIGGERMODE |
RECORDING_JOIN_EVT_LANGUAGE |
RECORDING_JOIN_EVT_RESERVE1 |
MAX_RECORDING_JOIN_EVT_RESERVE15 |
RECORDING_JOIN_EVT_MAX |
RECORDING_LEAVE_EVT_START |
RECORDING_LEAVE_EVT_LEAVEPATHCODE |
RECORDING_LEAVE_EVT_RESERVE1 |
RECORDING_LEAVE_EVT_RESERVE5 |
RECORDING_LEAVE_EVT_MAX |

## ◆ APP_TYPE

enum agora::rtc::APP_TYPE

The development type of app

Enumerator
APP_TYPE_INVALID_VALUE |
APP_TYPE_NATIVE |
APP_TYPE_COCOS |
APP_TYPE_UNITY |
APP_TYPE_ELECTRON |
APP_TYPE_FLUTTER |
APP_TYPE_UNREAL |
APP_TYPE_XAMARIN |
APP_TYPE_APICLOUD |
APP_TYPE_REACT_NATIVE |
APP_TYPE_PYTHON |
APP_TYPE_COCOS_CREATOR |
APP_TYPE_RUST |
APP_TYPE_C_SHARP |
APP_TYPE_CEF |
APP_TYPE_UNI_APP |
APP_TYPE_UNREAL_BP |

## ◆ RTC_EVENT

enum class agora::rtc::RTC_EVENT
| strong

Enumerator
NATIVE_LOG |
ERROR_EVENT |
WARNING_EVENT |
MEDIA_ENGINE_LOAD_SUCCESS |
MEDIA_ENGINE_START_CAMERA_SUCCESS |
MEDIA_ENGINE_START_CALL_SUCCESS |
VIDEO_STOPPED |
TRANSPORT_QUALITY |
AUDIO_QUALITY |
TRANSPORT_SERVER_INSTANCE |
MEDIA_ENGINE_EVENT |
AUDIO_DEVICE_STATE_CHANGED |
VIDEO_DEVICE_STATE_CHANGED |
REQUEST_TOKEN |
CLIENT_ROLE_CHANGED |
PUBLISH_URL |
UNPUBLISH_URL |
LIVE_TRANSCODING |
JOIN_PUBLISHER_REQUEST |
JOIN_PUBILSHER_RESPONSE |
REMOVE_PUBLISHER_REQUEST |
STREAM_INJECTED_STATUS |
PRIVILEGE_WILL_EXPIRE |
LOCAL_VIDEO_STATE_CHANGED |
RTMP_STREAMING_STATE |
PUBLISH_STREAM_STATE |
CLIENT_ROLE_CHANGE_FAILED |
PUBLISH_STREAM_EVENT |
RENEW_TOKEN_RESULT |
LOCAL_VIDEO_EVENT |
OPEN_CHANNEL_SUCCESS |
LEAVE_CHANNEL |
NETWORK_QUALITY |
USER_OFFLINE |
RTC_STATS |
USER_JOINED |
USER_MUTE_AUDIO |
USER_MUTE_VIDEO |
USER_ENABLE_VIDEO |
LASTMILE_QUALITY |
AUDIO_EFFECT_FINISHED |
USER_ENABLE_LOCAL_VIDEO |
LASTMILE_PROBE_RESULT |
UPLINK_NETWORK_INFO_UPDATE |
DOWNLINK_NETWORK_INFO_UPDATE |
USER_STATE_CHANGED |
RECAP_INDICATION |
AUDIO_VOLUME_INDICATION |
FIRST_REMOTE_VIDEO_FRAME |
LOCAL_VIDEO_STAT |
REMOTE_VIDEO_STAT |
FIRST_LOCAL_VIDEO_FRAME |
FIRST_REMOTE_VIDEO_DECODED |
CONNECTION_LOST |
STREAM_MESSAGE |
CONNECTION_INTERRUPTED |
QUERY_RECORDING_SERVICE_STATUS |
STREAM_MESSAGE_ERROR |
VIDEO_SIZE_CHANGED |
FIRST_LOCAL_AUDIO_FRAME_PUBLISHED |
FIRST_LOCAL_VIDEO_FRAME_PUBLISHED |
ACTIVE_SPEAKER |
AUDIO_DEVICE_VOLUME_CHANGED |
_INTERNAL_ENGINE_STATUS |
CONNECTION_BANNED |
CAMERA_FOCUS_AREA_CHANGED |
REMOTE_VIDEO_STATE_CHANGED |
REMOTE_SUBSCRIBE_FALLBACK_TO_AUDIO_ONLY |
USER_TRANSPORT_STAT |
CONNECTION_STATE_CHANGED |
CAMERA_EXPOSURE_AREA_CHANGED |
REMOTE_AUDIO_STAT |
NETWORK_TYPE_CHANGED |
AUDIO_ROUTING_CHANGED |
FIRST_REMOTE_AUDIO_DECODED |
LOCAL_USER_REGISTERED |
USER_INFO_UPDATED |
REMOTE_VIDEO_STATE_CHANGED_EXT |
CROSS_CHANNEL_STATE |
CROSS_CHANNEL_EVENT |
REMOTE_AUDIO_STATE_CHANGED |
LOCAL_AUDIO_STAT |
LOCAL_AUDIO_STATE_CHANGED |
AUDIO_MIXING_STATE_CHANGED |
INTRA_REQUEST_RECEIVED |
PEER_USER_INFO_UPDATED |
ENCRYPTION_ERROR_EVENT |
REMOTE_VIDEO_STREAM_INFO_UPDATED |
AUDIO_SUBSCRIBE_STATE_CHANGED |
VIDEO_SUBSCRIBE_STATE_CHANGED |
AUDIO_PUBLISH_STATE_CHANGED |
VIDEO_PUBLISH_STATE_CHANGED |
PERMISSION_ERROR_EVENT |
FACE_DETECT_VALUE |
RHYTHM_PLAYFR_STATE_CHANGED |
UPLOAD_LOG_RESULT |
FIRST_REMOTE_AUDIO_FRAME |
PROXY_SUCCESS |
WLACC_MESSAGE |
WLACC_STATS |
SNAPSHOT_TAKEN |
CONTENT_INSPECT_RESULT |
AUDIO_MIXING_POSITION_CHANGED |
LICENSE_VERIFY |
VIDEO_RENDERING_TRACING_RESULT |
LOCAL_TRANSCODING |
SET_RTM_FLAG_RESULT |
VIDEO_LAYOUT_INFO |
AUDIO_METADATA_RECEIVED |
RDT_MESSAGE |
RDT_STATE_CHANGED |
MEDIA_CONTROL_MESSAGE |
PATH_STATS |
PERMISSION_GRANTED_EVENT |

## ◆ ENGINE_INIT_TS_POSITION

enum agora::rtc::ENGINE_INIT_TS_POSITION

Enumerator
CREATE_BEGIN |
CREATE_END |
INIT_BEGIN |
INIT_END |
INIT_END_INTERNAL |

## ◆ ENGINE_INIT_STATUS

enum agora::rtc::ENGINE_INIT_STATUS

Enumerator
STATUS_UNINIT |
STATUS_INITIALIZING |
STATUS_INITIALIZED |

## Function Documentation

## ◆ MinPositive()

template<typename T>

static T agora::rtc::MinPositive | ( | T | a,
|  | T | b )
| static

## ◆ SetFrom()

template<typename T>

static void agora::rtc::SetFrom | ( | Optional< T > * | s,
|  | const Optional< T > & | o )
| static

## ◆ ReplaceBy()

template<typename T>

static void agora::rtc::ReplaceBy | ( | Optional< T > * | s,
|  | const Optional< T > & | o )
| static

## ◆ decode_sei_layout()

AGORA_API bool AGORA_CALL agora::rtc::decode_sei_layout | ( | const void * | data,
|  | unsigned | size,
|  | layout_info * | layout )

## ◆ getInternalAgoraRtcEngine()

AGORA_API agora::rtc::IRtcEngineInternal *AGORA_CALL agora::rtc::getInternalAgoraRtcEngine | ( |  | ) |

## Variable Documentation

## ◆ kNoSourceValidForDownlink

const int agora::rtc::kNoSourceValidForDownlink = -1379
| static

## ◆ AUDIO_PIPELINE_POS_RECORD_ORIGIN

const std::string agora::rtc::AUDIO_PIPELINE_POS_RECORD_ORIGIN
| extern

## ◆ AUDIO_PIPELINE_POS_APM

const std::string agora::rtc::AUDIO_PIPELINE_POS_APM
| extern

## ◆ AUDIO_PIPELINE_POS_PRE_SEND_PROC

const std::string agora::rtc::AUDIO_PIPELINE_POS_PRE_SEND_PROC
| extern

## ◆ AUDIO_PIPELINE_POS_ENC

const std::string agora::rtc::AUDIO_PIPELINE_POS_ENC
| extern

## ◆ AUDIO_PIPELINE_POS_TX_MIXER

const std::string agora::rtc::AUDIO_PIPELINE_POS_TX_MIXER
| extern

## ◆ AUDIO_PIPELINE_POS_AT_RECORD

const std::string agora::rtc::AUDIO_PIPELINE_POS_AT_RECORD
| extern

## ◆ AUDIO_PIPELINE_POS_ATW_RECORD

const std::string agora::rtc::AUDIO_PIPELINE_POS_ATW_RECORD
| extern

## ◆ AUDIO_PIPELINE_POS_DEC

const std::string agora::rtc::AUDIO_PIPELINE_POS_DEC
| extern

## ◆ AUDIO_PIPELINE_POS_PLAY

const std::string agora::rtc::AUDIO_PIPELINE_POS_PLAY
| extern

## ◆ AUDIO_PIPELINE_POS_RX_MIXER

const std::string agora::rtc::AUDIO_PIPELINE_POS_RX_MIXER
| extern

## ◆ AUDIO_PIPELINE_POS_PLAYBACK_MIXER

const std::string agora::rtc::AUDIO_PIPELINE_POS_PLAYBACK_MIXER
| extern

## ◆ AUDIO_PIPELINE_POS_PCM_SOURCE_PLAYBAC_MIXER

const std::string agora::rtc::AUDIO_PIPELINE_POS_PCM_SOURCE_PLAYBAC_MIXER
| extern

## ◆ AUDIO_PIPELINE_POS_PRE_PLAY_PROC

const std::string agora::rtc::AUDIO_PIPELINE_POS_PRE_PLAY_PROC
| extern

## ◆ AUDIO_PIPELINE_POS_AT_PLAYOUT

const std::string agora::rtc::AUDIO_PIPELINE_POS_AT_PLAYOUT
| extern

## ◆ AUDIO_PIPELINE_POS_ATW_PLAYOUT

const std::string agora::rtc::AUDIO_PIPELINE_POS_ATW_PLAYOUT
| extern

## ◆ AUDIO_FRAME_DUMP_MIN_DURATION_MS

const int64_t agora::rtc::AUDIO_FRAME_DUMP_MIN_DURATION_MS = 0

## ◆ AUDIO_FRAME_DUMP_MAX_DURATION_MS

const int64_t agora::rtc::AUDIO_FRAME_DUMP_MAX_DURATION_MS = 150000

## ◆ kVideoEngineFlagHasIntraRequest

const uint8_t agora::rtc::kVideoEngineFlagHasIntraRequest = 0x10
| static

## ◆ kVideoEngineFlagStdCodec

const uint8_t agora::rtc::kVideoEngineFlagStdCodec = 0x8
| static

## ◆ kVideoEngineFlagNasa

const uint8_t agora::rtc::kVideoEngineFlagNasa = 0x40
| static

## ◆ kVideoEngineFlagScalableDelta

const uint8_t agora::rtc::kVideoEngineFlagScalableDelta = 0x80
| static

## ◆ kVideoEngineFlagMajorStreamOnly

const uint8_t agora::rtc::kVideoEngineFlagMajorStreamOnly = 0x01
| static

## ◆ kAgoraHeaderLength

const uint8_t agora::rtc::kAgoraHeaderLength = 3
| static

## ◆ kAgoraAudioExtendLength

const uint8_t agora::rtc::kAgoraAudioExtendLength = 5
| static

## ◆ AUDIO_MEDIA_PACKET_PAYLOAD_TYPE

const uint8_t agora::rtc::AUDIO_MEDIA_PACKET_PAYLOAD_TYPE = 127
| static

## ◆ BUILT_IN_SOURCE_FILTER

const char* const agora::rtc::BUILT_IN_SOURCE_FILTER = "built-in-source-filter"
| static

## ◆ BUILT_IN_METADATA_OBSERVER

const char* const agora::rtc::BUILT_IN_METADATA_OBSERVER = "built-in-metadata-observer"
| static

## ◆ BUILT_IN_ADAPTER

const char* const agora::rtc::BUILT_IN_ADAPTER = "built-in-adapter"
| static

## ◆ BUILT_IN_REMOTE_ADAPTER

const char* const agora::rtc::BUILT_IN_REMOTE_ADAPTER = "built-in-remote-adapter"
| static

## ◆ BUILT_IN_PRE_ENCODER_WATERMARK_FILTER

const char* const agora::rtc::BUILT_IN_PRE_ENCODER_WATERMARK_FILTER = "built-in-pre-encoder-watermarker"
| static

## ◆ BUILT_IN_POST_CAPTURER_WATERMARK_FILTER

const char* const agora::rtc::BUILT_IN_POST_CAPTURER_WATERMARK_FILTER = "built-in-post-capturer-watermarker"
| static

## ◆ BUILT_IN_PRE_ENCODER_FACEDETECE_FILTER

const char* const agora::rtc::BUILT_IN_PRE_ENCODER_FACEDETECE_FILTER = "built-in-pre-encoder-facedetect"
| static

## ◆ BUILT_IN_SOURCE_TEE

const char* const agora::rtc::BUILT_IN_SOURCE_TEE = "built-in-source-tee"
| static

## ◆ BUILT_IN_PREVIEW_TEE

const char* const agora::rtc::BUILT_IN_PREVIEW_TEE = "built-in-preview-tee"
| static

## ◆ BUILT_IN_MAJOR_TEE

const char* const agora::rtc::BUILT_IN_MAJOR_TEE = "built-in-major-tee"
| static

## ◆ BUILT_IN_SIMULCAST_TEE

const char* const agora::rtc::BUILT_IN_SIMULCAST_TEE = "built-in-simulcast-tee"
| static

## ◆ BUILT_IN_MINOR_ADAPTER

const char* const agora::rtc::BUILT_IN_MINOR_ADAPTER = "built-in-minor-adapter"
| static

## ◆ BUILT_IN_POST_CAPTURER_FILTER_OBSERVER

const char* const agora::rtc::BUILT_IN_POST_CAPTURER_FILTER_OBSERVER = "built-in-post-capturer-filter-observer"
| static

## ◆ BUILT_IN_PRE_ENCODER_FILTER_OBSERVER

const char* const agora::rtc::BUILT_IN_PRE_ENCODER_FILTER_OBSERVER = "built-in-pre-encoder-filter-observer"
| static

## ◆ BUILT_IN_POST_CAPTURER_FILTER_FRAME_OBSERVER

const char* const agora::rtc::BUILT_IN_POST_CAPTURER_FILTER_FRAME_OBSERVER = "CaptureFilterModeObserver"
| static

## ◆ BUILT_IN_PRE_ENCODER_FILTER_FRAME_OBSERVER

const char* const agora::rtc::BUILT_IN_PRE_ENCODER_FILTER_FRAME_OBSERVER = "PreEncoderFilterModeObserver"
| static

## ◆ BUILT_IN_STITCH_FRAME

const char* const agora::rtc::BUILT_IN_STITCH_FRAME = "built-in-stitch-frame"
| static

## ◆ BUILT_IN_SCREEN_CAPTURE_FILTER

const char* const agora::rtc::BUILT_IN_SCREEN_CAPTURE_FILTER = "built-in-screen-capture-filter"
| static

## ◆ GLFW_RESOURCE

const char* const agora::rtc::GLFW_RESOURCE = "glfw_resource"
| static

## ◆ kAdmMaxDeviceNameSize

const int agora::rtc::kAdmMaxDeviceNameSize = 128
| static

## ◆ kAdmMaxGuidSize

const int agora::rtc::kAdmMaxGuidSize = 128
| static

## ◆ kIntervalInMillseconds

const int agora::rtc::kIntervalInMillseconds = 200
| static

## ◆ kDeviceIdSize

const int agora::rtc::kDeviceIdSize = 128
| static

## ◆ kVdmMaxDeviceSize

const int agora::rtc::kVdmMaxDeviceSize = 260
| static

The maximum size of the device name and ID.

## ◆ VideoFrameMetaDataType

OPTIONAL_ENUM_CLASS agora::rtc::VideoFrameMetaDataType

Initial value:
{
kAlphaChannel,
kScreenMetaInfo,
kVideoSourceType,
kFaceInfo,
kFaceCaptureInfo,
kGravityRotation,
}

## ◆ VideoFrameGravityRotation

OPTIONAL_ENUM_CLASS agora::rtc::VideoFrameGravityRotation

Initial value:
{
kGravityRotation_Unknown = -1,
kGravityRotation_0 = 0,
kGravityRotation_90 = 90,
kGravityRotation_180 = 180,
kGravityRotation_270 = 270
}

## ◆ STANDARD_BITRATE

const int agora::rtc::STANDARD_BITRATE = 0

(Recommended) 0: Standard bitrate mode.

In this mode, the video bitrate is twice the base bitrate.

## ◆ COMPATIBLE_BITRATE

const int agora::rtc::COMPATIBLE_BITRATE = -1

-1: Compatible bitrate mode.

In this mode, the video bitrate is the same as the base bitrate.. If you choose this mode in the live-broadcast profile, the video frame rate may be lower than the set value.

## ◆ DEFAULT_MIN_BITRATE

const int agora::rtc::DEFAULT_MIN_BITRATE = -1

-1: (For future use) The default minimum bitrate.

## ◆ DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE

const int agora::rtc::DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE = -2

-2: (For future use) Set minimum bitrate the same as target bitrate.

## ◆ INVALID_TRACK_ID

const unsigned int agora::rtc::INVALID_TRACK_ID = 0xffffffff
| static

## ◆ DEFAULT_CONNECTION_ID

const unsigned int agora::rtc::DEFAULT_CONNECTION_ID = 0
| static

## ◆ DUMMY_CONNECTION_ID

const unsigned int agora::rtc::DUMMY_CONNECTION_ID = (std::numeric_limits<unsigned int>::max)()
| static