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,
607  ERR_TOKEN_EXPIRED = 109,
624  ERR_INVALID_TOKEN = 110,
629  ERR_CONNECTION_INTERRUPTED = 111, // only used in web sdk
634  ERR_CONNECTION_LOST = 112, // only used in web sdk
639  ERR_NOT_IN_CHANNEL = 113,
644  ERR_SIZE_TOO_LARGE = 114,
649  ERR_BITRATE_LIMIT = 115,
654  ERR_TOO_MANY_DATA_STREAMS = 116,
658  ERR_STREAM_MESSAGE_TIMEOUT = 117,
662  ERR_SET_CLIENT_ROLE_NOT_AUTHORIZED = 119,
667  ERR_DECRYPTION_FAILED = 120,
671  ERR_INVALID_USER_ID = 121,
675  ERR_CLIENT_IS_BANNED_BY_SERVER = 123,
679  ERR_WATERMARK_PARAM = 124,
683  ERR_WATERMARK_PATH = 125,
687  ERR_WATERMARK_PNG = 126,
691  ERR_WATERMARKR_INFO = 127,
695  ERR_WATERMARK_ARGB = 128,
699  ERR_WATERMARK_READ = 129,
705  ERR_ENCRYPTED_STREAM_NOT_ALLOWED_PUBLISH = 130,
706 
710  ERR_LICENSE_CREDENTIAL_INVALID = 131,
711 
712  // Licensing, keep the license error code same as the main version
713  ERR_CERT_RAW = 157,
714  ERR_CERT_JSON_PART = 158,
715  ERR_CERT_JSON_INVAL = 159,
716  ERR_CERT_JSON_NOMEM = 160,
717  ERR_CERT_CUSTOM = 161,
718  ERR_CERT_CREDENTIAL = 162,
719  ERR_CERT_SIGN = 163,
720  ERR_CERT_FAIL = 164,
721  ERR_CERT_BUF = 165,
722  ERR_CERT_NULL = 166,
723  ERR_CERT_DUEDATE = 167,
724  ERR_CERT_REQUEST = 168,
725 
726  // PcmSend Error num
727  ERR_PCMSEND_FORMAT =200, // unsupport pcm format
728  ERR_PCMSEND_BUFFEROVERFLOW = 201, // buffer overflow, the pcm send rate too quickly
729 
731  // signaling: 400~600
732  ERR_LOGOUT_OTHER = 400, //
733  ERR_LOGOUT_USER = 401, // logout by user
734  ERR_LOGOUT_NET = 402, // network failure
735  ERR_LOGOUT_KICKED = 403, // login in other device
736  ERR_LOGOUT_PACKET = 404, //
737  ERR_LOGOUT_TOKEN_EXPIRED = 405, // token expired
738  ERR_LOGOUT_OLDVERSION = 406, //
739  ERR_LOGOUT_TOKEN_WRONG = 407,
740  ERR_LOGOUT_ALREADY_LOGOUT = 408,
741  ERR_LOGIN_OTHER = 420,
742  ERR_LOGIN_NET = 421,
743  ERR_LOGIN_FAILED = 422,
744  ERR_LOGIN_CANCELED = 423,
745  ERR_LOGIN_TOKEN_EXPIRED = 424,
746  ERR_LOGIN_OLD_VERSION = 425,
747  ERR_LOGIN_TOKEN_WRONG = 426,
748  ERR_LOGIN_TOKEN_KICKED = 427,
749  ERR_LOGIN_ALREADY_LOGIN = 428,
750  ERR_JOIN_CHANNEL_OTHER = 440,
751  ERR_SEND_MESSAGE_OTHER = 440,
752  ERR_SEND_MESSAGE_TIMEOUT = 441,
753  ERR_QUERY_USERNUM_OTHER = 450,
754  ERR_QUERY_USERNUM_TIMEOUT = 451,
755  ERR_QUERY_USERNUM_BYUSER = 452,
756  ERR_LEAVE_CHANNEL_OTHER = 460,
757  ERR_LEAVE_CHANNEL_KICKED = 461,
758  ERR_LEAVE_CHANNEL_BYUSER = 462,
759  ERR_LEAVE_CHANNEL_LOGOUT = 463,
760  ERR_LEAVE_CHANNEL_DISCONNECTED = 464,
761  ERR_INVITE_OTHER = 470,
762  ERR_INVITE_REINVITE = 471,
763  ERR_INVITE_NET = 472,
764  ERR_INVITE_PEER_OFFLINE = 473,
765  ERR_INVITE_TIMEOUT = 474,
766  ERR_INVITE_CANT_RECV = 475,
768  // 1001~2000
772  ERR_LOAD_MEDIA_ENGINE = 1001,
776  ERR_START_CALL = 1002,
780  ERR_START_CAMERA = 1003,
784  ERR_START_VIDEO_RENDER = 1004,
790  ERR_ADM_GENERAL_ERROR = 1005,
794  ERR_ADM_JAVA_RESOURCE = 1006,
798  ERR_ADM_SAMPLE_RATE = 1007,
803  ERR_ADM_INIT_PLAYOUT = 1008,
807  ERR_ADM_START_PLAYOUT = 1009,
811  ERR_ADM_STOP_PLAYOUT = 1010,
816  ERR_ADM_INIT_RECORDING = 1011,
820  ERR_ADM_START_RECORDING = 1012,
824  ERR_ADM_STOP_RECORDING = 1013,
829  ERR_ADM_RUNTIME_PLAYOUT_ERROR = 1015,
833  ERR_ADM_RUNTIME_RECORDING_ERROR = 1017,
837  ERR_ADM_RECORD_AUDIO_FAILED = 1018,
842  ERR_ADM_INIT_LOOPBACK = 1022,
847  ERR_ADM_START_LOOPBACK = 1023,
852  ERR_ADM_NO_PERMISSION = 1027,
856  ERR_ADM_RECORD_AUDIO_IS_ACTIVE = 1033,
860  ERR_ADM_ANDROID_JNI_JAVA_RESOURCE = 1101,
866  ERR_ADM_ANDROID_JNI_NO_RECORD_FREQUENCY = 1108,
872  ERR_ADM_ANDROID_JNI_NO_PLAYBACK_FREQUENCY = 1109,
880  ERR_ADM_ANDROID_JNI_JAVA_START_RECORD = 1111,
888  ERR_ADM_ANDROID_JNI_JAVA_START_PLAYBACK = 1112,
893  ERR_ADM_ANDROID_JNI_JAVA_RECORD_ERROR = 1115,
895  ERR_ADM_ANDROID_OPENSL_CREATE_ENGINE = 1151,
897  ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_RECORDER = 1153,
899  ERR_ADM_ANDROID_OPENSL_START_RECORDER_THREAD = 1156,
901  ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_PLAYER = 1157,
903  ERR_ADM_ANDROID_OPENSL_START_PLAYER_THREAD = 1160,
910  ERR_ADM_IOS_INPUT_NOT_AVAILABLE = 1201,
914  ERR_ADM_IOS_ACTIVATE_SESSION_FAIL = 1206,
919  ERR_ADM_IOS_VPIO_INIT_FAIL = 1210,
924  ERR_ADM_IOS_VPIO_REINIT_FAIL = 1213,
929  ERR_ADM_IOS_VPIO_RESTART_FAIL = 1214,
930  ERR_ADM_IOS_SET_RENDER_CALLBACK_FAIL = 1219,
932  ERR_ADM_IOS_SESSION_SAMPLERATR_ZERO = 1221,
940  ERR_ADM_WIN_CORE_INIT = 1301,
947  ERR_ADM_WIN_CORE_INIT_RECORDING = 1303,
954  ERR_ADM_WIN_CORE_INIT_PLAYOUT = 1306,
960  ERR_ADM_WIN_CORE_INIT_PLAYOUT_NULL = 1307,
967  ERR_ADM_WIN_CORE_START_RECORDING = 1309,
974  ERR_ADM_WIN_CORE_CREATE_REC_THREAD = 1311,
983  ERR_ADM_WIN_CORE_CAPTURE_NOT_STARTUP = 1314,
990  ERR_ADM_WIN_CORE_CREATE_RENDER_THREAD = 1319,
999  ERR_ADM_WIN_CORE_RENDER_NOT_STARTUP = 1320,
1005  ERR_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
1011  ERR_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
1021  ERR_ADM_WIN_WAVE_INIT = 1351,
1030  ERR_ADM_WIN_WAVE_INIT_RECORDING = 1353,
1039  ERR_ADM_WIN_WAVE_INIT_MICROPHONE = 1354,
1048  ERR_ADM_WIN_WAVE_INIT_PLAYOUT = 1355,
1057  ERR_ADM_WIN_WAVE_INIT_SPEAKER = 1356,
1066  ERR_ADM_WIN_WAVE_START_RECORDING = 1357,
1075  ERR_ADM_WIN_WAVE_START_PLAYOUT = 1358,
1079  ERR_ADM_NO_RECORDING_DEVICE = 1359,
1083  ERR_ADM_NO_PLAYOUT_DEVICE = 1360,
1084 
1085  // VDM error code starts from 1500
1089  ERR_VDM_CAMERA_NOT_AUTHORIZED = 1501,
1090 
1091  // VDM error code starts from 1500
1095  ERR_VDM_WIN_DEVICE_IN_USE = 1502,
1096 
1097  // VCM error code starts from 1600
1101  ERR_VCM_UNKNOWN_ERROR = 1600,
1106  ERR_VCM_ENCODER_INIT_ERROR = 1601,
1110  ERR_VCM_ENCODER_ENCODE_ERROR = 1602,
1114  ERR_VCM_ENCODER_SET_ERROR = 1603,
1115 };
1116 
1117 typedef const char* user_id_t;
1118 typedef void* view_t;
1119 
1123 struct UserInfo {
1133  bool hasAudio;
1139  bool hasVideo;
1140 
1141  UserInfo() : hasAudio(false), hasVideo(false) {}
1142 };
1143 
1144 typedef util::AList<UserInfo> UserList;
1145 
1146 // Shared between Agora Service and Rtc Engine
1147 namespace rtc {
1148 
1152 enum USER_OFFLINE_REASON_TYPE {
1156  USER_OFFLINE_QUIT = 0,
1162  USER_OFFLINE_DROPPED = 1,
1166  USER_OFFLINE_BECOME_AUDIENCE = 2,
1167 };
1168 
1169 enum INTERFACE_ID_TYPE {
1170  AGORA_IID_AUDIO_DEVICE_MANAGER = 1,
1171  AGORA_IID_VIDEO_DEVICE_MANAGER = 2,
1172  AGORA_IID_PARAMETER_ENGINE = 3,
1173  AGORA_IID_MEDIA_ENGINE = 4,
1174  AGORA_IID_AUDIO_ENGINE = 5,
1175  AGORA_IID_VIDEO_ENGINE = 6,
1176  AGORA_IID_RTC_CONNECTION = 7,
1177  AGORA_IID_SIGNALING_ENGINE = 8,
1178  AGORA_IID_MEDIA_ENGINE_REGULATOR = 9,
1179 };
1180 
1184 enum QUALITY_TYPE {
1189  QUALITY_UNKNOWN = 0,
1193  QUALITY_EXCELLENT = 1,
1198  QUALITY_GOOD = 2,
1202  QUALITY_POOR = 3,
1206  QUALITY_BAD = 4,
1210  QUALITY_VBAD = 5,
1214  QUALITY_DOWN = 6,
1218  QUALITY_UNSUPPORTED = 7,
1222  QUALITY_DETECTING
1223 };
1224 
1228 enum FIT_MODE_TYPE {
1233  MODE_COVER = 1,
1234 
1240  MODE_CONTAIN = 2,
1241 };
1242 
1246 enum VIDEO_ORIENTATION {
1250  VIDEO_ORIENTATION_0 = 0,
1254  VIDEO_ORIENTATION_90 = 90,
1258  VIDEO_ORIENTATION_180 = 180,
1262  VIDEO_ORIENTATION_270 = 270
1263 };
1264 
1268 enum FRAME_RATE {
1272  FRAME_RATE_FPS_1 = 1,
1276  FRAME_RATE_FPS_7 = 7,
1280  FRAME_RATE_FPS_10 = 10,
1284  FRAME_RATE_FPS_15 = 15,
1288  FRAME_RATE_FPS_24 = 24,
1292  FRAME_RATE_FPS_30 = 30,
1296  FRAME_RATE_FPS_60 = 60,
1297 };
1298 
1299 enum FRAME_WIDTH {
1300  FRAME_WIDTH_640 = 640,
1301 };
1302 
1303 enum FRAME_HEIGHT {
1304  FRAME_HEIGHT_360 = 360,
1305 };
1306 
1307 
1311 enum VIDEO_FRAME_TYPE {
1313  VIDEO_FRAME_TYPE_BLANK_FRAME = 0,
1315  VIDEO_FRAME_TYPE_KEY_FRAME = 3,
1317  VIDEO_FRAME_TYPE_DELTA_FRAME = 4,
1319  VIDEO_FRAME_TYPE_B_FRAME = 5,
1321  VIDEO_FRAME_TYPE_DROPPABLE_FRAME = 6,
1323  VIDEO_FRAME_TYPE_UNKNOW
1324 };
1325 
1329 enum ORIENTATION_MODE {
1337  ORIENTATION_MODE_ADAPTIVE = 0,
1345  ORIENTATION_MODE_FIXED_LANDSCAPE = 1,
1353  ORIENTATION_MODE_FIXED_PORTRAIT = 2,
1354 };
1355 
1359 enum DEGRADATION_PREFERENCE {
1363  MAINTAIN_QUALITY = 0,
1367  MAINTAIN_FRAMERATE = 1,
1371  MAINTAIN_BALANCED = 2,
1375  MAINTAIN_RESOLUTION = 3,
1376 };
1377 
1385  int width;
1389  int height;
1390  VideoDimensions() : width(640), height(480) {}
1391  VideoDimensions(int w, int h) : width(w), height(h) {}
1392  bool operator==(const VideoDimensions& rhs) const {
1393  return width == rhs.width && height == rhs.height;
1394  }
1395 };
1396 
1406 const int STANDARD_BITRATE = 0;
1407 
1415 const int COMPATIBLE_BITRATE = -1;
1416 
1420 const int DEFAULT_MIN_BITRATE = -1;
1421 
1425 const int DEFAULT_MIN_BITRATE_EQUAL_TO_TARGET_BITRATE = -2;
1426 
1430 enum VIDEO_CODEC_TYPE {
1434  VIDEO_CODEC_VP8 = 1,
1438  VIDEO_CODEC_H264 = 2,
1442  VIDEO_CODEC_H265 = 3,
1446  VIDEO_CODEC_VP9 = 5,
1450  VIDEO_CODEC_GENERIC = 6,
1454  VIDEO_CODEC_GENERIC_H264 = 7,
1458  VIDEO_CODEC_GENERIC_JPEG = 20,
1459 };
1460 
1464 enum AUDIO_CODEC_TYPE {
1468  AUDIO_CODEC_OPUS = 1,
1469  // kIsac = 2,
1473  AUDIO_CODEC_PCMA = 3,
1477  AUDIO_CODEC_PCMU = 4,
1481  AUDIO_CODEC_G722 = 5,
1482  // kIlbc = 6,
1484  // AUDIO_CODEC_AAC = 7,
1488  AUDIO_CODEC_AACLC = 8,
1492  AUDIO_CODEC_HEAAC = 9,
1496  AUDIO_CODEC_JC1 = 10,
1497  AUDIO_CODEC_HEAAC2 = 11,
1498 };
1499 
1503 enum AUDIO_ENCODING_TYPE {
1507  AUDIO_ENCODING_TYPE_AAC_16000_LOW = 0x010101,
1511  AUDIO_ENCODING_TYPE_AAC_16000_MEDIUM = 0x010102,
1515  AUDIO_ENCODING_TYPE_AAC_32000_LOW = 0x010201,
1519  AUDIO_ENCODING_TYPE_AAC_32000_MEDIUM = 0x010202,
1523  AUDIO_ENCODING_TYPE_AAC_32000_HIGH = 0x010203,
1527  AUDIO_ENCODING_TYPE_AAC_48000_MEDIUM = 0x010302,
1531  AUDIO_ENCODING_TYPE_AAC_48000_HIGH = 0x010303,
1532 
1536  AUDIO_ENCODING_TYPE_OPUS_16000_LOW = 0x020101,
1540  AUDIO_ENCODING_TYPE_OPUS_16000_MEDIUM = 0x020102,
1544  AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM = 0x020302,
1548  AUDIO_ENCODING_TYPE_OPUS_48000_HIGH = 0x020303,
1549 };
1550 
1554 enum WATERMARK_FIT_MODE {
1559  FIT_MODE_COVER_POSITION,
1564  FIT_MODE_USE_IMAGE_RATIO
1565 };
1566 
1572  : speech(true),
1573  sendEvenIfEmpty(true) {}
1574 
1580  bool speech;
1587 
1588 };
1589 
1595  : codec(AUDIO_CODEC_AACLC),
1596  sampleRateHz(0),
1597  samplesPerChannel(0),
1598  numberOfChannels(0) {}
1599 
1601  : codec(rhs.codec),
1609  AUDIO_CODEC_TYPE codec;
1628 };
1634 
1636  : sampleCount(rhs.sampleCount),
1637  samplesOut(rhs.samplesOut),
1639  ntpTimeMs(rhs.ntpTimeMs) {}
1640 
1644  size_t sampleCount;
1645 
1646  // Output
1650  size_t samplesOut;
1654  int64_t elapsedTimeMs;
1658  int64_t ntpTimeMs;
1659 };
1663 enum H264PacketizeMode {
1667  NonInterleaved = 0, // Mode 1 - STAP-A, FU-A is allowed
1671  SingleNalUnit, // Mode 0 - only single NALU allowed
1672 };
1673 
1677 enum VIDEO_STREAM_TYPE {
1681  VIDEO_STREAM_HIGH = 0,
1685  VIDEO_STREAM_LOW = 1,
1686 };
1687 
1693  : codecType(VIDEO_CODEC_H264),
1694  width(0),
1695  height(0),
1696  framesPerSecond(0),
1697  frameType(VIDEO_FRAME_TYPE_BLANK_FRAME),
1698  rotation(VIDEO_ORIENTATION_0),
1699  trackId(0),
1700  renderTimeMs(0),
1701  internalSendTs(0),
1702  uid(0),
1703  streamType(VIDEO_STREAM_HIGH) {}
1704 
1706  : codecType(rhs.codecType),
1707  width(rhs.width),
1708  height(rhs.height),
1710  frameType(rhs.frameType),
1711  rotation(rhs.rotation),
1712  trackId(rhs.trackId),
1715  uid(rhs.uid),
1716  streamType(rhs.streamType) {}
1720  VIDEO_CODEC_TYPE codecType;
1724  int width;
1728  int height;
1739  VIDEO_FRAME_TYPE frameType;
1743  VIDEO_ORIENTATION rotation;
1747  int trackId; // This can be reserved for multiple video tracks, we need to create different ssrc
1748  // and additional payload for later implementation.
1752  int64_t renderTimeMs;
1756  uint64_t internalSendTs;
1760  uid_t uid;
1764  VIDEO_STREAM_TYPE streamType;
1765 };
1766 
1770 enum VIDEO_MIRROR_MODE_TYPE {
1774  VIDEO_MIRROR_MODE_AUTO = 0,
1778  VIDEO_MIRROR_MODE_ENABLED = 1,
1782  VIDEO_MIRROR_MODE_DISABLED = 2,
1783 };
1784 
1792  VIDEO_CODEC_TYPE codecType;
1855  int bitrate;
1856 
1876  ORIENTATION_MODE orientationMode;
1881  DEGRADATION_PREFERENCE degradationPreference;
1882 
1886  VIDEO_MIRROR_MODE_TYPE mirrorMode;
1887 
1888  VideoEncoderConfiguration(const VideoDimensions& d, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED)
1889  : codecType(VIDEO_CODEC_H264),
1890  dimensions(d),
1891  frameRate(f),
1892  bitrate(b),
1893  minBitrate(DEFAULT_MIN_BITRATE),
1894  orientationMode(m),
1895  degradationPreference(MAINTAIN_QUALITY),
1896  mirrorMode(mirror) {}
1897  VideoEncoderConfiguration(int width, int height, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED)
1898  : codecType(VIDEO_CODEC_H264),
1899  dimensions(width, height),
1900  frameRate(f),
1901  bitrate(b),
1902  minBitrate(DEFAULT_MIN_BITRATE),
1903  orientationMode(m),
1904  degradationPreference(MAINTAIN_QUALITY),
1905  mirrorMode(mirror) {}
1906  VideoEncoderConfiguration(const VideoEncoderConfiguration& config)
1907  : codecType(config.codecType),
1908  dimensions(config.dimensions),
1909  frameRate(config.frameRate),
1910  bitrate(config.bitrate),
1911  minBitrate(config.minBitrate),
1914  mirrorMode(config.mirrorMode) {}
1915  VideoEncoderConfiguration()
1916  : codecType(VIDEO_CODEC_H264),
1917  dimensions(FRAME_WIDTH_640, FRAME_HEIGHT_360),
1918  frameRate(FRAME_RATE_FPS_15),
1919  bitrate(STANDARD_BITRATE),
1920  minBitrate(DEFAULT_MIN_BITRATE),
1921  orientationMode(ORIENTATION_MODE_ADAPTIVE),
1922  degradationPreference(MAINTAIN_QUALITY),
1923  mirrorMode(VIDEO_MIRROR_MODE_DISABLED) {}
1924 };
1925 
1934  bool ordered;
1935 };
1936 
1948  int bitrate;
1953  SimulcastStreamConfig() : dimensions(160, 120), bitrate(65), framerate(5) {}
1954  bool operator==(const SimulcastStreamConfig& rhs) const {
1955  return dimensions == rhs.dimensions && bitrate == rhs.bitrate && framerate == rhs.framerate;
1956  }
1957 };
1958 
1962 struct Rectangle {
1966  int x;
1970  int y;
1974  int width;
1978  int height;
1979 
1980  Rectangle() : x(0), y(0), width(0), height(0) {}
1981  Rectangle(int xx, int yy, int ww, int hh) : x(xx), y(yy), width(ww), height(hh) {}
1982 };
1983 
1989  float xRatio;
1993  float yRatio;
1997  float widthRatio;
1998 
1999  WatermarkRatio() : xRatio(0.0), yRatio(0.0), widthRatio(0.0) {}
2000  WatermarkRatio(float x, float y, float width) : xRatio(x), yRatio(y), widthRatio(width) {}
2001 };
2002 
2027  WATERMARK_FIT_MODE mode;
2028 
2030  : visibleInPreview(false)
2031  , positionInLandscapeMode(0, 0, 0, 0)
2032  , positionInPortraitMode(0, 0, 0, 0)
2033  , mode(FIT_MODE_COVER_POSITION)
2034  {}
2035 };
2036 
2040 struct RtcStats {
2044  unsigned int connectionId;
2048  unsigned int duration;
2052  unsigned int txBytes;
2056  unsigned int rxBytes;
2060  unsigned int txAudioBytes;
2064  unsigned int txVideoBytes;
2068  unsigned int rxAudioBytes;
2072  unsigned int rxVideoBytes;
2076  unsigned short txKBitRate;
2080  unsigned short rxKBitRate;
2084  unsigned short rxAudioKBitRate;
2088  unsigned short txAudioKBitRate;
2092  unsigned short rxVideoKBitRate;
2096  unsigned short txVideoKBitRate;
2100  unsigned short lastmileDelay;
2104  unsigned int userCount;
2108  double cpuAppUsage;
2183  RtcStats() :
2184  connectionId(0),
2185  duration(0),
2186  txBytes(0),
2187  rxBytes(0),
2188  txAudioBytes(0),
2189  txVideoBytes(0),
2190  rxAudioBytes(0),
2191  rxVideoBytes(0),
2192  txKBitRate(0),
2193  rxKBitRate(0),
2194  rxAudioKBitRate(0),
2195  txAudioKBitRate(0),
2196  rxVideoKBitRate(0),
2197  txVideoKBitRate(0),
2198  lastmileDelay(0),
2199  userCount(0),
2200  cpuAppUsage(0.0),
2201  cpuTotalUsage(0.0),
2202  memoryAppUsageRatio(0.0),
2203  memoryTotalUsageRatio(0.0),
2205  connectTimeMs(0),
2215  txPacketLossRate(0),
2216  rxPacketLossRate(0) {}
2217 };
2218 
2222 enum VIDEO_SOURCE_TYPE {
2225  VIDEO_SOURCE_CAMERA_PRIMARY,
2226  VIDEO_SOURCE_CAMERA = VIDEO_SOURCE_CAMERA_PRIMARY,
2229  VIDEO_SOURCE_CAMERA_SECONDARY,
2232  VIDEO_SOURCE_SCREEN_PRIMARY,
2233  VIDEO_SOURCE_SCREEN = VIDEO_SOURCE_SCREEN_PRIMARY,
2236  VIDEO_SOURCE_SCREEN_SECONDARY,
2239  VIDEO_SOURCE_CUSTOM,
2242  VIDEO_SOURCE_MEDIA_PLAYER,
2245  VIDEO_SOURCE_RTC_IMAGE_PNG,
2248  VIDEO_SOURCE_RTC_IMAGE_JPEG,
2251  VIDEO_SOURCE_RTC_IMAGE_GIF,
2254  VIDEO_SOURCE_REMOTE,
2257  VIDEO_SOURCE_TRANSCODED,
2258 
2259  VIDEO_SOURCE_UNKNOWN = 100
2260 };
2261 
2265 enum CLIENT_ROLE_TYPE {
2269  CLIENT_ROLE_BROADCASTER = 1,
2273  CLIENT_ROLE_AUDIENCE = 2,
2274 };
2275 
2281 {
2285  uid_t uid;
2289  int quality;
2344  RemoteAudioStats() :
2345  uid(0),
2346  quality(0),
2348  jitterBufferDelay(0),
2349  audioLossRate(0),
2350  numChannels(0),
2351  receivedSampleRate(0),
2352  receivedBitrate(0),
2353  totalFrozenTime(0),
2354  frozenRate(0),
2355  mosValue(0) {}
2356 };
2357 
2361 enum AUDIO_PROFILE_TYPE {
2369  AUDIO_PROFILE_DEFAULT = 0,
2373  AUDIO_PROFILE_SPEECH_STANDARD = 1,
2377  AUDIO_PROFILE_MUSIC_STANDARD = 2,
2382  AUDIO_PROFILE_MUSIC_STANDARD_STEREO = 3,
2386  AUDIO_PROFILE_MUSIC_HIGH_QUALITY = 4,
2390  AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO = 5,
2394  AUDIO_PROFILE_IOT = 6,
2395  AUDIO_PROFILE_NUM = 7
2396 };
2397 
2401 enum AUDIO_SCENARIO_TYPE {
2405  AUDIO_SCENARIO_DEFAULT = 0,
2411  AUDIO_SCENARIO_GAME_STREAMING = 3,
2417  AUDIO_SCENARIO_CHATROOM = 5,
2421  AUDIO_SCENARIO_HIGH_DEFINITION = 6,
2425  AUDIO_SCENARIO_CHORUS = 7,
2429  AUDIO_SCENARIO_NUM = 8,
2430 };
2431 
2435 struct VideoFormat {
2436  OPTIONAL_ENUM_SIZE_T {
2438  kMaxWidthInPixels = 3840,
2440  kMaxHeightInPixels = 2160,
2442  kMaxFps = 60,
2443  };
2444 
2448  int width; // Number of pixels.
2452  int height; // Number of pixels.
2456  int fps;
2457  VideoFormat() : width(FRAME_WIDTH_640), height(FRAME_HEIGHT_360), fps(FRAME_RATE_FPS_15) {}
2458  VideoFormat(int w, int h, int f) : width(w), height(h), fps(f) {}
2459 };
2460 
2464 enum VIDEO_CONTENT_HINT {
2468  CONTENT_HINT_NONE,
2475  CONTENT_HINT_MOTION,
2481  CONTENT_HINT_DETAILS
2482 };
2483 
2487 enum LOCAL_AUDIO_STREAM_STATE {
2491  LOCAL_AUDIO_STREAM_STATE_STOPPED = 0,
2495  LOCAL_AUDIO_STREAM_STATE_RECORDING = 1,
2499  LOCAL_AUDIO_STREAM_STATE_ENCODING = 2,
2503  LOCAL_AUDIO_STREAM_STATE_FAILED = 3
2504 };
2505 
2509 enum LOCAL_AUDIO_STREAM_ERROR {
2513  LOCAL_AUDIO_STREAM_ERROR_OK = 0,
2517  LOCAL_AUDIO_STREAM_ERROR_FAILURE = 1,
2521  LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
2525  LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY = 3,
2530  LOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURE = 4,
2534  LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE = 5
2535 };
2536 
2539 enum LOCAL_VIDEO_STREAM_STATE {
2543  LOCAL_VIDEO_STREAM_STATE_STOPPED = 0,
2547  LOCAL_VIDEO_STREAM_STATE_CAPTURING = 1,
2551  LOCAL_VIDEO_STREAM_STATE_ENCODING = 2,
2555  LOCAL_VIDEO_STREAM_STATE_FAILED = 3
2556 };
2557 
2561 enum LOCAL_VIDEO_STREAM_ERROR {
2563  LOCAL_VIDEO_STREAM_ERROR_OK = 0,
2565  LOCAL_VIDEO_STREAM_ERROR_FAILURE = 1,
2567  LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
2569  LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY = 3,
2571  LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE = 4,
2573  LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE = 5,
2575  LOCAL_VIDEO_STREAM_ERROR_BACKGROUD = 6,
2577  LOCAL_VIDEO_STREAM_ERROR_MULTIPLE_FOREGROUND_APPS = 7,
2579  LOCAL_VIDEO_STREAM_ERROR_SYSTEM_PRESSURE = 8
2580 };
2581 
2585 enum REMOTE_AUDIO_STATE
2586 {
2593  REMOTE_AUDIO_STATE_STOPPED = 0, // Default state, audio is started or remote user disabled/muted audio stream
2597  REMOTE_AUDIO_STATE_STARTING = 1, // The first audio frame packet has been received
2604  REMOTE_AUDIO_STATE_DECODING = 2, // The first remote audio frame has been decoded or fronzen state ends
2609  REMOTE_AUDIO_STATE_FROZEN = 3, // Remote audio is frozen, probably due to network issue
2614  REMOTE_AUDIO_STATE_FAILED = 4, // Remote audio play failed
2615 };
2616 
2620 enum REMOTE_AUDIO_STATE_REASON
2621 {
2625  REMOTE_AUDIO_REASON_INTERNAL = 0,
2629  REMOTE_AUDIO_REASON_NETWORK_CONGESTION = 1,
2633  REMOTE_AUDIO_REASON_NETWORK_RECOVERY = 2,
2638  REMOTE_AUDIO_REASON_LOCAL_MUTED = 3,
2643  REMOTE_AUDIO_REASON_LOCAL_UNMUTED = 4,
2648  REMOTE_AUDIO_REASON_REMOTE_MUTED = 5,
2653  REMOTE_AUDIO_REASON_REMOTE_UNMUTED = 6,
2657  REMOTE_AUDIO_REASON_REMOTE_OFFLINE = 7,
2658 };
2659 
2661 enum REMOTE_VIDEO_STATE {
2667  REMOTE_VIDEO_STATE_STOPPED = 0,
2670  REMOTE_VIDEO_STATE_STARTING = 1,
2677  REMOTE_VIDEO_STATE_DECODING = 2,
2682  REMOTE_VIDEO_STATE_FROZEN = 3,
2686  REMOTE_VIDEO_STATE_FAILED = 4,
2687 };
2689 enum REMOTE_VIDEO_STATE_REASON {
2693  REMOTE_VIDEO_STATE_REASON_INTERNAL = 0,
2694 
2698  REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION = 1,
2699 
2703  REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY = 2,
2704 
2708  REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED = 3,
2709 
2713  REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED = 4,
2714 
2718  REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED = 5,
2719 
2723  REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED = 6,
2724 
2728  REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE = 7,
2729 
2733  REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK = 8,
2734 
2738  REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY = 9
2739 };
2740 
2746  VideoTrackInfo()
2747  : isLocal(false), ownerUid(0), trackId(0), connectionId(0)
2748  , streamType(VIDEO_STREAM_HIGH), codecType(VIDEO_CODEC_H264)
2749  , encodedFrameOnly(false), sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
2755  bool isLocal;
2759  uid_t ownerUid;
2760 
2764  track_id_t trackId;
2768  conn_id_t connectionId;
2772  VIDEO_STREAM_TYPE streamType;
2776  VIDEO_CODEC_TYPE codecType;
2786  VIDEO_SOURCE_TYPE sourceType;
2787 };
2788 
2792 enum REMOTE_VIDEO_DOWNSCALE_LEVEL {
2796  REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE,
2800  REMOTE_VIDEO_DOWNSCALE_LEVEL_1,
2804  REMOTE_VIDEO_DOWNSCALE_LEVEL_2,
2808  REMOTE_VIDEO_DOWNSCALE_LEVEL_3,
2812  REMOTE_VIDEO_DOWNSCALE_LEVEL_4,
2813 };
2814 
2822  uid_t uid;
2823  user_id_t userId;
2827  unsigned int volume; // [0,255]
2828 
2829  AudioVolumeInfo() : uid(0), userId(0), volume(0) {}
2830 };
2831 
2836  public:
2837  virtual ~IPacketObserver() {}
2841  struct Packet {
2845  const unsigned char* buffer;
2849  unsigned int size;
2850 
2851  Packet() : buffer(NULL), size(0) {}
2852  };
2860  virtual bool onSendAudioPacket(Packet& packet) = 0;
2868  virtual bool onSendVideoPacket(Packet& packet) = 0;
2876  virtual bool onReceiveAudioPacket(Packet& packet) = 0;
2884  virtual bool onReceiveVideoPacket(Packet& packet) = 0;
2885 };
2890  public:
2900  virtual bool OnEncodedVideoImageReceived(const uint8_t* imageBuffer, size_t length,
2901  const EncodedVideoFrameInfo& videoEncodedFrameInfo) = 0;
2902 
2903  virtual ~IVideoEncodedImageReceiver() {}
2904 };
2905 
2909 enum AUDIO_SAMPLE_RATE_TYPE {
2913  AUDIO_SAMPLE_RATE_32000 = 32000,
2917  AUDIO_SAMPLE_RATE_44100 = 44100,
2921  AUDIO_SAMPLE_RATE_48000 = 48000,
2922 };
2926 enum VIDEO_CODEC_PROFILE_TYPE {
2930  VIDEO_CODEC_PROFILE_BASELINE = 66,
2934  VIDEO_CODEC_PROFILE_MAIN = 77,
2938  VIDEO_CODEC_PROFILE_HIGH = 100,
2939 };
2940 
2944 enum AUDIO_CODEC_PROFILE_TYPE {
2948  AUDIO_CODEC_PROFILE_LC_AAC = 0,
2952  AUDIO_CODEC_PROFILE_HE_AAC = 1,
2953 };
2954 
2960 {
2977 };
2978 
2979 
2983 enum RTMP_STREAM_PUBLISH_STATE {
2990  RTMP_STREAM_PUBLISH_STATE_IDLE = 0,
2996  RTMP_STREAM_PUBLISH_STATE_CONNECTING = 1,
3001  RTMP_STREAM_PUBLISH_STATE_RUNNING = 2,
3011  RTMP_STREAM_PUBLISH_STATE_RECOVERING = 3,
3016  RTMP_STREAM_PUBLISH_STATE_FAILURE = 4,
3017 };
3018 
3022 enum RTMP_STREAM_PUBLISH_ERROR {
3026  RTMP_STREAM_PUBLISH_ERROR_FAILED = -1,
3030  RTMP_STREAM_PUBLISH_ERROR_OK = 0,
3036  RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT = 1,
3040  RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED = 2,
3045  RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT = 3,
3050  RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR = 4,
3054  RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR = 5,
3058  RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN = 6,
3062  RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT = 7,
3066  RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED = 8,
3070  RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND = 9,
3074  RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED = 10,
3079  RTMP_STREAM_PUBLISH_ERROR_CDN_ERROR = 11,
3083  RTMP_STREAM_PUBLISH_ERROR_ALREADY_IN_USE = 12,
3084 };
3085 
3088 typedef struct RtcImage {
3092  const char* url;
3097  int x;
3102  int y;
3106  int width;
3110  int height;
3114  int zOrder;
3115 
3116  RtcImage() : url(NULL), x(0), y(0), width(0), height(0), zOrder(0) {}
3117 } RtcImage;
3118 
3122 enum CONNECTION_STATE_TYPE
3123 {
3127  CONNECTION_STATE_DISCONNECTED = 1,
3131  CONNECTION_STATE_CONNECTING = 2,
3136  CONNECTION_STATE_CONNECTED = 3,
3141  CONNECTION_STATE_RECONNECTING = 4,
3145  CONNECTION_STATE_FAILED = 5,
3146 };
3147 
3155  uid_t uid;
3159  int x;
3163  int y;
3167  int width;
3171  int height;
3177  int zOrder;
3181  double alpha;
3198  TranscodingUser()
3199  : uid(0),
3200  x(0),
3201  y(0),
3202  width(0),
3203  height(0),
3204  zOrder(0),
3205  alpha(1.0),
3206  audioChannel(0) {}
3207 };
3208 
3219  int width;
3226  int height;
3251  VIDEO_CODEC_PROFILE_TYPE videoCodecProfile;
3256  unsigned int backgroundColor;
3260  unsigned int userCount;
3273  const char* metadata;
3286  unsigned int watermarkCount;
3298  unsigned int backgroundImageCount;
3302  AUDIO_SAMPLE_RATE_TYPE audioSampleRate;
3321  AUDIO_CODEC_PROFILE_TYPE audioCodecProfile;
3322 
3323  LiveTranscoding()
3324  : width(360),
3325  height(640),
3326  videoBitrate(400),
3327  videoFramerate(15),
3328  lowLatency(false),
3329  videoGop(30),
3330  videoCodecProfile(VIDEO_CODEC_PROFILE_HIGH),
3331  backgroundColor(0x000000),
3332  userCount(0),
3333  transcodingUsers(NULL),
3334  transcodingExtraInfo(NULL),
3335  metadata(NULL),
3336  watermark(NULL),
3337  watermarkCount(0),
3338  backgroundImage(NULL),
3340  audioSampleRate(AUDIO_SAMPLE_RATE_48000),
3341  audioBitrate(48),
3342  audioChannels(1),
3343  audioCodecProfile(AUDIO_CODEC_PROFILE_LC_AAC) {}
3344 };
3345 
3353  VIDEO_SOURCE_TYPE sourceType;
3362  conn_id_t connectionId;
3366  const char* imageUrl;
3370  int x;
3374  int y;
3378  int width;
3382  int height;
3388  int zOrder;
3392  double alpha;
3396  bool mirror;
3397 
3399  : sourceType(VIDEO_SOURCE_CAMERA_PRIMARY),
3400  remoteUserUid(0),
3401  connectionId(DEFAULT_CONNECTION_ID),
3402  imageUrl(NULL),
3403  x(0),
3404  y(0),
3405  width(0),
3406  height(0),
3407  zOrder(0),
3408  alpha(1.0),
3409  mirror(false) {}
3410 };
3411 
3412 
3420  unsigned int streamCount;
3429 
3431  : streamCount(0),
3432  VideoInputStreams(NULL),
3434 };
3435 
3464 };
3465 
3469 enum LASTMILE_PROBE_RESULT_STATE {
3473  LASTMILE_PROBE_RESULT_COMPLETE = 1,
3478  LASTMILE_PROBE_RESULT_INCOMPLETE_NO_BWE = 2,
3483  LASTMILE_PROBE_RESULT_UNAVAILABLE = 3
3484 };
3485 
3494  unsigned int packetLossRate;
3498  unsigned int jitter;
3502  unsigned int availableBandwidth;
3503 
3505  jitter(0),
3506  availableBandwidth(0) {}
3507 };
3508 
3517  LASTMILE_PROBE_RESULT_STATE state;
3529  unsigned int rtt;
3530 
3531  LastmileProbeResult() : state(LASTMILE_PROBE_RESULT_UNAVAILABLE),
3532  rtt(0) {}
3533 };
3534 
3538 enum CONNECTION_CHANGED_REASON_TYPE
3539 {
3543  CONNECTION_CHANGED_CONNECTING = 0,
3547  CONNECTION_CHANGED_JOIN_SUCCESS = 1,
3551  CONNECTION_CHANGED_INTERRUPTED = 2,
3555  CONNECTION_CHANGED_BANNED_BY_SERVER = 3,
3559  CONNECTION_CHANGED_JOIN_FAILED = 4,
3563  CONNECTION_CHANGED_LEAVE_CHANNEL = 5,
3567  CONNECTION_CHANGED_INVALID_APP_ID = 6,
3571  CONNECTION_CHANGED_INVALID_CHANNEL_NAME = 7,
3575  CONNECTION_CHANGED_INVALID_TOKEN = 8,
3579  CONNECTION_CHANGED_TOKEN_EXPIRED = 9,
3583  CONNECTION_CHANGED_REJECTED_BY_SERVER = 10,
3587  CONNECTION_CHANGED_SETTING_PROXY_SERVER = 11,
3591  CONNECTION_CHANGED_RENEW_TOKEN = 12,
3596  CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED = 13,
3600  CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT = 14,
3604  CONNECTION_CHANGED_REJOIN_SUCCESS = 15,
3608  CONNECTION_CHANGED_LOST = 16,
3612  CONNECTION_CHANGED_ECHO_TEST = 17,
3616  CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED_BY_USER = 18,
3617 };
3618 
3622 enum NETWORK_TYPE {
3626  NETWORK_TYPE_UNKNOWN = -1,
3630  NETWORK_TYPE_DISCONNECTED = 0,
3634  NETWORK_TYPE_LAN = 1,
3638  NETWORK_TYPE_WIFI = 2,
3642  NETWORK_TYPE_MOBILE_2G = 3,
3646  NETWORK_TYPE_MOBILE_3G = 4,
3650  NETWORK_TYPE_MOBILE_4G = 5,
3651 };
3652 
3656 struct VideoCanvas {
3660  view_t view;
3664  media::base::RENDER_MODE_TYPE renderMode;
3668  VIDEO_MIRROR_MODE_TYPE mirrorMode;
3672  uid_t uid;
3673  bool isScreenView;
3674 
3675  void* priv; // private data (underlying video engine denotes it)
3676 
3677  size_t priv_size;
3678 
3679  VIDEO_SOURCE_TYPE sourceType;
3680 
3681  VideoCanvas() : view(NULL), renderMode(media::base::RENDER_MODE_HIDDEN), mirrorMode(VIDEO_MIRROR_MODE_AUTO),
3682  uid(0), isScreenView(false), priv(NULL), priv_size(0), sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3683  VideoCanvas(view_t v, media::base::RENDER_MODE_TYPE m, VIDEO_MIRROR_MODE_TYPE mt, uid_t u)
3684  : view(v), renderMode(m), mirrorMode(mt), uid(u), isScreenView(false), priv(NULL), priv_size(0),
3685  sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3686  VideoCanvas(view_t v, media::base::RENDER_MODE_TYPE m, VIDEO_MIRROR_MODE_TYPE mt, user_id_t)
3687  : view(v), renderMode(m), mirrorMode(mt), uid(0), isScreenView(false), priv(NULL), priv_size(0),
3688  sourceType(VIDEO_SOURCE_CAMERA_PRIMARY) {}
3689 };
3690 
3710 enum VOICE_BEAUTIFIER_PRESET {
3713  VOICE_BEAUTIFIER_OFF = 0x00000000,
3719  CHAT_BEAUTIFIER_MAGNETIC = 0x01010100,
3725  CHAT_BEAUTIFIER_FRESH = 0x01010200,
3731  CHAT_BEAUTIFIER_VITALITY = 0x01010300,
3745  SINGING_BEAUTIFIER = 0x01020100,
3748  TIMBRE_TRANSFORMATION_VIGOROUS = 0x01030100,
3751  TIMBRE_TRANSFORMATION_DEEP = 0x01030200,
3754  TIMBRE_TRANSFORMATION_MELLOW = 0x01030300,
3757  TIMBRE_TRANSFORMATION_FALSETTO = 0x01030400,
3760  TIMBRE_TRANSFORMATION_FULL = 0x01030500,
3763  TIMBRE_TRANSFORMATION_CLEAR = 0x01030600,
3766  TIMBRE_TRANSFORMATION_RESOUNDING = 0x01030700,
3769  TIMBRE_TRANSFORMATION_RINGING = 0x01030800
3770 };
3771 
3774 enum AUDIO_EFFECT_PRESET {
3777  AUDIO_EFFECT_OFF = 0x00000000,
3785  ROOM_ACOUSTICS_KTV = 0x02010100,
3793  ROOM_ACOUSTICS_VOCAL_CONCERT = 0x02010200,
3801  ROOM_ACOUSTICS_STUDIO = 0x02010300,
3809  ROOM_ACOUSTICS_PHONOGRAPH = 0x02010400,
3816  ROOM_ACOUSTICS_VIRTUAL_STEREO = 0x02010500,
3824  ROOM_ACOUSTICS_SPACIAL = 0x02010600,
3832  ROOM_ACOUSTICS_ETHEREAL = 0x02010700,
3844  ROOM_ACOUSTICS_3D_VOICE = 0x02010800,
3855  VOICE_CHANGER_EFFECT_UNCLE = 0x02020100,
3866  VOICE_CHANGER_EFFECT_OLDMAN = 0x02020200,
3877  VOICE_CHANGER_EFFECT_BOY = 0x02020300,
3888  VOICE_CHANGER_EFFECT_SISTER = 0x02020400,
3899  VOICE_CHANGER_EFFECT_GIRL = 0x02020500,
3908  VOICE_CHANGER_EFFECT_PIGKING = 0x02020600,
3916  VOICE_CHANGER_EFFECT_HULK = 0x02020700,
3924  STYLE_TRANSFORMATION_RNB = 0x02030100,
3932  STYLE_TRANSFORMATION_POPULAR = 0x02030200,
3942  PITCH_CORRECTION = 0x02040100
3943 
3947 };
3948 
3951 enum VOICE_CONVERSION_PRESET {
3954  VOICE_CONVERSION_OFF = 0x00000000,
3957  VOICE_CHANGER_NEUTRAL = 0x03010100,
3960  VOICE_CHANGER_SWEET = 0x03010200,
3963  VOICE_CHANGER_SOLID = 0x03010300,
3966  VOICE_CHANGER_BASS = 0x03010400
3967 };
3968 
3969 // TODO(ZYH), it will be deleted after the new interfaces have been implemented to replace it.
3970 enum AUDIO_REVERB_PRESET {
3974  AUDIO_REVERB_OFF = 0, // Turn off audio reverb
3978  AUDIO_REVERB_FX_KTV = 0x02010100,
3982  AUDIO_REVERB_FX_VOCAL_CONCERT = 0x02010200,
3986  AUDIO_REVERB_FX_UNCLE = 0x02020100,
3990  AUDIO_REVERB_FX_SISTER = 0x02020400,
3994  AUDIO_REVERB_FX_STUDIO = 0x02010300,
3998  AUDIO_REVERB_FX_POPULAR = 0x02030200,
4002  AUDIO_REVERB_FX_RNB = 0x02030100,
4006  AUDIO_REVERB_FX_PHONOGRAPH = 0x02010400
4007 };
4008 
4027  int bitrate;
4047 
4049  : dimensions(1920, 1080), frameRate(5), bitrate(STANDARD_BITRATE), captureMouseCursor(true), windowFocus(false), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0) {}
4050  ScreenCaptureParameters(const VideoDimensions& d, int f, int b)
4051  : dimensions(d), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0) {}
4052  ScreenCaptureParameters(int width, int height, int f, int b)
4053  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0) {}
4054  ScreenCaptureParameters(int width, int height, int f, int b, bool cur, bool fcs)
4055  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(cur), windowFocus(fcs), excludeWindowList(OPTIONAL_NULLPTR), excludeWindowCount(0) {}
4056  ScreenCaptureParameters(int width, int height, int f, int b, view_t *ex, int cnt)
4057  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(true), windowFocus(false), excludeWindowList(ex), excludeWindowCount(cnt) {}
4058  ScreenCaptureParameters(int width, int height, int f, int b, bool cur, bool fcs, view_t *ex, int cnt)
4059  : dimensions(width, height), frameRate(f), bitrate(b), captureMouseCursor(cur), windowFocus(fcs), excludeWindowList(ex), excludeWindowCount(cnt) {}
4060 };
4061 
4065 enum AUDIO_RECORDING_QUALITY_TYPE {
4069  AUDIO_RECORDING_QUALITY_LOW = 0,
4073  AUDIO_RECORDING_QUALITY_MEDIUM = 1,
4077  AUDIO_RECORDING_QUALITY_HIGH = 2,
4078 };
4079 
4083 enum AUDIO_FILE_RECORDING_TYPE {
4087  AUDIO_FILE_RECORDING_MIC = 1,
4091  AUDIO_FILE_RECORDING_PLAYBACK = 2,
4095  AUDIO_FILE_RECORDING_MIXED = 3,
4096 };
4097 
4101 enum AUDIO_ENCODED_FRAME_OBSERVER_POSITION {
4105  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_RECORD = 1,
4109  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK = 2,
4113  AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED = 3,
4114 };
4115 
4124  const char* filePath;
4130  bool encode;
4139  AUDIO_FILE_RECORDING_TYPE fileRecordingType;
4143  AUDIO_RECORDING_QUALITY_TYPE quality;
4144 
4146  : filePath(NULL),
4147  encode(false),
4148  sampleRate(32000),
4149  fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
4150  quality(AUDIO_RECORDING_QUALITY_LOW) {}
4151 
4152  AudioFileRecordingConfig(const char* file_path, int sample_rate, AUDIO_RECORDING_QUALITY_TYPE quality_type)
4153  : filePath(file_path),
4154  encode(false),
4155  sampleRate(sample_rate),
4156  fileRecordingType(AUDIO_FILE_RECORDING_MIXED),
4157  quality(quality_type) {}
4158 
4159  AudioFileRecordingConfig(const char* file_path, bool enc, int sample_rate, AUDIO_FILE_RECORDING_TYPE type, AUDIO_RECORDING_QUALITY_TYPE quality_type)
4160  : filePath(file_path),
4161  encode(enc),
4162  sampleRate(sample_rate),
4163  fileRecordingType(type),
4164  quality(quality_type) {}
4165 
4166  AudioFileRecordingConfig(const AudioFileRecordingConfig &rhs)
4167  : filePath(rhs.filePath),
4168  encode(rhs.encode),
4169  sampleRate(rhs.sampleRate),
4171  quality(rhs.quality) {}
4172 };
4173 
4182  AUDIO_ENCODED_FRAME_OBSERVER_POSITION postionType;
4186  AUDIO_ENCODING_TYPE encodingType;
4187 
4189  : postionType(AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK),
4190  encodingType(AUDIO_ENCODING_TYPE_OPUS_48000_MEDIUM){}
4191 
4192 };
4193 
4195 public:
4203 virtual void OnRecordAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4204 
4212 virtual void OnPlaybackAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4213 
4221 virtual void OnMixedAudioEncodedFrame(const uint8_t* frameBuffer, int length, const EncodedAudioFrameInfo& audioEncodedFrameInfo) = 0;
4222 
4223 virtual ~IAudioEncodedFrameObserver () {}
4224 };
4225 
4229 enum VOICE_CHANGER_PRESET {
4233  VOICE_CHANGER_OFF = 0, //Turn off the voice changer
4237  VOICE_CHANGER_OLDMAN = 0x02020200,
4241  VOICE_CHANGER_BABYBOY = 0x02020300,
4245  VOICE_CHANGER_BABYGIRL = 0x02020500,
4250  VOICE_CHANGER_ZHUBAJIE = 0x02020600,
4254  VOICE_CHANGER_ETHEREAL = 0x02010700,
4258  VOICE_CHANGER_HULK = 0x02020700,
4262  VOICE_BEAUTY_VIGOROUS = 0x01030100,
4266  VOICE_BEAUTY_DEEP = 0x01030200,
4270  VOICE_BEAUTY_MELLOW = 0x01030300,
4274  VOICE_BEAUTY_FALSETTO = 0x01030400,
4278  VOICE_BEAUTY_FULL = 0x01030500,
4282  VOICE_BEAUTY_CLEAR = 0x01030600,
4286  VOICE_BEAUTY_RESOUNDING = 0x01030700,
4290  VOICE_BEAUTY_RINGING = 0x01030800,
4294  VOICE_BEAUTY_SPACIAL = 0x02010600,
4299  GENERAL_BEAUTY_VOICE_MALE = 0x01010100,
4304  GENERAL_BEAUTY_VOICE_FEMALE_FRESH = 0x01010200,
4309  GENERAL_BEAUTY_VOICE_FEMALE_VITALITY = 0x01010300
4310 };
4313 enum AREA_CODE {
4317  AREA_CODE_CN = 0x00000001,
4321  AREA_CODE_NA = 0x00000002,
4325  AREA_CODE_EU = 0x00000004,
4329  AREA_CODE_AS = 0x00000008,
4333  AREA_CODE_JP = 0x00000010,
4337  AREA_CODE_IN = 0x00000020,
4341  AREA_CODE_GLOB = (0xFFFFFFFF)
4342 };
4343 
4344 enum AREA_CODE_EX {
4348  AREA_CODE_OC = 0x00000040,
4352  AREA_CODE_SA = 0x00000080,
4356  AREA_CODE_AF = 0x00000100,
4360  AREA_CODE_OVS = 0xFFFFFFFE
4361 };
4362 
4363 enum CHANNEL_MEDIA_RELAY_ERROR {
4366  RELAY_OK = 0,
4369  RELAY_ERROR_SERVER_ERROR_RESPONSE = 1,
4374  RELAY_ERROR_SERVER_NO_RESPONSE = 2,
4378  RELAY_ERROR_NO_RESOURCE_AVAILABLE = 3,
4381  RELAY_ERROR_FAILED_JOIN_SRC = 4,
4384  RELAY_ERROR_FAILED_JOIN_DEST = 5,
4387  RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC = 6,
4390  RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST = 7,
4395  RELAY_ERROR_SERVER_CONNECTION_LOST = 8,
4398  RELAY_ERROR_INTERNAL_ERROR = 9,
4401  RELAY_ERROR_SRC_TOKEN_EXPIRED = 10,
4404  RELAY_ERROR_DEST_TOKEN_EXPIRED = 11,
4405 };
4406 
4407 //callback event
4408 enum CHANNEL_MEDIA_RELAY_EVENT {
4412  RELAY_EVENT_NETWORK_DISCONNECTED = 0,
4415  RELAY_EVENT_NETWORK_CONNECTED = 1,
4418  RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL = 2,
4421  RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL = 3,
4424  RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL = 4,
4427  RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC = 5,
4430  RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC = 6,
4433  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL = 7,
4436  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED = 8,
4440  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE = 9,
4443  RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL = 10,
4446  RELAY_EVENT_VIDEO_PROFILE_UPDATE = 11,
4447 };
4448 
4449 enum CHANNEL_MEDIA_RELAY_STATE {
4452  RELAY_STATE_IDLE = 0,
4455  RELAY_STATE_CONNECTING = 1,
4459  RELAY_STATE_RUNNING = 2,
4462  RELAY_STATE_FAILURE = 3,
4463 };
4464 
4471  const char* channelName;
4475  const char* token;
4478  uid_t uid;
4479 };
4480 
4509 
4511  : srcInfo(NULL)
4512  , destInfos(NULL)
4513  , destCount(0)
4514  {}
4515 };
4516 
4525 
4527 
4528  bool operator==(const UplinkNetworkInfo& rhs) const {
4530  }
4531 };
4532 
4541  const char* uid;
4545  VIDEO_STREAM_TYPE stream_type;
4549  REMOTE_VIDEO_DOWNSCALE_LEVEL current_downscale_level;
4554 
4556  : uid(OPTIONAL_NULLPTR),
4557  stream_type(VIDEO_STREAM_HIGH),
4558  current_downscale_level(REMOTE_VIDEO_DOWNSCALE_LEVEL_NONE),
4559  expected_bitrate_bps(-1) {}
4560 
4561  PeerDownlinkInfo& operator=(const PeerDownlinkInfo& rhs) {
4562  if (this == &rhs) return *this;
4563  uid = OPTIONAL_NULLPTR;
4564  stream_type = rhs.stream_type;
4567  if (rhs.uid != OPTIONAL_NULLPTR) {
4568  char* temp = new char[strlen(rhs.uid) + 1];
4569  strcpy(temp, rhs.uid);
4570  uid = temp;
4571  }
4572  return *this;
4573  }
4574 
4575  ~PeerDownlinkInfo() {
4576  if (uid) delete [] uid;
4577  }
4578  };
4579 
4600 
4605  peer_downlink_info(OPTIONAL_NULLPTR),
4607 
4612  peer_downlink_info(OPTIONAL_NULLPTR),
4614  if (total_received_video_count <= 0) return;
4615  peer_downlink_info = new PeerDownlinkInfo[total_received_video_count];
4616  for (int i = 0; i < total_received_video_count; ++i)
4618  }
4619 
4620  DownlinkNetworkInfo& operator=(const DownlinkNetworkInfo& rhs) {
4621  if (this == &rhs) return *this;
4622  lastmile_buffer_delay_time_ms = rhs.lastmile_buffer_delay_time_ms;
4623  bandwidth_estimation_bps = rhs.bandwidth_estimation_bps;
4624  total_downscale_level_count = rhs.total_downscale_level_count;
4625  peer_downlink_info = OPTIONAL_NULLPTR;
4626  total_received_video_count = rhs.total_received_video_count;
4627  if (total_received_video_count > 0) {
4628  peer_downlink_info = new PeerDownlinkInfo[total_received_video_count];
4629  for (int i = 0; i < total_received_video_count; ++i)
4630  peer_downlink_info[i] = rhs.peer_downlink_info[i];
4631  }
4632  return *this;
4633  }
4634 
4635  ~DownlinkNetworkInfo() {
4636  if (peer_downlink_info) delete [] peer_downlink_info;
4637  }
4638 };
4639 
4642 enum ENCRYPTION_MODE {
4645  SM4_128_ECB = 4,
4648  AES_128_GCM2 = 7,
4651  AES_256_GCM2 = 8,
4654  MODE_END,
4655 };
4656 
4662  ENCRYPTION_MODE encryptionMode;
4668  const char* encryptionKey;
4669  uint8_t encryptionKdfSalt[32];
4670 
4672  : encryptionMode(AES_128_GCM2),
4673  encryptionKey(NULL)
4674  {
4675  memset(encryptionKdfSalt, 0, sizeof(encryptionKdfSalt));
4676  }
4677 
4679  const char* getEncryptionString() const {
4680  switch(encryptionMode) {
4681  case SM4_128_ECB:
4682  return "sm4-128-ecb";
4683  case AES_128_GCM2:
4684  return "aes-128-gcm";
4685  case AES_256_GCM2:
4686  return "aes-256-gcm";
4687  default:
4688  return "aes-128-gcm";
4689  }
4690  return "aes-128-gcm";
4691  }
4693 };
4694 
4697 enum ENCRYPTION_ERROR_TYPE {
4698  ENCRYPTION_ERROR_INTERNAL_FAILURE = 0,
4699  ENCRYPTION_ERROR_DECRYPTION_FAILURE = 1,
4700  ENCRYPTION_ERROR_ENCRYPTION_FAILURE = 2,
4701 };
4702 
4705 enum PERMISSION_TYPE {
4706  RECORD_AUDIO = 0,
4707  CAMERA = 1,
4708 };
4709 
4712 enum MAX_USER_ACCOUNT_LENGTH_TYPE
4713 {
4716  MAX_USER_ACCOUNT_LENGTH = 256
4717 };
4718 
4722 enum STREAM_SUBSCRIBE_STATE {
4723  SUB_STATE_IDLE = 0,
4724  SUB_STATE_NO_SUBSCRIBED = 1,
4725  SUB_STATE_SUBSCRIBING = 2,
4726  SUB_STATE_SUBSCRIBED = 3
4727 };
4728 
4732 enum STREAM_PUBLISH_STATE {
4733  PUB_STATE_IDLE = 0,
4734  PUB_STATE_NO_PUBLISHED = 1,
4735  PUB_STATE_PUBLISHING = 2,
4736  PUB_STATE_PUBLISHED = 3
4737 };
4738 
4742 struct UserInfo {
4746  uid_t uid;
4750  char userAccount[MAX_USER_ACCOUNT_LENGTH];
4751  UserInfo()
4752  : uid(0) {
4753  userAccount[0] = '\0';
4754  }
4755 };
4756 
4760 enum EAR_MONITORING_FILTER_TYPE {
4764  EAR_MONITORING_FILTER_NONE = (1<<0),
4768  EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS = (1<<1),
4772  EAR_MONITORING_FILTER_NOISE_SUPPRESSION = (1<<2)
4773 };
4774 
4775 } // namespace rtc
4776 
4777 namespace base {
4778 
4780  public:
4781  virtual int queryInterface(rtc::INTERFACE_ID_TYPE iid, void** inter) = 0;
4782  virtual ~IEngineBase() {}
4783 };
4784 
4785 class AParameter : public agora::util::AutoPtr<IAgoraParameter> {
4786  public:
4787  AParameter(IEngineBase& engine) { initialize(&engine); }
4788  AParameter(IEngineBase* engine) { initialize(engine); }
4790 
4791  private:
4792  bool initialize(IEngineBase* engine) {
4793  IAgoraParameter* p = NULL;
4794  if (engine && !engine->queryInterface(rtc::AGORA_IID_PARAMETER_ENGINE, (void**)&p)) reset(p);
4795  return p != NULL;
4796  }
4797 };
4798 
4800  public:
4801  virtual ~LicenseCallback() {}
4802  virtual void onCertificateRequired() = 0;
4803  virtual void onLicenseRequest() = 0;
4804  virtual void onLicenseValidated() = 0;
4805  virtual void onLicenseError(int result) = 0;
4806 };
4807 
4808 } // namespace base
4809 
4810 } // namespace agora
4811 
4817 AGORA_API const char* AGORA_CALL getAgoraSdkVersion(int* build);
4818 
4824 AGORA_API const char* AGORA_CALL getAgoraSdkErrorDescription(int err);
4825 
4826 AGORA_API int AGORA_CALL setAgoraSdkExternalSymbolLoader(void* (*func)(const char* symname));
4827 
4835 AGORA_API int AGORA_CALL createAgoraCredential(agora::util::AString &credential);
4836 
4850 AGORA_API int AGORA_CALL getAgoraCertificateVerifyResult(const char *credential_buf, int credential_len,
4851  const char *certificate_buf, int certificate_len);
4852 
4861 AGORA_API void setAgoraLicenseCallback(agora::base::LicenseCallback *callback);
4862 
4871 AGORA_API agora::base::LicenseCallback* getAgoraLicenseCallback();
agora::rtc::LiveTranscoding::transcodingUsers
TranscodingUser * transcodingUsers
Definition: AgoraBase.h:3264
agora::rtc::IPacketObserver::onReceiveVideoPacket
virtual bool onReceiveVideoPacket(Packet &packet)=0
agora::rtc::RtcStats::connectionId
unsigned int connectionId
Definition: AgoraBase.h:2044
agora::rtc::AudioFileRecordingConfig::quality
AUDIO_RECORDING_QUALITY_TYPE quality
Definition: AgoraBase.h:4143
agora::rtc::RtcImage::width
int width
Definition: AgoraBase.h:3106
agora::rtc::TranscodingVideoStream::zOrder
int zOrder
Definition: AgoraBase.h:3388
agora::rtc::RtcStats::firstAudioPacketDuration
int firstAudioPacketDuration
Definition: AgoraBase.h:2134
agora::rtc::UserInfo
Definition: AgoraBase.h:4742
agora::rtc::TranscodingVideoStream::alpha
double alpha
Definition: AgoraBase.h:3392
agora::rtc::VideoEncoderConfiguration::degradationPreference
DEGRADATION_PREFERENCE degradationPreference
Definition: AgoraBase.h:1881
agora::rtc::LastmileProbeResult
Definition: AgoraBase.h:3513
agora::rtc::AudioEncodedFrameObserverConfig
Definition: AgoraBase.h:4178
agora::rtc::ScreenCaptureParameters
Definition: AgoraBase.h:4012
agora::rtc::WatermarkRatio
Definition: AgoraBase.h:1985
agora::rtc::AudioVolumeInfo
Definition: AgoraBase.h:2818
agora::rtc::LastmileProbeResult::uplinkReport
LastmileProbeOneWayResult uplinkReport
Definition: AgoraBase.h:3521
agora::rtc::EncodedVideoFrameInfo::rotation
VIDEO_ORIENTATION rotation
Definition: AgoraBase.h:1743
agora::rtc::ScreenCaptureParameters::bitrate
int bitrate
Definition: AgoraBase.h:4027
agora::rtc::RtcStats::txVideoBytes
unsigned int txVideoBytes
Definition: AgoraBase.h:2064
agora::rtc::LiveTranscoding::backgroundColor
unsigned int backgroundColor
Definition: AgoraBase.h:3256
agora::base::IAgoraParameter
Definition: IAgoraParameter.h:174
agora::rtc::LastmileProbeConfig
Definition: AgoraBase.h:3439
agora::rtc::TranscodingUser::y
int y
Definition: AgoraBase.h:3163
agora::rtc::RtcStats::rxKBitRate
unsigned short rxKBitRate
Definition: AgoraBase.h:2080
agora::rtc::RtcStats::memoryTotalUsageRatio
double memoryTotalUsageRatio
Definition: AgoraBase.h:2120
agora::rtc::VideoFormat::fps
int fps
Definition: AgoraBase.h:2456
agora::rtc::VideoEncoderConfiguration::minBitrate
int minBitrate
Definition: AgoraBase.h:1872
agora::rtc::TranscodingUser::audioChannel
int audioChannel
Definition: AgoraBase.h:3197
agora::rtc::RtcStats::firstAudioPacketDurationAfterUnmute
int firstAudioPacketDurationAfterUnmute
Definition: AgoraBase.h:2154
agora::rtc::VideoFormat::width
int width
Definition: AgoraBase.h:2448
agora::rtc::ScreenCaptureParameters::windowFocus
bool windowFocus
Definition: AgoraBase.h:4038
agora::rtc::AudioEncodedFrameObserverConfig::encodingType
AUDIO_ENCODING_TYPE encodingType
Definition: AgoraBase.h:4186
agora::rtc::EncodedAudioFrameInfo::codec
AUDIO_CODEC_TYPE codec
Definition: AgoraBase.h:1609
agora::rtc::AudioPcmDataInfo::sampleCount
size_t sampleCount
Definition: AgoraBase.h:1644
agora::rtc::LiveTranscoding::videoGop
int videoGop
Definition: AgoraBase.h:3247
agora::rtc::ChannelMediaRelayConfiguration::destCount
int destCount
Definition: AgoraBase.h:4508
agora::rtc::LastmileProbeOneWayResult::jitter
unsigned int jitter
Definition: AgoraBase.h:3498
agora::rtc::VideoCanvas::mirrorMode
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:3668
agora::rtc::RtcStats::duration
unsigned int duration
Definition: AgoraBase.h:2048
agora::rtc::SimulcastStreamConfig::framerate
int framerate
Definition: AgoraBase.h:1952
agora::rtc::VideoDimensions::height
int height
Definition: AgoraBase.h:1389
agora::rtc::LastmileProbeConfig::probeUplink
bool probeUplink
Definition: AgoraBase.h:3446
agora::rtc::LiveTranscoding
Definition: AgoraBase.h:3212
agora::rtc::RtcStats::txBytes
unsigned int txBytes
Definition: AgoraBase.h:2052
agora::rtc::VideoFormat::height
int height
Definition: AgoraBase.h:2452
agora::rtc::Rectangle
Definition: AgoraBase.h:1962
agora::rtc::VideoCanvas::uid
uid_t uid
Definition: AgoraBase.h:3672
agora::rtc::RtcStats::firstVideoPacketDuration
int firstVideoPacketDuration
Definition: AgoraBase.h:2139
agora::rtc::EncodedVideoFrameInfo
Definition: AgoraBase.h:1691
agora::rtc::RtcStats::rxVideoBytes
unsigned int rxVideoBytes
Definition: AgoraBase.h:2072
agora::rtc::TranscodingVideoStream::remoteUserUid
uid_t remoteUserUid
Definition: AgoraBase.h:3357
agora::rtc::RemoteAudioStats::networkTransportDelay
int networkTransportDelay
Definition: AgoraBase.h:2293
agora::rtc::VideoEncoderConfiguration::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:1796
agora::rtc::EncodedVideoFrameInfo::uid
uid_t uid
Definition: AgoraBase.h:1760
agora::rtc::IAudioEncodedFrameObserver::OnPlaybackAudioEncodedFrame
virtual void OnPlaybackAudioEncodedFrame(const uint8_t *frameBuffer, int length, const EncodedAudioFrameInfo &audioEncodedFrameInfo)=0
agora::rtc::EncodedAudioFrameInfo
Definition: AgoraBase.h:1593
agora::util::AutoPtr
Definition: AgoraBase.h:99
agora::rtc::LastmileProbeOneWayResult::packetLossRate
unsigned int packetLossRate
Definition: AgoraBase.h:3494
agora::UserInfo::hasAudio
bool hasAudio
Definition: AgoraBase.h:1133
agora::rtc::ScreenCaptureParameters::excludeWindowCount
int excludeWindowCount
Definition: AgoraBase.h:4046
agora::rtc::IPacketObserver::Packet
Definition: AgoraBase.h:2841
agora::rtc::LiveTranscoding::audioCodecProfile
AUDIO_CODEC_PROFILE_TYPE audioCodecProfile
Definition: AgoraBase.h:3321
agora::rtc::RemoteAudioStats::receivedBitrate
int receivedBitrate
Definition: AgoraBase.h:2314
agora::rtc::VideoEncoderConfiguration
Definition: AgoraBase.h:1788
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:1974
agora::rtc::VideoEncoderConfiguration::bitrate
int bitrate
Definition: AgoraBase.h:1855
agora::util::AList
Definition: AgoraBase.h:232
agora::rtc::RtcStats::firstVideoKeyFrameDecodedDurationAfterUnmute
int firstVideoKeyFrameDecodedDurationAfterUnmute
Definition: AgoraBase.h:2169
agora::rtc::TranscodingUser
Definition: AgoraBase.h:3151
agora::rtc::AudioFileRecordingConfig::fileRecordingType
AUDIO_FILE_RECORDING_TYPE fileRecordingType
Definition: AgoraBase.h:4139
agora::rtc::RtcImage
Definition: AgoraBase.h:3088
agora::rtc::TranscodingUser::x
int x
Definition: AgoraBase.h:3159
agora::rtc::ChannelMediaInfo::token
const char * token
Definition: AgoraBase.h:4475
agora::rtc::WatermarkRatio::yRatio
float yRatio
Definition: AgoraBase.h:1993
agora::rtc::SimulcastStreamConfig
Definition: AgoraBase.h:1940
agora::rtc::LiveTranscoding::audioBitrate
int audioBitrate
Definition: AgoraBase.h:3307
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:4502
agora::rtc::RtcImage::x
int x
Definition: AgoraBase.h:3097
agora::rtc::TranscodingVideoStream::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:3353
agora::rtc::RtcImage::zOrder
int zOrder
Definition: AgoraBase.h:3114
agora::rtc::AudioVolumeInfo::volume
unsigned int volume
Definition: AgoraBase.h:2827
agora::rtc::TranscodingUser::uid
uid_t uid
Definition: AgoraBase.h:3155
agora::rtc::Rectangle::y
int y
Definition: AgoraBase.h:1970
agora::rtc::LocalAudioStats::sentBitrate
int sentBitrate
Definition: AgoraBase.h:2972
agora::rtc::RemoteAudioStats::totalFrozenTime
int totalFrozenTime
Definition: AgoraBase.h:2321
agora::rtc::RtcImage::url
const char * url
Definition: AgoraBase.h:3092
agora::rtc::IPacketObserver::Packet::buffer
const unsigned char * buffer
Definition: AgoraBase.h:2845
agora::rtc::RtcStats::firstVideoKeyFrameRenderedDurationAfterUnmute
int firstVideoKeyFrameRenderedDurationAfterUnmute
Definition: AgoraBase.h:2174
agora::UserInfo::userId
util::AString userId
Definition: AgoraBase.h:1127
agora::rtc::WatermarkOptions::positionInPortraitMode
Rectangle positionInPortraitMode
Definition: AgoraBase.h:2018
agora::rtc::LastmileProbeResult::downlinkReport
LastmileProbeOneWayResult downlinkReport
Definition: AgoraBase.h:3525
agora::rtc::LiveTranscoding::watermarkCount
unsigned int watermarkCount
Definition: AgoraBase.h:3286
agora::rtc::Rectangle::x
int x
Definition: AgoraBase.h:1966
agora::util::IString
Definition: AgoraBase.h:171
agora::rtc::EncodedAudioFrameInfo::advancedSettings
EncodedAudioFrameAdvancedSettings advancedSettings
Definition: AgoraBase.h:1627
agora::rtc::AudioFileRecordingConfig::sampleRate
int sampleRate
Definition: AgoraBase.h:4135
agora::rtc::LocalTranscoderConfiguration
Definition: AgoraBase.h:3416
agora::rtc::WatermarkRatio::xRatio
float xRatio
Definition: AgoraBase.h:1989
agora::rtc::LocalAudioStats::sentSampleRate
int sentSampleRate
Definition: AgoraBase.h:2968
agora::rtc::LastmileProbeConfig::expectedDownlinkBitrate
unsigned int expectedDownlinkBitrate
Definition: AgoraBase.h:3463
agora::rtc::RtcStats::cpuTotalUsage
double cpuTotalUsage
Definition: AgoraBase.h:2112
agora::rtc::IPacketObserver::Packet::size
unsigned int size
Definition: AgoraBase.h:2849
agora::rtc::LiveTranscoding::backgroundImageCount
unsigned int backgroundImageCount
Definition: AgoraBase.h:3298
agora::rtc::IPacketObserver
Definition: AgoraBase.h:2835
agora::rtc::LiveTranscoding::backgroundImage
RtcImage * backgroundImage
Definition: AgoraBase.h:3291
agora::rtc::RtcStats::cpuAppUsage
double cpuAppUsage
Definition: AgoraBase.h:2108
agora::rtc::VideoFormat
Definition: AgoraBase.h:2435
agora::rtc::TranscodingUser::alpha
double alpha
Definition: AgoraBase.h:3181
agora::rtc::WatermarkOptions::watermarkRatio
WatermarkRatio watermarkRatio
Definition: AgoraBase.h:2023
agora::rtc::DataStreamConfig
Definition: AgoraBase.h:1928
agora::rtc::RtcStats::txAudioBytes
unsigned int txAudioBytes
Definition: AgoraBase.h:2060
agora::rtc::RtcStats::connectTimeMs
int connectTimeMs
Definition: AgoraBase.h:2129
agora::rtc::LastmileProbeResult::state
LASTMILE_PROBE_RESULT_STATE state
Definition: AgoraBase.h:3517
agora::rtc::ChannelMediaInfo::channelName
const char * channelName
Definition: AgoraBase.h:4471
agora::rtc::LiveTranscoding::height
int height
Definition: AgoraBase.h:3226
agora::rtc::EncodedAudioFrameAdvancedSettings::speech
bool speech
Definition: AgoraBase.h:1580
agora::rtc::EncodedVideoFrameInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1720
agora::rtc::RtcStats::txVideoKBitRate
unsigned short txVideoKBitRate
Definition: AgoraBase.h:2096
agora::rtc::RtcStats::rxAudioBytes
unsigned int rxAudioBytes
Definition: AgoraBase.h:2068
agora::rtc::EncodedAudioFrameAdvancedSettings::sendEvenIfEmpty
bool sendEvenIfEmpty
Definition: AgoraBase.h:1586
agora::rtc::RtcStats::txAudioKBitRate
unsigned short txAudioKBitRate
Definition: AgoraBase.h:2088
agora::rtc::AudioVolumeInfo::uid
uid_t uid
Definition: AgoraBase.h:2822
agora::rtc::LiveTranscoding::videoBitrate
int videoBitrate
Definition: AgoraBase.h:3232
agora::rtc::VideoTrackInfo::trackId
track_id_t trackId
Definition: AgoraBase.h:2764
agora::rtc::VideoTrackInfo::encodedFrameOnly
bool encodedFrameOnly
Definition: AgoraBase.h:2782
agora::rtc::RemoteAudioStats::mosValue
int mosValue
Definition: AgoraBase.h:2343
agora::rtc::TranscodingUser::width
int width
Definition: AgoraBase.h:3167
agora::base::AParameter
Definition: AgoraBase.h:4785
agora::rtc::EncryptionConfig::encryptionMode
ENCRYPTION_MODE encryptionMode
Definition: AgoraBase.h:4662
agora::util::AOutputIterator
Definition: AgoraBase.h:201
agora::rtc::WatermarkOptions::positionInLandscapeMode
Rectangle positionInLandscapeMode
Definition: AgoraBase.h:2014
agora::rtc::IAudioEncodedFrameObserver
Definition: AgoraBase.h:4194
agora::rtc::EncodedVideoFrameInfo::width
int width
Definition: AgoraBase.h:1724
agora::rtc::VideoTrackInfo::ownerUid
uid_t ownerUid
Definition: AgoraBase.h:2759
agora::rtc::LastmileProbeOneWayResult::availableBandwidth
unsigned int availableBandwidth
Definition: AgoraBase.h:3502
agora::rtc::EncodedVideoFrameInfo::framesPerSecond
int framesPerSecond
Definition: AgoraBase.h:1735
agora::rtc::LiveTranscoding::transcodingExtraInfo
const char * transcodingExtraInfo
Definition: AgoraBase.h:3269
agora::rtc::VideoTrackInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:2776
agora::rtc::LiveTranscoding::metadata
const char * metadata
Definition: AgoraBase.h:3273
agora::rtc::LiveTranscoding::audioSampleRate
AUDIO_SAMPLE_RATE_TYPE audioSampleRate
Definition: AgoraBase.h:3302
agora::rtc::ChannelMediaRelayConfiguration
Definition: AgoraBase.h:4483
agora::rtc::UserInfo::uid
uid_t uid
Definition: AgoraBase.h:4746
agora::rtc::DataStreamConfig::ordered
bool ordered
Definition: AgoraBase.h:1934
agora::rtc::LastmileProbeOneWayResult
Definition: AgoraBase.h:3490
agora::rtc::EncodedVideoFrameInfo::renderTimeMs
int64_t renderTimeMs
Definition: AgoraBase.h:1752
agora::rtc::WatermarkRatio::widthRatio
float widthRatio
Definition: AgoraBase.h:1997
agora::rtc::AudioPcmDataInfo::samplesOut
size_t samplesOut
Definition: AgoraBase.h:1650
agora::rtc::VideoEncoderConfiguration::frameRate
int frameRate
Definition: AgoraBase.h:1800
agora::rtc::Rectangle::height
int height
Definition: AgoraBase.h:1978
agora::rtc::AudioPcmDataInfo::elapsedTimeMs
int64_t elapsedTimeMs
Definition: AgoraBase.h:1654
agora::rtc::WatermarkOptions::mode
WATERMARK_FIT_MODE mode
Definition: AgoraBase.h:2027
agora::rtc::EncodedAudioFrameInfo::sampleRateHz
int sampleRateHz
Definition: AgoraBase.h:1613
agora::rtc::RemoteAudioStats::audioLossRate
int audioLossRate
Definition: AgoraBase.h:2301
agora::UserInfo
Definition: AgoraBase.h:1123
agora::rtc::RtcStats::txPacketLossRate
int txPacketLossRate
Definition: AgoraBase.h:2178
agora::rtc::VideoCanvas::view
view_t view
Definition: AgoraBase.h:3660
agora::rtc::TranscodingVideoStream::imageUrl
const char * imageUrl
Definition: AgoraBase.h:3366
agora::rtc::AudioEncodedFrameObserverConfig::postionType
AUDIO_ENCODED_FRAME_OBSERVER_POSITION postionType
Definition: AgoraBase.h:4182
agora::rtc::IPacketObserver::onSendAudioPacket
virtual bool onSendAudioPacket(Packet &packet)=0
agora::rtc::LiveTranscoding::watermark
RtcImage * watermark
Definition: AgoraBase.h:3279
agora::rtc::ChannelMediaInfo
Definition: AgoraBase.h:4467
agora::UserInfo::hasVideo
bool hasVideo
Definition: AgoraBase.h:1139
agora::rtc::TranscodingVideoStream::connectionId
conn_id_t connectionId
Definition: AgoraBase.h:3362
agora::rtc::VideoCanvas::renderMode
media::base::RENDER_MODE_TYPE renderMode
Definition: AgoraBase.h:3664
agora::rtc::VideoTrackInfo::sourceType
VIDEO_SOURCE_TYPE sourceType
Definition: AgoraBase.h:2786
agora::rtc::RtcStats::txKBitRate
unsigned short txKBitRate
Definition: AgoraBase.h:2076
agora::rtc::EncodedAudioFrameInfo::numberOfChannels
int numberOfChannels
Definition: AgoraBase.h:1623
agora::rtc::EncodedVideoFrameInfo::streamType
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:1764
agora::rtc::RemoteAudioStats::quality
int quality
Definition: AgoraBase.h:2289
agora::rtc::ScreenCaptureParameters::frameRate
int frameRate
Definition: AgoraBase.h:4022
agora::rtc::RtcStats::firstVideoKeyFramePacketDurationAfterUnmute
int firstVideoKeyFramePacketDurationAfterUnmute
Definition: AgoraBase.h:2164
agora::rtc::LiveTranscoding::audioChannels
int audioChannels
Definition: AgoraBase.h:3317
agora::rtc::RtcImage::height
int height
Definition: AgoraBase.h:3110
agora::rtc::SimulcastStreamConfig::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:1944
agora::rtc::EncodedVideoFrameInfo::frameType
VIDEO_FRAME_TYPE frameType
Definition: AgoraBase.h:1739
agora::rtc::LastmileProbeConfig::probeDownlink
bool probeDownlink
Definition: AgoraBase.h:3452
agora::rtc::RtcStats::userCount
unsigned int userCount
Definition: AgoraBase.h:2104
agora::rtc::LocalTranscoderConfiguration::streamCount
unsigned int streamCount
Definition: AgoraBase.h:3420
agora::base::LicenseCallback
Definition: AgoraBase.h:4799
agora::rtc::EncryptionConfig
Definition: AgoraBase.h:4658
agora::rtc::LiveTranscoding::videoCodecProfile
VIDEO_CODEC_PROFILE_TYPE videoCodecProfile
Definition: AgoraBase.h:3251
agora::rtc::IVideoEncodedImageReceiver
Definition: AgoraBase.h:2889
agora::rtc::ScreenCaptureParameters::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:4017
agora::rtc::VideoDimensions::width
int width
Definition: AgoraBase.h:1385
agora::rtc::AudioFileRecordingConfig
Definition: AgoraBase.h:4119
agora::rtc::RemoteAudioStats
Definition: AgoraBase.h:2281
agora::rtc::TranscodingVideoStream::x
int x
Definition: AgoraBase.h:3370
agora::rtc::LiveTranscoding::lowLatency
bool lowLatency
Definition: AgoraBase.h:3243
agora::rtc::TranscodingVideoStream
Definition: AgoraBase.h:3349
agora::rtc::RtcStats
Definition: AgoraBase.h:2040
agora::base::IParameterEngine
Definition: AgoraBase.h:88
agora::rtc::WatermarkOptions::visibleInPreview
bool visibleInPreview
Definition: AgoraBase.h:2009
agora::rtc::TranscodingUser::zOrder
int zOrder
Definition: AgoraBase.h:3177
agora::rtc::LiveTranscoding::width
int width
Definition: AgoraBase.h:3219
agora::rtc::AudioPcmDataInfo
Definition: AgoraBase.h:1632
agora::rtc::VideoTrackInfo::connectionId
conn_id_t connectionId
Definition: AgoraBase.h:2768
agora::rtc::RtcStats::rxBytes
unsigned int rxBytes
Definition: AgoraBase.h:2056
agora::rtc::RtcStats::rxVideoKBitRate
unsigned short rxVideoKBitRate
Definition: AgoraBase.h:2092
agora::rtc::RtcStats::rxAudioKBitRate
unsigned short rxAudioKBitRate
Definition: AgoraBase.h:2084
agora::rtc::LocalAudioStats::numChannels
int numChannels
Definition: AgoraBase.h:2964
agora::rtc::WatermarkOptions
Definition: AgoraBase.h:2004
agora::rtc::VideoEncoderConfiguration::mirrorMode
VIDEO_MIRROR_MODE_TYPE mirrorMode
Definition: AgoraBase.h:1886
agora::rtc::LocalAudioStats
Definition: AgoraBase.h:2960
agora::rtc::ScreenCaptureParameters::captureMouseCursor
bool captureMouseCursor
Definition: AgoraBase.h:4032
agora::rtc::LocalTranscoderConfiguration::VideoInputStreams
TranscodingVideoStream * VideoInputStreams
Definition: AgoraBase.h:3424
agora::rtc::RtcImage::y
int y
Definition: AgoraBase.h:3102
agora::rtc::EncodedAudioFrameAdvancedSettings
Definition: AgoraBase.h:1570
agora::rtc::RtcStats::memoryAppUsageRatio
double memoryAppUsageRatio
Definition: AgoraBase.h:2116
agora::rtc::LastmileProbeConfig::expectedUplinkBitrate
unsigned int expectedUplinkBitrate
Definition: AgoraBase.h:3458
agora::rtc::VideoTrackInfo::isLocal
bool isLocal
Definition: AgoraBase.h:2755
agora::rtc::RtcStats::firstVideoKeyFramePacketDuration
int firstVideoKeyFramePacketDuration
Definition: AgoraBase.h:2144
agora::rtc::VideoTrackInfo::streamType
VIDEO_STREAM_TYPE streamType
Definition: AgoraBase.h:2772
agora::rtc::AudioFileRecordingConfig::encode
bool encode
Definition: AgoraBase.h:4130
agora::util::IContainer
Definition: AgoraBase.h:192
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1381
agora::rtc::TranscodingVideoStream::height
int height
Definition: AgoraBase.h:3382
agora::rtc::DataStreamConfig::syncWithAudio
bool syncWithAudio
Definition: AgoraBase.h:1931
agora::rtc::RemoteAudioStats::frozenRate
int frozenRate
Definition: AgoraBase.h:2326
agora::rtc::LiveTranscoding::userCount
unsigned int userCount
Definition: AgoraBase.h:3260
agora::util::CopyableAutoPtr
Definition: AgoraBase.h:155
agora::rtc::TranscodingVideoStream::width
int width
Definition: AgoraBase.h:3378
agora::rtc::TranscodingVideoStream::mirror
bool mirror
Definition: AgoraBase.h:3396
agora::rtc::AudioFileRecordingConfig::filePath
const char * filePath
Definition: AgoraBase.h:4124
agora::rtc::EncryptionConfig::encryptionKey
const char * encryptionKey
Definition: AgoraBase.h:4668
agora::rtc::EncodedVideoFrameInfo::trackId
int trackId
Definition: AgoraBase.h:1747
agora::rtc::ScreenCaptureParameters::excludeWindowList
view_t * excludeWindowList
Definition: AgoraBase.h:4042
agora::rtc::IPacketObserver::onSendVideoPacket
virtual bool onSendVideoPacket(Packet &packet)=0
agora::rtc::VideoTrackInfo
Definition: AgoraBase.h:2745
agora::rtc::LocalTranscoderConfiguration::videoOutputConfiguration
VideoEncoderConfiguration videoOutputConfiguration
Definition: AgoraBase.h:3428
agora::rtc::SimulcastStreamConfig::bitrate
int bitrate
Definition: AgoraBase.h:1948
agora::rtc::RemoteAudioStats::numChannels
int numChannels
Definition: AgoraBase.h:2305
agora::rtc::RemoteAudioStats::jitterBufferDelay
int jitterBufferDelay
Definition: AgoraBase.h:2297
agora::rtc::AudioPcmDataInfo::ntpTimeMs
int64_t ntpTimeMs
Definition: AgoraBase.h:1658
agora::rtc::RtcStats::firstVideoPacketDurationAfterUnmute
int firstVideoPacketDurationAfterUnmute
Definition: AgoraBase.h:2159
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:3237
agora::rtc::RemoteAudioStats::uid
uid_t uid
Definition: AgoraBase.h:2285
agora::rtc::RtcStats::rxPacketLossRate
int rxPacketLossRate
Definition: AgoraBase.h:2182
agora::rtc::RtcStats::lastmileDelay
unsigned short lastmileDelay
Definition: AgoraBase.h:2100
agora::rtc::VideoEncoderConfiguration::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1792
agora::rtc::LastmileProbeResult::rtt
unsigned int rtt
Definition: AgoraBase.h:3529
agora::rtc::TranscodingVideoStream::y
int y
Definition: AgoraBase.h:3374
agora::rtc::RtcStats::packetsBeforeFirstKeyFramePacket
int packetsBeforeFirstKeyFramePacket
Definition: AgoraBase.h:2149
agora::rtc::ChannelMediaRelayConfiguration::srcInfo
ChannelMediaInfo * srcInfo
Definition: AgoraBase.h:4495
agora::rtc::VideoEncoderConfiguration::orientationMode
ORIENTATION_MODE orientationMode
Definition: AgoraBase.h:1876
agora::base::IEngineBase
Definition: AgoraBase.h:4779
agora::util::IIterator
Definition: AgoraBase.h:183
agora::rtc::UserInfo::userAccount
char userAccount[MAX_USER_ACCOUNT_LENGTH]
Definition: AgoraBase.h:4750
agora::rtc::EncodedAudioFrameInfo::samplesPerChannel
int samplesPerChannel
Definition: AgoraBase.h:1619
agora::rtc::EncodedVideoFrameInfo::height
int height
Definition: AgoraBase.h:1728
agora::rtc::RtcStats::memoryAppUsageInKbytes
int memoryAppUsageInKbytes
Definition: AgoraBase.h:2124
agora::rtc::TranscodingUser::height
int height
Definition: AgoraBase.h:3171
agora::rtc::RemoteAudioStats::receivedSampleRate
int receivedSampleRate
Definition: AgoraBase.h:2309
agora::rtc::IPacketObserver::onReceiveAudioPacket
virtual bool onReceiveAudioPacket(Packet &packet)=0
agora::rtc::VideoCanvas
Definition: AgoraBase.h:3656
agora::rtc::LocalAudioStats::internalCodec
int internalCodec
Definition: AgoraBase.h:2976
agora::rtc::ChannelMediaInfo::uid
uid_t uid
Definition: AgoraBase.h:4478
agora::rtc::EncodedVideoFrameInfo::internalSendTs
uint64_t internalSendTs
Definition: AgoraBase.h:1756