在Xcode中设置前置摄像头

Dam*_*ian 19 iphone camera avfoundation ios

在Xcode中设置前置摄像头.我怎样才能做到这一点?在Xcode中设置前置摄像头.

AVCaptureSession *session = [AVCaptureSession new];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    [session setSessionPreset:AVCaptureSessionPreset640x480];
else
    [session setSessionPreset:AVCaptureSessionPresetPhoto];

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
require( error == nil, bail );

isUsingFrontFacingCamera = NO;
if ( [session canAddInput:deviceInput] )
    [session addInput:deviceInput];

stillImageOutput = [AVCaptureStillImageOutput new];
[stillImageOutput addObserver:self forKeyPath:@"capturingStillImage" options:NSKeyValueObservingOptionNew context:AVCaptureStillImageIsCapturingStillImageContext];
if ( [session canAddOutput:stillImageOutput] )
    [session addOutput:stillImageOutput];
Run Code Online (Sandbox Code Playgroud)

djr*_*ero 71

添加此方法以迭代检查其位置的现有设备:

- (AVCaptureDevice *)frontCamera {
    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    for (AVCaptureDevice *device in devices) {
        if ([device position] == AVCaptureDevicePositionFront) {
            return device;
        }
    }
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

然后,替换:

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
Run Code Online (Sandbox Code Playgroud)

有:

AVCaptureDevice *device = [self frontCamera];
Run Code Online (Sandbox Code Playgroud)

  • ```devicesWithMediaTypes``` 已弃用,将设备数组替换为:```AVCaptureDeviceDiscoverySession *captureDeviceDiscoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionFront]; NSArray *devices = [captureDeviceDiscoverySession devices];``` (2认同)

vdu*_*ist 6

由于iOS 10 devicesWithMediaType:已被弃用.你应该用AVCAptureDeviceDiscoverySession.

- (AVCaptureDevice *)frontCamera {    
    return [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ AVCaptureDeviceTypeBuiltInWideAngleCamera ]
                                                                  mediaType:AVMediaTypeVideo
                                                                   position:AVCaptureDevicePositionFront].devices.firstObject;
}
Run Code Online (Sandbox Code Playgroud)