tirtc-react-native 2.4.2 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +39 -6
  2. package/TiRtcReactNative.podspec +1 -1
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcModule.kt +140 -17
  5. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeCleanup.kt +54 -19
  6. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeCloudStorageCallbacks.kt +60 -0
  7. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeEventBinder.kt +2 -0
  8. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeEventSink.kt +20 -0
  9. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeMaps.kt +112 -5
  10. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeOptions.kt +2 -7
  11. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeRegistry.kt +3 -0
  12. package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeStorageSupport.kt +46 -22
  13. package/ios/TiRtcReactNative+Conn.mm +61 -0
  14. package/ios/TiRtcReactNative+Output.mm +1 -7
  15. package/ios/TiRtcReactNative+Private.h +1 -0
  16. package/ios/TiRtcReactNative+Storage.mm +133 -35
  17. package/ios/TiRtcReactNative.mm +142 -51
  18. package/ios/TiRtcReactNativeCloudStorageCallbacks.h +13 -0
  19. package/ios/TiRtcReactNativeCloudStorageCallbacks.mm +67 -0
  20. package/ios/TiRtcReactNativeEventBinder.h +4 -0
  21. package/ios/TiRtcReactNativeEventBinder.mm +11 -0
  22. package/ios/TiRtcReactNativeEventSink.h +5 -0
  23. package/ios/TiRtcReactNativeEventSink.mm +18 -0
  24. package/ios/TiRtcReactNativeMaps.h +6 -0
  25. package/ios/TiRtcReactNativeMaps.mm +47 -0
  26. package/ios/TiRtcReactNativeOptions.mm +2 -6
  27. package/lib/module/audio_input.js +23 -4
  28. package/lib/module/audio_input.js.map +1 -1
  29. package/lib/module/build_identity.js +1 -0
  30. package/lib/module/conn.js +19 -0
  31. package/lib/module/conn.js.map +1 -1
  32. package/lib/module/events.js +16 -9
  33. package/lib/module/events.js.map +1 -1
  34. package/lib/module/index.js +3 -2
  35. package/lib/module/index.js.map +1 -1
  36. package/lib/module/logging_internal.js +16 -0
  37. package/lib/module/logging_internal.js.map +1 -1
  38. package/lib/module/raw_dump.js +53 -0
  39. package/lib/module/raw_dump.js.map +1 -0
  40. package/lib/module/runtime.js +3 -1
  41. package/lib/module/runtime.js.map +1 -1
  42. package/lib/module/specs/NativeTiRtc.js.map +1 -1
  43. package/lib/module/storage.js +190 -33
  44. package/lib/module/storage.js.map +1 -1
  45. package/lib/module/types.js +0 -4
  46. package/lib/module/types.js.map +1 -1
  47. package/lib/module/video_input.js +16 -6
  48. package/lib/module/video_input.js.map +1 -1
  49. package/lib/typescript/build_identity.d.ts +6 -0
  50. package/lib/typescript/conn.d.ts +2 -0
  51. package/lib/typescript/index.d.ts +5 -3
  52. package/lib/typescript/logging_internal.d.ts +1 -0
  53. package/lib/typescript/native.d.ts +1 -1
  54. package/lib/typescript/raw_dump.d.ts +35 -0
  55. package/lib/typescript/specs/NativeTiRtc.d.ts +75 -3
  56. package/lib/typescript/storage.d.ts +84 -3
  57. package/lib/typescript/types.d.ts +5 -6
  58. package/package.json +3 -3
  59. package/src/audio_input.ts +30 -11
  60. package/src/build_identity.ts +6 -0
  61. package/src/conn.ts +23 -0
  62. package/src/events.ts +14 -9
  63. package/src/index.ts +19 -1
  64. package/src/logging_internal.ts +18 -0
  65. package/src/native.ts +7 -1
  66. package/src/raw_dump.ts +84 -0
  67. package/src/runtime.ts +2 -1
  68. package/src/specs/NativeTiRtc.ts +80 -3
  69. package/src/storage.ts +260 -39
  70. package/src/types.ts +5 -8
  71. package/src/video_input.ts +22 -12
@@ -1,3 +1,4 @@
1
+ #import "TiRtcReactNativeCloudStorageCallbacks.h"
1
2
  #import "TiRtcReactNative.h"
2
3
  #import "TiRtcReactNative+Private.h"
3
4
 
@@ -14,7 +15,10 @@
14
15
  #import "TiRtcReactNativeOptions.h"
15
16
  #import "TiRtcReactNativeRegistry.h"
16
17
 
18
+ extern "C" int32_t ti_rtc_transport_log(int32_t level, const char* tag, const char* message);
19
+
17
20
  @protocol TiRtcReactNativeMediaFile <NSObject>
21
+ @property(nonatomic, readonly) NSString* path;
18
22
  - (void)deleteWithCompletion:(void (^)(int32_t code))completion;
19
23
  @end
20
24
 
@@ -36,12 +40,86 @@ static void TiRtcReactNativeDeleteForInvalidation(id file, dispatch_group_t grou
36
40
  }];
37
41
  }
38
42
 
