Skip to content

Commit 5ad4639

Browse files
authored
Rework local video initialization (#403)
* Rework local video initialization * fix typo
1 parent 416b601 commit 5ad4639

File tree

3 files changed

+32
-43
lines changed

3 files changed

+32
-43
lines changed

Example/ios/Podfile.lock

+5-5
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ PODS:
1010
- React/Core (= 0.59.9)
1111
- react-native-twilio-video-webrtc (1.0.2-1):
1212
- React
13-
- TwilioVideo (~> 3.2.3)
13+
- TwilioVideo (~> 3.7)
1414
- React/Core (0.59.9):
1515
- yoga (= 0.59.9.React)
1616
- React/CxxBridge (0.59.9):
@@ -35,7 +35,7 @@ PODS:
3535
- React/cxxreact
3636
- React/jsi
3737
- React/jsinspector (0.59.9)
38-
- TwilioVideo (3.2.5)
38+
- TwilioVideo (3.7.1)
3939
- yoga (0.59.9.React)
4040

4141
DEPENDENCIES:
@@ -68,10 +68,10 @@ SPEC CHECKSUMS:
6868
Folly: de497beb10f102453a1afa9edbf8cf8a251890de
6969
glog: 1de0bb937dccdc981596d3b5825ebfb765017ded
7070
React: a86b92f00edbe1873a63e4a212c29b7a7ad5224f
71-
react-native-twilio-video-webrtc: 5a1dc979bfe98c0f8dba110e9b5655d52278f862
72-
TwilioVideo: dec31712aab578a783703c8f699c838bea4adf06
71+
react-native-twilio-video-webrtc: c33953a98c71b8600ba321e01f52c62e0c20ab6e
72+
TwilioVideo: 807526f68043a11f0e17e5c26ef0f0f73d5678e4
7373
yoga: 03ff42a6f223fb88deeaed60249020d80c3091ee
7474

7575
PODFILE CHECKSUM: a22eec28b45c6a20b9c752a17cdef0f608e13c10
7676

77-
COCOAPODS: 1.9.2
77+
COCOAPODS: 1.10.0

ios/RCTTWVideoModule.m

+26-38
Original file line numberDiff line numberDiff line change
@@ -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

187197
RCT_EXPORT_METHOD(stopLocalVideo) {
188-
self.localVideoTrack = nil;
189-
self.camera = nil;
198+
[self clearCameraInstance];
190199
}
191200

192201
RCT_EXPORT_METHOD(stopLocalAudio) {
@@ -226,27 +235,19 @@ - (void)addParticipantView:(TVIVideoView *)view sid:(NSString *)sid trackSid:(NS
226235

227236
RCT_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-
250251
RCT_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-
392380
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+
}
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

src/TwilioVideo.ios.js

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ export default class extends Component {
157157

158158
componentWillMount () {
159159
this._registerEvents()
160+
this._startLocalVideo()
160161
this._startLocalAudio()
161162
}
162163

0 commit comments

Comments
 (0)