@@ -114,7 +114,9 @@ - (dispatch_queue_t)methodQueue {
114
114
}
115
115
116
116
- (void )addLocalView : (TVIVideoView *)view {
117
- [self .localVideoTrack addRenderer: view];
117
+ if (self.localVideoTrack != nil ) {
118
+ [self .localVideoTrack addRenderer: view];
119
+ }
118
120
[self updateLocalViewMirroring: view];
119
121
}
120
122
@@ -125,7 +127,9 @@ - (void)updateLocalViewMirroring:(TVIVideoView *)view {
125
127
}
126
128
127
129
- (void )removeLocalView : (TVIVideoView *)view {
128
- [self .localVideoTrack removeRenderer: view];
130
+ if (self.localVideoTrack != nil ) {
131
+ [self .localVideoTrack removeRenderer: view];
132
+ }
129
133
}
130
134
131
135
- (void )removeParticipantView : (TVIVideoView *)view sid : (NSString *)sid trackSid : (NSString *)trackSid {
@@ -167,6 +171,12 @@ - (void)addParticipantView:(TVIVideoView *)view sid:(NSString *)sid trackSid:(NS
167
171
return ;
168
172
}
169
173
self.localVideoTrack = [TVILocalVideoTrack trackWithSource: self .camera enabled: YES name: @" camera" ];
174
+ }
175
+
176
+ - (void )startCameraCapture {
177
+ if (self.camera == nil ) {
178
+ return ;
179
+ }
170
180
AVCaptureDevice *camera = [TVICameraSource captureDeviceForPosition: AVCaptureDevicePositionFront];
171
181
[self .camera startCaptureWithDevice: camera completion: ^(AVCaptureDevice *device,
172
182
TVIVideoFormat *startFormat,
@@ -185,8 +195,7 @@ - (void)addParticipantView:(TVIVideoView *)view sid:(NSString *)sid trackSid:(NS
185
195
}
186
196
187
197
RCT_EXPORT_METHOD (stopLocalVideo) {
188
- self.localVideoTrack = nil ;
189
- self.camera = nil ;
198
+ [self clearCameraInstance ];
190
199
}
191
200
192
201
RCT_EXPORT_METHOD (stopLocalAudio) {
@@ -226,27 +235,19 @@ - (void)addParticipantView:(TVIVideoView *)view sid:(NSString *)sid trackSid:(NS
226
235
227
236
RCT_REMAP_METHOD (setLocalVideoEnabled, enabled:(BOOL )enabled setLocalVideoEnabledWithResolver:(RCTPromiseResolveBlock)resolve
228
237
rejecter:(RCTPromiseRejectBlock)reject) {
229
- if (self.localVideoTrack != nil ){
238
+ if (self.localVideoTrack != nil ) {
230
239
[self .localVideoTrack setEnabled: enabled];
240
+ if (self.camera && self.camera .device ) {
241
+ if (enabled) {
242
+ [self startCameraCapture ];
243
+ } else {
244
+ [self clearCameraInstance ];
245
+ }
246
+ }
231
247
resolve (@(enabled));
232
- } else if (enabled) {
233
- [self createLocalVideoTrack ];
234
- resolve (@true );
235
- } else {
236
- resolve (@false );
237
- }
238
- }
239
-
240
- -(void )createLocalVideoTrack {
241
- [self startLocalVideo ];
242
- // Publish video so other Room Participants can subscribe
243
- // This check is required when TVICameraSource return nil Eg: simulator
244
- if (self.localVideoTrack != nil ){
245
- [self .localParticipant publishVideoTrack: self .localVideoTrack];
246
248
}
247
249
}
248
250
249
-
250
251
RCT_EXPORT_METHOD (flipCamera) {
251
252
if (self.camera ) {
252
253
AVCaptureDevicePosition position = self.camera .device .position ;
@@ -376,22 +377,10 @@ -(NSMutableDictionary*)convertLocalVideoTrackStats:(TVILocalVideoTrackStats *)st
376
377
}
377
378
}
378
379
379
- -(void )enableLocalVideoAtCreationTime : (BOOL *)enableVideo {
380
- if (enableVideo){
381
- if (self.localVideoTrack == nil ) {
382
- // We disabled video in a previous call, attempt to re-enable
383
- [self startLocalVideo ];
384
- } else {
385
- [self .localVideoTrack setEnabled: true ];
386
- }
387
- } else {
388
- [self stopLocalVideo ];
389
- }
390
- }
391
-
392
380
RCT_EXPORT_METHOD (connect:(NSString *)accessToken roomName:(NSString *)roomName enableVideo:(BOOL *)enableVideo encodingParameters:(NSDictionary *)encodingParameters enableNetworkQualityReporting:(BOOL *)enableNetworkQualityReporting) {
393
-
394
- [self enableLocalVideoAtCreationTime: enableVideo];
381
+ if (enableVideo) {
382
+ [self startCameraCapture ];
383
+ }
395
384
396
385
TVIConnectOptions *connectOptions = [TVIConnectOptions optionsWithToken: accessToken block: ^(TVIConnectOptionsBuilder * _Nonnull builder) {
397
386
if (self.localVideoTrack ) {
@@ -410,11 +399,11 @@ -(void)enableLocalVideoAtCreationTime:(BOOL *)enableVideo {
410
399
}
411
400
412
401
builder.roomName = roomName;
413
-
402
+
414
403
if (encodingParameters[@" enableH264Codec" ]){
415
404
builder.preferredVideoCodecs = @[ [TVIH264Codec new ] ];
416
405
}
417
-
406
+
418
407
if (encodingParameters[@" audioBitrate" ] || encodingParameters[@" videoBitrate" ]){
419
408
NSInteger audioBitrate = [encodingParameters[@" audioBitrate" ] integerValue ];
420
409
NSInteger videoBitrate = [encodingParameters[@" videoBitrate" ] integerValue ];
@@ -446,7 +435,6 @@ - (void)clearCameraInstance {
446
435
// We are done with camera
447
436
if (self.camera ) {
448
437
[self .camera stopCapture ];
449
- self.camera = nil ;
450
438
}
451
439
}
452
440
0 commit comments