From ff59f2912feac0b560b321635b07132571e0aba2 Mon Sep 17 00:00:00 2001 From: Howard Yang <appdevoney@gmail.com> Date: Wed, 23 Dec 2015 01:20:05 +0800 Subject: [PATCH] support video type --- .../Classes/WebRTCModule+RTCMediaStream.m | 44 ++++++++++++++++--- package.json | 2 +- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/RCTWebRTC/Classes/WebRTCModule+RTCMediaStream.m b/RCTWebRTC/Classes/WebRTCModule+RTCMediaStream.m index 7352a5d..5eeee8f 100644 --- a/RCTWebRTC/Classes/WebRTCModule+RTCMediaStream.m +++ b/RCTWebRTC/Classes/WebRTCModule+RTCMediaStream.m @@ -44,14 +44,34 @@ RCT_EXPORT_METHOD(getUserMedia:(NSDictionary *)constraints callback:(RCTResponse if (constraints[@"video"] && [constraints[@"video"] boolValue]) { NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; - AVCaptureDevice *videoDevice = [devices lastObject]; - - if (videoDevice) { - RTCVideoCapturer *capturer = [RTCVideoCapturer capturerWithDeviceName:[videoDevice localizedName]]; - RTCVideoSource *videoSource = [self.peerConnectionFactory videoSourceWithCapturer:capturer constraints:[self defaultMediaStreamConstraints]]; - RTCVideoTrack *videoTrack = [self.peerConnectionFactory videoTrackWithID:@"ARDAMSv0" source:videoSource]; - [mediaStream addVideoTrack:videoTrack]; + AVCaptureDevice *videoDevice; + + if (constraints[@"videoType"]) { + NSNumber *positionObject = [self captureDevicePositionFrom:constraints[@"videoType"]]; + if (positionObject == nil) { + videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; + } else { + AVCaptureDevicePosition position = [positionObject integerValue]; + + for (AVCaptureDevice *device in devices) { + if (device.position == position) { + videoDevice = device; + break; + } + } + + if (!videoDevice) { + videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; + } + } + } else { + videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; } + + RTCVideoCapturer *capturer = [RTCVideoCapturer capturerWithDeviceName:[videoDevice localizedName]]; + RTCVideoSource *videoSource = [self.peerConnectionFactory videoSourceWithCapturer:capturer constraints:[self defaultMediaStreamConstraints]]; + RTCVideoTrack *videoTrack = [self.peerConnectionFactory videoTrackWithID:@"ARDAMSv0" source:videoSource]; + [mediaStream addVideoTrack:videoTrack]; } mediaStream.reactTag = objectID; @@ -66,4 +86,14 @@ RCT_EXPORT_METHOD(getUserMedia:(NSDictionary *)constraints callback:(RCTResponse return constraints; } +- (NSNumber*)captureDevicePositionFrom:(NSString*)string { + if ([string isEqualToString:@"front"]) { + return @(AVCaptureDevicePositionFront); + } else if ([string isEqualToString:@"back"]) { + return @(AVCaptureDevicePositionBack); + } else { + return nil; + } +} + @end diff --git a/package.json b/package.json index 279f0e9..1f0658c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-webrtc", - "version": "0.2.2", + "version": "0.2.3", "repository": { "type": "git", "url": "git+https://github.com/oney/react-native-webrtc.git" -- GitLab