Browse Source

fix. negative number for android platform

refactor. setLiveTranscoding
improve api doc
matrixbirds 5 years ago
parent
commit
a302755b2d

+ 5
- 0
CHANGELOG View File

1
 ## THE CHANGELOG
1
 ## THE CHANGELOG
2
 
2
 
3
+#### 2.4.1-alpha.3
4
+- refactor setLiveTranscoding: rename ios & android native parameters. export enum for javascript/typescript api.
5
+- fix negative number case in android platform.
6
+- improve api doc.
7
+
3
 #### 2.4.1-alpha.2
8
 #### 2.4.1-alpha.2
4
 - deprecated `sendMessage` & `createDataStream` & `removeAllListeners` & `off`
9
 - deprecated `sendMessage` & `createDataStream` & `removeAllListeners` & `off`
5
 - refactor event system
10
 - refactor event system

+ 53
- 43
android/src/main/java/com/syan/agora/AgoraModule.java View File

1927
         return type;
1927
         return type;
1928
     }
1928
     }
1929
 
1929
 
1930
+    public LiveTranscoding.AudioCodecProfileType getLiveTranscodingAudioCodecProfileEnum (int val) {
1931
+        LiveTranscoding.AudioCodecProfileType type = LiveTranscoding.AudioCodecProfileType.LC_AAC;
1932
+        switch (Integer.valueOf(val)) {
1933
+            case 0:
1934
+                type = LiveTranscoding.AudioCodecProfileType.LC_AAC;
1935
+                break;
1936
+            case 1:
1937
+                type = LiveTranscoding.AudioCodecProfileType.HE_AAC;
1938
+                break;
1939
+        }
1940
+        return type;
1941
+    }
1942
+
1930
 
1943
 
1931
 
1944
 
1932
     @ReactMethod
1945
     @ReactMethod
1994
     @ReactMethod
2007
     @ReactMethod
1995
     public void setLiveTranscoding(ReadableMap options, Promise promise) {
2008
     public void setLiveTranscoding(ReadableMap options, Promise promise) {
1996
         LiveTranscoding transcoding = new LiveTranscoding();
2009
         LiveTranscoding transcoding = new LiveTranscoding();
1997
-        if (options.hasKey("size") && null != options.getMap("size")) {
2010
+        if (options.hasKey("size")) {
1998
             ReadableMap size = options.getMap("size");
2011
             ReadableMap size = options.getMap("size");
1999
             transcoding.width = size.getInt("width");
2012
             transcoding.width = size.getInt("width");
2000
             transcoding.height = size.getInt("height");
2013
             transcoding.height = size.getInt("height");
2014
         if (options.hasKey("videoCodecProfile")) {
2027
         if (options.hasKey("videoCodecProfile")) {
2015
             transcoding.videoCodecProfile = getLiveTranscodingVideoCodecProfileEnum(options.getInt("videoCodecProfile"));
2028
             transcoding.videoCodecProfile = getLiveTranscodingVideoCodecProfileEnum(options.getInt("videoCodecProfile"));
2016
         }
2029
         }
2017
-        if (options.hasKey("transcodingUsers")) {
2018
-            ArrayList<LiveTranscoding.TranscodingUser> users = new ArrayList<LiveTranscoding.TranscodingUser>();
2019
-            ReadableArray transcodingUsers = options.getArray("transcodingUsers");
2020
-            for (int i = 0; i < transcodingUsers.size(); i++) {
2021
-                ReadableMap _map = transcodingUsers.getMap(i);
2022
-                LiveTranscoding.TranscodingUser user = new LiveTranscoding.TranscodingUser();
2023
-                user.uid = _map.getInt("uid");
2024
-                ReadableMap backgroundColor = _map.getMap("backgroundColor");
2025
-                user.x = backgroundColor.getInt("x");
2026
-                user.y = backgroundColor.getInt("y");
2027
-                user.width = backgroundColor.getInt("width");
2028
-                user.height = backgroundColor.getInt("height");
2029
-                user.zOrder = _map.getInt("zOrder");
2030
-                user.alpha = _map.getInt("alpha");
2031
-                user.audioChannel = _map.getInt("audioChannel");
2032
-                users.add(user);
2033
-            }
2034
-            transcoding.setUsers(users);
2030
+        if (options.hasKey("audioCodecProfile")) {
2031
+            transcoding.audioCodecProfile = getLiveTranscodingAudioCodecProfileEnum(options.getInt("audioCodecProfile"));
2035
         }
2032
         }
2036
-        if (options.hasKey("transcodingExtraInfo")) {
2037
-            transcoding.userConfigExtraInfo = options.getString("transcodingExtraInfo");
2033
+        if (options.hasKey("audioSampleRate")) {
2034
+            transcoding.audioSampleRate = getLiveTranscodingAudioSampleRateEnum(options.getInt("audioSampleRate"));
2038
         }
2035
         }
2039
         if (options.hasKey("watermark")) {
2036
         if (options.hasKey("watermark")) {
2040
             ReadableMap watermark = options.getMap("watermark");
2037
             ReadableMap watermark = options.getMap("watermark");
2041
             WritableMap map = Arguments.createMap();
2038
             WritableMap map = Arguments.createMap();
2042
             map.putString("url", watermark.getString("url"));
2039
             map.putString("url", watermark.getString("url"));
2043
-            map.putString("x", watermark.getString("x"));
2044
-            map.putString("y", watermark.getString("y"));
2045
-            map.putString("width", watermark.getString("width"));
2046
-            map.putString("height", watermark.getString("height"));
2040
+            map.putInt("x", watermark.getInt("x"));
2041
+            map.putInt("y", watermark.getInt("y"));
2042
+            map.putInt("width", watermark.getInt("width"));
2043
+            map.putInt("height", watermark.getInt("height"));
2047
             transcoding.watermark = createAgoraImage(map);
2044
             transcoding.watermark = createAgoraImage(map);
2048
         }
2045
         }
2049
         if (options.hasKey("backgroundImage")) {
2046
         if (options.hasKey("backgroundImage")) {
2050
-            ReadableMap watermark = options.getMap("backgroundImage");
2047
+            ReadableMap image = options.getMap("backgroundImage");
2051
             WritableMap map = Arguments.createMap();
2048
             WritableMap map = Arguments.createMap();
2052
-            map.putString("url", watermark.getString("url"));
2053
-            map.putString("x", watermark.getString("x"));
2054
-            map.putString("y", watermark.getString("y"));
2055
-            map.putString("width", watermark.getString("width"));
2056
-            map.putString("height", watermark.getString("height"));
2049
+            map.putString("url", image.getString("url"));
2050
+            map.putInt("x", image.getInt("x"));
2051
+            map.putInt("y", image.getInt("y"));
2052
+            map.putInt("width", image.getInt("width"));
2053
+            map.putInt("height", image.getInt("height"));
2057
             transcoding.backgroundImage = createAgoraImage(map);
2054
             transcoding.backgroundImage = createAgoraImage(map);
2058
         }
2055
         }
2059
         if (options.hasKey("backgroundColor")) {
2056
         if (options.hasKey("backgroundColor")) {
2060
-            ReadableMap backgroundColor = options.getMap("backgroundColor");
2061
-            transcoding.setBackgroundColor(
2062
-                    backgroundColor.getInt("red"),
2063
-                    backgroundColor.getInt("green"),
2064
-                    backgroundColor.getInt("blue")
2065
-            );
2066
-        }
2067
-        if (options.hasKey("audioSampleRate")) {
2068
-            transcoding.audioSampleRate = getLiveTranscodingAudioSampleRateEnum(options.getInt("audioSampleRate"));
2057
+            transcoding.setBackgroundColor(options.getInt("backgroundColor"));
2069
         }
2058
         }
2070
         if (options.hasKey("audioBitrate")) {
2059
         if (options.hasKey("audioBitrate")) {
2071
-            transcoding.audioChannels = options.getInt("audioBitrate");
2060
+            transcoding.audioBitrate = options.getInt("audioBitrate");
2072
         }
2061
         }
2073
         if (options.hasKey("audioChannels")) {
2062
         if (options.hasKey("audioChannels")) {
2074
-            transcoding.audioChannels = options.getInt("audioChannel");
2063
+            transcoding.audioChannels = options.getInt("audioChannels");
2064
+        }
2065
+        if (options.hasKey("transcodingUsers")) {
2066
+            ArrayList<LiveTranscoding.TranscodingUser> users = new ArrayList<LiveTranscoding.TranscodingUser>();
2067
+            ReadableArray transcodingUsers = options.getArray("transcodingUsers");
2068
+            for (int i = 0; i < transcodingUsers.size(); i++) {
2069
+                ReadableMap optionUser = transcodingUsers.getMap(i);
2070
+                LiveTranscoding.TranscodingUser user = new LiveTranscoding.TranscodingUser();
2071
+                user.uid = optionUser.getInt("uid");
2072
+                user.x = optionUser.getInt("x");
2073
+                user.y = optionUser.getInt("y");
2074
+                user.width = optionUser.getInt("width");
2075
+                user.height = optionUser.getInt("height");
2076
+                user.zOrder = optionUser.getInt("zOrder");
2077
+                user.alpha = (float) optionUser.getDouble("alpha");
2078
+                user.audioChannel = optionUser.getInt("audioChannel");
2079
+                users.add(user);
2080
+            }
2081
+            transcoding.setUsers(users);
2082
+        }
2083
+        if (options.hasKey("transcodingExtraInfo")) {
2084
+            transcoding.userConfigExtraInfo = options.getString("transcodingExtraInfo");
2075
         }
2085
         }
2076
         Integer res = AgoraManager.getInstance().mRtcEngine.setLiveTranscoding(transcoding);
2086
         Integer res = AgoraManager.getInstance().mRtcEngine.setLiveTranscoding(transcoding);
2077
         if (res == 0) {
2087
         if (res == 0) {
2405
                 .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
2415
                 .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
2406
                 .emit(agoraEvtName.toString(), params);
2416
                 .emit(agoraEvtName.toString(), params);
2407
     }
2417
     }
2408
-}
2418
+}

+ 1
- 1
android/src/main/java/com/syan/agora/AgoraViewManager.java View File

50
     @ReactProp(name = "remoteUid")
50
     @ReactProp(name = "remoteUid")
51
     public void setRemoteUid(final AgoraVideoView agoraVideoView, final int remoteUid) {
51
     public void setRemoteUid(final AgoraVideoView agoraVideoView, final int remoteUid) {
52
         agoraVideoView.setRemoteUid(remoteUid);
52
         agoraVideoView.setRemoteUid(remoteUid);
53
-        if (remoteUid > 0) {
53
+        if (remoteUid != 0) {
54
             AgoraManager.getInstance().setupRemoteVideo(remoteUid, agoraVideoView.getRenderMode());
54
             AgoraManager.getInstance().setupRemoteVideo(remoteUid, agoraVideoView.getRenderMode());
55
             surfaceView = AgoraManager.getInstance().getSurfaceView(remoteUid);
55
             surfaceView = AgoraManager.getInstance().getSurfaceView(remoteUid);
56
             surfaceView.setZOrderMediaOverlay(agoraVideoView.getZOrderMediaOverlay());
56
             surfaceView.setZOrderMediaOverlay(agoraVideoView.getZOrderMediaOverlay());

+ 0
- 298
android/src/main/java/com/syan/agora/ConvertUtils.java View File

1
-package com.syan.agora;
2
-
3
-import android.support.annotation.Nullable;
4
-
5
-import com.facebook.react.bridge.Arguments;
6
-import com.facebook.react.bridge.ReadableArray;
7
-import com.facebook.react.bridge.ReadableMap;
8
-import com.facebook.react.bridge.ReadableMapKeySetIterator;
9
-import com.facebook.react.bridge.ReadableType;
10
-import com.facebook.react.bridge.WritableArray;
11
-import com.facebook.react.bridge.WritableMap;
12
-import com.facebook.react.bridge.WritableNativeArray;
13
-import com.facebook.react.bridge.WritableNativeMap;
14
-
15
-import org.json.JSONArray;
16
-import org.json.JSONException;
17
-import org.json.JSONObject;
18
-
19
-import java.util.ArrayList;
20
-import java.util.HashMap;
21
-import java.util.Iterator;
22
-import java.util.List;
23
-import java.util.Map;
24
-
25
-public class ConvertUtils {
26
-    public static Map<String, Object> readableMapToMap(final @Nullable ReadableMap readableMap) {
27
-        if (readableMap == null) {
28
-            return new HashMap<>();
29
-        }
30
-
31
-        final ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
32
-        if (!iterator.hasNextKey()) {
33
-            return new HashMap<>();
34
-        }
35
-
36
-        final Map<String, Object> result = new HashMap<>();
37
-        while (iterator.hasNextKey()) {
38
-            final String key = iterator.nextKey();
39
-            result.put(key, toObject(readableMap, key));
40
-        }
41
-
42
-        return result;
43
-    }
44
-
45
-    public static Object toObject(@Nullable ReadableMap readableMap, String key) {
46
-        if (readableMap == null) {
47
-            return null;
48
-        }
49
-
50
-        Object result;
51
-
52
-        final ReadableType readableType = readableMap.getType(key);
53
-        switch (readableType) {
54
-            case Null:
55
-                result = key;
56
-                break;
57
-            case Boolean:
58
-                result = readableMap.getBoolean(key);
59
-                break;
60
-            case Number:
61
-                // Can be int or double.
62
-                double tmp = readableMap.getDouble(key);
63
-                if (tmp == (int) tmp) {
64
-                    result = (int) tmp;
65
-                } else {
66
-                    result = tmp;
67
-                }
68
-                break;
69
-            case String:
70
-                result = readableMap.getString(key);
71
-                break;
72
-            case Map:
73
-                result = readableMapToMap(readableMap.getMap(key));
74
-                break;
75
-            case Array:
76
-                result = readableArrayToList(readableMap.getArray(key));
77
-                break;
78
-            default:
79
-                throw new IllegalArgumentException("Could not convert object with key: " + key + ".");
80
-        }
81
-
82
-        return result;
83
-    }
84
-
85
-    /**
86
-     * toList converts a {@link ReadableArray} into an ArrayList.
87
-     *
88
-     * @param readableArray The ReadableArray to be conveted.
89
-     * @return An ArrayList containing the data that was in the ReadableArray.
90
-     */
91
-    public static List<Object> readableArrayToList(final @Nullable ReadableArray readableArray) {
92
-        if (readableArray == null) {
93
-            return null;
94
-        }
95
-
96
-        List<Object> result = new ArrayList<>(readableArray.size());
97
-        for (int index = 0; index < readableArray.size(); index++) {
98
-            final ReadableType readableType = readableArray.getType(index);
99
-            switch (readableType) {
100
-                case Null:
101
-                    result.add(String.valueOf(index));
102
-                    break;
103
-                case Boolean:
104
-                    result.add(readableArray.getBoolean(index));
105
-                    break;
106
-                case Number:
107
-                    // Can be int or double.
108
-                    double tmp = readableArray.getDouble(index);
109
-                    if (tmp == (int) tmp) {
110
-                        result.add((int) tmp);
111
-                    } else {
112
-                        result.add(tmp);
113
-                    }
114
-                    break;
115
-                case String:
116
-                    result.add(readableArray.getString(index));
117
-                    break;
118
-                case Map:
119
-                    result.add(readableMapToMap(readableArray.getMap(index)));
120
-                    break;
121
-                case Array:
122
-                    result = readableArrayToList(readableArray.getArray(index));
123
-                    break;
124
-                default:
125
-                    throw new IllegalArgumentException("Could not convert object with index: " + index + ".");
126
-            }
127
-        }
128
-
129
-        return result;
130
-    }
131
-
132
-    /**
133
-     * better
134
-     *
135
-     * @param jsonArray
136
-     * @return
137
-     * @throws JSONException
138
-     */
139
-    public static WritableArray jsonToReact(final JSONArray jsonArray) throws JSONException {
140
-        final WritableArray writableArray = Arguments.createArray();
141
-        for (int i = 0; i < jsonArray.length(); i++) {
142
-            final Object value = jsonArray.get(i);
143
-            if (value instanceof Float || value instanceof Double) {
144
-                writableArray.pushDouble(jsonArray.getDouble(i));
145
-            } else if (value instanceof Number) {
146
-                writableArray.pushInt(jsonArray.getInt(i));
147
-            } else if (value instanceof String) {
148
-                writableArray.pushString(jsonArray.getString(i));
149
-            } else if (value instanceof Boolean) {
150
-                writableArray.pushBoolean(jsonArray.getBoolean(i));
151
-            } else if (value instanceof JSONObject) {
152
-                writableArray.pushMap(jsonToReact(jsonArray.getJSONObject(i)));
153
-            } else if (value instanceof JSONArray) {
154
-                writableArray.pushArray(jsonToReact(jsonArray.getJSONArray(i)));
155
-            } else if (value == JSONObject.NULL) {
156
-                writableArray.pushNull();
157
-            }
158
-        }
159
-        return writableArray;
160
-    }
161
-
162
-    /**
163
-     * better
164
-     *
165
-     * @param jsonObject
166
-     * @return
167
-     * @throws JSONException
168
-     */
169
-    public static WritableMap jsonToReact(final JSONObject jsonObject) throws JSONException {
170
-        final WritableMap writableMap = Arguments.createMap();
171
-        final Iterator iterator = jsonObject.keys();
172
-        while (iterator.hasNext()) {
173
-            final String key = (String) iterator.next();
174
-            final Object value = jsonObject.get(key);
175
-            if (value instanceof Float || value instanceof Double) {
176
-                writableMap.putDouble(key, jsonObject.getDouble(key));
177
-            } else if (value instanceof Number) {
178
-                writableMap.putInt(key, jsonObject.getInt(key));
179
-            } else if (value instanceof String) {
180
-                writableMap.putString(key, jsonObject.getString(key));
181
-            } else if (value instanceof JSONObject) {
182
-                writableMap.putMap(key, jsonToReact(jsonObject.getJSONObject(key)));
183
-            } else if (value instanceof JSONArray) {
184
-                writableMap.putArray(key, jsonToReact(jsonObject.getJSONArray(key)));
185
-            } else if (value instanceof Boolean) {
186
-                writableMap.putBoolean(key, jsonObject.getBoolean(key));
187
-            } else if (value == JSONObject.NULL) {
188
-                writableMap.putNull(key);
189
-            }
190
-        }
191
-        return writableMap;
192
-    }
193
-
194
-    public static WritableMap convertJsonToMap(JSONObject jsonObject) throws JSONException {
195
-        WritableMap map = new WritableNativeMap();
196
-
197
-        Iterator<String> iterator = jsonObject.keys();
198
-        while (iterator.hasNext()) {
199
-            String key = iterator.next();
200
-            Object value = jsonObject.get(key);
201
-            if (value instanceof JSONObject) {
202
-                map.putMap(key, convertJsonToMap((JSONObject) value));
203
-            } else if (value instanceof JSONArray) {
204
-                map.putArray(key, convertJsonToArray((JSONArray) value));
205
-            } else if (value instanceof Boolean) {
206
-                map.putBoolean(key, (Boolean) value);
207
-            } else if (value instanceof Integer) {
208
-                map.putInt(key, (Integer) value);
209
-            } else if (value instanceof Double) {
210
-                map.putDouble(key, (Double) value);
211
-            } else if (value instanceof String) {
212
-                map.putString(key, (String) value);
213
-            } else {
214
-                map.putString(key, value.toString());
215
-            }
216
-        }
217
-        return map;
218
-    }
219
-
220
-    public static WritableArray convertJsonToArray(JSONArray jsonArray) throws JSONException {
221
-        WritableArray array = new WritableNativeArray();
222
-
223
-        for (int i = 0; i < jsonArray.length(); i++) {
224
-            Object value = jsonArray.get(i);
225
-            if (value instanceof JSONObject) {
226
-                array.pushMap(convertJsonToMap((JSONObject) value));
227
-            } else if (value instanceof JSONArray) {
228
-                array.pushArray(convertJsonToArray((JSONArray) value));
229
-            } else if (value instanceof Boolean) {
230
-                array.pushBoolean((Boolean) value);
231
-            } else if (value instanceof Integer) {
232
-                array.pushInt((Integer) value);
233
-            } else if (value instanceof Double) {
234
-                array.pushDouble((Double) value);
235
-            } else if (value instanceof String) {
236
-                array.pushString((String) value);
237
-            } else {
238
-                array.pushString(value.toString());
239
-            }
240
-        }
241
-        return array;
242
-    }
243
-
244
-    public static JSONObject convertMapToJson(ReadableMap readableMap) throws JSONException {
245
-        JSONObject object = new JSONObject();
246
-        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
247
-        while (iterator.hasNextKey()) {
248
-            String key = iterator.nextKey();
249
-            switch (readableMap.getType(key)) {
250
-                case Null:
251
-                    object.put(key, JSONObject.NULL);
252
-                    break;
253
-                case Boolean:
254
-                    object.put(key, readableMap.getBoolean(key));
255
-                    break;
256
-                case Number:
257
-                    object.put(key, readableMap.getDouble(key));
258
-                    break;
259
-                case String:
260
-                    object.put(key, readableMap.getString(key));
261
-                    break;
262
-                case Map:
263
-                    object.put(key, convertMapToJson(readableMap.getMap(key)));
264
-                    break;
265
-                case Array:
266
-                    object.put(key, convertArrayToJson(readableMap.getArray(key)));
267
-                    break;
268
-            }
269
-        }
270
-        return object;
271
-    }
272
-
273
-    public static JSONArray convertArrayToJson(ReadableArray readableArray) throws JSONException {
274
-        JSONArray array = new JSONArray();
275
-        for (int i = 0; i < readableArray.size(); i++) {
276
-            switch (readableArray.getType(i)) {
277
-                case Null:
278
-                    break;
279
-                case Boolean:
280
-                    array.put(readableArray.getBoolean(i));
281
-                    break;
282
-                case Number:
283
-                    array.put(readableArray.getDouble(i));
284
-                    break;
285
-                case String:
286
-                    array.put(readableArray.getString(i));
287
-                    break;
288
-                case Map:
289
-                    array.put(convertMapToJson(readableArray.getMap(i)));
290
-                    break;
291
-                case Array:
292
-                    array.put(convertArrayToJson(readableArray.getArray(i)));
293
-                    break;
294
-            }
295
-        }
296
-        return array;
297
-    }
298
-}

+ 292
- 281
ios/RCTAgora/RCTAgora.m View File

47
   return toSend;
47
   return toSend;
48
 }
48
 }
49
 
49
 
50
-- (void)receiveMetadata:(NSData *_Nonnull)data fromUser:(NSInteger)uid atTimestamp:(NSTimeInterval)timestamp {
50
+- (void)receiveMetadata:(NSData *_Nonnull)data fromUser:(NSUInteger)uid atTimestamp:(NSTimeInterval)timestamp {
51
   NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
51
   NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
52
   [self sendEvent:AGMediaMetaDataReceived params:@{
52
   [self sendEvent:AGMediaMetaDataReceived params:@{
53
-                                               @"uid": @(uid),
54
-                                               @"data": dataStr,
55
-                                               @"ts": @(timestamp)
56
-                                               }];
53
+                                                   @"uid": @(uid),
54
+                                                   @"data": dataStr,
55
+                                                   @"ts": @(timestamp)
56
+                                                   }];
57
 }
57
 }
58
 
58
 
59
 
59
 
60
 RCT_EXPORT_MODULE();
60
 RCT_EXPORT_MODULE();
61
 
61
 
62
+- (UIColor *) UIColorFromRGB:(NSUInteger)rgbValue {
63
+  return [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0];
64
+}
65
+
62
 - (AgoraImage *) makeAgoraImage:(NSDictionary *)options {
66
 - (AgoraImage *) makeAgoraImage:(NSDictionary *)options {
63
   AgoraImage *img = [AgoraImage new];
67
   AgoraImage *img = [AgoraImage new];
64
-  img.url = [NSURL URLWithString:[options[@"url"] stringValue]];
68
+  img.url = [NSURL URLWithString:options[@"url"]];
65
   
69
   
66
   img.rect = CGRectMake((CGFloat)[options[@"x"] floatValue],
70
   img.rect = CGRectMake((CGFloat)[options[@"x"] floatValue],
67
                         (CGFloat)[options[@"y"] floatValue],
71
                         (CGFloat)[options[@"y"] floatValue],
163
            @"ChannelProfileGame": @(AgoraChannelProfileGame),
167
            @"ChannelProfileGame": @(AgoraChannelProfileGame),
164
            @"AudioMode": @(AgoraAudioMode),
168
            @"AudioMode": @(AgoraAudioMode),
165
            @"VideoMode": @(AgoraVideoMode),
169
            @"VideoMode": @(AgoraVideoMode),
166
-         };
170
+           };
167
 }
171
 }
168
 
172
 
169
 // init
173
 // init
187
   });
191
   });
