Agora Java API Reference for Android
AgoraBase.h
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 #define MAX_PATH_260 (260)
23 
24 #if defined(_WIN32)
25 
26 #ifndef WIN32_LEAN_AND_MEAN
27 #define WIN32_LEAN_AND_MEAN
28 #endif // !WIN32_LEAN_AND_MEAN
29 #if defined(__aarch64__)
30 #include <arm64intr.h>
31 #endif
32 #include <Windows.h>
33 
34 #if defined(AGORARTC_EXPORT)
35 #define AGORA_API extern "C" __declspec(dllexport)
36 #else
37 #define AGORA_API extern "C" __declspec(dllimport)
38 #endif // AGORARTC_EXPORT
39 
40 #define AGORA_CALL __cdecl
41 
42 #define __deprecated
43 
44 #elif defined(__APPLE__)
45 
46 #include <TargetConditionals.h>
47 
48 #define AGORA_API extern "C" __attribute__((visibility("default")))
49 #define AGORA_CALL
50 
51 #elif defined(__ANDROID__) || defined(__linux__)
52 
53 #define AGORA_API extern "C" __attribute__((visibility("default")))
54 #define AGORA_CALL
55 
56 #define __deprecated
57 
58 #else // !_WIN32 && !__APPLE__ && !(__ANDROID__ || __linux__)
59 
60 #define AGORA_API extern "C"
61 #define AGORA_CALL
62 
63 #define __deprecated
64 
65 #endif // _WIN32
66 
67 #ifndef OPTIONAL_ENUM_SIZE_T
68 #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
69 #define OPTIONAL_ENUM_SIZE_T enum : size_t
70 #else
71 #define OPTIONAL_ENUM_SIZE_T enum
72 #endif
73 #endif
74 
75 #ifndef OPTIONAL_NULLPTR
76 #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
77 #define OPTIONAL_NULLPTR nullptr
78 #else
79 #define OPTIONAL_NULLPTR NULL
80 #endif
81 #endif
82 
83 #define INVALID_DISPLAY_ID 0xffff
84 
85 namespace agora {
86 namespace util {
87 
88 template <class T>
89 class AutoPtr {
90  protected:
91  typedef T value_type;
92  typedef T* pointer_type;
93 
94  public:
95  explicit AutoPtr(pointer_type p = NULL) : ptr_(p) {}
96 
97  ~AutoPtr() {
98  if (ptr_) {
99  ptr_->release();
100  ptr_ = NULL;
101  }
102  }
103 
104  operator bool() const { return (ptr_ != NULL); }
105 
106  value_type& operator*() const { return *get(); }
107 
108  pointer_type operator->() const { return get(); }
109 
110  pointer_type get() const { return ptr_; }
111 
112  pointer_type release() {
113  pointer_type ret = ptr_;
114  ptr_ = 0;
115  return ret;
116  }
117 
118  void reset(pointer_type ptr = NULL) {
119  if (ptr != ptr_ && ptr_) {
120  ptr_->release();
121  }
122 
123  ptr_ = ptr;
124  }
125 
126  template <class C1, class C2>
127  bool queryInterface(C1* c, C2 iid) {
128  pointer_type p = NULL;
129  if (c && !c->queryInterface(iid, reinterpret_cast<void**>(&p))) {
130  reset(p);
131  }
132 
133  return (p != NULL);
134  }
135 
136  private:
137  AutoPtr(const AutoPtr&);
138  AutoPtr& operator=(const AutoPtr&);
139 
140  private:
141  pointer_type ptr_;
142 };
143 
144 template <class T>
145 class CopyableAutoPtr : public AutoPtr<T> {
146  typedef typename AutoPtr<T>::pointer_type pointer_type;
147 
148  public:
149  explicit CopyableAutoPtr(pointer_type p = 0) : AutoPtr<T>(p) {}
150  CopyableAutoPtr(const CopyableAutoPtr& rhs) { this->reset(rhs.clone()); }
151  CopyableAutoPtr& operator=(const CopyableAutoPtr& rhs) {
152  if (this != &rhs) this->reset(rhs.clone());
153  return *this;
154  }
155  pointer_type clone() const {
156  if (!this->get()) return NULL;
157  return this->get()->clone();
158  }
159 };
160 
161 class IString {
162  public:
163  virtual bool empty() const = 0;
164  virtual const char* c_str() = 0;
165  virtual const char* data() = 0;
166  virtual size_t length() = 0;
167  virtual IString* clone() = 0;
168  virtual void release() = 0;
169  virtual ~IString() {}
170 };
172 
173 class IIterator {
174  public:
175  virtual void* current() = 0;
176  virtual const void* const_current() const = 0;
177  virtual bool next() = 0;
178  virtual void release() = 0;
179  virtual ~IIterator() {}
180 };
181 
182 class IContainer {
183  public:
184  virtual IIterator* begin() = 0;
185  virtual size_t size() const = 0;
186  virtual void release() = 0;
187  virtual ~IContainer() {}
188 };
189 
190 template <class T>
192  IIterator* p;
193 
194  public:
195  typedef T value_type;
196  typedef value_type& reference;
197  typedef const value_type& const_reference;
198  typedef value_type* pointer;
199  typedef const value_type* const_pointer;
200  explicit AOutputIterator(IIterator* it = NULL) : p(it) {}
201  ~AOutputIterator() {
202  if (p) p->release();
203  }
204  AOutputIterator(const AOutputIterator& rhs) : p(rhs.p) {}
205  AOutputIterator& operator++() {
206  p->next();
207  return *this;
208  }
209  bool operator==(const AOutputIterator& rhs) const {
210  if (p && rhs.p)
211  return p->current() == rhs.p->current();
212  else
213  return valid() == rhs.valid();
214  }
215  bool operator!=(const AOutputIterator& rhs) const { return !this->operator==(rhs); }
216  reference operator*() { return *reinterpret_cast<pointer>(p->current()); }
217  const_reference operator*() const { return *reinterpret_cast<const_pointer>(p->const_current()); }
218  bool valid() const { return p && p->current() != NULL; }
219 };
220 
221 template <class T>
222 class AList {
223  IContainer* container;
224  bool owner;
225 
226  public:
227  typedef T value_type;
228  typedef value_type& reference;
229  typedef const value_type& const_reference;
230  typedef value_type* pointer;
231  typedef const value_type* const_pointer;
232  typedef size_t size_type;
235 
236  public:
237  AList() : container(NULL), owner(false) {}
238  AList(IContainer* c, bool take_ownership) : container(c), owner(take_ownership) {}
239  ~AList() { reset(); }
240  void reset(IContainer* c = NULL, bool take_ownership = false) {
241  if (owner && container) container->release();
242  container = c;
243  owner = take_ownership;
244  }
245  iterator begin() { return container ? iterator(container->begin()) : iterator(NULL); }
246  iterator end() { return iterator(NULL); }
247  size_type size() const { return container ? container->size() : 0; }
248  bool empty() const { return size() == 0; }
249 };
250 
251 } // namespace util
252 
256 enum CHANNEL_PROFILE_TYPE {
262  CHANNEL_PROFILE_COMMUNICATION = 0,
268  CHANNEL_PROFILE_LIVE_BROADCASTING = 1,
273  CHANNEL_PROFILE_GAME __deprecated = 2,
279  CHANNEL_PROFILE_CLOUD_GAMING __deprecated = 3,
280 
285  CHANNEL_PROFILE_COMMUNICATION_1v1 __deprecated = 4,
286 };
287 
291 enum WARN_CODE_TYPE {
296  WARN_INVALID_VIEW = 8,
301  WARN_INIT_VIDEO = 16,
306  WARN_PENDING = 20,
311  WARN_NO_AVAILABLE_CHANNEL = 103,
317  WARN_LOOKUP_CHANNEL_TIMEOUT = 104,
322  WARN_LOOKUP_CHANNEL_REJECTED = 105,
328  WARN_OPEN_CHANNEL_TIMEOUT = 106,
333  WARN_OPEN_CHANNEL_REJECTED = 107,
334 
335  // sdk: 100~1000
339  WARN_SWITCH_LIVE_VIDEO_TIMEOUT = 111,
343  WARN_SET_CLIENT_ROLE_TIMEOUT = 118,
347  WARN_OPEN_CHANNEL_INVALID_TICKET = 121,
351  WARN_OPEN_CHANNEL_TRY_NEXT_VOS = 122,
355  WARN_CHANNEL_CONNECTION_UNRECOVERABLE = 131,
359  WARN_CHANNEL_CONNECTION_IP_CHANGED = 132,
363  WARN_CHANNEL_CONNECTION_PORT_CHANGED = 133,
366  WARN_CHANNEL_SOCKET_ERROR = 134,
370  WARN_AUDIO_MIXING_OPEN_ERROR = 701,
374  WARN_ADM_RUNTIME_PLAYOUT_WARNING = 1014,
378  WARN_ADM_RUNTIME_RECORDING_WARNING = 1016,
382  WARN_ADM_RECORD_AUDIO_SILENCE = 1019,
386  WARN_ADM_PLAYOUT_MALFUNCTION = 1020,
390  WARN_ADM_RECORD_MALFUNCTION = 1021,
394  WARN_ADM_RECORD_AUDIO_LOWLEVEL = 1031,
398  WARN_ADM_PLAYOUT_AUDIO_LOWLEVEL = 1032,
406  WARN_ADM_WINDOWS_NO_DATA_READY_EVENT = 1040,
410  WARN_APM_HOWLING = 1051,
414  WARN_ADM_GLITCH_STATE = 1052,
418  WARN_ADM_IMPROPER_SETTINGS = 1053,
422  WARN_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
427  WARN_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
435  WARN_ADM_WIN_CORE_IMPROPER_CAPTURE_RELEASE = 1324,
436 };
437 
441 enum ERROR_CODE_TYPE {
445  ERR_OK = 0,
446  // 1~1000
450  ERR_FAILED = 1,
455  ERR_INVALID_ARGUMENT = 2,
462  ERR_NOT_READY = 3,
466  ERR_NOT_SUPPORTED = 4,
470  ERR_REFUSED = 5,
474  ERR_BUFFER_TOO_SMALL = 6,
478  ERR_NOT_INITIALIZED = 7,
482  ERR_INVALID_STATE = 8,
487  ERR_NO_PERMISSION = 9,
493  ERR_TIMEDOUT = 10,
498  ERR_CANCELED = 11,
504  ERR_TOO_OFTEN = 12,
510  ERR_BIND_SOCKET = 13,
515  ERR_NET_DOWN = 14,
521  ERR_JOIN_CHANNEL_REJECTED = 17,
528  ERR_LEAVE_CHANNEL_REJECTED = 18,
532  ERR_ALREADY_IN_USE = 19,
537  ERR_ABORTED = 20,
542  ERR_INIT_NET_ENGINE = 21,
547  ERR_RESOURCE_LIMITED = 22,
553  ERR_INVALID_APP_ID = 101,
558  ERR_INVALID_CHANNEL_NAME = 102,
564  ERR_NO_SERVER_RESOURCES = 103,
577  ERR_TOKEN_EXPIRED = 109,
594  ERR_INVALID_TOKEN = 110,
599  ERR_CONNECTION_INTERRUPTED = 111, // only used in web sdk
604  ERR_CONNECTION_LOST = 112, // only used in web sdk
609  ERR_NOT_IN_CHANNEL = 113,
614  ERR_SIZE_TOO_LARGE = 114,
619  ERR_BITRATE_LIMIT = 115,
624  ERR_TOO_MANY_DATA_STREAMS = 116,
628  ERR_STREAM_MESSAGE_TIMEOUT = 117,
632  ERR_SET_CLIENT_ROLE_NOT_AUTHORIZED = 119,
637  ERR_DECRYPTION_FAILED = 120,
641  ERR_INVALID_USER_ID = 121,
646  ERR_DATASTREAM_DECRYPTION_FAILED = 122,
650  ERR_CLIENT_IS_BANNED_BY_SERVER = 123,
656  ERR_ENCRYPTED_STREAM_NOT_ALLOWED_PUBLISH = 130,
657 
661  ERR_LICENSE_CREDENTIAL_INVALID = 131,
662 
666  ERR_INVALID_USER_ACCOUNT = 134,
667 
673  ERR_MODULE_NOT_FOUND = 157,
674 
675  // Licensing, keep the license error code same as the main version
676  ERR_CERT_RAW = 157,
677  ERR_CERT_JSON_PART = 158,
678  ERR_CERT_JSON_INVAL = 159,
679  ERR_CERT_JSON_NOMEM = 160,
680  ERR_CERT_CUSTOM = 161,
681  ERR_CERT_CREDENTIAL = 162,
682  ERR_CERT_SIGN = 163,
683  ERR_CERT_FAIL = 164,
684  ERR_CERT_BUF = 165,
685  ERR_CERT_NULL = 166,
686  ERR_CERT_DUEDATE = 167,
687  ERR_CERT_REQUEST = 168,
688 
689  // PcmSend Error num
690  ERR_PCMSEND_FORMAT = 200, // unsupport pcm format
691  ERR_PCMSEND_BUFFEROVERFLOW = 201, // buffer overflow, the pcm send rate too quickly
692 
694  // signaling: 400~600
695  ERR_LOGIN_ALREADY_LOGIN = 428,
696 
698  // 1001~2000
702  ERR_LOAD_MEDIA_ENGINE = 1001,
708  ERR_ADM_GENERAL_ERROR = 1005,
713  ERR_ADM_INIT_PLAYOUT = 1008,
717  ERR_ADM_START_PLAYOUT = 1009,
721  ERR_ADM_STOP_PLAYOUT = 1010,
726  ERR_ADM_INIT_RECORDING = 1011,
730  ERR_ADM_START_RECORDING = 1012,
734  ERR_ADM_STOP_RECORDING = 1013,
738  ERR_VDM_CAMERA_NOT_AUTHORIZED = 1501,
742  ERR_ADM_APPLICATION_LOOPBACK = 2007,
743 };
744 
745 enum LICENSE_ERROR_TYPE {
749  LICENSE_ERR_INVALID = 1,
753  LICENSE_ERR_EXPIRE = 2,
757  LICENSE_ERR_MINUTES_EXCEED = 3,
761  LICENSE_ERR_LIMITED_PERIOD = 4,
765  LICENSE_ERR_DIFF_DEVICES = 5,
769  LICENSE_ERR_INTERNAL = 99,
770 };
771 
775 enum AUDIO_SESSION_OPERATION_RESTRICTION {
779  AUDIO_SESSION_OPERATION_RESTRICTION_NONE = 0,
783  AUDIO_SESSION_OPERATION_RESTRICTION_SET_CATEGORY = 1,
787  AUDIO_SESSION_OPERATION_RESTRICTION_CONFIGURE_SESSION = 1 << 1,
792  AUDIO_SESSION_OPERATION_RESTRICTION_DEACTIVATE_SESSION = 1 << 2,
797  AUDIO_SESSION_OPERATION_RESTRICTION_ALL = 1 << 7,
798 };
799 
800 typedef const char* user_id_t;
801 typedef void* view_t;
802 
806 struct UserInfo {
816  bool hasAudio;
822  bool hasVideo;
823 
824  UserInfo() : hasAudio(false), hasVideo(false) {}
825 };
826 
827 typedef util::AList<UserInfo> UserList;
828 
829 // Shared between Agora Service and Rtc Engine
830 namespace rtc {
831 
835 enum USER_OFFLINE_REASON_TYPE {
839  USER_OFFLINE_QUIT = 0,
845  USER_OFFLINE_DROPPED = 1,
849  USER_OFFLINE_BECOME_AUDIENCE = 2,
850 };
851 
852 enum INTERFACE_ID_TYPE {
853  AGORA_IID_AUDIO_DEVICE_MANAGER = 1,
854  AGORA_IID_VIDEO_DEVICE_MANAGER = 2,
855  AGORA_IID_PARAMETER_ENGINE = 3,
856  AGORA_IID_MEDIA_ENGINE = 4,
857  AGORA_IID_AUDIO_ENGINE = 5,
858  AGORA_IID_VIDEO_ENGINE = 6,
859  AGORA_IID_RTC_CONNECTION = 7,
860  AGORA_IID_SIGNALING_ENGINE = 8,
861  AGORA_IID_MEDIA_ENGINE_REGULATOR = 9,
862  AGORA_IID_CLOUD_SPATIAL_AUDIO = 10,
863  AGORA_IID_LOCAL_SPATIAL_AUDIO = 11,
864  AGORA_IID_STATE_SYNC = 13,
865  AGORA_IID_METACHAT_SERVICE = 14,
866  AGORA_IID_MUSIC_CONTENT_CENTER = 15,
867  AGORA_IID_H265_TRANSCODER = 16,
868 };
869 
873 enum QUALITY_TYPE {
878  QUALITY_UNKNOWN __deprecated = 0,
882  QUALITY_EXCELLENT = 1,
887  QUALITY_GOOD = 2,
891  QUALITY_POOR = 3,
895  QUALITY_BAD = 4,
899  QUALITY_VBAD = 5,
903  QUALITY_DOWN = 6,
907  QUALITY_UNSUPPORTED = 7,
911  QUALITY_DETECTING = 8,
912 };
913 
917 enum FIT_MODE_TYPE {
922  MODE_COVER = 1,
923 
929  MODE_CONTAIN = 2,
930 };
931 
935 enum VIDEO_ORIENTATION {
939  VIDEO_ORIENTATION_0 = 0,
943  VIDEO_ORIENTATION_90 = 90,
947  VIDEO_ORIENTATION_180 = 180,
951  VIDEO_ORIENTATION_270 = 270
952 };
953 
957 enum FRAME_RATE {
961  FRAME_RATE_FPS_1 = 1,
965  FRAME_RATE_FPS_7 = 7,
969  FRAME_RATE_FPS_10 = 10,
973  FRAME_RATE_FPS_15 = 15,
977  FRAME_RATE_FPS_24 = 24,
981  FRAME_RATE_FPS_30 = 30,
985  FRAME_RATE_FPS_60 = 60,
986 };
987 
988 enum FRAME_WIDTH {
989  FRAME_WIDTH_960 = 960,
990 };
991 
992 enum FRAME_HEIGHT {
993  FRAME_HEIGHT_540 = 540,
994 };
995 
996 
1000 enum VIDEO_FRAME_TYPE {
1002  VIDEO_FRAME_TYPE_BLANK_FRAME = 0,
1004  VIDEO_FRAME_TYPE_KEY_FRAME = 3,
1006  VIDEO_FRAME_TYPE_DELTA_FRAME = 4,
1008  VIDEO_FRAME_TYPE_B_FRAME = 5,
1010  VIDEO_FRAME_TYPE_DROPPABLE_FRAME = 6,
1012  VIDEO_FRAME_TYPE_UNKNOW
1013 };
1014 
1018 enum ORIENTATION_MODE {
1026  ORIENTATION_MODE_ADAPTIVE = 0,
1033  ORIENTATION_MODE_FIXED_LANDSCAPE = 1,
1040  ORIENTATION_MODE_FIXED_PORTRAIT = 2,
1041 };
1042 
1046 enum DEGRADATION_PREFERENCE {
1054  MAINTAIN_QUALITY = 0,
1060  MAINTAIN_FRAMERATE = 1,
1067  MAINTAIN_BALANCED = 2,
1071  MAINTAIN_RESOLUTION = 3,
1075  DISABLED = 100,
1076 };
1077 
1085  int width;
1089  int height;
1090  VideoDimensions() : width(640), height(480) {}
1091  VideoDimensions(int w, int h) : width(w), height(h) {}
1092  bool operator==(const VideoDimensions& rhs) const {
1093  return width == rhs.width && height == rhs.height;
1094  }
1095 };
1096 
1102 const int STANDARD_BITRATE = 0;
1103 
1111 const int COMPATIBLE_BITRATE = -1;
1112 
1116 const int DEFAULT_MIN_BITRATE = -1;
1117 
1121 const int DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE = -2;
1122 
1126 enum SCREEN_CAPTURE_FRAMERATE_CAPABILITY {
1127  SCREEN_CAPTURE_FRAMERATE_CAPABILITY_15_FPS = 0,
1128  SCREEN_CAPTURE_FRAMERATE_CAPABILITY_30_FPS = 1,
1129  SCREEN_CAPTURE_FRAMERATE_CAPABILITY_60_FPS = 2,
1130 };
1131 
1135 enum VIDEO_CODEC_CAPABILITY_LEVEL {
1137  CODEC_CAPABILITY_LEVEL_UNSPECIFIED = -1,
1139  CODEC_CAPABILITY_LEVEL_BASIC_SUPPORT = 5,
1141  CODEC_CAPABILITY_LEVEL_1080P30FPS = 10,
1143  CODEC_CAPABILITY_LEVEL_1080P60FPS = 20,
1145  CODEC_CAPABILITY_LEVEL_4K60FPS = 30,
1146 };
1147 
1151 enum VIDEO_CODEC_TYPE {
1152  VIDEO_CODEC_NONE = 0,
1156  VIDEO_CODEC_VP8 = 1,
1160  VIDEO_CODEC_H264 = 2,
1164  VIDEO_CODEC_H265 = 3,
1169  VIDEO_CODEC_GENERIC = 6,
1173  VIDEO_CODEC_GENERIC_H264 = 7,
1177  VIDEO_CODEC_AV1 = 12,
1181  VIDEO_CODEC_VP9 = 13,
1185  VIDEO_CODEC_GENERIC_JPEG = 20,
1186 };
1187 
1191 enum TCcMode {
1195  CC_ENABLED,
1199  CC_DISABLED,
1200 };
1201 
1209  TCcMode ccMode;
1213  VIDEO_CODEC_TYPE codecType;
1214 
1272 
1273  SenderOptions()
1274  : ccMode(CC_ENABLED),
1275  codecType(VIDEO_CODEC_H264),
1276  targetBitrate(6500) {}
1277 };
1278 
1282 enum AUDIO_CODEC_TYPE {
1286  AUDIO_CODEC_OPUS = 1,
1287  // kIsac = 2,
1291  AUDIO_CODEC_PCMA = 3,
1295  AUDIO_CODEC_PCMU = 4,
1299  AUDIO_CODEC_G722 = 5,
1300  // kIlbc = 6,
1302  // AUDIO_CODEC_AAC = 7,
1306  AUDIO_CODEC_AACLC = 8,
1310  AUDIO_CODEC_HEAAC = 9,
1314  AUDIO_CODEC_JC1 = 10,
1318  AUDIO_CODEC_HEAAC2 = 11,
1322  AUDIO_CODEC_LPCNET = 12,
1326  AUDIO_CODEC_OPUS4C = 13,
1330  AUDIO_CODEC_OPUS6C = 14,
1334  AUDIO_CODEC_OPUS8C = 15,
1335 };
1336 
1340 enum AUDIO_ENCODING_TYPE {
1345  AUDIO_ENCODING_TYPE_AAC_16000_LOW = 0x010101,
1350  AUDIO_ENCODING_TYPE_AAC_16000_MEDIUM = 0x010102,
1355  AUDIO_ENCODING_TYPE_AAC_32000_LOW = 0x010201,
1360  AUDIO_ENCODING_TYPE_AAC_32000_MEDIUM = 0x010202,
1365  AUDIO_ENCODING_TYPE_AAC_32000_HIGH = 0x010203,
1370  AUDIO_ENCODING_TYPE_AAC_48000_MEDIUM = 0x010302,
1375  AUDIO_ENCODING_TYPE_AAC_48000_HIGH = 0x010303,
1380  AUDIO_ENCODING_TYPE_OPUS_16000_LOW = 0x020101,
1385  AUDIO_ENCODING_TYPE_OPUS_16000_MEDIUM = 0x020102,
1390  AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM = 0x020302,
1395  AUDIO_ENCODING_TYPE_OPUS_48000_HIGH = 0x020303,
1396 };
1397 
1401 enum WATERMARK_FIT_MODE {
1406  FIT_MODE_COVER_POSITION,
1411  FIT_MODE_USE_IMAGE_RATIO
1412 };
1413 
1419  : speech(true),
1420  sendEvenIfEmpty(true) {}
1421 
1427  bool speech;
1434 };
1435 
1441  : codec(AUDIO_CODEC_AACLC),
1442  sampleRateHz(0),
1443  samplesPerChannel(0),
1444  numberOfChannels(0),
1445  captureTimeMs(0) {}
1446 
1448  : codec(rhs.codec),
1457  AUDIO_CODEC_TYPE codec;
1476 
1480  int64_t captureTimeMs;
1481 };
1486  AudioPcmDataInfo() : samplesPerChannel(0), channelNum(0), samplesOut(0), elapsedTimeMs(0), ntpTimeMs(0) {}
1487 
1490  channelNum(rhs.channelNum),
1491  samplesOut(rhs.samplesOut),
1493  ntpTimeMs(rhs.ntpTimeMs) {}
1494 
1499 
1500  int16_t channelNum;
1501 
1502  // Output
1506  size_t samplesOut;
1510  int64_t elapsedTimeMs;
1514  int64_t ntpTimeMs;
1515 };
1519 enum H264PacketizeMode {
1523  NonInterleaved = 0, // Mode 1 - STAP-A, FU-A is allowed
1527  SingleNalUnit, // Mode 0 - only single NALU allowed
1528 };
1529 
1533 enum VIDEO_STREAM_TYPE {
1537  VIDEO_STREAM_HIGH = 0,
1541  VIDEO_STREAM_LOW = 1,
1542 };
1543 
1558 
1560 };
1561 
1567  : codecType(VIDEO_CODEC_H264),
1568  width(0),
1569  height(0),
1570  framesPerSecond(0),
1571  frameType(VIDEO_FRAME_TYPE_BLANK_FRAME),
1572  rotation(VIDEO_ORIENTATION_0),
1573  trackId(0),
1574  captureTimeMs(0),
1575  decodeTimeMs(0),
1576  uid(0),
1577  streamType(VIDEO_STREAM_HIGH) {}
1578 
1580  : codecType(rhs.codecType),
1581  width(rhs.width),
1582  height(rhs.height),
1584  frameType(rhs.frameType),
1585  rotation(rhs.rotation),
1586  trackId(rhs.trackId),
1589  uid(rhs.uid),
1590  streamType(rhs.streamType) {}
1591 
1592  EncodedVideoFrameInfo& operator=(const EncodedVideoFrameInfo& rhs) {
1593  if (this == &rhs) return *this;
1594  codecType = rhs.codecType;
1595  width = rhs.width;
1596  height = rhs.height;
1598  frameType = rhs.frameType;
1599  rotation = rhs.rotation;
1600  trackId = rhs.trackId;
1602  decodeTimeMs = rhs.decodeTimeMs;
1603  uid = rhs.uid;
1604  streamType = rhs.streamType;
1605  return *this;
1606  }
1610  VIDEO_CODEC_TYPE codecType;
1614  int width;
1618  int height;
1628  VIDEO_FRAME_TYPE frameType;
1632  VIDEO_ORIENTATION rotation;
1636  int trackId; // This can be reserved for multiple video tracks, we need to create different ssrc
1637  // and additional payload for later implementation.
1641  int64_t captureTimeMs;
1645  int64_t decodeTimeMs;
1649  uid_t uid;
1653  VIDEO_STREAM_TYPE streamType;
1654 
1655 };
1659 enum COMPRESSION_PREFERENCE {
1663  PREFER_LOW_LATENCY,
1667  PREFER_QUALITY,
1668 };
1669 
1673 enum ENCODING_PREFERENCE {
1677  PREFER_AUTO = -1,
1681  PREFER_SOFTWARE = 0,
1685  PREFER_HARDWARE = 1,
1686 };
1687 
1692 
1696  ENCODING_PREFERENCE encodingPreference;
1697 
1701  COMPRESSION_PREFERENCE compressionPreference;
1702 
1703  AdvanceOptions() : encodingPreference(PREFER_AUTO),
1704  compressionPreference(PREFER_LOW_LATENCY) {}
1705 
1706  AdvanceOptions(ENCODING_PREFERENCE encoding_preference,
1707  COMPRESSION_PREFERENCE compression_preference) :
1708  encodingPreference(encoding_preference),
1709  compressionPreference(compression_preference) {}
1710 
1711  bool operator==(const AdvanceOptions& rhs) const {
1712  return encodingPreference == rhs.encodingPreference &&
1713  compressionPreference == rhs.compressionPreference;
1714  }
1715 
1716 };
1717 
1721 enum VIDEO_MIRROR_MODE_TYPE {
1725  VIDEO_MIRROR_MODE_AUTO = 0,
1729  VIDEO_MIRROR_MODE_ENABLED = 1,
1733  VIDEO_MIRROR_MODE_DISABLED = 2,
1734 };
1735 
1736 
1738 enum CODEC_CAP_MASK {
1740  CODEC_CAP_MASK_NONE = 0,
1741 
1743  CODEC_CAP_MASK_HW_DEC = 1 << 0,
1744 
1746  CODEC_CAP_MASK_HW_ENC = 1 << 1,
1747 
1749  CODEC_CAP_MASK_SW_DEC = 1 << 2,
1750 
1752  CODEC_CAP_MASK_SW_ENC = 1 << 3,
1753 };
1754 
1756  VIDEO_CODEC_CAPABILITY_LEVEL hwDecodingLevel;
1757  VIDEO_CODEC_CAPABILITY_LEVEL swDecodingLevel;
1758 
1759  CodecCapLevels(): hwDecodingLevel(CODEC_CAPABILITY_LEVEL_UNSPECIFIED), swDecodingLevel(CODEC_CAPABILITY_LEVEL_UNSPECIFIED) {}
1760 };
1761 
1765  VIDEO_CODEC_TYPE codecType;
1770 };
1771 
1779  VIDEO_CODEC_TYPE codecType;
1844  int bitrate;
1845 
1865  ORIENTATION_MODE orientationMode;
1869  DEGRADATION_PREFERENCE degradationPreference;
1870 
1875  VIDEO_MIRROR_MODE_TYPE mirrorMode;
1876 
1881 
1882  VideoEncoderConfiguration(const VideoDimensions& d, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED)
1883  : codecType(VIDEO_CODEC_H264),
1884  dimensions(d),
1885  frameRate(f),
1886  bitrate(b),
1887  minBitrate(DEFAULT_MIN_BITRATE),
1888  orientationMode(m),
1889  degradationPreference(MAINTAIN_QUALITY),
1890  mirrorMode(mirror),
1891  advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY) {}
1892  VideoEncoderConfiguration(int width, int height, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED)
1893  : codecType(VIDEO_CODEC_H264),
1894  dimensions(width, height),
1895  frameRate(f),
1896  bitrate(b),
1897  minBitrate(DEFAULT_MIN_BITRATE),
1898  orientationMode(m),
1899  degradationPreference(MAINTAIN_QUALITY),
1900  mirrorMode(mirror),
1901  advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY) {}
1902  VideoEncoderConfiguration(const VideoEncoderConfiguration& config)
1903  : codecType(config.codecType),
1904  dimensions(config.dimensions),
1905  frameRate(config.frameRate),
1906  bitrate(config.bitrate),
1907  minBitrate(config.minBitrate),
1910  mirrorMode(config.mirrorMode),
1911  advanceOptions(config.advanceOptions) {}
1912  VideoEncoderConfiguration()
1913  : codecType(VIDEO_CODEC_H264),
1914  dimensions(FRAME_WIDTH_960, FRAME_HEIGHT_540),
1915  frameRate(FRAME_RATE_FPS_15),
1916  bitrate(STANDARD_BITRATE),
1917  minBitrate(DEFAULT_MIN_BITRATE),
1918  orientationMode(ORIENTATION_MODE_ADAPTIVE),
1919  degradationPreference(MAINTAIN_QUALITY),
1920  mirrorMode(VIDEO_MIRROR_MODE_DISABLED),
1921  advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY) {}
1922 
1923  VideoEncoderConfiguration& operator=(const VideoEncoderConfiguration& rhs) {
1924  if (this == &rhs) return *this;
1925  codecType = rhs.codecType;
1926  dimensions = rhs.dimensions;
1927  frameRate = rhs.frameRate;
1928  bitrate = rhs.bitrate;
1929  minBitrate = rhs.minBitrate;
1930  orientationMode = rhs.orientationMode;
1931  degradationPreference = rhs.degradationPreference;
1932  mirrorMode = rhs.mirrorMode;
1933  advanceOptions = rhs.advanceOptions;
1934  return *this;
1935  }
1936 };
1937 
1961  bool ordered;
1962 };
1963 
1967 enum SIMULCAST_STREAM_MODE {
1968  /*
1969  * disable simulcast stream until receive request for enable simulcast stream by other broadcaster
1970  */
1971  AUTO_SIMULCAST_STREAM = -1,
1972  /*
1973  * disable simulcast stream
1974  */
1975  DISABLE_SIMULCAST_STREAM = 0,
1976  /*
1977  * always enable simulcast stream
1978  */
1979  ENABLE_SIMULCAST_STREAM = 1,
1980 };
1981 
1998  SimulcastStreamConfig() : dimensions(160, 120), kBitrate(65), framerate(5) {}
1999  bool operator==(const SimulcastStreamConfig& rhs) const {
2000  return dimensions == rhs.dimensions && kBitrate == rhs.kBitrate && framerate == rhs.framerate;
2001  }
2002 };
2003 
2008 struct Rectangle {
2012  int x;
2016  int y;
2020  int width;
2024  int height;
2025 
2026  Rectangle() : x(0), y(0), width(0), height(0) {}
2027  Rectangle(int xx, int yy, int ww, int hh) : x(xx), y(yy), width(ww), height(hh) {}
2028 };
2029 
2044  float xRatio;
2050  float yRatio;
2056  float widthRatio;
2057 
2058  WatermarkRatio() : xRatio(0.0), yRatio(0.0), widthRatio(0.0) {}
2059  WatermarkRatio(float x, float y, float width) : xRatio(x), yRatio(y), widthRatio(width) {}
2060 };
2061 
2090  WATERMARK_FIT_MODE mode;
2091 
2093  : visibleInPreview(true),
2094  positionInLandscapeMode(0, 0, 0, 0),
2095  positionInPortraitMode(0, 0, 0, 0),
2096  mode(FIT_MODE_COVER_POSITION) {}
2097 };
2098 
2102 struct RtcStats {
2106  unsigned int duration;
2110  unsigned int txBytes;
2114  unsigned int rxBytes;
2118  unsigned int txAudioBytes;
2122  unsigned int txVideoBytes;
2126  unsigned int rxAudioBytes;
2130  unsigned int rxVideoBytes;
2134  unsigned short txKBitRate;
2138  unsigned short rxKBitRate;
2142  unsigned short rxAudioKBitRate;
2146  unsigned short txAudioKBitRate;
2150  unsigned short rxVideoKBitRate;
2154  unsigned short txVideoKBitRate;
2158  unsigned short lastmileDelay;
2162  unsigned int userCount;
2169  double cpuAppUsage;
2259  RtcStats()
2260  : duration(0),
2261  txBytes(0),
2262  rxBytes(0),
2263  txAudioBytes(0),
2264  txVideoBytes(0),
2265  rxAudioBytes(0),
2266  rxVideoBytes(0),
2267  txKBitRate(0),
2268  rxKBitRate(0),
2269  rxAudioKBitRate(0),
2270  txAudioKBitRate(0),
2271  rxVideoKBitRate(0),
2272  txVideoKBitRate(0),
2273  lastmileDelay(0),
2274  userCount(0),
2275  cpuAppUsage(0.0),
2276  cpuTotalUsage(0.0),
2277  gatewayRtt(0),
2278  memoryAppUsageRatio(0.0),
2279  memoryTotalUsageRatio(0.0),
2281  connectTimeMs(0),
2291  txPacketLossRate(0),
2292  rxPacketLossRate(0) {}
2293 };
2294 
2298 enum CLIENT_ROLE_TYPE {
2302  CLIENT_ROLE_BROADCASTER = 1,
2306  CLIENT_ROLE_AUDIENCE = 2,
2307 };
2308 
2312 enum QUALITY_ADAPT_INDICATION {
2316  ADAPT_NONE = 0,
2320  ADAPT_UP_BANDWIDTH = 1,
2324  ADAPT_DOWN_BANDWIDTH = 2,
2325 };
2326 
2331 enum AUDIENCE_LATENCY_LEVEL_TYPE
2332 {
2336  AUDIENCE_LATENCY_LEVEL_LOW_LATENCY = 1,
2340  AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY = 2,
2341 };
2342 
2347 {
2351  AUDIENCE_LATENCY_LEVEL_TYPE audienceLatencyLevel;
2352 
2354  : audienceLatencyLevel(AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY) {}
2355 };
2356 
2360 enum EXPERIENCE_QUALITY_TYPE {
2362  EXPERIENCE_QUALITY_GOOD = 0,
2364  EXPERIENCE_QUALITY_BAD = 1,
2365 };
2366 
2370 enum EXPERIENCE_POOR_REASON {
2374  EXPERIENCE_REASON_NONE = 0,
2378  REMOTE_NETWORK_QUALITY_POOR = 1,
2382  LOCAL_NETWORK_QUALITY_POOR = 2,
2386  WIRELESS_SIGNAL_POOR = 4,
2391  WIFI_BLUETOOTH_COEXIST = 8,
2392 };
2393 
2397 enum AUDIO_AINS_MODE {
2401  AINS_MODE_BALANCED = 0,
2405  AINS_MODE_AGGRESSIVE = 1,
2409  AINS_MODE_ULTRALOWLATENCY = 2
2410 };
2411 
2415 enum AUDIO_PROFILE_TYPE {
2424  AUDIO_PROFILE_DEFAULT = 0,
2428  AUDIO_PROFILE_SPEECH_STANDARD = 1,
2432  AUDIO_PROFILE_MUSIC_STANDARD = 2,
2439  AUDIO_PROFILE_MUSIC_STANDARD_STEREO = 3,
2443  AUDIO_PROFILE_MUSIC_HIGH_QUALITY = 4,
2450  AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO = 5,
2454  AUDIO_PROFILE_IOT = 6,
2455  AUDIO_PROFILE_NUM = 7
2456 };
2457 
2461 enum AUDIO_SCENARIO_TYPE {
2466  AUDIO_SCENARIO_DEFAULT = 0,
2472  AUDIO_SCENARIO_GAME_STREAMING = 3,
2478  AUDIO_SCENARIO_CHATROOM = 5,
2482  AUDIO_SCENARIO_CHORUS = 7,
2486  AUDIO_SCENARIO_MEETING = 8,
2490  AUDIO_SCENARIO_NUM = 9,
2491 };
2492 
2496 struct VideoFormat {
2497  OPTIONAL_ENUM_SIZE_T {
2499  kMaxWidthInPixels = 3840,
2501  kMaxHeightInPixels = 2160,
2503  kMaxFps = 60,
2504  };
2505 
2509  int width; // Number of pixels.
2513  int height; // Number of pixels.
2517  int fps;
2518  VideoFormat() : width(FRAME_WIDTH_960), height(FRAME_HEIGHT_540), fps(FRAME_RATE_FPS_15) {}
2519  VideoFormat(int w, int h, int f) : width(w), height(h), fps(f) {}
2520 
2521  bool operator<(const VideoFormat& fmt) const {
2522  if (height != fmt.height) {
2523  return height < fmt.height;
2524  } else if (width != fmt.width) {
2525  return width < fmt.width;
2526  } else {
2527  return fps < fmt.fps;
2528  }
2529  }
2530  bool operator==(const VideoFormat& fmt) const {
2531  return width == fmt.width && height == fmt.height && fps == fmt.fps;
2532  }
2533  bool operator!=(const VideoFormat& fmt) const {
2534  return !operator==(fmt);
2535  }
2536 };
2537 
2541 enum VIDEO_CONTENT_HINT {
2545  CONTENT_HINT_NONE,
2552  CONTENT_HINT_MOTION,
2558  CONTENT_HINT_DETAILS
2559 };
2563 enum SCREEN_SCENARIO_TYPE {
2569  SCREEN_SCENARIO_DOCUMENT = 1,
2574  SCREEN_SCENARIO_GAMING = 2,
2579  SCREEN_SCENARIO_VIDEO = 3,
2585  SCREEN_SCENARIO_RDC = 4,
2586 };
2587 
2588 
2592 enum VIDEO_APPLICATION_SCENARIO_TYPE {
2596  APPLICATION_SCENARIO_GENERAL = 0,
2600  APPLICATION_SCENARIO_MEETING = 1,
2601 };
2602 
2606 enum CAPTURE_BRIGHTNESS_LEVEL_TYPE {
2610  CAPTURE_BRIGHTNESS_LEVEL_INVALID = -1,
2613  CAPTURE_BRIGHTNESS_LEVEL_NORMAL = 0,
2616  CAPTURE_BRIGHTNESS_LEVEL_BRIGHT = 1,
2619  CAPTURE_BRIGHTNESS_LEVEL_DARK = 2,
2620 };
2621 
2622 enum CAMERA_STABILIZATION_MODE {
2625  CAMERA_STABILIZATION_MODE_OFF = -1,
2628  CAMERA_STABILIZATION_MODE_AUTO = 0,
2631  CAMERA_STABILIZATION_MODE_LEVEL_1 = 1,
2634  CAMERA_STABILIZATION_MODE_LEVEL_2 = 2,
2637  CAMERA_STABILIZATION_MODE_LEVEL_3 = 3,
2640  CAMERA_STABILIZATION_MODE_MAX_LEVEL = CAMERA_STABILIZATION_MODE_LEVEL_3,
2641 };
2642 
2646 enum LOCAL_AUDIO_STREAM_STATE {
2650  LOCAL_AUDIO_STREAM_STATE_STOPPED = 0,
2654  LOCAL_AUDIO_STREAM_STATE_RECORDING = 1,
2658  LOCAL_AUDIO_STREAM_STATE_ENCODING = 2,
2662  LOCAL_AUDIO_STREAM_STATE_FAILED = 3
2663 };
2664 
2668 enum LOCAL_AUDIO_STREAM_ERROR {
2672  LOCAL_AUDIO_STREAM_ERROR_OK = 0,
2676  LOCAL_AUDIO_STREAM_ERROR_FAILURE = 1,
2680  LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
2687  LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY = 3,
2691  LOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURE = 4,
2695  LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE = 5,
2698  LOCAL_AUDIO_STREAM_ERROR_NO_RECORDING_DEVICE = 6,
2701  LOCAL_AUDIO_STREAM_ERROR_NO_PLAYOUT_DEVICE = 7,
2705  LOCAL_AUDIO_STREAM_ERROR_INTERRUPTED = 8,
2708  LOCAL_AUDIO_STREAM_ERROR_RECORD_INVALID_ID = 9,
2711  LOCAL_AUDIO_STREAM_ERROR_PLAYOUT_INVALID_ID = 10,
2712 };
2713 
2716 enum LOCAL_VIDEO_STREAM_STATE {
2720  LOCAL_VIDEO_STREAM_STATE_STOPPED = 0,
2725  LOCAL_VIDEO_STREAM_STATE_CAPTURING = 1,
2729  LOCAL_VIDEO_STREAM_STATE_ENCODING = 2,
2733  LOCAL_VIDEO_STREAM_STATE_FAILED = 3
2734 };
2735 
2739 enum LOCAL_VIDEO_STREAM_ERROR {
2743  LOCAL_VIDEO_STREAM_ERROR_OK = 0,
2747  LOCAL_VIDEO_STREAM_ERROR_FAILURE = 1,
2752  LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
2757  LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY = 3,
2763  LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE = 4,
2767  LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE = 5,
2772  LOCAL_VIDEO_STREAM_ERROR_CAPTURE_INBACKGROUND = 6,
2779  LOCAL_VIDEO_STREAM_ERROR_CAPTURE_MULTIPLE_FOREGROUND_APPS = 7,
2785  LOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUND = 8,
2790  LOCAL_VIDEO_STREAM_ERROR_DEVICE_DISCONNECTED = 9,
2795  LOCAL_VIDEO_STREAM_ERROR_DEVICE_INVALID_ID = 10,
2800  LOCAL_VIDEO_STREAM_ERROR_DEVICE_INTERRUPT = 14,
2805  LOCAL_VIDEO_STREAM_ERROR_DEVICE_FATAL_ERROR = 15,
2809  LOCAL_VIDEO_STREAM_ERROR_DEVICE_SYSTEM_PRESSURE = 101,
2815  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_MINIMIZED = 11,
2830  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_CLOSED = 12,
2832  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_OCCLUDED = 13,
2834  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_NOT_SUPPORTED = 20,
2836  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_FAILURE = 21,
2838  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_NO_PERMISSION = 22,
2846  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSED = 23,
2848  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMED = 24,
2850  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDEN = 25,
2852  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN = 26,
2854  LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED = 27,
2856  LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTED = 30,
2857 };
2858 
2862 enum REMOTE_AUDIO_STATE
2863 {
2869  REMOTE_AUDIO_STATE_STOPPED = 0, // Default state, audio is started or remote user disabled/muted audio stream
2873  REMOTE_AUDIO_STATE_STARTING = 1, // The first audio frame packet has been received
2879  REMOTE_AUDIO_STATE_DECODING = 2, // The first remote audio frame has been decoded or fronzen state ends
2884  REMOTE_AUDIO_STATE_FROZEN = 3, // Remote audio is frozen, probably due to network issue
2889  REMOTE_AUDIO_STATE_FAILED = 4, // Remote audio play failed
2890 };
2891 
2895 enum REMOTE_AUDIO_STATE_REASON
2896 {
2900  REMOTE_AUDIO_REASON_INTERNAL = 0,
2904  REMOTE_AUDIO_REASON_NETWORK_CONGESTION = 1,
2908  REMOTE_AUDIO_REASON_NETWORK_RECOVERY = 2,
2913  REMOTE_AUDIO_REASON_LOCAL_MUTED = 3,
2918  REMOTE_AUDIO_REASON_LOCAL_UNMUTED = 4,
2923  REMOTE_AUDIO_REASON_REMOTE_MUTED = 5,
2928  REMOTE_AUDIO_REASON_REMOTE_UNMUTED = 6,
2932  REMOTE_AUDIO_REASON_REMOTE_OFFLINE = 7,
2936  REMOTE_AUDIO_REASON_REMOTE_NO_PACKET_RECEIVE = 8,
2940  REMOTE_AUDIO_REASON_REMOTE_LOCAL_PLAY_FAILED = 9,
2941 };
2942 
2946 enum REMOTE_VIDEO_STATE {
2952  REMOTE_VIDEO_STATE_STOPPED = 0,
2956  REMOTE_VIDEO_STATE_STARTING = 1,
2962  REMOTE_VIDEO_STATE_DECODING = 2,
2966  REMOTE_VIDEO_STATE_FROZEN = 3,
2970  REMOTE_VIDEO_STATE_FAILED = 4,
2971 };
2975 enum REMOTE_VIDEO_STATE_REASON {
2979  REMOTE_VIDEO_STATE_REASON_INTERNAL = 0,
2983  REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION = 1,
2987  REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY = 2,
2991  REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED = 3,
2995  REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED = 4,
2999  REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED = 5,
3003  REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED = 6,
3007  REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE = 7,
3011  REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK = 8,
3015  REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY = 9,
3018  REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_LOW = 10,
3021  REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_HIGH = 11,
3024  REMOTE_VIDEO_STATE_REASON_SDK_IN_BACKGROUND = 12,
3025 
3028  REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT = 13,
3029 
3030 };
3031 
3035 enum REMOTE_USER_STATE {
3039  USER_STATE_MUTE_AUDIO = (1 << 0),
3043  USER_STATE_MUTE_VIDEO = (1 << 1),
3047  USER_STATE_ENABLE_VIDEO = (1 << 4),
3051  USER_STATE_ENABLE_LOCAL_VIDEO = (1 << 8),
3052 
3053 };
3054 
3060  VideoTrackInfo()
3061  : isLocal(false), ownerUid(0), trackId(0), channelId(OPTIONAL_NULLPTR)
3062  , streamType(VIDEO_STREAM_HIGH), codecType(VIDEO_CODEC_H264)
3063  , encodedFrameOnly(false), sourceType(VIDEO_SOURCE_CAMERA_PRIMARY)
3064  , observationPosition(agora::media::base::POSITION_POST_CAPTURER) {}
3070  bool isLocal;
3074  uid_t ownerUid;
3075 
3079  track_id_t trackId;
3083  const char* channelId;
3087  VIDEO_STREAM_TYPE streamType;
3091  VIDEO_CODEC_TYPE codecType;
3101  VIDEO_SOURCE_TYPE sourceType;
3106 };
3107 
3111 enum REMOTE_VIDEO_DOWNSCALE_LEVEL {
3115  REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE,
3119  REMOTE_VIDEO_DOWNSCALE_LEVEL_1,
3123  REMOTE_VIDEO_DOWNSCALE_LEVEL_2,
3127  REMOTE_VIDEO_DOWNSCALE_LEVEL_3,
3131  REMOTE_VIDEO_DOWNSCALE_LEVEL_4,
3132 };
3133 
3144  uid_t uid;
3150  unsigned int volume; // [0,255]
3160  unsigned int vad;
3166  double voicePitch;
3167 
3168  AudioVolumeInfo() : uid(0), volume(0), vad(0), voicePitch(0.0) {}
3169 };
3170 
3174 struct DeviceInfo {
3175  /*
3176  * Whether the audio device supports ultra-low-latency capture and playback:
3177  * - `true`: The device supports ultra-low-latency capture and playback.
3178  * - `false`: The device does not support ultra-low-latency capture and playback.
3179  */
3180  bool isLowLatencyAudioSupported;
3181 
3182  DeviceInfo() : isLowLatencyAudioSupported(false) {}
3183 };
3184 
3189  public:
3190  virtual ~IPacketObserver() {}
3194  struct Packet {
3200  const unsigned char* buffer;
3204  unsigned int size;
3205 
3206  Packet() : buffer(NULL), size(0) {}
3207  };
3215  virtual bool onSendAudioPacket(Packet& packet) = 0;
3223  virtual bool onSendVideoPacket(Packet& packet) = 0;
3231  virtual bool onReceiveAudioPacket(Packet& packet) = 0;
3239  virtual bool onReceiveVideoPacket(Packet& packet) = 0;
3240 };
3241 
3245 enum AUDIO_SAMPLE_RATE_TYPE {
3249  AUDIO_SAMPLE_RATE_32000 = 32000,
3253  AUDIO_SAMPLE_RATE_44100 = 44100,
3257  AUDIO_SAMPLE_RATE_48000 = 48000,
3258 };
3262 enum VIDEO_CODEC_TYPE_FOR_STREAM {
3266  VIDEO_CODEC_H264_FOR_STREAM = 1,
3270  VIDEO_CODEC_H265_FOR_STREAM = 2,
3271 };
3272 
3276 enum VIDEO_CODEC_PROFILE_TYPE {
3280  VIDEO_CODEC_PROFILE_BASELINE = 66,
3284  VIDEO_CODEC_PROFILE_MAIN = 77,
3288  VIDEO_CODEC_PROFILE_HIGH = 100,
3289 };
3290 
3291 
3295 enum AUDIO_CODEC_PROFILE_TYPE {
3299  AUDIO_CODEC_PROFILE_LC_AAC = 0,
3303  AUDIO_CODEC_PROFILE_HE_AAC = 1,
3307  AUDIO_CODEC_PROFILE_HE_AAC_V2 = 2,
3308 };
3309 
3314 {
3334  unsigned short txPacketLossRate;
3339 };
3340 
3341 
3345 enum RTMP_STREAM_PUBLISH_STATE {
3349  RTMP_STREAM_PUBLISH_STATE_IDLE = 0,
3353  RTMP_STREAM_PUBLISH_STATE_CONNECTING = 1,
3357  RTMP_STREAM_PUBLISH_STATE_RUNNING = 2,
3363  RTMP_STREAM_PUBLISH_STATE_RECOVERING = 3,
3367  RTMP_STREAM_PUBLISH_STATE_FAILURE = 4,
3371  RTMP_STREAM_PUBLISH_STATE_DISCONNECTING = 5,
3372 };
3373 
3377 enum RTMP_STREAM_PUBLISH_ERROR_TYPE {
3381  RTMP_STREAM_PUBLISH_ERROR_OK = 0,
3386  RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT = 1,
3390  RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED = 2,
3394  RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT = 3,
3398  RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR = 4,
3402  RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR = 5,
3406  RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN = 6,
3410  RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT = 7,
3414  RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED = 8,
3418  RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND = 9,
3422  RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED = 10,
3426  RTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTER = 11, // Note: match to ERR_PUBLISH_STREAM_NOT_BROADCASTER in AgoraBase.h
3430  RTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAM = 13, // Note: match to ERR_PUBLISH_STREAM_TRANSCODING_NO_MIX_STREAM in AgoraBase.h
3434  RTMP_STREAM_PUBLISH_ERROR_NET_DOWN = 14, // Note: match to ERR_NET_DOWN in AgoraBase.h
3438  RTMP_STREAM_PUBLISH_ERROR_INVALID_APPID = 15, // Note: match to ERR_PUBLISH_STREAM_APPID_INVALID in AgoraBase.h
3440  RTMP_STREAM_PUBLISH_ERROR_INVALID_PRIVILEGE = 16,
3444  RTMP_STREAM_UNPUBLISH_ERROR_OK = 100,
3445 };
3446 
3448 enum RTMP_STREAMING_EVENT {
3452  RTMP_STREAMING_EVENT_FAILED_LOAD_IMAGE = 1,
3456  RTMP_STREAMING_EVENT_URL_ALREADY_IN_USE = 2,
3460  RTMP_STREAMING_EVENT_ADVANCED_FEATURE_NOT_SUPPORT = 3,
3464  RTMP_STREAMING_EVENT_REQUEST_TOO_OFTEN = 4,
3465 };
3466 
3470 typedef struct RtcImage {
3474  const char* url;
3478  int x;
3482  int y;
3486  int width;
3490  int height;
3498  int zOrder;
3504  double alpha;
3505 
3506  RtcImage() : url(NULL), x(0), y(0), width(0), height(0), zOrder(0), alpha(1.0) {}
3507 } RtcImage;
3514  LiveStreamAdvancedFeature() : featureName(NULL), opened(false) {}
3515  LiveStreamAdvancedFeature(const char* feat_name, bool open) : featureName(feat_name), opened(open) {}
3517  // static const char* LBHQ = "lbhq";
3519  // static const char* VEO = "veo";
3520 
3524  const char* featureName;
3525 
3531  bool opened;
3532 } ;
3533 
3537 enum CONNECTION_STATE_TYPE
3538 {
3544  CONNECTION_STATE_DISCONNECTED = 1,
3553  CONNECTION_STATE_CONNECTING = 2,
3561  CONNECTION_STATE_CONNECTED = 3,
3571  CONNECTION_STATE_RECONNECTING = 4,
3580  CONNECTION_STATE_FAILED = 5,
3581 };
3582 
3590  uid_t uid;
3594  int x;
3598  int y;
3602  int width;
3606  int height;
3614  int zOrder;
3620  double alpha;
3634  TranscodingUser()
3635  : uid(0),
3636  x(0),
3637  y(0),
3638  width(0),
3639  height(0),
3640  zOrder(0),
3641  alpha(1.0),
3642  audioChannel(0) {}
3643 };
3644 
3655  int width;
3662  int height;
3673 
3680 
3688  VIDEO_CODEC_PROFILE_TYPE videoCodecProfile;
3691  unsigned int backgroundColor;
3693  VIDEO_CODEC_TYPE_FOR_STREAM videoCodecType;
3697  unsigned int userCount;
3706 
3709  const char* metadata;
3718  unsigned int watermarkCount;
3719 
3728  unsigned int backgroundImageCount;
3729 
3732  AUDIO_SAMPLE_RATE_TYPE audioSampleRate;
3746  AUDIO_CODEC_PROFILE_TYPE audioCodecProfile;
3750 
3752  unsigned int advancedFeatureCount;
3753  LiveTranscoding() : width(360), height(640), videoBitrate(400), videoFramerate(15), lowLatency(false), videoGop(30), videoCodecProfile(VIDEO_CODEC_PROFILE_HIGH), backgroundColor(0x000000), videoCodecType(VIDEO_CODEC_H264_FOR_STREAM), userCount(0), transcodingUsers(NULL), transcodingExtraInfo(NULL), metadata(NULL), watermark(NULL), watermarkCount(0), backgroundImage(NULL), backgroundImageCount(0), audioSampleRate(AUDIO_SAMPLE_RATE_48000), audioBitrate(48), audioChannels(1), audioCodecProfile(AUDIO_CODEC_PROFILE_LC_AAC), advancedFeatures(NULL), advancedFeatureCount(0) {}
3754 };
3755 
3763  VIDEO_SOURCE_TYPE sourceType;
3773  const char* imageUrl;
3781  int x;
3785  int y;
3789  int width;
3793  int height;
3799  int zOrder;
3803  double alpha;
3810  bool mirror;
3811 
3813  : sourceType(VIDEO_SOURCE_CAMERA_PRIMARY),
3814  remoteUserUid(0),
3815  imageUrl(NULL),
3816  x(0),
3817  y(0),
3818  width(0),
3819  height(0),
3820  zOrder(0),
3821  alpha(1.0),
3822  mirror(false) {}
3823 };
3824 
3825 
3833  unsigned int streamCount;
3848 
3850  : streamCount(0),
3851  videoInputStreams(NULL),
3853  syncWithPrimaryCamera(true) {}
3854 };
3855 
3856 enum VIDEO_TRANSCODER_ERROR {
3860  VT_ERR_VIDEO_SOURCE_NOT_READY = 1,
3864  VT_ERR_INVALID_VIDEO_SOURCE_TYPE = 2,
3868  VT_ERR_INVALID_IMAGE_PATH = 3,
3872  VT_ERR_UNSUPPORT_IMAGE_FORMAT = 4,
3876  VT_ERR_INVALID_LAYOUT = 5,
3880  VT_ERR_INTERNAL = 20
3881 };
3882 
3909 };
3910 
3914 enum LASTMILE_PROBE_RESULT_STATE {
3918  LASTMILE_PROBE_RESULT_COMPLETE = 1,
3922  LASTMILE_PROBE_RESULT_INCOMPLETE_NO_BWE = 2,
3926  LASTMILE_PROBE_RESULT_UNAVAILABLE = 3
3927 };
3928 
3936  unsigned int packetLossRate;
3940  unsigned int jitter;
3944  unsigned int availableBandwidth;
3945 
3947  jitter(0),
3948  availableBandwidth(0) {}
3949 };
3950 
3958  LASTMILE_PROBE_RESULT_STATE state;
3970  unsigned int rtt;
3971 
3973  : state(LASTMILE_PROBE_RESULT_UNAVAILABLE),
3974  rtt(0) {}
3975 };
3976 
3980 enum CONNECTION_CHANGED_REASON_TYPE
3981 {
3985  CONNECTION_CHANGED_CONNECTING = 0,
3989  CONNECTION_CHANGED_JOIN_SUCCESS = 1,
3993  CONNECTION_CHANGED_INTERRUPTED = 2,
3997  CONNECTION_CHANGED_BANNED_BY_SERVER = 3,
4001  CONNECTION_CHANGED_JOIN_FAILED = 4,
4005  CONNECTION_CHANGED_LEAVE_CHANNEL = 5,
4009  CONNECTION_CHANGED_INVALID_APP_ID = 6,
4013  CONNECTION_CHANGED_INVALID_CHANNEL_NAME = 7,
4019  CONNECTION_CHANGED_INVALID_TOKEN = 8,
4023  CONNECTION_CHANGED_TOKEN_EXPIRED = 9,
4029  CONNECTION_CHANGED_REJECTED_BY_SERVER = 10,
4033  CONNECTION_CHANGED_SETTING_PROXY_SERVER = 11,
4037  CONNECTION_CHANGED_RENEW_TOKEN = 12,
4041  CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED = 13,
4045  CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT = 14,
4049  CONNECTION_CHANGED_REJOIN_SUCCESS = 15,
4053  CONNECTION_CHANGED_LOST = 16,
4057  CONNECTION_CHANGED_ECHO_TEST = 17,
4061  CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED_BY_USER = 18,
4065  CONNECTION_CHANGED_SAME_UID_LOGIN = 19,
4069  CONNECTION_CHANGED_TOO_MANY_BROADCASTERS = 20,
4070 
4074  CONNECTION_CHANGED_LICENSE_VALIDATION_FAILURE = 21,
4078  CONNECTION_CHANGED_CERTIFICATION_VERYFY_FAILURE = 22,
4079 };
4080 
4084 enum CLIENT_ROLE_CHANGE_FAILED_REASON {
4088  CLIENT_ROLE_CHANGE_FAILED_TOO_MANY_BROADCASTERS = 1,
4092  CLIENT_ROLE_CHANGE_FAILED_NOT_AUTHORIZED = 2,
4096  CLIENT_ROLE_CHANGE_FAILED_REQUEST_TIME_OUT = 3,
4100  CLIENT_ROLE_CHANGE_FAILED_CONNECTION_FAILED = 4,
4101 };
4102 
4106 enum WLACC_MESSAGE_REASON {
4110  WLACC_MESSAGE_REASON_WEAK_SIGNAL = 0,
4114  WLACC_MESSAGE_REASON_CHANNEL_CONGESTION = 1,
4115 };
4116 
4120 enum WLACC_SUGGEST_ACTION {
4124  WLACC_SUGGEST_ACTION_CLOSE_TO_WIFI = 0,
4128  WLACC_SUGGEST_ACTION_CONNECT_SSID = 1,
4132  WLACC_SUGGEST_ACTION_CHECK_5G = 2,
4136  WLACC_SUGGEST_ACTION_MODIFY_SSID = 3,
4137 };
4138 
4142 struct WlAccStats {
4146  unsigned short e2eDelayPercent;
4150  unsigned short frozenRatioPercent;
4154  unsigned short lossRatePercent;
4155 };
4156 
4160 enum NETWORK_TYPE {
4164  NETWORK_TYPE_UNKNOWN = -1,
4168  NETWORK_TYPE_DISCONNECTED = 0,
4172  NETWORK_TYPE_LAN = 1,
4176  NETWORK_TYPE_WIFI = 2,
4180  NETWORK_TYPE_MOBILE_2G = 3,
4184  NETWORK_TYPE_MOBILE_3G = 4,
4188  NETWORK_TYPE_MOBILE_4G = 5,
4192  NETWORK_TYPE_MOBILE_5G = 6,
4193 };
4194 
4198 enum VIDEO_VIEW_SETUP_MODE {
4202  VIDEO_VIEW_SETUP_REPLACE = 0,
4206  VIDEO_VIEW_SETUP_ADD = 1,
4210  VIDEO_VIEW_SETUP_REMOVE = 2,
4211 };
4212 
4216 struct VideoCanvas {
4220  view_t view;
4224  uid_t uid;
4233  media::base::RENDER_MODE_TYPE renderMode;
4243  VIDEO_MIRROR_MODE_TYPE mirrorMode;
4248  VIDEO_VIEW_SETUP_MODE setupMode;
4253  VIDEO_SOURCE_TYPE sourceType;
4266 
4273 
4277  VIDEO_ORIENTATION rotation;
4278 
4279  VideoCanvas()
4280  : view(NULL), uid(0), backgroundColor(0x00000000), renderMode(media::base::RENDER_MODE_HIDDEN), mirrorMode(VIDEO_MIRROR_MODE_AUTO),
4281  setupMode(VIDEO_VIEW_SETUP_REPLACE), sourceType(VIDEO_SOURCE_CAMERA_PRIMARY), mediaPlayerId(-ERR_NOT_READY),
4282  cropArea(0, 0, 0, 0), enableAlphaMask(false), rotation(VIDEO_ORIENTATION_0) {}
4283 
4284  VideoCanvas(view_t v, media::base::RENDER_MODE_TYPE m, VIDEO_MIRROR_MODE_TYPE mt, uid_t u)
4285  : view(v), uid(u), backgroundColor(0x00000000), renderMode(m), mirrorMode(mt), setupMode(VIDEO_VIEW_SETUP_REPLACE),
4286  sourceType(VIDEO_SOURCE_CAMERA_PRIMARY), mediaPlayerId(-ERR_NOT_READY),
4287  cropArea(0, 0, 0, 0), enableAlphaMask(false), rotation(VIDEO_ORIENTATION_0) {}
4288 
4289  VideoCanvas(view_t v, media::base::RENDER_MODE_TYPE m, VIDEO_MIRROR_MODE_TYPE mt, user_id_t)
4290  : view(v), uid(0), backgroundColor(0x00000000), renderMode(m), mirrorMode(mt), setupMode(VIDEO_VIEW_SETUP_REPLACE),
4291  sourceType(VIDEO_SOURCE_CAMERA_PRIMARY), mediaPlayerId(-ERR_NOT_READY),
4292  cropArea(0, 0, 0, 0), enableAlphaMask(false), rotation(VIDEO_ORIENTATION_0) {}
4293 };
4294 
4307  };
4308 
4312 
4315 
4319 
4323 
4327 
4328  BeautyOptions(LIGHTENING_CONTRAST_LEVEL contrastLevel, float lightening, float smoothness, float redness, float sharpness) : lighteningContrastLevel(contrastLevel), lighteningLevel(lightening), smoothnessLevel(smoothness), rednessLevel(redness), sharpnessLevel(sharpness) {}
4329 
4331 };
4332 
4342  };
4355  };
4356 
4360 
4364 
4365  LowlightEnhanceOptions(LOW_LIGHT_ENHANCE_MODE lowlightMode, LOW_LIGHT_ENHANCE_LEVEL lowlightLevel) : mode(lowlightMode), level(lowlightLevel) {}
4366 
4368 };
4382  };
4403  };
4407 
4411 
4412  VideoDenoiserOptions(VIDEO_DENOISER_MODE denoiserMode, VIDEO_DENOISER_LEVEL denoiserLevel) : mode(denoiserMode), level(denoiserLevel) {}
4413 
4415 };
4416 
4425 
4431 
4432  ColorEnhanceOptions(float stength, float skinProtect) : strengthLevel(stength), skinProtectLevel(skinProtect) {}
4433 
4435 };
4436 
4464  };
4465 
4475  };
4476 
4480 
4489  unsigned int color;
4490 
4497  const char* source;
4498 
4503 
4505 };
4506 
4508 
4509  enum SEG_MODEL_TYPE {
4510 
4511  SEG_MODEL_AI = 1,
4512  SEG_MODEL_GREEN = 2
4513  };
4514 
4515  SEG_MODEL_TYPE modelType;
4516 
4517  float greenCapacity;
4518 
4519 
4520  SegmentationProperty() : modelType(SEG_MODEL_AI), greenCapacity(0.5){}
4521 };
4522 
4525 enum AUDIO_TRACK_TYPE {
4529  AUDIO_TRACK_INVALID = -1,
4536  AUDIO_TRACK_MIXABLE = 0,
4542  AUDIO_TRACK_DIRECT = 1,
4543 };
4544 
4554 
4556  : enableLocalPlayback(true) {}
4557 };
4558 
4561 enum LOOPBACK_AUDIO_TRACK_TYPE {
4565  LOOPBACK_SYSTEM = 0,
4569  LOOPBACK_SYSTEM_EXCLUDE_SELF = 1,
4573  LOOPBACK_APPLICATION = 2,
4574 };
4575 
4582  const char* appName;
4586  int volume;
4590  LOOPBACK_AUDIO_TRACK_TYPE loopbackType;
4591 
4593  : appName(NULL), volume(100), loopbackType(LOOPBACK_SYSTEM) {}
4594 };
4595 
4616 enum VOICE_BEAUTIFIER_PRESET {
4619  VOICE_BEAUTIFIER_OFF = 0x00000000,
4625  CHAT_BEAUTIFIER_MAGNETIC = 0x01010100,
4631  CHAT_BEAUTIFIER_FRESH = 0x01010200,
4637  CHAT_BEAUTIFIER_VITALITY = 0x01010300,
4646  SINGING_BEAUTIFIER = 0x01020100,
4649  TIMBRE_TRANSFORMATION_VIGOROUS = 0x01030100,
4652  TIMBRE_TRANSFORMATION_DEEP = 0x01030200,
4655  TIMBRE_TRANSFORMATION_MELLOW = 0x01030300,
4658  TIMBRE_TRANSFORMATION_FALSETTO = 0x01030400,
4661  TIMBRE_TRANSFORMATION_FULL = 0x01030500,
4664  TIMBRE_TRANSFORMATION_CLEAR = 0x01030600,
4667  TIMBRE_TRANSFORMATION_RESOUNDING = 0x01030700,
4670  TIMBRE_TRANSFORMATION_RINGING = 0x01030800,
4680  ULTRA_HIGH_QUALITY_VOICE = 0x01040100
4681 };
4682 
4702 enum AUDIO_EFFECT_PRESET {
4705  AUDIO_EFFECT_OFF = 0x00000000,
4708  ROOM_ACOUSTICS_KTV = 0x02010100,
4711  ROOM_ACOUSTICS_VOCAL_CONCERT = 0x02010200,
4714  ROOM_ACOUSTICS_STUDIO = 0x02010300,
4717  ROOM_ACOUSTICS_PHONOGRAPH = 0x02010400,
4724  ROOM_ACOUSTICS_VIRTUAL_STEREO = 0x02010500,
4727  ROOM_ACOUSTICS_SPACIAL = 0x02010600,
4730  ROOM_ACOUSTICS_ETHEREAL = 0x02010700,
4742  ROOM_ACOUSTICS_3D_VOICE = 0x02010800,
4753  ROOM_ACOUSTICS_VIRTUAL_SURROUND_SOUND = 0x02010900,
4760  VOICE_CHANGER_EFFECT_UNCLE = 0x02020100,
4766  VOICE_CHANGER_EFFECT_OLDMAN = 0x02020200,
4772  VOICE_CHANGER_EFFECT_BOY = 0x02020300,
4779  VOICE_CHANGER_EFFECT_SISTER = 0x02020400,
4785  VOICE_CHANGER_EFFECT_GIRL = 0x02020500,
4789  VOICE_CHANGER_EFFECT_PIGKING = 0x02020600,
4792  VOICE_CHANGER_EFFECT_HULK = 0x02020700,
4799  STYLE_TRANSFORMATION_RNB = 0x02030100,
4806  STYLE_TRANSFORMATION_POPULAR = 0x02030200,
4811  PITCH_CORRECTION = 0x02040100,
4812 
4816 };
4817 
4820 enum VOICE_CONVERSION_PRESET {
4823  VOICE_CONVERSION_OFF = 0x00000000,
4826  VOICE_CHANGER_NEUTRAL = 0x03010100,
4829  VOICE_CHANGER_SWEET = 0x03010200,
4832  VOICE_CHANGER_SOLID = 0x03010300,
4835  VOICE_CHANGER_BASS = 0x03010400,
4838  VOICE_CHANGER_CARTOON = 0x03010500,
4841  VOICE_CHANGER_CHILDLIKE = 0x03010600,
4844  VOICE_CHANGER_PHONE_OPERATOR = 0x03010700,
4847  VOICE_CHANGER_MONSTER = 0x03010800,
4850  VOICE_CHANGER_TRANSFORMERS = 0x03010900,
4853  VOICE_CHANGER_GROOT = 0x03010A00,
4856  VOICE_CHANGER_DARTH_VADER = 0x03010B00,
4859  VOICE_CHANGER_IRON_LADY = 0x03010C00,
4862  VOICE_CHANGER_SHIN_CHAN = 0x03010D00,
4865  VOICE_CHANGER_GIRLISH_MAN = 0x03010E00,
4868  VOICE_CHANGER_CHIPMUNK = 0x03010F00,
4869 
4870 };
4871 
4874 enum HEADPHONE_EQUALIZER_PRESET {
4877  HEADPHONE_EQUALIZER_OFF = 0x00000000,
4880  HEADPHONE_EQUALIZER_OVEREAR = 0x04000001,
4883  HEADPHONE_EQUALIZER_INEAR = 0x04000002
4884 };
4885 
4915  int bitrate;
4938 
4946  unsigned int highLightColor;
4955 
4957  : dimensions(1920, 1080), frameRate(5), bitrate(STANDARD_BITRATE), captureMouseCursor(true), windowFocus(false), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0), highLightWidth(0), highLightColor(0), enableHighLight(false) {}
4958  ScreenCaptureParameters(const VideoDimensions& d, int f, int b)
4960  ScreenCaptureParameters(int width, int height, int f, int b)
4961  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0), highLightWidth(0), highLightColor(0), enableHighLight(false){}
4962  ScreenCaptureParameters(int width, int height, int f, int b, bool cur, bool fcs)
4963  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(cur), windowFocus(fcs), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0), highLightWidth(0), highLightColor(0), enableHighLight(false) {}
4964  ScreenCaptureParameters(int width, int height, int f, int b, view_t *ex, int cnt)
4966  ScreenCaptureParameters(int width, int height, int f, int b, bool cur, bool fcs, view_t *ex, int cnt)
4968 };
4969 
4973 enum AUDIO_RECORDING_QUALITY_TYPE {
4977  AUDIO_RECORDING_QUALITY_LOW = 0,
4981  AUDIO_RECORDING_QUALITY_MEDIUM = 1,
4985  AUDIO_RECORDING_QUALITY_HIGH = 2,
4989  AUDIO_RECORDING_QUALITY_ULTRA_HIGH = 3,
4990 };
4991 
4995 enum AUDIO_FILE_RECORDING_TYPE {
4999  AUDIO_FILE_RECORDING_MIC = 1,
5003  AUDIO_FILE_RECORDING_PLAYBACK = 2,
5007  AUDIO_FILE_RECORDING_MIXED = 3,
5008 };
5009 
5013 enum AUDIO_ENCODED_FRAME_OBSERVER_POSITION {
5017  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_RECORD = 1,
5021  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK = 2,
5025  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED = 3,
5026 };
5027 
5036  const char* filePath;
5042  bool encode;
5056  AUDIO_FILE_RECORDING_TYPE fileRecordingType;
5061  AUDIO_RECORDING_QUALITY_TYPE quality;
5062 
5069 
5071  : filePath(NULL),
5072  encode(false),
5073  sampleRate(32000),
5074  fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
5075  quality(AUDIO_RECORDING_QUALITY_LOW),
5076  recordingChannel(1) {}
5077 
5078  AudioRecordingConfiguration(const char* file_path, int sample_rate, AUDIO_RECORDING_QUALITY_TYPE quality_type, int channel)
5079  : filePath(file_path),
5080  encode(false),
5081  sampleRate(sample_rate),
5082  fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
5083  quality(quality_type),
5084  recordingChannel(channel) {}
5085 
5086  AudioRecordingConfiguration(const char* file_path, bool enc, int sample_rate, AUDIO_FILE_RECORDING_TYPE type, AUDIO_RECORDING_QUALITY_TYPE quality_type, int channel)
5087  : filePath(file_path),
5088  encode(enc),
5089  sampleRate(sample_rate),
5090  fileRecordingType(type),
5091  quality(quality_type),
5092  recordingChannel(channel) {}
5093 
5094  AudioRecordingConfiguration(const AudioRecordingConfiguration &rhs)
5095  : filePath(rhs.filePath),
5096  encode(rhs.encode),
5097  sampleRate(rhs.sampleRate),
5099  quality(rhs.quality),
5101 };
5102 
5110  AUDIO_ENCODED_FRAME_OBSERVER_POSITION postionType;
5114  AUDIO_ENCODING_TYPE encodingType;
5115 
5117  : postionType(AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK),
5118  encodingType(AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM){}
5119 
5120 };
5125 public:
5136 virtual void onRecordAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
5137 
5148 virtual void onPlaybackAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
5149 
5160 virtual void onMixedAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
5161 
5162 virtual ~IAudioEncodedFrameObserver () {}
5163 };
5164 
5167 enum AREA_CODE {
5171  AREA_CODE_CN = 0x00000001,
5175  AREA_CODE_NA = 0x00000002,
5179  AREA_CODE_EU = 0x00000004,
5183  AREA_CODE_AS = 0x00000008,
5187  AREA_CODE_JP = 0x00000010,
5191  AREA_CODE_IN = 0x00000020,
5195  AREA_CODE_GLOB = (0xFFFFFFFF)
5196 };
5197 
5202 enum AREA_CODE_EX {
5206  AREA_CODE_OC = 0x00000040,
5210  AREA_CODE_SA = 0x00000080,
5214  AREA_CODE_AF = 0x00000100,
5218  AREA_CODE_KR = 0x00000200,
5222  AREA_CODE_HKMC = 0x00000400,
5226  AREA_CODE_US = 0x00000800,
5230  AREA_CODE_RU = 0x00001000,
5234  AREA_CODE_OVS = 0xFFFFFFFE
5235 };
5236 
5240 enum CHANNEL_MEDIA_RELAY_ERROR {
5243  RELAY_OK = 0,
5246  RELAY_ERROR_SERVER_ERROR_RESPONSE = 1,
5252  RELAY_ERROR_SERVER_NO_RESPONSE = 2,
5255  RELAY_ERROR_NO_RESOURCE_AVAILABLE = 3,
5258  RELAY_ERROR_FAILED_JOIN_SRC = 4,
5261  RELAY_ERROR_FAILED_JOIN_DEST = 5,
5264  RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC = 6,
5267  RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST = 7,
5271  RELAY_ERROR_SERVER_CONNECTION_LOST = 8,
5274  RELAY_ERROR_INTERNAL_ERROR = 9,
5277  RELAY_ERROR_SRC_TOKEN_EXPIRED = 10,
5280  RELAY_ERROR_DEST_TOKEN_EXPIRED = 11,
5281 };
5282 
5286 enum CHANNEL_MEDIA_RELAY_EVENT {
5289  RELAY_EVENT_NETWORK_DISCONNECTED = 0,
5292  RELAY_EVENT_NETWORK_CONNECTED = 1,
5295  RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL = 2,
5298  RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL = 3,
5301  RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL = 4,
5304  RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC = 5,
5307  RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC = 6,
5310  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL = 7,
5313  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED = 8,
5316  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE = 9,
5319  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL = 10,
5322  RELAY_EVENT_VIDEO_PROFILE_UPDATE = 11,
5325  RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS = 12,
5328  RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED = 13,
5331  RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS = 14,
5334  RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED = 15,
5335 };
5339 enum CHANNEL_MEDIA_RELAY_STATE {
5343  RELAY_STATE_IDLE = 0,
5346  RELAY_STATE_CONNECTING = 1,
5349  RELAY_STATE_RUNNING = 2,
5352  RELAY_STATE_FAILURE = 3,
5353 };
5354 
5361  const char* channelName;
5365  const char* token;
5368  uid_t uid;
5369 };
5370 
5407 
5409  : srcInfo(NULL),
5410  destInfos(NULL),
5411  destCount(0)
5412  {}
5413 };
5414 
5423 
5425 
5426  bool operator==(const UplinkNetworkInfo& rhs) const {
5428  }
5429 };
5430 
5439  const char* uid;
5443  VIDEO_STREAM_TYPE stream_type;
5447  REMOTE_VIDEO_DOWNSCALE_LEVEL current_downscale_level;
5452 
5454  : uid(OPTIONAL_NULLPTR),
5455  stream_type(VIDEO_STREAM_HIGH),
5456  current_downscale_level(REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE),
5457  expected_bitrate_bps(-1) {}
5458 
5459  PeerDownlinkInfo& operator=(const PeerDownlinkInfo& rhs) {
5460  if (this == &rhs) return *this;
5461  uid = OPTIONAL_NULLPTR;
5462  stream_type = rhs.stream_type;
5465  if (rhs.uid != OPTIONAL_NULLPTR) {
5466  char* temp = new char[strlen(rhs.uid) + 1];
5467  strcpy(temp, rhs.uid);
5468  uid = temp;
5469  }
5470  return *this;
5471  }
5472 
5473  ~PeerDownlinkInfo() {
5474  if (uid) { delete [] uid; }
5475  }
5476  };
5477 
5498 
5503  peer_downlink_info(OPTIONAL_NULLPTR),
5505 
5510  peer_downlink_info(OPTIONAL_NULLPTR),
5512  if (total_received_video_count <= 0) return;
5513  peer_downlink_info = new PeerDownlinkInfo[total_received_video_count];
5514  for (int i = 0; i < total_received_video_count; ++i)
5516  }
5517 
5518  DownlinkNetworkInfo& operator=(const DownlinkNetworkInfo& rhs) {
5519  if (this == &rhs) return *this;
5520  lastmile_buffer_delay_time_ms = rhs.lastmile_buffer_delay_time_ms;
5521  bandwidth_estimation_bps = rhs.bandwidth_estimation_bps;
5522  total_downscale_level_count = rhs.total_downscale_level_count;
5523  peer_downlink_info = OPTIONAL_NULLPTR;
5524  total_received_video_count = rhs.total_received_video_count;
5525  if (total_received_video_count > 0) {
5526  peer_downlink_info = new PeerDownlinkInfo[total_received_video_count];
5527  for (int i = 0; i < total_received_video_count; ++i)
5528  peer_downlink_info[i] = rhs.peer_downlink_info[i];
5529  }
5530  return *this;
5531  }
5532 
5533  ~DownlinkNetworkInfo() {
5534  if (peer_downlink_info) delete [] peer_downlink_info;
5535  }
5536 };
5537 
5544 enum ENCRYPTION_MODE {
5547  AES_128_XTS = 1,
5550  AES_128_ECB = 2,
5553  AES_256_XTS = 3,
5556  SM4_128_ECB = 4,
5559  AES_128_GCM = 5,
5562  AES_256_GCM = 6,
5566  AES_128_GCM2 = 7,
5569  AES_256_GCM2 = 8,
5572  MODE_END,
5573 };
5574 
5581  ENCRYPTION_MODE encryptionMode;
5587  const char* encryptionKey;
5594  uint8_t encryptionKdfSalt[32];
5595 
5596  bool datastreamEncryptionEnabled;
5597 
5599  : encryptionMode(AES_128_GCM2),
5600  encryptionKey(NULL),
5601  datastreamEncryptionEnabled(false)
5602  {
5603  memset(encryptionKdfSalt, 0, sizeof(encryptionKdfSalt));
5604  }
5605 
5607  const char* getEncryptionString() const {
5608  switch(encryptionMode) {
5609  case AES_128_XTS:
5610  return "aes-128-xts";
5611  case AES_128_ECB:
5612  return "aes-128-ecb";
5613  case AES_256_XTS:
5614  return "aes-256-xts";
5615  case SM4_128_ECB:
5616  return "sm4-128-ecb";
5617  case AES_128_GCM:
5618  return "aes-128-gcm";
5619  case AES_256_GCM:
5620  return "aes-256-gcm";
5621  case AES_128_GCM2:
5622  return "aes-128-gcm-2";
5623  case AES_256_GCM2:
5624  return "aes-256-gcm-2";
5625  default:
5626  return "aes-128-gcm-2";
5627  }
5628  return "aes-128-gcm-2";
5629  }
5631 };
5632 
5635 enum ENCRYPTION_ERROR_TYPE {
5639  ENCRYPTION_ERROR_INTERNAL_FAILURE = 0,
5643  ENCRYPTION_ERROR_DECRYPTION_FAILURE = 1,
5647  ENCRYPTION_ERROR_ENCRYPTION_FAILURE = 2,
5651  ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILURE = 3,
5655  ENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE = 4,
5656 };
5657 
5658 enum UPLOAD_ERROR_REASON
5659 {
5660  UPLOAD_SUCCESS = 0,
5661  UPLOAD_NET_ERROR = 1,
5662  UPLOAD_SERVER_ERROR = 2,
5663 };
5664 
5667 enum PERMISSION_TYPE {
5671  RECORD_AUDIO = 0,
5675  CAMERA = 1,
5676 
5677  SCREEN_CAPTURE = 2,
5678 };
5679 
5682 enum MAX_USER_ACCOUNT_LENGTH_TYPE
5683 {
5686  MAX_USER_ACCOUNT_LENGTH = 256
5687 };
5688 
5692 enum STREAM_SUBSCRIBE_STATE {
5696  SUB_STATE_IDLE = 0,
5709  SUB_STATE_NO_SUBSCRIBED = 1,
5713  SUB_STATE_SUBSCRIBING = 2,
5717  SUB_STATE_SUBSCRIBED = 3
5718 };
5719 
5723 enum STREAM_PUBLISH_STATE {
5727  PUB_STATE_IDLE = 0,
5735  PUB_STATE_NO_PUBLISHED = 1,
5739  PUB_STATE_PUBLISHING = 2,
5743  PUB_STATE_PUBLISHED = 3
5744 };
5745 
5750  view_t view;
5751  bool enableAudio;
5752  bool enableVideo;
5753  const char* token;
5754  const char* channelId;
5755  int intervalInSeconds;
5756 
5757  EchoTestConfiguration(view_t v, bool ea, bool ev, const char* t, const char* c, const int is)
5758  : view(v), enableAudio(ea), enableVideo(ev), token(t), channelId(c), intervalInSeconds(is) {}
5759 
5761  : view(OPTIONAL_NULLPTR), enableAudio(true), enableVideo(true), token(OPTIONAL_NULLPTR), channelId(OPTIONAL_NULLPTR), intervalInSeconds(2) {}
5762 };
5763 
5767 struct UserInfo {
5771  uid_t uid;
5775  char userAccount[MAX_USER_ACCOUNT_LENGTH];
5776  UserInfo()
5777  : uid(0) {
5778  userAccount[0] = '\0';
5779  }
5780 };
5781 
5785 enum EAR_MONITORING_FILTER_TYPE {
5789  EAR_MONITORING_FILTER_NONE = (1<<0),
5794  EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS = (1<<1),
5798  EAR_MONITORING_FILTER_NOISE_SUPPRESSION = (1<<2),
5802  EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTER = (1<<15),
5803 };
5804 
5808 enum THREAD_PRIORITY_TYPE {
5812  LOWEST = 0,
5816  LOW = 1,
5820  NORMAL = 2,
5824  HIGH = 3,
5828  HIGHEST = 4,
5832  CRITICAL = 5,
5833 };
5834 
5835 #if defined(__ANDROID__) || (defined(__APPLE__) && TARGET_OS_IOS)
5836 
5840 struct ScreenVideoParameters {
5867  VideoDimensions dimensions;
5873  int frameRate = 15;
5878  int bitrate;
5879  /*
5880  * The content hint of the screen sharing:
5881  */
5882  VIDEO_CONTENT_HINT contentHint = VIDEO_CONTENT_HINT::CONTENT_HINT_MOTION;
5883 
5884  ScreenVideoParameters() : dimensions(1280, 720) {}
5885 };
5886 
5890 struct ScreenAudioParameters {
5894  int sampleRate = 16000;
5898  int channels = 2;
5903  int captureSignalVolume = 100;
5904 };
5905 
5909 struct ScreenCaptureParameters2 {
5919  bool captureAudio = false;
5923  ScreenAudioParameters audioParams;
5933  bool captureVideo = true;
5937  ScreenVideoParameters videoParams;
5938 };
5939 #endif
5940 
5944 enum MEDIA_TRACE_EVENT {
5948  MEDIA_TRACE_EVENT_VIDEO_RENDERED = 0,
5952  MEDIA_TRACE_EVENT_VIDEO_DECODED,
5953 };
5954 
6008 };
6009 
6010 enum CONFIG_FETCH_TYPE {
6014  CONFIG_FETCH_TYPE_INITIALIZE = 1,
6018  CONFIG_FETCH_TYPE_JOIN_CHANNEL = 2,
6019 };
6020 
6021 
6029  const char* channelId;
6033  uid_t uid;
6034  RecorderStreamInfo() : channelId(NULL), uid(0) {}
6035 };
6036 
6037 
6039 enum LOCAL_PROXY_MODE {
6042  ConnectivityFirst = 0,
6045  LocalOnly = 1,
6046 };
6047 
6051  const char* serverDomain;
6054  const char* serverPath;
6063 
6064  LogUploadServerInfo() : serverDomain(NULL), serverPath(NULL), serverPort(0), serverHttps(true) {}
6065 
6066  LogUploadServerInfo(const char* domain, const char* path, int port, bool https) : serverDomain(domain), serverPath(path), serverPort(port), serverHttps(https) {}
6067 };
6068 
6073 };
6074 
6078  const char** ipList;
6084  const char** domainList;
6091  const char* verifyDomainName;
6094  LOCAL_PROXY_MODE mode;
6098  LocalAccessPointConfiguration() : ipList(NULL), ipListSize(0), domainList(NULL), domainListSize(0), verifyDomainName(NULL), mode(ConnectivityFirst) {}
6099 };
6100 
6101 
6102 } // namespace rtc
6103 
6104 namespace base {
6105 
6107  public:
6108  virtual int queryInterface(rtc::INTERFACE_ID_TYPE iid, void** inter) = 0;
6109  virtual ~IEngineBase() {}
6110 };
6111 
6112 class AParameter : public agora::util::AutoPtr<IAgoraParameter> {
6113  public:
6114  AParameter(IEngineBase& engine) { initialize(&engine); }
6115  AParameter(IEngineBase* engine) { initialize(engine); }
6117 
6118  private:
6119  bool initialize(IEngineBase* engine) {
6120  IAgoraParameter* p = NULL;
6121  if (engine && !engine->queryInterface(rtc::AGORA_IID_PARAMETER_ENGINE, (void**)&p)) reset(p);
6122  return p != NULL;
6123  }
6124 };
6125 
6127  public:
6128  virtual ~LicenseCallback() {}
6129  virtual void onCertificateRequired() = 0;
6130  virtual void onLicenseRequest() = 0;
6131  virtual void onLicenseValidated() = 0;
6132  virtual void onLicenseError(int result) = 0;
6133 };
6134 
6135 } // namespace base
6136 
6173 };
6174 
6175 } // namespace agora
6176 
6182 AGORA_API const char* AGORA_CALL getAgoraSdkVersion(int* build);
6183 
6189 AGORA_API const char* AGORA_CALL getAgoraSdkErrorDescription(int err);
6190 
6191 AGORA_API int AGORA_CALL setAgoraSdkExternalSymbolLoader(void* (*func)(const char* symname));
6192 
6200 AGORA_API int AGORA_CALL createAgoraCredential(agora::util::AString &credential);
6201 
6215 AGORA_API int AGORA_CALL getAgoraCertificateVerifyResult(const char *credential_buf, int credential_len,
6216  const char *certificate_buf, int certificate_len);
6217 
6225 AGORA_API void setAgoraLicenseCallback(agora::base::LicenseCallback *callback);
6226 
6234 AGORA_API agora::base::LicenseCallback* getAgoraLicenseCallback();
6235 
6236 /*
6237  * Get monotonic time in ms which can be used by capture time,
6238  * typical scenario is as follows:
6239  *
6240  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6241  * | // custom audio/video base capture time, e.g. the first audio/video capture time. |
6242  * | int64_t custom_capture_time_base; |
6243  * | |
6244  * | int64_t agora_monotonic_time = getAgoraCurrentMonotonicTimeInMs(); |
6245  * | |
6246  * | // offset is fixed once calculated in the begining. |
6247  * | const int64_t offset = agora_monotonic_time - custom_capture_time_base; |
6248  * | |
6249  * | // realtime_custom_audio/video_capture_time is the origin capture time that customer provided.|
6250  * | // actual_audio/video_capture_time is the actual capture time transfered to sdk. |
6251  * | int64_t actual_audio_capture_time = realtime_custom_audio_capture_time + offset; |
6252  * | int64_t actual_video_capture_time = realtime_custom_video_capture_time + offset; |
6253  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6254  *
6255  * @return
6256  * - >= 0: Success.
6257  * - < 0: Failure.
6258  */
6259 AGORA_API int64_t AGORA_CALL getAgoraCurrentMonotonicTimeInMs();
agora::rtc::LiveTranscoding::transcodingUsers
TranscodingUser * transcodingUsers
Definition: AgoraBase.h:3700
agora::rtc::LogUploadServerInfo::serverDomain
const char * serverDomain
Definition: AgoraBase.h:6051
agora::rtc::IPacketObserver::onReceiveVideoPacket
virtual bool onReceiveVideoPacket(Packet &packet)=0
agora::rtc::VideoCanvas::mediaPlayerId
int mediaPlayerId
Definition: AgoraBase.h:4259
agora::rtc::RtcImage::width
int width
Definition: AgoraBase.h:3486
agora::rtc::TranscodingVideoStream::zOrder
int zOrder
Definition: AgoraBase.h:3799
agora::rtc::RtcStats::firstAudioPacketDuration
int firstAudioPacketDuration
Definition: AgoraBase.h:2210
agora::rtc::UserInfo
Definition: AgoraBase.h:5767
agora::rtc::TranscodingVideoStream::alpha
double alpha
Definition: AgoraBase.h:3803
agora::rtc::EncodedAudioFrameInfo::captureTimeMs
int64_t captureTimeMs
Definition: AgoraBase.h:1480
agora::rtc::VideoEncoderConfiguration::degradationPreference
DEGRADATION_PREFERENCE degradationPreference
Definition: AgoraBase.h:1869
agora::rtc::LastmileProbeResult
Definition: AgoraBase.h:3954
agora::rtc::AudioEncodedFrameObserverConfig
Definition: AgoraBase.h:5106
agora::rtc::ScreenCaptureParameters
Definition: AgoraBase.h:4889
agora::rtc::WatermarkRatio
Definition: AgoraBase.h:2038
agora::rtc::AudioVolumeInfo
Definition: AgoraBase.h:3137
agora::rtc::VirtualBackgroundSource::BACKGROUND_BLUR_DEGREE
BACKGROUND_BLUR_DEGREE
Definition: AgoraBase.h:4468
agora::rtc::LastmileProbeResult::uplinkReport
LastmileProbeOneWayResult uplinkReport
Definition: AgoraBase.h:3962
agora::rtc::EncodedVideoFrameInfo::rotation
VIDEO_ORIENTATION rotation
Definition: AgoraBase.h:1632
agora::rtc::AdvancedConfigInfo::logUploadServer
LogUploadServerInfo logUploadServer
Definition: AgoraBase.h:6072
agora::rtc::BeautyOptions
Definition: AgoraBase.h:4297
agora::rtc::SenderOptions
Definition: AgoraBase.h:1205
agora::rtc::LoopbackAudioTrackConfig
Definition: AgoraBase.h:4578
agora::rtc::ScreenCaptureParameters::bitrate
int bitrate
Definition: AgoraBase.h:4915
agora::rtc::BeautyOptions::lighteningLevel
float lighteningLevel
Definition: AgoraBase.h:4314
agora::rtc::RtcStats::txVideoBytes
unsigned int txVideoBytes
Definition: AgoraBase.h:2122
agora::rtc::VirtualBackgroundSource::BACKGROUND_BLUR
@ BACKGROUND_BLUR
Definition: AgoraBase.h:4459
agora::rtc::LiveTranscoding::backgroundColor
unsigned int backgroundColor
Definition: AgoraBase.h:3691
agora::base::IAgoraParameter
Definition: IAgoraParameter.h:148
agora::rtc::AudioVolumeInfo::voicePitch
double voicePitch
Definition: AgoraBase.h:3166
agora::rtc::LastmileProbeConfig
Definition: AgoraBase.h:3886
agora::rtc::TranscodingUser::y
int y
Definition: AgoraBase.h:3598
agora::rtc::ScreenCaptureParameters::highLightWidth
int highLightWidth
Definition: AgoraBase.h:4942
agora::rtc::RtcStats::rxKBitRate
unsigned short rxKBitRate
Definition: AgoraBase.h:2138
agora::rtc::RtcStats::memoryTotalUsageRatio
double memoryTotalUsageRatio
Definition: AgoraBase.h:2195
agora::rtc::LocalAudioStats::txPacketLossRate
unsigned short txPacketLossRate
Definition: AgoraBase.h:3334
agora::rtc::VideoFormat::fps
int fps
Definition: AgoraBase.h:2517
agora::SpatialAudioParams::speaker_elevation
Optional< double > speaker_elevation
Definition: AgoraBase.h:6148
agora::rtc::VideoEncoderConfiguration::minBitrate
int minBitrate
Definition: AgoraBase.h:1861
agora::rtc::ScreenCaptureParameters::enableHighLight
bool enableHighLight
Definition: AgoraBase.h:4954
agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_AUTO
@ VIDEO_DENOISER_AUTO
Definition: AgoraBase.h:4379
agora::rtc::VideoCanvas::setupMode
VIDEO_VIEW_SETUP_MODE setupMode
Definition: AgoraBase.h:4248
agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY
@ LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY
Definition: AgoraBase.h:4350
agora::rtc::TranscodingUser::audioChannel
int audioChannel
Definition: AgoraBase.h:3633
agora::rtc::RtcStats::firstAudioPacketDurationAfterUnmute
int firstAudioPacketDurationAfterUnmute
Definition: AgoraBase.h:2230
agora::rtc::VideoFormat::width
int width
Definition: AgoraBase.h:2509
agora::rtc::ScreenCaptureParameters::windowFocus
bool windowFocus
Definition: AgoraBase.h:4926
agora::rtc::AudioEncodedFrameObserverConfig::encodingType
AUDIO_ENCODING_TYPE encodingType
Definition: AgoraBase.h:5114
agora::rtc::SenderOptions::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1213
agora::rtc::EncodedAudioFrameInfo::codec
AUDIO_CODEC_TYPE codec
Definition: AgoraBase.h:1457
agora::rtc::LiveTranscoding::videoGop
int videoGop
Definition: AgoraBase.h:3683
agora::rtc::ChannelMediaRelayConfiguration::destCount
int destCount
Definition: AgoraBase.h:5406
agora::rtc::LocalAudioStats::audioDeviceDelay
int audioDeviceDelay
Definition: AgoraBase.h:3338
agora::rtc::LastmileProbeOneWayResult::jitter
unsigned int jitter
Definition: AgoraBase.h:3940
agora::rtc::BeautyOptions::smoothnessLevel
float smoothnessLevel
Definition: AgoraBase.h:4318
agora::rtc::VideoDenoiserOptions::level
VIDEO_DENOISER_LEVEL level
Definition: AgoraBase.h:4410
agora::rtc::VideoCanvas::mirrorMode
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:4243
agora::rtc::RtcStats::duration
unsigned int duration
Definition: AgoraBase.h:2106
agora::rtc::SimulcastStreamConfig::framerate
int framerate
Definition: AgoraBase.h:1997
agora::rtc::VideoDimensions::height
int height
Definition: AgoraBase.h:1089
agora::rtc::LocalAccessPointConfiguration::mode
LOCAL_PROXY_MODE mode
Definition: AgoraBase.h:6094
agora::rtc::LastmileProbeConfig::probeUplink
bool probeUplink
Definition: AgoraBase.h:3893
agora::rtc::RecorderStreamInfo::channelId
const char * channelId
Definition: AgoraBase.h:6029
agora::rtc::LocalAccessPointConfiguration
Definition: AgoraBase.h:6075
agora::rtc::LiveTranscoding::videoCodecType
VIDEO_CODEC_TYPE_FOR_STREAM videoCodecType
Definition: AgoraBase.h:3693
agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_MODE
VIDEO_DENOISER_MODE
Definition: AgoraBase.h:4377
agora::rtc::LiveTranscoding
Definition: AgoraBase.h:3648
agora::rtc::RtcStats::txBytes
unsigned int txBytes
Definition: AgoraBase.h:2110
agora::rtc::VideoFormat::height
int height
Definition: AgoraBase.h:2513
agora::rtc::Rectangle
Definition: AgoraBase.h:2008
agora::rtc::LocalAccessPointConfiguration::ipList
const char ** ipList
Definition: AgoraBase.h:6078
agora::rtc::VideoCanvas::uid
uid_t uid
Definition: AgoraBase.h:4224
agora::rtc::RtcStats::firstVideoPacketDuration
int firstVideoPacketDuration
Definition: AgoraBase.h:2215
agora::rtc::AudioRecordingConfiguration::filePath
const char * filePath
Definition: AgoraBase.h:5036
agora::rtc::EncodedVideoFrameInfo
Definition: AgoraBase.h:1565
agora::rtc::ColorEnhanceOptions::strengthLevel
float strengthLevel
Definition: AgoraBase.h:4424
agora::SpatialAudioParams::speaker_distance
Optional< double > speaker_distance
Definition: AgoraBase.h:6152
agora::rtc::VirtualBackgroundSource::BACKGROUND_NONE
@ BACKGROUND_NONE
Definition: AgoraBase.h:4447
agora::rtc::BeautyOptions::rednessLevel
float rednessLevel
Definition: AgoraBase.h:4322
agora::rtc::RtcStats::rxVideoBytes
unsigned int rxVideoBytes
Definition: AgoraBase.h:2130
agora::rtc::TranscodingVideoStream::remoteUserUid
uid_t remoteUserUid
Definition: AgoraBase.h:3768
agora::rtc::VideoEncoderConfiguration::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:1783
agora::rtc::EncodedVideoFrameInfo::uid
uid_t uid
Definition: AgoraBase.h:1649
agora::rtc::EncodedAudioFrameInfo
Definition: AgoraBase.h:1439
agora::util::AutoPtr
Definition: AgoraBase.h:89
agora::rtc::LastmileProbeOneWayResult::packetLossRate
unsigned int packetLossRate
Definition: AgoraBase.h:3936
agora::UserInfo::hasAudio
bool hasAudio
Definition: AgoraBase.h:816
agora::rtc::ScreenCaptureParameters::excludeWindowCount
int excludeWindowCount
Definition: AgoraBase.h:4937
agora::rtc::IPacketObserver::Packet
Definition: AgoraBase.h:3194
agora::rtc::AudioTrackConfig::enableLocalPlayback
bool enableLocalPlayback
Definition: AgoraBase.h:4553
agora::rtc::LiveTranscoding::audioCodecProfile
AUDIO_CODEC_PROFILE_TYPE audioCodecProfile
Definition: AgoraBase.h:3746
agora::rtc::RecorderStreamInfo::uid
uid_t uid
Definition: AgoraBase.h:6033
agora::rtc::VideoEncoderConfiguration
Definition: AgoraBase.h:1775
agora::rtc::Rectangle::width
int width
Definition: AgoraBase.h:2020
agora::rtc::VideoEncoderConfiguration::bitrate
int bitrate
Definition: AgoraBase.h:1844
agora::rtc::VideoRenderingTracingInfo::remoteJoined2UnmuteVideo
int remoteJoined2UnmuteVideo
Definition: AgoraBase.h:5998
agora::util::AList
Definition: AgoraBase.h:222
agora::rtc::RtcStats::firstVideoKeyFrameDecodedDurationAfterUnmute
int firstVideoKeyFrameDecodedDurationAfterUnmute
Definition: AgoraBase.h:2245
agora::rtc::VideoSubscriptionOptions
Definition: AgoraBase.h:1544
agora::rtc::TranscodingUser
Definition: AgoraBase.h:3586
agora::rtc::EchoTestConfiguration
Definition: AgoraBase.h:5749
agora::rtc::RtcImage
Definition: AgoraBase.h:3470
agora::rtc::TranscodingUser::x
int x
Definition: AgoraBase.h:3594
agora::rtc::ChannelMediaInfo::token
const char * token
Definition: AgoraBase.h:5365
agora::rtc::VideoRenderingTracingInfo::remoteJoined2PacketReceived
int remoteJoined2PacketReceived
Definition: AgoraBase.h:6007
agora::rtc::AudioRecordingConfiguration::encode
bool encode
Definition: AgoraBase.h:5042
agora::rtc::BeautyOptions::lighteningContrastLevel
LIGHTENING_CONTRAST_LEVEL lighteningContrastLevel
Definition: AgoraBase.h:4311
agora::rtc::WatermarkRatio::yRatio
float yRatio
Definition: AgoraBase.h:2050
agora::SpatialAudioParams::enable_blur
Optional< bool > enable_blur
Definition: AgoraBase.h:6160
agora::rtc::SimulcastStreamConfig
Definition: AgoraBase.h:1985
agora::rtc::LiveTranscoding::audioBitrate
int audioBitrate
Definition: AgoraBase.h:3735
agora::rtc::ChannelMediaRelayConfiguration::destInfos
ChannelMediaInfo * destInfos
Definition: AgoraBase.h:5401
agora::rtc::RtcImage::x
int x
Definition: AgoraBase.h:3478
agora::rtc::VirtualBackgroundSource::background_source_type
BACKGROUND_SOURCE_TYPE background_source_type
Definition: AgoraBase.h:4479
agora::rtc::TranscodingVideoStream::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:3763
agora::rtc::LocalTranscoderConfiguration::syncWithPrimaryCamera
bool syncWithPrimaryCamera
Definition: AgoraBase.h:3847
agora::rtc::RtcImage::zOrder
int zOrder
Definition: AgoraBase.h:3498
agora::rtc::ClientRoleOptions::audienceLatencyLevel
AUDIENCE_LATENCY_LEVEL_TYPE audienceLatencyLevel
Definition: AgoraBase.h:2351
agora::rtc::AudioVolumeInfo::volume
unsigned int volume
Definition: AgoraBase.h:3150
agora::rtc::TranscodingUser::uid
uid_t uid
Definition: AgoraBase.h:3590
agora::rtc::VideoCanvas::enableAlphaMask
bool enableAlphaMask
Definition: AgoraBase.h:4272
agora::rtc::VideoRenderingTracingInfo::elapsedTime
int elapsedTime
Definition: AgoraBase.h:5962
agora::rtc::LiveStreamAdvancedFeature::featureName
const char * featureName
Definition: AgoraBase.h:3524
agora::rtc::AdvancedConfigInfo
Definition: AgoraBase.h:6069
agora::rtc::Rectangle::y
int y
Definition: AgoraBase.h:2016
agora::rtc::LocalAudioStats::sentBitrate
int sentBitrate
Definition: AgoraBase.h:3326
agora::rtc::RtcImage::url
const char * url
Definition: AgoraBase.h:3474
agora::rtc::IPacketObserver::Packet::buffer
const unsigned char * buffer
Definition: AgoraBase.h:3200
agora::rtc::EncodedVideoFrameInfo::decodeTimeMs
int64_t decodeTimeMs
Definition: AgoraBase.h:1645
agora::rtc::RtcStats::firstVideoKeyFrameRenderedDurationAfterUnmute
int firstVideoKeyFrameRenderedDurationAfterUnmute
Definition: AgoraBase.h:2250
agora::rtc::ColorEnhanceOptions
Definition: AgoraBase.h:4421
agora::rtc::AudioRecordingConfiguration::sampleRate
int sampleRate
Definition: AgoraBase.h:5052
agora::UserInfo::userId
util::AString userId
Definition: AgoraBase.h:810
agora::rtc::LoopbackAudioTrackConfig::volume
int volume
Definition: AgoraBase.h:4586
agora::rtc::WatermarkOptions::positionInPortraitMode
Rectangle positionInPortraitMode
Definition: AgoraBase.h:2081
agora::rtc::LocalAccessPointConfiguration::advancedConfig
AdvancedConfigInfo advancedConfig
Definition: AgoraBase.h:6097
agora::rtc::LastmileProbeResult::downlinkReport
LastmileProbeOneWayResult downlinkReport
Definition: AgoraBase.h:3966
agora::rtc::LiveTranscoding::watermarkCount
unsigned int watermarkCount
Definition: AgoraBase.h:3718
agora::rtc::Rectangle::x
int x
Definition: AgoraBase.h:2012
agora::rtc::LocalTranscoderConfiguration::videoInputStreams
TranscodingVideoStream * videoInputStreams
Definition: AgoraBase.h:3837
agora::util::IString
Definition: AgoraBase.h:161
agora::rtc::LocalAccessPointConfiguration::verifyDomainName
const char * verifyDomainName
Definition: AgoraBase.h:6091
agora::SpatialAudioParams::enable_air_absorb
Optional< bool > enable_air_absorb
Definition: AgoraBase.h:6164
agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_LEVEL
LOW_LIGHT_ENHANCE_LEVEL
Definition: AgoraBase.h:4346
agora::rtc::EncodedAudioFrameInfo::advancedSettings
EncodedAudioFrameAdvancedSettings advancedSettings
Definition: AgoraBase.h:1475
agora::rtc::LocalTranscoderConfiguration
Definition: AgoraBase.h:3829
agora::rtc::BeautyOptions::LIGHTENING_CONTRAST_LEVEL
LIGHTENING_CONTRAST_LEVEL
Definition: AgoraBase.h:4300
agora::rtc::WatermarkRatio::xRatio
float xRatio
Definition: AgoraBase.h:2044
agora::rtc::LocalAudioStats::sentSampleRate
int sentSampleRate
Definition: AgoraBase.h:3322
agora::rtc::VideoSubscriptionOptions::type
Optional< VIDEO_STREAM_TYPE > type
Definition: AgoraBase.h:1551
agora::rtc::LastmileProbeConfig::expectedDownlinkBitrate
unsigned int expectedDownlinkBitrate
Definition: AgoraBase.h:3908
agora::rtc::RtcStats::cpuTotalUsage
double cpuTotalUsage
Definition: AgoraBase.h:2179
agora::rtc::IPacketObserver::Packet::size
unsigned int size
Definition: AgoraBase.h:3204
agora::rtc::LiveTranscoding::advancedFeatures
LiveStreamAdvancedFeature * advancedFeatures
Definition: AgoraBase.h:3749
agora::rtc::LiveTranscoding::backgroundImageCount
unsigned int backgroundImageCount
Definition: AgoraBase.h:3728
agora::rtc::IPacketObserver
Definition: AgoraBase.h:3188
agora::rtc::LiveTranscoding::backgroundImage
RtcImage * backgroundImage
Definition: AgoraBase.h:3724
agora::rtc::RtcStats::cpuAppUsage
double cpuAppUsage
Definition: AgoraBase.h:2169
agora::rtc::VideoFormat
Definition: AgoraBase.h:2496
agora::rtc::LoopbackAudioTrackConfig::loopbackType
LOOPBACK_AUDIO_TRACK_TYPE loopbackType
Definition: AgoraBase.h:4590
agora::rtc::AdvanceOptions
Definition: AgoraBase.h:1691
agora::rtc::TranscodingUser::alpha
double alpha
Definition: AgoraBase.h:3620
agora::rtc::WatermarkOptions::watermarkRatio
WatermarkRatio watermarkRatio
Definition: AgoraBase.h:2086
agora::rtc::DataStreamConfig
Definition: AgoraBase.h:1941
agora::rtc::AdvanceOptions::compressionPreference
COMPRESSION_PREFERENCE compressionPreference
Definition: AgoraBase.h:1701
agora::rtc::RtcStats::txAudioBytes
unsigned int txAudioBytes
Definition: AgoraBase.h:2118
agora::rtc::RtcStats::connectTimeMs
int connectTimeMs
Definition: AgoraBase.h:2205
agora::rtc::LastmileProbeResult::state
LASTMILE_PROBE_RESULT_STATE state
Definition: AgoraBase.h:3958
agora::rtc::VideoEncoderConfiguration::advanceOptions
AdvanceOptions advanceOptions
Definition: AgoraBase.h:1880
agora::rtc::ChannelMediaInfo::channelName
const char * channelName
Definition: AgoraBase.h:5361
agora::rtc::LiveTranscoding::height
int height
Definition: AgoraBase.h:3662
agora::rtc::EncodedAudioFrameAdvancedSettings::speech
bool speech
Definition: AgoraBase.h:1427
agora::rtc::EncodedVideoFrameInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1610
agora::rtc::RtcStats::txVideoKBitRate
unsigned short txVideoKBitRate
Definition: AgoraBase.h:2154
agora::rtc::RtcStats::rxAudioBytes
unsigned int rxAudioBytes
Definition: AgoraBase.h:2126
agora::rtc::EncodedAudioFrameAdvancedSettings::sendEvenIfEmpty
bool sendEvenIfEmpty
Definition: AgoraBase.h:1433
agora::SpatialAudioParams::enable_doppler
Optional< bool > enable_doppler
Definition: AgoraBase.h:6172
agora::rtc::RtcStats::txAudioKBitRate
unsigned short txAudioKBitRate
Definition: AgoraBase.h:2146
agora::rtc::AudioVolumeInfo::uid
uid_t uid
Definition: AgoraBase.h:3144
agora::rtc::BeautyOptions::LIGHTENING_CONTRAST_LOW
@ LIGHTENING_CONTRAST_LOW
Definition: AgoraBase.h:4302
agora::rtc::LiveTranscoding::videoBitrate
int videoBitrate
Definition: AgoraBase.h:3667
agora::rtc::VideoTrackInfo::trackId
track_id_t trackId
Definition: AgoraBase.h:3079
agora::rtc::VideoTrackInfo::encodedFrameOnly
bool encodedFrameOnly
Definition: AgoraBase.h:3097
agora::rtc::TranscodingUser::width
int width
Definition: AgoraBase.h:3602
agora::rtc::ScreenCaptureParameters::highLightColor
unsigned int highLightColor
Definition: AgoraBase.h:4946
agora::base::AParameter
Definition: AgoraBase.h:6112
agora::rtc::BeautyOptions::sharpnessLevel
float sharpnessLevel
Definition: AgoraBase.h:4326
agora::rtc::EncryptionConfig::encryptionMode
ENCRYPTION_MODE encryptionMode
Definition: AgoraBase.h:5581
agora::util::AOutputIterator
Definition: AgoraBase.h:191
agora::rtc::WatermarkOptions::positionInLandscapeMode
Rectangle positionInLandscapeMode
Definition: AgoraBase.h:2076
agora::rtc::IAudioEncodedFrameObserver
Definition: AgoraBase.h:5124
agora::rtc::EncodedVideoFrameInfo::width
int width
Definition: AgoraBase.h:1614
agora::rtc::VideoTrackInfo::ownerUid
uid_t ownerUid
Definition: AgoraBase.h:3074
agora::rtc::VideoRenderingTracingInfo::join2JoinSuccess
int join2JoinSuccess
Definition: AgoraBase.h:5973
agora::rtc::LastmileProbeOneWayResult::availableBandwidth
unsigned int availableBandwidth
Definition: AgoraBase.h:3944
agora::rtc::EncodedVideoFrameInfo::captureTimeMs
int64_t captureTimeMs
Definition: AgoraBase.h:1641
agora::rtc::EncodedVideoFrameInfo::framesPerSecond
int framesPerSecond
Definition: AgoraBase.h:1624
agora::rtc::LiveTranscoding::transcodingExtraInfo
const char * transcodingExtraInfo
Definition: AgoraBase.h:3705
agora::rtc::VideoTrackInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:3091
agora::rtc::LiveTranscoding::metadata
const char * metadata
Definition: AgoraBase.h:3709
agora::rtc::LiveTranscoding::audioSampleRate
AUDIO_SAMPLE_RATE_TYPE audioSampleRate
Definition: AgoraBase.h:3732
agora::rtc::ChannelMediaRelayConfiguration
Definition: AgoraBase.h:5373
agora::rtc::VirtualBackgroundSource::blur_degree
BACKGROUND_BLUR_DEGREE blur_degree
Definition: AgoraBase.h:4502
agora::rtc::UserInfo::uid
uid_t uid
Definition: AgoraBase.h:5771
agora::rtc::DataStreamConfig::ordered
bool ordered
Definition: AgoraBase.h:1961
agora::rtc::LiveStreamAdvancedFeature
Definition: AgoraBase.h:3513
agora::rtc::VirtualBackgroundSource::color
unsigned int color
Definition: AgoraBase.h:4489
agora::rtc::LastmileProbeOneWayResult
Definition: AgoraBase.h:3932
agora::rtc::VideoDenoiserOptions
Definition: AgoraBase.h:4374
agora::rtc::WatermarkRatio::widthRatio
float widthRatio
Definition: AgoraBase.h:2056
agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_LEVEL_HIGH_QUALITY
@ VIDEO_DENOISER_LEVEL_HIGH_QUALITY
Definition: AgoraBase.h:4391
agora::rtc::VideoCanvas::cropArea
Rectangle cropArea
Definition: AgoraBase.h:4265
agora::rtc::AudioPcmDataInfo::samplesOut
size_t samplesOut
Definition: AgoraBase.h:1506
agora::rtc::VideoEncoderConfiguration::frameRate
int frameRate
Definition: AgoraBase.h:1787
agora::rtc::Rectangle::height
int height
Definition: AgoraBase.h:2024
agora::rtc::AudioPcmDataInfo::elapsedTimeMs
int64_t elapsedTimeMs
Definition: AgoraBase.h:1510
agora::rtc::WatermarkOptions::mode
WATERMARK_FIT_MODE mode
Definition: AgoraBase.h:2090
agora::rtc::EncodedAudioFrameInfo::sampleRateHz
int sampleRateHz
Definition: AgoraBase.h:1461
agora::UserInfo
Definition: AgoraBase.h:806
agora::rtc::RtcStats::txPacketLossRate
int txPacketLossRate
Definition: AgoraBase.h:2254
agora::rtc::VirtualBackgroundSource
Definition: AgoraBase.h:4440
agora::rtc::VideoCanvas::rotation
VIDEO_ORIENTATION rotation
Definition: AgoraBase.h:4277
agora::rtc::WlAccStats::frozenRatioPercent
unsigned short frozenRatioPercent
Definition: AgoraBase.h:4150
agora::rtc::LowlightEnhanceOptions::level
LOW_LIGHT_ENHANCE_LEVEL level
Definition: AgoraBase.h:4363
agora::rtc::VideoCanvas::view
view_t view
Definition: AgoraBase.h:4220
agora::rtc::TranscodingVideoStream::imageUrl
const char * imageUrl
Definition: AgoraBase.h:3773
agora::rtc::AudioEncodedFrameObserverConfig::postionType
AUDIO_ENCODED_FRAME_OBSERVER_POSITION postionType
Definition: AgoraBase.h:5110
agora::rtc::IPacketObserver::onSendAudioPacket
virtual bool onSendAudioPacket(Packet &packet)=0
agora::rtc::EncryptionConfig::encryptionKdfSalt
uint8_t encryptionKdfSalt[32]
Definition: AgoraBase.h:5594
agora::rtc::WlAccStats::lossRatePercent
unsigned short lossRatePercent
Definition: AgoraBase.h:4154
agora::rtc::VirtualBackgroundSource::BACKGROUND_IMG
@ BACKGROUND_IMG
Definition: AgoraBase.h:4455
agora::rtc::LiveTranscoding::watermark
RtcImage * watermark
Definition: AgoraBase.h:3714
agora::rtc::AudioVolumeInfo::vad
unsigned int vad
Definition: AgoraBase.h:3160
agora::rtc::ChannelMediaInfo
Definition: AgoraBase.h:5357
agora::UserInfo::hasVideo
bool hasVideo
Definition: AgoraBase.h:822
agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_MANUAL
@ LOW_LIGHT_ENHANCE_MANUAL
Definition: AgoraBase.h:4341
agora::rtc::WlAccStats
Definition: AgoraBase.h:4142
agora::rtc::VideoCanvas::renderMode
media::base::RENDER_MODE_TYPE renderMode
Definition: AgoraBase.h:4233
agora::SpatialAudioParams::speaker_orientation
Optional< int > speaker_orientation
Definition: AgoraBase.h:6156
agora::rtc::VideoTrackInfo::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:3101
agora::rtc::RtcStats::txKBitRate
unsigned short txKBitRate
Definition: AgoraBase.h:2134
agora::rtc::EncodedAudioFrameInfo::numberOfChannels
int numberOfChannels
Definition: AgoraBase.h:1471
agora::rtc::EncodedVideoFrameInfo::streamType
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:1653
agora::SpatialAudioParams::speaker_attenuation
Optional< double > speaker_attenuation
Definition: AgoraBase.h:6168
agora::rtc::VideoTrackInfo::observationPosition
uint32_t observationPosition
Definition: AgoraBase.h:3105
agora::rtc::LogUploadServerInfo
Definition: AgoraBase.h:6048
agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_LEVEL
VIDEO_DENOISER_LEVEL
Definition: AgoraBase.h:4386
agora::rtc::VideoCanvas::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:4253
agora::rtc::CodecCapInfo
Definition: AgoraBase.h:1763
agora::rtc::ScreenCaptureParameters::frameRate
int frameRate
Definition: AgoraBase.h:4909
agora::rtc::AudioRecordingConfiguration::recordingChannel
int recordingChannel
Definition: AgoraBase.h:5068
agora::rtc::RtcStats::firstVideoKeyFramePacketDurationAfterUnmute
int firstVideoKeyFramePacketDurationAfterUnmute
Definition: AgoraBase.h:2240
agora::rtc::LiveTranscoding::audioChannels
int audioChannels
Definition: AgoraBase.h:3743
agora::rtc::RtcImage::height
int height
Definition: AgoraBase.h:3490
agora::rtc::SimulcastStreamConfig::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:1989
agora::rtc::EncodedVideoFrameInfo::frameType
VIDEO_FRAME_TYPE frameType
Definition: AgoraBase.h:1628
agora::rtc::LastmileProbeConfig::probeDownlink
bool probeDownlink
Definition: AgoraBase.h:3899
agora::rtc::RtcStats::userCount
unsigned int userCount
Definition: AgoraBase.h:2162
agora::rtc::LocalTranscoderConfiguration::streamCount
unsigned int streamCount
Definition: AgoraBase.h:3833
agora::rtc::BeautyOptions::LIGHTENING_CONTRAST_HIGH
@ LIGHTENING_CONTRAST_HIGH
Definition: AgoraBase.h:4306
agora::base::LicenseCallback
Definition: AgoraBase.h:6126
agora::rtc::EncryptionConfig
Definition: AgoraBase.h:5576
agora::rtc::LiveTranscoding::videoCodecProfile
VIDEO_CODEC_PROFILE_TYPE videoCodecProfile
Definition: AgoraBase.h:3688
agora::rtc::VirtualBackgroundSource::BACKGROUND_SOURCE_TYPE
BACKGROUND_SOURCE_TYPE
Definition: AgoraBase.h:4443
agora::rtc::VideoRenderingTracingInfo::start2JoinChannel
int start2JoinChannel
Definition: AgoraBase.h:5969
agora::rtc::VideoCanvas::backgroundColor
uint32_t backgroundColor
Definition: AgoraBase.h:4228
agora::rtc::ScreenCaptureParameters::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:4903
agora::rtc::VideoDimensions::width
int width
Definition: AgoraBase.h:1085
agora::rtc::TranscodingVideoStream::x
int x
Definition: AgoraBase.h:3781
agora::rtc::LiveTranscoding::lowLatency
bool lowLatency
Definition: AgoraBase.h:3679
agora::rtc::TranscodingVideoStream
Definition: AgoraBase.h:3759
agora::rtc::VirtualBackgroundSource::source
const char * source
Definition: AgoraBase.h:4497
agora::rtc::LogUploadServerInfo::serverPath
const char * serverPath
Definition: AgoraBase.h:6054
agora::rtc::RtcStats
Definition: AgoraBase.h:2102
agora::rtc::VideoSubscriptionOptions::encodedFrameOnly
Optional< bool > encodedFrameOnly
Definition: AgoraBase.h:1557
agora::rtc::IAudioEncodedFrameObserver::onRecordAudioEncodedFrame
virtual void onRecordAudioEncodedFrame(const uint8_t *frameBuffer, int length, const EncodedAudioFrameInfo &audioEncodedFrameInfo)=0
agora::rtc::VirtualBackgroundSource::BACKGROUND_VIDEO
@ BACKGROUND_VIDEO
Definition: AgoraBase.h:4463
agora::rtc::WatermarkOptions::visibleInPreview
bool visibleInPreview
Definition: AgoraBase.h:2071
agora::rtc::LowlightEnhanceOptions
Definition: AgoraBase.h:4333
agora::rtc::TranscodingUser::zOrder
int zOrder
Definition: AgoraBase.h:3614
agora::rtc::LiveTranscoding::width
int width
Definition: AgoraBase.h:3655
agora::rtc::AudioPcmDataInfo
Definition: AgoraBase.h:1485
agora::rtc::RtcStats::rxBytes
unsigned int rxBytes
Definition: AgoraBase.h:2114
agora::rtc::RtcStats::rxVideoKBitRate
unsigned short rxVideoKBitRate
Definition: AgoraBase.h:2150
agora::rtc::VideoDenoiserOptions::mode
VIDEO_DENOISER_MODE mode
Definition: AgoraBase.h:4406
agora::rtc::RtcStats::rxAudioKBitRate
unsigned short rxAudioKBitRate
Definition: AgoraBase.h:2142
agora::rtc::LocalAudioStats::numChannels
int numChannels
Definition: AgoraBase.h:3318
agora::rtc::VideoRenderingTracingInfo::remoteJoined2SetView
int remoteJoined2SetView
Definition: AgoraBase.h:5989
agora::rtc::WatermarkOptions
Definition: AgoraBase.h:2065
agora::rtc::VideoEncoderConfiguration::mirrorMode
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:1875
agora::rtc::LocalAudioStats
Definition: AgoraBase.h:3314
agora::rtc::RecorderStreamInfo
Definition: AgoraBase.h:6025
agora::rtc::LogUploadServerInfo::serverPort
int serverPort
Definition: AgoraBase.h:6057
agora::rtc::ScreenCaptureParameters::captureMouseCursor
bool captureMouseCursor
Definition: AgoraBase.h:4920
agora::rtc::RtcImage::y
int y
Definition: AgoraBase.h:3482
agora::rtc::EncodedAudioFrameAdvancedSettings
Definition: AgoraBase.h:1417
agora::rtc::RtcStats::memoryAppUsageRatio
double memoryAppUsageRatio
Definition: AgoraBase.h:2190
agora::rtc::RtcStats::gatewayRtt
int gatewayRtt
Definition: AgoraBase.h:2185
agora::rtc::LastmileProbeConfig::expectedUplinkBitrate
unsigned int expectedUplinkBitrate
Definition: AgoraBase.h:3904
agora::rtc::VideoTrackInfo::isLocal
bool isLocal
Definition: AgoraBase.h:3070
agora::rtc::IAudioEncodedFrameObserver::onPlaybackAudioEncodedFrame
virtual void onPlaybackAudioEncodedFrame(const uint8_t *frameBuffer, int length, const EncodedAudioFrameInfo &audioEncodedFrameInfo)=0
agora::rtc::AdvanceOptions::encodingPreference
ENCODING_PREFERENCE encodingPreference
Definition: AgoraBase.h:1696
agora::rtc::VideoTrackInfo::channelId
const char * channelId
Definition: AgoraBase.h:3083
agora::rtc::IAudioEncodedFrameObserver::onMixedAudioEncodedFrame
virtual void onMixedAudioEncodedFrame(const uint8_t *frameBuffer, int length, const EncodedAudioFrameInfo &audioEncodedFrameInfo)=0
agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_LEVEL_FAST
@ LOW_LIGHT_ENHANCE_LEVEL_FAST
Definition: AgoraBase.h:4354
agora::rtc::RtcStats::firstVideoKeyFramePacketDuration
int firstVideoKeyFramePacketDuration
Definition: AgoraBase.h:2220
agora::rtc::CodecCapInfo::codecLevels
CodecCapLevels codecLevels
Definition: AgoraBase.h:1769
agora::rtc::VideoTrackInfo::streamType
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:3087
agora::rtc::LiveTranscoding::advancedFeatureCount
unsigned int advancedFeatureCount
Definition: AgoraBase.h:3752
agora::rtc::CodecCapInfo::codecCapMask
int codecCapMask
Definition: AgoraBase.h:1767
agora::rtc::AudioRecordingConfiguration
Definition: AgoraBase.h:5031
agora::SpatialAudioParams::speaker_azimuth
Optional< double > speaker_azimuth
Definition: AgoraBase.h:6144
agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_MODE
LOW_LIGHT_ENHANCE_MODE
Definition: AgoraBase.h:4337
agora::util::IContainer
Definition: AgoraBase.h:182
agora::rtc::VirtualBackgroundSource::BLUR_DEGREE_HIGH
@ BLUR_DEGREE_HIGH
Definition: AgoraBase.h:4474
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1081
agora::rtc::VirtualBackgroundSource::BLUR_DEGREE_LOW
@ BLUR_DEGREE_LOW
Definition: AgoraBase.h:4470
agora::rtc::VideoRenderingTracingInfo::joinSuccess2RemoteJoined
int joinSuccess2RemoteJoined
Definition: AgoraBase.h:5981
agora::rtc::TranscodingVideoStream::height
int height
Definition: AgoraBase.h:3793
agora::rtc::DataStreamConfig::syncWithAudio
bool syncWithAudio
Definition: AgoraBase.h:1953
agora::rtc::LowlightEnhanceOptions::mode
LOW_LIGHT_ENHANCE_MODE mode
Definition: AgoraBase.h:4359
agora::rtc::LiveTranscoding::userCount
unsigned int userCount
Definition: AgoraBase.h:3697
agora::util::CopyableAutoPtr
Definition: AgoraBase.h:145
agora::rtc::CodecCapInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1765
agora::rtc::AudioTrackConfig
Definition: AgoraBase.h:4547
agora::rtc::LocalAccessPointConfiguration::ipListSize
int ipListSize
Definition: AgoraBase.h:6081
agora::rtc::TranscodingVideoStream::width
int width
Definition: AgoraBase.h:3789
agora::rtc::TranscodingVideoStream::mirror
bool mirror
Definition: AgoraBase.h:3810
agora::rtc::SimulcastStreamConfig::kBitrate
int kBitrate
Definition: AgoraBase.h:1993
agora::rtc::RtcImage::alpha
double alpha
Definition: AgoraBase.h:3504
agora::rtc::TranscodingVideoStream::mediaPlayerId
int mediaPlayerId
Definition: AgoraBase.h:3777
agora::rtc::EncryptionConfig::encryptionKey
const char * encryptionKey
Definition: AgoraBase.h:5587
agora::rtc::EncodedVideoFrameInfo::trackId
int trackId
Definition: AgoraBase.h:1636
agora::rtc::VirtualBackgroundSource::BLUR_DEGREE_MEDIUM
@ BLUR_DEGREE_MEDIUM
Definition: AgoraBase.h:4472
agora::rtc::ScreenCaptureParameters::excludeWindowList
view_t * excludeWindowList
Definition: AgoraBase.h:4933
agora::rtc::LocalAccessPointConfiguration::domainList
const char ** domainList
Definition: AgoraBase.h:6084
agora::rtc::IPacketObserver::onSendVideoPacket
virtual bool onSendVideoPacket(Packet &packet)=0
agora::rtc::AudioPcmDataInfo::samplesPerChannel
size_t samplesPerChannel
Definition: AgoraBase.h:1498
agora::rtc::VideoTrackInfo
Definition: AgoraBase.h:3059
agora::rtc::LocalTranscoderConfiguration::videoOutputConfiguration
VideoEncoderConfiguration videoOutputConfiguration
Definition: AgoraBase.h:3841
agora::rtc::SenderOptions::ccMode
TCcMode ccMode
Definition: AgoraBase.h:1209
agora::rtc::VirtualBackgroundSource::BACKGROUND_COLOR
@ BACKGROUND_COLOR
Definition: AgoraBase.h:4451
agora::rtc::AudioPcmDataInfo::ntpTimeMs
int64_t ntpTimeMs
Definition: AgoraBase.h:1514
agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_AUTO
@ LOW_LIGHT_ENHANCE_AUTO
Definition: AgoraBase.h:4339
agora::rtc::RtcStats::firstVideoPacketDurationAfterUnmute
int firstVideoPacketDurationAfterUnmute
Definition: AgoraBase.h:2235
agora::rtc::LiveTranscoding::videoFramerate
int videoFramerate
Definition: AgoraBase.h:3672
agora::rtc::RtcStats::rxPacketLossRate
int rxPacketLossRate
Definition: AgoraBase.h:2258
agora::rtc::RtcStats::lastmileDelay
unsigned short lastmileDelay
Definition: AgoraBase.h:2158
agora::rtc::CodecCapLevels
Definition: AgoraBase.h:1755
agora::SpatialAudioParams
Definition: AgoraBase.h:6140
agora::rtc::ColorEnhanceOptions::skinProtectLevel
float skinProtectLevel
Definition: AgoraBase.h:4430
agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_LEVEL_FAST
@ VIDEO_DENOISER_LEVEL_FAST
Definition: AgoraBase.h:4396
agora::rtc::VideoEncoderConfiguration::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1779
agora::rtc::LastmileProbeResult::rtt
unsigned int rtt
Definition: AgoraBase.h:3970
agora::rtc::TranscodingVideoStream::y
int y
Definition: AgoraBase.h:3785
agora::rtc::RtcStats::packetsBeforeFirstKeyFramePacket
int packetsBeforeFirstKeyFramePacket
Definition: AgoraBase.h:2225
agora::rtc::BeautyOptions::LIGHTENING_CONTRAST_NORMAL
@ LIGHTENING_CONTRAST_NORMAL
Definition: AgoraBase.h:4304
agora::rtc::ChannelMediaRelayConfiguration::srcInfo
ChannelMediaInfo * srcInfo
Definition: AgoraBase.h:5386
agora::rtc::VideoEncoderConfiguration::orientationMode
ORIENTATION_MODE orientationMode
Definition: AgoraBase.h:1865
agora::rtc::WlAccStats::e2eDelayPercent
unsigned short e2eDelayPercent
Definition: AgoraBase.h:4146
agora::rtc::LoopbackAudioTrackConfig::appName
const char * appName
Definition: AgoraBase.h:4582
agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_LEVEL_STRENGTH
@ VIDEO_DENOISER_LEVEL_STRENGTH
Definition: AgoraBase.h:4402
agora::rtc::LiveStreamAdvancedFeature::opened
bool opened
Definition: AgoraBase.h:3531
agora::rtc::DeviceInfo
Definition: AgoraBase.h:3174
agora::base::IEngineBase
Definition: AgoraBase.h:6106
agora::rtc::SenderOptions::targetBitrate
int targetBitrate
Definition: AgoraBase.h:1271
agora::rtc::AudioRecordingConfiguration::quality
AUDIO_RECORDING_QUALITY_TYPE quality
Definition: AgoraBase.h:5061
agora::util::IIterator
Definition: AgoraBase.h:173
agora::rtc::UserInfo::userAccount
char userAccount[MAX_USER_ACCOUNT_LENGTH]
Definition: AgoraBase.h:5775
agora::rtc::VideoRenderingTracingInfo
Definition: AgoraBase.h:5958
agora::rtc::LogUploadServerInfo::serverHttps
bool serverHttps
Definition: AgoraBase.h:6062
agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_MANUAL
@ VIDEO_DENOISER_MANUAL
Definition: AgoraBase.h:4381
agora::rtc::EncodedAudioFrameInfo::samplesPerChannel
int samplesPerChannel
Definition: AgoraBase.h:1467
agora::rtc::EncodedVideoFrameInfo::height
int height
Definition: AgoraBase.h:1618
agora::rtc::RtcStats::memoryAppUsageInKbytes
int memoryAppUsageInKbytes
Definition: AgoraBase.h:2200
agora::Optional< VIDEO_STREAM_TYPE >
agora::rtc::LocalAccessPointConfiguration::domainListSize
int domainListSize
Definition: AgoraBase.h:6087
agora::rtc::ClientRoleOptions
Definition: AgoraBase.h:2347
agora::rtc::TranscodingUser::height
int height
Definition: AgoraBase.h:3606
agora::rtc::IPacketObserver::onReceiveAudioPacket
virtual bool onReceiveAudioPacket(Packet &packet)=0
agora::rtc::VideoCanvas
Definition: AgoraBase.h:4216
agora::rtc::LocalAudioStats::internalCodec
int internalCodec
Definition: AgoraBase.h:3330
agora::rtc::AudioRecordingConfiguration::fileRecordingType
AUDIO_FILE_RECORDING_TYPE fileRecordingType
Definition: AgoraBase.h:5056
agora::rtc::SegmentationProperty
Definition: AgoraBase.h:4507
agora::rtc::ChannelMediaInfo::uid
uid_t uid
Definition: AgoraBase.h:5368