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 
21 #define MAX_PATH_260 (260)
22 
23 #if defined(_WIN32)
24 
25 #ifndef WIN32_LEAN_AND_MEAN
26 #define WIN32_LEAN_AND_MEAN
27 #endif // !WIN32_LEAN_AND_MEAN
28 #if defined(__aarch64__)
29 #include <arm64intr.h>
30 #endif
31 #include <Windows.h>
32 
33 #if defined(AGORARTC_EXPORT)
34 #define AGORA_API extern "C" __declspec(dllexport)
35 #else
36 #define AGORA_API extern "C" __declspec(dllimport)
37 #endif // AGORARTC_EXPORT
38 
39 #define AGORA_CALL __cdecl
40 
41 #elif defined(__APPLE__)
42 
43 #include <TargetConditionals.h>
44 
45 #define AGORA_API extern "C" __attribute__((visibility("default")))
46 #define AGORA_CALL
47 
48 #elif defined(__ANDROID__) || defined(__linux__)
49 
50 #define AGORA_API extern "C" __attribute__((visibility("default")))
51 #define AGORA_CALL
52 
53 #else // !_WIN32 && !__APPLE__ && !(__ANDROID__ || __linux__)
54 
55 #define AGORA_API extern "C"
56 #define AGORA_CALL
57 
58 #endif // _WIN32
59 
60 #ifndef OPTIONAL_ENUM_SIZE_T
61 #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
62 #define OPTIONAL_ENUM_SIZE_T enum : size_t
63 #else
64 #define OPTIONAL_ENUM_SIZE_T enum
65 #endif
66 #endif
67 
68 #ifndef OPTIONAL_NULLPTR
69 #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
70 #define OPTIONAL_NULLPTR nullptr
71 #else
72 #define OPTIONAL_NULLPTR NULL
73 #endif
74 #endif
75 
76 namespace agora {
77 namespace commons {
78 namespace cjson {
79 class JsonWrapper;
80 } // namespace cjson
81 } // namespace commons
82 
83 typedef commons::cjson::JsonWrapper any_document_t;
84 
85 namespace base {
86 class IEngineBase;
87 
89  public:
90  virtual int setParameters(const char* parameters) = 0;
91  virtual int getParameters(const char* key, any_document_t& result) = 0;
92  virtual ~IParameterEngine() {}
93 };
94 } // namespace base
95 
96 namespace util {
97 
98 template <class T>
99 class AutoPtr {
100  protected:
101  typedef T value_type;
102  typedef T* pointer_type;
103 
104  public:
105  explicit AutoPtr(pointer_type p = NULL) : ptr_(p) {}
106 
107  ~AutoPtr() {
108  if (ptr_) {
109  ptr_->release();
110  ptr_ = NULL;
111  }
112  }
113 
114  operator bool() const { return (ptr_ != NULL); }
115 
116  value_type& operator*() const { return *get(); }
117 
118  pointer_type operator->() const { return get(); }
119 
120  pointer_type get() const { return ptr_; }
121 
122  pointer_type release() {
123  pointer_type ret = ptr_;
124  ptr_ = 0;
125  return ret;
126  }
127 
128  void reset(pointer_type ptr = NULL) {
129  if (ptr != ptr_ && ptr_) {
130  ptr_->release();
131  }
132 
133  ptr_ = ptr;
134  }
135 
136  template <class C1, class C2>
137  bool queryInterface(C1* c, C2 iid) {
138  pointer_type p = NULL;
139  if (c && !c->queryInterface(iid, reinterpret_cast<void**>(&p))) {
140  reset(p);
141  }
142 
143  return (p != NULL);
144  }
145 
146  private:
147  AutoPtr(const AutoPtr&);
148  AutoPtr& operator=(const AutoPtr&);
149 
150  private:
151  pointer_type ptr_;
152 };
153 
154 template <class T>
155 class CopyableAutoPtr : public AutoPtr<T> {
156  typedef typename AutoPtr<T>::pointer_type pointer_type;
157 
158  public:
159  explicit CopyableAutoPtr(pointer_type p = 0) : AutoPtr<T>(p) {}
160  explicit CopyableAutoPtr(const CopyableAutoPtr& rhs) { this->reset(rhs.clone()); }
161  CopyableAutoPtr& operator=(const CopyableAutoPtr& rhs) {
162  if (this != &rhs) this->reset(rhs.clone());
163  return *this;
164  }
165  pointer_type clone() const {
166  if (!this->get()) return NULL;
167  return this->get()->clone();
168  }
169 };
170 
171 class IString {
172  public:
173  virtual bool empty() const = 0;
174  virtual const char* c_str() = 0;
175  virtual const char* data() = 0;
176  virtual size_t length() = 0;
177  virtual IString* clone() = 0;
178  virtual void release() = 0;
179  virtual ~IString() {}
180 };
182 
183 class IIterator {
184  public:
185  virtual void* current() = 0;
186  virtual const void* const_current() const = 0;
187  virtual bool next() = 0;
188  virtual void release() = 0;
189  virtual ~IIterator() {}
190 };
191 
192 class IContainer {
193  public:
194  virtual IIterator* begin() = 0;
195  virtual size_t size() const = 0;
196  virtual void release() = 0;
197  virtual ~IContainer() {}
198 };
199 
200 template <class T>
202  IIterator* p;
203 
204  public:
205  typedef T value_type;
206  typedef value_type& reference;
207  typedef const value_type& const_reference;
208  typedef value_type* pointer;
209  typedef const value_type* const_pointer;
210  explicit AOutputIterator(IIterator* it = NULL) : p(it) {}
211  ~AOutputIterator() {
212  if (p) p->release();
213  }
214  AOutputIterator(const AOutputIterator& rhs) : p(rhs.p) {}
215  AOutputIterator& operator++() {
216  p->next();
217  return *this;
218  }
219  bool operator==(const AOutputIterator& rhs) const {
220  if (p && rhs.p)
221  return p->current() == rhs.p->current();
222  else
223  return valid() == rhs.valid();
224  }
225  bool operator!=(const AOutputIterator& rhs) const { return !this->operator==(rhs); }
226  reference operator*() { return *reinterpret_cast<pointer>(p->current()); }
227  const_reference operator*() const { return *reinterpret_cast<const_pointer>(p->const_current()); }
228  bool valid() const { return p && p->current() != NULL; }
229 };
230 
231 template <class T>
232 class AList {
233  IContainer* container;
234  bool owner;
235 
236  public:
237  typedef T value_type;
238  typedef value_type& reference;
239  typedef const value_type& const_reference;
240  typedef value_type* pointer;
241  typedef const value_type* const_pointer;
242  typedef size_t size_type;
245 
246  public:
247  AList() : container(NULL), owner(false) {}
248  AList(IContainer* c, bool take_ownership) : container(c), owner(take_ownership) {}
249  ~AList() { reset(); }
250  void reset(IContainer* c = NULL, bool take_ownership = false) {
251  if (owner && container) container->release();
252  container = c;
253  owner = take_ownership;
254  }
255  iterator begin() { return container ? iterator(container->begin()) : iterator(NULL); }
256  iterator end() { return iterator(NULL); }
257  size_type size() const { return container ? container->size() : 0; }
258  bool empty() const { return size() == 0; }
259 };
260 
261 } // namespace util
262 
266 enum CHANNEL_PROFILE_TYPE {
272  CHANNEL_PROFILE_COMMUNICATION = 0,
278  CHANNEL_PROFILE_LIVE_BROADCASTING = 1,
283  CHANNEL_PROFILE_GAME = 2,
290  CHANNEL_PROFILE_CLOUD_GAMING = 3,
291 
297  CHANNEL_PROFILE_COMMUNICATION_1v1 = 4,
298 
304  CHANNEL_PROFILE_LIVE_BROADCASTING_2 = 5,
305 };
306 
310 enum WARN_CODE_TYPE {
315  WARN_INVALID_VIEW = 8,
320  WARN_INIT_VIDEO = 16,
325  WARN_PENDING = 20,
330  WARN_NO_AVAILABLE_CHANNEL = 103,
336  WARN_LOOKUP_CHANNEL_TIMEOUT = 104,
341  WARN_LOOKUP_CHANNEL_REJECTED = 105,
347  WARN_OPEN_CHANNEL_TIMEOUT = 106,
352  WARN_OPEN_CHANNEL_REJECTED = 107,
353 
354  // sdk: 100~1000
358  WARN_SWITCH_LIVE_VIDEO_TIMEOUT = 111,
362  WARN_SET_CLIENT_ROLE_TIMEOUT = 118,
366  WARN_OPEN_CHANNEL_INVALID_TICKET = 121,
370  WARN_OPEN_CHANNEL_TRY_NEXT_VOS = 122,
374  WARN_CHANNEL_CONNECTION_UNRECOVERABLE = 131,
378  WARN_CHANNEL_CONNECTION_IP_CHANGED = 132,
382  WARN_CHANNEL_CONNECTION_PORT_CHANGED = 133,
385  WARN_CHANNEL_SOCKET_ERROR = 134,
389  WARN_AUDIO_MIXING_OPEN_ERROR = 701,
393  WARN_ADM_RUNTIME_PLAYOUT_WARNING = 1014,
397  WARN_ADM_RUNTIME_RECORDING_WARNING = 1016,
401  WARN_ADM_RECORD_AUDIO_SILENCE = 1019,
405  WARN_ADM_PLAYOUT_MALFUNCTION = 1020,
409  WARN_ADM_RECORD_MALFUNCTION = 1021,
416  WARN_ADM_IOS_CATEGORY_NOT_PLAYANDRECORD = 1029,
420  WARN_ADM_IOS_SAMPLERATE_CHANGE = 1030,
424  WARN_ADM_RECORD_AUDIO_LOWLEVEL = 1031,
428  WARN_ADM_PLAYOUT_AUDIO_LOWLEVEL = 1032,
436  WARN_ADM_WINDOWS_NO_DATA_READY_EVENT = 1040,
440  WARN_APM_HOWLING = 1051,
444  WARN_ADM_GLITCH_STATE = 1052,
448  WARN_ADM_IMPROPER_SETTINGS = 1053,
452  WARN_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
457  WARN_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
465  WARN_ADM_WIN_CORE_IMPROPER_CAPTURE_RELEASE = 1324,
466 };
467 
471 enum ERROR_CODE_TYPE {
475  ERR_OK = 0,
476  // 1~1000
480  ERR_FAILED = 1,
485  ERR_INVALID_ARGUMENT = 2,
492  ERR_NOT_READY = 3,
496  ERR_NOT_SUPPORTED = 4,
500  ERR_REFUSED = 5,
504  ERR_BUFFER_TOO_SMALL = 6,
508  ERR_NOT_INITIALIZED = 7,
512  ERR_INVALID_STATE = 8,
517  ERR_NO_PERMISSION = 9,
523  ERR_TIMEDOUT = 10,
528  ERR_CANCELED = 11,
534  ERR_TOO_OFTEN = 12,
540  ERR_BIND_SOCKET = 13,
545  ERR_NET_DOWN = 14,
551  ERR_NET_NOBUFS = 15,
557  ERR_JOIN_CHANNEL_REJECTED = 17,
564  ERR_LEAVE_CHANNEL_REJECTED = 18,
568  ERR_ALREADY_IN_USE = 19,
573  ERR_ABORTED = 20,
578  ERR_INIT_NET_ENGINE = 21,
583  ERR_RESOURCE_LIMITED = 22,
589  ERR_INVALID_APP_ID = 101,
594  ERR_INVALID_CHANNEL_NAME = 102,
600  ERR_NO_SERVER_RESOURCES = 103,
613  ERR_TOKEN_EXPIRED = 109,
630  ERR_INVALID_TOKEN = 110,
635  ERR_CONNECTION_INTERRUPTED = 111, // only used in web sdk
640  ERR_CONNECTION_LOST = 112, // only used in web sdk
645  ERR_NOT_IN_CHANNEL = 113,
650  ERR_SIZE_TOO_LARGE = 114,
655  ERR_BITRATE_LIMIT = 115,
660  ERR_TOO_MANY_DATA_STREAMS = 116,
664  ERR_STREAM_MESSAGE_TIMEOUT = 117,
668  ERR_SET_CLIENT_ROLE_NOT_AUTHORIZED = 119,
673  ERR_DECRYPTION_FAILED = 120,
677  ERR_INVALID_USER_ID = 121,
681  ERR_CLIENT_IS_BANNED_BY_SERVER = 123,
685  ERR_WATERMARK_PARAM = 124,
689  ERR_WATERMARK_PATH = 125,
693  ERR_WATERMARK_PNG = 126,
697  ERR_WATERMARKR_INFO = 127,
701  ERR_WATERMARK_ARGB = 128,
705  ERR_WATERMARK_READ = 129,
711  ERR_ENCRYPTED_STREAM_NOT_ALLOWED_PUBLISH = 130,
712 
716  ERR_LICENSE_CREDENTIAL_INVALID = 131,
717 
718  // Licensing, keep the license error code same as the main version
719  ERR_CERT_RAW = 157,
720  ERR_CERT_JSON_PART = 158,
721  ERR_CERT_JSON_INVAL = 159,
722  ERR_CERT_JSON_NOMEM = 160,
723  ERR_CERT_CUSTOM = 161,
724  ERR_CERT_CREDENTIAL = 162,
725  ERR_CERT_SIGN = 163,
726  ERR_CERT_FAIL = 164,
727  ERR_CERT_BUF = 165,
728  ERR_CERT_NULL = 166,
729  ERR_CERT_DUEDATE = 167,
730  ERR_CERT_REQUEST = 168,
731 
732  // PcmSend Error num
733  ERR_PCMSEND_FORMAT =200, // unsupport pcm format
734  ERR_PCMSEND_BUFFEROVERFLOW = 201, // buffer overflow, the pcm send rate too quickly
735 
737  // signaling: 400~600
738  ERR_LOGOUT_OTHER = 400, //
739  ERR_LOGOUT_USER = 401, // logout by user
740  ERR_LOGOUT_NET = 402, // network failure
741  ERR_LOGOUT_KICKED = 403, // login in other device
742  ERR_LOGOUT_PACKET = 404, //
743  ERR_LOGOUT_TOKEN_EXPIRED = 405, // token expired
744  ERR_LOGOUT_OLDVERSION = 406, //
745  ERR_LOGOUT_TOKEN_WRONG = 407,
746  ERR_LOGOUT_ALREADY_LOGOUT = 408,
747  ERR_LOGIN_OTHER = 420,
748  ERR_LOGIN_NET = 421,
749  ERR_LOGIN_FAILED = 422,
750  ERR_LOGIN_CANCELED = 423,
751  ERR_LOGIN_TOKEN_EXPIRED = 424,
752  ERR_LOGIN_OLD_VERSION = 425,
753  ERR_LOGIN_TOKEN_WRONG = 426,
754  ERR_LOGIN_TOKEN_KICKED = 427,
755  ERR_LOGIN_ALREADY_LOGIN = 428,
756  ERR_JOIN_CHANNEL_OTHER = 440,
757  ERR_SEND_MESSAGE_OTHER = 440,
758  ERR_SEND_MESSAGE_TIMEOUT = 441,
759  ERR_QUERY_USERNUM_OTHER = 450,
760  ERR_QUERY_USERNUM_TIMEOUT = 451,
761  ERR_QUERY_USERNUM_BYUSER = 452,
762  ERR_LEAVE_CHANNEL_OTHER = 460,
763  ERR_LEAVE_CHANNEL_KICKED = 461,
764  ERR_LEAVE_CHANNEL_BYUSER = 462,
765  ERR_LEAVE_CHANNEL_LOGOUT = 463,
766  ERR_LEAVE_CHANNEL_DISCONNECTED = 464,
767  ERR_INVITE_OTHER = 470,
768  ERR_INVITE_REINVITE = 471,
769  ERR_INVITE_NET = 472,
770  ERR_INVITE_PEER_OFFLINE = 473,
771  ERR_INVITE_TIMEOUT = 474,
772  ERR_INVITE_CANT_RECV = 475,
774  // 1001~2000
778  ERR_LOAD_MEDIA_ENGINE = 1001,
782  ERR_START_CALL = 1002,
786  ERR_START_CAMERA = 1003,
790  ERR_START_VIDEO_RENDER = 1004,
796  ERR_ADM_GENERAL_ERROR = 1005,
800  ERR_ADM_JAVA_RESOURCE = 1006,
804  ERR_ADM_SAMPLE_RATE = 1007,
809  ERR_ADM_INIT_PLAYOUT = 1008,
813  ERR_ADM_START_PLAYOUT = 1009,
817  ERR_ADM_STOP_PLAYOUT = 1010,
822  ERR_ADM_INIT_RECORDING = 1011,
826  ERR_ADM_START_RECORDING = 1012,
830  ERR_ADM_STOP_RECORDING = 1013,
835  ERR_ADM_RUNTIME_PLAYOUT_ERROR = 1015,
839  ERR_ADM_RUNTIME_RECORDING_ERROR = 1017,
843  ERR_ADM_RECORD_AUDIO_FAILED = 1018,
848  ERR_ADM_INIT_LOOPBACK = 1022,
853  ERR_ADM_START_LOOPBACK = 1023,
858  ERR_ADM_NO_PERMISSION = 1027,
862  ERR_ADM_RECORD_AUDIO_IS_ACTIVE = 1033,
866  ERR_ADM_ANDROID_JNI_JAVA_RESOURCE = 1101,
872  ERR_ADM_ANDROID_JNI_NO_RECORD_FREQUENCY = 1108,
878  ERR_ADM_ANDROID_JNI_NO_PLAYBACK_FREQUENCY = 1109,
886  ERR_ADM_ANDROID_JNI_JAVA_START_RECORD = 1111,
894  ERR_ADM_ANDROID_JNI_JAVA_START_PLAYBACK = 1112,
899  ERR_ADM_ANDROID_JNI_JAVA_RECORD_ERROR = 1115,
901  ERR_ADM_ANDROID_OPENSL_CREATE_ENGINE = 1151,
903  ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_RECORDER = 1153,
905  ERR_ADM_ANDROID_OPENSL_START_RECORDER_THREAD = 1156,
907  ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_PLAYER = 1157,
909  ERR_ADM_ANDROID_OPENSL_START_PLAYER_THREAD = 1160,
916  ERR_ADM_IOS_INPUT_NOT_AVAILABLE = 1201,
920  ERR_ADM_IOS_ACTIVATE_SESSION_FAIL = 1206,
925  ERR_ADM_IOS_VPIO_INIT_FAIL = 1210,
930  ERR_ADM_IOS_VPIO_REINIT_FAIL = 1213,
935  ERR_ADM_IOS_VPIO_RESTART_FAIL = 1214,
936  ERR_ADM_IOS_SET_RENDER_CALLBACK_FAIL = 1219,
938  ERR_ADM_IOS_SESSION_SAMPLERATR_ZERO = 1221,
946  ERR_ADM_WIN_CORE_INIT = 1301,
953  ERR_ADM_WIN_CORE_INIT_RECORDING = 1303,
960  ERR_ADM_WIN_CORE_INIT_PLAYOUT = 1306,
966  ERR_ADM_WIN_CORE_INIT_PLAYOUT_NULL = 1307,
973  ERR_ADM_WIN_CORE_START_RECORDING = 1309,
980  ERR_ADM_WIN_CORE_CREATE_REC_THREAD = 1311,
989  ERR_ADM_WIN_CORE_CAPTURE_NOT_STARTUP = 1314,
996  ERR_ADM_WIN_CORE_CREATE_RENDER_THREAD = 1319,
1005  ERR_ADM_WIN_CORE_RENDER_NOT_STARTUP = 1320,
1011  ERR_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
1017  ERR_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
1027  ERR_ADM_WIN_WAVE_INIT = 1351,
1036  ERR_ADM_WIN_WAVE_INIT_RECORDING = 1353,
1045  ERR_ADM_WIN_WAVE_INIT_MICROPHONE = 1354,
1054  ERR_ADM_WIN_WAVE_INIT_PLAYOUT = 1355,
1063  ERR_ADM_WIN_WAVE_INIT_SPEAKER = 1356,
1072  ERR_ADM_WIN_WAVE_START_RECORDING = 1357,
1081  ERR_ADM_WIN_WAVE_START_PLAYOUT = 1358,
1085  ERR_ADM_NO_RECORDING_DEVICE = 1359,
1089  ERR_ADM_NO_PLAYOUT_DEVICE = 1360,
1090 
1091  // VDM error code starts from 1500
1095  ERR_VDM_CAMERA_NOT_AUTHORIZED = 1501,
1096 
1097  // VDM error code starts from 1500
1101  ERR_VDM_WIN_DEVICE_IN_USE = 1502,
1102 
1103  // VCM error code starts from 1600
1107  ERR_VCM_UNKNOWN_ERROR = 1600,
1112  ERR_VCM_ENCODER_INIT_ERROR = 1601,
1116  ERR_VCM_ENCODER_ENCODE_ERROR = 1602,
1120  ERR_VCM_ENCODER_SET_ERROR = 1603,
1121 };
1122 
1123 typedef const char* user_id_t;
1124 typedef void* view_t;
1125 
1129 struct UserInfo {
1139  bool hasAudio;
1145  bool hasVideo;
1146 
1147  UserInfo() : hasAudio(false), hasVideo(false) {}
1148 };
1149 
1150 typedef util::AList<UserInfo> UserList;
1151 
1152 // Shared between Agora Service and Rtc Engine
1153 namespace rtc {
1154 
1158 enum USER_OFFLINE_REASON_TYPE {
1162  USER_OFFLINE_QUIT = 0,
1168  USER_OFFLINE_DROPPED = 1,
1172  USER_OFFLINE_BECOME_AUDIENCE = 2,
1173 };
1174 
1175 enum INTERFACE_ID_TYPE {
1176  AGORA_IID_AUDIO_DEVICE_MANAGER = 1,
1177  AGORA_IID_VIDEO_DEVICE_MANAGER = 2,
1178  AGORA_IID_PARAMETER_ENGINE = 3,
1179  AGORA_IID_MEDIA_ENGINE = 4,
1180  AGORA_IID_AUDIO_ENGINE = 5,
1181  AGORA_IID_VIDEO_ENGINE = 6,
1182  AGORA_IID_RTC_CONNECTION = 7,
1183  AGORA_IID_SIGNALING_ENGINE = 8,
1184  AGORA_IID_MEDIA_ENGINE_REGULATOR = 9,
1185 };
1186 
1190 enum QUALITY_TYPE {
1195  QUALITY_UNKNOWN = 0,
1199  QUALITY_EXCELLENT = 1,
1204  QUALITY_GOOD = 2,
1208  QUALITY_POOR = 3,
1212  QUALITY_BAD = 4,
1216  QUALITY_VBAD = 5,
1220  QUALITY_DOWN = 6,
1224  QUALITY_UNSUPPORTED = 7,
1228  QUALITY_DETECTING
1229 };
1230 
1234 enum FIT_MODE_TYPE {
1239  MODE_COVER = 1,
1240 
1246  MODE_CONTAIN = 2,
1247 };
1248 
1252 enum VIDEO_ORIENTATION {
1256  VIDEO_ORIENTATION_0 = 0,
1260  VIDEO_ORIENTATION_90 = 90,
1264  VIDEO_ORIENTATION_180 = 180,
1268  VIDEO_ORIENTATION_270 = 270
1269 };
1270 
1274 enum FRAME_RATE {
1278  FRAME_RATE_FPS_1 = 1,
1282  FRAME_RATE_FPS_7 = 7,
1286  FRAME_RATE_FPS_10 = 10,
1290  FRAME_RATE_FPS_15 = 15,
1294  FRAME_RATE_FPS_24 = 24,
1298  FRAME_RATE_FPS_30 = 30,
1302  FRAME_RATE_FPS_60 = 60,
1303 };
1304 
1305 enum FRAME_WIDTH {
1306  FRAME_WIDTH_640 = 640,
1307 };
1308 
1309 enum FRAME_HEIGHT {
1310  FRAME_HEIGHT_360 = 360,
1311 };
1312 
1313 
1317 enum VIDEO_FRAME_TYPE {
1319  VIDEO_FRAME_TYPE_BLANK_FRAME = 0,
1321  VIDEO_FRAME_TYPE_KEY_FRAME = 3,
1323  VIDEO_FRAME_TYPE_DELTA_FRAME = 4,
1325  VIDEO_FRAME_TYPE_B_FRAME = 5,
1327  VIDEO_FRAME_TYPE_DROPPABLE_FRAME = 6,
1329  VIDEO_FRAME_TYPE_UNKNOW
1330 };
1331 
1335 enum ORIENTATION_MODE {
1343  ORIENTATION_MODE_ADAPTIVE = 0,
1351  ORIENTATION_MODE_FIXED_LANDSCAPE = 1,
1359  ORIENTATION_MODE_FIXED_PORTRAIT = 2,
1360 };
1361 
1365 enum DEGRADATION_PREFERENCE {
1369  MAINTAIN_QUALITY = 0,
1373  MAINTAIN_FRAMERATE = 1,
1377  MAINTAIN_BALANCED = 2,
1381  MAINTAIN_RESOLUTION = 3,
1385  DISABLED = 100,
1386 };
1387 
1395  int width;
1399  int height;
1400  VideoDimensions() : width(640), height(480) {}
1401  VideoDimensions(int w, int h) : width(w), height(h) {}
1402  bool operator==(const VideoDimensions& rhs) const {
1403  return width == rhs.width && height == rhs.height;
1404  }
1405 };
1406 
1416 const int STANDARD_BITRATE = 0;
1417 
1425 const int COMPATIBLE_BITRATE = -1;
1426 
1430 const int DEFAULT_MIN_BITRATE = -1;
1431 
1435 const int DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE = -2;
1436 
1440 enum VIDEO_CODEC_TYPE {
1444  VIDEO_CODEC_VP8 = 1,
1448  VIDEO_CODEC_H264 = 2,
1452  VIDEO_CODEC_H265 = 3,
1456  VIDEO_CODEC_VP9 = 5,
1460  VIDEO_CODEC_GENERIC = 6,
1464  VIDEO_CODEC_GENERIC_H264 = 7,
1468  VIDEO_CODEC_GENERIC_JPEG = 20,
1469 };
1470 
1474 enum AUDIO_CODEC_TYPE {
1478  AUDIO_CODEC_OPUS = 1,
1479  // kIsac = 2,
1483  AUDIO_CODEC_PCMA = 3,
1487  AUDIO_CODEC_PCMU = 4,
1491  AUDIO_CODEC_G722 = 5,
1492  // kIlbc = 6,
1494  // AUDIO_CODEC_AAC = 7,
1498  AUDIO_CODEC_AACLC = 8,
1502  AUDIO_CODEC_HEAAC = 9,
1506  AUDIO_CODEC_JC1 = 10,
1507  AUDIO_CODEC_HEAAC2 = 11,
1508 };
1509 
1513 enum AUDIO_ENCODING_TYPE {
1517  AUDIO_ENCODING_TYPE_AAC_16000_LOW = 0x010101,
1521  AUDIO_ENCODING_TYPE_AAC_16000_MEDIUM = 0x010102,
1525  AUDIO_ENCODING_TYPE_AAC_32000_LOW = 0x010201,
1529  AUDIO_ENCODING_TYPE_AAC_32000_MEDIUM = 0x010202,
1533  AUDIO_ENCODING_TYPE_AAC_32000_HIGH = 0x010203,
1537  AUDIO_ENCODING_TYPE_AAC_48000_MEDIUM = 0x010302,
1541  AUDIO_ENCODING_TYPE_AAC_48000_HIGH = 0x010303,
1542 
1546  AUDIO_ENCODING_TYPE_OPUS_16000_LOW = 0x020101,
1550  AUDIO_ENCODING_TYPE_OPUS_16000_MEDIUM = 0x020102,
1554  AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM = 0x020302,
1558  AUDIO_ENCODING_TYPE_OPUS_48000_HIGH = 0x020303,
1559 };
1560 
1564 enum WATERMARK_FIT_MODE {
1569  FIT_MODE_COVER_POSITION,
1574  FIT_MODE_USE_IMAGE_RATIO
1575 };
1576 
1582  : speech(true),
1583  sendEvenIfEmpty(true) {}
1584 
1590  bool speech;
1597 
1598 };
1599 
1605  : codec(AUDIO_CODEC_AACLC),
1606  sampleRateHz(0),
1607  samplesPerChannel(0),
1608  numberOfChannels(0) {}
1609 
1611  : codec(rhs.codec),
1619  AUDIO_CODEC_TYPE codec;
1638 };
1644 
1646  : sampleCount(rhs.sampleCount),
1647  samplesOut(rhs.samplesOut),
1649  ntpTimeMs(rhs.ntpTimeMs) {}
1650 
1654  size_t sampleCount;
1655 
1656  // Output
1660  size_t samplesOut;
1664  int64_t elapsedTimeMs;
1668  int64_t ntpTimeMs;
1669 };
1673 enum H264PacketizeMode {
1677  NonInterleaved = 0, // Mode 1 - STAP-A, FU-A is allowed
1681  SingleNalUnit, // Mode 0 - only single NALU allowed
1682 };
1683 
1687 enum VIDEO_STREAM_TYPE {
1691  VIDEO_STREAM_HIGH = 0,
1695  VIDEO_STREAM_LOW = 1,
1696 };
1697 
1703  : codecType(VIDEO_CODEC_H264),
1704  width(0),
1705  height(0),
1706  framesPerSecond(0),
1707  frameType(VIDEO_FRAME_TYPE_BLANK_FRAME),
1708  rotation(VIDEO_ORIENTATION_0),
1709  trackId(0),
1710  renderTimeMs(0),
1711  internalSendTs(0),
1712  uid(0),
1713  streamType(VIDEO_STREAM_HIGH) {}
1714 
1716  : codecType(rhs.codecType),
1717  width(rhs.width),
1718  height(rhs.height),
1720  frameType(rhs.frameType),
1721  rotation(rhs.rotation),
1722  trackId(rhs.trackId),
1725  uid(rhs.uid),
1726  streamType(rhs.streamType) {}
1730  VIDEO_CODEC_TYPE codecType;
1734  int width;
1738  int height;
1749  VIDEO_FRAME_TYPE frameType;
1753  VIDEO_ORIENTATION rotation;
1757  int trackId; // This can be reserved for multiple video tracks, we need to create different ssrc
1758  // and additional payload for later implementation.
1762  int64_t renderTimeMs;
1766  uint64_t internalSendTs;
1770  uid_t uid;
1774  VIDEO_STREAM_TYPE streamType;
1775 };
1776 
1780 enum VIDEO_MIRROR_MODE_TYPE {
1784  VIDEO_MIRROR_MODE_AUTO = 0,
1788  VIDEO_MIRROR_MODE_ENABLED = 1,
1792  VIDEO_MIRROR_MODE_DISABLED = 2,
1793 };
1794 
1802  VIDEO_CODEC_TYPE codecType;
1865  int bitrate;
1866 
1886  ORIENTATION_MODE orientationMode;
1891  DEGRADATION_PREFERENCE degradationPreference;
1892 
1896  VIDEO_MIRROR_MODE_TYPE mirrorMode;
1897 
1898  VideoEncoderConfiguration(const VideoDimensions& d, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED)
1899  : codecType(VIDEO_CODEC_H264),
1900  dimensions(d),
1901  frameRate(f),
1902  bitrate(b),
1903  minBitrate(DEFAULT_MIN_BITRATE),
1904  orientationMode(m),
1905  degradationPreference(MAINTAIN_QUALITY),
1906  mirrorMode(mirror) {}
1907  VideoEncoderConfiguration(int width, int height, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED)
1908  : codecType(VIDEO_CODEC_H264),
1909  dimensions(width, height),
1910  frameRate(f),
1911  bitrate(b),
1912  minBitrate(DEFAULT_MIN_BITRATE),
1913  orientationMode(m),
1914  degradationPreference(MAINTAIN_QUALITY),
1915  mirrorMode(mirror) {}
1916  VideoEncoderConfiguration(const VideoEncoderConfiguration& config)
1917  : codecType(config.codecType),
1918  dimensions(config.dimensions),
1919  frameRate(config.frameRate),
1920  bitrate(config.bitrate),
1921  minBitrate(config.minBitrate),
1924  mirrorMode(config.mirrorMode) {}
1925  VideoEncoderConfiguration()
1926  : codecType(VIDEO_CODEC_H264),
1927  dimensions(FRAME_WIDTH_640, FRAME_HEIGHT_360),
1928  frameRate(FRAME_RATE_FPS_15),
1929  bitrate(STANDARD_BITRATE),
1930  minBitrate(DEFAULT_MIN_BITRATE),
1931  orientationMode(ORIENTATION_MODE_ADAPTIVE),
1932  degradationPreference(MAINTAIN_QUALITY),
1933  mirrorMode(VIDEO_MIRROR_MODE_DISABLED) {}
1934 };
1935 
1944  bool ordered;
1945 };
1946 
1958  int bitrate;
1963  SimulcastStreamConfig() : dimensions(160, 120), bitrate(65), framerate(5) {}
1964  bool operator==(const SimulcastStreamConfig& rhs) const {
1965  return dimensions == rhs.dimensions && bitrate == rhs.bitrate && framerate == rhs.framerate;
1966  }
1967 };
1968 
1972 struct Rectangle {
1976  int x;
1980  int y;
1984  int width;
1988  int height;
1989 
1990  Rectangle() : x(0), y(0), width(0), height(0) {}
1991  Rectangle(int xx, int yy, int ww, int hh) : x(xx), y(yy), width(ww), height(hh) {}
1992 };
1993 
1999  float xRatio;
2003  float yRatio;
2007  float widthRatio;
2008 
2009  WatermarkRatio() : xRatio(0.0), yRatio(0.0), widthRatio(0.0) {}
2010  WatermarkRatio(float x, float y, float width) : xRatio(x), yRatio(y), widthRatio(width) {}
2011 };
2012 
2037  WATERMARK_FIT_MODE mode;
2038 
2040  : visibleInPreview(false)
2041  , positionInLandscapeMode(0, 0, 0, 0)
2042  , positionInPortraitMode(0, 0, 0, 0)
2043  , mode(FIT_MODE_COVER_POSITION)
2044  {}
2045 };
2046 
2050 struct RtcStats {
2054  unsigned int duration;
2058  unsigned int txBytes;
2062  unsigned int rxBytes;
2066  unsigned int txAudioBytes;
2070  unsigned int txVideoBytes;
2074  unsigned int rxAudioBytes;
2078  unsigned int rxVideoBytes;
2082  unsigned short txKBitRate;
2086  unsigned short rxKBitRate;
2090  unsigned short rxAudioKBitRate;
2094  unsigned short txAudioKBitRate;
2098  unsigned short rxVideoKBitRate;
2102  unsigned short txVideoKBitRate;
2106  unsigned short lastmileDelay;
2110  unsigned int userCount;
2114  double cpuAppUsage;
2189  RtcStats() :
2190  duration(0),
2191  txBytes(0),
2192  rxBytes(0),
2193  txAudioBytes(0),
2194  txVideoBytes(0),
2195  rxAudioBytes(0),
2196  rxVideoBytes(0),
2197  txKBitRate(0),
2198  rxKBitRate(0),
2199  rxAudioKBitRate(0),
2200  txAudioKBitRate(0),
2201  rxVideoKBitRate(0),
2202  txVideoKBitRate(0),
2203  lastmileDelay(0),
2204  userCount(0),
2205  cpuAppUsage(0.0),
2206  cpuTotalUsage(0.0),
2207  memoryAppUsageRatio(0.0),
2208  memoryTotalUsageRatio(0.0),
2210  connectTimeMs(0),
2220  txPacketLossRate(0),
2221  rxPacketLossRate(0) {}
2222 };
2223 
2227 enum VIDEO_SOURCE_TYPE {
2230  VIDEO_SOURCE_CAMERA_PRIMARY,
2231  VIDEO_SOURCE_CAMERA = VIDEO_SOURCE_CAMERA_PRIMARY,
2234  VIDEO_SOURCE_CAMERA_SECONDARY,
2237  VIDEO_SOURCE_SCREEN_PRIMARY,
2238  VIDEO_SOURCE_SCREEN = VIDEO_SOURCE_SCREEN_PRIMARY,
2241  VIDEO_SOURCE_SCREEN_SECONDARY,
2244  VIDEO_SOURCE_CUSTOM,
2247  VIDEO_SOURCE_MEDIA_PLAYER,
2250  VIDEO_SOURCE_RTC_IMAGE_PNG,
2253  VIDEO_SOURCE_RTC_IMAGE_JPEG,
2256  VIDEO_SOURCE_RTC_IMAGE_GIF,
2259  VIDEO_SOURCE_REMOTE,
2262  VIDEO_SOURCE_TRANSCODED,
2263 
2264  VIDEO_SOURCE_UNKNOWN = 100
2265 };
2266 
2270 enum CLIENT_ROLE_TYPE {
2274  CLIENT_ROLE_BROADCASTER = 1,
2278  CLIENT_ROLE_AUDIENCE = 2,
2279 };
2280 
2286 {
2290  uid_t uid;
2294  int quality;
2349  RemoteAudioStats() :
2350  uid(0),
2351  quality(0),
2353  jitterBufferDelay(0),
2354  audioLossRate(0),
2355  numChannels(0),
2356  receivedSampleRate(0),
2357  receivedBitrate(0),
2358  totalFrozenTime(0),
2359  frozenRate(0),
2360  mosValue(0) {}
2361 };
2362 
2366 enum AUDIO_PROFILE_TYPE {
2374  AUDIO_PROFILE_DEFAULT = 0,
2378  AUDIO_PROFILE_SPEECH_STANDARD = 1,
2382  AUDIO_PROFILE_MUSIC_STANDARD = 2,
2387  AUDIO_PROFILE_MUSIC_STANDARD_STEREO = 3,
2391  AUDIO_PROFILE_MUSIC_HIGH_QUALITY = 4,
2395  AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO = 5,
2399  AUDIO_PROFILE_IOT = 6,
2400  AUDIO_PROFILE_NUM = 7
2401 };
2402 
2406 enum AUDIO_SCENARIO_TYPE {
2410  AUDIO_SCENARIO_DEFAULT = 0,
2416  AUDIO_SCENARIO_GAME_STREAMING = 3,
2422  AUDIO_SCENARIO_CHATROOM = 5,
2426  AUDIO_SCENARIO_HIGH_DEFINITION = 6,
2430  AUDIO_SCENARIO_CHORUS = 7,
2434  AUDIO_SCENARIO_NUM = 8,
2435 };
2436 
2440 struct VideoFormat {
2441  OPTIONAL_ENUM_SIZE_T {
2443  kMaxWidthInPixels = 3840,
2445  kMaxHeightInPixels = 2160,
2447  kMaxFps = 60,
2448  };
2449 
2453  int width; // Number of pixels.
2457  int height; // Number of pixels.
2461  int fps;
2462  VideoFormat() : width(FRAME_WIDTH_640), height(FRAME_HEIGHT_360), fps(FRAME_RATE_FPS_15) {}
2463  VideoFormat(int w, int h, int f) : width(w), height(h), fps(f) {}
2464 };
2465 
2469 enum VIDEO_CONTENT_HINT {
2473  CONTENT_HINT_NONE,
2480  CONTENT_HINT_MOTION,
2486  CONTENT_HINT_DETAILS
2487 };
2488 
2492 enum LOCAL_AUDIO_STREAM_STATE {
2496  LOCAL_AUDIO_STREAM_STATE_STOPPED = 0,
2500  LOCAL_AUDIO_STREAM_STATE_RECORDING = 1,
2504  LOCAL_AUDIO_STREAM_STATE_ENCODING = 2,
2508  LOCAL_AUDIO_STREAM_STATE_FAILED = 3
2509 };
2510 
2514 enum LOCAL_AUDIO_STREAM_ERROR {
2518  LOCAL_AUDIO_STREAM_ERROR_OK = 0,
2522  LOCAL_AUDIO_STREAM_ERROR_FAILURE = 1,
2526  LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
2530  LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY = 3,
2535  LOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURE = 4,
2539  LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE = 5
2540 };
2541 
2544 enum LOCAL_VIDEO_STREAM_STATE {
2548  LOCAL_VIDEO_STREAM_STATE_STOPPED = 0,
2552  LOCAL_VIDEO_STREAM_STATE_CAPTURING = 1,
2556  LOCAL_VIDEO_STREAM_STATE_ENCODING = 2,
2560  LOCAL_VIDEO_STREAM_STATE_FAILED = 3
2561 };
2562 
2566 enum LOCAL_VIDEO_STREAM_ERROR {
2568  LOCAL_VIDEO_STREAM_ERROR_OK = 0,
2570  LOCAL_VIDEO_STREAM_ERROR_FAILURE = 1,
2572  LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
2574  LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY = 3,
2576  LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE = 4,
2578  LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE = 5,
2580  LOCAL_VIDEO_STREAM_ERROR_BACKGROUD = 6,
2582  LOCAL_VIDEO_STREAM_ERROR_MULTIPLE_FOREGROUND_APPS = 7,
2584  LOCAL_VIDEO_STREAM_ERROR_SYSTEM_PRESSURE = 8
2585 };
2586 
2590 enum REMOTE_AUDIO_STATE
2591 {
2598  REMOTE_AUDIO_STATE_STOPPED = 0, // Default state, audio is started or remote user disabled/muted audio stream
2602  REMOTE_AUDIO_STATE_STARTING = 1, // The first audio frame packet has been received
2609  REMOTE_AUDIO_STATE_DECODING = 2, // The first remote audio frame has been decoded or fronzen state ends
2614  REMOTE_AUDIO_STATE_FROZEN = 3, // Remote audio is frozen, probably due to network issue
2619  REMOTE_AUDIO_STATE_FAILED = 4, // Remote audio play failed
2620 };
2621 
2625 enum REMOTE_AUDIO_STATE_REASON
2626 {
2630  REMOTE_AUDIO_REASON_INTERNAL = 0,
2634  REMOTE_AUDIO_REASON_NETWORK_CONGESTION = 1,
2638  REMOTE_AUDIO_REASON_NETWORK_RECOVERY = 2,
2643  REMOTE_AUDIO_REASON_LOCAL_MUTED = 3,
2648  REMOTE_AUDIO_REASON_LOCAL_UNMUTED = 4,
2653  REMOTE_AUDIO_REASON_REMOTE_MUTED = 5,
2658  REMOTE_AUDIO_REASON_REMOTE_UNMUTED = 6,
2662  REMOTE_AUDIO_REASON_REMOTE_OFFLINE = 7,
2663 };
2664 
2666 enum REMOTE_VIDEO_STATE {
2672  REMOTE_VIDEO_STATE_STOPPED = 0,
2675  REMOTE_VIDEO_STATE_STARTING = 1,
2682  REMOTE_VIDEO_STATE_DECODING = 2,
2687  REMOTE_VIDEO_STATE_FROZEN = 3,
2691  REMOTE_VIDEO_STATE_FAILED = 4,
2692 };
2694 enum REMOTE_VIDEO_STATE_REASON {
2698  REMOTE_VIDEO_STATE_REASON_INTERNAL = 0,
2699 
2703  REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION = 1,
2704 
2708  REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY = 2,
2709 
2713  REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED = 3,
2714 
2718  REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED = 4,
2719 
2723  REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED = 5,
2724 
2728  REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED = 6,
2729 
2733  REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE = 7,
2734 
2738  REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK = 8,
2739 
2743  REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY = 9,
2744 
2748  REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_LOW = 10,
2752  REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_HIGH = 11,
2753 
2754 };
2755 
2761  VideoTrackInfo()
2762  : isLocal(false), ownerUid(0), trackId(0), channelId(OPTIONAL_NULLPTR)
2763  , streamType(VIDEO_STREAM_HIGH), codecType(VIDEO_CODEC_H264)
2764  , encodedFrameOnly(false), sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
2770  bool isLocal;
2774  uid_t ownerUid;
2775 
2779  track_id_t trackId;
2783  const char* channelId;
2787  VIDEO_STREAM_TYPE streamType;
2791  VIDEO_CODEC_TYPE codecType;
2801  VIDEO_SOURCE_TYPE sourceType;
2802 };
2803 
2807 enum REMOTE_VIDEO_DOWNSCALE_LEVEL {
2811  REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE,
2815  REMOTE_VIDEO_DOWNSCALE_LEVEL_1,
2819  REMOTE_VIDEO_DOWNSCALE_LEVEL_2,
2823  REMOTE_VIDEO_DOWNSCALE_LEVEL_3,
2827  REMOTE_VIDEO_DOWNSCALE_LEVEL_4,
2828 };
2829 
2837  uid_t uid;
2838  user_id_t userId;
2842  unsigned int volume; // [0,255]
2843 
2844  AudioVolumeInfo() : uid(0), userId(0), volume(0) {}
2845 };
2846 
2851  public:
2852  virtual ~IPacketObserver() {}
2856  struct Packet {
2860  const unsigned char* buffer;
2864  unsigned int size;
2865 
2866  Packet() : buffer(NULL), size(0) {}
2867  };
2875  virtual bool onSendAudioPacket(Packet& packet) = 0;
2883  virtual bool onSendVideoPacket(Packet& packet) = 0;
2891  virtual bool onReceiveAudioPacket(Packet& packet) = 0;
2899  virtual bool onReceiveVideoPacket(Packet& packet) = 0;
2900 };
2905  public:
2915  virtual bool OnEncodedVideoImageReceived(const uint8_t* imageBuffer, size_t length,
2916  const EncodedVideoFrameInfo& videoEncodedFrameInfo) = 0;
2917 
2918  virtual ~IVideoEncodedImageReceiver() {}
2919 };
2920 
2924 enum AUDIO_SAMPLE_RATE_TYPE {
2928  AUDIO_SAMPLE_RATE_32000 = 32000,
2932  AUDIO_SAMPLE_RATE_44100 = 44100,
2936  AUDIO_SAMPLE_RATE_48000 = 48000,
2937 };
2941 enum VIDEO_CODEC_PROFILE_TYPE {
2945  VIDEO_CODEC_PROFILE_BASELINE = 66,
2949  VIDEO_CODEC_PROFILE_MAIN = 77,
2953  VIDEO_CODEC_PROFILE_HIGH = 100,
2954 };
2955 
2959 enum AUDIO_CODEC_PROFILE_TYPE {
2963  AUDIO_CODEC_PROFILE_LC_AAC = 0,
2967  AUDIO_CODEC_PROFILE_HE_AAC = 1,
2968 };
2969 
2975 {
2992 };
2993 
2994 
2998 enum RTMP_STREAM_PUBLISH_STATE {
3005  RTMP_STREAM_PUBLISH_STATE_IDLE = 0,
3011  RTMP_STREAM_PUBLISH_STATE_CONNECTING = 1,
3016  RTMP_STREAM_PUBLISH_STATE_RUNNING = 2,
3026  RTMP_STREAM_PUBLISH_STATE_RECOVERING = 3,
3031  RTMP_STREAM_PUBLISH_STATE_FAILURE = 4,
3032 };
3033 
3037 enum RTMP_STREAM_PUBLISH_ERROR {
3041  RTMP_STREAM_PUBLISH_ERROR_FAILED = -1,
3045  RTMP_STREAM_PUBLISH_ERROR_OK = 0,
3051  RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT = 1,
3055  RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED = 2,
3060  RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT = 3,
3065  RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR = 4,
3069  RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR = 5,
3073  RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN = 6,
3077  RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT = 7,
3081  RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED = 8,
3085  RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND = 9,
3089  RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED = 10,
3094  RTMP_STREAM_PUBLISH_ERROR_CDN_ERROR = 11,
3098  RTMP_STREAM_PUBLISH_ERROR_ALREADY_IN_USE = 12,
3099 };
3100 
3103 typedef struct RtcImage {
3107  const char* url;
3112  int x;
3117  int y;
3121  int width;
3125  int height;
3129  int zOrder;
3130 
3131  RtcImage() : url(NULL), x(0), y(0), width(0), height(0), zOrder(0) {}
3132 } RtcImage;
3133 
3137 enum CONNECTION_STATE_TYPE
3138 {
3142  CONNECTION_STATE_DISCONNECTED = 1,
3146  CONNECTION_STATE_CONNECTING = 2,
3151  CONNECTION_STATE_CONNECTED = 3,
3156  CONNECTION_STATE_RECONNECTING = 4,
3160  CONNECTION_STATE_FAILED = 5,
3161 };
3162 
3170  uid_t uid;
3174  int x;
3178  int y;
3182  int width;
3186  int height;
3192  int zOrder;
3196  double alpha;
3213  TranscodingUser()
3214  : uid(0),
3215  x(0),
3216  y(0),
3217  width(0),
3218  height(0),
3219  zOrder(0),
3220  alpha(1.0),
3221  audioChannel(0) {}
3222 };
3223 
3234  int width;
3241  int height;
3266  VIDEO_CODEC_PROFILE_TYPE videoCodecProfile;
3271  unsigned int backgroundColor;
3275  unsigned int userCount;
3288  const char* metadata;
3301  unsigned int watermarkCount;
3313  unsigned int backgroundImageCount;
3317  AUDIO_SAMPLE_RATE_TYPE audioSampleRate;
3336  AUDIO_CODEC_PROFILE_TYPE audioCodecProfile;
3337 
3338  LiveTranscoding()
3339  : width(360),
3340  height(640),
3341  videoBitrate(400),
3342  videoFramerate(15),
3343  lowLatency(false),
3344  videoGop(30),
3345  videoCodecProfile(VIDEO_CODEC_PROFILE_HIGH),
3346  backgroundColor(0x000000),
3347  userCount(0),
3348  transcodingUsers(NULL),
3349  transcodingExtraInfo(NULL),
3350  metadata(NULL),
3351  watermark(NULL),
3352  watermarkCount(0),
3353  backgroundImage(NULL),
3355  audioSampleRate(AUDIO_SAMPLE_RATE_48000),
3356  audioBitrate(48),
3357  audioChannels(1),
3358  audioCodecProfile(AUDIO_CODEC_PROFILE_LC_AAC) {}
3359 };
3360 
3368  VIDEO_SOURCE_TYPE sourceType;
3376  const char* imageUrl;
3380  int x;
3384  int y;
3388  int width;
3392  int height;
3398  int zOrder;
3402  double alpha;
3406  bool mirror;
3407 
3409  : sourceType(VIDEO_SOURCE_CAMERA_PRIMARY),
3410  remoteUserUid(0),
3411  imageUrl(NULL),
3412  x(0),
3413  y(0),
3414  width(0),
3415  height(0),
3416  zOrder(0),
3417  alpha(1.0),
3418  mirror(false) {}
3419 };
3420 
3421 
3429  unsigned int streamCount;
3438 
3440  : streamCount(0),
3441  VideoInputStreams(NULL),
3443 };
3444 
3473 };
3474 
3478 enum LASTMILE_PROBE_RESULT_STATE {
3482  LASTMILE_PROBE_RESULT_COMPLETE = 1,
3487  LASTMILE_PROBE_RESULT_INCOMPLETE_NO_BWE = 2,
3492  LASTMILE_PROBE_RESULT_UNAVAILABLE = 3
3493 };
3494 
3503  unsigned int packetLossRate;
3507  unsigned int jitter;
3511  unsigned int availableBandwidth;
3512 
3514  jitter(0),
3515  availableBandwidth(0) {}
3516 };
3517 
3526  LASTMILE_PROBE_RESULT_STATE state;
3538  unsigned int rtt;
3539 
3540  LastmileProbeResult() : state(LASTMILE_PROBE_RESULT_UNAVAILABLE),
3541  rtt(0) {}
3542 };
3543 
3547 enum CONNECTION_CHANGED_REASON_TYPE
3548 {
3552  CONNECTION_CHANGED_CONNECTING = 0,
3556  CONNECTION_CHANGED_JOIN_SUCCESS = 1,
3560  CONNECTION_CHANGED_INTERRUPTED = 2,
3564  CONNECTION_CHANGED_BANNED_BY_SERVER = 3,
3568  CONNECTION_CHANGED_JOIN_FAILED = 4,
3572  CONNECTION_CHANGED_LEAVE_CHANNEL = 5,
3576  CONNECTION_CHANGED_INVALID_APP_ID = 6,
3580  CONNECTION_CHANGED_INVALID_CHANNEL_NAME = 7,
3584  CONNECTION_CHANGED_INVALID_TOKEN = 8,
3588  CONNECTION_CHANGED_TOKEN_EXPIRED = 9,
3592  CONNECTION_CHANGED_REJECTED_BY_SERVER = 10,
3596  CONNECTION_CHANGED_SETTING_PROXY_SERVER = 11,
3600  CONNECTION_CHANGED_RENEW_TOKEN = 12,
3605  CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED = 13,
3609  CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT = 14,
3613  CONNECTION_CHANGED_REJOIN_SUCCESS = 15,
3617  CONNECTION_CHANGED_LOST = 16,
3621  CONNECTION_CHANGED_ECHO_TEST = 17,
3625  CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED_BY_USER = 18,
3626 };
3627 
3631 enum NETWORK_TYPE {
3635  NETWORK_TYPE_UNKNOWN = -1,
3639  NETWORK_TYPE_DISCONNECTED = 0,
3643  NETWORK_TYPE_LAN = 1,
3647  NETWORK_TYPE_WIFI = 2,
3651  NETWORK_TYPE_MOBILE_2G = 3,
3655  NETWORK_TYPE_MOBILE_3G = 4,
3659  NETWORK_TYPE_MOBILE_4G = 5,
3660 };
3661 
3665 struct VideoCanvas {
3669  view_t view;
3673  media::base::RENDER_MODE_TYPE renderMode;
3677  VIDEO_MIRROR_MODE_TYPE mirrorMode;
3681  uid_t uid;
3682  bool isScreenView;
3683 
3684  void* priv; // private data (underlying video engine denotes it)
3685 
3686  size_t priv_size;
3687 
3688  VIDEO_SOURCE_TYPE sourceType;
3689 
3690  VideoCanvas() : view(NULL), renderMode(media::base::RENDER_MODE_HIDDEN), mirrorMode(VIDEO_MIRROR_MODE_AUTO),
3691  uid(0), isScreenView(false), priv(NULL), priv_size(0), sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3692  VideoCanvas(view_t v, media::base::RENDER_MODE_TYPE m, VIDEO_MIRROR_MODE_TYPE mt, uid_t u)
3693  : view(v), renderMode(m), mirrorMode(mt), uid(u), isScreenView(false), priv(NULL), priv_size(0),
3694  sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3695  VideoCanvas(view_t v, media::base::RENDER_MODE_TYPE m, VIDEO_MIRROR_MODE_TYPE mt, user_id_t)
3696  : view(v), renderMode(m), mirrorMode(mt), uid(0), isScreenView(false), priv(NULL), priv_size(0),
3697  sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3698 };
3699 
3700 
3713  };
3714 
3718 
3721 
3725 
3729 
3733 
3734  BeautyOptions(LIGHTENING_CONTRAST_LEVEL contrastLevel, float lightening, float smoothness, float redness, float sharpness) : lighteningContrastLevel(contrastLevel), lighteningLevel(lightening), smoothnessLevel(smoothness), rednessLevel(redness), sharpnessLevel(sharpness) {}
3735 
3737 };
3738 
3758 enum VOICE_BEAUTIFIER_PRESET {
3761  VOICE_BEAUTIFIER_OFF = 0x00000000,
3767  CHAT_BEAUTIFIER_MAGNETIC = 0x01010100,
3773  CHAT_BEAUTIFIER_FRESH = 0x01010200,
3779  CHAT_BEAUTIFIER_VITALITY = 0x01010300,
3793  SINGING_BEAUTIFIER = 0x01020100,
3796  TIMBRE_TRANSFORMATION_VIGOROUS = 0x01030100,
3799  TIMBRE_TRANSFORMATION_DEEP = 0x01030200,
3802  TIMBRE_TRANSFORMATION_MELLOW = 0x01030300,
3805  TIMBRE_TRANSFORMATION_FALSETTO = 0x01030400,
3808  TIMBRE_TRANSFORMATION_FULL = 0x01030500,
3811  TIMBRE_TRANSFORMATION_CLEAR = 0x01030600,
3814  TIMBRE_TRANSFORMATION_RESOUNDING = 0x01030700,
3817  TIMBRE_TRANSFORMATION_RINGING = 0x01030800
3818 };
3819 
3822 enum AUDIO_EFFECT_PRESET {
3825  AUDIO_EFFECT_OFF = 0x00000000,
3833  ROOM_ACOUSTICS_KTV = 0x02010100,
3841  ROOM_ACOUSTICS_VOCAL_CONCERT = 0x02010200,
3849  ROOM_ACOUSTICS_STUDIO = 0x02010300,
3857  ROOM_ACOUSTICS_PHONOGRAPH = 0x02010400,
3864  ROOM_ACOUSTICS_VIRTUAL_STEREO = 0x02010500,
3872  ROOM_ACOUSTICS_SPACIAL = 0x02010600,
3880  ROOM_ACOUSTICS_ETHEREAL = 0x02010700,
3892  ROOM_ACOUSTICS_3D_VOICE = 0x02010800,
3903  VOICE_CHANGER_EFFECT_UNCLE = 0x02020100,
3914  VOICE_CHANGER_EFFECT_OLDMAN = 0x02020200,
3925  VOICE_CHANGER_EFFECT_BOY = 0x02020300,
3936  VOICE_CHANGER_EFFECT_SISTER = 0x02020400,
3947  VOICE_CHANGER_EFFECT_GIRL = 0x02020500,
3956  VOICE_CHANGER_EFFECT_PIGKING = 0x02020600,
3964  VOICE_CHANGER_EFFECT_HULK = 0x02020700,
3972  STYLE_TRANSFORMATION_RNB = 0x02030100,
3980  STYLE_TRANSFORMATION_POPULAR = 0x02030200,
3990  PITCH_CORRECTION = 0x02040100
3991 
3995 };
3996 
3999 enum VOICE_CONVERSION_PRESET {
4002  VOICE_CONVERSION_OFF = 0x00000000,
4005  VOICE_CHANGER_NEUTRAL = 0x03010100,
4008  VOICE_CHANGER_SWEET = 0x03010200,
4011  VOICE_CHANGER_SOLID = 0x03010300,
4014  VOICE_CHANGER_BASS = 0x03010400
4015 };
4016 
4017 // TODO(ZYH), it will be deleted after the new interfaces have been implemented to replace it.
4018 enum AUDIO_REVERB_PRESET {
4022  AUDIO_REVERB_OFF = 0, // Turn off audio reverb
4026  AUDIO_REVERB_FX_KTV = 0x02010100,
4030  AUDIO_REVERB_FX_VOCAL_CONCERT = 0x02010200,
4034  AUDIO_REVERB_FX_UNCLE = 0x02020100,
4038  AUDIO_REVERB_FX_SISTER = 0x02020400,
4042  AUDIO_REVERB_FX_STUDIO = 0x02010300,
4046  AUDIO_REVERB_FX_POPULAR = 0x02030200,
4050  AUDIO_REVERB_FX_RNB = 0x02030100,
4054  AUDIO_REVERB_FX_PHONOGRAPH = 0x02010400
4055 };
4056 
4075  int bitrate;
4095 
4097  : dimensions(1920, 1080), frameRate(5), bitrate(STANDARD_BITRATE), captureMouseCursor(true), windowFocus(false), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0) {}
4098  ScreenCaptureParameters(const VideoDimensions& d, int f, int b)
4099  : dimensions(d), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0) {}
4100  ScreenCaptureParameters(int width, int height, int f, int b)
4101  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0) {}
4102  ScreenCaptureParameters(int width, int height, int f, int b, bool cur, bool fcs)
4103  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(cur), windowFocus(fcs), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0) {}
4104  ScreenCaptureParameters(int width, int height, int f, int b, view_t *ex, int cnt)
4105  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false), excludeWindowList(ex), excludeWindowCount(cnt) {}
4106  ScreenCaptureParameters(int width, int height, int f, int b, bool cur, bool fcs, view_t *ex, int cnt)
4107  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(cur), windowFocus(fcs), excludeWindowList(ex), excludeWindowCount(cnt) {}
4108 };
4109 
4113 enum AUDIO_RECORDING_QUALITY_TYPE {
4117  AUDIO_RECORDING_QUALITY_LOW = 0,
4121  AUDIO_RECORDING_QUALITY_MEDIUM = 1,
4125  AUDIO_RECORDING_QUALITY_HIGH = 2,
4126 };
4127 
4131 enum AUDIO_FILE_RECORDING_TYPE {
4135  AUDIO_FILE_RECORDING_MIC = 1,
4139  AUDIO_FILE_RECORDING_PLAYBACK = 2,
4143  AUDIO_FILE_RECORDING_MIXED = 3,
4144 };
4145 
4149 enum AUDIO_ENCODED_FRAME_OBSERVER_POSITION {
4153  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_RECORD = 1,
4157  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK = 2,
4161  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED = 3,
4162 };
4163 
4172  const char* filePath;
4178  bool encode;
4187  AUDIO_FILE_RECORDING_TYPE fileRecordingType;
4191  AUDIO_RECORDING_QUALITY_TYPE quality;
4192 
4194  : filePath(NULL),
4195  encode(false),
4196  sampleRate(32000),
4197  fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
4198  quality(AUDIO_RECORDING_QUALITY_LOW) {}
4199 
4200  AudioFileRecordingConfig(const char* file_path, int sample_rate, AUDIO_RECORDING_QUALITY_TYPE quality_type)
4201  : filePath(file_path),
4202  encode(false),
4203  sampleRate(sample_rate),
4204  fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
4205  quality(quality_type) {}
4206 
4207  AudioFileRecordingConfig(const char* file_path, bool enc, int sample_rate, AUDIO_FILE_RECORDING_TYPE type, AUDIO_RECORDING_QUALITY_TYPE quality_type)
4208  : filePath(file_path),
4209  encode(enc),
4210  sampleRate(sample_rate),
4211  fileRecordingType(type),
4212  quality(quality_type) {}
4213 
4214  AudioFileRecordingConfig(const AudioFileRecordingConfig &rhs)
4215  : filePath(rhs.filePath),
4216  encode(rhs.encode),
4217  sampleRate(rhs.sampleRate),
4219  quality(rhs.quality) {}
4220 };
4221 
4230  AUDIO_ENCODED_FRAME_OBSERVER_POSITION postionType;
4234  AUDIO_ENCODING_TYPE encodingType;
4235 
4237  : postionType(AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK),
4238  encodingType(AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM){}
4239 
4240 };
4241 
4243 public:
4251 virtual void OnRecordAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4252 
4260 virtual void OnPlaybackAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4261 
4269 virtual void OnMixedAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4270 
4271 virtual ~IAudioEncodedFrameObserver () {}
4272 };
4273 
4277 enum VOICE_CHANGER_PRESET {
4281  VOICE_CHANGER_OFF = 0, //Turn off the voice changer
4285  VOICE_CHANGER_OLDMAN = 0x02020200,
4289  VOICE_CHANGER_BABYBOY = 0x02020300,
4293  VOICE_CHANGER_BABYGIRL = 0x02020500,
4298  VOICE_CHANGER_ZHUBAJIE = 0x02020600,
4302  VOICE_CHANGER_ETHEREAL = 0x02010700,
4306  VOICE_CHANGER_HULK = 0x02020700,
4310  VOICE_BEAUTY_VIGOROUS = 0x01030100,
4314  VOICE_BEAUTY_DEEP = 0x01030200,
4318  VOICE_BEAUTY_MELLOW = 0x01030300,
4322  VOICE_BEAUTY_FALSETTO = 0x01030400,
4326  VOICE_BEAUTY_FULL = 0x01030500,
4330  VOICE_BEAUTY_CLEAR = 0x01030600,
4334  VOICE_BEAUTY_RESOUNDING = 0x01030700,
4338  VOICE_BEAUTY_RINGING = 0x01030800,
4342  VOICE_BEAUTY_SPACIAL = 0x02010600,
4347  GENERAL_BEAUTY_VOICE_MALE = 0x01010100,
4352  GENERAL_BEAUTY_VOICE_FEMALE_FRESH = 0x01010200,
4357  GENERAL_BEAUTY_VOICE_FEMALE_VITALITY = 0x01010300
4358 };
4361 enum AREA_CODE {
4365  AREA_CODE_CN = 0x00000001,
4369  AREA_CODE_NA = 0x00000002,
4373  AREA_CODE_EU = 0x00000004,
4377  AREA_CODE_AS = 0x00000008,
4381  AREA_CODE_JP = 0x00000010,
4385  AREA_CODE_IN = 0x00000020,
4389  AREA_CODE_GLOB = (0xFFFFFFFF)
4390 };
4391 
4392 enum AREA_CODE_EX {
4396  AREA_CODE_OC = 0x00000040,
4400  AREA_CODE_SA = 0x00000080,
4404  AREA_CODE_AF = 0x00000100,
4408  AREA_CODE_OVS = 0xFFFFFFFE
4409 };
4410 
4411 enum CHANNEL_MEDIA_RELAY_ERROR {
4414  RELAY_OK = 0,
4417  RELAY_ERROR_SERVER_ERROR_RESPONSE = 1,
4422  RELAY_ERROR_SERVER_NO_RESPONSE = 2,
4426  RELAY_ERROR_NO_RESOURCE_AVAILABLE = 3,
4429  RELAY_ERROR_FAILED_JOIN_SRC = 4,
4432  RELAY_ERROR_FAILED_JOIN_DEST = 5,
4435  RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC = 6,
4438  RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST = 7,
4443  RELAY_ERROR_SERVER_CONNECTION_LOST = 8,
4446  RELAY_ERROR_INTERNAL_ERROR = 9,
4449  RELAY_ERROR_SRC_TOKEN_EXPIRED = 10,
4452  RELAY_ERROR_DEST_TOKEN_EXPIRED = 11,
4453 };
4454 
4455 //callback event
4456 enum CHANNEL_MEDIA_RELAY_EVENT {
4460  RELAY_EVENT_NETWORK_DISCONNECTED = 0,
4463  RELAY_EVENT_NETWORK_CONNECTED = 1,
4466  RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL = 2,
4469  RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL = 3,
4472  RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL = 4,
4475  RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC = 5,
4478  RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC = 6,
4481  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL = 7,
4484  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED = 8,
4488  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE = 9,
4491  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL = 10,
4494  RELAY_EVENT_VIDEO_PROFILE_UPDATE = 11,
4495 };
4496 
4497 enum CHANNEL_MEDIA_RELAY_STATE {
4500  RELAY_STATE_IDLE = 0,
4503  RELAY_STATE_CONNECTING = 1,
4507  RELAY_STATE_RUNNING = 2,
4510  RELAY_STATE_FAILURE = 3,
4511 };
4512 
4519  const char* channelName;
4523  const char* token;
4526  uid_t uid;
4527 };
4528 
4557 
4559  : srcInfo(NULL)
4560  , destInfos(NULL)
4561  , destCount(0)
4562  {}
4563 };
4564 
4573 
4575 
4576  bool operator==(const UplinkNetworkInfo& rhs) const {
4578  }
4579 };
4580 
4589  const char* uid;
4593  VIDEO_STREAM_TYPE stream_type;
4597  REMOTE_VIDEO_DOWNSCALE_LEVEL current_downscale_level;
4602 
4604  : uid(OPTIONAL_NULLPTR),
4605  stream_type(VIDEO_STREAM_HIGH),
4606  current_downscale_level(REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE),
4607  expected_bitrate_bps(-1) {}
4608 
4609  PeerDownlinkInfo& operator=(const PeerDownlinkInfo& rhs) {
4610  if (this == &rhs) return *this;
4611  uid = OPTIONAL_NULLPTR;
4612  stream_type = rhs.stream_type;
4615  if (rhs.uid != OPTIONAL_NULLPTR) {
4616  char* temp = new char[strlen(rhs.uid) + 1];
4617  strcpy(temp, rhs.uid);
4618  uid = temp;
4619  }
4620  return *this;
4621  }
4622 
4623  ~PeerDownlinkInfo() {
4624  if (uid) delete [] uid;
4625  }
4626  };
4627 
4648 
4653  peer_downlink_info(OPTIONAL_NULLPTR),
4655 
4660  peer_downlink_info(OPTIONAL_NULLPTR),
4662  if (total_received_video_count <= 0) return;
4663  peer_downlink_info = new PeerDownlinkInfo[total_received_video_count];
4664  for (int i = 0; i < total_received_video_count; ++i)
4666  }
4667 
4668  DownlinkNetworkInfo& operator=(const DownlinkNetworkInfo& rhs) {
4669  if (this == &rhs) return *this;
4670  lastmile_buffer_delay_time_ms = rhs.lastmile_buffer_delay_time_ms;
4671  bandwidth_estimation_bps = rhs.bandwidth_estimation_bps;
4672  total_downscale_level_count = rhs.total_downscale_level_count;
4673  peer_downlink_info = OPTIONAL_NULLPTR;
4674  total_received_video_count = rhs.total_received_video_count;
4675  if (total_received_video_count > 0) {
4676  peer_downlink_info = new PeerDownlinkInfo[total_received_video_count];
4677  for (int i = 0; i < total_received_video_count; ++i)
4678  peer_downlink_info[i] = rhs.peer_downlink_info[i];
4679  }
4680  return *this;
4681  }
4682 
4683  ~DownlinkNetworkInfo() {
4684  if (peer_downlink_info) delete [] peer_downlink_info;
4685  }
4686 };
4687 
4690 enum ENCRYPTION_MODE {
4693  SM4_128_ECB = 4,
4696  AES_128_GCM2 = 7,
4699  AES_256_GCM2 = 8,
4702  MODE_END,
4703 };
4704 
4710  ENCRYPTION_MODE encryptionMode;
4716  const char* encryptionKey;
4717  uint8_t encryptionKdfSalt[32];
4718 
4720  : encryptionMode(AES_128_GCM2),
4721  encryptionKey(NULL)
4722  {
4723  memset(encryptionKdfSalt, 0, sizeof(encryptionKdfSalt));
4724  }
4725 
4727  const char* getEncryptionString() const {
4728  switch(encryptionMode) {
4729  case SM4_128_ECB:
4730  return "sm4-128-ecb";
4731  case AES_128_GCM2:
4732  return "aes-128-gcm";
4733  case AES_256_GCM2:
4734  return "aes-256-gcm";
4735  default:
4736  return "aes-128-gcm";
4737  }
4738  return "aes-128-gcm";
4739  }
4741 };
4742 
4745 enum ENCRYPTION_ERROR_TYPE {
4746  ENCRYPTION_ERROR_INTERNAL_FAILURE = 0,
4747  ENCRYPTION_ERROR_DECRYPTION_FAILURE = 1,
4748  ENCRYPTION_ERROR_ENCRYPTION_FAILURE = 2,
4749 };
4750 
4753 enum PERMISSION_TYPE {
4754  RECORD_AUDIO = 0,
4755  CAMERA = 1,
4756 };
4757 
4760 enum MAX_USER_ACCOUNT_LENGTH_TYPE
4761 {
4764  MAX_USER_ACCOUNT_LENGTH = 256
4765 };
4766 
4770 enum STREAM_SUBSCRIBE_STATE {
4771  SUB_STATE_IDLE = 0,
4772  SUB_STATE_NO_SUBSCRIBED = 1,
4773  SUB_STATE_SUBSCRIBING = 2,
4774  SUB_STATE_SUBSCRIBED = 3
4775 };
4776 
4780 enum STREAM_PUBLISH_STATE {
4781  PUB_STATE_IDLE = 0,
4782  PUB_STATE_NO_PUBLISHED = 1,
4783  PUB_STATE_PUBLISHING = 2,
4784  PUB_STATE_PUBLISHED = 3
4785 };
4786 
4790 struct UserInfo {
4794  uid_t uid;
4798  char userAccount[MAX_USER_ACCOUNT_LENGTH];
4799  UserInfo()
4800  : uid(0) {
4801  userAccount[0] = '\0';
4802  }
4803 };
4804 
4808 enum EAR_MONITORING_FILTER_TYPE {
4812  EAR_MONITORING_FILTER_NONE = (1<<0),
4816  EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS = (1<<1),
4820  EAR_MONITORING_FILTER_NOISE_SUPPRESSION = (1<<2)
4821 };
4822 
4823 } // namespace rtc
4824 
4825 namespace base {
4826 
4828  public:
4829  virtual int queryInterface(rtc::INTERFACE_ID_TYPE iid, void** inter) = 0;
4830  virtual ~IEngineBase() {}
4831 };
4832 
4833 class AParameter : public agora::util::AutoPtr<IAgoraParameter> {
4834  public:
4835  AParameter(IEngineBase& engine) { initialize(&engine); }
4836  AParameter(IEngineBase* engine) { initialize(engine); }
4838 
4839  private:
4840  bool initialize(IEngineBase* engine) {
4841  IAgoraParameter* p = NULL;
4842  if (engine && !engine->queryInterface(rtc::AGORA_IID_PARAMETER_ENGINE, (void**)&p)) reset(p);
4843  return p != NULL;
4844  }
4845 };
4846 
4848  public:
4849  virtual ~LicenseCallback() {}
4850  virtual void onCertificateRequired() = 0;
4851  virtual void onLicenseRequest() = 0;
4852  virtual void onLicenseValidated() = 0;
4853  virtual void onLicenseError(int result) = 0;
4854 };
4855 
4856 } // namespace base
4857 
4858 } // namespace agora
4859 
4865 AGORA_API const char* AGORA_CALL getAgoraSdkVersion(int* build);
4866 
4872 AGORA_API const char* AGORA_CALL getAgoraSdkErrorDescription(int err);
4873 
4874 AGORA_API int AGORA_CALL setAgoraSdkExternalSymbolLoader(void* (*func)(const char* symname));
4875 
4883 AGORA_API int AGORA_CALL createAgoraCredential(agora::util::AString &credential);
4884 
4898 AGORA_API int AGORA_CALL getAgoraCertificateVerifyResult(const char *credential_buf, int credential_len,
4899  const char *certificate_buf, int certificate_len);
4900 
4909 AGORA_API void setAgoraLicenseCallback(agora::base::LicenseCallback *callback);
4910 
4919 AGORA_API agora::base::LicenseCallback* getAgoraLicenseCallback();
agora::rtc::LiveTranscoding::transcodingUsers
TranscodingUser * transcodingUsers
Definition: AgoraBase.h:3279
agora::rtc::IPacketObserver::onReceiveVideoPacket
virtual bool onReceiveVideoPacket(Packet &packet)=0
agora::rtc::AudioFileRecordingConfig::quality
AUDIO_RECORDING_QUALITY_TYPE quality
Definition: AgoraBase.h:4191
agora::rtc::RtcImage::width
int width
Definition: AgoraBase.h:3121
agora::rtc::TranscodingVideoStream::zOrder
int zOrder
Definition: AgoraBase.h:3398
agora::rtc::RtcStats::firstAudioPacketDuration
int firstAudioPacketDuration
Definition: AgoraBase.h:2140
agora::rtc::UserInfo
Definition: AgoraBase.h:4790
agora::rtc::TranscodingVideoStream::alpha
double alpha
Definition: AgoraBase.h:3402
agora::rtc::VideoEncoderConfiguration::degradationPreference
DEGRADATION_PREFERENCE degradationPreference
Definition: AgoraBase.h:1891
agora::rtc::LastmileProbeResult
Definition: AgoraBase.h:3522
agora::rtc::AudioEncodedFrameObserverConfig
Definition: AgoraBase.h:4226
agora::rtc::ScreenCaptureParameters
Definition: AgoraBase.h:4060
agora::rtc::WatermarkRatio
Definition: AgoraBase.h:1995
agora::rtc::AudioVolumeInfo
Definition: AgoraBase.h:2833
agora::rtc::LastmileProbeResult::uplinkReport
LastmileProbeOneWayResult uplinkReport
Definition: AgoraBase.h:3530
agora::rtc::EncodedVideoFrameInfo::rotation
VIDEO_ORIENTATION rotation
Definition: AgoraBase.h:1753
agora::rtc::BeautyOptions
Definition: AgoraBase.h:3703
agora::rtc::ScreenCaptureParameters::bitrate
int bitrate
Definition: AgoraBase.h:4075
agora::rtc::BeautyOptions::lighteningLevel
float lighteningLevel
Definition: AgoraBase.h:3720
agora::rtc::RtcStats::txVideoBytes
unsigned int txVideoBytes
Definition: AgoraBase.h:2070
agora::rtc::LiveTranscoding::backgroundColor
unsigned int backgroundColor
Definition: AgoraBase.h:3271
agora::base::IAgoraParameter
Definition: IAgoraParameter.h:176
agora::rtc::LastmileProbeConfig
Definition: AgoraBase.h:3448
agora::rtc::TranscodingUser::y
int y
Definition: AgoraBase.h:3178
agora::rtc::RtcStats::rxKBitRate
unsigned short rxKBitRate
Definition: AgoraBase.h:2086
agora::rtc::RtcStats::memoryTotalUsageRatio
double memoryTotalUsageRatio
Definition: AgoraBase.h:2126
agora::rtc::VideoFormat::fps
int fps
Definition: AgoraBase.h:2461
agora::rtc::VideoEncoderConfiguration::minBitrate
int minBitrate
Definition: AgoraBase.h:1882
agora::rtc::TranscodingUser::audioChannel
int audioChannel
Definition: AgoraBase.h:3212
agora::rtc::RtcStats::firstAudioPacketDurationAfterUnmute
int firstAudioPacketDurationAfterUnmute
Definition: AgoraBase.h:2160
agora::rtc::VideoFormat::width
int width
Definition: AgoraBase.h:2453
agora::rtc::ScreenCaptureParameters::windowFocus
bool windowFocus
Definition: AgoraBase.h:4086
agora::rtc::AudioEncodedFrameObserverConfig::encodingType
AUDIO_ENCODING_TYPE encodingType
Definition: AgoraBase.h:4234
agora::rtc::EncodedAudioFrameInfo::codec
AUDIO_CODEC_TYPE codec
Definition: AgoraBase.h:1619
agora::rtc::AudioPcmDataInfo::sampleCount
size_t sampleCount
Definition: AgoraBase.h:1654
agora::rtc::LiveTranscoding::videoGop
int videoGop
Definition: AgoraBase.h:3262
agora::rtc::ChannelMediaRelayConfiguration::destCount
int destCount
Definition: AgoraBase.h:4556
agora::rtc::LastmileProbeOneWayResult::jitter
unsigned int jitter
Definition: AgoraBase.h:3507
agora::rtc::BeautyOptions::smoothnessLevel
float smoothnessLevel
Definition: AgoraBase.h:3724
agora::rtc::VideoCanvas::mirrorMode
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:3677
agora::rtc::RtcStats::duration
unsigned int duration
Definition: AgoraBase.h:2054
agora::rtc::SimulcastStreamConfig::framerate
int framerate
Definition: AgoraBase.h:1962
agora::rtc::VideoDimensions::height
int height
Definition: AgoraBase.h:1399
agora::rtc::LastmileProbeConfig::probeUplink
bool probeUplink
Definition: AgoraBase.h:3455
agora::rtc::LiveTranscoding
Definition: AgoraBase.h:3227
agora::rtc::RtcStats::txBytes
unsigned int txBytes
Definition: AgoraBase.h:2058
agora::rtc::VideoFormat::height
int height
Definition: AgoraBase.h:2457
agora::rtc::Rectangle
Definition: AgoraBase.h:1972
agora::rtc::VideoCanvas::uid
uid_t uid
Definition: AgoraBase.h:3681
agora::rtc::RtcStats::firstVideoPacketDuration
int firstVideoPacketDuration
Definition: AgoraBase.h:2145
agora::rtc::EncodedVideoFrameInfo
Definition: AgoraBase.h:1701
agora::rtc::BeautyOptions::rednessLevel
float rednessLevel
Definition: AgoraBase.h:3728
agora::rtc::RtcStats::rxVideoBytes
unsigned int rxVideoBytes
Definition: AgoraBase.h:2078
agora::rtc::TranscodingVideoStream::remoteUserUid
uid_t remoteUserUid
Definition: AgoraBase.h:3372
agora::rtc::RemoteAudioStats::networkTransportDelay
int networkTransportDelay
Definition: AgoraBase.h:2298
agora::rtc::VideoEncoderConfiguration::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:1806
agora::rtc::EncodedVideoFrameInfo::uid
uid_t uid
Definition: AgoraBase.h:1770
agora::rtc::IAudioEncodedFrameObserver::OnPlaybackAudioEncodedFrame
virtual void OnPlaybackAudioEncodedFrame(const uint8_t *frameBuffer, int length, const EncodedAudioFrameInfo &audioEncodedFrameInfo)=0
agora::rtc::EncodedAudioFrameInfo
Definition: AgoraBase.h:1603
agora::util::AutoPtr
Definition: AgoraBase.h:99
agora::rtc::LastmileProbeOneWayResult::packetLossRate
unsigned int packetLossRate
Definition: AgoraBase.h:3503
agora::UserInfo::hasAudio
bool hasAudio
Definition: AgoraBase.h:1139
agora::rtc::ScreenCaptureParameters::excludeWindowCount
int excludeWindowCount
Definition: AgoraBase.h:4094
agora::rtc::IPacketObserver::Packet
Definition: AgoraBase.h:2856
agora::rtc::LiveTranscoding::audioCodecProfile
AUDIO_CODEC_PROFILE_TYPE audioCodecProfile
Definition: AgoraBase.h:3336
agora::rtc::RemoteAudioStats::receivedBitrate
int receivedBitrate
Definition: AgoraBase.h:2319
agora::rtc::VideoEncoderConfiguration
Definition: AgoraBase.h:1798
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:1984
agora::rtc::VideoEncoderConfiguration::bitrate
int bitrate
Definition: AgoraBase.h:1865
agora::util::AList
Definition: AgoraBase.h:232
agora::rtc::RtcStats::firstVideoKeyFrameDecodedDurationAfterUnmute
int firstVideoKeyFrameDecodedDurationAfterUnmute
Definition: AgoraBase.h:2175
agora::rtc::TranscodingUser
Definition: AgoraBase.h:3166
agora::rtc::AudioFileRecordingConfig::fileRecordingType
AUDIO_FILE_RECORDING_TYPE fileRecordingType
Definition: AgoraBase.h:4187
agora::rtc::RtcImage
Definition: AgoraBase.h:3103
agora::rtc::TranscodingUser::x
int x
Definition: AgoraBase.h:3174
agora::rtc::ChannelMediaInfo::token
const char * token
Definition: AgoraBase.h:4523
agora::rtc::BeautyOptions::lighteningContrastLevel
LIGHTENING_CONTRAST_LEVEL lighteningContrastLevel
Definition: AgoraBase.h:3717
agora::rtc::WatermarkRatio::yRatio
float yRatio
Definition: AgoraBase.h:2003
agora::rtc::SimulcastStreamConfig
Definition: AgoraBase.h:1950
agora::rtc::LiveTranscoding::audioBitrate
int audioBitrate
Definition: AgoraBase.h:3322
agora::rtc::IAudioEncodedFrameObserver::OnMixedAudioEncodedFrame
virtual void OnMixedAudioEncodedFrame(const uint8_t *frameBuffer, int length, const EncodedAudioFrameInfo &audioEncodedFrameInfo)=0
agora::rtc::ChannelMediaRelayConfiguration::destInfos
ChannelMediaInfo * destInfos
Definition: AgoraBase.h:4550
agora::rtc::RtcImage::x
int x
Definition: AgoraBase.h:3112
agora::rtc::TranscodingVideoStream::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:3368
agora::rtc::RtcImage::zOrder
int zOrder
Definition: AgoraBase.h:3129
agora::rtc::AudioVolumeInfo::volume
unsigned int volume
Definition: AgoraBase.h:2842
agora::rtc::TranscodingUser::uid
uid_t uid
Definition: AgoraBase.h:3170
agora::rtc::Rectangle::y
int y
Definition: AgoraBase.h:1980
agora::rtc::LocalAudioStats::sentBitrate
int sentBitrate
Definition: AgoraBase.h:2987
agora::rtc::RemoteAudioStats::totalFrozenTime
int totalFrozenTime
Definition: AgoraBase.h:2326
agora::rtc::RtcImage::url
const char * url
Definition: AgoraBase.h:3107
agora::rtc::IPacketObserver::Packet::buffer
const unsigned char * buffer
Definition: AgoraBase.h:2860
agora::rtc::RtcStats::firstVideoKeyFrameRenderedDurationAfterUnmute
int firstVideoKeyFrameRenderedDurationAfterUnmute
Definition: AgoraBase.h:2180
agora::UserInfo::userId
util::AString userId
Definition: AgoraBase.h:1133
agora::rtc::WatermarkOptions::positionInPortraitMode
Rectangle positionInPortraitMode
Definition: AgoraBase.h:2028
agora::rtc::LastmileProbeResult::downlinkReport
LastmileProbeOneWayResult downlinkReport
Definition: AgoraBase.h:3534
agora::rtc::LiveTranscoding::watermarkCount
unsigned int watermarkCount
Definition: AgoraBase.h:3301
agora::rtc::Rectangle::x
int x
Definition: AgoraBase.h:1976
agora::util::IString
Definition: AgoraBase.h:171
agora::rtc::EncodedAudioFrameInfo::advancedSettings
EncodedAudioFrameAdvancedSettings advancedSettings
Definition: AgoraBase.h:1637
agora::rtc::AudioFileRecordingConfig::sampleRate
int sampleRate
Definition: AgoraBase.h:4183
agora::rtc::LocalTranscoderConfiguration
Definition: AgoraBase.h:3425
agora::rtc::BeautyOptions::LIGHTENING_CONTRAST_LEVEL
LIGHTENING_CONTRAST_LEVEL
Definition: AgoraBase.h:3706
agora::rtc::WatermarkRatio::xRatio
float xRatio
Definition: AgoraBase.h:1999
agora::rtc::LocalAudioStats::sentSampleRate
int sentSampleRate
Definition: AgoraBase.h:2983
agora::rtc::LastmileProbeConfig::expectedDownlinkBitrate
unsigned int expectedDownlinkBitrate
Definition: AgoraBase.h:3472
agora::rtc::RtcStats::cpuTotalUsage
double cpuTotalUsage
Definition: AgoraBase.h:2118
agora::rtc::IPacketObserver::Packet::size
unsigned int size
Definition: AgoraBase.h:2864
agora::rtc::LiveTranscoding::backgroundImageCount
unsigned int backgroundImageCount
Definition: AgoraBase.h:3313
agora::rtc::IPacketObserver
Definition: AgoraBase.h:2850
agora::rtc::LiveTranscoding::backgroundImage
RtcImage * backgroundImage
Definition: AgoraBase.h:3306
agora::rtc::RtcStats::cpuAppUsage
double cpuAppUsage
Definition: AgoraBase.h:2114
agora::rtc::VideoFormat
Definition: AgoraBase.h:2440
agora::rtc::TranscodingUser::alpha
double alpha
Definition: AgoraBase.h:3196
agora::rtc::WatermarkOptions::watermarkRatio
WatermarkRatio watermarkRatio
Definition: AgoraBase.h:2033
agora::rtc::DataStreamConfig
Definition: AgoraBase.h:1938
agora::rtc::RtcStats::txAudioBytes
unsigned int txAudioBytes
Definition: AgoraBase.h:2066
agora::rtc::RtcStats::connectTimeMs
int connectTimeMs
Definition: AgoraBase.h:2135
agora::rtc::LastmileProbeResult::state
LASTMILE_PROBE_RESULT_STATE state
Definition: AgoraBase.h:3526
agora::rtc::ChannelMediaInfo::channelName
const char * channelName
Definition: AgoraBase.h:4519
agora::rtc::LiveTranscoding::height
int height
Definition: AgoraBase.h:3241
agora::rtc::EncodedAudioFrameAdvancedSettings::speech
bool speech
Definition: AgoraBase.h:1590
agora::rtc::EncodedVideoFrameInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1730
agora::rtc::RtcStats::txVideoKBitRate
unsigned short txVideoKBitRate
Definition: AgoraBase.h:2102
agora::rtc::RtcStats::rxAudioBytes
unsigned int rxAudioBytes
Definition: AgoraBase.h:2074
agora::rtc::EncodedAudioFrameAdvancedSettings::sendEvenIfEmpty
bool sendEvenIfEmpty
Definition: AgoraBase.h:1596
agora::rtc::RtcStats::txAudioKBitRate
unsigned short txAudioKBitRate
Definition: AgoraBase.h:2094
agora::rtc::AudioVolumeInfo::uid
uid_t uid
Definition: AgoraBase.h:2837
agora::rtc::BeautyOptions::LIGHTENING_CONTRAST_LOW
@ LIGHTENING_CONTRAST_LOW
Definition: AgoraBase.h:3708
agora::rtc::LiveTranscoding::videoBitrate
int videoBitrate
Definition: AgoraBase.h:3247
agora::rtc::VideoTrackInfo::trackId
track_id_t trackId
Definition: AgoraBase.h:2779
agora::rtc::VideoTrackInfo::encodedFrameOnly
bool encodedFrameOnly
Definition: AgoraBase.h:2797
agora::rtc::RemoteAudioStats::mosValue
int mosValue
Definition: AgoraBase.h:2348
agora::rtc::TranscodingUser::width
int width
Definition: AgoraBase.h:3182
agora::base::AParameter
Definition: AgoraBase.h:4833
agora::rtc::BeautyOptions::sharpnessLevel
float sharpnessLevel
Definition: AgoraBase.h:3732
agora::rtc::EncryptionConfig::encryptionMode
ENCRYPTION_MODE encryptionMode
Definition: AgoraBase.h:4710
agora::util::AOutputIterator
Definition: AgoraBase.h:201
agora::rtc::WatermarkOptions::positionInLandscapeMode
Rectangle positionInLandscapeMode
Definition: AgoraBase.h:2024
agora::rtc::IAudioEncodedFrameObserver
Definition: AgoraBase.h:4242
agora::rtc::EncodedVideoFrameInfo::width
int width
Definition: AgoraBase.h:1734
agora::rtc::VideoTrackInfo::ownerUid
uid_t ownerUid
Definition: AgoraBase.h:2774
agora::rtc::LastmileProbeOneWayResult::availableBandwidth
unsigned int availableBandwidth
Definition: AgoraBase.h:3511
agora::rtc::EncodedVideoFrameInfo::framesPerSecond
int framesPerSecond
Definition: AgoraBase.h:1745
agora::rtc::LiveTranscoding::transcodingExtraInfo
const char * transcodingExtraInfo
Definition: AgoraBase.h:3284
agora::rtc::VideoTrackInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:2791
agora::rtc::LiveTranscoding::metadata
const char * metadata
Definition: AgoraBase.h:3288
agora::rtc::LiveTranscoding::audioSampleRate
AUDIO_SAMPLE_RATE_TYPE audioSampleRate
Definition: AgoraBase.h:3317
agora::rtc::ChannelMediaRelayConfiguration
Definition: AgoraBase.h:4531
agora::rtc::UserInfo::uid
uid_t uid
Definition: AgoraBase.h:4794
agora::rtc::DataStreamConfig::ordered
bool ordered
Definition: AgoraBase.h:1944
agora::rtc::LastmileProbeOneWayResult
Definition: AgoraBase.h:3499
agora::rtc::EncodedVideoFrameInfo::renderTimeMs
int64_t renderTimeMs
Definition: AgoraBase.h:1762
agora::rtc::WatermarkRatio::widthRatio
float widthRatio
Definition: AgoraBase.h:2007
agora::rtc::AudioPcmDataInfo::samplesOut
size_t samplesOut
Definition: AgoraBase.h:1660
agora::rtc::VideoEncoderConfiguration::frameRate
int frameRate
Definition: AgoraBase.h:1810
agora::rtc::Rectangle::height
int height
Definition: AgoraBase.h:1988
agora::rtc::AudioPcmDataInfo::elapsedTimeMs
int64_t elapsedTimeMs
Definition: AgoraBase.h:1664
agora::rtc::WatermarkOptions::mode
WATERMARK_FIT_MODE mode
Definition: AgoraBase.h:2037
agora::rtc::EncodedAudioFrameInfo::sampleRateHz
int sampleRateHz
Definition: AgoraBase.h:1623
agora::rtc::RemoteAudioStats::audioLossRate
int audioLossRate
Definition: AgoraBase.h:2306
agora::UserInfo
Definition: AgoraBase.h:1129
agora::rtc::RtcStats::txPacketLossRate
int txPacketLossRate
Definition: AgoraBase.h:2184
agora::rtc::VideoCanvas::view
view_t view
Definition: AgoraBase.h:3669
agora::rtc::TranscodingVideoStream::imageUrl
const char * imageUrl
Definition: AgoraBase.h:3376
agora::rtc::AudioEncodedFrameObserverConfig::postionType
AUDIO_ENCODED_FRAME_OBSERVER_POSITION postionType
Definition: AgoraBase.h:4230
agora::rtc::IPacketObserver::onSendAudioPacket
virtual bool onSendAudioPacket(Packet &packet)=0
agora::rtc::LiveTranscoding::watermark
RtcImage * watermark
Definition: AgoraBase.h:3294
agora::rtc::ChannelMediaInfo
Definition: AgoraBase.h:4515
agora::UserInfo::hasVideo
bool hasVideo
Definition: AgoraBase.h:1145
agora::rtc::VideoCanvas::renderMode
media::base::RENDER_MODE_TYPE renderMode
Definition: AgoraBase.h:3673
agora::rtc::VideoTrackInfo::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:2801
agora::rtc::RtcStats::txKBitRate
unsigned short txKBitRate
Definition: AgoraBase.h:2082
agora::rtc::EncodedAudioFrameInfo::numberOfChannels
int numberOfChannels
Definition: AgoraBase.h:1633
agora::rtc::EncodedVideoFrameInfo::streamType
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:1774
agora::rtc::RemoteAudioStats::quality
int quality
Definition: AgoraBase.h:2294
agora::rtc::ScreenCaptureParameters::frameRate
int frameRate
Definition: AgoraBase.h:4070
agora::rtc::RtcStats::firstVideoKeyFramePacketDurationAfterUnmute
int firstVideoKeyFramePacketDurationAfterUnmute
Definition: AgoraBase.h:2170
agora::rtc::LiveTranscoding::audioChannels
int audioChannels
Definition: AgoraBase.h:3332
agora::rtc::RtcImage::height
int height
Definition: AgoraBase.h:3125
agora::rtc::SimulcastStreamConfig::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:1954
agora::rtc::EncodedVideoFrameInfo::frameType
VIDEO_FRAME_TYPE frameType
Definition: AgoraBase.h:1749
agora::rtc::LastmileProbeConfig::probeDownlink
bool probeDownlink
Definition: AgoraBase.h:3461
agora::rtc::RtcStats::userCount
unsigned int userCount
Definition: AgoraBase.h:2110
agora::rtc::LocalTranscoderConfiguration::streamCount
unsigned int streamCount
Definition: AgoraBase.h:3429
agora::rtc::BeautyOptions::LIGHTENING_CONTRAST_HIGH
@ LIGHTENING_CONTRAST_HIGH
Definition: AgoraBase.h:3712
agora::base::LicenseCallback
Definition: AgoraBase.h:4847
agora::rtc::EncryptionConfig
Definition: AgoraBase.h:4706
agora::rtc::LiveTranscoding::videoCodecProfile
VIDEO_CODEC_PROFILE_TYPE videoCodecProfile
Definition: AgoraBase.h:3266
agora::rtc::IVideoEncodedImageReceiver
Definition: AgoraBase.h:2904
agora::rtc::ScreenCaptureParameters::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:4065
agora::rtc::VideoDimensions::width
int width
Definition: AgoraBase.h:1395
agora::rtc::AudioFileRecordingConfig
Definition: AgoraBase.h:4167
agora::rtc::RemoteAudioStats
Definition: AgoraBase.h:2286
agora::rtc::TranscodingVideoStream::x
int x
Definition: AgoraBase.h:3380
agora::rtc::LiveTranscoding::lowLatency
bool lowLatency
Definition: AgoraBase.h:3258
agora::rtc::TranscodingVideoStream
Definition: AgoraBase.h:3364
agora::rtc::RtcStats
Definition: AgoraBase.h:2050
agora::base::IParameterEngine
Definition: AgoraBase.h:88
agora::rtc::WatermarkOptions::visibleInPreview
bool visibleInPreview
Definition: AgoraBase.h:2019
agora::rtc::TranscodingUser::zOrder
int zOrder
Definition: AgoraBase.h:3192
agora::rtc::LiveTranscoding::width
int width
Definition: AgoraBase.h:3234
agora::rtc::AudioPcmDataInfo
Definition: AgoraBase.h:1642
agora::rtc::RtcStats::rxBytes
unsigned int rxBytes
Definition: AgoraBase.h:2062
agora::rtc::RtcStats::rxVideoKBitRate
unsigned short rxVideoKBitRate
Definition: AgoraBase.h:2098
agora::rtc::RtcStats::rxAudioKBitRate
unsigned short rxAudioKBitRate
Definition: AgoraBase.h:2090
agora::rtc::LocalAudioStats::numChannels
int numChannels
Definition: AgoraBase.h:2979
agora::rtc::WatermarkOptions
Definition: AgoraBase.h:2014
agora::rtc::VideoEncoderConfiguration::mirrorMode
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:1896
agora::rtc::LocalAudioStats
Definition: AgoraBase.h:2975
agora::rtc::ScreenCaptureParameters::captureMouseCursor
bool captureMouseCursor
Definition: AgoraBase.h:4080
agora::rtc::LocalTranscoderConfiguration::VideoInputStreams
TranscodingVideoStream * VideoInputStreams
Definition: AgoraBase.h:3433
agora::rtc::RtcImage::y
int y
Definition: AgoraBase.h:3117
agora::rtc::EncodedAudioFrameAdvancedSettings
Definition: AgoraBase.h:1580
agora::rtc::RtcStats::memoryAppUsageRatio
double memoryAppUsageRatio
Definition: AgoraBase.h:2122
agora::rtc::LastmileProbeConfig::expectedUplinkBitrate
unsigned int expectedUplinkBitrate
Definition: AgoraBase.h:3467
agora::rtc::VideoTrackInfo::isLocal
bool isLocal
Definition: AgoraBase.h:2770
agora::rtc::VideoTrackInfo::channelId
const char * channelId
Definition: AgoraBase.h:2783
agora::rtc::RtcStats::firstVideoKeyFramePacketDuration
int firstVideoKeyFramePacketDuration
Definition: AgoraBase.h:2150
agora::rtc::VideoTrackInfo::streamType
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:2787
agora::rtc::AudioFileRecordingConfig::encode
bool encode
Definition: AgoraBase.h:4178
agora::util::IContainer
Definition: AgoraBase.h:192
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1391
agora::rtc::TranscodingVideoStream::height
int height
Definition: AgoraBase.h:3392
agora::rtc::DataStreamConfig::syncWithAudio
bool syncWithAudio
Definition: AgoraBase.h:1941
agora::rtc::RemoteAudioStats::frozenRate
int frozenRate
Definition: AgoraBase.h:2331
agora::rtc::LiveTranscoding::userCount
unsigned int userCount
Definition: AgoraBase.h:3275
agora::util::CopyableAutoPtr
Definition: AgoraBase.h:155
agora::rtc::TranscodingVideoStream::width
int width
Definition: AgoraBase.h:3388
agora::rtc::TranscodingVideoStream::mirror
bool mirror
Definition: AgoraBase.h:3406
agora::rtc::AudioFileRecordingConfig::filePath
const char * filePath
Definition: AgoraBase.h:4172
agora::rtc::EncryptionConfig::encryptionKey
const char * encryptionKey
Definition: AgoraBase.h:4716
agora::rtc::EncodedVideoFrameInfo::trackId
int trackId
Definition: AgoraBase.h:1757
agora::rtc::ScreenCaptureParameters::excludeWindowList
view_t * excludeWindowList
Definition: AgoraBase.h:4090
agora::rtc::IPacketObserver::onSendVideoPacket
virtual bool onSendVideoPacket(Packet &packet)=0
agora::rtc::VideoTrackInfo
Definition: AgoraBase.h:2760
agora::rtc::LocalTranscoderConfiguration::videoOutputConfiguration
VideoEncoderConfiguration videoOutputConfiguration
Definition: AgoraBase.h:3437
agora::rtc::SimulcastStreamConfig::bitrate
int bitrate
Definition: AgoraBase.h:1958
agora::rtc::RemoteAudioStats::numChannels
int numChannels
Definition: AgoraBase.h:2310
agora::rtc::RemoteAudioStats::jitterBufferDelay
int jitterBufferDelay
Definition: AgoraBase.h:2302
agora::rtc::AudioPcmDataInfo::ntpTimeMs
int64_t ntpTimeMs
Definition: AgoraBase.h:1668
agora::rtc::RtcStats::firstVideoPacketDurationAfterUnmute
int firstVideoPacketDurationAfterUnmute
Definition: AgoraBase.h:2165
agora::rtc::IAudioEncodedFrameObserver::OnRecordAudioEncodedFrame
virtual void OnRecordAudioEncodedFrame(const uint8_t *frameBuffer, int length, const EncodedAudioFrameInfo &audioEncodedFrameInfo)=0
agora::rtc::LiveTranscoding::videoFramerate
int videoFramerate
Definition: AgoraBase.h:3252
agora::rtc::RemoteAudioStats::uid
uid_t uid
Definition: AgoraBase.h:2290
agora::rtc::RtcStats::rxPacketLossRate
int rxPacketLossRate
Definition: AgoraBase.h:2188
agora::rtc::RtcStats::lastmileDelay
unsigned short lastmileDelay
Definition: AgoraBase.h:2106
agora::rtc::VideoEncoderConfiguration::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1802
agora::rtc::LastmileProbeResult::rtt
unsigned int rtt
Definition: AgoraBase.h:3538
agora::rtc::TranscodingVideoStream::y
int y
Definition: AgoraBase.h:3384
agora::rtc::RtcStats::packetsBeforeFirstKeyFramePacket
int packetsBeforeFirstKeyFramePacket
Definition: AgoraBase.h:2155
agora::rtc::BeautyOptions::LIGHTENING_CONTRAST_NORMAL
@ LIGHTENING_CONTRAST_NORMAL
Definition: AgoraBase.h:3710
agora::rtc::ChannelMediaRelayConfiguration::srcInfo
ChannelMediaInfo * srcInfo
Definition: AgoraBase.h:4543
agora::rtc::VideoEncoderConfiguration::orientationMode
ORIENTATION_MODE orientationMode
Definition: AgoraBase.h:1886
agora::base::IEngineBase
Definition: AgoraBase.h:4827
agora::util::IIterator
Definition: AgoraBase.h:183
agora::rtc::UserInfo::userAccount
char userAccount[MAX_USER_ACCOUNT_LENGTH]
Definition: AgoraBase.h:4798
agora::rtc::EncodedAudioFrameInfo::samplesPerChannel
int samplesPerChannel
Definition: AgoraBase.h:1629
agora::rtc::EncodedVideoFrameInfo::height
int height
Definition: AgoraBase.h:1738
agora::rtc::RtcStats::memoryAppUsageInKbytes
int memoryAppUsageInKbytes
Definition: AgoraBase.h:2130
agora::rtc::TranscodingUser::height
int height
Definition: AgoraBase.h:3186
agora::rtc::RemoteAudioStats::receivedSampleRate
int receivedSampleRate
Definition: AgoraBase.h:2314
agora::rtc::IPacketObserver::onReceiveAudioPacket
virtual bool onReceiveAudioPacket(Packet &packet)=0
agora::rtc::VideoCanvas
Definition: AgoraBase.h:3665
agora::rtc::LocalAudioStats::internalCodec
int internalCodec
Definition: AgoraBase.h:2991
agora::rtc::ChannelMediaInfo::uid
uid_t uid
Definition: AgoraBase.h:4526
agora::rtc::EncodedVideoFrameInfo::internalSendTs
uint64_t internalSendTs
Definition: AgoraBase.h:1766