43
+ static void TiRtcReactNativeReleaseOwners(NSMutableArray* objects, int64_t delayMs) {
44
+ BOOL (^released)(NSString*, int32_t) = ^BOOL(NSString* operation, int32_t code) {
45
+ if (code == 0 || code == TiRtcReactNativeErrorObjectReleased) return YES;
46
+ if (delayMs == 10 || code != [TiCloudStorageErrorCode inUse])
47
+ TiRtcReactNativeLogInvalidationFailure(operation, code);
48
+ // Keep ownership while a released JS waiter finishes unwinding its Native task.
49
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delayMs * NSEC_PER_MSEC),
50
+ dispatch_get_main_queue(), ^{
51
+ TiRtcReactNativeReleaseOwners(objects, MIN(INT64_C(1000), delayMs * 2));
52
+ });
53
+ return NO;
54
+ };
55
+ for (TiCloudStorageReplay* replay in [objects copy]) {
56
+ if ([replay isKindOfClass:[TiCloudStorageReplay class]] &&
57
+ !released(@"ti-cloud-storage-replay-stop", [replay stop])) return;
58
+ }
59
+ for (TiCloudStorageAudioOutput* output in [objects copy]) {
60
+ if (![output isKindOfClass:[TiCloudStorageAudioOutput class]]) continue;
61
+ if (!released(@"ti-cloud-storage-audio-detach", [output detach])) return;
62
+ if (!released(@"ti-cloud-storage-audio-dispose", [output dispose])) return;
63
+ [objects removeObjectIdenticalTo:output];
64
+ }
65
+ for (TiCloudStorageVideoOutput* output in [objects copy]) {
66
+ if (![output isKindOfClass:[TiCloudStorageVideoOutput class]]) continue;
67
+ if (!released(@"ti-cloud-storage-video-detach", [output detach])) return;
68
+ if (!released(@"ti-cloud-storage-video-view-detach", [output detachView])) return;
69
+ if (!released(@"ti-cloud-storage-video-dispose", [output dispose])) return;
70
+ [objects removeObjectIdenticalTo:output];
71
+ }
72
+ for (TiRtcAudioOutput* output in [objects copy]) {
73
+ if (![output isKindOfClass:[TiRtcAudioOutput class]]) continue;
74
+ if (!released(@"audio_output_dispose", [output dispose])) return;
75
+ [objects removeObjectIdenticalTo:output];
76
+ }
77
+ for (TiRtcVideoOutput* output in [objects copy]) {
78
+ if (![output isKindOfClass:[TiRtcVideoOutput class]]) continue;
79
+ if (!released(@"video_output_dispose", [output dispose])) return;
80
+ [objects removeObjectIdenticalTo:output];
81
+ }
82
+ for (TiRtcAudioInput* input in [objects copy]) {
83
+ if (![input isKindOfClass:[TiRtcAudioInput class]]) continue;
84
+ if (!released(@"audio_input_dispose", [input dispose])) return;
85
+ [objects removeObjectIdenticalTo:input];
86
+ }
87
+ for (TiRtcVideoInput* input in [objects copy]) {
88
+ if (![input isKindOfClass:[TiRtcVideoInput class]]) continue;
89
+ if (!released(@"video_input_dispose", [input dispose])) return;
90
+ [objects removeObjectIdenticalTo:input];
91
+ }
92
+ for (TiCloudStorageReplay* replay in [objects copy]) {
93
+ if (![replay isKindOfClass:[TiCloudStorageReplay class]]) continue;
94
+ if (!released(@"ti-cloud-storage-replay-dispose", [replay dispose])) return;
95
+ [objects removeObjectIdenticalTo:replay];
96
+ }
97
+ for (TiRtcConn* conn in [objects copy]) {
98
+ if (![conn isKindOfClass:[TiRtcConn class]]) continue;
99
+ if (!released(@"conn_disconnect", [conn disconnect])) return;
100
+ if (!released(@"conn_dispose", [conn dispose])) return;
101
+ [objects removeObjectIdenticalTo:conn];
102
+ }
103
+ for (TiCloudStorage* cloudStorage in [objects copy]) {
104
+ if (![cloudStorage isKindOfClass:[TiCloudStorage class]]) continue;
105
+ if (!released(@"ti-cloud-storage-dispose", [cloudStorage dispose])) return;
106
+ [objects removeObjectIdenticalTo:cloudStorage];
107
+ }
108
+ if (!released(@"ti-cloud-storage-shutdown", [TiCloudStorage shutdown])) return;
109
+ if (!released(@"runtime_shutdown", [TiRtc shutdown])) return;
110
+ [TiRtcLogging logWithLevel:TiRtcLogLevelInfo tag:@"TIRTC_REACT_NATIVE"
111
+ message:@"[module_invalidate] native owners released"];
112
+
113
+ }
114
+
39
115
  #pragma clang diagnostic push
40
116
  #pragma clang diagnostic ignored "-Wprotocol"
41
117
  @implementation TiRtcReactNative {
42
118
  TiRtcReactNativeRegistry* _registry;
43
119
  TiRtcReactNativeEventSink* _eventSink;
44
120
  TiRtcReactNativeEventBinder* _eventBinder;
121
+ TiRtcReactNativeCloudStorageCallbacks* _cloudStorageCallbacks;
122
+ NSLock* _lifecycleLock;
45
123
  std::atomic_bool _invalidated;
46
124
  }
