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