2016-05-08 21 views
5

を使用して前面カメラから写真をキャプチャしようとしたとき、私は前面カメラから画像をキャプチャし、それらを共有することを可能にするコードを実装してみてください。しかし、私は「写真を撮る」しようとするたびに、次のコンソール警告と私のアプリがクラッシュ:致命的なエラーAVFoundation

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[AVCaptureStillImageOutput captureStillImageAsynchronouslyFromConnection:completionHandler:] - inconsistent state.' 
*** First throw call stack: 
(0x181b1ee38 0x181183f80 0x188265074 0x10003d578 0x10003d748 0x10003c380 0x10003c3d8 0x186ca0ad0 0x186ca0a4c 0x186c88740 0x186ca033c 0x186c58b0c 0x186c994f8 0x186c98af4 0x186c68f4c 0x186c67528 0x181ad5124 0x181ad4bb8 0x181ad28b8 0x1819fcd10 0x1832e4088 0x186cd1f70 0x100036880 0x18159a8b8) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

は、私は以下の私のコードを掲載しています:

import UIKit 
import AVFoundation 

class CameraSnapViewController: UIViewController { 

    let captureSession = AVCaptureSession() 
    let stillImageOutput = AVCaptureStillImageOutput() 

    let cameraPicker = UIImagePickerController() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.addPhotoCapturingFunctionality() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func cameraButtonPressed(sender: UIButton) { 
     self.takePhoto() 
    } 

} 

extension CameraSnapViewController { 
    func addPhotoCapturingFunctionality() { 
     guard let device = AVCaptureDevice.devices().filter({ $0.hasMediaType(AVMediaTypeVideo) && $0.position == .Front }).first as? AVCaptureDevice else { fatalError("No front facing camera found") } 

     do { 
      let input = try AVCaptureDeviceInput(device: device) 
      captureSession.addInput(input) 
      captureSession.sessionPreset = AVCaptureSessionPresetPhoto 
      stillImageOutput.outputSettings = [AVVideoCodecKey:AVVideoCodecJPEG] 
      if captureSession.canAddOutput(stillImageOutput) { 
       captureSession.addOutput(stillImageOutput) 
      } 
     } catch let error as NSError { 
      print(error) 
     } 

    } 

    func takePhoto() { 
     if let videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) { 

      stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) { (imageDataSampleBuffer, error) -> Void in 
       let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer) 
       // TODO: Sharing 
      } 

     } 
    } 
} 

は、私はこの問題をどのように修正することができますか?

答えて

1

写真を撮る前にセッションを開始する必要があります。

captureSession.startRunning()