47
125
 
@@ -50,14 +128,28 @@ RCT_EXPORT_MODULE(TiRtc)
50
128
  - (instancetype)init {
51
129
  if (self = [super init]) {
52
130
  _invalidated.store(false);
131
+ _lifecycleLock = [NSLock new];
53
132
  _registry = [TiRtcReactNativeRegistry sharedRegistry];
54
133
  __weak TiRtcReactNative* weakSelf = self;
134
+ _cloudStorageCallbacks = [[TiRtcReactNativeCloudStorageCallbacks alloc] initWithWake:^{
135
+ TiRtcReactNative* strongSelf = weakSelf;
136
+ if (strongSelf != nil && !strongSelf->_invalidated.load()) {
137
+ [strongSelf emitOnTiRtcEvent:@{@"type": @"tiCloudStorageCallbackReady",
138
+ @"objectId": @0, @"generation": @0}];
139
+ }
140
+ }];
55
141
  _eventSink = [[TiRtcReactNativeEventSink alloc] initWithRegistry:_registry
56
142
  emitBlock:^(NSDictionary* event) {
57
143
  TiRtcReactNative* strongSelf = weakSelf;
58
144
  if (strongSelf != nil &&
59
145
  !strongSelf->_invalidated.load()) {
60
- [strongSelf emitOnTiRtcEvent:event];
146
+ NSString* type = event[@"type"];
147
+ if ([type hasPrefix:@"tiCloudStorageReplay"] ||
148
+ [type hasPrefix:@"tiCloudStorageExport"]) {
149
+ [strongSelf->_cloudStorageCallbacks deliver:event];
150
+ } else {
151
+ [strongSelf emitOnTiRtcEvent:event];
152
+ }
61
153
  }
62
154
  }];
63
155
  [_registry setEventSink:_eventSink];
@@ -67,9 +159,15 @@ RCT_EXPORT_MODULE(TiRtc)
67
159
  }
68
160
 
69
161
  - (void)invalidate {
70
- if (_invalidated.exchange(true)) return;
162
+ [_lifecycleLock lock];
163
+ if (_invalidated.exchange(true)) {
164
+ [_lifecycleLock unlock];
165
+ return;
166
+ }
167
+ [_cloudStorageCallbacks invalidate];
71
168
  NSArray* objects = [_registry drainObjects];
72
169
  NSArray* files = [_registry drainTransientObjects];
170
+ [_lifecycleLock unlock];
73
171
  dispatch_group_t pending = dispatch_group_create();
74
172
  for (id file in files) TiRtcReactNativeDeleteForInvalidation(file, pending);
75
173
  for (id object in objects) {
@@ -95,55 +193,18 @@ RCT_EXPORT_MODULE(TiRtc)
95
193
  }
96
194
  }
97
195
  dispatch_group_notify(pending, dispatch_get_main_queue(), ^{
98
- for (TiCloudStorageAudioOutput* output in objects) {
99
- if (![output isKindOfClass:[TiCloudStorageAudioOutput class]]) continue;
100
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-audio-detach", [output detach]);
101
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-audio-dispose", [output dispose]);
102
- }
103
- for (TiCloudStorageVideoOutput* output in objects) {
104
- if (![output isKindOfClass:[TiCloudStorageVideoOutput class]]) continue;
105
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-video-detach", [output detach]);
106
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-video-view-detach", [output detachView]);
107
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-video-dispose", [output dispose]);
108
- }
109
- for (TiRtcAudioOutput* output in objects) {
110
- if ([output isKindOfClass:[TiRtcAudioOutput class]])
111
- TiRtcReactNativeLogInvalidationFailure(@"audio_output_dispose", [output dispose]);
112
- }
113
- for (TiRtcVideoOutput* output in objects) {
114
- if ([output isKindOfClass:[TiRtcVideoOutput class]])
115
- TiRtcReactNativeLogInvalidationFailure(@"video_output_dispose", [output dispose]);
116
- }
117
- for (TiRtcAudioInput* input in objects) {
118
- if ([input isKindOfClass:[TiRtcAudioInput class]])
119
- TiRtcReactNativeLogInvalidationFailure(@"audio_input_dispose", [input dispose]);
120
- }
121
- for (TiRtcVideoInput* input in objects) {
122
- if ([input isKindOfClass:[TiRtcVideoInput class]])
123
- TiRtcReactNativeLogInvalidationFailure(@"video_input_dispose", [input dispose]);
124
- }
125
- for (TiCloudStorageReplay* replay in objects) {
126
- if (![replay isKindOfClass:[TiCloudStorageReplay class]]) continue;
127
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-replay-stop", [replay stop]);
128
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-replay-dispose", [replay dispose]);
129
- }
130
- for (TiRtcConn* conn in objects) {
131
- if (![conn isKindOfClass:[TiRtcConn class]]) continue;
132
- TiRtcReactNativeLogInvalidationFailure(@"conn_disconnect", [conn disconnect]);
133
- TiRtcReactNativeLogInvalidationFailure(@"conn_dispose", [conn dispose]);
134
- }
135
- for (TiCloudStorage* cloudStorage in objects) {
136
- if ([cloudStorage isKindOfClass:[TiCloudStorage class]])
137
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-dispose", [cloudStorage dispose]);
138
- }
139
- TiRtcReactNativeLogInvalidationFailure(@"ti-cloud-storage-shutdown", [TiCloudStorage shutdown]);
140
- TiRtcReactNativeLogInvalidationFailure(@"runtime_shutdown", [TiRtc shutdown]);
141
- [TiRtcLogging logWithLevel:TiRtcLogLevelInfo
142
- tag:@"TIRTC_REACT_NATIVE"
143
- message:@"[module_invalidate] native owners released"];
196
+ TiRtcReactNativeReleaseOwners([objects mutableCopy], 10);
144
197
  });
145
198
  }
