Schalten Sie Kameras mit avcapturesession

Verwenden Sie dieses Tutorial hier:http://www.musicalgeometry.com/?p=1297 Ich habe mit AVCaptureSession eine benutzerdefinierte Überlagerung und Bilderfassung erstellt.

Ich versuche dem Benutzer zu erlauben, zwischen der vorderen und hinteren Kamera zu wechseln. Hier ist mein Code in CaptureSessionManager zum Wechseln der Kamera:

- (void)addVideoInputFrontCamera:(BOOL)front {
    NSArray *devices = [AVCaptureDevice devices];
    AVCaptureDevice *frontCamera;
    AVCaptureDevice *backCamera;

    for (AVCaptureDevice *device in devices) {

        //NSLog(@"Device name: %@", [device localizedName]);

        if ([device hasMediaType:AVMediaTypeVideo]) {

            if ([device position] == AVCaptureDevicePositionBack) {
                //NSLog(@"Device position : back");
                backCamera = device;
            }
            else {
                //NSLog(@"Device position : front");
                frontCamera = device;
            }
        }
    }

    NSError *error = nil;

    if (front) {
        AVCaptureDeviceInput *frontFacingCameraDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:frontCamera error:&error];
        if (!error) {
            if ([[self captureSession] canAddInput:frontFacingCameraDeviceInput]) {
                [[self captureSession] addInput:frontFacingCameraDeviceInput];
            } else {
                NSLog(@"Couldn't add front facing video input");
            }
        }
    } else {
        AVCaptureDeviceInput *backFacingCameraDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:backCamera error:&error];
        if (!error) {
            if ([[self captureSession] canAddInput:backFacingCameraDeviceInput]) {
                [[self captureSession] addInput:backFacingCameraDeviceInput];
            } else {
                NSLog(@"Couldn't add back facing video input");
            }
        }
    }
}

Jetzt initialisiere ich in meinem benutzerdefinierten Overlay-Controller alles so in viewDidLoad:

[self setCaptureManager:[[CaptureSessionManager alloc] init]];

[[self captureManager] addVideoInputFrontCamera:NO]; // set to YES for Front Camera, No for Back camera

[[self captureManager] addStillImageOutput];

[[self captureManager] addVideoPreviewLayer];
CGRect layerRect = [[[self view] layer] bounds];
[[[self captureManager] previewLayer] setBounds:layerRect];
[[[self captureManager] previewLayer] setPosition:CGPointMake(CGRectGetMidX(layerRect),CGRectGetMidY(layerRect))];
[[[self view] layer] addSublayer:[[self captureManager] previewLayer]];

[[_captureManager captureSession] startRunning];

Die Schaltfläche zum Umschalten der Kamera ist mit einer Methode namens switchCamera verbunden. Ich habe das versucht:

- (void)switchCameraView:(id)sender {

    [[self captureManager] addVideoInputFrontCamera:YES]; // set to YES for Front Camera, No for Back camera

}

Wenn ich dies aufrufe, erhalte ich den Fehler NSLog vom CaptureSessionManager und kann nicht herausfinden, warum. Wenn ich in viewDidLoad die Option fontCamera auf YES stelle, wird die vordere Kamera angezeigt, es kann jedoch nicht auf die hintere umgeschaltet werden und umgekehrt.

Irgendwelche Ideen, wie man es dazu bringt, richtig zu schalten?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage