tirtc-react-native 2.3.0 → 2.4.0-alpha.3
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.
- package/README.md +23 -7
- package/TiRtcReactNative.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/main/AndroidManifest.xml +2 -1
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcModule.kt +585 -28
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeCleanup.kt +115 -0
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeEventBinder.kt +35 -8
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeEventSink.kt +20 -0
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeMaps.kt +62 -0
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeModuleSupport.kt +6 -6
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeRegistry.kt +27 -0
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcReactNativeStoreSupport.kt +64 -0
- package/android/src/main/java/com/tange/ai/tirtc/reactnative/TiRtcVideoOutputViewManager.kt +17 -2
- package/ios/TiRtcReactNative+Conn.mm +173 -2
- package/ios/TiRtcReactNative+Input.mm +18 -4
- package/ios/TiRtcReactNative+Output.mm +41 -4
- package/ios/TiRtcReactNative+Private.h +4 -0
- package/ios/TiRtcReactNative+Store.mm +496 -0
- package/ios/TiRtcReactNative.h +2 -1
- package/ios/TiRtcReactNative.mm +109 -1
- package/ios/TiRtcReactNativeEventBinder.h +8 -0
- package/ios/TiRtcReactNativeEventBinder.mm +104 -0
- package/ios/TiRtcReactNativeEventSink.h +4 -0
- package/ios/TiRtcReactNativeEventSink.mm +20 -0
- package/ios/TiRtcReactNativeRegistry.h +5 -0
- package/ios/TiRtcReactNativeRegistry.mm +43 -0
- package/ios/TiRtcVideoOutputView.mm +11 -0
- package/lib/module/audio_input.js +33 -17
- package/lib/module/audio_input.js.map +1 -1
- package/lib/module/audio_output.js +27 -10
- package/lib/module/audio_output.js.map +1 -1
- package/lib/module/conn.js +31 -7
- package/lib/module/conn.js.map +1 -1
- package/lib/module/errors.js +4 -3
- package/lib/module/errors.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/logging.js +9 -1
- package/lib/module/logging.js.map +1 -1
- package/lib/module/logging_internal.js +27 -0
- package/lib/module/logging_internal.js.map +1 -0
- package/lib/module/recording.js +210 -0
- package/lib/module/recording.js.map +1 -0
- package/lib/module/runtime.js +13 -5
- package/lib/module/runtime.js.map +1 -1
- package/lib/module/specs/NativeTiRtc.js.map +1 -1
- package/lib/module/store.js +698 -0
- package/lib/module/store.js.map +1 -0
- package/lib/module/video_input.js +40 -22
- package/lib/module/video_input.js.map +1 -1
- package/lib/module/video_output.js +51 -10
- package/lib/module/video_output.js.map +1 -1
- package/lib/typescript/audio_input.d.ts +1 -0
- package/lib/typescript/conn.d.ts +2 -0
- package/lib/typescript/errors.d.ts +3 -2
- package/lib/typescript/index.d.ts +4 -0
- package/lib/typescript/logging_internal.d.ts +2 -0
- package/lib/typescript/recording.d.ts +53 -0
- package/lib/typescript/runtime.d.ts +2 -0
- package/lib/typescript/specs/NativeTiRtc.d.ts +88 -0
- package/lib/typescript/store.d.ts +202 -0
- package/lib/typescript/video_input.d.ts +1 -0
- package/lib/typescript/video_output.d.ts +3 -0
- package/package.json +1 -1
- package/src/audio_input.ts +85 -59
- package/src/audio_output.ts +30 -17
- package/src/conn.ts +46 -28
- package/src/errors.ts +4 -3
- package/src/index.ts +54 -0
- package/src/logging.ts +7 -1
- package/src/logging_internal.ts +23 -0
- package/src/recording.ts +271 -0
- package/src/runtime.ts +14 -5
- package/src/specs/NativeTiRtc.ts +123 -0
- package/src/store.ts +760 -0
- package/src/video_input.ts +97 -62
- package/src/video_output.ts +54 -16
|
@@ -116,6 +116,82 @@
|
|
|
116
116
|
eventSink:(TiRtcReactNativeEventSink*)eventSink;
|
|
117
117
|
@end
|
|
118
118
|
|
|
119
|
+
@interface TiRtcReactNativeStoreAudioOutputDelegate : NSObject <TiStoreAudioOutputDelegate>
|
|
120
|
+
- (instancetype)initWithObjectId:(NSInteger)objectId
|
|
121
|
+
eventSink:(TiRtcReactNativeEventSink*)eventSink;
|
|
122
|
+
@end
|
|
123
|
+
|
|
124
|
+
@implementation TiRtcReactNativeStoreAudioOutputDelegate {
|
|
125
|
+
NSInteger _objectId;
|
|
126
|
+
TiRtcReactNativeEventSink* _eventSink;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
- (instancetype)initWithObjectId:(NSInteger)objectId
|
|
130
|
+
eventSink:(TiRtcReactNativeEventSink*)eventSink {
|
|
131
|
+
if (self = [super init]) {
|
|
132
|
+
_objectId = objectId;
|
|
133
|
+
_eventSink = eventSink;
|
|
134
|
+
}
|
|
135
|
+
return self;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
- (void)audioOutput:(TiStoreAudioOutput*)output didChangeState:(TiStoreAudioOutputState)state {
|
|
139
|
+
NSString* value;
|
|
140
|
+
switch (state) {
|
|
141
|
+
case TiStoreAudioOutputStateIdle: value = @"idle"; break;
|
|
142
|
+
case TiStoreAudioOutputStateBuffering: value = @"buffering"; break;
|
|
143
|
+
case TiStoreAudioOutputStatePlaying: value = @"playing"; break;
|
|
144
|
+
case TiStoreAudioOutputStatePaused: value = @"paused"; break;
|
|
145
|
+
case TiStoreAudioOutputStateCompleted: value = @"completed"; break;
|
|
146
|
+
case TiStoreAudioOutputStateFailed: default: value = @"failed"; break;
|
|
147
|
+
}
|
|
148
|
+
[_eventSink audioOutputStateChanged:_objectId state:value];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
- (void)audioOutput:(TiStoreAudioOutput*)output didFailWithCode:(int32_t)code {
|
|
152
|
+
[_eventSink audioOutputError:_objectId code:code message:nil];
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@end
|
|
156
|
+
|
|
157
|
+
@interface TiRtcReactNativeStoreVideoOutputDelegate : NSObject <TiStoreVideoOutputDelegate>
|
|
158
|
+
- (instancetype)initWithObjectId:(NSInteger)objectId
|
|
159
|
+
eventSink:(TiRtcReactNativeEventSink*)eventSink;
|
|
160
|
+
@end
|
|
161
|
+
|
|
162
|
+
@implementation TiRtcReactNativeStoreVideoOutputDelegate {
|
|
163
|
+
NSInteger _objectId;
|
|
164
|
+
TiRtcReactNativeEventSink* _eventSink;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
- (instancetype)initWithObjectId:(NSInteger)objectId
|
|
168
|
+
eventSink:(TiRtcReactNativeEventSink*)eventSink {
|
|
169
|
+
if (self = [super init]) {
|
|
170
|
+
_objectId = objectId;
|
|
171
|
+
_eventSink = eventSink;
|
|
172
|
+
}
|
|
173
|
+
return self;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
- (void)videoOutput:(TiStoreVideoOutput*)output didChangeState:(TiStoreVideoOutputState)state {
|
|
177
|
+
NSString* value;
|
|
178
|
+
switch (state) {
|
|
179
|
+
case TiStoreVideoOutputStateIdle: value = @"idle"; break;
|
|
180
|
+
case TiStoreVideoOutputStateBuffering: value = @"buffering"; break;
|
|
181
|
+
case TiStoreVideoOutputStateRendering: value = @"rendering"; break;
|
|
182
|
+
case TiStoreVideoOutputStatePaused: value = @"paused"; break;
|
|
183
|
+
case TiStoreVideoOutputStateCompleted: value = @"completed"; break;
|
|
184
|
+
case TiStoreVideoOutputStateFailed: default: value = @"failed"; break;
|
|
185
|
+
}
|
|
186
|
+
[_eventSink videoOutputStateChanged:_objectId state:value];
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
- (void)videoOutput:(TiStoreVideoOutput*)output didFailWithCode:(int32_t)code {
|
|
190
|
+
[_eventSink videoOutputError:_objectId code:code message:nil];
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
@end
|
|
194
|
+
|
|
119
195
|
@implementation TiRtcReactNativeAudioInputDelegate {
|
|
120
196
|
NSInteger _objectId;
|
|
121
197
|
TiRtcReactNativeEventSink* _eventSink;
|
|
@@ -223,4 +299,32 @@
|
|
|
223
299
|
return delegate;
|
|
224
300
|
}
|
|
225
301
|
|
|
302
|
+
- (id)wireStore:(TiStore*)store objectId:(NSInteger)objectId {
|
|
303
|
+
TiRtcReactNativeEventSink* sink = _eventSink;
|
|
304
|
+
store.onTokenExpired = ^{ [sink storeTokenExpired:objectId]; };
|
|
305
|
+
return nil;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
- (id)wireStoreReplay:(TiStoreReplay*)replay objectId:(NSInteger)objectId {
|
|
309
|
+
TiRtcReactNativeEventSink* sink = _eventSink;
|
|
310
|
+
replay.onTimeChanged = ^(int64_t timeMs) { [sink storeReplayTimeChanged:objectId timestampMs:timeMs]; };
|
|
311
|
+
replay.onCompleted = ^{ [sink storeReplayCompleted:objectId]; };
|
|
312
|
+
replay.onError = ^(int32_t code) { [sink storeReplayError:objectId code:code]; };
|
|
313
|
+
return nil;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
- (id)wireStoreAudioOutput:(TiStoreAudioOutput*)output objectId:(NSInteger)objectId {
|
|
317
|
+
TiRtcReactNativeStoreAudioOutputDelegate* delegate =
|
|
318
|
+
[[TiRtcReactNativeStoreAudioOutputDelegate alloc] initWithObjectId:objectId eventSink:_eventSink];
|
|
319
|
+
output.delegate = delegate;
|
|
320
|
+
return delegate;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
- (id)wireStoreVideoOutput:(TiStoreVideoOutput*)output objectId:(NSInteger)objectId {
|
|
324
|
+
TiRtcReactNativeStoreVideoOutputDelegate* delegate =
|
|
325
|
+
[[TiRtcReactNativeStoreVideoOutputDelegate alloc] initWithObjectId:objectId eventSink:_eventSink];
|
|
326
|
+
output.delegate = delegate;
|
|
327
|
+
return delegate;
|
|
328
|
+
}
|
|
329
|
+
|
|
226
330
|
@end
|
|
@@ -15,6 +15,10 @@ typedef void (^TiRtcReactNativeEmitBlock)(NSDictionary* event);
|
|
|
15
15
|
streamId:(uint8_t)streamId
|
|
16
16
|
timestampMs:(uint32_t)timestampMs
|
|
17
17
|
data:(NSData*)data;
|
|
18
|
+
- (void)storeTokenExpired:(NSInteger)objectId;
|
|
19
|
+
- (void)storeReplayTimeChanged:(NSInteger)objectId timestampMs:(int64_t)timestampMs;
|
|
20
|
+
- (void)storeReplayCompleted:(NSInteger)objectId;
|
|
21
|
+
- (void)storeReplayError:(NSInteger)objectId code:(int32_t)code;
|
|
18
22
|
- (void)audioOutputStateChanged:(NSInteger)objectId state:(NSString*)state;
|
|
19
23
|
- (void)audioOutputError:(NSInteger)objectId code:(int32_t)code message:(NSString*)message;
|
|
20
24
|
- (void)videoOutputStateChanged:(NSInteger)objectId state:(NSString*)state;
|
|
@@ -43,6 +43,26 @@
|
|
|
43
43
|
[self emit:event];
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
- (void)storeTokenExpired:(NSInteger)objectId {
|
|
47
|
+
[self emit:[self base:@"storeTokenExpired" objectId:objectId]];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
- (void)storeReplayTimeChanged:(NSInteger)objectId timestampMs:(int64_t)timestampMs {
|
|
51
|
+
NSMutableDictionary* event = [self base:@"storeReplayTimeChanged" objectId:objectId];
|
|
52
|
+
event[@"timestampMs"] = @(timestampMs);
|
|
53
|
+
[self emit:event];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
- (void)storeReplayCompleted:(NSInteger)objectId {
|
|
57
|
+
[self emit:[self base:@"storeReplayCompleted" objectId:objectId]];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
- (void)storeReplayError:(NSInteger)objectId code:(int32_t)code {
|
|
61
|
+
NSMutableDictionary* event = [self base:@"storeReplayError" objectId:objectId];
|
|
62
|
+
event[@"code"] = @(TiRtcReactNativeNormalizeDarwin(code));
|
|
63
|
+
[self emit:event];
|
|
64
|
+
}
|
|
65
|
+
|
|
46
66
|
- (void)audioOutputStateChanged:(NSInteger)objectId state:(NSString*)state {
|
|
47
67
|
NSMutableDictionary* event = [self base:@"audioOutputStateChanged" objectId:objectId];
|
|
48
68
|
event[@"state"] = state;
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
- (NSInteger)addObject:(id)object;
|
|
10
10
|
- (NSInteger)addObject:(id)object generation:(NSInteger*)generation;
|
|
11
|
+
- (NSInteger)addTransientObject:(id)object;
|
|
12
|
+
- (id)transientObjectForId:(NSInteger)objectId;
|
|
13
|
+
- (void)releaseTransientObject:(NSInteger)objectId;
|
|
11
14
|
- (void)setEventSink:(TiRtcReactNativeEventSink*)eventSink;
|
|
12
15
|
- (void)setDelegate:(id)delegate forObjectId:(NSInteger)objectId;
|
|
13
16
|
- (id)objectForId:(NSInteger)objectId;
|
|
@@ -15,6 +18,8 @@
|
|
|
15
18
|
- (void)reportVideoOutputError:(NSInteger)objectId code:(int32_t)code message:(NSString*)message;
|
|
16
19
|
- (void)reportVideoInputError:(NSInteger)objectId code:(int32_t)code message:(NSString*)message;
|
|
17
20
|
- (void)releaseObject:(NSInteger)objectId;
|
|
21
|
+
- (NSArray*)drainObjects;
|
|
22
|
+
- (NSArray*)drainTransientObjects;
|
|
18
23
|
- (BOOL)hasLiveObjects;
|
|
19
24
|
|
|
20
25
|
@end
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
@implementation TiRtcReactNativeRegistry {
|
|
15
15
|
NSLock* _lock;
|
|
16
16
|
NSMutableDictionary<NSNumber*, TiRtcReactNativeRegistryEntry*>* _entries;
|
|
17
|
+
NSMutableDictionary<NSNumber*, id>* _transientEntries;
|
|
17
18
|
__weak TiRtcReactNativeEventSink* _eventSink;
|
|
18
19
|
NSInteger _nextId;
|
|
19
20
|
NSInteger _nextGeneration;
|
|
@@ -32,12 +33,34 @@
|
|
|
32
33
|
if (self = [super init]) {
|
|
33
34
|
_lock = [NSLock new];
|
|
34
35
|
_entries = [NSMutableDictionary new];
|
|
36
|
+
_transientEntries = [NSMutableDictionary new];
|
|
35
37
|
_nextId = 1;
|
|
36
38
|
_nextGeneration = 1;
|
|
37
39
|
}
|
|
38
40
|
return self;
|
|
39
41
|
}
|
|
40
42
|
|
|
43
|
+
- (NSInteger)addTransientObject:(id)object {
|
|
44
|
+
[_lock lock];
|
|
45
|
+
NSInteger objectId = _nextId++;
|
|
46
|
+
_transientEntries[@(objectId)] = object;
|
|
47
|
+
[_lock unlock];
|
|
48
|
+
return objectId;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
- (id)transientObjectForId:(NSInteger)objectId {
|
|
52
|
+
[_lock lock];
|
|
53
|
+
id object = _transientEntries[@(objectId)];
|
|
54
|
+
[_lock unlock];
|
|
55
|
+
return object;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
- (void)releaseTransientObject:(NSInteger)objectId {
|
|
59
|
+
[_lock lock];
|
|
60
|
+
[_transientEntries removeObjectForKey:@(objectId)];
|
|
61
|
+
[_lock unlock];
|
|
62
|
+
}
|
|
63
|
+
|
|
41
64
|
- (NSInteger)addObject:(id)object {
|
|
42
65
|
return [self addObject:object generation:nil];
|
|
43
66
|
}
|
|
@@ -109,6 +132,26 @@
|
|
|
109
132
|
[_lock unlock];
|
|
110
133
|
}
|
|
111
134
|
|
|
135
|
+
- (NSArray*)drainObjects {
|
|
136
|
+
[_lock lock];
|
|
137
|
+
NSMutableArray* objects = [NSMutableArray arrayWithCapacity:_entries.count];
|
|
138
|
+
for (TiRtcReactNativeRegistryEntry* entry in _entries.allValues) {
|
|
139
|
+
if (entry.object != nil) [objects addObject:entry.object];
|
|
140
|
+
}
|
|
141
|
+
[_entries removeAllObjects];
|
|
142
|
+
_eventSink = nil;
|
|
143
|
+
[_lock unlock];
|
|
144
|
+
return objects;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
- (NSArray*)drainTransientObjects {
|
|
148
|
+
[_lock lock];
|
|
149
|
+
NSArray* objects = [_transientEntries.allValues copy];
|
|
150
|
+
[_transientEntries removeAllObjects];
|
|
151
|
+
[_lock unlock];
|
|
152
|
+
return objects;
|
|
153
|
+
}
|
|
154
|
+
|
|
112
155
|
- (BOOL)hasLiveObjects {
|
|
113
156
|
[_lock lock];
|
|
114
157
|
BOOL hasObjects = _entries.count > 0;
|
|
@@ -115,6 +115,15 @@ static AVLayerVideoGravity TiRtcVideoOutputGravityForResizeMode(
|
|
|
115
115
|
_attachedObjectId = _nativeObjectId;
|
|
116
116
|
_attachedGeneration = _generation;
|
|
117
117
|
[self applyVideoLayerGeometry];
|
|
118
|
+
} else if ([object isKindOfClass:[TiStoreVideoOutput class]]) {
|
|
119
|
+
int32_t code = [(TiStoreVideoOutput*)object attachView:self];
|
|
120
|
+
if (code != 0) {
|
|
121
|
+
[registry reportVideoOutputError:_nativeObjectId code:code message:@"view attach failed"];
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
_attachedObjectId = _nativeObjectId;
|
|
125
|
+
_attachedGeneration = _generation;
|
|
126
|
+
[self applyVideoLayerGeometry];
|
|
118
127
|
}
|
|
119
128
|
}
|
|
120
129
|
|
|
@@ -125,6 +134,8 @@ static AVLayerVideoGravity TiRtcVideoOutputGravityForResizeMode(
|
|
|
125
134
|
id object = [[TiRtcReactNativeRegistry sharedRegistry] objectForId:objectId];
|
|
126
135
|
if ([object isKindOfClass:[TiRtcVideoOutput class]]) {
|
|
127
136
|
__unused int32_t code = [(TiRtcVideoOutput*)object detachView];
|
|
137
|
+
} else if ([object isKindOfClass:[TiStoreVideoOutput class]]) {
|
|
138
|
+
__unused int32_t code = [(TiStoreVideoOutput*)object detachView];
|
|
128
139
|
}
|
|
129
140
|
}
|
|
130
141
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { isPlainObject, isUInt8, normalizeCreateResult,
|
|
1
|
+
import { isPlainObject, isUInt8, normalizeCreateResult, returnNotInitializedIfDisposed, TIRTC_ERROR_INVALID_ARGUMENT, TIRTC_ERROR_OK, TIRTC_ERROR_NOT_INITIALIZED, } from './errors';
|
|
2
2
|
import { registerNativeEventHandler, unregisterNativeEventHandler } from './events';
|
|
3
3
|
import { clearNativeIdentity, readNativeIdentity, setNativeIdentity } from './native_object_id';
|
|
4
4
|
import { NativeTiRtc } from './native';
|
|
5
|
+
import { logRtcOutcome, logRtcState } from './logging_internal';
|
|
5
6
|
export class TiRtcAudioInput {
|
|
6
7
|
constructor() {
|
|
7
8
|
this.identity = null;
|
|
@@ -22,8 +23,12 @@ export class TiRtcAudioInput {
|
|
|
22
23
|
const result = normalizeCreateResult(NativeTiRtc.createAudioInput());
|
|
23
24
|
this.createCode = result.code;
|
|
24
25
|
if (result.code === TIRTC_ERROR_OK) {
|
|
25
|
-
this.adoptIdentity({
|
|
26
|
+
this.adoptIdentity({
|
|
27
|
+
objectId: result.objectId,
|
|
28
|
+
generation: result.generation,
|
|
29
|
+
});
|
|
26
30
|
}
|
|
31
|
+
logRtcOutcome('audio_input_create', result.code);
|
|
27
32
|
}
|
|
28
33
|
get state() {
|
|
29
34
|
if (this.identity !== null && !this.disposed) {
|
|
@@ -66,48 +71,48 @@ export class TiRtcAudioInput {
|
|
|
66
71
|
if (connIdentity === null) {
|
|
67
72
|
return Promise.resolve(TIRTC_ERROR_INVALID_ARGUMENT);
|
|
68
73
|
}
|
|
69
|
-
return this.enqueue(async () => {
|
|
74
|
+
return this.logged('audio_input_attach', this.enqueue(async () => {
|
|
70
75
|
const identity = this.ensureIdentity();
|
|
71
76
|
if (typeof identity === 'number') {
|
|
72
77
|
return identity;
|
|
73
78
|
}
|
|
74
79
|
return NativeTiRtc.audioInputAttach(identity.objectId, connIdentity.objectId, streamId);
|
|
75
|
-
});
|
|
80
|
+
}));
|
|
76
81
|
}
|
|
77
82
|
start() {
|
|
78
|
-
return this.enqueue(async () => {
|
|
83
|
+
return this.logged('audio_input_start', this.enqueue(async () => {
|
|
79
84
|
const identity = this.ensureIdentity();
|
|
80
85
|
if (typeof identity === 'number') {
|
|
81
86
|
return identity;
|
|
82
87
|
}
|
|
83
88
|
return NativeTiRtc.audioInputStart(identity.objectId);
|
|
84
|
-
});
|
|
89
|
+
}));
|
|
85
90
|
}
|
|
86
91
|
stop() {
|
|
87
|
-
return this.enqueue(async () => {
|
|
92
|
+
return this.logged('audio_input_stop', this.enqueue(async () => {
|
|
88
93
|
if (this.identity === null) {
|
|
89
94
|
return TIRTC_ERROR_OK;
|
|
90
95
|
}
|
|
91
96
|
return NativeTiRtc.audioInputStop(this.identity.objectId);
|
|
92
|
-
});
|
|
97
|
+
}));
|
|
93
98
|
}
|
|
94
99
|
detach(connection) {
|
|
95
100
|
const connIdentity = readNativeIdentity(connection);
|
|
96
101
|
if (connIdentity === null) {
|
|
97
102
|
return Promise.resolve(TIRTC_ERROR_INVALID_ARGUMENT);
|
|
98
103
|
}
|
|
99
|
-
return this.enqueue(async () => {
|
|
104
|
+
return this.logged('audio_input_detach', this.enqueue(async () => {
|
|
100
105
|
if (this.identity === null) {
|
|
101
106
|
return TIRTC_ERROR_OK;
|
|
102
107
|
}
|
|
103
108
|
return NativeTiRtc.audioInputDetach(this.identity.objectId, connIdentity.objectId);
|
|
104
|
-
});
|
|
109
|
+
}));
|
|
105
110
|
}
|
|
106
111
|
dispose() {
|
|
107
112
|
if (this.disposed) {
|
|
108
113
|
return Promise.resolve(TIRTC_ERROR_OK);
|
|
109
114
|
}
|
|
110
|
-
return this.enqueue(async () => {
|
|
115
|
+
return this.logged('audio_input_dispose', this.enqueue(async () => {
|
|
111
116
|
if (this.identity === null) {
|
|
112
117
|
this.disposed = true;
|
|
113
118
|
this.clearCallbacks();
|
|
@@ -125,24 +130,30 @@ export class TiRtcAudioInput {
|
|
|
125
130
|
this.currentState = 'stopped';
|
|
126
131
|
}
|
|
127
132
|
return code;
|
|
128
|
-
}, true);
|
|
133
|
+
}, true));
|
|
129
134
|
}
|
|
130
135
|
enqueue(operation, allowDisposed = false) {
|
|
131
|
-
const released =
|
|
136
|
+
const released = returnNotInitializedIfDisposed(this.disposed);
|
|
132
137
|
if (released !== null && !allowDisposed) {
|
|
133
138
|
return Promise.resolve(released);
|
|
134
139
|
}
|
|
135
140
|
const next = this.queue.then(async () => {
|
|
136
141
|
if (this.disposed && !allowDisposed) {
|
|
137
|
-
return
|
|
142
|
+
return TIRTC_ERROR_NOT_INITIALIZED;
|
|
138
143
|
}
|
|
139
144
|
return operation();
|
|
140
145
|
});
|
|
141
146
|
this.queue = next.catch(() => undefined);
|
|
142
147
|
return next;
|
|
143
148
|
}
|
|
149
|
+
logged(operation, result) {
|
|
150
|
+
return result.then((code) => {
|
|
151
|
+
logRtcOutcome(operation, code);
|
|
152
|
+
return code;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
144
155
|
ensureIdentity() {
|
|
145
|
-
const released =
|
|
156
|
+
const released = returnNotInitializedIfDisposed(this.disposed);
|
|
146
157
|
if (released !== null) {
|
|
147
158
|
return released;
|
|
148
159
|
}
|
|
@@ -166,11 +177,16 @@ export class TiRtcAudioInput {
|
|
|
166
177
|
return;
|
|
167
178
|
}
|
|
168
179
|
if (event.type === 'audioInputStateChanged' && event.state !== undefined) {
|
|
169
|
-
|
|
180
|
+
const nextState = event.state;
|
|
181
|
+
if (this.currentState !== nextState)
|
|
182
|
+
logRtcState('audio_input_state', nextState);
|
|
183
|
+
this.currentState = nextState;
|
|
170
184
|
this.onStateChanged?.(this.currentState);
|
|
171
185
|
}
|
|
172
186
|
else if (event.type === 'audioInputError') {
|
|
173
|
-
|
|
187
|
+
const code = event.code ?? TIRTC_ERROR_INVALID_ARGUMENT;
|
|
188
|
+
logRtcOutcome('audio_input', code);
|
|
189
|
+
this.onError?.(code, event.message ?? null);
|
|
174
190
|
}
|
|
175
191
|
}
|
|
176
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio_input.js","sourceRoot":"","sources":["../../src/audio_input.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,OAAO,EACP,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"audio_input.js","sourceRoot":"","sources":["../../src/audio_input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { isFiniteSafeInteger, isPositiveInt32, isUInt8, normalizeCreateResult,
|
|
1
|
+
import { isFiniteSafeInteger, isPositiveInt32, isUInt8, normalizeCreateResult, returnNotInitializedIfDisposed, TIRTC_ERROR_INVALID_ARGUMENT, TIRTC_ERROR_OK, } from './errors';
|
|
2
2
|
import { registerNativeEventHandler, unregisterNativeEventHandler } from './events';
|
|
3
3
|
import { readNativeIdentity, clearNativeIdentity, setNativeIdentity } from './native_object_id';
|
|
4
4
|
import { NativeTiRtc } from './native';
|
|
5
|
+
import { logRtcOutcome, logRtcState } from './logging_internal';
|
|
5
6
|
export class TiRtcAudioOutput {
|
|
6
7
|
constructor() {
|
|
7
8
|
this.identity = null;
|
|
@@ -19,8 +20,12 @@ export class TiRtcAudioOutput {
|
|
|
19
20
|
const result = normalizeCreateResult(NativeTiRtc.createAudioOutput());
|
|
20
21
|
this.createCode = result.code;
|
|
21
22
|
if (result.code === TIRTC_ERROR_OK) {
|
|
22
|
-
this.adoptIdentity({
|
|
23
|
+
this.adoptIdentity({
|
|
24
|
+
objectId: result.objectId,
|
|
25
|
+
generation: result.generation,
|
|
26
|
+
});
|
|
23
27
|
}
|
|
28
|
+
logRtcOutcome('audio_output_create', result.code);
|
|
24
29
|
}
|
|
25
30
|
get state() {
|
|
26
31
|
if (this.identity !== null && !this.disposed) {
|
|
@@ -38,8 +43,7 @@ export class TiRtcAudioOutput {
|
|
|
38
43
|
bufferStrategy: options.bufferStrategy ?? 'automatic',
|
|
39
44
|
maxBufferWatermarkMs: options.maxBufferWatermarkMs,
|
|
40
45
|
};
|
|
41
|
-
if (normalized.maxBufferWatermarkMs !== undefined
|
|
42
|
-
&& !isPositiveInt32(normalized.maxBufferWatermarkMs)) {
|
|
46
|
+
if (normalized.maxBufferWatermarkMs !== undefined && !isPositiveInt32(normalized.maxBufferWatermarkMs)) {
|
|
43
47
|
return TIRTC_ERROR_INVALID_ARGUMENT;
|
|
44
48
|
}
|
|
45
49
|
const identity = this.ensureIdentity();
|
|
@@ -67,14 +71,20 @@ export class TiRtcAudioOutput {
|
|
|
67
71
|
if (typeof identity === 'number') {
|
|
68
72
|
return identity;
|
|
69
73
|
}
|
|
70
|
-
|
|
74
|
+
const code = NativeTiRtc.audioOutputAttach(identity.objectId, connIdentity.objectId, streamId);
|
|
75
|
+
logRtcOutcome('audio_output_attach', code);
|
|
76
|
+
return code;
|
|
71
77
|
}
|
|
72
78
|
detach() {
|
|
73
|
-
const released =
|
|
79
|
+
const released = returnNotInitializedIfDisposed(this.disposed);
|
|
74
80
|
if (released !== null) {
|
|
75
81
|
return released;
|
|
76
82
|
}
|
|
77
|
-
|
|
83
|
+
const code = this.identity === null ? TIRTC_ERROR_OK : NativeTiRtc.audioOutputDetach(this.identity.objectId);
|
|
84
|
+
if (code === TIRTC_ERROR_OK)
|
|
85
|
+
this.currentState = 'idle';
|
|
86
|
+
logRtcOutcome('audio_output_detach', code);
|
|
87
|
+
return code;
|
|
78
88
|
}
|
|
79
89
|
setVolume(volumePercent) {
|
|
80
90
|
if (!isFiniteSafeInteger(volumePercent) || volumePercent < 0 || volumePercent > 100) {
|
|
@@ -127,10 +137,11 @@ export class TiRtcAudioOutput {
|
|
|
127
137
|
this.clearCallbacks();
|
|
128
138
|
this.currentState = 'idle';
|
|
129
139
|
}
|
|
140
|
+
logRtcOutcome('audio_output_dispose', code);
|
|
130
141
|
return code;
|
|
131
142
|
}
|
|
132
143
|
ensureIdentity() {
|
|
133
|
-
const released =
|
|
144
|
+
const released = returnNotInitializedIfDisposed(this.disposed);
|
|
134
145
|
if (released !== null) {
|
|
135
146
|
return released;
|
|
136
147
|
}
|
|
@@ -157,11 +168,17 @@ export class TiRtcAudioOutput {
|
|
|
157
168
|
return;
|
|
158
169
|
}
|
|
159
170
|
if (event.type === 'audioOutputStateChanged' && event.state !== undefined) {
|
|
160
|
-
|
|
171
|
+
const nextState = event.state;
|
|
172
|
+
const changed = this.currentState !== nextState;
|
|
173
|
+
this.currentState = nextState;
|
|
174
|
+
if (changed)
|
|
175
|
+
logRtcState('audio_output_state', nextState);
|
|
161
176
|
this.onStateChanged?.(this.currentState);
|
|
162
177
|
}
|
|
163
178
|
else if (event.type === 'audioOutputError') {
|
|
164
|
-
|
|
179
|
+
const code = event.code ?? TIRTC_ERROR_INVALID_ARGUMENT;
|
|
180
|
+
logRtcOutcome('audio_output', code);
|
|
181
|
+
this.onError?.(code);
|
|
165
182
|
}
|
|
166
183
|
}
|
|
167
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio_output.js","sourceRoot":"","sources":["../../src/audio_output.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,OAAO,EACP,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"audio_output.js","sourceRoot":"","sources":["../../src/audio_output.ts"],"names":[],"mappings":"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"}
|
package/lib/module/conn.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { fromNativeBytes, isUInt8, isUInt32, normalizeCreateResult,
|
|
1
|
+
import { fromNativeBytes, isUInt8, isUInt32, normalizeCreateResult, returnNotInitializedIfDisposed, TIRTC_ERROR_INVALID_ARGUMENT, TIRTC_ERROR_OK, } from './errors';
|
|
2
2
|
import { registerNativeEventHandler, unregisterNativeEventHandler } from './events';
|
|
3
3
|
import { clearNativeIdentity, setNativeIdentity } from './native_object_id';
|
|
4
4
|
import { NativeTiRtc } from './native';
|
|
5
|
+
import { logRtcOutcome, logRtcState } from './logging_internal';
|
|
5
6
|
import { toNativeBytes } from './errors';
|
|
7
|
+
import { recordingFailure, startRecording, validateStartRecordingOptions, } from './recording';
|
|
6
8
|
export class TiRtcConn {
|
|
7
9
|
constructor() {
|
|
8
10
|
this.identity = null;
|
|
@@ -15,8 +17,20 @@ export class TiRtcConn {
|
|
|
15
17
|
const result = normalizeCreateResult(NativeTiRtc.createConn());
|
|
16
18
|
this.createCode = result.code;
|
|
17
19
|
if (result.code === TIRTC_ERROR_OK) {
|
|
18
|
-
this.adoptIdentity({
|
|
20
|
+
this.adoptIdentity({
|
|
21
|
+
objectId: result.objectId,
|
|
22
|
+
generation: result.generation,
|
|
23
|
+
});
|
|
19
24
|
}
|
|
25
|
+
logRtcOutcome('connection_create', result.code);
|
|
26
|
+
}
|
|
27
|
+
startRecording(options) {
|
|
28
|
+
const validationCode = validateStartRecordingOptions(options);
|
|
29
|
+
if (validationCode !== TIRTC_ERROR_OK) {
|
|
30
|
+
return recordingFailure(validationCode);
|
|
31
|
+
}
|
|
32
|
+
const identity = this.ensureIdentity();
|
|
33
|
+
return typeof identity === 'number' ? recordingFailure(identity) : startRecording(identity.objectId, options);
|
|
20
34
|
}
|
|
21
35
|
get state() {
|
|
22
36
|
if (this.identity !== null && !this.disposed) {
|
|
@@ -35,14 +49,18 @@ export class TiRtcConn {
|
|
|
35
49
|
if (typeof identity === 'number') {
|
|
36
50
|
return identity;
|
|
37
51
|
}
|
|
38
|
-
|
|
52
|
+
const code = NativeTiRtc.connConnect(identity.objectId, remoteId, token);
|
|
53
|
+
logRtcOutcome('connection_connect', code);
|
|
54
|
+
return code;
|
|
39
55
|
}
|
|
40
56
|
disconnect() {
|
|
41
|
-
const released =
|
|
57
|
+
const released = returnNotInitializedIfDisposed(this.disposed);
|
|
42
58
|
if (released !== null) {
|
|
43
59
|
return released;
|
|
44
60
|
}
|
|
45
|
-
|
|
61
|
+
const code = this.identity === null ? TIRTC_ERROR_OK : NativeTiRtc.connDisconnect(this.identity.objectId);
|
|
62
|
+
logRtcOutcome('connection_disconnect', code);
|
|
63
|
+
return code;
|
|
46
64
|
}
|
|
47
65
|
sendCommand(commandId, data) {
|
|
48
66
|
if (!isUInt32(commandId)) {
|
|
@@ -113,6 +131,7 @@ export class TiRtcConn {
|
|
|
113
131
|
this.clearCallbacks();
|
|
114
132
|
this.currentState = 'disconnected';
|
|
115
133
|
}
|
|
134
|
+
logRtcOutcome('connection_dispose', code);
|
|
116
135
|
return code;
|
|
117
136
|
}
|
|
118
137
|
callWithStream(streamId, operation) {
|
|
@@ -126,7 +145,7 @@ export class TiRtcConn {
|
|
|
126
145
|
return operation(identity);
|
|
127
146
|
}
|
|
128
147
|
ensureIdentity() {
|
|
129
|
-
const released =
|
|
148
|
+
const released = returnNotInitializedIfDisposed(this.disposed);
|
|
130
149
|
if (released !== null) {
|
|
131
150
|
return released;
|
|
132
151
|
}
|
|
@@ -152,7 +171,12 @@ export class TiRtcConn {
|
|
|
152
171
|
switch (event.type) {
|
|
153
172
|
case 'connStateChanged':
|
|
154
173
|
if (event.state !== undefined && event.errorCode !== undefined) {
|
|
155
|
-
|
|
174
|
+
const nextState = event.state;
|
|
175
|
+
const changed = this.currentState !== nextState;
|
|
176
|
+
this.currentState = nextState;
|
|
177
|
+
if (changed || event.errorCode !== 0) {
|
|
178
|
+
logRtcState('connection_state', nextState, event.errorCode);
|
|
179
|
+
}
|
|
156
180
|
this.onStateChanged?.(this.currentState, event.errorCode);
|
|
157
181
|
}
|
|
158
182
|
break;
|