146
199
 
200
+ - (NSDictionary*)tiCloudStorageTakeCallback {
201
+ return [_cloudStorageCallbacks take];
202
+ }
203
+
204
+ - (NSNumber*)tiCloudStorageAcknowledgeCallback:(double)deliveryId {
205
+ return [_cloudStorageCallbacks acknowledge:deliveryId];
206
+ }
207
+
147
208
  - (void)initialize:(JS::NativeTiRtc::NativeInitOptions&)options
148
209
  resolve:(RCTPromiseResolveBlock)resolve
149
210
  reject:(RCTPromiseRejectBlock)reject {
@@ -165,7 +226,7 @@ RCT_EXPORT_MODULE(TiRtc)
165
226
  return [TiRtc errorToString:(int32_t)code];
166
227
  }
167
228
 
168
- - (void)writeLog:(double)level tag:(NSString*)tag message:(NSString*)message {
229
+ - (NSNumber*)writeLog:(double)level tag:(NSString*)tag message:(NSString*)message {
169
230
  NSInteger nativeLevel = 0;
170
231
  switch ((NSInteger)level) {
171
232
  case 0:
@@ -181,9 +242,9 @@ RCT_EXPORT_MODULE(TiRtc)
181
242
  nativeLevel = 4;
182
243
  break;
183
244
  default:
184
- return;
245
+ return @(TiRtcReactNativeErrorInvalidArgument);
185
246
  }
186
- [TiRtcLogging logWithLevel:(TiRtcLogLevel)nativeLevel tag:tag message:message];
247
+ return @(ti_rtc_transport_log((int32_t)nativeLevel, tag.UTF8String, message.UTF8String));
187
248
  }
188
249
 
189
250
  - (void)uploadLogs:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
@@ -239,6 +300,36 @@ RCT_EXPORT_MODULE(TiRtc)
239
300
  return @(TiRtcReactNativeErrorOK);
240
301
  }
241
302
 
