ios中的摄像头没有变化



使用AVFoundation,我被困在从后到前前到后的更改相机上
为此,我使用以下代码。

- (IBAction)CameraToggleButtonPressed:(id)sender
{
    if ([[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo] count] > 1)        
    {
        NSError *error;
        AVCaptureDeviceInput *NewVideoInput;
        AVCaptureDevicePosition position = [[VideoInputDevice device] position];
        if (position == AVCaptureDevicePositionBack)
        {
            NewVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self CameraWithPosition:AVCaptureDevicePositionFront] error:&error];
        }
        else if (position == AVCaptureDevicePositionFront)
        {
            NewVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self CameraWithPosition:AVCaptureDevicePositionBack] error:&error];
        }
        if (NewVideoInput != nil)
        {
            [CaptureSession beginConfiguration];                        [CaptureSession removeInput:VideoInputDevice];
            if ([CaptureSession canAddInput:NewVideoInput])
            {
                [CaptureSession addInput:NewVideoInput];
                VideoInputDevice = NewVideoInput;
            }
            else
            {
                [CaptureSession addInput:VideoInputDevice];
            }
            [self CameraSetOutputProperties];
            [CaptureSession commitConfiguration];
        }
    }
}

[CaptureSession canAddInput:NewVideoInput]总是返回false,所以相机不会改变。我不明白为什么会话不能添加新的输入设备

请帮我解决这个问题

提前感谢。

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;
bool isUsingFrontFacingCamera;

方法:

- (void) switchCam{
    if (![self cameraIsRunning])
        return;
    AVCaptureDevicePosition desiredPosition;
    if (isUsingFrontFacingCamera)
        desiredPosition = AVCaptureDevicePositionBack;
    else
        desiredPosition = AVCaptureDevicePositionFront;
    for (AVCaptureDevice *d in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) {
        if ([d position] == desiredPosition) {
            [[captureVideoPreviewLayer session] beginConfiguration];
            AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:d error:nil];
            for (AVCaptureInput *oldInput in [[captureVideoPreviewLayer session] inputs]) {
                [[captureVideoPreviewLayer session] removeInput:oldInput];
            }
            [[captureVideoPreviewLayer session] addInput:input];
            [[captureVideoPreviewLayer session] commitConfiguration];
            break;
        }
    }
    isUsingFrontFacingCamera = !isUsingFrontFacingCamera;
}
- (bool) cameraIsRunning{
    return [session isRunning];
}

最新更新