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 <cassert>
15 
16 #include "IAgoraParameter.h"
17 #include "AgoraMediaBase.h"
18 #include "AgoraRefPtr.h"
19 
20 #define MAX_PATH_260 (260)
21 
22 #if defined(_WIN32)
23 
24 #ifndef WIN32_LEAN_AND_MEAN
25 #define WIN32_LEAN_AND_MEAN
26 #endif // !WIN32_LEAN_AND_MEAN
27 
28 #include <Windows.h>
29 
30 #if defined(AGORARTC_EXPORT)
31 #define AGORA_API extern "C" __declspec(dllexport)
32 #else
33 #define AGORA_API extern "C" __declspec(dllimport)
34 #endif // AGORARTC_EXPORT
35 
36 #define AGORA_CALL __cdecl
37 
38 #elif defined(__APPLE__)
39 
40 #include <TargetConditionals.h>
41 
42 #define AGORA_API extern "C" __attribute__((visibility("default")))
43 #define AGORA_CALL
44 
45 #elif defined(__ANDROID__) || defined(__linux__)
46 
47 #define AGORA_API extern "C" __attribute__((visibility("default")))
48 #define AGORA_CALL
49 
50 #else // !_WIN32 && !__APPLE__ && !(__ANDROID__ || __linux__)
51 
52 #define AGORA_API extern "C"
53 #define AGORA_CALL
54 
55 #endif // _WIN32
56 
57 namespace agora {
58 namespace commons {
59 namespace cjson {
60 class JsonWrapper;
61 } // namespace cjson
62 } // namespace commons
63 
64 typedef commons::cjson::JsonWrapper any_document_t;
65 
66 namespace base {
67 class IEngineBase;
68 
70  public:
71  virtual int setParameters(const char* parameters) = 0;
72  virtual int getParameters(const char* key, any_document_t& result) = 0;
73  virtual ~IParameterEngine() {}
74 };
75 } // namespace base
76 
77 namespace util {
78 
79 template <class T>
80 class AutoPtr {
81  protected:
82  typedef T value_type;
83  typedef T* pointer_type;
84 
85  public:
86  explicit AutoPtr(pointer_type p = NULL) : ptr_(p) {}
87 
88  ~AutoPtr() {
89  if (ptr_) {
90  ptr_->release();
91  ptr_ = NULL;
92  }
93  }
94 
95  operator bool() const { return (ptr_ != NULL); }
96 
97  value_type& operator*() const { return *get(); }
98 
99  pointer_type operator->() const { return get(); }
100 
101  pointer_type get() const { return ptr_; }
102 
103  pointer_type release() {
104  pointer_type ret = ptr_;
105  ptr_ = 0;
106  return ret;
107  }
108 
109  void reset(pointer_type ptr = NULL) {
110  if (ptr != ptr_ && ptr_) {
111  ptr_->release();
112  }
113 
114  ptr_ = ptr;
115  }
116 
117  template <class C1, class C2>
118  bool queryInterface(C1* c, C2 iid) {
119  pointer_type p = NULL;
120  if (c && !c->queryInterface(iid, reinterpret_cast<void**>(&p))) {
121  reset(p);
122  }
123 
124  return (p != NULL);
125  }
126 
127  private:
128  AutoPtr(const AutoPtr&);
129  AutoPtr& operator=(const AutoPtr&);
130 
131  private:
132  pointer_type ptr_;
133 };
134 
135 template <class T>
136 class CopyableAutoPtr : public AutoPtr<T> {
137  typedef typename AutoPtr<T>::pointer_type pointer_type;
138 
139  public:
140  explicit CopyableAutoPtr(pointer_type p = 0) : AutoPtr<T>(p) {}
141  explicit CopyableAutoPtr(const CopyableAutoPtr& rhs) { this->reset(rhs.clone()); }
142  CopyableAutoPtr& operator=(const CopyableAutoPtr& rhs) {
143  if (this != &rhs) this->reset(rhs.clone());
144  return *this;
145  }
146  pointer_type clone() const {
147  if (!this->get()) return NULL;
148  return this->get()->clone();
149  }
150 };
151 
152 class IString {
153  public:
154  virtual bool empty() const = 0;
155  virtual const char* c_str() = 0;
156  virtual const char* data() = 0;
157  virtual size_t length() = 0;
158  virtual IString* clone() = 0;
159  virtual void release() = 0;
160  virtual ~IString() {}
161 };
163 
164 class IIterator {
165  public:
166  virtual void* current() = 0;
167  virtual const void* const_current() const = 0;
168  virtual bool next() = 0;
169  virtual void release() = 0;
170  virtual ~IIterator() {}
171 };
172 
173 class IContainer {
174  public:
175  virtual IIterator* begin() = 0;
176  virtual size_t size() const = 0;
177  virtual void release() = 0;
178  virtual ~IContainer() {}
179 };
180 
181 template <class T>
183  IIterator* p;
184 
185  public:
186  typedef T value_type;
187  typedef value_type& reference;
188  typedef const value_type& const_reference;
189  typedef value_type* pointer;
190  typedef const value_type* const_pointer;
191  explicit AOutputIterator(IIterator* it = NULL) : p(it) {}
192  ~AOutputIterator() {
193  if (p) p->release();
194  }
195  AOutputIterator(const AOutputIterator& rhs) : p(rhs.p) {}
196  AOutputIterator& operator++() {
197  p->next();
198  return *this;
199  }
200  bool operator==(const AOutputIterator& rhs) const {
201  if (p && rhs.p)
202  return p->current() == rhs.p->current();
203  else
204  return valid() == rhs.valid();
205  }
206  bool operator!=(const AOutputIterator& rhs) const { return !this->operator==(rhs); }
207  reference operator*() { return *reinterpret_cast<pointer>(p->current()); }
208  const_reference operator*() const { return *reinterpret_cast<const_pointer>(p->const_current()); }
209  bool valid() const { return p && p->current() != NULL; }
210 };
211 
212 template <class T>
213 class AList {
214  IContainer* container;
215  bool owner;
216 
217  public:
218  typedef T value_type;
219  typedef value_type& reference;
220  typedef const value_type& const_reference;
221  typedef value_type* pointer;
222  typedef const value_type* const_pointer;
223  typedef size_t size_type;
226 
227  public:
228  AList() : container(NULL), owner(false) {}
229  AList(IContainer* c, bool take_ownership) : container(c), owner(take_ownership) {}
230  ~AList() { reset(); }
231  void reset(IContainer* c = NULL, bool take_ownership = false) {
232  if (owner && container) container->release();
233  container = c;
234  owner = take_ownership;
235  }
236  iterator begin() { return container ? iterator(container->begin()) : iterator(NULL); }
237  iterator end() { return iterator(NULL); }
238  size_type size() const { return container ? container->size() : 0; }
239  bool empty() const { return size() == 0; }
240 };
241 
242 } // namespace util
243 
247 enum CHANNEL_PROFILE_TYPE {
253  CHANNEL_PROFILE_COMMUNICATION = 0,
259  CHANNEL_PROFILE_LIVE_BROADCASTING = 1,
264  CHANNEL_PROFILE_GAME = 2,
271  CHANNEL_PROFILE_CLOUD_GAMING = 3,
272 
278  CHANNEL_PROFILE_COMMUNICATION_1v1 = 4,
279 
285  CHANNEL_PROFILE_LIVE_BROADCASTING_2 = 5,
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,
397  WARN_ADM_IOS_CATEGORY_NOT_PLAYANDRECORD = 1029,
401  WARN_ADM_IOS_SAMPLERATE_CHANGE = 1030,
405  WARN_ADM_RECORD_AUDIO_LOWLEVEL = 1031,
409  WARN_ADM_PLAYOUT_AUDIO_LOWLEVEL = 1032,
417  WARN_ADM_WINDOWS_NO_DATA_READY_EVENT = 1040,
421  WARN_APM_HOWLING = 1051,
425  WARN_ADM_GLITCH_STATE = 1052,
429  WARN_ADM_IMPROPER_SETTINGS = 1053,
433  WARN_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
438  WARN_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
446  WARN_ADM_WIN_CORE_IMPROPER_CAPTURE_RELEASE = 1324,
447 };
448 
452 enum ERROR_CODE_TYPE {
456  ERR_OK = 0,
457  // 1~1000
461  ERR_FAILED = 1,
466  ERR_INVALID_ARGUMENT = 2,
473  ERR_NOT_READY = 3,
477  ERR_NOT_SUPPORTED = 4,
481  ERR_REFUSED = 5,
485  ERR_BUFFER_TOO_SMALL = 6,
489  ERR_NOT_INITIALIZED = 7,
493  ERR_INVALID_STATE = 8,
498  ERR_NO_PERMISSION = 9,
504  ERR_TIMEDOUT = 10,
509  ERR_CANCELED = 11,
515  ERR_TOO_OFTEN = 12,
521  ERR_BIND_SOCKET = 13,
526  ERR_NET_DOWN = 14,
532  ERR_NET_NOBUFS = 15,
538  ERR_JOIN_CHANNEL_REJECTED = 17,
545  ERR_LEAVE_CHANNEL_REJECTED = 18,
549  ERR_ALREADY_IN_USE = 19,
554  ERR_ABORTED = 20,
559  ERR_INIT_NET_ENGINE = 21,
564  ERR_RESOURCE_LIMITED = 22,
570  ERR_INVALID_APP_ID = 101,
575  ERR_INVALID_CHANNEL_NAME = 102,
588  ERR_TOKEN_EXPIRED = 109,
605  ERR_INVALID_TOKEN = 110,
610  ERR_CONNECTION_INTERRUPTED = 111, // only used in web sdk
615  ERR_CONNECTION_LOST = 112, // only used in web sdk
620  ERR_NOT_IN_CHANNEL = 113,
625  ERR_SIZE_TOO_LARGE = 114,
630  ERR_BITRATE_LIMIT = 115,
635  ERR_TOO_MANY_DATA_STREAMS = 116,
639  ERR_STREAM_MESSAGE_TIMEOUT = 117,
643  ERR_SET_CLIENT_ROLE_NOT_AUTHORIZED = 119,
648  ERR_DECRYPTION_FAILED = 120,
652  ERR_INVALID_USER_ID = 121,
656  ERR_CLIENT_IS_BANNED_BY_SERVER = 123,
660  ERR_WATERMARK_PARAM = 124,
664  ERR_WATERMARK_PATH = 125,
668  ERR_WATERMARK_PNG = 126,
672  ERR_WATERMARKR_INFO = 127,
676  ERR_WATERMARK_ARGB = 128,
680  ERR_WATERMARK_READ = 129,
686  ERR_ENCRYPTED_STREAM_NOT_ALLOWED_PUBLISH = 130,
687 
691  ERR_LICENSE_CREDENTIAL_INVALID = 131,
692 
693  // Licensing, keep the license error code same as the main version
694  ERR_CERT_RAW = 157,
695  ERR_CERT_JSON_PART = 158,
696  ERR_CERT_JSON_INVAL = 159,
697  ERR_CERT_JSON_NOMEM = 160,
698  ERR_CERT_CUSTOM = 161,
699  ERR_CERT_CREDENTIAL = 162,
700  ERR_CERT_SIGN = 163,
701  ERR_CERT_FAIL = 164,
702  ERR_CERT_BUF = 165,
703  ERR_CERT_NULL = 166,
704  ERR_CERT_DUEDATE = 167,
705  ERR_CERT_REQUEST = 168,
706 
707  // PcmSend Error num
708  ERR_PCMSEND_FORMAT =200, // unsupport pcm format
709  ERR_PCMSEND_BUFFEROVERFLOW = 201, // buffer overflow, the pcm send rate too quickly
710 
712  // signaling: 400~600
713  ERR_LOGOUT_OTHER = 400, //
714  ERR_LOGOUT_USER = 401, // logout by user
715  ERR_LOGOUT_NET = 402, // network failure
716  ERR_LOGOUT_KICKED = 403, // login in other device
717  ERR_LOGOUT_PACKET = 404, //
718  ERR_LOGOUT_TOKEN_EXPIRED = 405, // token expired
719  ERR_LOGOUT_OLDVERSION = 406, //
720  ERR_LOGOUT_TOKEN_WRONG = 407,
721  ERR_LOGOUT_ALREADY_LOGOUT = 408,
722  ERR_LOGIN_OTHER = 420,
723  ERR_LOGIN_NET = 421,
724  ERR_LOGIN_FAILED = 422,
725  ERR_LOGIN_CANCELED = 423,
726  ERR_LOGIN_TOKEN_EXPIRED = 424,
727  ERR_LOGIN_OLD_VERSION = 425,
728  ERR_LOGIN_TOKEN_WRONG = 426,
729  ERR_LOGIN_TOKEN_KICKED = 427,
730  ERR_LOGIN_ALREADY_LOGIN = 428,
731  ERR_JOIN_CHANNEL_OTHER = 440,
732  ERR_SEND_MESSAGE_OTHER = 440,
733  ERR_SEND_MESSAGE_TIMEOUT = 441,
734  ERR_QUERY_USERNUM_OTHER = 450,
735  ERR_QUERY_USERNUM_TIMEOUT = 451,
736  ERR_QUERY_USERNUM_BYUSER = 452,
737  ERR_LEAVE_CHANNEL_OTHER = 460,
738  ERR_LEAVE_CHANNEL_KICKED = 461,
739  ERR_LEAVE_CHANNEL_BYUSER = 462,
740  ERR_LEAVE_CHANNEL_LOGOUT = 463,
741  ERR_LEAVE_CHANNEL_DISCONNECTED = 464,
742  ERR_INVITE_OTHER = 470,
743  ERR_INVITE_REINVITE = 471,
744  ERR_INVITE_NET = 472,
745  ERR_INVITE_PEER_OFFLINE = 473,
746  ERR_INVITE_TIMEOUT = 474,
747  ERR_INVITE_CANT_RECV = 475,
749  // 1001~2000
753  ERR_LOAD_MEDIA_ENGINE = 1001,
757  ERR_START_CALL = 1002,
761  ERR_START_CAMERA = 1003,
765  ERR_START_VIDEO_RENDER = 1004,
771  ERR_ADM_GENERAL_ERROR = 1005,
775  ERR_ADM_JAVA_RESOURCE = 1006,
779  ERR_ADM_SAMPLE_RATE = 1007,
784  ERR_ADM_INIT_PLAYOUT = 1008,
788  ERR_ADM_START_PLAYOUT = 1009,
792  ERR_ADM_STOP_PLAYOUT = 1010,
797  ERR_ADM_INIT_RECORDING = 1011,
801  ERR_ADM_START_RECORDING = 1012,
805  ERR_ADM_STOP_RECORDING = 1013,
810  ERR_ADM_RUNTIME_PLAYOUT_ERROR = 1015,
814  ERR_ADM_RUNTIME_RECORDING_ERROR = 1017,
818  ERR_ADM_RECORD_AUDIO_FAILED = 1018,
823  ERR_ADM_INIT_LOOPBACK = 1022,
828  ERR_ADM_START_LOOPBACK = 1023,
833  ERR_ADM_NO_PERMISSION = 1027,
837  ERR_ADM_RECORD_AUDIO_IS_ACTIVE = 1033,
841  ERR_ADM_ANDROID_JNI_JAVA_RESOURCE = 1101,
847  ERR_ADM_ANDROID_JNI_NO_RECORD_FREQUENCY = 1108,
853  ERR_ADM_ANDROID_JNI_NO_PLAYBACK_FREQUENCY = 1109,
861  ERR_ADM_ANDROID_JNI_JAVA_START_RECORD = 1111,
869  ERR_ADM_ANDROID_JNI_JAVA_START_PLAYBACK = 1112,
874  ERR_ADM_ANDROID_JNI_JAVA_RECORD_ERROR = 1115,
876  ERR_ADM_ANDROID_OPENSL_CREATE_ENGINE = 1151,
878  ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_RECORDER = 1153,
880  ERR_ADM_ANDROID_OPENSL_START_RECORDER_THREAD = 1156,
882  ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_PLAYER = 1157,
884  ERR_ADM_ANDROID_OPENSL_START_PLAYER_THREAD = 1160,
891  ERR_ADM_IOS_INPUT_NOT_AVAILABLE = 1201,
895  ERR_ADM_IOS_ACTIVATE_SESSION_FAIL = 1206,
900  ERR_ADM_IOS_VPIO_INIT_FAIL = 1210,
905  ERR_ADM_IOS_VPIO_REINIT_FAIL = 1213,
910  ERR_ADM_IOS_VPIO_RESTART_FAIL = 1214,
911  ERR_ADM_IOS_SET_RENDER_CALLBACK_FAIL = 1219,
913  ERR_ADM_IOS_SESSION_SAMPLERATR_ZERO = 1221,
921  ERR_ADM_WIN_CORE_INIT = 1301,
928  ERR_ADM_WIN_CORE_INIT_RECORDING = 1303,
935  ERR_ADM_WIN_CORE_INIT_PLAYOUT = 1306,
941  ERR_ADM_WIN_CORE_INIT_PLAYOUT_NULL = 1307,
948  ERR_ADM_WIN_CORE_START_RECORDING = 1309,
955  ERR_ADM_WIN_CORE_CREATE_REC_THREAD = 1311,
964  ERR_ADM_WIN_CORE_CAPTURE_NOT_STARTUP = 1314,
971  ERR_ADM_WIN_CORE_CREATE_RENDER_THREAD = 1319,
980  ERR_ADM_WIN_CORE_RENDER_NOT_STARTUP = 1320,
986  ERR_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
992  ERR_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
1002  ERR_ADM_WIN_WAVE_INIT = 1351,
1011  ERR_ADM_WIN_WAVE_INIT_RECORDING = 1353,
1020  ERR_ADM_WIN_WAVE_INIT_MICROPHONE = 1354,
1029  ERR_ADM_WIN_WAVE_INIT_PLAYOUT = 1355,
1038  ERR_ADM_WIN_WAVE_INIT_SPEAKER = 1356,
1047  ERR_ADM_WIN_WAVE_START_RECORDING = 1357,
1056  ERR_ADM_WIN_WAVE_START_PLAYOUT = 1358,
1060  ERR_ADM_NO_RECORDING_DEVICE = 1359,
1064  ERR_ADM_NO_PLAYOUT_DEVICE = 1360,
1065 
1066  // VDM error code starts from 1500
1070  ERR_VDM_CAMERA_NOT_AUTHORIZED = 1501,
1071 
1072  // VDM error code starts from 1500
1076  ERR_VDM_WIN_DEVICE_IN_USE = 1502,
1077 
1078  // VCM error code starts from 1600
1082  ERR_VCM_UNKNOWN_ERROR = 1600,
1087  ERR_VCM_ENCODER_INIT_ERROR = 1601,
1091  ERR_VCM_ENCODER_ENCODE_ERROR = 1602,
1095  ERR_VCM_ENCODER_SET_ERROR = 1603,
1096 };
1097 
1098 typedef const char* user_id_t;
1099 typedef void* view_t;
1100 
1104 struct UserInfo {
1114  bool hasAudio;
1120  bool hasVideo;
1121 
1122  UserInfo() : hasAudio(false), hasVideo(false) {}
1123 };
1124 
1125 typedef util::AList<UserInfo> UserList;
1126 
1127 // Shared between Agora Service and Rtc Engine
1128 namespace rtc {
1129 
1133 enum USER_OFFLINE_REASON_TYPE {
1137  USER_OFFLINE_QUIT = 0,
1143  USER_OFFLINE_DROPPED = 1,
1147  USER_OFFLINE_BECOME_AUDIENCE = 2,
1148 };
1149 
1150 enum INTERFACE_ID_TYPE {
1151  AGORA_IID_AUDIO_DEVICE_MANAGER = 1,
1152  AGORA_IID_VIDEO_DEVICE_MANAGER = 2,
1153  AGORA_IID_PARAMETER_ENGINE = 3,
1154  AGORA_IID_MEDIA_ENGINE = 4,
1155  AGORA_IID_AUDIO_ENGINE = 5,
1156  AGORA_IID_VIDEO_ENGINE = 6,
1157  AGORA_IID_RTC_CONNECTION = 7,
1158  AGORA_IID_SIGNALING_ENGINE = 8,
1159  AGORA_IID_MEDIA_ENGINE_REGULATOR = 9,
1160 };
1161 
1165 enum QUALITY_TYPE {
1170  QUALITY_UNKNOWN = 0,
1174  QUALITY_EXCELLENT = 1,
1179  QUALITY_GOOD = 2,
1183  QUALITY_POOR = 3,
1187  QUALITY_BAD = 4,
1191  QUALITY_VBAD = 5,
1195  QUALITY_DOWN = 6,
1199  QUALITY_UNSUPPORTED = 7,
1203  QUALITY_DETECTING
1204 };
1205 
1209 enum FIT_MODE_TYPE {
1214  MODE_COVER = 1,
1215 
1221  MODE_CONTAIN = 2,
1222 };
1223 
1227 enum VIDEO_ORIENTATION {
1231  VIDEO_ORIENTATION_0 = 0,
1235  VIDEO_ORIENTATION_90 = 90,
1239  VIDEO_ORIENTATION_180 = 180,
1243  VIDEO_ORIENTATION_270 = 270
1244 };
1245 
1249 enum FRAME_RATE {
1253  FRAME_RATE_FPS_1 = 1,
1257  FRAME_RATE_FPS_7 = 7,
1261  FRAME_RATE_FPS_10 = 10,
1265  FRAME_RATE_FPS_15 = 15,
1269  FRAME_RATE_FPS_24 = 24,
1273  FRAME_RATE_FPS_30 = 30,
1277  FRAME_RATE_FPS_60 = 60,
1278 };
1279 
1280 enum FRAME_WIDTH {
1281  FRAME_WIDTH_640 = 640,
1282 };
1283 
1284 enum FRAME_HEIGHT {
1285  FRAME_HEIGHT_360 = 360,
1286 };
1287 
1288 
1292 enum VIDEO_FRAME_TYPE {
1294  VIDEO_FRAME_TYPE_BLANK_FRAME = 0,
1296  VIDEO_FRAME_TYPE_KEY_FRAME = 3,
1298  VIDEO_FRAME_TYPE_DELTA_FRAME = 4,
1300  VIDEO_FRAME_TYPE_B_FRAME = 5,
1302  VIDEO_FRAME_TYPE_DROPPABLE_FRAME = 6,
1304  VIDEO_FRAME_TYPE_UNKNOW
1305 };
1306 
1310 enum ORIENTATION_MODE {
1318  ORIENTATION_MODE_ADAPTIVE = 0,
1326  ORIENTATION_MODE_FIXED_LANDSCAPE = 1,
1334  ORIENTATION_MODE_FIXED_PORTRAIT = 2,
1335 };
1336 
1340 enum DEGRADATION_PREFERENCE {
1344  MAINTAIN_QUALITY = 0,
1348  MAINTAIN_FRAMERATE = 1,
1352  MAINTAIN_BALANCED = 2,
1356  MAINTAIN_RESOLUTION = 3,
1357 };
1358 
1366  int width;
1370  int height;
1371  VideoDimensions() : width(640), height(480) {}
1372  VideoDimensions(int w, int h) : width(w), height(h) {}
1373 };
1374 
1384 const int STANDARD_BITRATE = 0;
1385 
1393 const int COMPATIBLE_BITRATE = -1;
1394 
1398 const int DEFAULT_MIN_BITRATE = -1;
1399 
1403 const int DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE = -2;
1404 
1408 enum VIDEO_CODEC_TYPE {
1412  VIDEO_CODEC_VP8 = 1,
1416  VIDEO_CODEC_H264 = 2,
1420  VIDEO_CODEC_H265 = 3,
1424  VIDEO_CODEC_VP9 = 5,
1428  VIDEO_CODEC_GENERIC = 6,
1432  VIDEO_CODEC_GENERIC_H264 = 7,
1436  VIDEO_CODEC_GENERIC_JPEG = 20,
1437 };
1438 
1442 enum AUDIO_CODEC_TYPE {
1446  AUDIO_CODEC_OPUS = 1,
1447  // kIsac = 2,
1451  AUDIO_CODEC_PCMA = 3,
1455  AUDIO_CODEC_PCMU = 4,
1459  AUDIO_CODEC_G722 = 5,
1460  // kIlbc = 6,
1462  // AUDIO_CODEC_AAC = 7,
1466  AUDIO_CODEC_AACLC = 8,
1470  AUDIO_CODEC_HEAAC = 9,
1474  AUDIO_CODEC_JC1 = 10,
1475  AUDIO_CODEC_HEAAC2 = 11,
1476 };
1477 
1481 enum WATERMARK_FIT_MODE {
1486  FIT_MODE_COVER_POSITION,
1491  FIT_MODE_USE_IMAGE_RATIO
1492 };
1493 
1499  : speech(true),
1500  codec(AUDIO_CODEC_AACLC),
1501  sampleRateHz(0),
1502  samplesPerChannel(0),
1503  sendEvenIfEmpty(true),
1504  numberOfChannels(0) {}
1505 
1507  : speech(rhs.speech),
1508  codec(rhs.codec),
1518  bool speech;
1522  AUDIO_CODEC_TYPE codec;
1543 };
1549 
1551  : sampleCount(rhs.sampleCount),
1552  samplesOut(rhs.samplesOut),
1554  ntpTimeMs(rhs.ntpTimeMs) {}
1555 
1559  size_t sampleCount;
1560 
1561  // Output
1565  size_t samplesOut;
1569  int64_t elapsedTimeMs;
1573  int64_t ntpTimeMs;
1574 };
1578 enum H264PacketizeMode {
1582  NonInterleaved = 0, // Mode 1 - STAP-A, FU-A is allowed
1586  SingleNalUnit, // Mode 0 - only single NALU allowed
1587 };
1588 
1592 enum VIDEO_STREAM_TYPE {
1596  VIDEO_STREAM_HIGH = 0,
1600  VIDEO_STREAM_LOW = 1,
1601 };
1602 
1608  : codecType(VIDEO_CODEC_H264),
1609  width(0),
1610  height(0),
1611  framesPerSecond(0),
1612  frameType(VIDEO_FRAME_TYPE_BLANK_FRAME),
1613  rotation(VIDEO_ORIENTATION_0),
1614  trackId(0),
1615  renderTimeMs(0),
1616  internalSendTs(0),
1617  uid(0),
1618  streamType(VIDEO_STREAM_HIGH) {}
1619 
1621  : codecType(rhs.codecType),
1622  width(rhs.width),
1623  height(rhs.height),
1625  frameType(rhs.frameType),
1626  rotation(rhs.rotation),
1627  trackId(rhs.trackId),
1630  uid(rhs.uid),
1631  streamType(rhs.streamType) {}
1635  VIDEO_CODEC_TYPE codecType;
1639  int width;
1643  int height;
1654  VIDEO_FRAME_TYPE frameType;
1658  VIDEO_ORIENTATION rotation;
1662  int trackId; // This can be reserved for multiple video tracks, we need to create different ssrc
1663  // and additional payload for later implementation.
1667  int64_t renderTimeMs;
1671  uint64_t internalSendTs;
1675  uid_t uid;
1679  VIDEO_STREAM_TYPE streamType;
1680 };
1681 
1685 enum VIDEO_MIRROR_MODE_TYPE {
1689  VIDEO_MIRROR_MODE_AUTO = 0,
1693  VIDEO_MIRROR_MODE_ENABLED = 1,
1697  VIDEO_MIRROR_MODE_DISABLED = 2,
1698 };
1699 
1707  VIDEO_CODEC_TYPE codecType;
1770  int bitrate;
1771 
1791  ORIENTATION_MODE orientationMode;
1796  DEGRADATION_PREFERENCE degradationPreference;
1797 
1801  VIDEO_MIRROR_MODE_TYPE mirrorMode;
1802 
1803  VideoEncoderConfiguration(const VideoDimensions& d, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED)
1804  : codecType(VIDEO_CODEC_H264),
1805  dimensions(d),
1806  frameRate(f),
1807  bitrate(b),
1808  minBitrate(DEFAULT_MIN_BITRATE),
1809  orientationMode(m),
1810  degradationPreference(MAINTAIN_QUALITY),
1811  mirrorMode(mirror) {}
1812  VideoEncoderConfiguration(int width, int height, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED)
1813  : codecType(VIDEO_CODEC_H264),
1814  dimensions(width, height),
1815  frameRate(f),
1816  bitrate(b),
1817  minBitrate(DEFAULT_MIN_BITRATE),
1818  orientationMode(m),
1819  degradationPreference(MAINTAIN_QUALITY),
1820  mirrorMode(mirror) {}
1821  VideoEncoderConfiguration(const VideoEncoderConfiguration& config)
1822  : codecType(config.codecType),
1823  dimensions(config.dimensions),
1824  frameRate(config.frameRate),
1825  bitrate(config.bitrate),
1826  minBitrate(config.minBitrate),
1829  mirrorMode(config.mirrorMode) {}
1830  VideoEncoderConfiguration()
1831  : codecType(VIDEO_CODEC_H264),
1832  dimensions(FRAME_WIDTH_640, FRAME_HEIGHT_360),
1833  frameRate(FRAME_RATE_FPS_15),
1834  bitrate(STANDARD_BITRATE),
1835  minBitrate(DEFAULT_MIN_BITRATE),
1836  orientationMode(ORIENTATION_MODE_ADAPTIVE),
1837  degradationPreference(MAINTAIN_QUALITY),
1838  mirrorMode(VIDEO_MIRROR_MODE_DISABLED) {}
1839 };
1840 
1849  bool ordered;
1850 };
1851 
1863  int bitrate;
1868  SimulcastStreamConfig() : dimensions(160, 120), bitrate(65), framerate(5) {}
1869 };
1870 
1874 struct Rectangle {
1878  int x;
1882  int y;
1886  int width;
1890  int height;
1891 
1892  Rectangle() : x(0), y(0), width(0), height(0) {}
1893  Rectangle(int xx, int yy, int ww, int hh) : x(xx), y(yy), width(ww), height(hh) {}
1894 };
1895 
1901  float xRatio;
1905  float yRatio;
1909  float widthRatio;
1910 
1911  WatermarkRatio() : xRatio(0.0), yRatio(0.0), widthRatio(0.0) {}
1912  WatermarkRatio(float x, float y, float width) : xRatio(x), yRatio(y), widthRatio(width) {}
1913 };
1914 
1939  WATERMARK_FIT_MODE mode;
1940 
1942  : visibleInPreview(false)
1943  , positionInLandscapeMode(0, 0, 0, 0)
1944  , positionInPortraitMode(0, 0, 0, 0)
1945  , mode(FIT_MODE_COVER_POSITION)
1946  {}
1947 };
1948 
1952 struct RtcStats {
1956  unsigned int connectionId;
1960  unsigned int duration;
1964  unsigned int txBytes;
1968  unsigned int rxBytes;
1972  unsigned int txAudioBytes;
1976  unsigned int txVideoBytes;
1980  unsigned int rxAudioBytes;
1984  unsigned int rxVideoBytes;
1988  unsigned short txKBitRate;
1992  unsigned short rxKBitRate;
1996  unsigned short rxAudioKBitRate;
2000  unsigned short txAudioKBitRate;
2004  unsigned short rxVideoKBitRate;
2008  unsigned short txVideoKBitRate;
2012  unsigned short lastmileDelay;
2016  unsigned int userCount;
2020  double cpuAppUsage;
2095  RtcStats() :
2096  connectionId(0),
2097  duration(0),
2098  txBytes(0),
2099  rxBytes(0),
2100  txAudioBytes(0),
2101  txVideoBytes(0),
2102  rxAudioBytes(0),
2103  rxVideoBytes(0),
2104  txKBitRate(0),
2105  rxKBitRate(0),
2106  rxAudioKBitRate(0),
2107  txAudioKBitRate(0),
2108  rxVideoKBitRate(0),
2109  txVideoKBitRate(0),
2110  lastmileDelay(0),
2111  userCount(0),
2112  cpuAppUsage(0.0),
2113  cpuTotalUsage(0.0),
2114  connectTimeMs(0),
2124  txPacketLossRate(0),
2125  rxPacketLossRate(0) {}
2126 };
2127 
2131 enum VIDEO_SOURCE_TYPE {
2134  VIDEO_SOURCE_CAMERA_PRIMARY,
2135  VIDEO_SOURCE_CAMERA = VIDEO_SOURCE_CAMERA_PRIMARY,
2138  VIDEO_SOURCE_CAMERA_SECONDARY,
2141  VIDEO_SOURCE_SCREEN_PRIMARY,
2142  VIDEO_SOURCE_SCREEN = VIDEO_SOURCE_SCREEN_PRIMARY,
2145  VIDEO_SOURCE_SCREEN_SECONDARY,
2148  VIDEO_SOURCE_CUSTOM,
2151  VIDEO_SOURCE_MEDIA_PLAYER,
2154  VIDEO_SOURCE_RTC_IMAGE_PNG,
2157  VIDEO_SOURCE_RTC_IMAGE_JPEG,
2160  VIDEO_SOURCE_RTC_IMAGE_GIF,
2163  VIDEO_SOURCE_REMOTE,
2166  VIDEO_SOURCE_TRANSCODED,
2167 
2168  VIDEO_SOURCE_UNKNOWN = 100
2169 };
2170 
2174 enum CLIENT_ROLE_TYPE {
2178  CLIENT_ROLE_BROADCASTER = 1,
2182  CLIENT_ROLE_AUDIENCE = 2,
2183 };
2184 
2190 {
2194  uid_t uid;
2198  int quality;
2236  RemoteAudioStats() :
2237  uid(0),
2238  quality(0),
2240  jitterBufferDelay(0),
2241  audioLossRate(0),
2242  numChannels(0),
2243  receivedSampleRate(0),
2244  receivedBitrate(0),
2245  totalFrozenTime(0),
2246  frozenRate(0) {}
2247 };
2248 
2252 enum AUDIO_PROFILE_TYPE {
2260  AUDIO_PROFILE_DEFAULT = 0,
2264  AUDIO_PROFILE_SPEECH_STANDARD = 1,
2268  AUDIO_PROFILE_MUSIC_STANDARD = 2,
2273  AUDIO_PROFILE_MUSIC_STANDARD_STEREO = 3,
2277  AUDIO_PROFILE_MUSIC_HIGH_QUALITY = 4,
2281  AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO = 5,
2285  AUDIO_PROFILE_IOT = 6,
2286  AUDIO_PROFILE_NUM = 7
2287 };
2288 
2292 enum AUDIO_SCENARIO_TYPE {
2296  AUDIO_SCENARIO_DEFAULT = 0,
2300  AUDIO_SCENARIO_CHATROOM_ENTERTAINMENT = 1,
2304  AUDIO_SCENARIO_EDUCATION = 2,
2310  AUDIO_SCENARIO_GAME_STREAMING = 3,
2315  AUDIO_SCENARIO_SHOWROOM = 4,
2319  AUDIO_SCENARIO_CHATROOM_GAMING = 5,
2323  AUDIO_SCENARIO_HIGH_DEFINITION = 6,
2327  AUDIO_SCENARIO_NUM = 7,
2328 };
2329 
2333 struct VideoFormat {
2334  enum : size_t {
2340  kMaxFps = 60,
2341  };
2342 
2346  int width; // Number of pixels.
2350  int height; // Number of pixels.
2354  int fps;
2355  VideoFormat() : width(FRAME_WIDTH_640), height(FRAME_HEIGHT_360), fps(FRAME_RATE_FPS_15) {}
2356  VideoFormat(int w, int h, int f) : width(w), height(h), fps(f) {}
2357 };
2358 
2362 enum VIDEO_CONTENT_HINT {
2366  CONTENT_HINT_NONE,
2373  CONTENT_HINT_MOTION,
2379  CONTENT_HINT_DETAILS
2380 };
2381 
2385 enum LOCAL_AUDIO_STREAM_STATE {
2389  LOCAL_AUDIO_STREAM_STATE_STOPPED = 0,
2393  LOCAL_AUDIO_STREAM_STATE_RECORDING = 1,
2397  LOCAL_AUDIO_STREAM_STATE_ENCODING = 2,
2401  LOCAL_AUDIO_STREAM_STATE_FAILED = 3
2402 };
2403 
2407 enum LOCAL_AUDIO_STREAM_ERROR {
2411  LOCAL_AUDIO_STREAM_ERROR_OK = 0,
2415  LOCAL_AUDIO_STREAM_ERROR_FAILURE = 1,
2419  LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
2423  LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY = 3,
2428  LOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURE = 4,
2432  LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE = 5
2433 };
2434 
2437 enum LOCAL_VIDEO_STREAM_STATE {
2441  LOCAL_VIDEO_STREAM_STATE_STOPPED = 0,
2445  LOCAL_VIDEO_STREAM_STATE_CAPTURING = 1,
2449  LOCAL_VIDEO_STREAM_STATE_ENCODING = 2,
2453  LOCAL_VIDEO_STREAM_STATE_FAILED = 3
2454 };
2455 
2459 enum LOCAL_VIDEO_STREAM_ERROR {
2461  LOCAL_VIDEO_STREAM_ERROR_OK = 0,
2463  LOCAL_VIDEO_STREAM_ERROR_FAILURE = 1,
2465  LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
2467  LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY = 3,
2469  LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE = 4,
2471  LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE = 5
2472 };
2473 
2477 enum REMOTE_AUDIO_STATE
2478 {
2485  REMOTE_AUDIO_STATE_STOPPED = 0, // Default state, audio is started or remote user disabled/muted audio stream
2489  REMOTE_AUDIO_STATE_STARTING = 1, // The first audio frame packet has been received
2496  REMOTE_AUDIO_STATE_DECODING = 2, // The first remote audio frame has been decoded or fronzen state ends
2501  REMOTE_AUDIO_STATE_FROZEN = 3, // Remote audio is frozen, probably due to network issue
2506  REMOTE_AUDIO_STATE_FAILED = 4, // Remote audio play failed
2507 };
2508 
2512 enum REMOTE_AUDIO_STATE_REASON
2513 {
2517  REMOTE_AUDIO_REASON_INTERNAL = 0,
2521  REMOTE_AUDIO_REASON_NETWORK_CONGESTION = 1,
2525  REMOTE_AUDIO_REASON_NETWORK_RECOVERY = 2,
2530  REMOTE_AUDIO_REASON_LOCAL_MUTED = 3,
2535  REMOTE_AUDIO_REASON_LOCAL_UNMUTED = 4,
2540  REMOTE_AUDIO_REASON_REMOTE_MUTED = 5,
2545  REMOTE_AUDIO_REASON_REMOTE_UNMUTED = 6,
2549  REMOTE_AUDIO_REASON_REMOTE_OFFLINE = 7,
2550 };
2551 
2553 enum REMOTE_VIDEO_STATE {
2559  REMOTE_VIDEO_STATE_STOPPED = 0,
2562  REMOTE_VIDEO_STATE_STARTING = 1,
2569  REMOTE_VIDEO_STATE_DECODING = 2,
2574  REMOTE_VIDEO_STATE_FROZEN = 3,
2578  REMOTE_VIDEO_STATE_FAILED = 4,
2579 };
2581 enum REMOTE_VIDEO_STATE_REASON {
2585  REMOTE_VIDEO_STATE_REASON_INTERNAL = 0,
2586 
2590  REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION = 1,
2591 
2595  REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY = 2,
2596 
2600  REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED = 3,
2601 
2605  REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED = 4,
2606 
2610  REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED = 5,
2611 
2615  REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED = 6,
2616 
2620  REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE = 7,
2621 
2625  REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK = 8,
2626 
2630  REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY = 9
2631 };
2632 
2638  VideoTrackInfo()
2639  : isLocal(false), ownerUid(0), trackId(0), connectionId(0)
2640  , streamType(VIDEO_STREAM_HIGH), codecType(VIDEO_CODEC_H264)
2641  , encodedFrameOnly(false), sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
2647  bool isLocal;
2651  uid_t ownerUid;
2652 
2656  track_id_t trackId;
2660  conn_id_t connectionId;
2664  VIDEO_STREAM_TYPE streamType;
2668  VIDEO_CODEC_TYPE codecType;
2678  VIDEO_SOURCE_TYPE sourceType;
2679 };
2680 
2684 enum REMOTE_VIDEO_DOWNSCALE_LEVEL {
2688  REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE,
2692  REMOTE_VIDEO_DOWNSCALE_LEVEL_1,
2696  REMOTE_VIDEO_DOWNSCALE_LEVEL_2,
2700  REMOTE_VIDEO_DOWNSCALE_LEVEL_3,
2704  REMOTE_VIDEO_DOWNSCALE_LEVEL_4,
2705 };
2706 
2711  uid_t uid;
2715  VIDEO_STREAM_TYPE stream_type;
2719  REMOTE_VIDEO_DOWNSCALE_LEVEL current_downscale_level;
2724 };
2725 
2733  uid_t uid;
2734  user_id_t userId;
2738  unsigned int volume; // [0,255]
2739 
2740  AudioVolumeInfo() : uid(0), userId(0), volume(0) {}
2741 };
2742 
2747  public:
2748  virtual ~IPacketObserver() {}
2752  struct Packet {
2756  const unsigned char* buffer;
2760  unsigned int size;
2761 
2762  Packet() : buffer(NULL), size(0) {}
2763  };
2771  virtual bool onSendAudioPacket(Packet& packet) = 0;
2779  virtual bool onSendVideoPacket(Packet& packet) = 0;
2787  virtual bool onReceiveAudioPacket(Packet& packet) = 0;
2795  virtual bool onReceiveVideoPacket(Packet& packet) = 0;
2796 };
2801  public:
2811  virtual bool OnEncodedVideoImageReceived(const uint8_t* imageBuffer, size_t length,
2812  const EncodedVideoFrameInfo& videoEncodedFrameInfo) = 0;
2813 
2814  virtual ~IVideoEncodedImageReceiver() {}
2815 };
2816 
2820 enum AUDIO_SAMPLE_RATE_TYPE {
2824  AUDIO_SAMPLE_RATE_32000 = 32000,
2828  AUDIO_SAMPLE_RATE_44100 = 44100,
2832  AUDIO_SAMPLE_RATE_48000 = 48000,
2833 };
2837 enum VIDEO_CODEC_PROFILE_TYPE {
2841  VIDEO_CODEC_PROFILE_BASELINE = 66,
2845  VIDEO_CODEC_PROFILE_MAIN = 77,
2849  VIDEO_CODEC_PROFILE_HIGH = 100,
2850 };
2851 
2855 enum AUDIO_CODEC_PROFILE_TYPE {
2859  AUDIO_CODEC_PROFILE_LC_AAC = 0,
2863  AUDIO_CODEC_PROFILE_HE_AAC = 1,
2864 };
2865 
2871 {
2888 };
2889 
2890 
2894 enum RTMP_STREAM_PUBLISH_STATE {
2901  RTMP_STREAM_PUBLISH_STATE_IDLE = 0,
2907  RTMP_STREAM_PUBLISH_STATE_CONNECTING = 1,
2912  RTMP_STREAM_PUBLISH_STATE_RUNNING = 2,
2922  RTMP_STREAM_PUBLISH_STATE_RECOVERING = 3,
2927  RTMP_STREAM_PUBLISH_STATE_FAILURE = 4,
2928 };
2929 
2933 enum RTMP_STREAM_PUBLISH_ERROR {
2937  RTMP_STREAM_PUBLISH_ERROR_FAILED = -1,
2941  RTMP_STREAM_PUBLISH_ERROR_OK = 0,
2947  RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT = 1,
2951  RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED = 2,
2956  RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT = 3,
2961  RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR = 4,
2965  RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR = 5,
2969  RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN = 6,
2973  RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT = 7,
2977  RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED = 8,
2981  RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND = 9,
2985  RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED = 10,
2990  RTMP_STREAM_PUBLISH_ERROR_CDN_ERROR = 11,
2994  RTMP_STREAM_PUBLISH_ERROR_ALREADY_IN_USE = 12,
2995 };
2996 
2999 typedef struct RtcImage {
3003  const char* url;
3008  int x;
3013  int y;
3017  int width;
3021  int height;
3025  int zOrder;
3026 
3027  RtcImage() : url(NULL), x(0), y(0), width(0), height(0), zOrder(0) {}
3028 } RtcImage;
3029 
3033 enum CONNECTION_STATE_TYPE
3034 {
3038  CONNECTION_STATE_DISCONNECTED = 1,
3042  CONNECTION_STATE_CONNECTING = 2,
3047  CONNECTION_STATE_CONNECTED = 3,
3052  CONNECTION_STATE_RECONNECTING = 4,
3056  CONNECTION_STATE_FAILED = 5,
3057 };
3058 
3066  uid_t uid;
3070  int x;
3074  int y;
3078  int width;
3082  int height;
3088  int zOrder;
3092  double alpha;
3109  TranscodingUser()
3110  : uid(0),
3111  x(0),
3112  y(0),
3113  width(0),
3114  height(0),
3115  zOrder(0),
3116  alpha(1.0),
3117  audioChannel(0) {}
3118 };
3119 
3130  int width;
3137  int height;
3162  VIDEO_CODEC_PROFILE_TYPE videoCodecProfile;
3167  unsigned int backgroundColor;
3171  unsigned int userCount;
3184  const char* metadata;
3197  unsigned int watermarkCount;
3209  unsigned int backgroundImageCount;
3213  AUDIO_SAMPLE_RATE_TYPE audioSampleRate;
3232  AUDIO_CODEC_PROFILE_TYPE audioCodecProfile;
3233 
3234  LiveTranscoding()
3235  : width(360),
3236  height(640),
3237  videoBitrate(400),
3238  videoFramerate(15),
3239  lowLatency(false),
3240  videoGop(30),
3241  videoCodecProfile(VIDEO_CODEC_PROFILE_HIGH),
3242  backgroundColor(0x000000),
3243  userCount(0),
3244  transcodingUsers(NULL),
3245  transcodingExtraInfo(NULL),
3246  metadata(NULL),
3247  watermark(NULL),
3248  watermarkCount(0),
3249  backgroundImage(NULL),
3251  audioSampleRate(AUDIO_SAMPLE_RATE_48000),
3252  audioBitrate(48),
3253  audioChannels(1),
3254  audioCodecProfile(AUDIO_CODEC_PROFILE_LC_AAC) {}
3255 };
3256 
3264  VIDEO_SOURCE_TYPE sourceType;
3273  conn_id_t connectionId;
3277  const char* imageUrl;
3281  int x;
3285  int y;
3289  int width;
3293  int height;
3299  int zOrder;
3303  double alpha;
3307  bool mirror;
3308 
3310  : sourceType(VIDEO_SOURCE_CAMERA_PRIMARY),
3311  remoteUserUid(0),
3312  connectionId(DEFAULT_CONNECTION_ID),
3313  imageUrl(NULL),
3314  x(0),
3315  y(0),
3316  width(0),
3317  height(0),
3318  zOrder(0),
3319  alpha(1.0),
3320  mirror(false) {}
3321 };
3322 
3323 
3331  unsigned int streamCount;
3340 
3342  : streamCount(0),
3343  VideoInputStreams(NULL),
3345 };
3346 
3375 };
3376 
3380 enum LASTMILE_PROBE_RESULT_STATE {
3384  LASTMILE_PROBE_RESULT_COMPLETE = 1,
3389  LASTMILE_PROBE_RESULT_INCOMPLETE_NO_BWE = 2,
3394  LASTMILE_PROBE_RESULT_UNAVAILABLE = 3
3395 };
3396 
3405  unsigned int packetLossRate;
3409  unsigned int jitter;
3413  unsigned int availableBandwidth;
3414 
3416  jitter(0),
3417  availableBandwidth(0) {}
3418 };
3419 
3428  LASTMILE_PROBE_RESULT_STATE state;
3440  unsigned int rtt;
3441 
3442  LastmileProbeResult() : state(LASTMILE_PROBE_RESULT_UNAVAILABLE),
3443  rtt(0) {}
3444 };
3445 
3449 enum CONNECTION_CHANGED_REASON_TYPE
3450 {
3454  CONNECTION_CHANGED_CONNECTING = 0,
3458  CONNECTION_CHANGED_JOIN_SUCCESS = 1,
3462  CONNECTION_CHANGED_INTERRUPTED = 2,
3466  CONNECTION_CHANGED_BANNED_BY_SERVER = 3,
3470  CONNECTION_CHANGED_JOIN_FAILED = 4,
3474  CONNECTION_CHANGED_LEAVE_CHANNEL = 5,
3478  CONNECTION_CHANGED_INVALID_APP_ID = 6,
3482  CONNECTION_CHANGED_INVALID_CHANNEL_NAME = 7,
3486  CONNECTION_CHANGED_INVALID_TOKEN = 8,
3490  CONNECTION_CHANGED_TOKEN_EXPIRED = 9,
3494  CONNECTION_CHANGED_REJECTED_BY_SERVER = 10,
3498  CONNECTION_CHANGED_SETTING_PROXY_SERVER = 11,
3502  CONNECTION_CHANGED_RENEW_TOKEN = 12,
3507  CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED = 13,
3511  CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT = 14,
3515  CONNECTION_CHANGED_REJOIN_SUCCESS = 15,
3519  CONNECTION_CHANGED_LOST = 16,
3523  CONNECTION_CHANGED_ECHO_TEST = 17,
3527  CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED_BY_USER = 18,
3528 };
3529 
3533 enum NETWORK_TYPE {
3537  NETWORK_TYPE_UNKNOWN = -1,
3541  NETWORK_TYPE_DISCONNECTED = 0,
3545  NETWORK_TYPE_LAN = 1,
3549  NETWORK_TYPE_WIFI = 2,
3553  NETWORK_TYPE_MOBILE_2G = 3,
3557  NETWORK_TYPE_MOBILE_3G = 4,
3561  NETWORK_TYPE_MOBILE_4G = 5,
3562 };
3563 
3567 struct VideoCanvas {
3571  view_t view;
3575  media::base::RENDER_MODE_TYPE renderMode;
3579  VIDEO_MIRROR_MODE_TYPE mirrorMode;
3583  uid_t uid;
3584  bool isScreenView;
3585 
3586  void* priv; // private data (underlying video engine denotes it)
3587 
3588  size_t priv_size;
3589 
3590  VIDEO_SOURCE_TYPE sourceType;
3591 
3592  VideoCanvas() : view(NULL), renderMode(media::base::RENDER_MODE_HIDDEN), mirrorMode(VIDEO_MIRROR_MODE_AUTO),
3593  uid(0), isScreenView(false), priv(NULL), priv_size(0), sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3594  VideoCanvas(view_t v, media::base::RENDER_MODE_TYPE m, VIDEO_MIRROR_MODE_TYPE mt, uid_t u)
3595  : view(v), renderMode(m), mirrorMode(mt), uid(u), isScreenView(false), priv(NULL), priv_size(0),
3596  sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3597  VideoCanvas(view_t v, media::base::RENDER_MODE_TYPE m, VIDEO_MIRROR_MODE_TYPE mt, user_id_t)
3598  : view(v), renderMode(m), mirrorMode(mt), uid(0), isScreenView(false), priv(NULL), priv_size(0),
3599  sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3600 };
3601 
3619 enum AUDIO_REVERB_PRESET {
3623  AUDIO_REVERB_OFF = 0, // Turn off audio reverb
3627  AUDIO_REVERB_FX_KTV = 0x02010100,
3631  AUDIO_REVERB_FX_VOCAL_CONCERT = 0x02010200,
3635  AUDIO_REVERB_FX_UNCLE = 0x02020100,
3639  AUDIO_REVERB_FX_SISTER = 0x02020400,
3643  AUDIO_REVERB_FX_STUDIO = 0x02010300,
3647  AUDIO_REVERB_FX_POPULAR = 0x02030200,
3651  AUDIO_REVERB_FX_RNB = 0x02030100,
3655  AUDIO_REVERB_FX_PHONOGRAPH = 0x02010400
3656 };
3657 
3676  int bitrate;
3688 
3689  ScreenCaptureParameters() : dimensions(1920, 1080), frameRate(5), bitrate(4098), captureMouseCursor(true), windowFocus(false) {}
3690  ScreenCaptureParameters(const VideoDimensions& d, int f, int b)
3691  : dimensions(d), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false) {}
3692  ScreenCaptureParameters(int width, int height, int f, int b)
3693  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false) {}
3694  ScreenCaptureParameters(int width, int height, int f, int b, bool cur, bool fcs)
3695  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(cur), windowFocus(fcs) {}
3696 
3697 };
3698 
3702 enum AUDIO_RECORDING_QUALITY_TYPE {
3706  AUDIO_RECORDING_QUALITY_LOW = 0,
3710  AUDIO_RECORDING_QUALITY_MEDIUM = 1,
3714  AUDIO_RECORDING_QUALITY_HIGH = 2,
3715 };
3716 
3720 enum AUDIO_FILE_RECORDING_TYPE {
3724  AUDIO_FILE_RECORDING_MIC = 1,
3728  AUDIO_FILE_RECORDING_PLAYBACK = 2,
3732  AUDIO_FILE_RECORDING_MIXED = 3,
3733 };
3734 
3743  const char* filePath;
3749  bool encode;
3758  AUDIO_FILE_RECORDING_TYPE fileRecordingType;
3762  AUDIO_RECORDING_QUALITY_TYPE quality;
3763 
3765  : filePath(NULL),
3766  encode(false),
3767  sampleRate(32000),
3768  fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
3769  quality(AUDIO_RECORDING_QUALITY_LOW) {}
3770 
3771  AudioFileRecordingConfig(const char* file_path, int sample_rate, AUDIO_RECORDING_QUALITY_TYPE quality_type)
3772  : filePath(file_path),
3773  encode(false),
3774  sampleRate(sample_rate),
3775  fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
3776  quality(quality_type) {}
3777 
3778  AudioFileRecordingConfig(const char* file_path, bool enc, int sample_rate, AUDIO_FILE_RECORDING_TYPE type, AUDIO_RECORDING_QUALITY_TYPE quality_type)
3779  : filePath(file_path),
3780  encode(enc),
3781  sampleRate(sample_rate),
3782  fileRecordingType(type),
3783  quality(quality_type) {}
3784 
3785  AudioFileRecordingConfig(const AudioFileRecordingConfig &rhs)
3786  : filePath(rhs.filePath),
3787  encode(rhs.encode),
3788  sampleRate(rhs.sampleRate),
3790  quality(rhs.quality) {}
3791 };
3792 
3796 enum VOICE_CHANGER_PRESET {
3800  VOICE_CHANGER_OFF = 0, //Turn off the voice changer
3804  VOICE_CHANGER_OLDMAN = 0x02020200,
3808  VOICE_CHANGER_BABYBOY = 0x02020300,
3812  VOICE_CHANGER_BABYGIRL = 0x02020500,
3817  VOICE_CHANGER_ZHUBAJIE = 0x02020600,
3821  VOICE_CHANGER_ETHEREAL = 0x02010700,
3825  VOICE_CHANGER_HULK = 0x02020700,
3829  VOICE_BEAUTY_VIGOROUS = 0x01030100,
3833  VOICE_BEAUTY_DEEP = 0x01030200,
3837  VOICE_BEAUTY_MELLOW = 0x01030300,
3841  VOICE_BEAUTY_FALSETTO = 0x01030400,
3845  VOICE_BEAUTY_FULL = 0x01030500,
3849  VOICE_BEAUTY_CLEAR = 0x01030600,
3853  VOICE_BEAUTY_RESOUNDING = 0x01030700,
3857  VOICE_BEAUTY_RINGING = 0x01030800,
3861  VOICE_BEAUTY_SPACIAL = 0x02010600,
3866  GENERAL_BEAUTY_VOICE_MALE = 0x01010100,
3871  GENERAL_BEAUTY_VOICE_FEMALE_FRESH = 0x01010200,
3876  GENERAL_BEAUTY_VOICE_FEMALE_VITALITY = 0x01010300
3877 };
3880 enum AREA_CODE {
3884  AREA_CODE_CN = 0x00000001,
3888  AREA_CODE_NA = 0x00000002,
3892  AREA_CODE_EU = 0x00000004,
3896  AREA_CODE_AS = 0x00000008,
3900  AREA_CODE_JP = 0x00000010,
3904  AREA_CODE_IN = 0x00000020,
3908  AREA_CODE_GLOB = (0xFFFFFFFF)
3909 };
3910 
3911 enum AREA_CODE_EX {
3915  AREA_CODE_OC = 0x00000040,
3919  AREA_CODE_SA = 0x00000080,
3923  AREA_CODE_AF = 0x00000100,
3927  AREA_CODE_OVS = 0xFFFFFFFE
3928 };
3929 
3930 enum CHANNEL_MEDIA_RELAY_ERROR {
3933  RELAY_OK = 0,
3936  RELAY_ERROR_SERVER_ERROR_RESPONSE = 1,
3941  RELAY_ERROR_SERVER_NO_RESPONSE = 2,
3945  RELAY_ERROR_NO_RESOURCE_AVAILABLE = 3,
3948  RELAY_ERROR_FAILED_JOIN_SRC = 4,
3951  RELAY_ERROR_FAILED_JOIN_DEST = 5,
3954  RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC = 6,
3957  RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST = 7,
3962  RELAY_ERROR_SERVER_CONNECTION_LOST = 8,
3965  RELAY_ERROR_INTERNAL_ERROR = 9,
3968  RELAY_ERROR_SRC_TOKEN_EXPIRED = 10,
3971  RELAY_ERROR_DEST_TOKEN_EXPIRED = 11,
3972 };
3973 
3974 //callback event
3975 enum CHANNEL_MEDIA_RELAY_EVENT {
3979  RELAY_EVENT_NETWORK_DISCONNECTED = 0,
3982  RELAY_EVENT_NETWORK_CONNECTED = 1,
3985  RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL = 2,
3988  RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL = 3,
3991  RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL = 4,
3994  RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC = 5,
3997  RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC = 6,
4000  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL = 7,
4003  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED = 8,
4007  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE = 9,
4010  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL = 10,
4013  RELAY_EVENT_VIDEO_PROFILE_UPDATE = 11,
4014 };
4015 
4016 enum CHANNEL_MEDIA_RELAY_STATE {
4019  RELAY_STATE_IDLE = 0,
4022  RELAY_STATE_CONNECTING = 1,
4026  RELAY_STATE_RUNNING = 2,
4029  RELAY_STATE_FAILURE = 3,
4030 };
4031 
4038  const char* channelName;
4042  const char* token;
4045  uid_t uid;
4046 };
4047 
4076 
4078  : srcInfo(NULL)
4079  , destInfos(NULL)
4080  , destCount(0)
4081  {}
4082 };
4083 
4092 
4094 
4095  bool operator==(const UplinkNetworkInfo& rhs) const {
4097  }
4098 };
4099 
4108 
4110 
4111  bool operator==(const DownlinkNetworkInfo& rhs) const {
4113  }
4114 };
4115 
4118 enum ENCRYPTION_MODE {
4121  AES_128_XTS = 1,
4124  AES_128_ECB = 2,
4127  AES_256_XTS = 3,
4130  SM4_128_ECB = 4,
4133  MODE_END,
4134 };
4135 
4141  ENCRYPTION_MODE encryptionMode;
4147  const char* encryptionKey;
4148 
4149  EncryptionConfig() : encryptionMode(AES_128_XTS),
4150  encryptionKey(NULL) {}
4151 
4153  const char* getEncryptionString() const {
4154  switch(encryptionMode) {
4155  case AES_128_XTS:
4156  return "aes-128-xts";
4157  case AES_128_ECB:
4158  return "aes-128-ecb";
4159  case AES_256_XTS:
4160  return "aes-256-xts";
4161  case SM4_128_ECB:
4162  return "sm4-128-ecb";
4163  default:
4164  return "aes-128-xts";
4165  }
4166  return "aes-128-xts";
4167  }
4169 };
4170 
4173 enum ENCRYPTION_ERROR_TYPE {
4174  ENCRYPTION_ERROR_INTERNAL_FAILURE = 0,
4175  ENCRYPTION_ERROR_DECRYPTION_FAILURE = 1,
4176  ENCRYPTION_ERROR_ENCRYPTION_FAILURE = 2,
4177 };
4178 
4181 enum PERMISSION_TYPE {
4182  RECORD_AUDIO = 0,
4183  CAMERA = 1,
4184 };
4185 
4188 enum MAX_USER_ACCOUNT_LENGTH_TYPE
4189 {
4192  MAX_USER_ACCOUNT_LENGTH = 256
4193 };
4194 
4198 enum STREAM_SUBSCRIBE_STATE {
4199  SUB_STATE_IDLE = 0,
4200  SUB_STATE_NO_SUBSCRIBED = 1,
4201  SUB_STATE_SUBSCRIBING = 2,
4202  SUB_STATE_SUBSCRIBED = 3
4203 };
4204 
4208 enum STREAM_PUBLISH_STATE {
4209  PUB_STATE_IDLE = 0,
4210  PUB_STATE_NO_PUBLISHED = 1,
4211  PUB_STATE_PUBLISHING = 2,
4212  PUB_STATE_PUBLISHED = 3
4213 };
4214 
4218 struct UserInfo {
4222  uid_t uid;
4226  char userAccount[MAX_USER_ACCOUNT_LENGTH];
4227  UserInfo()
4228  : uid(0) {
4229  userAccount[0] = '\0';
4230  }
4231 };
4232 
4236 enum EAR_MONITORING_FILTER_TYPE {
4240  EAR_MONITORING_FILTER_NONE = (1<<0),
4244  EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS = (1<<1),
4248  EAR_MONITORING_FILTER_NOISE_SUPPRESSION = (1<<2)
4249 };
4250 
4251 } // namespace rtc
4252 
4253 namespace base {
4254 
4256  public:
4257  virtual int queryInterface(rtc::INTERFACE_ID_TYPE iid, void** inter) = 0;
4258  virtual ~IEngineBase() {}
4259 };
4260 
4261 class AParameter : public agora::util::AutoPtr<IAgoraParameter> {
4262  public:
4263  AParameter(IEngineBase& engine) { initialize(&engine); }
4264  AParameter(IEngineBase* engine) { initialize(engine); }
4266 
4267  private:
4268  bool initialize(IEngineBase* engine) {
4269  IAgoraParameter* p = NULL;
4270  if (engine && !engine->queryInterface(rtc::AGORA_IID_PARAMETER_ENGINE, (void**)&p)) reset(p);
4271  return p != NULL;
4272  }
4273 };
4274 
4276  public:
4277  virtual ~LicenseCallback() {}
4278  virtual void onCertificateRequired() = 0;
4279  virtual void onLicenseRequest() = 0;
4280  virtual void onLicenseValidated() = 0;
4281  virtual void onLicenseError(int result) = 0;
4282 };
4283 
4284 } // namespace base
4285 
4286 } // namespace agora
4287 
4293 AGORA_API const char* AGORA_CALL getAgoraSdkVersion(int* build);
4294 
4300 AGORA_API const char* AGORA_CALL getAgoraSdkErrorDescription(int err);
4301 
4302 AGORA_API int AGORA_CALL setAgoraSdkExternalSymbolLoader(void* (*func)(const char* symname));
4303 
4311 AGORA_API int AGORA_CALL createAgoraCredential(agora::util::AString &credential);
4312 
4326 AGORA_API int AGORA_CALL getAgoraCertificateVerifyResult(const char *credential_buf, int credential_len,
4327  const char *certificate_buf, int certificate_len);
4328 
4337 AGORA_API void setAgoraLicenseCallback(agora::base::LicenseCallback *callback);
4338 
4347 AGORA_API agora::base::LicenseCallback* getAgoraLicenseCallback();
agora::rtc::LiveTranscoding::transcodingUsers
TranscodingUser * transcodingUsers
Definition: AgoraBase.h:3175
agora::rtc::IPacketObserver::onReceiveVideoPacket
virtual bool onReceiveVideoPacket(Packet &packet)=0
agora::rtc::RtcStats::connectionId
unsigned int connectionId
Definition: AgoraBase.h:1956
agora::rtc::AudioFileRecordingConfig::quality
AUDIO_RECORDING_QUALITY_TYPE quality
Definition: AgoraBase.h:3762
agora::rtc::RtcImage::width
int width
Definition: AgoraBase.h:3017
agora::rtc::TranscodingVideoStream::zOrder
int zOrder
Definition: AgoraBase.h:3299
agora::rtc::RtcStats::firstAudioPacketDuration
int firstAudioPacketDuration
Definition: AgoraBase.h:2046
agora::rtc::UserInfo
Definition: AgoraBase.h:4218
agora::rtc::TranscodingVideoStream::alpha
double alpha
Definition: AgoraBase.h:3303
agora::rtc::VideoEncoderConfiguration::degradationPreference
DEGRADATION_PREFERENCE degradationPreference
Definition: AgoraBase.h:1796
agora::rtc::LastmileProbeResult
Definition: AgoraBase.h:3424
agora::rtc::ScreenCaptureParameters
Definition: AgoraBase.h:3661
agora::rtc::WatermarkRatio
Definition: AgoraBase.h:1897
agora::rtc::AudioVolumeInfo
Definition: AgoraBase.h:2729
agora::rtc::LastmileProbeResult::uplinkReport
LastmileProbeOneWayResult uplinkReport
Definition: AgoraBase.h:3432
agora::rtc::EncodedVideoFrameInfo::rotation
VIDEO_ORIENTATION rotation
Definition: AgoraBase.h:1658
agora::rtc::ScreenCaptureParameters::bitrate
int bitrate
Definition: AgoraBase.h:3676
agora::rtc::RtcStats::txVideoBytes
unsigned int txVideoBytes
Definition: AgoraBase.h:1976
agora::rtc::LiveTranscoding::backgroundColor
unsigned int backgroundColor
Definition: AgoraBase.h:3167
agora::base::IAgoraParameter
Definition: IAgoraParameter.h:159
agora::rtc::LastmileProbeConfig
Definition: AgoraBase.h:3350
agora::rtc::TranscodingUser::y
int y
Definition: AgoraBase.h:3074
agora::rtc::RtcStats::rxKBitRate
unsigned short rxKBitRate
Definition: AgoraBase.h:1992
agora::rtc::RtcStats::memoryTotalUsageRatio
double memoryTotalUsageRatio
Definition: AgoraBase.h:2032
agora::rtc::VideoFormat::fps
int fps
Definition: AgoraBase.h:2354
agora::rtc::VideoEncoderConfiguration::minBitrate
int minBitrate
Definition: AgoraBase.h:1787
agora::rtc::RemoteVideoStreamInfo::stream_type
VIDEO_STREAM_TYPE stream_type
Definition: AgoraBase.h:2715
agora::rtc::TranscodingUser::audioChannel
int audioChannel
Definition: AgoraBase.h:3108
agora::rtc::RtcStats::firstAudioPacketDurationAfterUnmute
int firstAudioPacketDurationAfterUnmute
Definition: AgoraBase.h:2066
agora::rtc::VideoFormat::width
int width
Definition: AgoraBase.h:2346
agora::rtc::ScreenCaptureParameters::windowFocus
bool windowFocus
Definition: AgoraBase.h:3687
agora::rtc::EncodedAudioFrameInfo::codec
AUDIO_CODEC_TYPE codec
Definition: AgoraBase.h:1522
agora::rtc::AudioPcmDataInfo::sampleCount
size_t sampleCount
Definition: AgoraBase.h:1559
agora::rtc::LiveTranscoding::videoGop
int videoGop
Definition: AgoraBase.h:3158
agora::rtc::ChannelMediaRelayConfiguration::destCount
int destCount
Definition: AgoraBase.h:4075
agora::rtc::LastmileProbeOneWayResult::jitter
unsigned int jitter
Definition: AgoraBase.h:3409
agora::rtc::VideoCanvas::mirrorMode
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:3579
agora::rtc::RtcStats::duration
unsigned int duration
Definition: AgoraBase.h:1960
agora::rtc::SimulcastStreamConfig::framerate
int framerate
Definition: AgoraBase.h:1867
agora::rtc::VideoDimensions::height
int height
Definition: AgoraBase.h:1370
agora::rtc::LastmileProbeConfig::probeUplink
bool probeUplink
Definition: AgoraBase.h:3357
agora::rtc::LiveTranscoding
Definition: AgoraBase.h:3123
agora::rtc::RtcStats::txBytes
unsigned int txBytes
Definition: AgoraBase.h:1964
agora::rtc::VideoFormat::height
int height
Definition: AgoraBase.h:2350
agora::rtc::Rectangle
Definition: AgoraBase.h:1874
agora::rtc::VideoFormat::kMaxHeightInPixels
@ kMaxHeightInPixels
Definition: AgoraBase.h:2338
agora::rtc::VideoCanvas::uid
uid_t uid
Definition: AgoraBase.h:3583
agora::rtc::RtcStats::firstVideoPacketDuration
int firstVideoPacketDuration
Definition: AgoraBase.h:2051
agora::rtc::EncodedVideoFrameInfo
Definition: AgoraBase.h:1606
agora::rtc::RtcStats::rxVideoBytes
unsigned int rxVideoBytes
Definition: AgoraBase.h:1984
agora::rtc::TranscodingVideoStream::remoteUserUid
uid_t remoteUserUid
Definition: AgoraBase.h:3268
agora::rtc::RemoteAudioStats::networkTransportDelay
int networkTransportDelay
Definition: AgoraBase.h:2202
agora::rtc::VideoEncoderConfiguration::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:1711
agora::rtc::EncodedVideoFrameInfo::uid
uid_t uid
Definition: AgoraBase.h:1675
agora::rtc::EncodedAudioFrameInfo
Definition: AgoraBase.h:1497
agora::util::AutoPtr
Definition: AgoraBase.h:80
agora::rtc::LastmileProbeOneWayResult::packetLossRate
unsigned int packetLossRate
Definition: AgoraBase.h:3405
agora::UserInfo::hasAudio
bool hasAudio
Definition: AgoraBase.h:1114
agora::rtc::IPacketObserver::Packet
Definition: AgoraBase.h:2752
agora::rtc::VideoFormat::kMaxFps
@ kMaxFps
Definition: AgoraBase.h:2340
agora::rtc::LiveTranscoding::audioCodecProfile
AUDIO_CODEC_PROFILE_TYPE audioCodecProfile
Definition: AgoraBase.h:3232
agora::rtc::RemoteAudioStats::receivedBitrate
int receivedBitrate
Definition: AgoraBase.h:2223
agora::rtc::VideoEncoderConfiguration
Definition: AgoraBase.h:1703
agora::rtc::IVideoEncodedImageReceiver::OnEncodedVideoImageReceived
virtual bool OnEncodedVideoImageReceived(const uint8_t *imageBuffer, size_t length, const EncodedVideoFrameInfo &videoEncodedFrameInfo)=0
agora::rtc::Rectangle::width
int width
Definition: AgoraBase.h:1886
agora::rtc::VideoEncoderConfiguration::bitrate
int bitrate
Definition: AgoraBase.h:1770
agora::util::AList
Definition: AgoraBase.h:213
agora::rtc::RtcStats::firstVideoKeyFrameDecodedDurationAfterUnmute
int firstVideoKeyFrameDecodedDurationAfterUnmute
Definition: AgoraBase.h:2081
agora::rtc::TranscodingUser
Definition: AgoraBase.h:3062
agora::rtc::AudioFileRecordingConfig::fileRecordingType
AUDIO_FILE_RECORDING_TYPE fileRecordingType
Definition: AgoraBase.h:3758
agora::rtc::RtcImage
Definition: AgoraBase.h:2999
agora::rtc::TranscodingUser::x
int x
Definition: AgoraBase.h:3070
agora::rtc::ChannelMediaInfo::token
const char * token
Definition: AgoraBase.h:4042
agora::rtc::WatermarkRatio::yRatio
float yRatio
Definition: AgoraBase.h:1905
agora::rtc::SimulcastStreamConfig
Definition: AgoraBase.h:1855
agora::rtc::LiveTranscoding::audioBitrate
int audioBitrate
Definition: AgoraBase.h:3218
agora::rtc::ChannelMediaRelayConfiguration::destInfos
ChannelMediaInfo * destInfos
Definition: AgoraBase.h:4069
agora::rtc::RtcImage::x
int x
Definition: AgoraBase.h:3008
agora::rtc::TranscodingVideoStream::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:3264
agora::rtc::RtcImage::zOrder
int zOrder
Definition: AgoraBase.h:3025
agora::rtc::AudioVolumeInfo::volume
unsigned int volume
Definition: AgoraBase.h:2738
agora::rtc::TranscodingUser::uid
uid_t uid
Definition: AgoraBase.h:3066
agora::rtc::Rectangle::y
int y
Definition: AgoraBase.h:1882
agora::rtc::VideoFormat::kMaxWidthInPixels
@ kMaxWidthInPixels
Definition: AgoraBase.h:2336
agora::rtc::LocalAudioStats::sentBitrate
int sentBitrate
Definition: AgoraBase.h:2883
agora::rtc::RemoteAudioStats::totalFrozenTime
int totalFrozenTime
Definition: AgoraBase.h:2230
agora::rtc::RtcImage::url
const char * url
Definition: AgoraBase.h:3003
agora::rtc::IPacketObserver::Packet::buffer
const unsigned char * buffer
Definition: AgoraBase.h:2756
agora::rtc::RtcStats::firstVideoKeyFrameRenderedDurationAfterUnmute
int firstVideoKeyFrameRenderedDurationAfterUnmute
Definition: AgoraBase.h:2086
agora::UserInfo::userId
util::AString userId
Definition: AgoraBase.h:1108
agora::rtc::WatermarkOptions::positionInPortraitMode
Rectangle positionInPortraitMode
Definition: AgoraBase.h:1930
agora::rtc::LastmileProbeResult::downlinkReport
LastmileProbeOneWayResult downlinkReport
Definition: AgoraBase.h:3436
agora::rtc::LiveTranscoding::watermarkCount
unsigned int watermarkCount
Definition: AgoraBase.h:3197
agora::rtc::Rectangle::x
int x
Definition: AgoraBase.h:1878
agora::util::IString
Definition: AgoraBase.h:152
agora::rtc::EncodedAudioFrameInfo::sendEvenIfEmpty
bool sendEvenIfEmpty
Definition: AgoraBase.h:1538
agora::rtc::AudioFileRecordingConfig::sampleRate
int sampleRate
Definition: AgoraBase.h:3754
agora::rtc::LocalTranscoderConfiguration
Definition: AgoraBase.h:3327
agora::rtc::WatermarkRatio::xRatio
float xRatio
Definition: AgoraBase.h:1901
agora::rtc::LocalAudioStats::sentSampleRate
int sentSampleRate
Definition: AgoraBase.h:2879
agora::rtc::LastmileProbeConfig::expectedDownlinkBitrate
unsigned int expectedDownlinkBitrate
Definition: AgoraBase.h:3374
agora::rtc::RtcStats::cpuTotalUsage
double cpuTotalUsage
Definition: AgoraBase.h:2024
agora::rtc::IPacketObserver::Packet::size
unsigned int size
Definition: AgoraBase.h:2760
agora::rtc::EncodedAudioFrameInfo::speech
bool speech
Definition: AgoraBase.h:1518
agora::rtc::LiveTranscoding::backgroundImageCount
unsigned int backgroundImageCount
Definition: AgoraBase.h:3209
agora::rtc::IPacketObserver
Definition: AgoraBase.h:2746
agora::rtc::LiveTranscoding::backgroundImage
RtcImage * backgroundImage
Definition: AgoraBase.h:3202
agora::rtc::RtcStats::cpuAppUsage
double cpuAppUsage
Definition: AgoraBase.h:2020
agora::rtc::VideoFormat
Definition: AgoraBase.h:2333
agora::rtc::TranscodingUser::alpha
double alpha
Definition: AgoraBase.h:3092
agora::rtc::WatermarkOptions::watermarkRatio
WatermarkRatio watermarkRatio
Definition: AgoraBase.h:1935
agora::rtc::DataStreamConfig
Definition: AgoraBase.h:1843
agora::rtc::RtcStats::txAudioBytes
unsigned int txAudioBytes
Definition: AgoraBase.h:1972
agora::rtc::RtcStats::connectTimeMs
int connectTimeMs
Definition: AgoraBase.h:2041
agora::rtc::LastmileProbeResult::state
LASTMILE_PROBE_RESULT_STATE state
Definition: AgoraBase.h:3428
agora::rtc::ChannelMediaInfo::channelName
const char * channelName
Definition: AgoraBase.h:4038
agora::rtc::LiveTranscoding::height
int height
Definition: AgoraBase.h:3137
agora::rtc::EncodedVideoFrameInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1635
agora::rtc::RtcStats::txVideoKBitRate
unsigned short txVideoKBitRate
Definition: AgoraBase.h:2008
agora::rtc::RtcStats::rxAudioBytes
unsigned int rxAudioBytes
Definition: AgoraBase.h:1980
agora::rtc::RtcStats::txAudioKBitRate
unsigned short txAudioKBitRate
Definition: AgoraBase.h:2000
agora::rtc::AudioVolumeInfo::uid
uid_t uid
Definition: AgoraBase.h:2733
agora::rtc::LiveTranscoding::videoBitrate
int videoBitrate
Definition: AgoraBase.h:3143
agora::rtc::VideoTrackInfo::trackId
track_id_t trackId
Definition: AgoraBase.h:2656
agora::rtc::VideoTrackInfo::encodedFrameOnly
bool encodedFrameOnly
Definition: AgoraBase.h:2674
agora::rtc::TranscodingUser::width
int width
Definition: AgoraBase.h:3078
agora::base::AParameter
Definition: AgoraBase.h:4261
agora::rtc::EncryptionConfig::encryptionMode
ENCRYPTION_MODE encryptionMode
Definition: AgoraBase.h:4141
agora::util::AOutputIterator
Definition: AgoraBase.h:182
agora::rtc::WatermarkOptions::positionInLandscapeMode
Rectangle positionInLandscapeMode
Definition: AgoraBase.h:1926
agora::rtc::EncodedVideoFrameInfo::width
int width
Definition: AgoraBase.h:1639
agora::rtc::VideoTrackInfo::ownerUid
uid_t ownerUid
Definition: AgoraBase.h:2651
agora::rtc::LastmileProbeOneWayResult::availableBandwidth
unsigned int availableBandwidth
Definition: AgoraBase.h:3413
agora::rtc::EncodedVideoFrameInfo::framesPerSecond
int framesPerSecond
Definition: AgoraBase.h:1650
agora::rtc::LiveTranscoding::transcodingExtraInfo
const char * transcodingExtraInfo
Definition: AgoraBase.h:3180
agora::rtc::VideoTrackInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:2668
agora::rtc::LiveTranscoding::metadata
const char * metadata
Definition: AgoraBase.h:3184
agora::rtc::LiveTranscoding::audioSampleRate
AUDIO_SAMPLE_RATE_TYPE audioSampleRate
Definition: AgoraBase.h:3213
agora::rtc::ChannelMediaRelayConfiguration
Definition: AgoraBase.h:4050
agora::rtc::UserInfo::uid
uid_t uid
Definition: AgoraBase.h:4222
agora::rtc::DataStreamConfig::ordered
bool ordered
Definition: AgoraBase.h:1849
agora::rtc::LastmileProbeOneWayResult
Definition: AgoraBase.h:3401
agora::rtc::EncodedVideoFrameInfo::renderTimeMs
int64_t renderTimeMs
Definition: AgoraBase.h:1667
agora::rtc::WatermarkRatio::widthRatio
float widthRatio
Definition: AgoraBase.h:1909
agora::rtc::AudioPcmDataInfo::samplesOut
size_t samplesOut
Definition: AgoraBase.h:1565
agora::rtc::VideoEncoderConfiguration::frameRate
int frameRate
Definition: AgoraBase.h:1715
agora::rtc::Rectangle::height
int height
Definition: AgoraBase.h:1890
agora::rtc::AudioPcmDataInfo::elapsedTimeMs
int64_t elapsedTimeMs
Definition: AgoraBase.h:1569
agora::rtc::WatermarkOptions::mode
WATERMARK_FIT_MODE mode
Definition: AgoraBase.h:1939
agora::rtc::EncodedAudioFrameInfo::sampleRateHz
int sampleRateHz
Definition: AgoraBase.h:1526
agora::rtc::RemoteAudioStats::audioLossRate
int audioLossRate
Definition: AgoraBase.h:2210
agora::UserInfo
Definition: AgoraBase.h:1104
agora::rtc::RtcStats::txPacketLossRate
int txPacketLossRate
Definition: AgoraBase.h:2090
agora::rtc::VideoCanvas::view
view_t view
Definition: AgoraBase.h:3571
agora::rtc::TranscodingVideoStream::imageUrl
const char * imageUrl
Definition: AgoraBase.h:3277
agora::rtc::IPacketObserver::onSendAudioPacket
virtual bool onSendAudioPacket(Packet &packet)=0
agora::rtc::LiveTranscoding::watermark
RtcImage * watermark
Definition: AgoraBase.h:3190
agora::rtc::ChannelMediaInfo
Definition: AgoraBase.h:4034
agora::UserInfo::hasVideo
bool hasVideo
Definition: AgoraBase.h:1120
agora::rtc::TranscodingVideoStream::connectionId
conn_id_t connectionId
Definition: AgoraBase.h:3273
agora::rtc::VideoCanvas::renderMode
media::base::RENDER_MODE_TYPE renderMode
Definition: AgoraBase.h:3575
agora::rtc::VideoTrackInfo::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:2678
agora::rtc::RtcStats::txKBitRate
unsigned short txKBitRate
Definition: AgoraBase.h:1988
agora::rtc::EncodedAudioFrameInfo::numberOfChannels
int numberOfChannels
Definition: AgoraBase.h:1542
agora::rtc::EncodedVideoFrameInfo::streamType
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:1679
agora::rtc::RemoteAudioStats::quality
int quality
Definition: AgoraBase.h:2198
agora::rtc::ScreenCaptureParameters::frameRate
int frameRate
Definition: AgoraBase.h:3671
agora::rtc::RemoteVideoStreamInfo::uid
uid_t uid
Definition: AgoraBase.h:2711
agora::rtc::RtcStats::firstVideoKeyFramePacketDurationAfterUnmute
int firstVideoKeyFramePacketDurationAfterUnmute
Definition: AgoraBase.h:2076
agora::rtc::LiveTranscoding::audioChannels
int audioChannels
Definition: AgoraBase.h:3228
agora::rtc::RtcImage::height
int height
Definition: AgoraBase.h:3021
agora::rtc::SimulcastStreamConfig::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:1859
agora::rtc::EncodedVideoFrameInfo::frameType
VIDEO_FRAME_TYPE frameType
Definition: AgoraBase.h:1654
agora::rtc::LastmileProbeConfig::probeDownlink
bool probeDownlink
Definition: AgoraBase.h:3363
agora::rtc::RtcStats::userCount
unsigned int userCount
Definition: AgoraBase.h:2016
agora::rtc::LocalTranscoderConfiguration::streamCount
unsigned int streamCount
Definition: AgoraBase.h:3331
agora::base::LicenseCallback
Definition: AgoraBase.h:4275
agora::rtc::EncryptionConfig
Definition: AgoraBase.h:4137
agora::rtc::LiveTranscoding::videoCodecProfile
VIDEO_CODEC_PROFILE_TYPE videoCodecProfile
Definition: AgoraBase.h:3162
agora::rtc::IVideoEncodedImageReceiver
Definition: AgoraBase.h:2800
agora::rtc::ScreenCaptureParameters::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:3666
agora::rtc::VideoDimensions::width
int width
Definition: AgoraBase.h:1366
agora::rtc::AudioFileRecordingConfig
Definition: AgoraBase.h:3738
agora::rtc::RemoteAudioStats
Definition: AgoraBase.h:2190
agora::rtc::TranscodingVideoStream::x
int x
Definition: AgoraBase.h:3281
agora::rtc::LiveTranscoding::lowLatency
bool lowLatency
Definition: AgoraBase.h:3154
agora::rtc::TranscodingVideoStream
Definition: AgoraBase.h:3260
agora::rtc::RtcStats
Definition: AgoraBase.h:1952
agora::base::IParameterEngine
Definition: AgoraBase.h:69
agora::rtc::WatermarkOptions::visibleInPreview
bool visibleInPreview
Definition: AgoraBase.h:1921
agora::rtc::TranscodingUser::zOrder
int zOrder
Definition: AgoraBase.h:3088
agora::rtc::LiveTranscoding::width
int width
Definition: AgoraBase.h:3130
agora::rtc::AudioPcmDataInfo
Definition: AgoraBase.h:1547
agora::rtc::VideoTrackInfo::connectionId
conn_id_t connectionId
Definition: AgoraBase.h:2660
agora::rtc::RtcStats::rxBytes
unsigned int rxBytes
Definition: AgoraBase.h:1968
agora::rtc::RtcStats::rxVideoKBitRate
unsigned short rxVideoKBitRate
Definition: AgoraBase.h:2004
agora::rtc::RtcStats::rxAudioKBitRate
unsigned short rxAudioKBitRate
Definition: AgoraBase.h:1996
agora::rtc::LocalAudioStats::numChannels
int numChannels
Definition: AgoraBase.h:2875
agora::rtc::WatermarkOptions
Definition: AgoraBase.h:1916
agora::rtc::VideoEncoderConfiguration::mirrorMode
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:1801
agora::rtc::LocalAudioStats
Definition: AgoraBase.h:2871
agora::rtc::ScreenCaptureParameters::captureMouseCursor
bool captureMouseCursor
Definition: AgoraBase.h:3681
agora::rtc::LocalTranscoderConfiguration::VideoInputStreams
TranscodingVideoStream * VideoInputStreams
Definition: AgoraBase.h:3335
agora::rtc::RtcImage::y
int y
Definition: AgoraBase.h:3013
agora::rtc::RtcStats::memoryAppUsageRatio
double memoryAppUsageRatio
Definition: AgoraBase.h:2028
agora::rtc::LastmileProbeConfig::expectedUplinkBitrate
unsigned int expectedUplinkBitrate
Definition: AgoraBase.h:3369
agora::rtc::VideoTrackInfo::isLocal
bool isLocal
Definition: AgoraBase.h:2647
agora::rtc::RtcStats::firstVideoKeyFramePacketDuration
int firstVideoKeyFramePacketDuration
Definition: AgoraBase.h:2056
agora::rtc::VideoTrackInfo::streamType
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:2664
agora::rtc::AudioFileRecordingConfig::encode
bool encode
Definition: AgoraBase.h:3749
agora::util::IContainer
Definition: AgoraBase.h:173
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1362
agora::rtc::TranscodingVideoStream::height
int height
Definition: AgoraBase.h:3293
agora::rtc::DataStreamConfig::syncWithAudio
bool syncWithAudio
Definition: AgoraBase.h:1846
agora::rtc::RemoteAudioStats::frozenRate
int frozenRate
Definition: AgoraBase.h:2235
agora::rtc::LiveTranscoding::userCount
unsigned int userCount
Definition: AgoraBase.h:3171
agora::util::CopyableAutoPtr
Definition: AgoraBase.h:136
agora::rtc::TranscodingVideoStream::width
int width
Definition: AgoraBase.h:3289
agora::rtc::TranscodingVideoStream::mirror
bool mirror
Definition: AgoraBase.h:3307
agora::rtc::AudioFileRecordingConfig::filePath
const char * filePath
Definition: AgoraBase.h:3743
agora::rtc::EncryptionConfig::encryptionKey
const char * encryptionKey
Definition: AgoraBase.h:4147
agora::rtc::EncodedVideoFrameInfo::trackId
int trackId
Definition: AgoraBase.h:1662
agora::rtc::RemoteVideoStreamInfo::current_downscale_level
REMOTE_VIDEO_DOWNSCALE_LEVEL current_downscale_level
Definition: AgoraBase.h:2719
agora::rtc::IPacketObserver::onSendVideoPacket
virtual bool onSendVideoPacket(Packet &packet)=0
agora::rtc::VideoTrackInfo
Definition: AgoraBase.h:2637
agora::rtc::LocalTranscoderConfiguration::videoOutputConfiguration
VideoEncoderConfiguration videoOutputConfiguration
Definition: AgoraBase.h:3339
agora::rtc::SimulcastStreamConfig::bitrate
int bitrate
Definition: AgoraBase.h:1863
agora::rtc::RemoteAudioStats::numChannels
int numChannels
Definition: AgoraBase.h:2214
agora::rtc::RemoteAudioStats::jitterBufferDelay
int jitterBufferDelay
Definition: AgoraBase.h:2206
agora::rtc::AudioPcmDataInfo::ntpTimeMs
int64_t ntpTimeMs
Definition: AgoraBase.h:1573
agora::rtc::RtcStats::firstVideoPacketDurationAfterUnmute
int firstVideoPacketDurationAfterUnmute
Definition: AgoraBase.h:2071
agora::rtc::LiveTranscoding::videoFramerate
int videoFramerate
Definition: AgoraBase.h:3148
agora::rtc::RemoteAudioStats::uid
uid_t uid
Definition: AgoraBase.h:2194
agora::rtc::RtcStats::rxPacketLossRate
int rxPacketLossRate
Definition: AgoraBase.h:2094
agora::rtc::RemoteVideoStreamInfo
Definition: AgoraBase.h:2707
agora::rtc::RtcStats::lastmileDelay
unsigned short lastmileDelay
Definition: AgoraBase.h:2012
agora::rtc::VideoEncoderConfiguration::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1707
agora::rtc::LastmileProbeResult::rtt
unsigned int rtt
Definition: AgoraBase.h:3440
agora::rtc::TranscodingVideoStream::y
int y
Definition: AgoraBase.h:3285
agora::rtc::RtcStats::packetsBeforeFirstKeyFramePacket
int packetsBeforeFirstKeyFramePacket
Definition: AgoraBase.h:2061
agora::rtc::ChannelMediaRelayConfiguration::srcInfo
ChannelMediaInfo * srcInfo
Definition: AgoraBase.h:4062
agora::rtc::VideoEncoderConfiguration::orientationMode
ORIENTATION_MODE orientationMode
Definition: AgoraBase.h:1791
agora::base::IEngineBase
Definition: AgoraBase.h:4255
agora::util::IIterator
Definition: AgoraBase.h:164
agora::rtc::UserInfo::userAccount
char userAccount[MAX_USER_ACCOUNT_LENGTH]
Definition: AgoraBase.h:4226
agora::rtc::EncodedAudioFrameInfo::samplesPerChannel
int samplesPerChannel
Definition: AgoraBase.h:1532
agora::rtc::EncodedVideoFrameInfo::height
int height
Definition: AgoraBase.h:1643
agora::rtc::RtcStats::memoryAppUsageInKbytes
int memoryAppUsageInKbytes
Definition: AgoraBase.h:2036
agora::rtc::RemoteVideoStreamInfo::total_downscale_level_counts
uint8_t total_downscale_level_counts
Definition: AgoraBase.h:2723
agora::rtc::TranscodingUser::height
int height
Definition: AgoraBase.h:3082
agora::rtc::RemoteAudioStats::receivedSampleRate
int receivedSampleRate
Definition: AgoraBase.h:2218
agora::rtc::IPacketObserver::onReceiveAudioPacket
virtual bool onReceiveAudioPacket(Packet &packet)=0
agora::rtc::VideoCanvas
Definition: AgoraBase.h:3567
agora::rtc::LocalAudioStats::internalCodec
int internalCodec
Definition: AgoraBase.h:2887
agora::rtc::ChannelMediaInfo::uid
uid_t uid
Definition: AgoraBase.h:4045
agora::rtc::EncodedVideoFrameInfo::internalSendTs
uint64_t internalSendTs
Definition: AgoraBase.h:1671