303
+ - (NSDictionary*)snapshotResultWithCode:(int32_t)code file:(id)file {
304
+ if (file == nil) {
305
+ return @{
306
+ @"code" : @(TiRtcReactNativeNormalizeDarwin(code)),
307
+ @"fileId" : (id)kCFNull,
308
+ @"filePath" : (id)kCFNull,
309
+ };
310
+ }
311
+
312
+ [_lifecycleLock lock];
313
+ if (_invalidated.load()) {
314
+ [_lifecycleLock unlock];
315
+ dispatch_group_t pending = dispatch_group_create();
316
+ TiRtcReactNativeDeleteForInvalidation(file, pending);
317
+ return @{
318
+ @"code" : @(TiRtcReactNativeErrorObjectReleased),
319
+ @"fileId" : (id)kCFNull,
320
+ @"filePath" : (id)kCFNull,
321
+ };
322
+ }
323
+ NSInteger fileId = [_registry addTransientObject:file];
324
+ NSDictionary* result = @{
325
+ @"code" : @(TiRtcReactNativeNormalizeDarwin(code)),
326
+ @"fileId" : @(fileId),
327
+ @"filePath" : [(id<TiRtcReactNativeMediaFile>)file path] ?: (id)kCFNull,
328
+ };
329
+ [_lifecycleLock unlock];
330
+ return result;
331
+ }
332
+
242
333
  - (NSNumber*)connCode:(TiRtcConn*)conn block:(int32_t (^)(TiRtcConn* conn))block {
243
334
  return conn == nil ? @(TiRtcReactNativeErrorObjectReleased)
244
335
  : @(TiRtcReactNativeNormalizeDarwin(block(conn)));
@@ -0,0 +1,13 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ NS_ASSUME_NONNULL_BEGIN
4
+
5
+ @interface TiRtcReactNativeCloudStorageCallbacks : NSObject
6
+ - (instancetype)initWithWake:(void (^)(void))wake;
7
+ - (void)deliver:(NSDictionary*)event;
8
+ - (nullable NSDictionary*)take;
9
+ - (NSNumber*)acknowledge:(double)deliveryId;
10
+ - (void)invalidate;
11
+ @end
12
+
13
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,67 @@
1
+ #import "TiRtcReactNativeCloudStorageCallbacks.h"
2
+
3
+ @implementation TiRtcReactNativeCloudStorageCallbacks {
4
+ NSCondition* _condition;
5
+ void (^_wake)(void);
6
+ NSDictionary* _pending;
7
+ uint64_t _sequence;
8
+ BOOL _claimed;
9
+ BOOL _closed;
10
+ }
11
+
12
+ - (instancetype)initWithWake:(void (^)(void))wake {
13
+ if (self = [super init]) {
14
+ _condition = [NSCondition new];
15
+ _wake = [wake copy];
16
+ }
17
+ return self;
18
+ }
19
+
20
+ - (void)deliver:(NSDictionary*)event {
21
+ [_condition lock];
22
+ if (_closed) {
23
+ [_condition unlock];
24
+ return;
25
+ }
26
+ // The public SDK supplies one shared serial background callback queue.
27
+ NSAssert(_pending == nil, @"Cloud Storage callbacks require serial SDK delivery");
28
+ _pending = event;
29
+ _claimed = NO;
30
+ uint64_t deliveryId = ++_sequence;
31
+ [_condition unlock];
32
+ _wake();
33
+ [_condition lock];
34
+ while (!_closed && _pending != nil && _sequence == deliveryId) [_condition wait];
35
+ [_condition unlock];
36
+ }
37
+
38
+ - (NSDictionary*)take {
39
+ [_condition lock];
40
+ NSDictionary* value = nil;
41
+ if (!_closed && !_claimed && _pending != nil) {
42
+ _claimed = YES;
43
+ value = @{@"deliveryId": @(_sequence), @"event": _pending};
44
+ }
45
+ [_condition unlock];
46
+ return value;
47
+ }
48
+
49
+ - (NSNumber*)acknowledge:(double)deliveryId {
50
+ [_condition lock];
51
+ if (!_closed && _claimed && deliveryId == (double)_sequence) {
52
+ _pending = nil;
53
+ _claimed = NO;
54
+ [_condition broadcast];
55
+ }
56
+ [_condition unlock];
57
+ return @0;
58
+ }
59
+
60
+ - (void)invalidate {
61
+ [_condition lock];
62
+ _closed = YES;
63
+ _pending = nil;
64
+ [_condition broadcast];
65
+ [_condition unlock];
66
+ }
67
+ @end
@@ -10,6 +10,8 @@
10
10
  @class TiCloudStorageAudioOutput;
11
11
  @class TiCloudStorageReplay;
12
12
  @class TiCloudStorageVideoOutput;
13
+ @class TiCloudStorageRecordingGap;
14
+ @class TiCloudStorageExportProgress;
13
15
 
14
16
  @interface TiRtcReactNativeEventBinder : NSObject
15
17
 
@@ -23,5 +25,7 @@
23
25
  - (id)wireCloudStorageReplay:(TiCloudStorageReplay*)replay objectId:(NSInteger)objectId;
24
26
  - (id)wireCloudStorageAudioOutput:(TiCloudStorageAudioOutput*)output objectId:(NSInteger)objectId;
25
27
  - (id)wireCloudStorageVideoOutput:(TiCloudStorageVideoOutput*)output objectId:(NSInteger)objectId;
28
+ - (void)cloudStorageExportProgress:(TiCloudStorageExportProgress*)progress objectId:(NSInteger)objectId;
29
+ - (void)cloudStorageExportRecordingGap:(TiCloudStorageRecordingGap*)gap objectId:(NSInteger)objectId;
26
30
 
27
31
  @end
@@ -308,9 +308,20 @@
308
308
  replay.onTimeChanged = ^(int64_t timeMs) { [sink tiCloudStorageReplayTimeChanged:objectId timestampMs:timeMs]; };
309
309
  replay.onCompleted = ^{ [sink tiCloudStorageReplayCompleted:objectId]; };
310
310
  replay.onError = ^(int32_t code) { [sink tiCloudStorageReplayError:objectId code:code]; };
311
+ replay.onRecordingGap = ^(TiCloudStorageRecordingGap* gap) {
312
+ [sink tiCloudStorageReplayRecordingGap:objectId gap:gap];
313
+ };
311
314
  return nil;
312
315
  }
313
316
 
317
+ - (void)cloudStorageExportProgress:(TiCloudStorageExportProgress*)progress objectId:(NSInteger)objectId {
318
+ [_eventSink tiCloudStorageExportProgress:objectId progress:progress];
319
+ }
320
+
321
+ - (void)cloudStorageExportRecordingGap:(TiCloudStorageRecordingGap*)gap objectId:(NSInteger)objectId {
322
+ [_eventSink tiCloudStorageExportRecordingGap:objectId gap:gap];
323
+ }
324
+
314
325
  - (id)wireCloudStorageAudioOutput:(TiCloudStorageAudioOutput*)output objectId:(NSInteger)objectId {
315
326
  TiRtcReactNativeCloudStorageAudioOutputDelegate* delegate =
316
327
  [[TiRtcReactNativeCloudStorageAudioOutputDelegate alloc] initWithObjectId:objectId eventSink:_eventSink];
@@ -4,6 +4,8 @@
4
4
  typedef void (^TiRtcReactNativeEmitBlock)(NSDictionary* event);
5
5
 
6
6
  @class TiRtcReactNativeRegistry;
7
+ @class TiCloudStorageRecordingGap;
8
+ @class TiCloudStorageExportProgress;
7
9
 
8
10
  @interface TiRtcReactNativeEventSink : NSObject
9
11
 
@@ -18,6 +20,9 @@ typedef void (^TiRtcReactNativeEmitBlock)(NSDictionary* event);
18
20
  - (void)tiCloudStorageReplayTimeChanged:(NSInteger)objectId timestampMs:(int64_t)timestampMs;
19
21
  - (void)tiCloudStorageReplayCompleted:(NSInteger)objectId;
20
22
  - (void)tiCloudStorageReplayError:(NSInteger)objectId code:(int32_t)code;
23
+ - (void)tiCloudStorageReplayRecordingGap:(NSInteger)objectId gap:(TiCloudStorageRecordingGap*)gap;
24
+ - (void)tiCloudStorageExportProgress:(NSInteger)objectId progress:(TiCloudStorageExportProgress*)progress;
25
+ - (void)tiCloudStorageExportRecordingGap:(NSInteger)objectId gap:(TiCloudStorageRecordingGap*)gap;
21
26
  - (void)audioOutputStateChanged:(NSInteger)objectId state:(NSString*)state;
22
27
  - (void)audioOutputError:(NSInteger)objectId code:(int32_t)code message:(NSString*)message;
23
28
  - (void)videoOutputStateChanged:(NSInteger)objectId state:(NSString*)state;
@@ -59,6 +59,24 @@
59
59
  [self emit:event];
60
60
  }