188
   if ([options objectForKey:@"mode"]) {
192
   if ([options objectForKey:@"mode"]) {
189
     switch([options[@"mode"] integerValue]) {
193
     switch([options[@"mode"] integerValue]) {
190
-       case AgoraAudioMode: {
191
-         [self.rtcEngine enableLocalAudio:true];
192
-         [self.rtcEngine enableLocalVideo:false];
193
-         break;
194
-       }
195
-       case AgoraVideoMode: {
196
-         [self.rtcEngine enableLocalVideo:true];
197
-         [self.rtcEngine enableLocalAudio:false];
198
-         break;
199
-       }
194
+      case AgoraAudioMode: {
195
+        [self.rtcEngine enableLocalAudio:true];
196
+        [self.rtcEngine enableLocalVideo:false];
197
+        break;
198
+      }
199
+      case AgoraVideoMode: {
200
+        [self.rtcEngine enableLocalVideo:true];
201
+        [self.rtcEngine enableLocalAudio:false];
202
+        break;
203
+      }
200
     }
204
     }
201
-   } else {
202
-     [self.rtcEngine enableLocalVideo:true];
203
-     [self.rtcEngine enableLocalAudio:true];
204
-   }
205
+  } else {
206
+    [self.rtcEngine enableLocalVideo:true];
207
+    [self.rtcEngine enableLocalAudio:true];
208
+  }
205
   
209
   
206
   if ([options objectForKey:@"beauty"]) {
210
   if ([options objectForKey:@"beauty"]) {
207
     AgoraBeautyOptions *beautyOption = [[AgoraBeautyOptions alloc] init];
211
     AgoraBeautyOptions *beautyOption = [[AgoraBeautyOptions alloc] init];
209
     beautyOption.lighteningLevel = [options[@"beauty"][@"lighteningLevel"] floatValue];
213
     beautyOption.lighteningLevel = [options[@"beauty"][@"lighteningLevel"] floatValue];
210
     beautyOption.smoothnessLevel = [options[@"beauty"][@"smoothnessLevel"] floatValue];
214
     beautyOption.smoothnessLevel = [options[@"beauty"][@"smoothnessLevel"] floatValue];
211
     beautyOption.rednessLevel = [options[@"beauty"][@"rednessLevel"] floatValue];
215
     beautyOption.rednessLevel = [options[@"beauty"][@"rednessLevel"] floatValue];
212
-      [self.rtcEngine setBeautyEffectOptions:true options:beautyOption];
216
+    [self.rtcEngine setBeautyEffectOptions:true options:beautyOption];
213
   }
217
   }
214
   if ([options objectForKey:@"voice"]) {
218
   if ([options objectForKey:@"voice"]) {
215
     NSInteger voiceValue = [options[@"voice"][@"value"] integerValue];
219
     NSInteger voiceValue = [options[@"voice"][@"value"] integerValue];
221
       [self.rtcEngine setLocalVoiceReverbPreset:(AgoraAudioReverbPreset)voiceValue];
225
       [self.rtcEngine setLocalVoiceReverbPreset:(AgoraAudioReverbPreset)voiceValue];
222
     }
226
     }
223
   }
227
   }
224
-   if (options[@"secret"] != nil) {
225
-     [self.rtcEngine setEncryptionSecret:[options[@"secret"] stringValue]];
226
-     if (options[@"secretMode"] != nil) {
227
-       [self.rtcEngine setEncryptionMode:[options[@"secretMode"] stringValue]];
228
-     }
229
-   }
230
-     
231
-   AgoraVideoEncoderConfiguration *video_encoder_config = [[AgoraVideoEncoderConfiguration new] initWithWidth:[options[@"videoEncoderConfig"][@"width"] integerValue] height:[options[@"videoEncoderConfig"][@"height"] integerValue] frameRate:[options[@"videoEncoderConfig"][@"frameRate"] integerValue] bitrate:[options[@"videoEncoderConfig"][@"bitrate"] integerValue] orientationMode: (AgoraVideoOutputOrientationMode)[options[@"videoEncoderConfig"][@"orientationMode"] integerValue]];
232
-   [self.rtcEngine setVideoEncoderConfiguration:video_encoder_config];
233
-   [self.rtcEngine setClientRole:(AgoraClientRole)[options[@"clientRole"] integerValue]];
234
-   [self.rtcEngine setAudioProfile:(AgoraAudioProfile)[options[@"audioProfile"] integerValue]
235
-                          scenario:(AgoraAudioScenario)[options[@"audioScenario"] integerValue]];
236
-     
237
-     //Enable Agora Native SDK be Interoperable with Agora Web SDK
238
-   [self.rtcEngine enableWebSdkInteroperability:YES];
239
- }
228
+  if (options[@"secret"] != nil) {
229
+    [self.rtcEngine setEncryptionSecret:[options[@"secret"] stringValue]];
230
+    if (options[@"secretMode"] != nil) {
231
+      [self.rtcEngine setEncryptionMode:[options[@"secretMode"] stringValue]];
232
+    }
233
+  }
234
+  
235
+  AgoraVideoEncoderConfiguration *video_encoder_config = [[AgoraVideoEncoderConfiguration new] initWithWidth:[options[@"videoEncoderConfig"][@"width"] integerValue] height:[options[@"videoEncoderConfig"][@"height"] integerValue] frameRate:[options[@"videoEncoderConfig"][@"frameRate"] integerValue] bitrate:[options[@"videoEncoderConfig"][@"bitrate"] integerValue] orientationMode: (AgoraVideoOutputOrientationMode)[options[@"videoEncoderConfig"][@"orientationMode"] integerValue]];
236
+  [self.rtcEngine setVideoEncoderConfiguration:video_encoder_config];
237
+  [self.rtcEngine setClientRole:(AgoraClientRole)[options[@"clientRole"] integerValue]];
238
+  [self.rtcEngine setAudioProfile:(AgoraAudioProfile)[options[@"audioProfile"] integerValue]
239
+                         scenario:(AgoraAudioScenario)[options[@"audioScenario"] integerValue]];
240
+  
241
+  //Enable Agora Native SDK be Interoperable with Agora Web SDK
242
+  [self.rtcEngine enableWebSdkInteroperability:YES];
243
+}
240
 
244
 
241
 // renew token
245
 // renew token
