@@ -114,7 +114,9 @@ - (dispatch_queue_t)methodQueue {
114114}
115115
116116- (void )addLocalView : (TVIVideoView *)view {
117- [self .localVideoTrack addRenderer: view];
117+ if (self.localVideoTrack != nil ) {
118+ [self .localVideoTrack addRenderer: view];
119+ }
118120 [self updateLocalViewMirroring: view];
119121}
120122
@@ -125,7 +127,9 @@ - (void)updateLocalViewMirroring:(TVIVideoView *)view {
125127}
126128
127129- (void )removeLocalView : (TVIVideoView *)view {
128- [self .localVideoTrack removeRenderer: view];
130+ if (self.localVideoTrack != nil ) {
131+ [self .localVideoTrack removeRenderer: view];
132+ }
129133}
130134
131135- (void )removeParticipantView : (TVIVideoView *)view sid : (NSString *)sid trackSid : (NSString *)trackSid {
@@ -167,6 +171,12 @@ - (void)addParticipantView:(TVIVideoView *)view sid:(NSString *)sid trackSid:(NS
167171 return ;
168172 }
169173 self.localVideoTrack = [TVILocalVideoTrack trackWithSource: self .camera enabled: YES name: @" camera" ];
174+ }
175+
176+ - (void )startCameraCapture {
177+ if (self.camera == nil ) {
178+ return ;
179+ }
170180 AVCaptureDevice *camera = [TVICameraSource captureDeviceForPosition: AVCaptureDevicePositionFront];
171181 [self .camera startCaptureWithDevice: camera completion: ^(AVCaptureDevice *device,
172182 TVIVideoFormat *startFormat,
@@ -185,8 +195,7 @@ - (void)addParticipantView:(TVIVideoView *)view sid:(NSString *)sid trackSid:(NS
185195}
186196
187197RCT_EXPORT_METHOD (stopLocalVideo) {
188- self.localVideoTrack = nil ;
189- self.camera = nil ;
198+ [self clearCameraInstance ];
190199}
191200
192201RCT_EXPORT_METHOD (stopLocalAudio) {
@@ -226,27 +235,19 @@ - (void)addParticipantView:(TVIVideoView *)view sid:(NSString *)sid trackSid:(NS
226235
227236RCT_REMAP_METHOD (setLocalVideoEnabled, enabled:(BOOL )enabled setLocalVideoEnabledWithResolver:(RCTPromiseResolveBlock)resolve
228237 rejecter:(RCTPromiseRejectBlock)reject) {
229- if (self.localVideoTrack != nil ){
238+ if (self.localVideoTrack != nil ) {
230239 [self .localVideoTrack setEnabled: enabled];
240+ if (self.camera && self.camera .device ) {
241+ if (enabled) {
242+ [self startCameraCapture ];
243+ } else {
244+ [self clearCameraInstance ];
245+ }
246+ }
231247 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];
246248 }
247249}
248250
249-
250251RCT_EXPORT_METHOD (flipCamera) {
251252 if (self.camera ) {
252253 AVCaptureDevicePosition position = self.camera .device .position ;
@@ -376,22 +377,10 @@ -(NSMutableDictionary*)convertLocalVideoTrackStats:(TVILocalVideoTrackStats *)st
376377 }
377378}
378379
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-
392380RCT_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+ }
395384
396385 TVIConnectOptions *connectOptions = [TVIConnectOptions optionsWithToken: accessToken block: ^(TVIConnectOptionsBuilder * _Nonnull builder) {
397386 if (self.localVideoTrack ) {
@@ -410,11 +399,11 @@ -(void)enableLocalVideoAtCreationTime:(BOOL *)enableVideo {
410399 }
411400
412401 builder.roomName = roomName;
413-
402+
414403 if (encodingParameters[@" enableH264Codec" ]){
415404 builder.preferredVideoCodecs = @[ [TVIH264Codec new ] ];
416405 }
417-
406+
418407 if (encodingParameters[@" audioBitrate" ] || encodingParameters[@" videoBitrate" ]){
419408 NSInteger audioBitrate = [encodingParameters[@" audioBitrate" ] integerValue ];
420409 NSInteger videoBitrate = [encodingParameters[@" videoBitrate" ] integerValue ];
@@ -446,7 +435,6 @@ - (void)clearCameraInstance {
446435 // We are done with camera
447436 if (self.camera ) {
448437 [self .camera stopCapture ];
449- self.camera = nil ;
450438 }
451439}
452440
0 commit comments