61
61
 
62
+ - (void)tiCloudStorageReplayRecordingGap:(NSInteger)objectId gap:(TiCloudStorageRecordingGap*)gap {
63
+ NSMutableDictionary* event = [self base:@"tiCloudStorageReplayRecordingGap" objectId:objectId];
64
+ event[@"recordingGap"] = TiRtcReactNativeCloudStorageRecordingGap(gap);
65
+ [self emit:event];
66
+ }
67
+
68
+ - (void)tiCloudStorageExportProgress:(NSInteger)objectId progress:(TiCloudStorageExportProgress*)progress {
69
+ NSMutableDictionary* event = [self base:@"tiCloudStorageExportProgress" objectId:objectId];
70
+ event[@"exportProgress"] = TiRtcReactNativeCloudStorageExportProgress(progress);
71
+ [self emit:event];
72
+ }
73
+
74
+ - (void)tiCloudStorageExportRecordingGap:(NSInteger)objectId gap:(TiCloudStorageRecordingGap*)gap {
75
+ NSMutableDictionary* event = [self base:@"tiCloudStorageExportRecordingGap" objectId:objectId];
76
+ event[@"recordingGap"] = TiRtcReactNativeCloudStorageRecordingGap(gap);
77
+ [self emit:event];
78
+ }
79
+
62
80
  - (void)audioOutputStateChanged:(NSInteger)objectId state:(NSString*)state {
63
81
  NSMutableDictionary* event = [self base:@"audioOutputStateChanged" objectId:objectId];
64
82
  event[@"state"] = state;
@@ -6,6 +6,9 @@
6
6
  @class TiRtcConnMetricsResult;
7
7
  @class TiRtcVideoOutputDebugSnapshotResult;
8
8
  @class TiRtcVideoOutputMetricsResult;
9
+ @class TiCloudStorageRecordingGap;
10
+ @class TiCloudStorageExportProgress;
11
+ @class TiCloudStorageExportReport;
9
12
 
10
13
  NSDictionary* TiRtcReactNativeCreateResult(NSInteger code, NSInteger objectId, NSInteger generation,
11
14
  NSString* message);
@@ -19,3 +22,6 @@ NSDictionary* TiRtcReactNativeVideoDebugResult(TiRtcVideoOutputDebugSnapshotResu
19
22
  NSDictionary* TiRtcReactNativeReleasedSnapshotResult(void);
20
23
  NSArray<NSNumber*>* TiRtcReactNativeByteArray(NSData* data);
21
24
  NSData* TiRtcReactNativeDataFromArray(NSArray* array);
25
+ NSDictionary* TiRtcReactNativeCloudStorageRecordingGap(TiCloudStorageRecordingGap* gap);
26
+ NSDictionary* TiRtcReactNativeCloudStorageExportProgress(TiCloudStorageExportProgress* progress);
27
+ NSDictionary* TiRtcReactNativeCloudStorageExportReport(TiCloudStorageExportReport* report);
@@ -247,3 +247,50 @@ NSData* TiRtcReactNativeDataFromArray(NSArray* array) {
247
247
  }
248
248
  return data;
249
249
  }
250
+
251
+ static NSDictionary* TiRtcReactNativeCloudStorageRange(TiCloudStorageRecordingRange* range) {
252
+ return @{ @"startTimeMs" : @(range.startTimeMs), @"endTimeMs" : @(range.endTimeMs) };
253
+ }
254
+
255
+ NSDictionary* TiRtcReactNativeCloudStorageRecordingGap(TiCloudStorageRecordingGap* gap) {
256
+ NSMutableArray* tracks = [NSMutableArray arrayWithCapacity:gap.tracks.count];
257
+ for (TiCloudStorageRecordingTrack* track in gap.tracks) {
258
+ [tracks addObject:@{ @"kind" : @(track.kind), @"channelId" : @(track.channelId) }];
259
+ }
260
+ NSMutableArray* reasons = [NSMutableArray arrayWithCapacity:gap.reasons.count];
261
+ for (NSNumber* reason in gap.reasons) [reasons addObject:@(reason.integerValue)];
262
+ return @{ @"range" : TiRtcReactNativeCloudStorageRange(gap.range), @"tracks" : tracks, @"reasons" : reasons };
263
+ }
264
+
265
+ NSDictionary* TiRtcReactNativeCloudStorageExportProgress(TiCloudStorageExportProgress* progress) {
266
+ return @{ @"fraction" : @(progress.fraction), @"coveredDurationMs" : @(progress.coveredDurationMs) };
267
+ }
268
+
269
+ NSDictionary* TiRtcReactNativeCloudStorageExportReport(TiCloudStorageExportReport* report) {
270
+ NSMutableArray* segments = [NSMutableArray arrayWithCapacity:report.segments.count];
271
+ for (TiCloudStorageExportSegment* segment in report.segments) {
272
+ [segments addObject:@{
273
+ @"sourceRange" : TiRtcReactNativeCloudStorageRange(segment.sourceRange),
274
+ @"outputStartMs" : @(segment.outputStartMs),
275
+ @"outputEndMs" : @(segment.outputEndMs),
276
+ }];
277
+ }
278
+ NSMutableArray* gaps = [NSMutableArray arrayWithCapacity:report.gaps.count];
279
+ for (TiCloudStorageRecordingGap* gap in report.gaps) {
280
+ [gaps addObject:TiRtcReactNativeCloudStorageRecordingGap(gap)];
281
+ }
282
+ NSMutableArray* unprocessed = [NSMutableArray arrayWithCapacity:report.unprocessedRanges.count];
283
+ for (TiCloudStorageRecordingRange* range in report.unprocessedRanges) {
284
+ [unprocessed addObject:TiRtcReactNativeCloudStorageRange(range)];
285
+ }
286
+ return @{
287
+ @"requestedRange" : TiRtcReactNativeCloudStorageRange(report.requestedRange),
288
+ @"coveredDurationMs" : @(report.coveredDurationMs),
289
+ @"segments" : segments,
290
+ @"gaps" : gaps,
291
+ @"unprocessedRanges" : unprocessed,
292
+ @"complete" : @(report.complete),
293
+ @"termination" : @(report.termination),
294
+ @"cause" : @(TiRtcReactNativeNormalizeDarwin(report.cause)),
295
+ };
296
+ }
@@ -74,6 +74,7 @@ TiRtcVideoOutputOptions* TiRtcReactNativeVideoOutputOptions(
74
74
  TiRtcAudioInputOptions* TiRtcReactNativeAudioInputOptions(
75
75
  JS::NativeTiRtc::NativeAudioInputOptions& options) {
76
76
  TiRtcAudioInputOptions* nativeOptions = [TiRtcAudioInputOptions new];
77
+ nativeOptions.media = (NSInteger)options.media();
77
78
  NSString* codec = options.codec();
78
79
  if ([codec isEqualToString:@"aac"]) {
79
80
  nativeOptions.codec = TiRtcAudioCodecAac;
@@ -99,12 +100,7 @@ TiRtcAudioInputOptions* TiRtcReactNativeAudioInputOptions(
99
100
  TiRtcVideoInputOptions* TiRtcReactNativeVideoInputOptions(
100
101
  JS::NativeTiRtc::NativeVideoInputOptions& options) {
101
102
  TiRtcVideoInputOptions* nativeOptions = [TiRtcVideoInputOptions new];
102
- NSString* codec = options.codec();
103
- if ([codec isEqualToString:@"mjpeg"]) {
104
- nativeOptions.codec = TiRtcVideoEncoderCodecMjpeg;
105
- } else {
106
- nativeOptions.codec = TiRtcVideoEncoderCodecH264;
107
- }
103
+ nativeOptions.media = (NSInteger)options.media();
108
104
  nativeOptions.width = (uint32_t)MAX(0, options.width());
109
105
  nativeOptions.height = (uint32_t)MAX(0, options.height());
110
106
  NSString* frameRate = options.frameRate();
@@ -11,6 +11,7 @@ export class TiRtcAudioInput {
11
11
  this.queue = Promise.resolve();
12
12
  this.currentState = 'idle';
13
13
  this.options = {
14
+ media: -1,
14
15
  codec: 'g711a',
15
16
  sampleRate: 'rate16k',
16
17
  channels: 'mono',
@@ -43,8 +44,19 @@ export class TiRtcAudioInput {
43
44
  if (!isPlainObject(options)) {
44
45
  return Promise.resolve(TIRTC_ERROR_INVALID_ARGUMENT);
45
46
  }
47
+ const media = options.media === undefined ? -1 : options.media;
48
+ const source = media === -1 ? (options.codec === undefined ? 'default' : 'legacy') : 'media';
49
+ const rawLegacy = options.codec === undefined ? 'omitted' :
50
+ ['g711a', 'aac', 'pcm', 'opus', 'amr'].includes(options.codec) ? options.codec : 'invalid';
51
+ const legacyCodec = options.codec ?? 'g711a';
52
+ if (!Number.isInteger(media) || ![-1, 1, 2, 3, 4, 5].includes(media) ||
53
+ (media === -1 && !['g711a', 'aac', 'pcm', 'opus', 'amr'].includes(legacyCodec))) {
54
+ logRtcOutcome('audio_input_set_options', TIRTC_ERROR_INVALID_ARGUMENT, ` nano_media=${typeof media === 'number' ? media : typeof media} legacy_codec=${rawLegacy} source=${source}`);
55
+ return Promise.resolve(TIRTC_ERROR_INVALID_ARGUMENT);
56
+ }
46
57
  const normalized = {
47
- codec: options.codec ?? 'g711a',
58
+ media,
59
+ codec: media === -1 ? legacyCodec : 'g711a',
48
60
  sampleRate: options.sampleRate ?? 'rate16k',
49
61
  channels: options.channels ?? 'mono',
50
62
  aecMode: options.aecMode ?? 'disabled',
@@ -57,6 +69,7 @@ export class TiRtcAudioInput {
57
69
  return identity;
58
70
  }
59
71
  const code = await NativeTiRtc.audioInputSetOptions(identity.objectId, normalized);
72
+ logRtcOutcome('audio_input_set_options', code, ` nano_media=${media} legacy_codec=${rawLegacy} source=${source} sample_rate=${['rate8k', 'rate16k'].includes(normalized.sampleRate) ? normalized.sampleRate : 'invalid'} channels=${normalized.channels === 'mono' ? 'mono' : 'invalid'}`);
60
73
  if (code === TIRTC_ERROR_OK) {
61
74
  this.options = normalized;
62
75
  }
@@ -80,13 +93,19 @@ export class TiRtcAudioInput {
80
93
  }));
81
94
  }
82
95
  start() {
83
- return this.logged('audio_input_start', this.enqueue(async () => {
96
+ return this.enqueue(async () => {
84
97
  const identity = this.ensureIdentity();
85
98
  if (typeof identity === 'number') {
99
+ logRtcOutcome('audio_input_start', identity);
86
100
  return identity;
87
101
  }
88
- return NativeTiRtc.audioInputStart(identity.objectId);
89
- }));
102
+ const wasRunning = this.state === 'running';
103
+ const code = await NativeTiRtc.audioInputStart(identity.objectId);
104
+ if (code !== TIRTC_ERROR_OK || !wasRunning) {
105
+ logRtcOutcome('audio_input_start', code, ` object_id=${identity.objectId} nano_media=${this.options.media} legacy_codec=${this.options.codec} sample_rate=${this.options.sampleRate} channels=${this.options.channels}`);
106
+ }
107
+ return code;
108
+ });
90
109
  }
91
110
  stop() {
92
111
  return this.logged('audio_input_stop', this.enqueue(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"audio_input.js","sourceRoot":"","sources":["../../src/audio_input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio_input.js","sourceRoot":"","sources":["../../src/audio_input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export const buildIdentity = {"releaseVersion":"2.5.0","buildTimeUtc":"2026-09-20T11:29:24Z","sourceRevision":"6636d52d3b8db77d30fd4fd4012f3fa567e8400e","sourceDirty":0};
@@ -5,6 +5,7 @@ import { NativeTiRtc } from './native';
5
5
  import { logRtcOutcome, logRtcState } from './logging_internal';
6
6
  import { toNativeBytes } from './errors';
7
7
  import { recordingFailure, startRecording, validateStartRecordingOptions, } from './recording';
8
+ import { createRawDumpFromNative, normalizeRawDumpIds, } from './raw_dump';
8
9
  export class TiRtcConn {
9
10
  constructor() {
10
11
  this.identity = null;
@@ -32,6 +33,24 @@ export class TiRtcConn {
32
33
  const identity = this.ensureIdentity();
33
34
  return typeof identity === 'number' ? recordingFailure(identity) : startRecording(identity.objectId, options);
34
35
  }
36
+ async startRawDump(options) {
37
+ if (options === null || typeof options !== 'object')
38
+ return recordingFailure(TIRTC_ERROR_INVALID_ARGUMENT);
39
+ const audio = normalizeRawDumpIds(options.audioStreamIds ?? [], 15);
40
+ const video = normalizeRawDumpIds(options.videoStreamIds ?? [], 15);
41
+ const uplinkAudio = normalizeRawDumpIds(options.uplinkAudioStreamIds ?? [], 15);
42
+ if (audio === null || video === null || uplinkAudio === null ||
43
+ (audio.length === 0 && video.length === 0 && uplinkAudio.length === 0)) {
44
+ return recordingFailure(TIRTC_ERROR_INVALID_ARGUMENT);
45
+ }
46
+ const identity = this.ensureIdentity();
47
+ if (typeof identity === 'number')
48
+ return recordingFailure(identity);
49
+ const result = await NativeTiRtc.connStartRawDump(identity.objectId, audio, video, uplinkAudio);
50
+ return result.code === 0 && result.dumpId !== null
51
+ ? { success: true, code: null, message: null, data: createRawDumpFromNative(result.dumpId) }
52
+ : recordingFailure(result.code);
53
+ }
35
54
  get state() {
36
55
  if (this.identity !== null && !this.disposed) {
37
56
  const result = NativeTiRtc.connGetState(this.identity.objectId);