242
 RCT_EXPORT_METHOD(renewToken
246
 RCT_EXPORT_METHOD(renewToken
286
 RCT_EXPORT_METHOD(joinChannel:(NSDictionary *)options
290
 RCT_EXPORT_METHOD(joinChannel:(NSDictionary *)options
287
                   resolve:(RCTPromiseResolveBlock)resolve
291
                   resolve:(RCTPromiseResolveBlock)resolve
288
                   reject:(RCTPromiseRejectBlock)reject) {
292
                   reject:(RCTPromiseRejectBlock)reject) {
289
-  [AgoraConst share].localUid = [options[@"uid"] integerValue];
293
+  [AgoraConst share].localUid = (NSUInteger)[options[@"uid"] integerValue];
290
   NSInteger res = [self.rtcEngine joinChannelByToken:options[@"token"] channelId:options[@"channelName"] info:options[@"info"] uid:[AgoraConst share].localUid joinSuccess:nil];
294
   NSInteger res = [self.rtcEngine joinChannelByToken:options[@"token"] channelId:options[@"channelName"] info:options[@"info"] uid:[AgoraConst share].localUid joinSuccess:nil];
291
   if (res == 0) {
295
   if (res == 0) {
292
     resolve(nil);
296
     resolve(nil);
301
                   reject:(RCTPromiseRejectBlock) reject) {
305
                   reject:(RCTPromiseRejectBlock) reject) {
302
   NSInteger res = [self.rtcEngine leaveChannel:^(AgoraChannelStats * _Nonnull stat) {
306
   NSInteger res = [self.rtcEngine leaveChannel:^(AgoraChannelStats * _Nonnull stat) {
303
     [self sendEvent:AGLeaveChannel params:@{
307
     [self sendEvent:AGLeaveChannel params:@{
304
-                                             @"message": @"leaveChannel",
305
-                                             @"duration": @(stat.duration),
306
-                                             @"txBytes": @(stat.txBytes),
307
-                                             @"rxBytes": @(stat.rxBytes),
308
-                                             @"txAudioKBitrate": @(stat.txAudioKBitrate),
309
-                                             @"rxAudioKBitrate": @(stat.rxAudioKBitrate),
310
-                                             @"txVideoKBitrate": @(stat.txVideoKBitrate),
311
-                                             @"rxVideoKBitrate": @(stat.rxVideoKBitrate),
312
-                                             @"lastmileDelay": @(stat.lastmileDelay),
313
-                                             @"userCount": @(stat.userCount),
314
-                                             @"cpuAppUsage": @(stat.cpuAppUsage),
315
-                                             @"cpuTotalUsage": @(stat.cpuTotalUsage)
316
-                                             }];
308
+                                            @"message": @"leaveChannel",
309
+                                            @"duration": @(stat.duration),
310
+                                            @"txBytes": @(stat.txBytes),
311
+                                            @"rxBytes": @(stat.rxBytes),
312
+                                            @"txAudioKBitrate": @(stat.txAudioKBitrate),
313
+                                            @"rxAudioKBitrate": @(stat.rxAudioKBitrate),
314
+                                            @"txVideoKBitrate": @(stat.txVideoKBitrate),
315
+                                            @"rxVideoKBitrate": @(stat.rxVideoKBitrate),
316
+                                            @"lastmileDelay": @(stat.lastmileDelay),
317
+                                            @"userCount": @(stat.userCount),
318
+                                            @"cpuAppUsage": @(stat.cpuAppUsage),
319
+                                            @"cpuTotalUsage": @(stat.cpuTotalUsage)
320
+                                            }];
317
   }];
321
   }];
318
   if (res == 0) {
322
   if (res == 0) {
319
     resolve(nil);
323
     resolve(nil);
341
 }
345
 }
342
 
346
 
343
 // set remote video render mode
347
 // set remote video render mode
344
-RCT_EXPORT_METHOD(setRemoteRenderMode:(NSInteger) uid
348
+RCT_EXPORT_METHOD(setRemoteRenderMode:(NSUInteger) uid
345
                   mode:(NSInteger) mode
349
                   mode:(NSInteger) mode
346
                   resolve:(RCTPromiseResolveBlock) resolve
350
                   resolve:(RCTPromiseResolveBlock) resolve
347
                   reject:(RCTPromiseRejectBlock) reject) {
351
                   reject:(RCTPromiseRejectBlock) reject) {
597
 
601
 
598
 // enable audio volume indication
602
 // enable audio volume indication
599
 RCT_EXPORT_METHOD(enableAudioVolumeIndication: (NSInteger) interval smooth:(NSInteger)smooth
603
 RCT_EXPORT_METHOD(enableAudioVolumeIndication: (NSInteger) interval smooth:(NSInteger)smooth
600
-    resolve:(RCTPromiseResolveBlock)resolve
601
-    reject:(RCTPromiseRejectBlock)reject) {
604
+                  resolve:(RCTPromiseResolveBlock)resolve
605
+                  reject:(RCTPromiseRejectBlock)reject) {
602
   NSInteger res = [self.rtcEngine enableAudioVolumeIndication:interval smooth:smooth];
606
   NSInteger res = [self.rtcEngine enableAudioVolumeIndication:interval smooth:smooth];
603
   if (res == 0) {
607
   if (res == 0) {
604
     resolve(nil);
608
     resolve(nil);
678
                   resolve:(RCTPromiseResolveBlock)resolve
682
                   resolve:(RCTPromiseResolveBlock)resolve
679
                   reject:(RCTPromiseRejectBlock)reject) {
683
                   reject:(RCTPromiseRejectBlock)reject) {
680
   NSInteger res = [self.rtcEngine startAudioMixing:[options[@"filepath"] stringValue]
684
   NSInteger res = [self.rtcEngine startAudioMixing:[options[@"filepath"] stringValue]
681
-                          loopback:[options[@"loopback"] boolValue]
682
-                           replace:[options[@"replace"] boolValue]
683
-                             cycle:[options[@"cycle"] integerValue]];
685
+                                          loopback:[options[@"loopback"] boolValue]
686
+                                           replace:[options[@"replace"] boolValue]
687
+                                             cycle:[options[@"cycle"] integerValue]];
684
   if (res == 0) {
688
   if (res == 0) {
685
     resolve(nil);
689
     resolve(nil);
686
   } else {
690
   } else {
1259
                 @"focusPositionInPreview": @([self.rtcEngine isCameraFocusPositionInPreviewSupported]),
1263
                 @"focusPositionInPreview": @([self.rtcEngine isCameraFocusPositionInPreviewSupported]),
1260
                 @"exposurePosition": @([self.rtcEngine isCameraExposurePositionSupported]),
1264
                 @"exposurePosition": @([self.rtcEngine isCameraExposurePositionSupported]),
1261
                 @"autoFocusFaceMode": @([self.rtcEngine isCameraAutoFocusFaceModeSupported])
1265
                 @"autoFocusFaceMode": @([self.rtcEngine isCameraAutoFocusFaceModeSupported])
1262
-            }
1266
+                }
1263
             });
1267
             });
1264
 }
1268
 }
1265
 
1269
 
1387
                   resolve:(RCTPromiseResolveBlock) resolve
1391
                   resolve:(RCTPromiseResolveBlock) resolve
1388
                   reject:(RCTPromiseRejectBlock) reject) {
1392
                   reject:(RCTPromiseRejectBlock) reject) {
1389
   AgoraLiveTranscoding *transcoding = AgoraLiveTranscoding.defaultTranscoding;
1393
   AgoraLiveTranscoding *transcoding = AgoraLiveTranscoding.defaultTranscoding;
1390
-  if (options[@"size"] != nil) {
1394
+  if ([options objectForKey:@"size"]) {
1391
     transcoding.size = CGSizeMake([options[@"size"][@"width"] doubleValue], [options[@"size"][@"height"] doubleValue]);
1395
     transcoding.size = CGSizeMake([options[@"size"][@"width"] doubleValue], [options[@"size"][@"height"] doubleValue]);
1392
   }
1396
   }
1393
-  if (options[@"videoBitrate"] != nil) {
1397
+  if ([options objectForKey:@"videoBitrate"]) {
1394
     transcoding.videoBitrate = [options[@"videoBitrate"] integerValue];
1398
     transcoding.videoBitrate = [options[@"videoBitrate"] integerValue];
1395
   }
1399
   }
1396
-  if (options[@"videoFramerate"] != nil) {
1400
+  if ([options objectForKey:@"videoFramerate"]) {
1397
     transcoding.videoFramerate = [options[@"videoFramerate"] integerValue];
1401
     transcoding.videoFramerate = [options[@"videoFramerate"] integerValue];
1398
   }
1402
   }
1399
-  if (options[@"lowLatency"] != nil) {
1403
+  if ([options objectForKey:@"lowLatancy"]) {
1400
     transcoding.lowLatency = [options[@"lowLatancy"] boolValue];
1404
     transcoding.lowLatency = [options[@"lowLatancy"] boolValue];
1401
   }
1405
   }
1402
-  if (options[@"videoGop"] != nil) {
1406
+  if ([options objectForKey:@"videoGop"]) {
1403
     transcoding.videoGop = [options[@"videoGop"] integerValue];
1407
     transcoding.videoGop = [options[@"videoGop"] integerValue];
1404
   }
1408
   }
1405
-  if (options[@"videoCodecProfile"] != nil) {
1409
+  if ([options objectForKey:@"videoCodecProfile"]) {
1406
     transcoding.videoCodecProfile = (AgoraVideoCodecProfileType)[options[@"videoCodecProfile"] integerValue];
1410
     transcoding.videoCodecProfile = (AgoraVideoCodecProfileType)[options[@"videoCodecProfile"] integerValue];
1407
   }
1411
   }
1408
-  if (options[@"audioCodecProfile"] != nil) {
1412
+  if ([options objectForKey:@"audioCodecProfile"]) {
1409
     transcoding.audioCodecProfile = (AgoraAudioCodecProfileType)[options[@"audioCodecProfile"] integerValue];
1413
     transcoding.audioCodecProfile = (AgoraAudioCodecProfileType)[options[@"audioCodecProfile"] integerValue];
1410
   }
1414
   }
1411
-  if (options[@"transcodingUsers"] != nil) {
1412
-    NSMutableArray<AgoraLiveTranscodingUser*> *transcodingUsers = [NSMutableArray new];
1413
-    for (NSDictionary *optionUser in options[@"users"]) {
1414
-      AgoraLiveTranscodingUser *liveUser = [AgoraLiveTranscodingUser new];
1415
-      liveUser.uid = (NSUInteger)[optionUser[@"uid"] integerValue];
1416
-      liveUser.rect = CGRectMake((CGFloat)[options[@"backgroundColor"][@"x"] floatValue], (CGFloat)[options[@"backgroundColor"][@"y"] floatValue], (CGFloat)[options[@"backgroundColor"][@"width"] floatValue], (CGFloat)[options[@"backgroundColor"][@"height"] floatValue]);
1417
-      liveUser.zOrder = [optionUser[@"zOrder"] integerValue];
1418
-      liveUser.alpha = [optionUser[@"alpha"] doubleValue];
1419
-      liveUser.audioChannel = [optionUser[@"audioChannel"] integerValue];
1420
-      [transcodingUsers addObject:liveUser];
1421
-    }
1422
-    transcoding.transcodingUsers = transcodingUsers;
1423
-  }
1424
-  if (options[@"transcodingExtraInfo"] != nil) {
1425
-    transcoding.transcodingExtraInfo = [options[@"transcodingExtraInfo"] stringValue];
1415
+  if ([options objectForKey:@"audioSampleRate"]) {
1416
+    transcoding.audioSampleRate = (AgoraAudioSampleRateType)[options[@"audioSampleRate"] integerValue];
1426
   }
1417
   }
1427
-  if (options[@"watermark"] != nil) {
1418
+  if ([options objectForKey:@"watermark"]) {
1428
     transcoding.watermark = [self makeAgoraImage:@{
1419
     transcoding.watermark = [self makeAgoraImage:@{
1429
                                                    @"url": options[@"watermark"][@"url"],
1420
                                                    @"url": options[@"watermark"][@"url"],
1430
                                                    @"x": options[@"watermark"][@"x"],
1421
                                                    @"x": options[@"watermark"][@"x"],
1433
                                                    @"height": options[@"watermark"][@"height"]
1424
                                                    @"height": options[@"watermark"][@"height"]
1434
                                                    }];
1425
                                                    }];
1435
   }
1426
   }
1436
-  if (options[@"backgroundImage"] != nil) {
1427
+  if ([options objectForKey:@"backgroundImage"]) {
1437
     transcoding.backgroundImage = [self makeAgoraImage:@{
1428
     transcoding.backgroundImage = [self makeAgoraImage:@{
1438
                                                          @"url": options[@"backgroundImage"][@"url"],
1429
                                                          @"url": options[@"backgroundImage"][@"url"],
1439
                                                          @"x": options[@"backgroundImage"][@"x"],
1430
                                                          @"x": options[@"backgroundImage"][@"x"],
1442
                                                          @"height": options[@"backgroundImage"][@"height"]
1433
                                                          @"height": options[@"backgroundImage"][@"height"]
1443
                                                          }];
1434
                                                          }];
1444
   }
1435
   }
1445
-  if (options[@"backgroundColor"] != nil) {
1446
-    transcoding.backgroundColor = [[UIColor new] initWithRed:(CGFloat)[options[@"backgroundColor"][@"red"] floatValue] green:(CGFloat)[options[@"backgroundColor"][@"green"] floatValue] blue:(CGFloat)[options[@"backgroundColor"][@"blue"] floatValue] alpha:(CGFloat)[options[@"backgroundColor"][@"alpha"] floatValue]];
1447
-  }
1448
-  if (options[@"audioSampleRate"] != nil) {
1449
-    transcoding.audioSampleRate = (AgoraAudioSampleRateType)[options[@"audioSampleRate"] integerValue];
1436
+  
1437
+  if ([options objectForKey:@"backgroundColor"]) {
1438
+    transcoding.backgroundColor = [self UIColorFromRGB:(NSUInteger)[options[@"backgroundColor"] integerValue]];
1450
   }
1439
   }
1451
-  if (options[@"audioBitrate"] != nil) {
1440
+  
1441
+  if ([options objectForKey:@"audioBitrate"]) {
1452
     transcoding.audioBitrate = [options[@"audioBitrate"] integerValue];
1442
     transcoding.audioBitrate = [options[@"audioBitrate"] integerValue];
1453
   }
1443
   }
1454
-  if (options[@"audioChannels"] != nil) {
1444
+  
1445
+  if ([options objectForKey:@"audioChannels"]) {
1455
     transcoding.audioChannels = [options[@"audioChannels"] integerValue];
1446
     transcoding.audioChannels = [options[@"audioChannels"] integerValue];
1456
   }
1447
   }
1457
   
1448
   
1449
+  if ([options objectForKey:@"transcodingUsers"]) {
1450
+    NSMutableArray<AgoraLiveTranscodingUser*> *transcodingUsers = [NSMutableArray new];
1451
+    for (NSDictionary *optionUser in options[@"transcodingUsers"]) {
1452
+      AgoraLiveTranscodingUser *liveUser = [AgoraLiveTranscodingUser new];
1453
+      liveUser.uid = (NSUInteger)[optionUser[@"uid"] integerValue];
1454
+      liveUser.rect = CGRectMake((CGFloat)[optionUser[@"x"] floatValue],
1455
+                                 (CGFloat)[optionUser[@"y"] floatValue],
1456
+                                 (CGFloat)[optionUser[@"width"] floatValue],
1457
+                                 (CGFloat)[optionUser[@"height"] floatValue]);
1458
+      liveUser.zOrder = [optionUser[@"zOrder"] integerValue];
1459
+      liveUser.alpha = [optionUser[@"alpha"] doubleValue];
1460
+      liveUser.audioChannel = [optionUser[@"audioChannel"] integerValue];
1461
+      [transcodingUsers addObject:liveUser];
1462
+    }
1463
+    transcoding.transcodingUsers = transcodingUsers;
1464
+  }
1465
+  if ([options objectForKey:@"transcodingExtraInfo"]) {
1466
+    transcoding.transcodingExtraInfo = [options[@"transcodingExtraInfo"] stringValue];
1467
+  }
1468
+  
1458
   NSInteger res = [self.rtcEngine setLiveTranscoding:transcoding];
1469
   NSInteger res = [self.rtcEngine setLiveTranscoding:transcoding];
1459
   if (res == 0) {
1470
   if (res == 0) {
1460
     resolve(nil);
1471
     resolve(nil);
1508
   }
1519
   }
1509
 }
1520
 }
1510
 
1521
 
1511
-RCT_EXPORT_METHOD(setRemoteVoicePosition:(NSInteger) uid
1522
+RCT_EXPORT_METHOD(setRemoteVoicePosition:(NSUInteger) uid
1512
                   pan:(float)pan
1523
                   pan:(float)pan
1513
                   gain:(float)gain
1524
                   gain:(float)gain
1514
                   resolve:(RCTPromiseResolveBlock)resolve
1525
                   resolve:(RCTPromiseResolveBlock)resolve
1529
   probeConfig.probeDownlink = [config[@"probeDownlink"] boolValue];
1540
   probeConfig.probeDownlink = [config[@"probeDownlink"] boolValue];
1530
   probeConfig.expectedUplinkBitrate = [config[@"expectedUplinkBitrate"] integerValue];
1541
   probeConfig.expectedUplinkBitrate = [config[@"expectedUplinkBitrate"] integerValue];
1531
   probeConfig.expectedDownlinkBitrate = [config[@"expectedDownlinkBitrate"] integerValue];
1542
   probeConfig.expectedDownlinkBitrate = [config[@"expectedDownlinkBitrate"] integerValue];
1532
-
1543
+  
1533
   NSInteger res = [self.rtcEngine startLastmileProbeTest:probeConfig];
1544
   NSInteger res = [self.rtcEngine startLastmileProbeTest:probeConfig];
1534
   if (res == 0) {
1545
   if (res == 0) {
1535
     resolve(nil);
1546
     resolve(nil);
1543
                   userPriority:(NSInteger)userPriority
1554
                   userPriority:(NSInteger)userPriority
1544
                   resolve:(RCTPromiseResolveBlock)resolve
1555
                   resolve:(RCTPromiseResolveBlock)resolve
1545
                   reject:(RCTPromiseRejectBlock)reject) {
1556
                   reject:(RCTPromiseRejectBlock)reject) {
1546
- 
1557
+  
1547
   NSInteger res = [self.rtcEngine setRemoteUserPriority:uid type:(AgoraUserPriority)userPriority];
1558
   NSInteger res = [self.rtcEngine setRemoteUserPriority:uid type:(AgoraUserPriority)userPriority];
1548
   if (res == 0) {
1559
   if (res == 0) {
1549
     resolve(nil);
1560
     resolve(nil);
1602
                   :(RCTPromiseResolveBlock)resolve
1613
                   :(RCTPromiseResolveBlock)resolve
1603
                   reject:(RCTPromiseRejectBlock)reject) {
1614
                   reject:(RCTPromiseRejectBlock)reject) {
1604
   if (YES == [_rtcEngine setMediaMetadataDataSource:self withType:AgoraMetadataTypeVideo] &&
1615
   if (YES == [_rtcEngine setMediaMetadataDataSource:self withType:AgoraMetadataTypeVideo] &&
1605
-    YES == [_rtcEngine setMediaMetadataDelegate:self withType:AgoraMetadataTypeVideo]
1606
-    ) {
1616
+      YES == [_rtcEngine setMediaMetadataDelegate:self withType:AgoraMetadataTypeVideo]
1617
+      ) {
1607
     resolve(nil);
1618
     resolve(nil);
1608
   } else {
1619
   } else {
1609
     reject(@(-1).stringValue, @(-1).stringValue, nil);
1620
     reject(@(-1).stringValue, @(-1).stringValue, nil);
1642
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didApiCallExecute:(NSInteger)error api:(NSString *_Nonnull)api result:(NSString *_Nonnull)result {
1653
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didApiCallExecute:(NSInteger)error api:(NSString *_Nonnull)api result:(NSString *_Nonnull)result {
1643
   if (error != 0) {
1654
   if (error != 0) {
1644
     [self sendEvent:AGError  params:@{
1655
     [self sendEvent:AGError  params:@{
1645
-                                            @"api": api,
1646
-                                            @"result": result,
1647
-                                            @"error": @(error)
1648
-                                            }];
1656
+                                      @"api": api,
1657
+                                      @"result": result,
1658
+                                      @"error": @(error)
1659
+                                      }];
1649
   } else {
1660
   } else {
1650
     [self sendEvent:AGApiCallExecute  params:@{
1661
     [self sendEvent:AGApiCallExecute  params:@{
1651
-                                            @"api": api,
1652
-                                            @"result": result,
1653
-                                            @"error": @(error)
1654
-                                            }];
1662
+                                               @"api": api,
1663
+                                               @"result": result,
1664
+                                               @"error": @(error)
1665
+                                               }];
1655
   }
1666
   }
1656
 }
1667
 }
1657
 
1668
 
1658
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didJoinChannel:(NSString *_Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1669
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didJoinChannel:(NSString *_Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1659
   [self sendEvent:AGJoinChannelSuccess params:@{
1670
   [self sendEvent:AGJoinChannelSuccess params:@{
1660
-                                          @"channel": channel,
1661
-                                          @"uid": @(uid),
1662
-                                          @"elapsed": @(elapsed)
1663
-                                          }];
1671
+                                                @"channel": channel,
1672
+                                                @"uid": @(uid),
1673
+                                                @"elapsed": @(elapsed)
1674
+                                                }];
1664
 }
1675
 }
1665
 
1676
 
1666
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didRejoinChannel:(NSString *_Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1677
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didRejoinChannel:(NSString *_Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1667
   [self sendEvent:AGRejoinChannelSuccess params:@{
1678
   [self sendEvent:AGRejoinChannelSuccess params:@{
1668
-                                            @"channel": channel,
1669
-                                            @"uid": @(uid),
1670
-                                            @"elapsed": @(elapsed)
1671
-                                            }];
1679
+                                                  @"channel": channel,
1680
+                                                  @"uid": @(uid),
1681
+                                                  @"elapsed": @(elapsed)
1682
+                                                  }];
1672
 }
1683
 }
1673
 
1684
 
1674
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLeaveChannelWithStats:(AgoraChannelStats *_Nonnull)stats {
1685
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLeaveChannelWithStats:(AgoraChannelStats *_Nonnull)stats {
1675
   [self sendEvent:AGLeaveChannel params:@{
1686
   [self sendEvent:AGLeaveChannel params:@{
1676
-                                           @"stats": @{
1677
-                                               @"duration": @(stats.duration),
1678
-                                               @"txBytes": @(stats.txBytes),
1679
-                                               @"rxBytes": @(stats.rxBytes),
1680
-                                               @"txAudioKBitrate": @(stats.txAudioKBitrate),
1681
-                                               @"rxAudioKBitrate": @(stats.rxVideoKBitrate),
1682
-                                               @"txVideoKBitrate": @(stats.txVideoKBitrate),
1683
-                                               @"rxVideoKBitrate": @(stats.rxVideoKBitrate),
1684
-                                               @"lastmileDelay": @(stats.lastmileDelay),
1685
-                                               @"userCount": @(stats.userCount),
1686
-                                               @"cpuAppUsage": @(stats.cpuAppUsage),
1687
-                                               @"cpuTotalUsage": @(stats.cpuTotalUsage)
1688
-                                               }
1689
-                                           }];
1687
+                                          @"stats": @{
1688
+                                              @"duration": @(stats.duration),
1689
+                                              @"txBytes": @(stats.txBytes),
1690
+                                              @"rxBytes": @(stats.rxBytes),
1691
+                                              @"txAudioKBitrate": @(stats.txAudioKBitrate),
1692
+                                              @"rxAudioKBitrate": @(stats.rxVideoKBitrate),
1693
+                                              @"txVideoKBitrate": @(stats.txVideoKBitrate),
1694
+                                              @"rxVideoKBitrate": @(stats.rxVideoKBitrate),
1695
+                                              @"lastmileDelay": @(stats.lastmileDelay),
1696
+                                              @"userCount": @(stats.userCount),
1697
+                                              @"cpuAppUsage": @(stats.cpuAppUsage),
1698
+                                              @"cpuTotalUsage": @(stats.cpuTotalUsage)
1699
+                                              }
1700
+                                          }];
1690
 }
1701
 }
1691
 
1702
 
1692
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didClientRoleChanged:(AgoraClientRole)oldRole newRole:(AgoraClientRole)newRole {
1703
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didClientRoleChanged:(AgoraClientRole)oldRole newRole:(AgoraClientRole)newRole {
1693
   [self sendEvent:AGClientRoleChanged params:@{
1704
   [self sendEvent:AGClientRoleChanged params:@{
1694
-                                                @"oldRole": @(oldRole),
1695
-                                                @"newRole": @(newRole)
1696
-                                                }];
1705
+                                               @"oldRole": @(oldRole),
1706
+                                               @"newRole": @(newRole)
1707
+                                               }];
1697
 }
1708
 }
1698
 
1709
 
1699
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didJoinedOfUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1710
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didJoinedOfUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1700
   [self sendEvent:AGUserJoined params:@{
1711
   [self sendEvent:AGUserJoined params:@{
1701
-                                          @"uid": @(uid),
1702
-                                          @"elapsed": @(elapsed)
1703
-                                          }];
1712
+                                        @"uid": @(uid),
1713
+                                        @"elapsed": @(elapsed)
1714
+                                        }];
1704
 }
1715
 }
1705
 
1716
 
1706
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didOfflineOfUid:(NSUInteger)uid reason:(AgoraUserOfflineReason)reason {
1717
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didOfflineOfUid:(NSUInteger)uid reason:(AgoraUserOfflineReason)reason {
1707
   [self sendEvent:AGUserOffline params:@{
1718
   [self sendEvent:AGUserOffline params:@{
1708
-                                           @"uid": @(uid),
1709
-                                           @"reason": @(reason)
1710
-                                           }];
1719
+                                         @"uid": @(uid),
1720
+                                         @"reason": @(reason)
1721
+                                         }];
1711
 }
1722
 }
1712
 
1723
 
1713
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine networkTypeChangedToType:(AgoraNetworkType)type {
1724
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine networkTypeChangedToType:(AgoraNetworkType)type {
1725
 
1736
 
1726
 - (void)rtcEngineConnectionDidLost:(AgoraRtcEngineKit *_Nonnull)engine {
1737
 - (void)rtcEngineConnectionDidLost:(AgoraRtcEngineKit *_Nonnull)engine {
1727
   [self sendEvent:AGConnectionLost params:@{
1738
   [self sendEvent:AGConnectionLost params:@{
1728
-                                             @"message": @"connectionLost"
1729
-                                             }];
1739
+                                            @"message": @"connectionLost"
1740
+                                            }];
1730
 }
1741
 }
1731
 
1742
 
1732
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine tokenPrivilegeWillExpire:(NSString *_Nonnull)token {
1743
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine tokenPrivilegeWillExpire:(NSString *_Nonnull)token {
1733
   [self sendEvent:AGTokenPrivilegeWillExpire params:@{
1744
   [self sendEvent:AGTokenPrivilegeWillExpire params:@{
1734
-                                                    @"token": token
1735
-                                                    }];
1745
+                                                      @"token": token
1746
+                                                      }];
1736
 }
1747
 }
1737
 
1748
 
1738
 - (void)rtcEngineRequestToken:(AgoraRtcEngineKit *_Nonnull)engine {
1749
 - (void)rtcEngineRequestToken:(AgoraRtcEngineKit *_Nonnull)engine {
1739
   [self sendEvent:AGRequestToken params:@{
1750
   [self sendEvent:AGRequestToken params:@{
1740
-                                        @"message": @"RequestToken"
1741
-                                        }];
1751
+                                          @"message": @"RequestToken"
1752
+                                          }];
1742
 }
1753
 }
1743
 
1754
 
1744
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didMicrophoneEnabled:(BOOL)enabled {
1755
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didMicrophoneEnabled:(BOOL)enabled {
1745
   [self sendEvent:AGMicrophoneEnabled params:@{
1756
   [self sendEvent:AGMicrophoneEnabled params:@{
1746
-                                                @"enabled": @(enabled)
1747
-                                                }];
1757
+                                               @"enabled": @(enabled)
1758
+                                               }];
1748
 }
1759
 }
1749
 
1760
 
1750
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine reportAudioVolumeIndicationOfSpeakers:(NSArray<AgoraRtcAudioVolumeInfo*> *_Nonnull)speakers totalVolume:(NSInteger)totalVolume {
1761
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine reportAudioVolumeIndicationOfSpeakers:(NSArray<AgoraRtcAudioVolumeInfo*> *_Nonnull)speakers totalVolume:(NSInteger)totalVolume {
1756
                         }];
1767
                         }];
1757
   }
1768
   }
1758
   [self sendEvent:AGAudioVolumeIndication params:@{
1769
   [self sendEvent:AGAudioVolumeIndication params:@{
1759
-                                                                 @"speakers": result,
1760
-                                                                 @"totalVolume": @(totalVolume)
1761
-                                                                 }];
1770
+                                                   @"speakers": result,
1771
+                                                   @"totalVolume": @(totalVolume)
1772
+                                                   }];
1762
 }
1773
 }
1763
 
1774
 
1764
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine activeSpeaker:(NSUInteger)speakerUid {
1775
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine activeSpeaker:(NSUInteger)speakerUid {
1765
   [self sendEvent:AGActiveSpeaker params:@{
1776
   [self sendEvent:AGActiveSpeaker params:@{
1766
-                                         @"uid": @(speakerUid)
1767
-                                         }];
1777
+                                           @"uid": @(speakerUid)
1778
+                                           }];
1768
 }
1779
 }
1769
 
1780
 
1770
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstLocalAudioFrame:(NSInteger)elapsed {
1781
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstLocalAudioFrame:(NSInteger)elapsed {
1771
   [self sendEvent:AGFirstLocalAudioFrame params:@{
1782
   [self sendEvent:AGFirstLocalAudioFrame params:@{
1772
-                                                @"elapsed": @(elapsed)
1773
-                                                }];
1783
+                                                  @"elapsed": @(elapsed)
1784
+                                                  }];
1774
 }
1785
 }
1775
 
1786
 
1776
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteAudioFrameOfUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1787
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteAudioFrameOfUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1777
   [self sendEvent:AGFirstRemoteAudioFrame params:@{
1788
   [self sendEvent:AGFirstRemoteAudioFrame params:@{
1778
-                                                      @"uid": @(uid),
1779
-                                                      @"elapsed": @(elapsed)
1780
-                                                      }];
1789
+                                                   @"uid": @(uid),
1790
+                                                   @"elapsed": @(elapsed)
1791
+                                                   }];
1781
 }
1792
 }
1782
 
1793
 
1783
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteAudioFrameDecodedOfUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1794
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteAudioFrameDecodedOfUid:(NSUInteger)uid elapsed:(NSInteger)elapsed {
1789
 
1800
 
1790
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstLocalVideoFrameWithSize:(CGSize)size elapsed:(NSInteger)elapsed {
1801
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstLocalVideoFrameWithSize:(CGSize)size elapsed:(NSInteger)elapsed {
1791
   [self sendEvent:AGFirstLocalVideoFrame params:@{
1802
   [self sendEvent:AGFirstLocalVideoFrame params:@{
1792
-                                                        @"width": @(size.width),
1793
-                                                        @"height": @(size.height),
1794
-                                                        @"elapsed": @(elapsed)
1795
-                                                        }];
1803
+                                                  @"width": @(size.width),
1804
+                                                  @"height": @(size.height),
1805
+                                                  @"elapsed": @(elapsed)
1806
+                                                  }];
1796
 }
1807
 }
1797
 
1808
 
1798
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteVideoDecodedOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed {
1809
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteVideoDecodedOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed {
1799
   [self sendEvent:AGFirstRemoteVideoDecoded params:@{
1810
   [self sendEvent:AGFirstRemoteVideoDecoded params:@{
1800
-                                                        @"uid": @(uid),
1801
-                                                        @"width": @(size.width),
1802
-                                                        @"height": @(size.height),
1803
-                                                        @"elapsed": @(elapsed)
1804
-                                                        }];
1811
+                                                     @"uid": @(uid),
1812
+                                                     @"width": @(size.width),
1813
+                                                     @"height": @(size.height),
1814
+                                                     @"elapsed": @(elapsed)
1815
+                                                     }];
1805
 }
1816
 }
1806
 
1817
 
1807
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteVideoFrameOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed {
1818
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine firstRemoteVideoFrameOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed {
1808
   [self sendEvent:AGFirstRemoteVideoFrame params:@{
1819
   [self sendEvent:AGFirstRemoteVideoFrame params:@{
1809
-                                                      @"uid": @(uid),
1810
-                                                      @"width": @(size.width),
1811
-                                                      @"height": @(size.height),
1812
-                                                      @"elapsed": @(elapsed)}];
1820
+                                                   @"uid": @(uid),
1821
+                                                   @"width": @(size.width),
1822
+                                                   @"height": @(size.height),
1823
+                                                   @"elapsed": @(elapsed)}];
1813
 }
1824
 }
1814
 
1825
 
1815
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioMuted:(BOOL)muted byUid:(NSUInteger)uid {
1826
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioMuted:(BOOL)muted byUid:(NSUInteger)uid {
1816
   [self sendEvent:AGUserMuteAudio params:@{
1827
   [self sendEvent:AGUserMuteAudio params:@{
1817
-                                         @"muted": @(muted),
1818
-                                         @"uid": @(uid)
1819
-                                         }];
1828
+                                           @"muted": @(muted),
1829
+                                           @"uid": @(uid)
1830
+                                           }];
1820
 }
1831
 }
1821
 
1832
 
1822
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid {
1833
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid {
1823
   [self sendEvent:AGUserMuteVideo params:@{
1834
   [self sendEvent:AGUserMuteVideo params:@{
1824
-                                         @"muted": @(muted),
1825
-                                         @"uid": @(uid)
1826
-                                         }];
1835
+                                           @"muted": @(muted),
1836
+                                           @"uid": @(uid)
1837
+                                           }];
1827
 }
1838
 }
1828
 
1839
 
1829
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoEnabled:(BOOL)enabled byUid:(NSUInteger)uid {
1840
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoEnabled:(BOOL)enabled byUid:(NSUInteger)uid {
1830
   [self sendEvent:AGUserEnableVideo params:@{
1841
   [self sendEvent:AGUserEnableVideo params:@{
1831
-                                           @"enabled": @(enabled),
1832
-                                           @"uid": @(uid)
1833
-                                           }];
1842
+                                             @"enabled": @(enabled),
1843
+                                             @"uid": @(uid)
1844
+                                             }];
1834
 }
1845
 }
1835
 
1846
 
1836
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLocalVideoEnabled:(BOOL)enabled byUid:(NSUInteger)uid {
1847
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLocalVideoEnabled:(BOOL)enabled byUid:(NSUInteger)uid {
1837
   [self sendEvent:AGUserEnableLocalVideo params:@{
1848
   [self sendEvent:AGUserEnableLocalVideo params:@{
1838
-                                                @"enabled": @(enabled),
1839
-                                                @"uid": @(uid)
1840
-                                                }];
1849
+                                                  @"enabled": @(enabled),
1850
+                                                  @"uid": @(uid)
1851
+                                                  }];
1841
 }
1852
 }
1842
 
1853
 
1843
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine videoSizeChangedOfUid:(NSUInteger)uid size:(CGSize)size rotation:(NSInteger)rotation {
1854
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine videoSizeChangedOfUid:(NSUInteger)uid size:(CGSize)size rotation:(NSInteger)rotation {
1844
   [self sendEvent:AGVideoSizeChanged params:@{
1855
   [self sendEvent:AGVideoSizeChanged params:@{
1845
-                                                 @"uid": @(uid),
1846
-                                                 @"width": @(size.width),
1847
-                                                 @"height": @(size.height),
1848
-                                                 @"rotation": @(rotation)
1849
-                                                 }];
1856
+                                              @"uid": @(uid),
1857
+                                              @"width": @(size.width),
1858
+                                              @"height": @(size.height),
1859
+                                              @"rotation": @(rotation)
1860
+                                              }];
1850
 }
1861
 }
1851
 
1862
 
1852
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteVideoStateChangedOfUid:(NSUInteger)uid state:(AgoraVideoRemoteState)state {
1863
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteVideoStateChangedOfUid:(NSUInteger)uid state:(AgoraVideoRemoteState)state {
1853
   [self sendEvent:AGRemoteVideoStateChanged params:@{
1864
   [self sendEvent:AGRemoteVideoStateChanged params:@{
1854
-                                                        @"uid": @(uid),
1855
-                                                        @"state": @(state)
1856
-                                                        }];
1865
+                                                     @"uid": @(uid),
1866
+                                                     @"state": @(state)
1867
+                                                     }];
1857
 }
1868
 }
1858
 
1869
 
1859
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLocalPublishFallbackToAudioOnly:(BOOL)isFallbackOrRecover {
1870
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didLocalPublishFallbackToAudioOnly:(BOOL)isFallbackOrRecover {
1860
   [self sendEvent:AGLocalPublishFallbackToAudioOnly params:@{
1871
   [self sendEvent:AGLocalPublishFallbackToAudioOnly params:@{
1861
-                                                              @"isFallbackOrRecover": @(isFallbackOrRecover)
1862
-                                                              }];
1872
+                                                             @"isFallbackOrRecover": @(isFallbackOrRecover)
1873
+                                                             }];
1863
 }
1874
 }
1864
 
1875
 
1865
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didRemoteSubscribeFallbackToAudioOnly:(BOOL)isFallbackOrRecover byUid:(NSUInteger)uid {
1876
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didRemoteSubscribeFallbackToAudioOnly:(BOOL)isFallbackOrRecover byUid:(NSUInteger)uid {
1866
   [self sendEvent:AGRemoteSubscribeFallbackToAudioOnly params:@{
1877
   [self sendEvent:AGRemoteSubscribeFallbackToAudioOnly params:@{
1867
-                                                                 @"isFallbackOrRecover": @(isFallbackOrRecover),
1868
-                                                                 @"uid": @(uid)
1869
-                                                                 }];
1878
+                                                                @"isFallbackOrRecover": @(isFallbackOrRecover),
1879
+                                                                @"uid": @(uid)
1880
+                                                                }];
1870
 }
1881
 }
1871
 
1882
 
1872
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioRouteChanged:(AgoraAudioOutputRouting)routing {
1883
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioRouteChanged:(AgoraAudioOutputRouting)routing {
1873
   [self sendEvent:AGAudioRouteChanged params:@{
1884
   [self sendEvent:AGAudioRouteChanged params:@{
1874
-                                                @"routing": @(routing)
1875
-                                                }];
1885
+                                               @"routing": @(routing)
1886
+                                               }];
1876
 }
1887
 }
1877
 
1888
 
1878
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine cameraFocusDidChangedToRect:(CGRect)rect {
1889
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine cameraFocusDidChangedToRect:(CGRect)rect {
1879
   [self sendEvent:AGCameraFocusAreaChanged params:@{
1890
   [self sendEvent:AGCameraFocusAreaChanged params:@{
1880
-                                                       @"rect": @(rect)
1881
-                                                       }];
1891
+                                                    @"rect": @(rect)
1892
+                                                    }];
1882
 }
1893
 }
1883
 
1894
 
1884
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine cameraExposureDidChangedToRect:(CGRect)rect {
1895
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine cameraExposureDidChangedToRect:(CGRect)rect {
1885
   [self sendEvent:AGCameraExposureAreaChanged params:@{
1896
   [self sendEvent:AGCameraExposureAreaChanged params:@{
1886
-                                                          @"rect": @(rect)
1887
-                                                          }];
1897
+                                                       @"rect": @(rect)
1898
+                                                       }];
1888
 }
1899
 }
1889
 
1900
 
1890
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteAudioStats:(AgoraRtcRemoteAudioStats *_Nonnull)stats {
1901
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteAudioStats:(AgoraRtcRemoteAudioStats *_Nonnull)stats {
1891
   [self sendEvent:AGRemoteAudioStats params:@{
1902
   [self sendEvent:AGRemoteAudioStats params:@{
1892
-                                            @"stats": @{
1893
-                                                @"uid": @(stats.uid),
1894
-                                                @"quality": @(stats.quality),
1895
-                                                @"networkTransportDelay": @(stats.networkTransportDelay),
1896
-                                                @"jitterBufferDelay": @(stats.jitterBufferDelay),
1897
-                                                @"audioLossRate": @(stats.audioLossRate)
1898
-                                                }
1899
-                                            }];
1903
+                                              @"stats": @{
1904
+                                                  @"uid": @(stats.uid),
1905
+                                                  @"quality": @(stats.quality),
1906
+                                                  @"networkTransportDelay": @(stats.networkTransportDelay),
1907
+                                                  @"jitterBufferDelay": @(stats.jitterBufferDelay),
1908
+                                                  @"audioLossRate": @(stats.audioLossRate)
1909
+                                                  }
1910
+                                              }];
1900
 }
1911
 }
1901
 
1912
 
1902
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine reportRtcStats:(AgoraChannelStats *_Nonnull)stats {
1913
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine reportRtcStats:(AgoraChannelStats *_Nonnull)stats {
1903
   [self sendEvent:AGRtcStats params:@{
1914
   [self sendEvent:AGRtcStats params:@{
1904
-                                          @"stats": @{
1905
-                                              @"duration": @(stats.duration),
1906
-                                              @"txPacketLossRate": @(stats.txPacketLossRate),
1907
-                                              @"rxPacketLossRate": @(stats.rxPacketLossRate),
1908
-                                              @"txBytes": @(stats.txBytes),
1909
-                                              @"rxBytes": @(stats.rxBytes),
1910
-                                              @"txAudioKBitrate": @(stats.txAudioKBitrate),
1911
-                                              @"rxAudioKBitrate": @(stats.rxAudioKBitrate),
1912
-                                              @"txVideoKBitrate": @(stats.txVideoKBitrate),
1913
-                                              @"rxVideoKBitrate": @(stats.rxVideoKBitrate),
1914
-                                              @"lastmileDelay": @(stats.lastmileDelay),
1915
-                                              @"userCount": @(stats.userCount),
1916
-                                              @"cpuAppUsage": @(stats.cpuAppUsage),
1917
-                                              @"cpuTotalUsage": @(stats.cpuTotalUsage)
1918
-                                              }
1919
-                                          }];
1915
+                                      @"stats": @{
1916
+                                          @"duration": @(stats.duration),
1917
+                                          @"txPacketLossRate": @(stats.txPacketLossRate),
1918
+                                          @"rxPacketLossRate": @(stats.rxPacketLossRate),
1919
+                                          @"txBytes": @(stats.txBytes),
1920
+                                          @"rxBytes": @(stats.rxBytes),
1921
+                                          @"txAudioKBitrate": @(stats.txAudioKBitrate),
1922
+                                          @"rxAudioKBitrate": @(stats.rxAudioKBitrate),
1923
+                                          @"txVideoKBitrate": @(stats.txVideoKBitrate),
1924
+                                          @"rxVideoKBitrate": @(stats.rxVideoKBitrate),
1925
+                                          @"lastmileDelay": @(stats.lastmileDelay),
1926
+                                          @"userCount": @(stats.userCount),
1927
+                                          @"cpuAppUsage": @(stats.cpuAppUsage),
1928
+                                          @"cpuTotalUsage": @(stats.cpuTotalUsage)
1929
+                                          }
1930
+                                      }];
1920
 }
1931
 }
1921
 
1932
 
1922
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine lastmileQuality:(AgoraNetworkQuality)quality {
1933
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine lastmileQuality:(AgoraNetworkQuality)quality {
1923
   [self sendEvent:AGLastmileQuality params:@{
1934
   [self sendEvent:AGLastmileQuality params:@{
1924
-                                           @"quality": @(quality)
1925
-                                           }];
1935
+                                             @"quality": @(quality)
1936
+                                             }];
1926
 }
1937
 }
1927
 
1938
 
1928
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine networkQuality:(NSUInteger)uid txQuality:(AgoraNetworkQuality)txQuality rxQuality:(AgoraNetworkQuality)rxQuality {
1939
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine networkQuality:(NSUInteger)uid txQuality:(AgoraNetworkQuality)txQuality rxQuality:(AgoraNetworkQuality)rxQuality {
1929
   [self sendEvent:AGNetworkQuality params:@{
1940
   [self sendEvent:AGNetworkQuality params:@{
1930
-                                          @"uid": @(uid),
1931
-                                          @"txQuality": @(txQuality),
1932
-                                          @"rxQuality": @(rxQuality)
1933
-                                          }];
1941
+                                            @"uid": @(uid),
1942
+                                            @"txQuality": @(txQuality),
1943
+                                            @"rxQuality": @(rxQuality)
1944
+                                            }];
1934
 }
1945
 }
1935
 
1946
 
1936
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine localVideoStats:(AgoraRtcLocalVideoStats *_Nonnull)stats {
1947
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine localVideoStats:(AgoraRtcLocalVideoStats *_Nonnull)stats {
1937
   [self sendEvent:AGLocalVideoStats params:@{
1948
   [self sendEvent:AGLocalVideoStats params:@{
1938
-                                           @"stats": @{
1939
-                                               @"sentBitrate": @(stats.sentBitrate),
1940
-                                               @"sentFrameRate": @(stats.sentFrameRate)
1941
-                                               },
1942
-                                           @"encoderOutputFrameRate": @(stats.encoderOutputFrameRate),
1943
-                                           @"rendererOutputFrameRate":
1949
+                                             @"stats": @{
1950
+                                                 @"sentBitrate": @(stats.sentBitrate),
1951
+                                                 @"sentFrameRate": @(stats.sentFrameRate)
1952
+                                                 },
1953
+                                             @"encoderOutputFrameRate": @(stats.encoderOutputFrameRate),
1954
+                                             @"rendererOutputFrameRate":
1944
                                                @(stats.rendererOutputFrameRate)
1955
                                                @(stats.rendererOutputFrameRate)
1945
-                                           }];
1956
+                                             }];
1946
 }
1957
 }
1947
 
1958
 
1948
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteVideoStats:(AgoraRtcRemoteVideoStats *_Nonnull)stats {
1959
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine remoteVideoStats:(AgoraRtcRemoteVideoStats *_Nonnull)stats {
1949
   [self sendEvent:AGRemoteVideoStats params:@{
1960
   [self sendEvent:AGRemoteVideoStats params:@{
1950
-                                            @"stats": @{
1951
-                                                @"uid": @(stats.uid),
1952
-                                                @"width": @(stats.width),
1953
-                                                @"height": @(stats.height),
1954
-                                                @"receivedBitrate": @(stats.receivedBitrate),
1955
-                                                @"rendererOutputFrameRate": @(stats.rendererOutputFrameRate),
1956
-                                                @"rxStreamType": @(stats.rxStreamType),
1957
-                                                @"decoderOutputFrameRate": @(stats.decoderOutputFrameRate)
1958
-                                                }
1959
-                                            }];
1961
+                                              @"stats": @{
1962
+                                                  @"uid": @(stats.uid),
1963
+                                                  @"width": @(stats.width),
1964
+                                                  @"height": @(stats.height),
1965
+                                                  @"receivedBitrate": @(stats.receivedBitrate),
1966
+                                                  @"rendererOutputFrameRate": @(stats.rendererOutputFrameRate),
1967
+                                                  @"rxStreamType": @(stats.rxStreamType),
1968
+                                                  @"decoderOutputFrameRate": @(stats.decoderOutputFrameRate)
1969
+                                                  }
1970
+                                              }];
1960
 }
1971
 }
1961
 
1972
 
1962
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine audioTransportStatsOfUid:(NSUInteger)uid delay:(NSUInteger)delay lost:(NSUInteger)lost rxKBitRate:(NSUInteger)rxKBitRate {
1973
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine audioTransportStatsOfUid:(NSUInteger)uid delay:(NSUInteger)delay lost:(NSUInteger)lost rxKBitRate:(NSUInteger)rxKBitRate {
1963
   [self sendEvent:AGAudioTransportStatsOfUid params:@{
1974
   [self sendEvent:AGAudioTransportStatsOfUid params:@{
1964
-                                                    @"uid": @(uid),
1965
-                                                    @"delay": @(delay),
1966
-                                                    @"lost": @(lost),
1967
-                                                    @"rxKBitrate": @(rxKBitRate)
1968
-                                                    }];
1975
+                                                      @"uid": @(uid),
1976
+                                                      @"delay": @(delay),
1977
+                                                      @"lost": @(lost),
1978
+                                                      @"rxKBitrate": @(rxKBitRate)
1979
+                                                      }];
1969
 }
1980
 }
1970
 
1981
 
1971
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine videoTransportStatsOfUid:(NSUInteger)uid delay:(NSUInteger)delay lost:(NSUInteger)lost rxKBitRate:(NSUInteger)rxKBitRate {
1982
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine videoTransportStatsOfUid:(NSUInteger)uid delay:(NSUInteger)delay lost:(NSUInteger)lost rxKBitRate:(NSUInteger)rxKBitRate {
1972
   [self sendEvent:AGVideoTransportStatsOfUid params:@{
1983
   [self sendEvent:AGVideoTransportStatsOfUid params:@{
1973
-                                                    @"uid": @(uid),
1974
-                                                    @"delay": @(delay),
1975
-                                                    @"lost": @(lost),
1976
-                                                    @"rxKBitrate": @(rxKBitRate)
1977
-                                                    }];
1984
+                                                      @"uid": @(uid),
1985
+                                                      @"delay": @(delay),
1986
+                                                      @"lost": @(lost),
1987
+                                                      @"rxKBitrate": @(rxKBitRate)
1988
+                                                      }];
1978
 }
1989
 }
1979
 
1990
 
1980
 - (void)rtcEngineRemoteAudioMixingDidStart:(AgoraRtcEngineKit *_Nonnull)engine {
1991
 - (void)rtcEngineRemoteAudioMixingDidStart:(AgoraRtcEngineKit *_Nonnull)engine {
1981
   [self sendEvent:AGRemoteAudioMixingStart params:@{
1992
   [self sendEvent:AGRemoteAudioMixingStart params:@{
1982
-                                                     @"message": @"RemoteAudioMixingStarted"
1983
-                                                     }];
1993
+                                                    @"message": @"RemoteAudioMixingStarted"
1994
+                                                    }];
1984
 }
1995
 }
1985
 
1996
 
1986
 - (void)rtcEngineRemoteAudioMixingDidFinish:(AgoraRtcEngineKit *_Nonnull)engine {
1997
 - (void)rtcEngineRemoteAudioMixingDidFinish:(AgoraRtcEngineKit *_Nonnull)engine {
1987
   [self sendEvent:AGRemoteAudioMixingFinish params:@{
1998
   [self sendEvent:AGRemoteAudioMixingFinish params:@{
1988
-                                                      @"message": @"RemoteAudioMixingFinish"
1989
-                                                      }];
1999
+                                                     @"message": @"RemoteAudioMixingFinish"
2000
+                                                     }];
1990
 }
2001
 }
1991
 
2002
 
1992
 - (void)rtcEngineDidAudioEffectFinish:(AgoraRtcEngineKit *_Nonnull)engine soundId:(NSInteger)soundId {
2003
 - (void)rtcEngineDidAudioEffectFinish:(AgoraRtcEngineKit *_Nonnull)engine soundId:(NSInteger)soundId {
1993
   [self sendEvent:AGAudioEffectFinish params:@{
2004
   [self sendEvent:AGAudioEffectFinish params:@{
1994
-                                                @"soundid": @(soundId)
1995
-                                                }];
2005
+                                               @"soundid": @(soundId)
2006
+                                               }];
1996
 }
2007
 }
1997
 
2008
 
1998
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamPublishedWithUrl:(NSString *_Nonnull)url errorCode:(AgoraErrorCode)errorCode {
2009
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamPublishedWithUrl:(NSString *_Nonnull)url errorCode:(AgoraErrorCode)errorCode {
1999
   [self sendEvent:AGStreamPublished params:@{
2010
   [self sendEvent:AGStreamPublished params:@{
2000
-                                           @"url": url,
2001
-                                           @"code": @(errorCode)
2002
-                                           }];
2011
+                                             @"url": url,
2012
+                                             @"code": @(errorCode)
2013
+                                             }];
2003
 }
2014
 }
2004
 
2015
 
2005
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine rtmpStreamingChangedToState:(NSString *_Nonnull)url state:(AgoraRtmpStreamingState)state errorCode:(AgoraRtmpStreamingErrorCode)errorCode {
2016
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine rtmpStreamingChangedToState:(NSString *_Nonnull)url state:(AgoraRtmpStreamingState)state errorCode:(AgoraRtmpStreamingErrorCode)errorCode {
2012
 
2023
 
2013
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamUnpublishedWithUrl:(NSString *_Nonnull)url {
2024
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamUnpublishedWithUrl:(NSString *_Nonnull)url {
2014
   [self sendEvent:AGStreamUnpublish params:@{
2025
   [self sendEvent:AGStreamUnpublish params:@{
2015
-                                           @"url": url,
2016
-                                           }];
2026
+                                             @"url": url,
2027
+                                             }];
2017
 }
2028
 }
2018
 
2029
 
2019
 - (void)rtcEngineTranscodingUpdated:(AgoraRtcEngineKit *_Nonnull)engine {
2030
 - (void)rtcEngineTranscodingUpdated:(AgoraRtcEngineKit *_Nonnull)engine {
2020
   [self sendEvent:AGTranscodingUpdate params:@{
2031
   [self sendEvent:AGTranscodingUpdate params:@{
2021
-                                              @"message": @"AGTranscodingUpdate"
2022
-                                              }];
2032
+                                               @"message": @"AGTranscodingUpdate"
2033
+                                               }];
2023
 }
2034
 }
2024
 
2035
 
2025
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine localVideoStateChange:(AgoraLocalVideoStreamState)state error:(AgoraLocalVideoStreamError)error {
2036
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine localVideoStateChange:(AgoraLocalVideoStreamState)state error:(AgoraLocalVideoStreamError)error {
2031
 
2042
 
2032
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamInjectedStatusOfUrl:(NSString *_Nonnull)url uid:(NSUInteger)uid status:(AgoraInjectStreamStatus)status {
2043
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine streamInjectedStatusOfUrl:(NSString *_Nonnull)url uid:(NSUInteger)uid status:(AgoraInjectStreamStatus)status {
2033
   [self sendEvent:AGStreamInjectedStatus params:@{
2044
   [self sendEvent:AGStreamInjectedStatus params:@{
2034
-                                                @"uid": @(uid),
2035
-                                                @"url": url,
2036
-                                                @"status": @(status)
2037
-                                                }];
2045
+                                                  @"uid": @(uid),
2046
+                                                  @"url": url,
2047
+                                                  @"status": @(status)
2048
+                                                  }];
2038
 }
2049
 }
2039
 
2050
 
2040
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine receiveStreamMessageFromUid:(NSUInteger)uid streamId:(NSInteger)streamId data:(NSData *_Nonnull)data {
2051
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine receiveStreamMessageFromUid:(NSUInteger)uid streamId:(NSInteger)streamId data:(NSData *_Nonnull)data {
2047
 
2058
 
2048
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didOccurStreamMessageErrorFromUid:(NSUInteger)uid streamId:(NSInteger)streamId error:(NSInteger)error missed:(NSInteger)missed cached:(NSInteger)cached {
2059
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didOccurStreamMessageErrorFromUid:(NSUInteger)uid streamId:(NSInteger)streamId error:(NSInteger)error missed:(NSInteger)missed cached:(NSInteger)cached {
2049
   [self sendEvent:AGOccurStreamMessageError params:@{
2060
   [self sendEvent:AGOccurStreamMessageError params:@{
2050
-                                                      @"uid": @(uid),
2051
-                                                      @"streamId": @(streamId),
2052
-                                                      @"error": @(error),
2053
-                                                      @"missed": @(missed),
2054
-                                                      @"cached": @(cached)
2055
-                                                      }];
2061
+                                                     @"uid": @(uid),
2062
+                                                     @"streamId": @(streamId),
2063
+                                                     @"error": @(error),
2064
+                                                     @"missed": @(missed),
2065
+                                                     @"cached": @(cached)
2066
+                                                     }];
2056
 }
2067
 }
2057
 
2068
 
2058
 - (void)rtcEngineMediaEngineDidLoaded:(AgoraRtcEngineKit *_Nonnull)engine {
2069
 - (void)rtcEngineMediaEngineDidLoaded:(AgoraRtcEngineKit *_Nonnull)engine {
2059
   [self sendEvent:AGMediaEngineLoaded params:@{
2070
   [self sendEvent:AGMediaEngineLoaded params:@{
2060
-                                                @"message": @"MediaEngineLoaded"
2061
-                                                }];
2071
+                                               @"message": @"MediaEngineLoaded"
2072
+                                               }];
2062
 }
2073
 }
2063
 
2074
 
2064
 - (void)rtcEngineMediaEngineDidStartCall:(AgoraRtcEngineKit *_Nonnull)engine {
2075
 - (void)rtcEngineMediaEngineDidStartCall:(AgoraRtcEngineKit *_Nonnull)engine {
2065
   [self sendEvent:AGMediaEngineStartCall params:@{
2076
   [self sendEvent:AGMediaEngineStartCall params:@{
2066
-                                                   @"message": @"AGMediaEngineStartCall"
2067
-                                                   }];
2077
+                                                  @"message": @"AGMediaEngineStartCall"
2078
+                                                  }];
2068
 }
2079
 }
2069
 
2080
 
2070
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine localAudioMixingStateDidChanged:(AgoraAudioMixingStateCode)state errorCode:(AgoraAudioMixingErrorCode)errorCode {
2081
 - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine localAudioMixingStateDidChanged:(AgoraAudioMixingStateCode)state errorCode:(AgoraAudioMixingErrorCode)errorCode {
2095
                                                      }];
2106
                                                      }];
2096
 }
2107
 }
2097
 
2108
 
2098
-@end
2109
+@end

+ 7
- 6
lib/AgoraView.native.d.ts View File

4
  * AgoraView is the render layer for rendering video stream
4
  * AgoraView is the render layer for rendering video stream
5
  *
5
  *
6
  * This class is used to rendering native sdk stream
6
  * This class is used to rendering native sdk stream
7
- *
8
  * @props {@link AgoraViewProps}
7
  * @props {@link AgoraViewProps}
9
  *
8
  *
10
  * @descrption AgoraViewProps has four properties.
9
  * @descrption AgoraViewProps has four properties.
11
- * @property number: mode, this property will setup video render mode. there is two avaliable mode {hidden: 1, fit: 2}, you could see more details [https://docs.agora.io/en/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#ac08882c4d0ec47b329900df169493673](#here)
12
- * @property boolean: showLocalVideo, this property will render local video, NOTICE: IF YOU SET showLocalVideo YOU CANNOT SET remoteUid
13
- * @property number: remoteUid, this property will render video with remote uid, NOTICE: IF YOU SET remoteUid YOU CANNOT SET showLocalVideo
14
- * @property boolean: zOrderMediaOverlay, this property will working for android side and it likes zIndex behaviour on web side.
10
+ * @property mode: {@link AgoraViewMode}, this property will setup video render mode. You could see more [details](https://docs.agora.io/en/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#ac08882c4d0ec47b329900df169493673)
11
+ * @property showLocalVideo: boolean, this property will render local video, NOTICE: IF YOU SET showLocalVideo YOU CANNOT SET remoteUid
12
+ * @property remoteUid: number, this property will render video with remote uid, NOTICE: IF YOU SET remoteUid YOU CANNOT SET showLocalVideo
13
+ * @property zOrderMediaOverlay: boolean, this property will working for android side and it likes zIndex behaviour on web side.
14
+ *
15
+ * @noInheritDoc
15
  */
16
  */
16
-export default class AgoraView extends React.Component<AgoraViewProps> {
17
+export default class AgoraView extends React.Component<AgoraViewProps, {}, {}> {
17
     /**
18
     /**
18
      * render
19
      * render
19
      *
20
      *

+ 12
- 5
lib/AgoraView.native.js View File

13
  * AgoraView is the render layer for rendering video stream
13
  * AgoraView is the render layer for rendering video stream
14
  *
14
  *
15
  * This class is used to rendering native sdk stream
15
  * This class is used to rendering native sdk stream
16
- *
17
  * @props {@link AgoraViewProps}
16
  * @props {@link AgoraViewProps}
18
  *
17
  *
19
  * @descrption AgoraViewProps has four properties.
18
  * @descrption AgoraViewProps has four properties.
20
- * @property number: mode, this property will setup video render mode. there is two avaliable mode {hidden: 1, fit: 2}, you could see more details [https://docs.agora.io/en/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#ac08882c4d0ec47b329900df169493673](#here)
21
- * @property boolean: showLocalVideo, this property will render local video, NOTICE: IF YOU SET showLocalVideo YOU CANNOT SET remoteUid
22
- * @property number: remoteUid, this property will render video with remote uid, NOTICE: IF YOU SET remoteUid YOU CANNOT SET showLocalVideo
23
- * @property boolean: zOrderMediaOverlay, this property will working for android side and it likes zIndex behaviour on web side.
19
+ * @property mode: {@link AgoraViewMode}, this property will setup video render mode. You could see more [details](https://docs.agora.io/en/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#ac08882c4d0ec47b329900df169493673)
20
+ * @property showLocalVideo: boolean, this property will render local video, NOTICE: IF YOU SET showLocalVideo YOU CANNOT SET remoteUid
21
+ * @property remoteUid: number, this property will render video with remote uid, NOTICE: IF YOU SET remoteUid YOU CANNOT SET showLocalVideo
22
+ * @property zOrderMediaOverlay: boolean, this property will working for android side and it likes zIndex behaviour on web side.
23
+ *
24
+ * @noInheritDoc
24
  */
25
  */
25
 class AgoraView extends react_1.default.Component {
26
 class AgoraView extends react_1.default.Component {
26
     /**
27
     /**
41
         for (let key in this.props) {
42
         for (let key in this.props) {
42
             htmlProps[key] = this.props[key];
43
             htmlProps[key] = this.props[key];
43
         }
44
         }
45
+        // convert uint32 to int32 for android
46
+        if (react_native_1.Platform.OS === 'android') {
47
+            const int32 = new Int32Array(1);
48
+            int32[0] = htmlProps.remoteUid;
49
+            htmlProps.remoteUid = int32[0];
50
+        }
44
         return htmlProps;
51
         return htmlProps;
45
     }
52
     }
46
 }
53
 }

+ 1
- 1
lib/AgoraView.native.js.map View File

1
-{"version":3,"file":"AgoraView.native.js","sourceRoot":"","sources":["../src/AgoraView.native.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAC1B,+CAEqB;AAMrB;;;;GAIG;AAEH,MAAM,YAAY,GAAG,qCAAsB,CAAC,mBAAmB,CAAC,CAAC;AAEjE;;;;;;;;;;;;GAYG;AACH,MAAqB,SAAU,SAAQ,eAAK,CAAC,SAAyB;IAClE;;;;OAIG;IACI,MAAM;QACT,OAAO,CACH,8BAAC,YAAY,oBAAM,IAAI,CAAC,YAAY,EAAE,EAAK,CAC9C,CAAA;IACL,CAAC;IAED;;;;OAIG;IACK,YAAY;QAChB,IAAI,SAAS,GAAG,EAAoB,CAAC;QACrC,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;YACxB,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACpC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AAxBD,4BAwBC"}
1
+{"version":3,"file":"AgoraView.native.js","sourceRoot":"","sources":["../src/AgoraView.native.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAC1B,+CAGqB;AAMrB;;;;GAIG;AAEH,MAAM,YAAY,GAAG,qCAAsB,CAAC,mBAAmB,CAAC,CAAC;AAEjE;;;;;;;;;;;;;GAaG;AACH,MAAqB,SAAU,SAAQ,eAAK,CAAC,SAAiC;IAC1E;;;;OAIG;IACI,MAAM;QACT,OAAO,CACH,8BAAC,YAAY,oBAAM,IAAI,CAAC,YAAY,EAAE,EAAK,CAC9C,CAAA;IACL,CAAC;IAED;;;;OAIG;IACK,YAAY;QAChB,IAAI,SAAS,GAAG,EAAoB,CAAC;QACrC,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;YACxB,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACpC;QAED,sCAAsC;QACtC,IAAI,uBAAQ,CAAC,EAAE,KAAK,SAAS,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC;YAC/B,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACjC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AA/BD,4BA+BC"}

+ 13
- 4
lib/RtcEngine.native.d.ts View File

7
  * Other methods of the RtcEngine object serve for agora native sdk and set up error logging.
7
  * Other methods of the RtcEngine object serve for agora native sdk and set up error logging.
8
  */
8
  */
9
 declare class RtcEngine {
9
 declare class RtcEngine {
10
+    /**
11
+     * @ignore AG_PREFIX
12
+     */
10
     private static readonly AG_PREFIX;
13
     private static readonly AG_PREFIX;
11
     /**
14
     /**
12
      * Creates a RtcEngine Object internal.
15
      * Creates a RtcEngine Object internal.
26
      * @param token
29
      * @param token
27
      * @param info
30
      * @param info
28
      */
31
      */
29
-    static joinChannel(channelName: string, uid?: number, token?: string, info?: Object): void;
32
+    static joinChannel(channelName: string, uid?: number, token?: string, info?: Object): Promise<any>;
30
     /**
33
     /**
31
      * add event listener
34
      * add event listener
32
      *
35
      *
33
      * This method subscribes specified eventType and run listener. You should call this method at first.
36
      * This method subscribes specified eventType and run listener. You should call this method at first.
34
      *
37
      *
35
-     * @events
38
+     * @event listener
39
+     *
36
      * ---
40
      * ---
37
      * name | description | usage |
41
      * name | description | usage |
38
      * error | occurs when emit error  | on("error", evt) |
42
      * error | occurs when emit error  | on("error", evt) |
106
      * networkTypeChanged | occurs when the device network type changed | on("networkTypeChanged", evt) |
110
      * networkTypeChanged | occurs when the device network type changed | on("networkTypeChanged", evt) |
107
      * mediaMetaDataReceived | occurs when you received media meta data from the remote side through sendMediaData | on("mediaMetaDataReceived", evt) |
111
      * mediaMetaDataReceived | occurs when you received media meta data from the remote side through sendMediaData | on("mediaMetaDataReceived", evt) |
108
      * ---
112
      * ---
113
+     *
109
      * @param eventType
114
      * @param eventType
110
      * @param listener
115
      * @param listener
111
      * @return any
116
      * @return any
262
      * @return Promise<any>
267
      * @return Promise<any>
263
      */
268
      */
264
     static muteAllRemoteVideoStreams(muted: boolean): Promise<any>;
269
     static muteAllRemoteVideoStreams(muted: boolean): Promise<any>;
270
+    /**
271
+     * @ignore Uint32ToInt32
272
+     */
273
+    private static Uint32ToInt32;
265
     /**
274
     /**
266
      * mute specified remote video stream.
275
      * mute specified remote video stream.
267
      *
276
      *
956
      *
965
      *
957
      * @param config LastmileProbeConfig {@link LastmileProbeConfig}
966
      * @param config LastmileProbeConfig {@link LastmileProbeConfig}
958
      *
967
      *
959
-     * @event onLastmileQuality: the SDK triggers this callback within two seconds depending on the network conditions. This callback rates the network conditions with a score and is more closely linked to the user experience.
960
-     * @event onLastmileProbeResult: the SDK triggers this callback within 30 seconds depending on the network conditions. This callback returns the real-time statistics of the network conditions and is more objective.
968
+     * event onLastmileQuality: the SDK triggers this callback within two seconds depending on the network conditions. This callback rates the network conditions with a score and is more closely linked to the user experience.
969
+     * event onLastmileProbeResult: the SDK triggers this callback within 30 seconds depending on the network conditions. This callback returns the real-time statistics of the network conditions and is more objective.
961
      * @return Promise<any>
970
      * @return Promise<any>
962
      */
971
      */
963
     static startLastmileProbeTest(config: LastmileProbeConfig): Promise<any>;
972
     static startLastmileProbeTest(config: LastmileProbeConfig): Promise<any>;

+ 88
- 8
lib/RtcEngine.native.js View File

40
      *
40
      *
41
      * This method subscribes specified eventType and run listener. You should call this method at first.
41
      * This method subscribes specified eventType and run listener. You should call this method at first.
42
      *
42
      *
43
-     * @events
43
+     * @event listener
44
+     *
44
      * ---
45
      * ---
45
      * name | description | usage |
46
      * name | description | usage |
46
      * error | occurs when emit error  | on("error", evt) |
47
      * error | occurs when emit error  | on("error", evt) |
114
      * networkTypeChanged | occurs when the device network type changed | on("networkTypeChanged", evt) |
115
      * networkTypeChanged | occurs when the device network type changed | on("networkTypeChanged", evt) |
115
      * mediaMetaDataReceived | occurs when you received media meta data from the remote side through sendMediaData | on("mediaMetaDataReceived", evt) |
116
      * mediaMetaDataReceived | occurs when you received media meta data from the remote side through sendMediaData | on("mediaMetaDataReceived", evt) |
116
      * ---
117
      * ---
118
+     *
117
      * @param eventType
119
      * @param eventType
118
      * @param listener
120
      * @param listener
119
      * @return any
121
      * @return any
120
      */
122
      */
121
     static on(eventType, listener) {
123
     static on(eventType, listener) {
124
+        // convert int32 to uint32
125
+        if ([
126
+            'joinChannelSuccess',
127
+            'rejoinChannelSuccess',
128
+            'userJoined',
129
+            'userOffline',
130
+            'occurStreamMessageError',
131
+            'receiveStreamMessage',
132
+            'activeSpeaker',
133
+            'firstRemoteAudioFrame',
134
+            'firstRemoteVideoDecoded',
135
+            'firstRemoteVideoFrame',
136
+            'userMuteAudio',
137
+            'userMuteVideo',
138
+            'userEnableVideo',
139
+            'userEnableLocalVideo',
140
+            'videoSizeChanged',
141
+            'firstRemoteAudioDecoded',
142
+            'remoteVideoStateChanged',
143
+            'remoteSubscribeFallbackToAudioOnly',
144
+            'networkQuality',
145
+            'streamInjectedStatus',
146
+        ].indexOf(eventType) != -1) {
147
+            AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, (args) => {
148
+                const uint32_uid = new Uint32Array(1);
149
+                uint32_uid[0] = args.uid;
150
+                args.uid = uint32_uid[0];
151
+                // convert int32 streamId to uint32 
152
+                if (args.streamId) {
153
+                    const uint32_streamId = new Uint32Array(1);
154
+                    uint32_streamId[0] = args.streamId;
155
+                    args.streamId = uint32_streamId[0];
156
+                }
157
+                listener(args);
158
+            });
159
+            return;
160
+        }
161
+        if (['audioVolumeIndication'].indexOf(eventType) != -1) {
162
+            AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, (args) => {
163
+                args.speakers.map((speaker) => {
164
+                    const uint32_uid = new Uint32Array(1);
165
+                    uint32_uid[0] = speaker.uid;
166
+                    return Object.assign({}, speaker, { uid: uint32_uid[0] });
167
+                });
168
+                listener(args);
169
+            });
170
+            return;
171
+        }
172
+        if ([
173
+            'remoteAudioStats',
174
+            'remoteVideoStats',
175
+            'audioTransportStatsOfUid',
176
+            'videoTransportStatsOfUid',
177
+        ].indexOf(eventType) != -1) {
178
+            AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, (args) => {
179
+                const uint32_uid = new Uint32Array(1);
180
+                uint32_uid[0] = args.stats.uid;
181
+                args.stats.uid = uint32_uid[0];
182
+                listener(args);
183
+            });
184
+            return;
185
+        }
122
         AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, listener);
186
         AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, listener);
123
     }
187
     }
124
     /**
188
     /**
214
      * @return Promise<any>
278
      * @return Promise<any>
215
      */
279
      */
216
     static setRemoteRenderMode(uid, mode) {
280
     static setRemoteRenderMode(uid, mode) {
217
-        return Agora.setRemoteRenderMode(uid, mode);
281
+        let uint32 = react_native_1.Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
282
+        return Agora.setRemoteRenderMode(uint32, mode);
218
     }
283
     }
219
     /**
284
     /**
220
      * start video preview
285
      * start video preview
312
     static muteAllRemoteVideoStreams(muted) {
377
     static muteAllRemoteVideoStreams(muted) {
313
         return Agora.muteAllRemoteVideoStreams(muted);
378
         return Agora.muteAllRemoteVideoStreams(muted);
314
     }
379
     }
380
+    /**
381
+     * @ignore Uint32ToInt32
382
+     */
383
+    static Uint32ToInt32(num) {
384
+        const int32 = new Int32Array(1);
385
+        int32[0] = num;
386
+        return int32[0];
387
+    }
315
     /**
388
     /**
316
      * mute specified remote video stream.
389
      * mute specified remote video stream.
317
      *
390
      *
321
      * @return Promise<any>
394
      * @return Promise<any>
322
      */
395
      */
323
     static muteRemoteVideoStream(uid, muted) {
396
     static muteRemoteVideoStream(uid, muted) {
324
-        return Agora.muteRemoteVideoStream(uid, muted);
397
+        let uint32 = react_native_1.Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
398
+        return Agora.muteRemoteVideoStream(uint32, muted);
325
     }
399
     }
326
     /**
400
     /**
327
      * set default mute all remote video stream
401
      * set default mute all remote video stream
390
      * @return Promise<any>
464
      * @return Promise<any>
391
      */
465
      */
392
     static muteRemoteAudioStream(uid, muted) {
466
     static muteRemoteAudioStream(uid, muted) {
393
-        return Agora.muteRemoteAudioStream(uid, muted);
467
+        let uint32 = react_native_1.Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
468
+        return Agora.muteRemoteAudioStream(uint32, muted);
394
     }
469
     }
395
     /**
470
     /**
396
      * adjust recording signal volume
471
      * adjust recording signal volume
1157
      * @return Promise<any>
1232
      * @return Promise<any>
1158
      */
1233
      */
1159
     static setRemoteVoicePosition(uid, pan, gain) {
1234
     static setRemoteVoicePosition(uid, pan, gain) {
1160
-        return Agora.setRemoteVoicePosition(uid, pan, gain);
1235
+        let uint32 = react_native_1.Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
1236
+        return Agora.setRemoteVoicePosition(uint32, pan, gain);
1161
     }
1237
     }
1162
     /**
1238
     /**
1163
      * start the lastmile probe test
1239
      * start the lastmile probe test
1166
      *
1242
      *
1167
      * @param config LastmileProbeConfig {@link LastmileProbeConfig}
1243
      * @param config LastmileProbeConfig {@link LastmileProbeConfig}
1168
      *
1244
      *
1169
-     * @event onLastmileQuality: the SDK triggers this callback within two seconds depending on the network conditions. This callback rates the network conditions with a score and is more closely linked to the user experience.
1170
-     * @event onLastmileProbeResult: the SDK triggers this callback within 30 seconds depending on the network conditions. This callback returns the real-time statistics of the network conditions and is more objective.
1245
+     * event onLastmileQuality: the SDK triggers this callback within two seconds depending on the network conditions. This callback rates the network conditions with a score and is more closely linked to the user experience.
1246
+     * event onLastmileProbeResult: the SDK triggers this callback within 30 seconds depending on the network conditions. This callback returns the real-time statistics of the network conditions and is more objective.
1171
      * @return Promise<any>
1247
      * @return Promise<any>
1172
      */
1248
      */
1173
     static startLastmileProbeTest(config) {
1249
     static startLastmileProbeTest(config) {
1195
      * @return Promise<any>
1271
      * @return Promise<any>
1196
      */
1272
      */
1197
     static setRemoteUserPriority(uid, userPrority) {
1273
     static setRemoteUserPriority(uid, userPrority) {
1198
-        return Agora.setRemoteUserPriority(uid, userPrority);
1274
+        let uint32 = react_native_1.Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
1275
+        return Agora.setRemoteUserPriority(uint32, userPrority);
1199
     }
1276
     }
1200
     /**
1277
     /**
1201
      * start an audio call test.
1278
      * start an audio call test.
1301
         });
1378
         });
1302
     }
1379
     }
1303
 }
1380
 }
1381
+/**
1382
+ * @ignore AG_PREFIX
1383
+ */
1304
 RtcEngine.AG_PREFIX = 'ag_rtc';
1384
 RtcEngine.AG_PREFIX = 'ag_rtc';
1305
 exports.default = RtcEngine;
1385
 exports.default = RtcEngine;
1306
 //# sourceMappingURL=RtcEngine.native.js.map
1386
 //# sourceMappingURL=RtcEngine.native.js.map

+ 1
- 1
lib/RtcEngine.native.js.map
File diff suppressed because it is too large
View File


+ 1
- 0
lib/index.d.ts View File

1
 export { default as AgoraView } from './AgoraView.native';
1
 export { default as AgoraView } from './AgoraView.native';
2
 export { default as RtcEngine } from './RtcEngine.native';
2
 export { default as RtcEngine } from './RtcEngine.native';
3
+export * from "./types";

+ 2
- 0
lib/index.js View File

1
 "use strict";
1
 "use strict";
2
 Object.defineProperty(exports, "__esModule", { value: true });
2
 Object.defineProperty(exports, "__esModule", { value: true });
3
+const tslib_1 = require("tslib");
3
 var AgoraView_native_1 = require("./AgoraView.native");
4
 var AgoraView_native_1 = require("./AgoraView.native");
4
 exports.AgoraView = AgoraView_native_1.default;
5
 exports.AgoraView = AgoraView_native_1.default;
5
 var RtcEngine_native_1 = require("./RtcEngine.native");
6
 var RtcEngine_native_1 = require("./RtcEngine.native");
6
 exports.RtcEngine = RtcEngine_native_1.default;
7
 exports.RtcEngine = RtcEngine_native_1.default;
8
+tslib_1.__exportStar(require("./types"), exports);
7
 //# sourceMappingURL=index.js.map
9
 //# sourceMappingURL=index.js.map

+ 1
- 1
lib/index.js.map View File

1
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,uDAAwD;AAAhD,uCAAA,OAAO,CAAa;AAC5B,uDAAwD;AAAhD,uCAAA,OAAO,CAAa"}
1
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uDAAwD;AAAhD,uCAAA,OAAO,CAAa;AAC5B,uDAAwD;AAAhD,uCAAA,OAAO,CAAa;AAC5B,kDAAwB"}

+ 79
- 27
lib/types.d.ts View File

1
 import { ViewProps } from 'react-native';
1
 import { ViewProps } from 'react-native';
2
+/**
3
+ * AgoraViewMode
4
+ * @mode hidden Uniformly scale the video until it fills the visible boundaries (cropped). One dimension of the video may have clipped contents.
5
+ * @mode FIT Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to the disparity in the aspect ratio are filled with black.
6
+ */
7
+export declare enum AgoraViewMode {
8
+    HIDDEN = 1,
9
+    FIT = 2
10
+}
2
 /**
11
 /**
3
  * VideoEncoderConfig details
12
  * VideoEncoderConfig details
4
  * @property width: number | The encoder video's width
13
  * @property width: number | The encoder video's width
16
     orientationMode: number;
25
     orientationMode: number;
17
 }
26
 }
18
 /**
27
 /**
19
- * Option is work for init method
20
- * @property: string appid Sets the appid
21
- * @property: number channelProfile Sets the channel mode. 0 is communication mode, 1 is broadcasting mode
22
- * @property: {@link VideoEncoderConfig} sets video encoding config
23
- * @property: mode is optional sets only enable video / audio, 0 is audio mode, 1 is video mode
24
- * @property: clientRole is only work in live mode, 1 is host, 2 is audience
25
- * @property: dualStream is optional parameter only for enable for detail see {@link https://docs.agora.io/en/Video/API%20Reference/oc/Classes/AgoraRtcEngineKit.html#//api/name/enableDualStreamMode:}
26
- * @property: audioProfile {@link https://docs.agora.io/en/Video/API%20Reference/oc/Constants/AgoraAudioProfile.html}
27
- * @property: audioScenario {@link https://docs.agora.io/en/Video/API%20Reference/oc/Constants/AgoraAudioScenario.html}
28
+ * Option is used to {@link init}
29
+ * @member {@link appid} Sets the appid
30
+ * @member {@link channelProfile} Number channelProfile Sets the channel mode. 0 is communication mode, 1 is broadcasting mode
31
+ * @member {@link VideoEncoderConfig} sets video encoding config
32
+ * @member {@link dualStream} is optional parameter only for enable for detail see [more](https://docs.agora.io/en/Video/API%20Reference/oc/Classes/AgoraRtcEngineKit.html#//api/name/enableDualStreamMode)
33
+ * @member {@link mode} is optional sets only enable video / audio, 0 is audio mode, 1 is video mode
34
+ * @member {@link clientRole} is only work in live mode, 1 is host, 2 is audience
35
+ * @member {@link audioProfile} Sets audio profile to agora rtc sdk See more [details](https://docs.agora.io/en/Video/API%20Reference/oc/Constants/AgoraAudioProfile.html)
36
+ * @member {@link audioScenario} Sets audio scenario to agora rtc sdk more [details](https://docs.agora.io/en/Video/API%20Reference/oc/Constants/AgoraAudioScenario.html)
37
+ * @member {@link beauty} {@link BeautyOption}
38
+ * @member {@link voice} {@link VoiceDecorator}
28
  */
39
  */
29
 export interface Option {
40
 export interface Option {
30
     appid: String;
41
     appid: String;
41
 /**
52
 /**
42
  * VoiceDecorator is decorate local audio voice
53
  * VoiceDecorator is decorate local audio voice
43
  *
54
  *
44
- * @property type: string | the range values ['changer' | 'reverbPreset'] This property is the identifier for audio voice decorator
45
- * @property value: number | the value for voice parameter option.
46
- * type 'reverbPreset' range values: [0 is "off", 1 is "popular", 2 is "rnb", 3 is "rock", 4 is "hiphop", 5 is "vocal concert", 6 is "KTV", 7 is "studio"]
47
- * type 'changer' range values: [0 is "off", 1 is "old man", 2 is "baby boy", 3 is "baby girl", 4 is "zhubajie", 5 is "ethereal", 6 is "hulk"]
55
+ * @description
56
+ *   type 'reverbPreset' range values: [0 is "off", 1 is "popular", 2 is "rnb", 3 is "rock", 4 is "hiphop", 5 is "vocal concert", 6 is "KTV", 7 is "studio"]
57
+ *   type 'changer' range values: [0 is "off", 1 is "old man", 2 is "baby boy", 3 is "baby girl", 4 is "zhubajie", 5 is "ethereal", 6 is "hulk"]
58
+ * @member type: string | the range values ['changer' | 'reverbPreset'] This property is the identifier for audio voice decorator
59
+ * @member value: number | the value for voice parameter option.
48
  */
60
  */
49
 export interface VoiceDecorator {
61
 export interface VoiceDecorator {
50
     type: string;
62
     type: string;
69
     width: number;
81
     width: number;
70
     height: number;
82
     height: number;
71
 }
83
 }
72
-export interface Rect {
73
-    x: number;
74
-    y: number;
75
-    width: number;
76
-    height: number;
77
-}
78
 export interface Size {
84
 export interface Size {
79
     width: number;
85
     width: number;
80
     height: number;
86
     height: number;
81
 }
87
 }
82
 export interface TranscodingUser {
88
 export interface TranscodingUser {
83
     uid: number;
89
     uid: number;
84
-    zOrder: number;
85
-    rect: Rect;
90
+    x: number;
91
+    y: number;
92
+    width: number;
93
+    height: number;
86
     alpha: number;
94
     alpha: number;
95
+    zOrder: number;
87
     audioChannel: number;
96
     audioChannel: number;
88
 }
97
 }
89
 export interface Color {
98
 export interface Color {
92
     blue: number;
101
     blue: number;
93
     alpha: number;
102
     alpha: number;
94
 }
103
 }
104
+export declare enum VideoCodecProfile {
105
+    BASELINE = 66,
106
+    MAIN = 77,
107
+    HIGH = 100
108
+}
109
+export declare enum AudioCodecProfile {
110
+    LC_AAC = 0,
111
+    HE_AAC = 1
112
+}
113
+export declare enum AudioSampleRate {
114
+    TYPE_32000 = 32000,
115
+    TYPE_44100 = 44100,
116
+    TYPE_48000 = 48000
117
+}
118
+/**
119
+ * AgoraChannelStereo
120
+ * @note Agora’s self-defined audio channel type. We recommend choosing ONE or TWO. Special players are required if you choose TRHEE, FOUR or FIVE:
121
+ */
122
+export declare enum AudioChannelStereo {
123
+    ONE = 1,
124
+    TWO = 2,
125
+    TRHEE = 3,
126
+    FOUR = 4,
127
+    FIVE = 5
128
+}
129
+/**
130
+ * @member {@link size} {@link Size}
131
+ * @member {@link videoBitrate} integer number
132
+ * @member {@link videoFramerate} integer number
133
+ * @member {@link lowLatency} boolean
134
+ * @member {@link videoGop} number
135
+ * @member {@link videoCodecProfile} {@link VideoCodecProfile}
136
+ * @member {@link audioCodecProfile} {@link AudioCodecProfile}
137
+ * @member {@link audioSampleRate} {@link AudioSampleRate}
138
+ * @member {@link watermark} {@link BackgroundImage}
139
+ * @member {@link backgroundImage} {@link BackgroundImage}
140
+ * @member {@link backgroundColor} Standard RGB hex number: e.g. 0xffffff
141
+ * @member {@link audioBitrate} number
142
+ * @member {@link audioChannels} {@link AudioChannelStereo}
143
+ * @member {@link transcodingUsers} Array,{@link TranscodingUser}>,
144
+ * @member {@link transcodingExtraInfo} string
145
+ */
95
 export interface LiveTranscodingOption {
146
 export interface LiveTranscodingOption {
96
     size: Size;
147
     size: Size;
97
     videoBitrate: number;
148
     videoBitrate: number;
98
     videoFramerate: number;
149
     videoFramerate: number;
99
     lowLatency: boolean;
150
     lowLatency: boolean;
100
     videoGop: number;
151
     videoGop: number;
101
-    videoCodecProfile: number;
102
-    transcodingUsers: Array<TranscodingUser>;
103
-    transcodingExtraInfo: string;
152
+    videoCodecProfile: VideoCodecProfile;
153
+    audioCodecProfile: AudioCodecProfile;
154
+    audioSampleRate: AudioSampleRate;
104
     watermark: BackgroundImage;
155
     watermark: BackgroundImage;
105
     backgroundImage: BackgroundImage;
156
     backgroundImage: BackgroundImage;
106
-    backgroundColor: Color;
107
-    audioSampleRate: number;
157
+    backgroundColor: number;
108
     audioBitrate: number;
158
     audioBitrate: number;
109
-    audioChannels: number;
159
+    audioChannels: AudioChannelStereo;
160
+    transcodingUsers: Array<TranscodingUser>;
161
+    transcodingExtraInfo: string;
110
 }
162
 }
111
 export interface VideoOption {
163
 export interface VideoOption {
112
     uid: number;
164
     uid: number;

+ 39
- 0
lib/types.js View File

1
 "use strict";
1
 "use strict";
2
 Object.defineProperty(exports, "__esModule", { value: true });
2
 Object.defineProperty(exports, "__esModule", { value: true });
3
+/**
4
+ * AgoraViewMode
5
+ * @mode hidden Uniformly scale the video until it fills the visible boundaries (cropped). One dimension of the video may have clipped contents.
6
+ * @mode FIT Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to the disparity in the aspect ratio are filled with black.
7
+ */
8
+var AgoraViewMode;
9
+(function (AgoraViewMode) {
10
+    AgoraViewMode[AgoraViewMode["HIDDEN"] = 1] = "HIDDEN";
11
+    AgoraViewMode[AgoraViewMode["FIT"] = 2] = "FIT";
12
+})(AgoraViewMode = exports.AgoraViewMode || (exports.AgoraViewMode = {}));
13
+var VideoCodecProfile;
14
+(function (VideoCodecProfile) {
15
+    VideoCodecProfile[VideoCodecProfile["BASELINE"] = 66] = "BASELINE";
16
+    VideoCodecProfile[VideoCodecProfile["MAIN"] = 77] = "MAIN";
17
+    VideoCodecProfile[VideoCodecProfile["HIGH"] = 100] = "HIGH";
18
+})(VideoCodecProfile = exports.VideoCodecProfile || (exports.VideoCodecProfile = {}));
19
+var AudioCodecProfile;
20
+(function (AudioCodecProfile) {
21
+    AudioCodecProfile[AudioCodecProfile["LC_AAC"] = 0] = "LC_AAC";
22
+    AudioCodecProfile[AudioCodecProfile["HE_AAC"] = 1] = "HE_AAC";
23
+})(AudioCodecProfile = exports.AudioCodecProfile || (exports.AudioCodecProfile = {}));
24
+var AudioSampleRate;
25
+(function (AudioSampleRate) {
26
+    AudioSampleRate[AudioSampleRate["TYPE_32000"] = 32000] = "TYPE_32000";
27
+    AudioSampleRate[AudioSampleRate["TYPE_44100"] = 44100] = "TYPE_44100";
28
+    AudioSampleRate[AudioSampleRate["TYPE_48000"] = 48000] = "TYPE_48000";
29
+})(AudioSampleRate = exports.AudioSampleRate || (exports.AudioSampleRate = {}));
30
+/**
31
+ * AgoraChannelStereo
32
+ * @note Agora’s self-defined audio channel type. We recommend choosing ONE or TWO. Special players are required if you choose TRHEE, FOUR or FIVE:
33
+ */
34
+var AudioChannelStereo;
35
+(function (AudioChannelStereo) {
36
+    AudioChannelStereo[AudioChannelStereo["ONE"] = 1] = "ONE";
37
+    AudioChannelStereo[AudioChannelStereo["TWO"] = 2] = "TWO";
38
+    AudioChannelStereo[AudioChannelStereo["TRHEE"] = 3] = "TRHEE";
39
+    AudioChannelStereo[AudioChannelStereo["FOUR"] = 4] = "FOUR";
40
+    AudioChannelStereo[AudioChannelStereo["FIVE"] = 5] = "FIVE";
41
+})(AudioChannelStereo = exports.AudioChannelStereo || (exports.AudioChannelStereo = {}));
3
 //# sourceMappingURL=types.js.map
42
 //# sourceMappingURL=types.js.map

+ 1
- 1
lib/types.js.map View File

1
-{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAEA;;;;GAIG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,qDAAU,CAAA;IACV,+CAAO,CAAA;AACT,CAAC,EAHW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAGxB;AAuGD,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,kEAAa,CAAA;IACb,0DAAS,CAAA;IACT,2DAAU,CAAA;AACZ,CAAC,EAJW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAI5B;AAED,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,6DAAU,CAAA;IACV,6DAAU,CAAA;AACZ,CAAC,EAHW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAG5B;AAED,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,qEAAkB,CAAA;IAClB,qEAAkB,CAAA;IAClB,qEAAkB,CAAA;AACpB,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B;AAED;;;GAGG;AACH,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,yDAAO,CAAA;IACP,yDAAO,CAAA;IACP,6DAAS,CAAA;IACT,2DAAQ,CAAA;IACR,2DAAQ,CAAA;AACV,CAAC,EANW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAM7B"}

+ 3
- 2
package.json View File

1
 {
1
 {
2
   "name": "react-native-agora",
2
   "name": "react-native-agora",
3
-  "version": "2.4.1-alpha.2",
3
+  "version": "2.4.1-alpha.3",
4
   "description": "React Native around the Agora RTC SDKs for Android and iOS agora",
4
   "description": "React Native around the Agora RTC SDKs for Android and iOS agora",
5
   "summary": "agora native sdk for react-native",
5
   "summary": "agora native sdk for react-native",
6
   "main": "lib/index.js",
6
   "main": "lib/index.js",
49
     "react-native-typescript-transformer": "^1.2.11",
49
     "react-native-typescript-transformer": "^1.2.11",
50
     "ts-jest": "^23.10.5",
50
     "ts-jest": "^23.10.5",
51
     "tslint": "^5.12.1",
51
     "tslint": "^5.12.1",
52
-    "typedoc": "^0.14.2",
52
+    "typedoc": "0.15.0",
53
+    "typedoc-plugin-no-inherit": "^1.1.9",
53
     "typescript": "^3.2.4"
54
     "typescript": "^3.2.4"
54
   },
55
   },
55
   "jest": {
56
   "jest": {

+ 16
- 7
src/AgoraView.native.tsx View File

1
 import React from 'react';
1
 import React from 'react';
2
 import {
2
 import {
3
     requireNativeComponent,
3
     requireNativeComponent,
4
+    Platform
4
 } from 'react-native'
5
 } from 'react-native'
5
 
6
 
6
 import {
7
 import {
7
-    AgoraViewProps
8
+    AgoraViewProps,
8
 } from "./types";
9
 } from "./types";
9
 
10
 
10
 /**
11
 /**
19
  * AgoraView is the render layer for rendering video stream
20
  * AgoraView is the render layer for rendering video stream
20
  *
21
  *
21
  * This class is used to rendering native sdk stream
22
  * This class is used to rendering native sdk stream
22
- *
23
  * @props {@link AgoraViewProps}
23
  * @props {@link AgoraViewProps}
24
  * 
24
  * 
25
  * @descrption AgoraViewProps has four properties.
25
  * @descrption AgoraViewProps has four properties.
26
- * @property number: mode, this property will setup video render mode. there is two avaliable mode {hidden: 1, fit: 2}, you could see more details [https://docs.agora.io/en/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#ac08882c4d0ec47b329900df169493673](#here)
27
- * @property boolean: showLocalVideo, this property will render local video, NOTICE: IF YOU SET showLocalVideo YOU CANNOT SET remoteUid
28
- * @property number: remoteUid, this property will render video with remote uid, NOTICE: IF YOU SET remoteUid YOU CANNOT SET showLocalVideo
29
- * @property boolean: zOrderMediaOverlay, this property will working for android side and it likes zIndex behaviour on web side.
26
+ * @property mode: {@link AgoraViewMode}, this property will setup video render mode. You could see more [details](https://docs.agora.io/en/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#ac08882c4d0ec47b329900df169493673)
27
+ * @property showLocalVideo: boolean, this property will render local video, NOTICE: IF YOU SET showLocalVideo YOU CANNOT SET remoteUid
28
+ * @property remoteUid: number, this property will render video with remote uid, NOTICE: IF YOU SET remoteUid YOU CANNOT SET showLocalVideo
29
+ * @property zOrderMediaOverlay: boolean, this property will working for android side and it likes zIndex behaviour on web side.
30
+ * 
31
+ * @noInheritDoc
30
  */
32
  */
31
-export default class AgoraView extends React.Component<AgoraViewProps> {
33
+export default class AgoraView extends React.Component<AgoraViewProps, {}, {}> {
32
     /**
34
     /**
33
      * render
35
      * render
34
      *
36
      *
50
         for (let key in this.props) {
52
         for (let key in this.props) {
51
             htmlProps[key] = this.props[key];
53
             htmlProps[key] = this.props[key];
52
         }
54
         }
55
+        
56
+        // convert uint32 to int32 for android
57
+        if (Platform.OS === 'android') {
58
+            const int32 = new Int32Array(1);
59
+            int32[0] = htmlProps.remoteUid;
60
+            htmlProps.remoteUid = int32[0]
61
+        }
53
         return htmlProps;
62
         return htmlProps;
54
     }
63
     }
55
 }
64
 }

+ 97
- 13
src/RtcEngine.native.ts View File

40
  */
40
  */
41
 class RtcEngine {
41
 class RtcEngine {
42
 
42
 
43
+    /**
44
+     * @ignore AG_PREFIX
45
+     */ 
43
     private static readonly AG_PREFIX: string = 'ag_rtc';
46
     private static readonly AG_PREFIX: string = 'ag_rtc';
44
 
47
 
45
     /**
48
     /**
63
      * @param token
66
      * @param token
64
      * @param info
67
      * @param info
65
      */
68
      */
66
-    public static joinChannel(channelName: string, uid?: number, token?: string, info?: Object): void {
69
+    public static joinChannel(channelName: string, uid?: number, token?: string, info?: Object): Promise<any> {
67
         return Agora.joinChannel({channelName, uid, token, info});
70
         return Agora.joinChannel({channelName, uid, token, info});
68
     }
71
     }
69
 
72
 
72
      *
75
      *
73
      * This method subscribes specified eventType and run listener. You should call this method at first.
76
      * This method subscribes specified eventType and run listener. You should call this method at first.
74
      * 
77
      * 
75
-     * @events
78
+     * @event listener
79
+     * 
76
      * ---
80
      * ---
77
      * name | description | usage |
81
      * name | description | usage |
78
      * error | occurs when emit error  | on("error", evt) |
82
      * error | occurs when emit error  | on("error", evt) |
146
      * networkTypeChanged | occurs when the device network type changed | on("networkTypeChanged", evt) | 
150
      * networkTypeChanged | occurs when the device network type changed | on("networkTypeChanged", evt) | 
147
      * mediaMetaDataReceived | occurs when you received media meta data from the remote side through sendMediaData | on("mediaMetaDataReceived", evt) | 
151
      * mediaMetaDataReceived | occurs when you received media meta data from the remote side through sendMediaData | on("mediaMetaDataReceived", evt) | 
148
      * ---
152
      * ---
153
+     * 
149
      * @param eventType
154
      * @param eventType
150
      * @param listener
155
      * @param listener
151
      * @return any
156
      * @return any
152
      */
157
      */
153
     public static on(eventType: string, listener: (...args: any[]) => any): any {
158
     public static on(eventType: string, listener: (...args: any[]) => any): any {
159
+        // convert int32 to uint32
160
+        if ([
161
+            'joinChannelSuccess',
162
+            'rejoinChannelSuccess',
163
+            'userJoined',
164
+            'userOffline',
165
+            'occurStreamMessageError',
166
+            'receiveStreamMessage',
167
+            'activeSpeaker',
168
+            'firstRemoteAudioFrame',
169
+            'firstRemoteVideoDecoded',
170
+            'firstRemoteVideoFrame',
171
+            'userMuteAudio',
172
+            'userMuteVideo',
173
+            'userEnableVideo',
174
+            'userEnableLocalVideo',
175
+            'videoSizeChanged',
176
+            'firstRemoteAudioDecoded',
177
+            'remoteVideoStateChanged',
178
+            'remoteSubscribeFallbackToAudioOnly',
179
+            'networkQuality',
180
+            'streamInjectedStatus',
181
+        ].indexOf(eventType) != -1) {
182
+            AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, (args) => {
183
+                const uint32_uid = new Uint32Array(1);
184
+                uint32_uid[0] = args.uid;
185
+                args.uid = uint32_uid[0];
186
+
187
+                // convert int32 streamId to uint32 
188
+                if(args.streamId) {
189
+                    const uint32_streamId = new Uint32Array(1);
190
+                    uint32_streamId[0] = args.streamId;
191
+                    args.streamId = uint32_streamId[0];
192
+                }
193
+                listener(args);
194
+            });
195
+            return;
196
+        }
197
+
198
+        if (['audioVolumeIndication'].indexOf(eventType) != -1) {
199
+            AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, (args) => {
200
+                args.speakers.map((speaker: any) => {
201
+                    const uint32_uid = new Uint32Array(1);
202
+                    uint32_uid[0] = speaker.uid;
203
+                    return {
204
+                        ...speaker,
205
+                        uid: uint32_uid[0]
206
+                    }
207
+                })
208
+                listener(args);
209
+            });
210
+            return;
211
+        }
212
+
213
+        if ([
214
+            'remoteAudioStats',
215
+            'remoteVideoStats',
216
+            'audioTransportStatsOfUid',
217
+            'videoTransportStatsOfUid',   
218
+        ].indexOf(eventType) != -1) {
219
+            AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, (args) => {
220
+                const uint32_uid = new Uint32Array(1);
221
+                uint32_uid[0] = args.stats.uid;
222
+                args.stats.uid = uint32_uid[0];
223
+                listener(args);
224
+            });
225
+            return;
226
+        }
154
         AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, listener);
227
         AgoraEventEmitter.addListener(`${RtcEngine.AG_PREFIX}${eventType}`, listener);
155
     }
228
     }
156
 
229
 
256
      * @return Promise<any>
329
      * @return Promise<any>
257
      */
330
      */
258
     public static setRemoteRenderMode(uid: number, mode: number): Promise<any> {
331
     public static setRemoteRenderMode(uid: number, mode: number): Promise<any> {
259
-        return Agora.setRemoteRenderMode(uid, mode);
332
+        let uint32 = Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
333
+        return Agora.setRemoteRenderMode(uint32, mode);
260
     }
334
     }
261
 
335
 
262
     /**
336
     /**
366
         return Agora.muteAllRemoteVideoStreams(muted);
440
         return Agora.muteAllRemoteVideoStreams(muted);
367
     }
441
     }
368
 
442
 
443
+    /**
444
+     * @ignore Uint32ToInt32
445
+     */
446
+    private static Uint32ToInt32(num: number) {
447
+        const int32 = new Int32Array(1);
448
+        int32[0] = num;
449
+        return int32[0];
450
+    }
451
+
369
     /**
452
     /**
370
      * mute specified remote video stream.
453
      * mute specified remote video stream.
371
      *
454
      *
375
      * @return Promise<any>
458
      * @return Promise<any>
376
      */
459
      */
377
     public static muteRemoteVideoStream(uid: number, muted: boolean): Promise<any> {
460
     public static muteRemoteVideoStream(uid: number, muted: boolean): Promise<any> {
378
-        return Agora.muteRemoteVideoStream(uid, muted);
461
+        let uint32 = Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
462
+        return Agora.muteRemoteVideoStream(uint32, muted);
379
     }
463
     }
380
 
464
 
381
     /**
465
     /**
451
      * @return Promise<any>
535
      * @return Promise<any>
452
      */
536
      */
453
     public static muteRemoteAudioStream(uid: number, muted: boolean): Promise<any> {
537
     public static muteRemoteAudioStream(uid: number, muted: boolean): Promise<any> {
454
-        return Agora.muteRemoteAudioStream(uid, muted);
538
+        let uint32 = Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
539
+        return Agora.muteRemoteAudioStream(uint32, muted);
455
     }
540
     }
456
 
541
 
457
     /**
542
     /**
1293
      * @return Promise<any>
1378
      * @return Promise<any>
1294
      */
1379
      */
1295
     static setRemoteVoicePosition(uid: number, pan: number, gain: number): Promise<any> {
1380
     static setRemoteVoicePosition(uid: number, pan: number, gain: number): Promise<any> {
1296
-        return Agora.setRemoteVoicePosition(uid, pan, gain)
1381
+        let uint32 = Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
1382
+        return Agora.setRemoteVoicePosition(uint32, pan, gain)
1297
     }
1383
     }
1298
 
1384
 
1299
     /**
1385
     /**
1303
      *
1389
      *
1304
      * @param config LastmileProbeConfig {@link LastmileProbeConfig}
1390
      * @param config LastmileProbeConfig {@link LastmileProbeConfig}
1305
      *
1391
      *
1306
-     * @event onLastmileQuality: the SDK triggers this callback within two seconds depending on the network conditions. This callback rates the network conditions with a score and is more closely linked to the user experience.
1307
-     * @event onLastmileProbeResult: the SDK triggers this callback within 30 seconds depending on the network conditions. This callback returns the real-time statistics of the network conditions and is more objective.
1392
+     * event onLastmileQuality: the SDK triggers this callback within two seconds depending on the network conditions. This callback rates the network conditions with a score and is more closely linked to the user experience.
1393
+     * event onLastmileProbeResult: the SDK triggers this callback within 30 seconds depending on the network conditions. This callback returns the real-time statistics of the network conditions and is more objective.
1308
      * @return Promise<any>
1394
      * @return Promise<any>
1309
      */
1395
      */
1310
     static startLastmileProbeTest(config: LastmileProbeConfig): Promise<any> {
1396
     static startLastmileProbeTest(config: LastmileProbeConfig): Promise<any> {
1334
      * @return Promise<any>
1420
      * @return Promise<any>
1335
      */
1421
      */
1336
     static setRemoteUserPriority(uid: number, userPrority: number): Promise<any> {
1422
     static setRemoteUserPriority(uid: number, userPrority: number): Promise<any> {
1337
-        return Agora.setRemoteUserPriority(uid, userPrority);
1423
+        let uint32 = Platform.OS === 'android' ? this.Uint32ToInt32(uid) : uid;
1424
+        return Agora.setRemoteUserPriority(uint32, userPrority);
1338
     }
1425
     }
1339
 
1426
 
1340
     /**
1427
     /**
1446
     }
1533
     }
1447
 }
1534
 }
1448
 
1535
 
1449
-
1450
-
1451
-
1452
-export default RtcEngine;
1536
+export default RtcEngine;

+ 1
- 0
src/index.ts View File

1
 export {default as AgoraView} from './AgoraView.native';
1
 export {default as AgoraView} from './AgoraView.native';
2
 export {default as RtcEngine} from './RtcEngine.native';
2
 export {default as RtcEngine} from './RtcEngine.native';
3
+export * from "./types";

+ 84
- 29
src/types.ts View File

1
-import { View, ViewProps } from 'react-native';
1
+import { ViewProps } from 'react-native';
2
 
2
 
3
+/**
4
+ * AgoraViewMode
5
+ * @mode hidden Uniformly scale the video until it fills the visible boundaries (cropped). One dimension of the video may have clipped contents.
6
+ * @mode FIT Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to the disparity in the aspect ratio are filled with black.
7
+ */
8
+export enum AgoraViewMode {
9
+  HIDDEN = 1,
10
+  FIT = 2
11
+}
3
 
12
 
4
 /**
13
 /**
5
  * VideoEncoderConfig details
14
  * VideoEncoderConfig details
19
 }
28
 }
20
 
29
 
21
 /**
30
 /**
22
- * Option is work for init method
23
- * @property: string appid Sets the appid
24
- * @property: number channelProfile Sets the channel mode. 0 is communication mode, 1 is broadcasting mode
25
- * @property: {@link VideoEncoderConfig} sets video encoding config
26
- * @property: mode is optional sets only enable video / audio, 0 is audio mode, 1 is video mode
27
- * @property: clientRole is only work in live mode, 1 is host, 2 is audience
28
- * @property: dualStream is optional parameter only for enable for detail see {@link https://docs.agora.io/en/Video/API%20Reference/oc/Classes/AgoraRtcEngineKit.html#//api/name/enableDualStreamMode:}
29
- * @property: audioProfile {@link https://docs.agora.io/en/Video/API%20Reference/oc/Constants/AgoraAudioProfile.html}
30
- * @property: audioScenario {@link https://docs.agora.io/en/Video/API%20Reference/oc/Constants/AgoraAudioScenario.html}
31
+ * Option is used to {@link init}
32
+ * @member {@link appid} Sets the appid
33
+ * @member {@link channelProfile} Number channelProfile Sets the channel mode. 0 is communication mode, 1 is broadcasting mode
34
+ * @member {@link VideoEncoderConfig} sets video encoding config
35
+ * @member {@link dualStream} is optional parameter only for enable for detail see [more](https://docs.agora.io/en/Video/API%20Reference/oc/Classes/AgoraRtcEngineKit.html#//api/name/enableDualStreamMode)
36
+ * @member {@link mode} is optional sets only enable video / audio, 0 is audio mode, 1 is video mode
37
+ * @member {@link clientRole} is only work in live mode, 1 is host, 2 is audience
38
+ * @member {@link audioProfile} Sets audio profile to agora rtc sdk See more [details](https://docs.agora.io/en/Video/API%20Reference/oc/Constants/AgoraAudioProfile.html)
39
+ * @member {@link audioScenario} Sets audio scenario to agora rtc sdk more [details](https://docs.agora.io/en/Video/API%20Reference/oc/Constants/AgoraAudioScenario.html)
40
+ * @member {@link beauty} {@link BeautyOption}
41
+ * @member {@link voice} {@link VoiceDecorator}
31
  */
42
  */
32
 export interface Option {
43
 export interface Option {
33
   appid: String,
44
   appid: String,
45
 /**
56
 /**
46
  * VoiceDecorator is decorate local audio voice
57
  * VoiceDecorator is decorate local audio voice
47
  *
58
  *
48
- * @property type: string | the range values ['changer' | 'reverbPreset'] This property is the identifier for audio voice decorator
49
- * @property value: number | the value for voice parameter option.
50
- * type 'reverbPreset' range values: [0 is "off", 1 is "popular", 2 is "rnb", 3 is "rock", 4 is "hiphop", 5 is "vocal concert", 6 is "KTV", 7 is "studio"]
51
- * type 'changer' range values: [0 is "off", 1 is "old man", 2 is "baby boy", 3 is "baby girl", 4 is "zhubajie", 5 is "ethereal", 6 is "hulk"]
59
+ * @description
60
+ *   type 'reverbPreset' range values: [0 is "off", 1 is "popular", 2 is "rnb", 3 is "rock", 4 is "hiphop", 5 is "vocal concert", 6 is "KTV", 7 is "studio"]
61
+ *   type 'changer' range values: [0 is "off", 1 is "old man", 2 is "baby boy", 3 is "baby girl", 4 is "zhubajie", 5 is "ethereal", 6 is "hulk"]
62
+ * @member type: string | the range values ['changer' | 'reverbPreset'] This property is the identifier for audio voice decorator
63
+ * @member value: number | the value for voice parameter option.
52
  */
64
  */
53
 export interface VoiceDecorator {
65
 export interface VoiceDecorator {
54
   type: string,
66
   type: string,
76
   height: number
88
   height: number
77
 }
89
 }
78
 
90
 
79
-export interface Rect {
80
-  x: number,
81
-  y: number,
82
-  width: number,
83
-  height: number
84
-}
85
-
86
 export interface Size {
91
 export interface Size {
87
   width: number,
92
   width: number,
88
   height: number
93
   height: number
90
 
95
 
91
 export interface TranscodingUser {
96
 export interface TranscodingUser {
92
   uid: number,
97
   uid: number,
93
-  zOrder: number,
94
-  rect: Rect,
98
+  x: number,
99
+  y: number,
100
+  width: number,
101
+  height: number,
95
   alpha: number,
102
   alpha: number,
103
+  zOrder: number,
96
   audioChannel: number
104
   audioChannel: number
97
 }
105
 }
98
 
106
 
103
   alpha: number
111
   alpha: number
104
 }
112
 }
105
 
113
 
114
+export enum VideoCodecProfile {
115
+  BASELINE = 66,
116
+  MAIN = 77,
117
+  HIGH = 100
118
+}
119
+
120
+export enum AudioCodecProfile {
121
+  LC_AAC = 0,
122
+  HE_AAC = 1
123
+}
124
+
125
+export enum AudioSampleRate {
126
+  TYPE_32000 = 32000,
127
+  TYPE_44100 = 44100,
128
+  TYPE_48000 = 48000,
129
+}
130
+
131
+/**
132
+ * AgoraChannelStereo
133
+ * @note Agora’s self-defined audio channel type. We recommend choosing ONE or TWO. Special players are required if you choose TRHEE, FOUR or FIVE:
134
+ */
135
+export enum AudioChannelStereo {
136
+  ONE = 1,
137
+  TWO = 2,
138
+  TRHEE = 3,
139
+  FOUR = 4,
140
+  FIVE = 5
141
+}
142
+
143
+/**
144
+ * @member {@link size} {@link Size}
145
+ * @member {@link videoBitrate} integer number
146
+ * @member {@link videoFramerate} integer number
147
+ * @member {@link lowLatency} boolean
148
+ * @member {@link videoGop} number
149
+ * @member {@link videoCodecProfile} {@link VideoCodecProfile}
150
+ * @member {@link audioCodecProfile} {@link AudioCodecProfile}
151
+ * @member {@link audioSampleRate} {@link AudioSampleRate}
152
+ * @member {@link watermark} {@link BackgroundImage}
153
+ * @member {@link backgroundImage} {@link BackgroundImage}
154
+ * @member {@link backgroundColor} Standard RGB hex number: e.g. 0xffffff 
155
+ * @member {@link audioBitrate} number
156
+ * @member {@link audioChannels} {@link AudioChannelStereo}
157
+ * @member {@link transcodingUsers} Array,{@link TranscodingUser}>,
158
+ * @member {@link transcodingExtraInfo} string
159
+ */
106
 export interface LiveTranscodingOption {
160
 export interface LiveTranscodingOption {
107
   size: Size,
161
   size: Size,
108
   videoBitrate: number,
162
   videoBitrate: number,
109
   videoFramerate: number,
163
   videoFramerate: number,
110
   lowLatency: boolean,
164
   lowLatency: boolean,
111
   videoGop: number,
165
   videoGop: number,
112
-  videoCodecProfile: number,
113
-  transcodingUsers: Array<TranscodingUser>,
114
-  transcodingExtraInfo: string,
166
+  videoCodecProfile: VideoCodecProfile,
167
+  audioCodecProfile: AudioCodecProfile,
168
+  audioSampleRate: AudioSampleRate,
115
   watermark: BackgroundImage,
169
   watermark: BackgroundImage,
116
   backgroundImage: BackgroundImage,
170
   backgroundImage: BackgroundImage,
117
-  backgroundColor: Color,
118
-  audioSampleRate: number,
171
+  backgroundColor: number,
119
   audioBitrate: number,
172
   audioBitrate: number,
120
-  audioChannels: number,
173
+  audioChannels: AudioChannelStereo,
174
+  transcodingUsers: Array<TranscodingUser>,
175
+  transcodingExtraInfo: string,
121
 }
176
 }
122
 
177
 
123
 export interface VideoOption {
178
 export interface VideoOption {