Changer de caméra avec avcapturesession

À l'aide de ce tutoriel ici: http://www.musicalgeometry.com/?p=1297 j'ai créé une coutume de superposition et de capture d'image avec AVCaptureSession.

Je cherche à permettre à l'utilisateur de basculer entre l'appareil photo avant et arrière. Voici mon code dans CaptureSessionManager à changer de caméra:

- (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");
            }
        }
    }
}

Maintenant dans mon overlays contrôleur j'initialise tout comme dans 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];

Le commutateur de bouton de la caméra est connectée à une méthode appelée switchCamera. J'ai essayé ceci:

- (void)switchCameraView:(id)sender {

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

}

Lors de l'appel de ceci, j'obtiens l'erreur NSLog de la CaptureSessionManager et je ne peux pas comprendre pourquoi. Dans viewDidLoad, si j'ai mis le fontCamera à YES, il montre la face avant de la caméra, mais ne peut pas basculer en arrière, et vice-versa.

Toutes les idées sur la façon de l'obtenir pour passer correctement?

  • Mon collègue a eu des problèmes en essayant de faire la même chose. Nous avons travaillé autour de la question par l'initialisation de 2 vues distinctes pour appareil photo avant et arrière. Vous pouvez appeler startRunning et stopRunning sur le AVCaptureSession et apporter le point de vue que vous souhaitez utiliser à l'avant lors de la modification de dispositifs.
  • J'ai déjà ajouté une réponse s'il vous Plaît voir [LIEN][1] [1]: stackoverflow.com/questions/26423953/...
  • voici solution de travail pour swift 3.0.1
InformationsquelleAutor Kyle Begeman | 2013-12-31