Server Gateway SDK v3.8.202.20 for Linux C++
AgoraBase.h
Go to the documentation of this file.
1//
2// Agora Engine SDK
3//
4// Created by Sting Feng in 2017-11.
5// Copyright (c) 2017 Agora.io. All rights reserved.
6//
7
8// This header file is included by both high level and low level APIs,
9#pragma once // NOLINT(build/header_guard)
10
11#include <stdarg.h>
12#include <stddef.h>
13#include <stdio.h>
14#include <string.h>
15#include <cassert>
16
17#include "IAgoraParameter.h"
18#include "AgoraMediaBase.h"
19#include "AgoraRefPtr.h"
20#include "AgoraOptional.h"
21
22#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)
23 #define AGORA_DEPRECATED __attribute__((deprecated))
24#elif defined(_MSC_VER)
25 #define AGORA_DEPRECATED __declspec(deprecated)
26#else
27 #define AGORA_DEPRECATED
28#endif
29
30#define MAX_PATH_260 (260)
31
32#if defined(_WIN32)
33
34#ifndef WIN32_LEAN_AND_MEAN
35#define WIN32_LEAN_AND_MEAN
36#endif // !WIN32_LEAN_AND_MEAN
37#if defined(__aarch64__)
38#include <arm64intr.h>
39#endif
40#include <Windows.h>
41
42#if defined(AGORARTC_EXPORT)
43#define AGORA_API extern "C" __declspec(dllexport)
44#else
45#define AGORA_API extern "C" __declspec(dllimport)
46#endif // AGORARTC_EXPORT
47
48#define AGORA_CALL __cdecl
49
50#elif defined(__APPLE__)
51
52#include <TargetConditionals.h>
53
54#define AGORA_API extern "C" __attribute__((visibility("default")))
55#define AGORA_CALL
56
57#elif defined(__ANDROID__) || defined(__linux__)
58
59#define AGORA_API extern "C" __attribute__((visibility("default")))
60#define AGORA_CALL
61
62#else // !_WIN32 && !__APPLE__ && !(__ANDROID__ || __linux__)
63
64#define AGORA_API extern "C"
65#define AGORA_CALL
66
67#endif // _WIN32
68
69#ifndef OPTIONAL_ENUM_SIZE_T
70#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
71#define OPTIONAL_ENUM_SIZE_T enum : size_t
72#else
73#define OPTIONAL_ENUM_SIZE_T enum
74#endif
75#endif
76
77#ifndef OPTIONAL_NULLPTR
78#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
79#define OPTIONAL_NULLPTR nullptr
80#else
81#define OPTIONAL_NULLPTR NULL
82#endif
83#endif
84
85namespace agora {
86namespace commons {
87namespace cjson {
88class JsonWrapper;
89} // namespace cjson
90} // namespace commons
91
92typedef commons::cjson::JsonWrapper any_document_t;
93
94namespace base {
95class IEngineBase;
96
98 public:
99 virtual int setParameters(const char* parameters) = 0;
100 virtual int getParameters(const char* key, any_document_t& result) = 0;
101 virtual ~IParameterEngine() {}
102};
103} // namespace base
104
105namespace util {
106
107template <class T>
108class AutoPtr {
109 protected:
110 typedef T value_type;
111 typedef T* pointer_type;
112
113 public:
114 explicit AutoPtr(pointer_type p = NULL) : ptr_(p) {}
115
117 if (ptr_) {
118 ptr_->release();
119 ptr_ = NULL;
120 }
121 }
122
123 operator bool() const { return (ptr_ != NULL); }
124
125 value_type& operator*() const { return *get(); }
126
127 pointer_type operator->() const { return get(); }
128
129 pointer_type get() const { return ptr_; }
130
132 pointer_type ret = ptr_;
133 ptr_ = 0;
134 return ret;
135 }
136
137 void reset(pointer_type ptr = NULL) {
138 if (ptr != ptr_ && ptr_) {
139 ptr_->release();
140 }
141
142 ptr_ = ptr;
143 }
144
145 template <class C1, class C2>
146 bool queryInterface(C1* c, C2 iid) {
147 pointer_type p = NULL;
148 if (c && !c->queryInterface(iid, reinterpret_cast<void**>(&p))) {
149 reset(p);
150 }
151
152 return (p != NULL);
153 }
154
155 private:
156 AutoPtr(const AutoPtr&);
157 AutoPtr& operator=(const AutoPtr&);
158
159 private:
160 pointer_type ptr_;
161};
162
163template <class T>
164class CopyableAutoPtr : public AutoPtr<T> {
165 typedef typename AutoPtr<T>::pointer_type pointer_type;
166
167 public:
168 explicit CopyableAutoPtr(pointer_type p = 0) : AutoPtr<T>(p) {}
169 explicit CopyableAutoPtr(const CopyableAutoPtr& rhs) { this->reset(rhs.clone()); }
171 if (this != &rhs) this->reset(rhs.clone());
172 return *this;
173 }
175 if (!this->get()) return NULL;
176 return this->get()->clone();
177 }
178};
179
180class IString {
181 public:
182 virtual bool empty() const = 0;
183 virtual const char* c_str() = 0;
184 virtual const char* data() = 0;
185 virtual size_t length() = 0;
186 virtual IString* clone() = 0;
187 virtual void release() = 0;
188 virtual ~IString() {}
189};
191
193 public:
194 virtual void* current() = 0;
195 virtual const void* const_current() const = 0;
196 virtual bool next() = 0;
197 virtual void release() = 0;
198 virtual ~IIterator() {}
199};
200
202 public:
203 virtual IIterator* begin() = 0;
204 virtual size_t size() const = 0;
205 virtual void release() = 0;
206 virtual ~IContainer() {}
207};
208
209template <class T>
211 IIterator* p;
212
213 public:
214 typedef T value_type;
218 typedef const value_type* const_pointer;
219 explicit AOutputIterator(IIterator* it = NULL) : p(it) {}
221 if (p) p->release();
222 }
223 AOutputIterator(const AOutputIterator& rhs) : p(rhs.p) {}
225 p->next();
226 return *this;
227 }
228 bool operator==(const AOutputIterator& rhs) const {
229 if (p && rhs.p)
230 return p->current() == rhs.p->current();
231 else
232 return valid() == rhs.valid();
233 }
234 bool operator!=(const AOutputIterator& rhs) const { return !this->operator==(rhs); }
235 reference operator*() { return *reinterpret_cast<pointer>(p->current()); }
236 const_reference operator*() const { return *reinterpret_cast<const_pointer>(p->const_current()); }
237 bool valid() const { return p && p->current() != NULL; }
238};
239
240template <class T>
241class AList {
242 IContainer* container;
243 bool owner;
244
245 public:
246 typedef T value_type;
250 typedef const value_type* const_pointer;
251 typedef size_t size_type;
254
255 public:
256 AList() : container(NULL), owner(false) {}
257 AList(IContainer* c, bool take_ownership) : container(c), owner(take_ownership) {}
258 ~AList() { reset(); }
259 void reset(IContainer* c = NULL, bool take_ownership = false) {
260 if (owner && container) container->release();
261 container = c;
262 owner = take_ownership;
263 }
264 iterator begin() { return container ? iterator(container->begin()) : iterator(NULL); }
265 iterator end() { return iterator(NULL); }
266 size_type size() const { return container ? container->size() : 0; }
267 bool empty() const { return size() == 0; }
268};
269
270} // namespace util
271
300
302
307 CHANNEL_PROFILE_COMMUNICATION_1v1 = 4,
308
314 CHANNEL_PROFILE_LIVE_BROADCASTING_2 = 5,
316};
317
319
323enum WARN_CODE_TYPE {
328 WARN_INVALID_VIEW = 8,
333 WARN_INIT_VIDEO = 16,
338 WARN_PENDING = 20,
343 WARN_NO_AVAILABLE_CHANNEL = 103,
349 WARN_LOOKUP_CHANNEL_TIMEOUT = 104,
354 WARN_LOOKUP_CHANNEL_REJECTED = 105,
360 WARN_OPEN_CHANNEL_TIMEOUT = 106,
365 WARN_OPEN_CHANNEL_REJECTED = 107,
366
367 // sdk: 100~1000
371 WARN_SWITCH_LIVE_VIDEO_TIMEOUT = 111,
375 WARN_SET_CLIENT_ROLE_TIMEOUT = 118,
379 WARN_OPEN_CHANNEL_INVALID_TICKET = 121,
383 WARN_OPEN_CHANNEL_TRY_NEXT_VOS = 122,
387 WARN_CHANNEL_CONNECTION_UNRECOVERABLE = 131,
391 WARN_CHANNEL_CONNECTION_IP_CHANGED = 132,
395 WARN_CHANNEL_CONNECTION_PORT_CHANGED = 133,
398 WARN_CHANNEL_SOCKET_ERROR = 134,
402 WARN_AUDIO_MIXING_OPEN_ERROR = 701,
406 WARN_ADM_RUNTIME_PLAYOUT_WARNING = 1014,
410 WARN_ADM_RUNTIME_RECORDING_WARNING = 1016,
414 WARN_ADM_RECORD_AUDIO_SILENCE = 1019,
418 WARN_ADM_PLAYOUT_MALFUNCTION = 1020,
422 WARN_ADM_RECORD_MALFUNCTION = 1021,
429 WARN_ADM_IOS_CATEGORY_NOT_PLAYANDRECORD = 1029,
433 WARN_ADM_IOS_SAMPLERATE_CHANGE = 1030,
437 WARN_ADM_RECORD_AUDIO_LOWLEVEL = 1031,
441 WARN_ADM_PLAYOUT_AUDIO_LOWLEVEL = 1032,
449 WARN_ADM_WINDOWS_NO_DATA_READY_EVENT = 1040,
453 WARN_APM_HOWLING = 1051,
457 WARN_ADM_GLITCH_STATE = 1052,
461 WARN_ADM_IMPROPER_SETTINGS = 1053,
465 WARN_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
470 WARN_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
478 WARN_ADM_WIN_CORE_IMPROPER_CAPTURE_RELEASE = 1324,
479};
480
481
485enum ERROR_CODE_TYPE {
489 ERR_OK = 0,
490 // 1~1000
494 ERR_FAILED = 1,
499 ERR_INVALID_ARGUMENT = 2,
506 ERR_NOT_READY = 3,
510 ERR_NOT_SUPPORTED = 4,
514 ERR_REFUSED = 5,
518 ERR_BUFFER_TOO_SMALL = 6,
522 ERR_NOT_INITIALIZED = 7,
526 ERR_INVALID_STATE = 8,
531 ERR_NO_PERMISSION = 9,
537 ERR_TIMEDOUT = 10,
542 ERR_CANCELED = 11,
548 ERR_TOO_OFTEN = 12,
554 ERR_BIND_SOCKET = 13,
559 ERR_NET_DOWN = 14,
565 ERR_NET_NOBUFS = 15,
571 ERR_JOIN_CHANNEL_REJECTED = 17,
578 ERR_LEAVE_CHANNEL_REJECTED = 18,
582 ERR_ALREADY_IN_USE = 19,
587 ERR_ABORTED = 20,
592 ERR_INIT_NET_ENGINE = 21,
597 ERR_RESOURCE_LIMITED = 22,
603 ERR_INVALID_APP_ID = 101,
608 ERR_INVALID_CHANNEL_NAME = 102,
614 ERR_NO_SERVER_RESOURCES = 103,
627 ERR_TOKEN_EXPIRED = 109,
644 ERR_INVALID_TOKEN = 110,
649 ERR_CONNECTION_INTERRUPTED = 111, // only used in web sdk
654 ERR_CONNECTION_LOST = 112, // only used in web sdk
659 ERR_NOT_IN_CHANNEL = 113,
664 ERR_SIZE_TOO_LARGE = 114,
669 ERR_BITRATE_LIMIT = 115,
674 ERR_TOO_MANY_DATA_STREAMS = 116,
678 ERR_STREAM_MESSAGE_TIMEOUT = 117,
682 ERR_SET_CLIENT_ROLE_NOT_AUTHORIZED = 119,
687 ERR_DECRYPTION_FAILED = 120,
691 ERR_INVALID_USER_ID = 121,
695 ERR_CLIENT_IS_BANNED_BY_SERVER = 123,
699 ERR_WATERMARK_PARAM = 124,
703 ERR_WATERMARK_PATH = 125,
707 ERR_WATERMARK_PNG = 126,
711 ERR_WATERMARKR_INFO = 127,
715 ERR_WATERMARK_ARGB = 128,
719 ERR_WATERMARK_READ = 129,
725 ERR_ENCRYPTED_STREAM_NOT_ALLOWED_PUBLISH = 130,
726
730 ERR_LICENSE_CREDENTIAL_INVALID = 131,
731
732 // Licensing, keep the license error code same as the main version
733 ERR_CERT_RAW = 157,
734 ERR_CERT_JSON_PART = 158,
735 ERR_CERT_JSON_INVAL = 159,
736 ERR_CERT_JSON_NOMEM = 160,
737 ERR_CERT_CUSTOM = 161,
738 ERR_CERT_CREDENTIAL = 162,
739 ERR_CERT_SIGN = 163,
740 ERR_CERT_FAIL = 164,
741 ERR_CERT_BUF = 165,
742 ERR_CERT_NULL = 166,
743 ERR_CERT_DUEDATE = 167,
744 ERR_CERT_REQUEST = 168,
745
746 // PcmSend Error num
747 ERR_PCMSEND_FORMAT =200, // unsupport pcm format
748 ERR_PCMSEND_BUFFEROVERFLOW = 201, // buffer overflow, the pcm send rate too quickly
749
750 // signaling: 400~600
751 ERR_LOGOUT_OTHER = 400, //
752 ERR_LOGOUT_USER = 401, // logout by user
753 ERR_LOGOUT_NET = 402, // network failure
754 ERR_LOGOUT_KICKED = 403, // login in other device
755 ERR_LOGOUT_PACKET = 404, //
756 ERR_LOGOUT_TOKEN_EXPIRED = 405, // token expired
757 ERR_LOGOUT_OLDVERSION = 406, //
758 ERR_LOGOUT_TOKEN_WRONG = 407,
759 ERR_LOGOUT_ALREADY_LOGOUT = 408,
760 ERR_LOGIN_OTHER = 420,
761 ERR_LOGIN_NET = 421,
762 ERR_LOGIN_FAILED = 422,
763 ERR_LOGIN_CANCELED = 423,
764 ERR_LOGIN_TOKEN_EXPIRED = 424,
765 ERR_LOGIN_OLD_VERSION = 425,
766 ERR_LOGIN_TOKEN_WRONG = 426,
767 ERR_LOGIN_TOKEN_KICKED = 427,
768 ERR_LOGIN_ALREADY_LOGIN = 428,
769 ERR_JOIN_CHANNEL_OTHER = 440,
770 ERR_SEND_MESSAGE_OTHER = 440,
771 ERR_SEND_MESSAGE_TIMEOUT = 441,
772 ERR_QUERY_USERNUM_OTHER = 450,
773 ERR_QUERY_USERNUM_TIMEOUT = 451,
774 ERR_QUERY_USERNUM_BYUSER = 452,
775 ERR_LEAVE_CHANNEL_OTHER = 460,
776 ERR_LEAVE_CHANNEL_KICKED = 461,
777 ERR_LEAVE_CHANNEL_BYUSER = 462,
778 ERR_LEAVE_CHANNEL_LOGOUT = 463,
779 ERR_LEAVE_CHANNEL_DISCONNECTED = 464,
780 ERR_INVITE_OTHER = 470,
781 ERR_INVITE_REINVITE = 471,
782 ERR_INVITE_NET = 472,
783 ERR_INVITE_PEER_OFFLINE = 473,
784 ERR_INVITE_TIMEOUT = 474,
785 ERR_INVITE_CANT_RECV = 475,
786
787 // 1001~2000
791 ERR_LOAD_MEDIA_ENGINE = 1001,
795 ERR_START_CALL = 1002,
799 ERR_START_CAMERA = 1003,
803 ERR_START_VIDEO_RENDER = 1004,
809 ERR_ADM_GENERAL_ERROR = 1005,
813 ERR_ADM_JAVA_RESOURCE = 1006,
817 ERR_ADM_SAMPLE_RATE = 1007,
822 ERR_ADM_INIT_PLAYOUT = 1008,
826 ERR_ADM_START_PLAYOUT = 1009,
830 ERR_ADM_STOP_PLAYOUT = 1010,
835 ERR_ADM_INIT_RECORDING = 1011,
839 ERR_ADM_START_RECORDING = 1012,
843 ERR_ADM_STOP_RECORDING = 1013,
848 ERR_ADM_RUNTIME_PLAYOUT_ERROR = 1015,
852 ERR_ADM_RUNTIME_RECORDING_ERROR = 1017,
856 ERR_ADM_RECORD_AUDIO_FAILED = 1018,
861 ERR_ADM_INIT_LOOPBACK = 1022,
866 ERR_ADM_START_LOOPBACK = 1023,
871 ERR_ADM_NO_PERMISSION = 1027,
875 ERR_ADM_RECORD_AUDIO_IS_ACTIVE = 1033,
879 ERR_ADM_ANDROID_JNI_JAVA_RESOURCE = 1101,
885 ERR_ADM_ANDROID_JNI_NO_RECORD_FREQUENCY = 1108,
891 ERR_ADM_ANDROID_JNI_NO_PLAYBACK_FREQUENCY = 1109,
899 ERR_ADM_ANDROID_JNI_JAVA_START_RECORD = 1111,
907 ERR_ADM_ANDROID_JNI_JAVA_START_PLAYBACK = 1112,
912 ERR_ADM_ANDROID_JNI_JAVA_RECORD_ERROR = 1115,
914 ERR_ADM_ANDROID_OPENSL_CREATE_ENGINE = 1151,
916 ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_RECORDER = 1153,
918 ERR_ADM_ANDROID_OPENSL_START_RECORDER_THREAD = 1156,
920 ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_PLAYER = 1157,
922 ERR_ADM_ANDROID_OPENSL_START_PLAYER_THREAD = 1160,
929 ERR_ADM_IOS_INPUT_NOT_AVAILABLE = 1201,
933 ERR_ADM_IOS_ACTIVATE_SESSION_FAIL = 1206,
938 ERR_ADM_IOS_VPIO_INIT_FAIL = 1210,
943 ERR_ADM_IOS_VPIO_REINIT_FAIL = 1213,
948 ERR_ADM_IOS_VPIO_RESTART_FAIL = 1214,
949 ERR_ADM_IOS_SET_RENDER_CALLBACK_FAIL = 1219,
951 ERR_ADM_IOS_SESSION_SAMPLERATR_ZERO = 1221,
959 ERR_ADM_WIN_CORE_INIT = 1301,
966 ERR_ADM_WIN_CORE_INIT_RECORDING = 1303,
973 ERR_ADM_WIN_CORE_INIT_PLAYOUT = 1306,
979 ERR_ADM_WIN_CORE_INIT_PLAYOUT_NULL = 1307,
986 ERR_ADM_WIN_CORE_START_RECORDING = 1309,
993 ERR_ADM_WIN_CORE_CREATE_REC_THREAD = 1311,
1002 ERR_ADM_WIN_CORE_CAPTURE_NOT_STARTUP = 1314,
1009 ERR_ADM_WIN_CORE_CREATE_RENDER_THREAD = 1319,
1018 ERR_ADM_WIN_CORE_RENDER_NOT_STARTUP = 1320,
1024 ERR_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
1030 ERR_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
1040 ERR_ADM_WIN_WAVE_INIT = 1351,
1049 ERR_ADM_WIN_WAVE_INIT_RECORDING = 1353,
1058 ERR_ADM_WIN_WAVE_INIT_MICROPHONE = 1354,
1067 ERR_ADM_WIN_WAVE_INIT_PLAYOUT = 1355,
1076 ERR_ADM_WIN_WAVE_INIT_SPEAKER = 1356,
1085 ERR_ADM_WIN_WAVE_START_RECORDING = 1357,
1094 ERR_ADM_WIN_WAVE_START_PLAYOUT = 1358,
1098 ERR_ADM_NO_RECORDING_DEVICE = 1359,
1102 ERR_ADM_NO_PLAYOUT_DEVICE = 1360,
1103
1104 // VDM error code starts from 1500
1108 ERR_VDM_CAMERA_NOT_AUTHORIZED = 1501,
1109
1110 // VDM error code starts from 1500
1114 ERR_VDM_WIN_DEVICE_IN_USE = 1502,
1115
1116 // VCM error code starts from 1600
1120 ERR_VCM_UNKNOWN_ERROR = 1600,
1125 ERR_VCM_ENCODER_INIT_ERROR = 1601,
1129 ERR_VCM_ENCODER_ENCODE_ERROR = 1602,
1133 ERR_VCM_ENCODER_SET_ERROR = 1603,
1134};
1135
1136
1140enum AUDIO_SESSION_OPERATION_RESTRICTION {
1144 AUDIO_SESSION_OPERATION_RESTRICTION_NONE = 0,
1148 AUDIO_SESSION_OPERATION_RESTRICTION_SET_CATEGORY = 1,
1152 AUDIO_SESSION_OPERATION_RESTRICTION_CONFIGURE_SESSION = 1 << 1,
1157 AUDIO_SESSION_OPERATION_RESTRICTION_DEACTIVATE_SESSION = 1 << 2,
1162 AUDIO_SESSION_OPERATION_RESTRICTION_ALL = 1 << 7,
1163};
1165typedef const char* user_id_t;
1166typedef void* view_t;
1167
1171struct UserInfo {
1188
1189 UserInfo() : hasAudio(false), hasVideo(false) {}
1190};
1191
1193
1194// Shared between Agora Service and Rtc Engine
1195namespace rtc {
1196
1215};
1216
1218enum INTERFACE_ID_TYPE {
1219 AGORA_IID_AUDIO_DEVICE_MANAGER = 1,
1220 AGORA_IID_VIDEO_DEVICE_MANAGER = 2,
1221 AGORA_IID_PARAMETER_ENGINE = 3,
1222 AGORA_IID_MEDIA_ENGINE = 4,
1223 AGORA_IID_AUDIO_ENGINE = 5,
1224 AGORA_IID_VIDEO_ENGINE = 6,
1225 AGORA_IID_RTC_CONNECTION = 7,
1226 AGORA_IID_SIGNALING_ENGINE = 8,
1227 AGORA_IID_MEDIA_ENGINE_REGULATOR = 9,
1228 AGORA_IID_CLOUD_SPATIAL_AUDIO = 10,
1229 AGORA_IID_LOCAL_SPATIAL_AUDIO = 11,
1230};
1232
1268
1272 QUALITY_UNSUPPORTED = 7,
1276 QUALITY_DETECTING
1278};
1279
1281
1284enum FIT_MODE_TYPE {
1289 MODE_COVER = 1,
1290
1296 MODE_CONTAIN = 2,
1297};
1299
1321
1354};
1363};
1372};
1373
1374
1392
1421};
1422
1444
1447 DISABLED = 100,
1449};
1450
1463 VideoDimensions() : width(640), height(480) {}
1464 VideoDimensions(int w, int h) : width(w), height(h) {}
1465 bool operator==(const VideoDimensions& rhs) const {
1466 return width == rhs.width && height == rhs.height;
1467 }
1468};
1469
1479const int STANDARD_BITRATE = 0;
1480
1488const int COMPATIBLE_BITRATE = -1;
1490
1493const int DEFAULT_MIN_BITRATE = -1;
1494
1498const int DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE = -2;
1500
1541};
1542
1551 // kIsac = 2,
1564 // kIlbc = 6,
1566 // AUDIO_CODEC_AAC = 7,
1576
1579 AUDIO_CODEC_JC1 = 10,
1581
1586
1589 AUDIO_CODEC_LPCNET = 12,
1591};
1592
1594
1597enum AUDIO_ENCODING_TYPE {
1601 AUDIO_ENCODING_TYPE_AAC_16000_LOW = 0x010101,
1605 AUDIO_ENCODING_TYPE_AAC_16000_MEDIUM = 0x010102,
1609 AUDIO_ENCODING_TYPE_AAC_32000_LOW = 0x010201,
1613 AUDIO_ENCODING_TYPE_AAC_32000_MEDIUM = 0x010202,
1617 AUDIO_ENCODING_TYPE_AAC_32000_HIGH = 0x010203,
1621 AUDIO_ENCODING_TYPE_AAC_48000_MEDIUM = 0x010302,
1625 AUDIO_ENCODING_TYPE_AAC_48000_HIGH = 0x010303,
1626
1630 AUDIO_ENCODING_TYPE_OPUS_16000_LOW = 0x020101,
1634 AUDIO_ENCODING_TYPE_OPUS_16000_MEDIUM = 0x020102,
1638 AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM = 0x020302,
1642 AUDIO_ENCODING_TYPE_OPUS_48000_HIGH = 0x020303,
1643};
1644
1648enum WATERMARK_FIT_MODE {
1653 FIT_MODE_COVER_POSITION,
1658 FIT_MODE_USE_IMAGE_RATIO
1659};
1661
1667 : speech(true),
1668 sendEvenIfEmpty(true) {}
1669
1682
1683};
1684
1691 sampleRateHz(0),
1693 numberOfChannels(0) {}
1694
1696 : codec(rhs.codec),
1723};
1725
1728struct AudioPcmDataInfo {
1729 AudioPcmDataInfo() : samplesPerChannel(0), channelNum(0), samplesOut(0), elapsedTimeMs(0), ntpTimeMs(0) {}
1730
1731 AudioPcmDataInfo(const AudioPcmDataInfo& rhs)
1732 : samplesPerChannel(rhs.samplesPerChannel),
1733 channelNum(rhs.channelNum),
1734 samplesOut(rhs.samplesOut),
1735 elapsedTimeMs(rhs.elapsedTimeMs),
1736 ntpTimeMs(rhs.ntpTimeMs) {}
1737
1741 size_t samplesPerChannel;
1742
1743 int16_t channelNum;
1744
1745 // Output
1749 size_t samplesOut;
1753 int64_t elapsedTimeMs;
1757 int64_t ntpTimeMs;
1758};
1762enum H264PacketizeMode {
1766 NonInterleaved = 0, // Mode 1 - STAP-A, FU-A is allowed
1770 SingleNalUnit, // Mode 0 - only single NALU allowed
1771};
1773
1785};
1803
1805 encodedFrameOnly(false) {}
1806
1807 explicit VideoSubscriptionOptions(VIDEO_STREAM_TYPE streamtype) : type(streamtype),
1808 encodedFrameOnly(false) {}
1809
1810 VideoSubscriptionOptions(VIDEO_STREAM_TYPE streamtype, bool encoded_only) : type(streamtype),
1811 encodedFrameOnly(encoded_only) {}
1812};
1813
1820 width(0),
1821 height(0),
1822 framesPerSecond(0),
1825 trackId(0),
1826 renderTimeMs(0),
1827 internalSendTs(0),
1828 uid(0),
1830
1832 : codecType(rhs.codecType),
1833 width(rhs.width),
1834 height(rhs.height),
1836 frameType(rhs.frameType),
1837 rotation(rhs.rotation),
1838 trackId(rhs.trackId),
1841 uid(rhs.uid),
1842 streamType(rhs.streamType) {}
1843
1845 if (this == &rhs) return *this;
1846 codecType = rhs.codecType;
1847 width = rhs.width;
1848 height = rhs.height;
1850 frameType = rhs.frameType;
1851 rotation = rhs.rotation;
1852 trackId = rhs.trackId;
1855 uid = rhs.uid;
1856 streamType = rhs.streamType;
1857 return *this;
1858 }
1889 int trackId; // This can be reserved for multiple video tracks, we need to create different ssrc
1890 // and additional payload for later implementation.
1891
1918};
1919
1936};
1937
1971
1997
2002
2005 dimensions(d),
2006 frameRate(f),
2007 bitrate(b),
2008 minBitrate(DEFAULT_MIN_BITRATE),
2009 orientationMode(m),
2011 mirrorMode(mirror) {}
2014 dimensions(width, height),
2015 frameRate(f),
2016 bitrate(b),
2017 minBitrate(DEFAULT_MIN_BITRATE),
2018 orientationMode(m),
2020 mirrorMode(mirror) {}
2022 : codecType(config.codecType),
2023 dimensions(config.dimensions),
2024 frameRate(config.frameRate),
2025 bitrate(config.bitrate),
2026 minBitrate(config.minBitrate),
2029 mirrorMode(config.mirrorMode) {}
2035 minBitrate(DEFAULT_MIN_BITRATE),
2039
2041 if (this == &rhs) return *this;
2042 codecType = rhs.codecType;
2043 dimensions = rhs.dimensions;
2044 frameRate = rhs.frameRate;
2045 bitrate = rhs.bitrate;
2046 minBitrate = rhs.minBitrate;
2049 mirrorMode = rhs.mirrorMode;
2050 return *this;
2051 }
2052};
2054
2056struct DataStreamConfig {
2059 bool syncWithAudio;
2062 bool ordered;
2063};
2065
2083 bool operator==(const SimulcastStreamConfig& rhs) const {
2084 return dimensions == rhs.dimensions && bitrate == rhs.bitrate && framerate == rhs.framerate;
2085 }
2086};
2087
2091struct RtcStats {
2095 unsigned int duration;
2099 unsigned int txBytes;
2103 unsigned int rxBytes;
2107 unsigned int txAudioBytes;
2111 unsigned int txVideoBytes;
2115 unsigned int rxAudioBytes;
2119 unsigned int rxVideoBytes;
2123 unsigned short txKBitRate;
2127 unsigned short rxKBitRate;
2131 unsigned short rxAudioKBitRate;
2135 unsigned short txAudioKBitRate;
2139 unsigned short rxVideoKBitRate;
2143 unsigned short txVideoKBitRate;
2147 unsigned short lastmileDelay;
2151 unsigned int userCount;
2235 : duration(0),
2236 txBytes(0),
2237 rxBytes(0),
2238 txAudioBytes(0),
2239 txVideoBytes(0),
2240 rxAudioBytes(0),
2241 rxVideoBytes(0),
2242 txKBitRate(0),
2243 rxKBitRate(0),
2244 rxAudioKBitRate(0),
2245 txAudioKBitRate(0),
2246 rxVideoKBitRate(0),
2247 txVideoKBitRate(0),
2248 lastmileDelay(0),
2249 userCount(0),
2250 cpuAppUsage(0.0),
2251 cpuTotalUsage(0.0),
2252 gatewayRtt(0),
2256 connectTimeMs(0),
2267 rxPacketLossRate(0) {}
2268};
2269
2277
2326
2339};
2340
2350};
2351
2353
2354enum AUDIENCE_LATENCY_LEVEL_TYPE
2355{
2357 AUDIENCE_LATENCY_LEVEL_LOW_LATENCY = 1,
2359 AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY = 2,
2363 AUDIENCE_LATENCY_LEVEL_HIGH_LATENCY = 3,
2364};
2365
2368struct ClientRoleOptions
2369{
2373 AUDIENCE_LATENCY_LEVEL_TYPE audienceLatencyLevel;
2374 ClientRoleOptions()
2375 : audienceLatencyLevel(AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY) {}
2376};
2377
2382struct RemoteAudioStats
2383{
2387 uid_t uid;
2391 int quality;
2395 int networkTransportDelay;
2399 int jitterBufferDelay;
2403 int audioLossRate;
2407 int numChannels;
2411 int receivedSampleRate;
2416 int receivedBitrate;
2423 int totalFrozenTime;
2428 int frozenRate;
2445 int mosValue;
2450 int totalActiveTime;
2454 int publishDuration;
2455
2456 RemoteAudioStats() :
2457 uid(0),
2458 quality(0),
2459 networkTransportDelay(0),
2460 jitterBufferDelay(0),
2461 audioLossRate(0),
2462 numChannels(0),
2463 receivedSampleRate(0),
2464 receivedBitrate(0),
2465 totalFrozenTime(0),
2466 frozenRate(0),
2467 mosValue(0),
2468 totalActiveTime(0),
2469 publishDuration(0){}
2470};
2472
2511 AUDIO_PROFILE_NUM = 7
2513};
2514
2547};
2548
2550
2553struct VideoFormat {
2556 kMaxWidthInPixels = 3840,
2558 kMaxHeightInPixels = 2160,
2560 kMaxFps = 60,
2561 };
2562
2566 int width; // Number of pixels.
2570 int height; // Number of pixels.
2574 int fps;
2575
2577 uint32_t pixelFormat;
2578
2579 VideoFormat() : width(FRAME_WIDTH_640), height(FRAME_HEIGHT_360), fps(FRAME_RATE_FPS_15), pixelFormat(0) {}
2580 VideoFormat(int w, int h, int f, uint32_t fmt = 0) : width(w), height(h), fps(f), pixelFormat(fmt) {}
2581};
2583
2585
2588enum VIDEO_CONTENT_HINT {
2592 CONTENT_HINT_NONE,
2599 CONTENT_HINT_MOTION,
2605 CONTENT_HINT_DETAILS
2606};
2608
2630
2661
2682
2700
2701 LOCAL_VIDEO_STREAM_ERROR_BACKGROUD = 6,
2703 LOCAL_VIDEO_STREAM_ERROR_MULTIPLE_FOREGROUND_APPS = 7,
2705 LOCAL_VIDEO_STREAM_ERROR_SYSTEM_PRESSURE = 8,
2707 LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_MINIMIZED = 11,
2709 LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_CLOSED = 12
2711};
2712
2717{
2724 REMOTE_AUDIO_STATE_STOPPED = 0, // Default state, audio is started or remote user disabled/muted audio stream
2728 REMOTE_AUDIO_STATE_STARTING = 1, // The first audio frame packet has been received
2735 REMOTE_AUDIO_STATE_DECODING = 2, // The first remote audio frame has been decoded or frozen state ends
2740 REMOTE_AUDIO_STATE_FROZEN = 3, // Remote audio is frozen, probably due to network issue
2745 REMOTE_AUDIO_STATE_FAILED = 4, // Remote audio play failed
2746};
2747
2752{
2789};
2790
2818};
2825
2830
2835
2840
2845
2850
2855
2860
2865
2871
2874 REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_LOW = 10,
2878 REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_HIGH = 11,
2880};
2881
2891 , observationPosition(agora::media::base::POSITION_POST_CAPTURER) {}
2902
2910 const char* channelId;
2930
2933 uint32_t observationPosition;
2935};
2936
2961};
2963
2966struct AudioVolumeInfo {
2970 uid_t uid;
2971
2975 unsigned int volume; // [0,255]
2976
2977 /*
2978 * The activity status of remote users
2979 */
2980 unsigned int vad;
2981
2985 double voicePitch;
2986
2987 AudioVolumeInfo() : uid(0), volume(0), vad(0), voicePitch(0.0) {}
2988};
2989
2993class IPacketObserver {
2994 public:
2995 virtual ~IPacketObserver() {}
2999 struct Packet {
3003 const unsigned char* buffer;
3007 unsigned int size;
3008
3009 Packet() : buffer(NULL), size(0) {}
3010 };
3018 virtual bool onSendAudioPacket(Packet& packet) = 0;
3026 virtual bool onSendVideoPacket(Packet& packet) = 0;
3034 virtual bool onReceiveAudioPacket(Packet& packet) = 0;
3042 virtual bool onReceiveVideoPacket(Packet& packet) = 0;
3043};
3045
3049 public:
3059 virtual bool OnEncodedVideoImageReceived(const uint8_t* imageBuffer, size_t length,
3060 const EncodedVideoFrameInfo& videoEncodedFrameInfo) = 0;
3061
3063};
3065
3068enum AUDIO_SAMPLE_RATE_TYPE {
3072 AUDIO_SAMPLE_RATE_32000 = 32000,
3076 AUDIO_SAMPLE_RATE_44100 = 44100,
3080 AUDIO_SAMPLE_RATE_48000 = 48000,
3081};
3085enum VIDEO_CODEC_PROFILE_TYPE {
3089 VIDEO_CODEC_PROFILE_BASELINE = 66,
3093 VIDEO_CODEC_PROFILE_MAIN = 77,
3097 VIDEO_CODEC_PROFILE_HIGH = 100,
3098};
3099
3103enum AUDIO_CODEC_PROFILE_TYPE {
3107 AUDIO_CODEC_PROFILE_LC_AAC = 0,
3111 AUDIO_CODEC_PROFILE_HE_AAC = 1,
3112};
3114
3120{
3134
3137 int internalCodec;
3139};
3140
3142
3145enum RTMP_STREAM_PUBLISH_STATE {
3152 RTMP_STREAM_PUBLISH_STATE_IDLE = 0,
3158 RTMP_STREAM_PUBLISH_STATE_CONNECTING = 1,
3163 RTMP_STREAM_PUBLISH_STATE_RUNNING = 2,
3173 RTMP_STREAM_PUBLISH_STATE_RECOVERING = 3,
3178 RTMP_STREAM_PUBLISH_STATE_FAILURE = 4,
3179};
3180
3184enum RTMP_STREAM_PUBLISH_ERROR {
3188 RTMP_STREAM_PUBLISH_ERROR_FAILED = -1,
3192 RTMP_STREAM_PUBLISH_ERROR_OK = 0,
3198 RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT = 1,
3202 RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED = 2,
3207 RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT = 3,
3212 RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR = 4,
3216 RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR = 5,
3220 RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN = 6,
3224 RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT = 7,
3228 RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED = 8,
3232 RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND = 9,
3236 RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED = 10,
3241 RTMP_STREAM_PUBLISH_ERROR_CDN_ERROR = 11,
3245 RTMP_STREAM_PUBLISH_ERROR_ALREADY_IN_USE = 12,
3251 RTMP_STREAM_UNPUBLISH_ERROR_OK = 100,
3252};
3254
3259{
3282};
3283
3312};
3313
3333
3342 unsigned int packetLossRate;
3346 unsigned int jitter;
3351
3353 jitter(0),
3354 availableBandwidth(0) {}
3355};
3356
3377 unsigned int rtt;
3378
3381 rtt(0) {}
3382};
3383
3388{
3466};
3467
3500};
3502
3504struct BeautyOptions {
3507 enum LIGHTENING_CONTRAST_LEVEL {
3509 LIGHTENING_CONTRAST_LOW = 0,
3511 LIGHTENING_CONTRAST_NORMAL,
3513 LIGHTENING_CONTRAST_HIGH
3514 };
3515
3518 LIGHTENING_CONTRAST_LEVEL lighteningContrastLevel;
3519
3522 float lighteningLevel;
3523
3526 float smoothnessLevel;
3527
3530 float rednessLevel;
3531
3534 float sharpnessLevel;
3535
3536 BeautyOptions(LIGHTENING_CONTRAST_LEVEL contrastLevel, float lightening, float smoothness, float redness, float sharpness) : lighteningContrastLevel(contrastLevel), lighteningLevel(lightening), smoothnessLevel(smoothness), rednessLevel(redness), sharpnessLevel(sharpness) {}
3537
3538 BeautyOptions() : lighteningContrastLevel(LIGHTENING_CONTRAST_NORMAL), lighteningLevel(0), smoothnessLevel(0), rednessLevel(0), sharpnessLevel(0) {}
3539};
3540
3541
3542struct VirtualBackgroundSource {
3545 enum BACKGROUND_SOURCE_TYPE {
3549 BACKGROUND_COLOR = 1,
3553 BACKGROUND_IMG,
3555 BACKGROUND_BLUR,
3556 };
3557
3560 enum BACKGROUND_BLUR_DEGREE {
3562 BLUR_DEGREE_LOW = 1,
3564 BLUR_DEGREE_MEDIUM,
3566 BLUR_DEGREE_HIGH,
3567 };
3568
3571 BACKGROUND_SOURCE_TYPE background_source_type;
3572
3581 unsigned int color;
3582
3589 const char* source;
3590
3592 BACKGROUND_BLUR_DEGREE blur_degree;
3593
3594 VirtualBackgroundSource() : background_source_type(BACKGROUND_COLOR), color(0xffffff), source(NULL), blur_degree(BLUR_DEGREE_HIGH) {}
3595};
3596
3597struct SegmentationProperty {
3598
3599 enum SEG_MODEL_TYPE {
3600
3601 SEG_MODEL_AGORA_AI_ONE = 0,
3602 SEG_MODEL_AGORA_GREEN = 2
3603 };
3604
3605 SEG_MODEL_TYPE modelType;
3606
3607 int preferVelocity;
3608
3609 float greenCapacity;
3610
3611
3612 SegmentationProperty() : modelType(SEG_MODEL_AGORA_AI_ONE), preferVelocity(1), greenCapacity(0.5){}
3613};
3616
3636enum VOICE_BEAUTIFIER_PRESET {
3639 VOICE_BEAUTIFIER_OFF = 0x00000000,
3645 CHAT_BEAUTIFIER_MAGNETIC = 0x01010100,
3651 CHAT_BEAUTIFIER_FRESH = 0x01010200,
3657 CHAT_BEAUTIFIER_VITALITY = 0x01010300,
3671 SINGING_BEAUTIFIER = 0x01020100,
3674 TIMBRE_TRANSFORMATION_VIGOROUS = 0x01030100,
3677 TIMBRE_TRANSFORMATION_DEEP = 0x01030200,
3680 TIMBRE_TRANSFORMATION_MELLOW = 0x01030300,
3683 TIMBRE_TRANSFORMATION_FALSETTO = 0x01030400,
3686 TIMBRE_TRANSFORMATION_FULL = 0x01030500,
3689 TIMBRE_TRANSFORMATION_CLEAR = 0x01030600,
3692 TIMBRE_TRANSFORMATION_RESOUNDING = 0x01030700,
3695 TIMBRE_TRANSFORMATION_RINGING = 0x01030800,
3696
3697 ULTRA_HIGH_QUALITY_VOICE = 0x01040100
3698};
3699
3702enum AUDIO_EFFECT_PRESET {
3705 AUDIO_EFFECT_OFF = 0x00000000,
3713 ROOM_ACOUSTICS_KTV = 0x02010100,
3721 ROOM_ACOUSTICS_VOCAL_CONCERT = 0x02010200,
3729 ROOM_ACOUSTICS_STUDIO = 0x02010300,
3737 ROOM_ACOUSTICS_PHONOGRAPH = 0x02010400,
3744 ROOM_ACOUSTICS_VIRTUAL_STEREO = 0x02010500,
3752 ROOM_ACOUSTICS_SPACIAL = 0x02010600,
3760 ROOM_ACOUSTICS_ETHEREAL = 0x02010700,
3772 ROOM_ACOUSTICS_3D_VOICE = 0x02010800,
3783 VOICE_CHANGER_EFFECT_UNCLE = 0x02020100,
3794 VOICE_CHANGER_EFFECT_OLDMAN = 0x02020200,
3805 VOICE_CHANGER_EFFECT_BOY = 0x02020300,
3816 VOICE_CHANGER_EFFECT_SISTER = 0x02020400,
3827 VOICE_CHANGER_EFFECT_GIRL = 0x02020500,
3836 VOICE_CHANGER_EFFECT_PIGKING = 0x02020600,
3844 VOICE_CHANGER_EFFECT_HULK = 0x02020700,
3852 STYLE_TRANSFORMATION_RNB = 0x02030100,
3860 STYLE_TRANSFORMATION_POPULAR = 0x02030200,
3870 PITCH_CORRECTION = 0x02040100
3871
3875};
3876
3879enum VOICE_CONVERSION_PRESET {
3882 VOICE_CONVERSION_OFF = 0x00000000,
3885 VOICE_CHANGER_NEUTRAL = 0x03010100,
3888 VOICE_CHANGER_SWEET = 0x03010200,
3891 VOICE_CHANGER_SOLID = 0x03010300,
3894 VOICE_CHANGER_BASS = 0x03010400
3895};
3896
3897// TODO(ZYH), it will be deleted after the new interfaces have been implemented to replace it.
3898enum AUDIO_REVERB_PRESET {
3902 AUDIO_REVERB_OFF = 0, // Turn off audio reverb
3906 AUDIO_REVERB_FX_KTV = 0x02010100,
3910 AUDIO_REVERB_FX_VOCAL_CONCERT = 0x02010200,
3914 AUDIO_REVERB_FX_UNCLE = 0x02020100,
3918 AUDIO_REVERB_FX_SISTER = 0x02020400,
3922 AUDIO_REVERB_FX_STUDIO = 0x02010300,
3926 AUDIO_REVERB_FX_POPULAR = 0x02030200,
3930 AUDIO_REVERB_FX_RNB = 0x02030100,
3934 AUDIO_REVERB_FX_PHONOGRAPH = 0x02010400
3935};
3936
3940enum AUDIO_RECORDING_QUALITY_TYPE {
3944 AUDIO_RECORDING_QUALITY_LOW = 0,
3948 AUDIO_RECORDING_QUALITY_MEDIUM = 1,
3952 AUDIO_RECORDING_QUALITY_HIGH = 2,
3953};
3954
3958enum AUDIO_FILE_RECORDING_TYPE {
3962 AUDIO_FILE_RECORDING_MIC = 1,
3966 AUDIO_FILE_RECORDING_PLAYBACK = 2,
3970 AUDIO_FILE_RECORDING_MIXED = 3,
3971};
3972
3976enum AUDIO_ENCODED_FRAME_OBSERVER_POSITION {
3980 AUDIO_ENCODED_FRAME_OBSERVER_POSITION_RECORD = 1,
3984 AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK = 2,
3988 AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED = 3,
3989};
3990
3994struct AudioRecordingConfiguration {
3999 const char* filePath;
4005 bool encode;
4010 int sampleRate;
4014 AUDIO_FILE_RECORDING_TYPE fileRecordingType;
4018 AUDIO_RECORDING_QUALITY_TYPE quality;
4019
4020 AudioRecordingConfiguration()
4021 : filePath(NULL),
4022 encode(false),
4023 sampleRate(32000),
4024 fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
4025 quality(AUDIO_RECORDING_QUALITY_LOW) {}
4026
4027 AudioRecordingConfiguration(const char* file_path, int sample_rate, AUDIO_RECORDING_QUALITY_TYPE quality_type)
4028 : filePath(file_path),
4029 encode(false),
4030 sampleRate(sample_rate),
4031 fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
4032 quality(quality_type) {}
4033
4034 AudioRecordingConfiguration(const char* file_path, bool enc, int sample_rate, AUDIO_FILE_RECORDING_TYPE type, AUDIO_RECORDING_QUALITY_TYPE quality_type)
4035 : filePath(file_path),
4036 encode(enc),
4037 sampleRate(sample_rate),
4038 fileRecordingType(type),
4039 quality(quality_type) {}
4040
4041 AudioRecordingConfiguration(const AudioRecordingConfiguration &rhs)
4042 : filePath(rhs.filePath),
4043 encode(rhs.encode),
4044 sampleRate(rhs.sampleRate),
4045 fileRecordingType(rhs.fileRecordingType),
4046 quality(rhs.quality) {}
4047};
4048
4053struct AudioEncodedFrameObserverConfig {
4057 AUDIO_ENCODED_FRAME_OBSERVER_POSITION postionType;
4061 AUDIO_ENCODING_TYPE encodingType;
4062
4063 AudioEncodedFrameObserverConfig()
4064 : postionType(AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK),
4065 encodingType(AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM){}
4066
4067};
4068
4069class IAudioEncodedFrameObserver {
4070public:
4078virtual void OnRecordAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4079
4087virtual void OnPlaybackAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4088
4096virtual void OnMixedAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4097
4098virtual ~IAudioEncodedFrameObserver () {}
4099};
4102
4105enum VOICE_CHANGER_PRESET {
4109 VOICE_CHANGER_OFF = 0, //Turn off the voice changer
4113 VOICE_CHANGER_OLDMAN = 0x02020200,
4117 VOICE_CHANGER_BABYBOY = 0x02020300,
4121 VOICE_CHANGER_BABYGIRL = 0x02020500,
4126 VOICE_CHANGER_ZHUBAJIE = 0x02020600,
4130 VOICE_CHANGER_ETHEREAL = 0x02010700,
4134 VOICE_CHANGER_HULK = 0x02020700,
4138 VOICE_BEAUTY_VIGOROUS = 0x01030100,
4142 VOICE_BEAUTY_DEEP = 0x01030200,
4146 VOICE_BEAUTY_MELLOW = 0x01030300,
4150 VOICE_BEAUTY_FALSETTO = 0x01030400,
4154 VOICE_BEAUTY_FULL = 0x01030500,
4158 VOICE_BEAUTY_CLEAR = 0x01030600,
4162 VOICE_BEAUTY_RESOUNDING = 0x01030700,
4166 VOICE_BEAUTY_RINGING = 0x01030800,
4170 VOICE_BEAUTY_SPACIAL = 0x02010600,
4175 GENERAL_BEAUTY_VOICE_MALE = 0x01010100,
4180 GENERAL_BEAUTY_VOICE_FEMALE_FRESH = 0x01010200,
4185 GENERAL_BEAUTY_VOICE_FEMALE_VITALITY = 0x01010300
4186};
4188
4195 AREA_CODE_CN = 0x00000001,
4199 AREA_CODE_NA = 0x00000002,
4203 AREA_CODE_EU = 0x00000004,
4207 AREA_CODE_AS = 0x00000008,
4211 AREA_CODE_JP = 0x00000010,
4215 AREA_CODE_IN = 0x00000020,
4219 AREA_CODE_GLOB = (0xFFFFFFFF)
4221
4223
4226enum AREA_CODE_EX {
4230 AREA_CODE_OC = 0x00000040,
4234 AREA_CODE_SA = 0x00000080,
4238 AREA_CODE_AF = 0x00000100,
4242 AREA_CODE_KR = 0x00000200,
4246 AREA_CODE_OVS = 0xFFFFFFFE
4247};
4248
4249enum CHANNEL_MEDIA_RELAY_ERROR {
4252 RELAY_OK = 0,
4255 RELAY_ERROR_SERVER_ERROR_RESPONSE = 1,
4260 RELAY_ERROR_SERVER_NO_RESPONSE = 2,
4264 RELAY_ERROR_NO_RESOURCE_AVAILABLE = 3,
4267 RELAY_ERROR_FAILED_JOIN_SRC = 4,
4270 RELAY_ERROR_FAILED_JOIN_DEST = 5,
4273 RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC = 6,
4276 RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST = 7,
4281 RELAY_ERROR_SERVER_CONNECTION_LOST = 8,
4284 RELAY_ERROR_INTERNAL_ERROR = 9,
4287 RELAY_ERROR_SRC_TOKEN_EXPIRED = 10,
4290 RELAY_ERROR_DEST_TOKEN_EXPIRED = 11,
4291};
4292
4293//callback event
4294enum CHANNEL_MEDIA_RELAY_EVENT {
4298 RELAY_EVENT_NETWORK_DISCONNECTED = 0,
4301 RELAY_EVENT_NETWORK_CONNECTED = 1,
4304 RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL = 2,
4307 RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL = 3,
4310 RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL = 4,
4313 RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC = 5,
4316 RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC = 6,
4319 RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL = 7,
4322 RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED = 8,
4326 RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE = 9,
4329 RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL = 10,
4332 RELAY_EVENT_VIDEO_PROFILE_UPDATE = 11,
4335 RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS = 12,
4338 RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED = 13,
4341 RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS = 14,
4344 RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED = 15,
4345};
4346
4347enum CHANNEL_MEDIA_RELAY_STATE {
4350 RELAY_STATE_IDLE = 0,
4353 RELAY_STATE_CONNECTING = 1,
4357 RELAY_STATE_RUNNING = 2,
4360 RELAY_STATE_FAILURE = 3,
4361};
4362
4365struct ChannelMediaInfo {
4369 const char* channelName;
4373 const char* token;
4376 uid_t uid;
4377};
4378
4381struct ChannelMediaRelayConfiguration {
4393 ChannelMediaInfo *srcInfo;
4400 ChannelMediaInfo *destInfos;
4406 int destCount;
4407
4408 ChannelMediaRelayConfiguration()
4409 : srcInfo(NULL),
4410 destInfos(NULL),
4411 destCount(0)
4412 {}
4413};
4415
4423
4425
4426 bool operator==(const UplinkNetworkInfo& rhs) const {
4428 }
4429};
4430
4439 const char* uid;
4452
4458
4460 if (this == &rhs) return *this;
4465 if (rhs.uid != OPTIONAL_NULLPTR) {
4466 char* temp = new char[strlen(rhs.uid) + 1];
4467 strcpy(temp, rhs.uid);
4468 uid = temp;
4469 }
4470 return *this;
4471 }
4472
4474 if (uid) { delete [] uid; }
4475 }
4476 };
4477
4498
4505
4512 if (total_received_video_count <= 0) return;
4514 for (int i = 0; i < total_received_video_count; ++i)
4516 }
4517
4519 if (this == &rhs) return *this;
4527 for (int i = 0; i < total_received_video_count; ++i)
4529 }
4530 return *this;
4531 }
4532
4535 }
4536};
4537
4542
4544 AES_128_XTS = 1,
4547 AES_128_ECB = 2,
4550 AES_256_XTS = 3,
4552
4558 AES_128_GCM = 5,
4561 AES_256_GCM = 6,
4564 AES_128_GCM2 = 7,
4567 AES_256_GCM2 = 8,
4570 MODE_END,
4572};
4573
4585 const char* encryptionKey;
4587
4589 : encryptionMode(AES_128_GCM2),
4590 encryptionKey(NULL)
4591 {
4592 memset(encryptionKdfSalt, 0, sizeof(encryptionKdfSalt));
4593 }
4594
4596 const char* getEncryptionString() const {
4597 switch(encryptionMode) {
4598 case AES_128_XTS:
4599 return "aes-128-xts";
4600 case AES_128_ECB:
4601 return "aes-128-ecb";
4602 case AES_256_XTS:
4603 return "aes-256-xts";
4604 case SM4_128_ECB:
4605 return "sm4-128-ecb";
4606 case AES_128_GCM:
4607 return "aes-128-gcm";
4608 case AES_256_GCM:
4609 return "aes-256-gcm";
4610 case AES_128_GCM2:
4611 return "aes-128-gcm-2";
4612 case AES_256_GCM2:
4613 return "aes-256-gcm-2";
4614 default:
4615 return "aes-128-gcm-2";
4616 }
4617 return "aes-128-gcm-2";
4618 }
4620};
4621
4637};
4638
4640
4643enum UPLOAD_ERROR_REASON
4644{
4645 UPLOAD_SUCCESS = 0,
4646 UPLOAD_NET_ERROR = 1,
4647 UPLOAD_SERVER_ERROR = 2,
4648};
4649
4652enum PERMISSION_TYPE {
4653 RECORD_AUDIO = 0,
4654 CAMERA = 1,
4655};
4657
4661{
4666
4688
4710
4714struct UserInfo {
4724 : uid(0) {
4725 userAccount[0] = '\0';
4726 }
4727};
4728
4730
4733enum EAR_MONITORING_FILTER_TYPE {
4737 EAR_MONITORING_FILTER_NONE = (1<<0),
4741 EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS = (1<<1),
4745 EAR_MONITORING_FILTER_NOISE_SUPPRESSION = (1<<2)
4746};
4748
4750
4753enum THREAD_PRIORITY_TYPE {
4757 LOWEST = 0,
4761 LOW = 1,
4765 NORMAL = 2,
4769 HIGH = 3,
4773 HIGHEST = 4,
4777 CRITICAL = 5,
4778};
4780
4792};
4793} // namespace rtc
4794
4795namespace base {
4796
4798 public:
4799 virtual int queryInterface(rtc::INTERFACE_ID_TYPE iid, void** inter) = 0;
4800 virtual ~IEngineBase() {}
4801};
4802
4803class AParameter : public agora::util::AutoPtr<IAgoraParameter> {
4804 public:
4805 AParameter(IEngineBase& engine) { initialize(&engine); }
4806 AParameter(IEngineBase* engine) { initialize(engine); }
4808
4809 private:
4810 bool initialize(IEngineBase* engine) {
4811 IAgoraParameter* p = NULL;
4812 if (engine && !engine->queryInterface(rtc::AGORA_IID_PARAMETER_ENGINE, (void**)&p)) reset(p);
4813 return p != NULL;
4814 }
4815};
4816
4818 public:
4819 virtual ~LicenseCallback() {}
4820 virtual void onCertificateRequired() = 0;
4821 virtual void onLicenseRequest() = 0;
4822 virtual void onLicenseValidated() = 0;
4823 virtual void onLicenseError(int result) = 0;
4824};
4825
4826} // namespace base
4828
4831struct SpatialAudioParams {
4835 Optional<double> speaker_azimuth;
4839 Optional<double> speaker_elevation;
4843 Optional<double> speaker_distance;
4847 Optional<int> speaker_orientation;
4851 Optional<bool> enable_blur;
4855 Optional<bool> enable_air_absorb;
4856};
4858} // namespace agora
4859
4866
4873AGORA_API int AGORA_CALL setAgoraSdkExternalSymbolLoader(void* (*func)(const char* symname));
4874
4883
4897AGORA_API int AGORA_CALL getAgoraCertificateVerifyResult(const char *credential_buf, int credential_len,
4898 const char *certificate_buf, int certificate_len);
4899
4909
#define AGORA_CALL
Definition: AgoraBase.h:65
AGORA_API const char *AGORA_CALL getAgoraSdkVersion(int *build)
AGORA_API int AGORA_CALL createAgoraCredential(agora::util::AString &credential)
#define AGORA_API
Definition: AgoraBase.h:64
AGORA_API int AGORA_CALL getAgoraCertificateVerifyResult(const char *credential_buf, int credential_len, const char *certificate_buf, int certificate_len)
AGORA_API void setAgoraLicenseCallback(agora::base::LicenseCallback *callback)
Implement the agora::base::LicenseCallback, create a LicenseCallback object to receive callbacks of l...
AGORA_API int AGORA_CALL setAgoraSdkExternalSymbolLoader(void *(*func)(const char *symname))
AGORA_API agora::base::LicenseCallback * getAgoraLicenseCallback()
Get the LicenseCallback pointer if already setup, otherwise, return null.
AGORA_API const char *AGORA_CALL getAgoraSdkErrorDescription(int err)
#define OPTIONAL_NULLPTR
Definition: AgoraBase.h:81
#define OPTIONAL_ENUM_SIZE_T
Definition: AgoraMediaBase.h:18
Definition: AgoraOptional.h:413
Definition: AgoraBase.h:4803
AParameter(IEngineBase &engine)
Definition: AgoraBase.h:4805
AParameter(IEngineBase *engine)
Definition: AgoraBase.h:4806
AParameter(IAgoraParameter *p)
Definition: AgoraBase.h:4807
Definition: IAgoraParameter.h:226
Definition: AgoraBase.h:4797
virtual ~IEngineBase()
Definition: AgoraBase.h:4800
virtual int queryInterface(rtc::INTERFACE_ID_TYPE iid, void **inter)=0
Definition: AgoraBase.h:97
virtual int setParameters(const char *parameters)=0
virtual int getParameters(const char *key, any_document_t &result)=0
virtual ~IParameterEngine()
Definition: AgoraBase.h:101
Definition: AgoraBase.h:4817
virtual void onLicenseRequest()=0
virtual ~LicenseCallback()
Definition: AgoraBase.h:4819
virtual void onLicenseValidated()=0
virtual void onCertificateRequired()=0
virtual void onLicenseError(int result)=0
Definition: AgoraBase.h:3048
virtual bool OnEncodedVideoImageReceived(const uint8_t *imageBuffer, size_t length, const EncodedVideoFrameInfo &videoEncodedFrameInfo)=0
virtual ~IVideoEncodedImageReceiver()
Definition: AgoraBase.h:3062
Definition: AgoraBase.h:241
iterator begin()
Definition: AgoraBase.h:264
AList(IContainer *c, bool take_ownership)
Definition: AgoraBase.h:257
~AList()
Definition: AgoraBase.h:258
const AOutputIterator< value_type > const_iterator
Definition: AgoraBase.h:253
value_type * pointer
Definition: AgoraBase.h:249
void reset(IContainer *c=NULL, bool take_ownership=false)
Definition: AgoraBase.h:259
AOutputIterator< value_type > iterator
Definition: AgoraBase.h:252
iterator end()
Definition: AgoraBase.h:265
value_type & reference
Definition: AgoraBase.h:247
AList()
Definition: AgoraBase.h:256
T value_type
Definition: AgoraBase.h:246
bool empty() const
Definition: AgoraBase.h:267
const value_type * const_pointer
Definition: AgoraBase.h:250
size_t size_type
Definition: AgoraBase.h:251
size_type size() const
Definition: AgoraBase.h:266
const value_type & const_reference
Definition: AgoraBase.h:248
Definition: AgoraBase.h:210
AOutputIterator & operator++()
Definition: AgoraBase.h:224
value_type & reference
Definition: AgoraBase.h:215
bool operator!=(const AOutputIterator &rhs) const
Definition: AgoraBase.h:234
reference operator*()
Definition: AgoraBase.h:235
AOutputIterator(const AOutputIterator &rhs)
Definition: AgoraBase.h:223
~AOutputIterator()
Definition: AgoraBase.h:220
bool operator==(const AOutputIterator &rhs) const
Definition: AgoraBase.h:228
T value_type
Definition: AgoraBase.h:214
value_type * pointer
Definition: AgoraBase.h:217
const value_type & const_reference
Definition: AgoraBase.h:216
const value_type * const_pointer
Definition: AgoraBase.h:218
const_reference operator*() const
Definition: AgoraBase.h:236
AOutputIterator(IIterator *it=NULL)
Definition: AgoraBase.h:219
bool valid() const
Definition: AgoraBase.h:237
Definition: AgoraBase.h:108
void reset(pointer_type ptr=NULL)
Definition: AgoraBase.h:137
value_type & operator*() const
Definition: AgoraBase.h:125
bool queryInterface(C1 *c, C2 iid)
Definition: AgoraBase.h:146
pointer_type get() const
Definition: AgoraBase.h:129
~AutoPtr()
Definition: AgoraBase.h:116
T value_type
Definition: AgoraBase.h:110
pointer_type release()
Definition: AgoraBase.h:131
pointer_type operator->() const
Definition: AgoraBase.h:127
AutoPtr(pointer_type p=NULL)
Definition: AgoraBase.h:114
T * pointer_type
Definition: AgoraBase.h:111
Definition: AgoraBase.h:164
CopyableAutoPtr(const CopyableAutoPtr &rhs)
Definition: AgoraBase.h:169
pointer_type clone() const
Definition: AgoraBase.h:174
CopyableAutoPtr & operator=(const CopyableAutoPtr &rhs)
Definition: AgoraBase.h:170
CopyableAutoPtr(pointer_type p=0)
Definition: AgoraBase.h:168
Definition: AgoraBase.h:201
virtual size_t size() const =0
virtual ~IContainer()
Definition: AgoraBase.h:206
virtual void release()=0
virtual IIterator * begin()=0
Definition: AgoraBase.h:192
virtual void release()=0
virtual const void * const_current() const =0
virtual void * current()=0
virtual bool next()=0
virtual ~IIterator()
Definition: AgoraBase.h:198
Definition: AgoraBase.h:180
virtual const char * c_str()=0
virtual bool empty() const =0
virtual IString * clone()=0
virtual size_t length()=0
virtual const char * data()=0
virtual void release()=0
virtual ~IString()
Definition: AgoraBase.h:188
@ POSITION_POST_CAPTURER
Definition: AgoraMediaBase.h:629
LOCAL_AUDIO_STREAM_STATE
Definition: AgoraBase.h:2612
@ LOCAL_AUDIO_STREAM_STATE_FAILED
Definition: AgoraBase.h:2628
@ LOCAL_AUDIO_STREAM_STATE_RECORDING
Definition: AgoraBase.h:2620
@ LOCAL_AUDIO_STREAM_STATE_STOPPED
Definition: AgoraBase.h:2616
@ LOCAL_AUDIO_STREAM_STATE_ENCODING
Definition: AgoraBase.h:2624
FRAME_HEIGHT
Definition: AgoraBase.h:1367
@ FRAME_HEIGHT_360
Definition: AgoraBase.h:1371
AUDIO_SCENARIO_TYPE
Definition: AgoraBase.h:2518
@ AUDIO_SCENARIO_NUM
Definition: AgoraBase.h:2546
@ AUDIO_SCENARIO_GAME_STREAMING
Definition: AgoraBase.h:2528
@ AUDIO_SCENARIO_CHORUS
Definition: AgoraBase.h:2542
@ AUDIO_SCENARIO_HIGH_DEFINITION
Definition: AgoraBase.h:2538
@ AUDIO_SCENARIO_CHATROOM
Definition: AgoraBase.h:2534
@ AUDIO_SCENARIO_DEFAULT
Definition: AgoraBase.h:2522
FRAME_WIDTH
Definition: AgoraBase.h:1358
@ FRAME_WIDTH_640
Definition: AgoraBase.h:1362
CONNECTION_CHANGED_REASON_TYPE
Definition: AgoraBase.h:3388
@ CONNECTION_CHANGED_INVALID_TOKEN
Definition: AgoraBase.h:3424
@ CONNECTION_CHANGED_BANNED_BY_SERVER
Definition: AgoraBase.h:3404
@ CONNECTION_CHANGED_REJOIN_SUCCESS
Definition: AgoraBase.h:3453
@ CONNECTION_CHANGED_ECHO_TEST
Definition: AgoraBase.h:3461
@ CONNECTION_CHANGED_INVALID_CHANNEL_NAME
Definition: AgoraBase.h:3420
@ CONNECTION_CHANGED_JOIN_SUCCESS
Definition: AgoraBase.h:3396
@ CONNECTION_CHANGED_INTERRUPTED
Definition: AgoraBase.h:3400
@ CONNECTION_CHANGED_LEAVE_CHANNEL
Definition: AgoraBase.h:3412
@ CONNECTION_CHANGED_CONNECTING
Definition: AgoraBase.h:3392
@ CONNECTION_CHANGED_SETTING_PROXY_SERVER
Definition: AgoraBase.h:3436
@ CONNECTION_CHANGED_LOST
Definition: AgoraBase.h:3457
@ CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED
Definition: AgoraBase.h:3445
@ CONNECTION_CHANGED_JOIN_FAILED
Definition: AgoraBase.h:3408
@ CONNECTION_CHANGED_RENEW_TOKEN
Definition: AgoraBase.h:3440
@ CONNECTION_CHANGED_TOKEN_EXPIRED
Definition: AgoraBase.h:3428
@ CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT
Definition: AgoraBase.h:3449
@ CONNECTION_CHANGED_REJECTED_BY_SERVER
Definition: AgoraBase.h:3432
@ CONNECTION_CHANGED_INVALID_APP_ID
Definition: AgoraBase.h:3416
@ CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED_BY_USER
Definition: AgoraBase.h:3465
ENCRYPTION_ERROR_TYPE
Definition: AgoraBase.h:4624
@ ENCRYPTION_ERROR_ENCRYPTION_FAILURE
Definition: AgoraBase.h:4636
@ ENCRYPTION_ERROR_DECRYPTION_FAILURE
Definition: AgoraBase.h:4632
@ ENCRYPTION_ERROR_INTERNAL_FAILURE
Definition: AgoraBase.h:4628
FRAME_RATE
Definition: AgoraBase.h:1325
@ FRAME_RATE_FPS_24
Definition: AgoraBase.h:1345
@ FRAME_RATE_FPS_15
Definition: AgoraBase.h:1341
@ FRAME_RATE_FPS_1
Definition: AgoraBase.h:1329
@ FRAME_RATE_FPS_10
Definition: AgoraBase.h:1337
@ FRAME_RATE_FPS_30
Definition: AgoraBase.h:1349
@ FRAME_RATE_FPS_7
Definition: AgoraBase.h:1333
@ FRAME_RATE_FPS_60
Definition: AgoraBase.h:1353
LOCAL_AUDIO_STREAM_ERROR
Definition: AgoraBase.h:2634
@ LOCAL_AUDIO_STREAM_ERROR_FAILURE
Definition: AgoraBase.h:2642
@ LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY
Definition: AgoraBase.h:2650
@ LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE
Definition: AgoraBase.h:2659
@ LOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURE
Definition: AgoraBase.h:2655
@ LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION
Definition: AgoraBase.h:2646
@ LOCAL_AUDIO_STREAM_ERROR_OK
Definition: AgoraBase.h:2638
CLIENT_ROLE_TYPE
Definition: AgoraBase.h:2330
@ CLIENT_ROLE_AUDIENCE
Definition: AgoraBase.h:2338
@ CLIENT_ROLE_BROADCASTER
Definition: AgoraBase.h:2334
CONNECTION_STATE_TYPE
Definition: AgoraBase.h:3259
@ CONNECTION_STATE_DISCONNECTED
Definition: AgoraBase.h:3263
@ CONNECTION_STATE_RECONNECTING
Definition: AgoraBase.h:3277
@ CONNECTION_STATE_CONNECTING
Definition: AgoraBase.h:3267
@ CONNECTION_STATE_FAILED
Definition: AgoraBase.h:3281
@ CONNECTION_STATE_CONNECTED
Definition: AgoraBase.h:3272
const int COMPATIBLE_BITRATE
Definition: AgoraBase.h:1488
REMOTE_AUDIO_STATE_REASON
Definition: AgoraBase.h:2752
@ REMOTE_AUDIO_REASON_REMOTE_UNMUTED
Definition: AgoraBase.h:2784
@ REMOTE_AUDIO_REASON_REMOTE_MUTED
Definition: AgoraBase.h:2779
@ REMOTE_AUDIO_REASON_LOCAL_MUTED
Definition: AgoraBase.h:2769
@ REMOTE_AUDIO_REASON_REMOTE_OFFLINE
Definition: AgoraBase.h:2788
@ REMOTE_AUDIO_REASON_NETWORK_CONGESTION
Definition: AgoraBase.h:2760
@ REMOTE_AUDIO_REASON_NETWORK_RECOVERY
Definition: AgoraBase.h:2764
@ REMOTE_AUDIO_REASON_LOCAL_UNMUTED
Definition: AgoraBase.h:2774
@ REMOTE_AUDIO_REASON_INTERNAL
Definition: AgoraBase.h:2756
TCcMode
Definition: AgoraBase.h:4783
@ CC_DISABLED
Definition: AgoraBase.h:4791
@ CC_ENABLED
Definition: AgoraBase.h:4787
USER_OFFLINE_REASON_TYPE
Definition: AgoraBase.h:1200
@ USER_OFFLINE_BECOME_AUDIENCE
Definition: AgoraBase.h:1214
@ USER_OFFLINE_QUIT
Definition: AgoraBase.h:1204
@ USER_OFFLINE_DROPPED
Definition: AgoraBase.h:1210
STREAM_PUBLISH_STATE
Definition: AgoraBase.h:4692
@ PUB_STATE_IDLE
Definition: AgoraBase.h:4696
@ PUB_STATE_PUBLISHED
Definition: AgoraBase.h:4708
@ PUB_STATE_PUBLISHING
Definition: AgoraBase.h:4704
@ PUB_STATE_NO_PUBLISHED
Definition: AgoraBase.h:4700
VIDEO_STREAM_TYPE
Definition: AgoraBase.h:1776
@ VIDEO_STREAM_HIGH
Definition: AgoraBase.h:1780
@ VIDEO_STREAM_LOW
Definition: AgoraBase.h:1784
unsigned int track_id_t
Definition: AgoraMediaBase.h:26
AUDIO_PROFILE_TYPE
Definition: AgoraBase.h:2476
@ AUDIO_PROFILE_MUSIC_STANDARD_STEREO
Definition: AgoraBase.h:2497
@ AUDIO_PROFILE_IOT
Definition: AgoraBase.h:2509
@ AUDIO_PROFILE_MUSIC_HIGH_QUALITY
Definition: AgoraBase.h:2501
@ AUDIO_PROFILE_DEFAULT
Definition: AgoraBase.h:2484
@ AUDIO_PROFILE_MUSIC_STANDARD
Definition: AgoraBase.h:2492
@ AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO
Definition: AgoraBase.h:2505
@ AUDIO_PROFILE_SPEECH_STANDARD
Definition: AgoraBase.h:2488
VIDEO_CODEC_TYPE
Definition: AgoraBase.h:1504
@ VIDEO_CODEC_GENERIC_H264
Definition: AgoraBase.h:1532
@ VIDEO_CODEC_H265
Definition: AgoraBase.h:1520
@ VIDEO_CODEC_GENERIC_JPEG
Definition: AgoraBase.h:1540
@ VIDEO_CODEC_VP9
Definition: AgoraBase.h:1524
@ VIDEO_CODEC_AV1
Definition: AgoraBase.h:1536
@ VIDEO_CODEC_H264
Definition: AgoraBase.h:1516
@ VIDEO_CODEC_GENERIC
Definition: AgoraBase.h:1528
@ VIDEO_CODEC_NONE
Definition: AgoraBase.h:1508
@ VIDEO_CODEC_VP8
Definition: AgoraBase.h:1512
LOCAL_VIDEO_STREAM_STATE
Definition: AgoraBase.h:2664
@ LOCAL_VIDEO_STREAM_STATE_ENCODING
Definition: AgoraBase.h:2676
@ LOCAL_VIDEO_STREAM_STATE_FAILED
Definition: AgoraBase.h:2680
@ LOCAL_VIDEO_STREAM_STATE_STOPPED
Definition: AgoraBase.h:2668
@ LOCAL_VIDEO_STREAM_STATE_CAPTURING
Definition: AgoraBase.h:2672
REMOTE_VIDEO_STATE
Definition: AgoraBase.h:2792
@ REMOTE_VIDEO_STATE_FAILED
Definition: AgoraBase.h:2817
@ REMOTE_VIDEO_STATE_DECODING
Definition: AgoraBase.h:2808
@ REMOTE_VIDEO_STATE_FROZEN
Definition: AgoraBase.h:2813
@ REMOTE_VIDEO_STATE_STARTING
Definition: AgoraBase.h:2801
@ REMOTE_VIDEO_STATE_STOPPED
Definition: AgoraBase.h:2798
AREA_CODE
Definition: AgoraBase.h:4191
@ AREA_CODE_NA
Definition: AgoraBase.h:4199
@ AREA_CODE_AS
Definition: AgoraBase.h:4207
@ AREA_CODE_EU
Definition: AgoraBase.h:4203
@ AREA_CODE_JP
Definition: AgoraBase.h:4211
@ AREA_CODE_GLOB
Definition: AgoraBase.h:4219
@ AREA_CODE_IN
Definition: AgoraBase.h:4215
@ AREA_CODE_CN
Definition: AgoraBase.h:4195
MAX_USER_ACCOUNT_LENGTH_TYPE
Definition: AgoraBase.h:4661
@ MAX_USER_ACCOUNT_LENGTH
Definition: AgoraBase.h:4664
VIDEO_MIRROR_MODE_TYPE
Definition: AgoraBase.h:1923
@ VIDEO_MIRROR_MODE_AUTO
Definition: AgoraBase.h:1927
@ VIDEO_MIRROR_MODE_ENABLED
Definition: AgoraBase.h:1931
@ VIDEO_MIRROR_MODE_DISABLED
Definition: AgoraBase.h:1935
ENCRYPTION_MODE
Definition: AgoraBase.h:4540
@ SM4_128_ECB
Definition: AgoraBase.h:4554
REMOTE_VIDEO_DOWNSCALE_LEVEL
Definition: AgoraBase.h:2940
@ REMOTE_VIDEO_DOWNSCALE_LEVEL_1
Definition: AgoraBase.h:2948
@ REMOTE_VIDEO_DOWNSCALE_LEVEL_3
Definition: AgoraBase.h:2956
@ REMOTE_VIDEO_DOWNSCALE_LEVEL_4
Definition: AgoraBase.h:2960
@ REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE
Definition: AgoraBase.h:2944
@ REMOTE_VIDEO_DOWNSCALE_LEVEL_2
Definition: AgoraBase.h:2952
const int STANDARD_BITRATE
Definition: AgoraBase.h:1479
LASTMILE_PROBE_RESULT_STATE
Definition: AgoraBase.h:3317
@ LASTMILE_PROBE_RESULT_COMPLETE
Definition: AgoraBase.h:3321
@ LASTMILE_PROBE_RESULT_INCOMPLETE_NO_BWE
Definition: AgoraBase.h:3326
@ LASTMILE_PROBE_RESULT_UNAVAILABLE
Definition: AgoraBase.h:3331
REMOTE_AUDIO_STATE
Definition: AgoraBase.h:2717
@ REMOTE_AUDIO_STATE_FAILED
Definition: AgoraBase.h:2745
@ REMOTE_AUDIO_STATE_STARTING
Definition: AgoraBase.h:2728
@ REMOTE_AUDIO_STATE_STOPPED
Definition: AgoraBase.h:2724
@ REMOTE_AUDIO_STATE_FROZEN
Definition: AgoraBase.h:2740
@ REMOTE_AUDIO_STATE_DECODING
Definition: AgoraBase.h:2735
NETWORK_TYPE
Definition: AgoraBase.h:3471
@ NETWORK_TYPE_DISCONNECTED
Definition: AgoraBase.h:3479
@ NETWORK_TYPE_MOBILE_3G
Definition: AgoraBase.h:3495
@ NETWORK_TYPE_MOBILE_4G
Definition: AgoraBase.h:3499
@ NETWORK_TYPE_UNKNOWN
Definition: AgoraBase.h:3475
@ NETWORK_TYPE_LAN
Definition: AgoraBase.h:3483
@ NETWORK_TYPE_WIFI
Definition: AgoraBase.h:3487
@ NETWORK_TYPE_MOBILE_2G
Definition: AgoraBase.h:3491
unsigned int uid_t
Definition: AgoraMediaBase.h:25
QUALITY_ADAPT_INDICATION
Definition: AgoraBase.h:2343
@ ADAPT_NONE
Definition: AgoraBase.h:2345
@ ADAPT_UP_BANDWIDTH
Definition: AgoraBase.h:2347
@ ADAPT_DOWN_BANDWIDTH
Definition: AgoraBase.h:2349
AUDIO_CODEC_TYPE
Definition: AgoraBase.h:1546
@ AUDIO_CODEC_G722
Definition: AgoraBase.h:1563
@ AUDIO_CODEC_HEAAC
Definition: AgoraBase.h:1574
@ AUDIO_CODEC_PCMU
Definition: AgoraBase.h:1559
@ AUDIO_CODEC_OPUS
Definition: AgoraBase.h:1550
@ AUDIO_CODEC_HEAAC2
Definition: AgoraBase.h:1584
@ AUDIO_CODEC_AACLC
Definition: AgoraBase.h:1570
@ AUDIO_CODEC_PCMA
Definition: AgoraBase.h:1555
STREAM_SUBSCRIBE_STATE
Definition: AgoraBase.h:4670
@ SUB_STATE_IDLE
Definition: AgoraBase.h:4674
@ SUB_STATE_NO_SUBSCRIBED
Definition: AgoraBase.h:4678
@ SUB_STATE_SUBSCRIBING
Definition: AgoraBase.h:4682
@ SUB_STATE_SUBSCRIBED
Definition: AgoraBase.h:4686
VIDEO_SOURCE_TYPE
Definition: AgoraBase.h:2273
@ VIDEO_SOURCE_CAMERA_PRIMARY
Definition: AgoraBase.h:2276
@ VIDEO_SOURCE_RTC_IMAGE_JPEG
Definition: AgoraBase.h:2312
@ VIDEO_SOURCE_CUSTOM
Definition: AgoraBase.h:2301
@ VIDEO_SOURCE_RTC_IMAGE_GIF
Definition: AgoraBase.h:2315
@ VIDEO_SOURCE_CAMERA
Definition: AgoraBase.h:2282
@ VIDEO_SOURCE_SCREEN_PRIMARY
Definition: AgoraBase.h:2289
@ VIDEO_SOURCE_REMOTE
Definition: AgoraBase.h:2318
@ VIDEO_SOURCE_CAMERA_SECONDARY
Definition: AgoraBase.h:2285
@ VIDEO_SOURCE_SCREEN_SECONDARY
Definition: AgoraBase.h:2297
@ VIDEO_SOURCE_UNKNOWN
Definition: AgoraBase.h:2324
@ VIDEO_SOURCE_MEDIA_PLAYER
Definition: AgoraBase.h:2305
@ VIDEO_SOURCE_SCREEN
Definition: AgoraBase.h:2293
@ VIDEO_SOURCE_TRANSCODED
Definition: AgoraBase.h:2321
@ VIDEO_SOURCE_RTC_IMAGE_PNG
Definition: AgoraBase.h:2309
LOCAL_VIDEO_STREAM_ERROR
Definition: AgoraBase.h:2686
@ LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION
Definition: AgoraBase.h:2692
@ LOCAL_VIDEO_STREAM_ERROR_OK
Definition: AgoraBase.h:2688
@ LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE
Definition: AgoraBase.h:2696
@ LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY
Definition: AgoraBase.h:2694
@ LOCAL_VIDEO_STREAM_ERROR_FAILURE
Definition: AgoraBase.h:2690
@ LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE
Definition: AgoraBase.h:2698
DEGRADATION_PREFERENCE
Definition: AgoraBase.h:1426
@ MAINTAIN_FRAMERATE
Definition: AgoraBase.h:1434
@ MAINTAIN_BALANCED
Definition: AgoraBase.h:1438
@ MAINTAIN_QUALITY
Definition: AgoraBase.h:1430
@ MAINTAIN_RESOLUTION
Definition: AgoraBase.h:1442
REMOTE_VIDEO_STATE_REASON
Definition: AgoraBase.h:2820
@ REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION
Definition: AgoraBase.h:2829
@ REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED
Definition: AgoraBase.h:2854
@ REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED
Definition: AgoraBase.h:2849
@ REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED
Definition: AgoraBase.h:2844
@ REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK
Definition: AgoraBase.h:2864
@ REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY
Definition: AgoraBase.h:2834
@ REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE
Definition: AgoraBase.h:2859
@ REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY
Definition: AgoraBase.h:2869
@ REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED
Definition: AgoraBase.h:2839
@ REMOTE_VIDEO_STATE_REASON_INTERNAL
Definition: AgoraBase.h:2824
QUALITY_TYPE
Definition: AgoraBase.h:1236
@ QUALITY_BAD
Definition: AgoraBase.h:1258
@ QUALITY_POOR
Definition: AgoraBase.h:1254
@ QUALITY_GOOD
Definition: AgoraBase.h:1250
@ QUALITY_UNKNOWN
Definition: AgoraBase.h:1241
@ QUALITY_VBAD
Definition: AgoraBase.h:1262
@ QUALITY_EXCELLENT
Definition: AgoraBase.h:1245
@ QUALITY_DOWN
Definition: AgoraBase.h:1266
VIDEO_FRAME_TYPE
Definition: AgoraBase.h:1378
@ VIDEO_FRAME_TYPE_B_FRAME
Definition: AgoraBase.h:1386
@ VIDEO_FRAME_TYPE_DROPPABLE_FRAME
Definition: AgoraBase.h:1388
@ VIDEO_FRAME_TYPE_UNKNOW
Definition: AgoraBase.h:1390
@ VIDEO_FRAME_TYPE_KEY_FRAME
Definition: AgoraBase.h:1382
@ VIDEO_FRAME_TYPE_BLANK_FRAME
Definition: AgoraBase.h:1380
@ VIDEO_FRAME_TYPE_DELTA_FRAME
Definition: AgoraBase.h:1384
VIDEO_ORIENTATION
Definition: AgoraBase.h:1303
@ VIDEO_ORIENTATION_270
Definition: AgoraBase.h:1319
@ VIDEO_ORIENTATION_0
Definition: AgoraBase.h:1307
@ VIDEO_ORIENTATION_90
Definition: AgoraBase.h:1311
@ VIDEO_ORIENTATION_180
Definition: AgoraBase.h:1315
ORIENTATION_MODE
Definition: AgoraBase.h:1396
@ ORIENTATION_MODE_FIXED_PORTRAIT
Definition: AgoraBase.h:1420
@ ORIENTATION_MODE_ADAPTIVE
Definition: AgoraBase.h:1404
@ ORIENTATION_MODE_FIXED_LANDSCAPE
Definition: AgoraBase.h:1412
CopyableAutoPtr< IString > AString
Definition: AgoraBase.h:190
Definition: AgoraBase.h:85
void * view_t
Definition: AgoraBase.h:1166
util::AList< UserInfo > UserList
Definition: AgoraBase.h:1192
commons::cjson::JsonWrapper any_document_t
Definition: AgoraBase.h:92
const char * user_id_t
Definition: AgoraBase.h:1165
CHANNEL_PROFILE_TYPE
Definition: AgoraBase.h:275
@ CHANNEL_PROFILE_COMMUNICATION
Definition: AgoraBase.h:281
@ CHANNEL_PROFILE_CLOUD_GAMING
Definition: AgoraBase.h:299
@ CHANNEL_PROFILE_LIVE_BROADCASTING
Definition: AgoraBase.h:287
@ CHANNEL_PROFILE_GAME
Definition: AgoraBase.h:292
Definition: AgoraBase.h:1171
UserInfo()
Definition: AgoraBase.h:1189
bool hasAudio
Definition: AgoraBase.h:1181
bool hasVideo
Definition: AgoraBase.h:1187
util::AString userId
Definition: AgoraBase.h:1175
bool sendEvenIfEmpty
Definition: AgoraBase.h:1681
bool speech
Definition: AgoraBase.h:1675
EncodedAudioFrameAdvancedSettings()
Definition: AgoraBase.h:1666
Definition: AgoraBase.h:1688
int sampleRateHz
Definition: AgoraBase.h:1708
EncodedAudioFrameInfo(const EncodedAudioFrameInfo &rhs)
Definition: AgoraBase.h:1695
EncodedAudioFrameAdvancedSettings advancedSettings
Definition: AgoraBase.h:1722
EncodedAudioFrameInfo()
Definition: AgoraBase.h:1689
int samplesPerChannel
Definition: AgoraBase.h:1714
AUDIO_CODEC_TYPE codec
Definition: AgoraBase.h:1704
int numberOfChannels
Definition: AgoraBase.h:1718
Definition: AgoraBase.h:1817
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:1917
int height
Definition: AgoraBase.h:1870
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1862
int trackId
Definition: AgoraBase.h:1889
int framesPerSecond
Definition: AgoraBase.h:1877
uid_t uid
Definition: AgoraBase.h:1913
EncodedVideoFrameInfo & operator=(const EncodedVideoFrameInfo &rhs)
Definition: AgoraBase.h:1844
uint64_t internalSendTs
Definition: AgoraBase.h:1909
EncodedVideoFrameInfo(const EncodedVideoFrameInfo &rhs)
Definition: AgoraBase.h:1831
VIDEO_FRAME_TYPE frameType
Definition: AgoraBase.h:1881
int width
Definition: AgoraBase.h:1866
int64_t renderTimeMs
Definition: AgoraBase.h:1899
EncodedVideoFrameInfo()
Definition: AgoraBase.h:1818
VIDEO_ORIENTATION rotation
Definition: AgoraBase.h:1885
Definition: AgoraBase.h:4575
const char * encryptionKey
Definition: AgoraBase.h:4585
EncryptionConfig()
Definition: AgoraBase.h:4588
uint8_t encryptionKdfSalt[32]
Definition: AgoraBase.h:4586
ENCRYPTION_MODE encryptionMode
Definition: AgoraBase.h:4579
Definition: AgoraBase.h:3287
bool probeUplink
Definition: AgoraBase.h:3294
bool probeDownlink
Definition: AgoraBase.h:3300
unsigned int expectedUplinkBitrate
Definition: AgoraBase.h:3306
unsigned int expectedDownlinkBitrate
Definition: AgoraBase.h:3311
Definition: AgoraBase.h:3338
LastmileProbeOneWayResult()
Definition: AgoraBase.h:3352
unsigned int packetLossRate
Definition: AgoraBase.h:3342
unsigned int availableBandwidth
Definition: AgoraBase.h:3350
unsigned int jitter
Definition: AgoraBase.h:3346
Definition: AgoraBase.h:3361
LastmileProbeOneWayResult downlinkReport
Definition: AgoraBase.h:3373
unsigned int rtt
Definition: AgoraBase.h:3377
LastmileProbeOneWayResult uplinkReport
Definition: AgoraBase.h:3369
LastmileProbeResult()
Definition: AgoraBase.h:3379
LASTMILE_PROBE_RESULT_STATE state
Definition: AgoraBase.h:3365
Definition: AgoraBase.h:3120
int sentSampleRate
Definition: AgoraBase.h:3128
int numChannels
Definition: AgoraBase.h:3124
int sentBitrate
Definition: AgoraBase.h:3132
Definition: AgoraBase.h:2091
unsigned short rxVideoKBitRate
Definition: AgoraBase.h:2139
int firstVideoPacketDurationAfterUnmute
Definition: AgoraBase.h:2210
int firstVideoKeyFrameDecodedDurationAfterUnmute
Definition: AgoraBase.h:2220
unsigned short rxAudioKBitRate
Definition: AgoraBase.h:2131
int memoryAppUsageInKbytes
Definition: AgoraBase.h:2175
unsigned int rxBytes
Definition: AgoraBase.h:2103
unsigned short txAudioKBitRate
Definition: AgoraBase.h:2135
unsigned short lastmileDelay
Definition: AgoraBase.h:2147
unsigned int userCount
Definition: AgoraBase.h:2151
unsigned int txVideoBytes
Definition: AgoraBase.h:2111
unsigned short rxKBitRate
Definition: AgoraBase.h:2127
int gatewayRtt
Definition: AgoraBase.h:2163
unsigned int duration
Definition: AgoraBase.h:2095
int firstVideoPacketDuration
Definition: AgoraBase.h:2190
unsigned int rxAudioBytes
Definition: AgoraBase.h:2115
unsigned short txKBitRate
Definition: AgoraBase.h:2123
int packetsBeforeFirstKeyFramePacket
Definition: AgoraBase.h:2200
int rxPacketLossRate
Definition: AgoraBase.h:2233
int firstAudioPacketDuration
Definition: AgoraBase.h:2185
int firstAudioPacketDurationAfterUnmute
Definition: AgoraBase.h:2205
int firstVideoKeyFramePacketDurationAfterUnmute
Definition: AgoraBase.h:2215
int txPacketLossRate
Definition: AgoraBase.h:2229
RtcStats()
Definition: AgoraBase.h:2234
double cpuTotalUsage
Definition: AgoraBase.h:2159
int firstVideoKeyFrameRenderedDurationAfterUnmute
Definition: AgoraBase.h:2225
double memoryAppUsageRatio
Definition: AgoraBase.h:2167
int connectTimeMs
Definition: AgoraBase.h:2180
double memoryTotalUsageRatio
Definition: AgoraBase.h:2171
unsigned short txVideoKBitRate
Definition: AgoraBase.h:2143
unsigned int txAudioBytes
Definition: AgoraBase.h:2107
unsigned int txBytes
Definition: AgoraBase.h:2099
unsigned int rxVideoBytes
Definition: AgoraBase.h:2119
int firstVideoKeyFramePacketDuration
Definition: AgoraBase.h:2195
double cpuAppUsage
Definition: AgoraBase.h:2155
Definition: AgoraBase.h:2069
bool operator==(const SimulcastStreamConfig &rhs) const
Definition: AgoraBase.h:2083
SimulcastStreamConfig()
Definition: AgoraBase.h:2082
int framerate
Definition: AgoraBase.h:2081
int bitrate
Definition: AgoraBase.h:2077
VideoDimensions dimensions
Definition: AgoraBase.h:2073
Definition: AgoraBase.h:4714
char userAccount[MAX_USER_ACCOUNT_LENGTH]
Definition: AgoraBase.h:4722
UserInfo()
Definition: AgoraBase.h:4723
uid_t uid
Definition: AgoraBase.h:4718
Definition: AgoraBase.h:1454
VideoDimensions()
Definition: AgoraBase.h:1463
bool operator==(const VideoDimensions &rhs) const
Definition: AgoraBase.h:1465
int height
Definition: AgoraBase.h:1462
int width
Definition: AgoraBase.h:1458
VideoDimensions(int w, int h)
Definition: AgoraBase.h:1464
Definition: AgoraBase.h:1941
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:2001
DEGRADATION_PREFERENCE degradationPreference
Definition: AgoraBase.h:1996
VideoEncoderConfiguration & operator=(const VideoEncoderConfiguration &rhs)
Definition: AgoraBase.h:2040
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1945
VideoEncoderConfiguration()
Definition: AgoraBase.h:2030
int minBitrate
Definition: AgoraBase.h:1987
VideoEncoderConfiguration(int width, int height, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror=VIDEO_MIRROR_MODE_DISABLED)
Definition: AgoraBase.h:2012
VideoEncoderConfiguration(const VideoDimensions &d, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror=VIDEO_MIRROR_MODE_DISABLED)
Definition: AgoraBase.h:2003
ORIENTATION_MODE orientationMode
Definition: AgoraBase.h:1991
int frameRate
Definition: AgoraBase.h:1953
VideoEncoderConfiguration(const VideoEncoderConfiguration &config)
Definition: AgoraBase.h:2021
int bitrate
Definition: AgoraBase.h:1970
VideoDimensions dimensions
Definition: AgoraBase.h:1949
Definition: AgoraBase.h:1789
VIDEO_STREAM_TYPE type
Definition: AgoraBase.h:1796
VideoSubscriptionOptions(VIDEO_STREAM_TYPE streamtype)
Definition: AgoraBase.h:1807
bool encodedFrameOnly
Definition: AgoraBase.h:1802
VideoSubscriptionOptions()
Definition: AgoraBase.h:1804
VideoSubscriptionOptions(VIDEO_STREAM_TYPE streamtype, bool encoded_only)
Definition: AgoraBase.h:1810
Definition: AgoraBase.h:2886
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:2918
uid_t ownerUid
Definition: AgoraBase.h:2901
track_id_t trackId
Definition: AgoraBase.h:2906
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:2928
bool isLocal
Definition: AgoraBase.h:2897
bool encodedFrameOnly
Definition: AgoraBase.h:2924
VideoTrackInfo()
Definition: AgoraBase.h:2887
const char * channelId
Definition: AgoraBase.h:2910
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:2914