2017-10-08 167 views
-1

我们有一个应用程序和更新,我们希望在应用程序中有Photobooth。一切正常,我得到相机的预览等,但拍照不起作用..我尝试了所有我在这里找到的解决方案,但没有任何工作。快速拍摄照片崩溃

头:

var captureSession: AVCaptureSession? 
var videoPreviewLayer: AVCaptureVideoPreviewLayer? 

抽奖:

do { 

     let input = try AVCaptureDeviceInput(device: getDevice(position: .front)) 

     captureSession = AVCaptureSession() 
     captureSession?.addInput(input) 

     videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
     videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
     videoPreviewLayer?.frame = cameraView.bounds 
     cameraView.layer.addSublayer(videoPreviewLayer!) 

     captureSession?.startRunning() 
... 

TakePhoto():

let stillImageOutput = AVCaptureStillImageOutput.init() 
    stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG] 
    if(self.captureSession?.canAddOutput(stillImageOutput))!{ 
     self.captureSession?.addOutput(stillImageOutput) 
    } 

    let videoConnection = stillImageOutput.connection(withMediaType:AVMediaTypeVideo) 

    if (videoConnection?.isEnabled)! { 
     stillImageOutput.captureStillImageAsynchronously(from:videoConnection, completionHandler: { 
      (sampleBuffer, error) in 
... 

而且它崩溃的最后一行。以下是错误:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[AVCaptureStillImageOutput captureStillImageAsynchronouslyFromConnection:completionHandler:] Inconsistent state' 

信不信由你,但我们需要在3天内更新我们从苹果应用程式,或将在AppStore(我们需要额外的功能。)被移除所以,如果你能帮助我们会非常感谢!

+0

看看我的例子,我只是上传到https://github.com/NikhilManapure/AVFoundationDemo,我希望这有助于。 –

+0

AVCaptureStillImageOutput已被弃用。改用AVCapturePhotoOutput。 –

+0

@NikhilManapure我完全复制了所有的代码,但我得到的错误:“错误发生:无法记录”捕获功能,三重检查了一切,它真的是一样的 – MaximVW

回答

0

我最好的猜测(上午5:30)是,你没有要求使用相机为你的应用程序。完成之后,在尝试捕获照片之前,您需要确保变量stillImageOutput对方法captureStillImageAsynchronouslyFromConnection做出了响应。如果它不响应该方法,您的用户将被要求更改他的“设置”以允许您使用相机。

+0

我确实要求它,这不是问题。但还是谢谢你! – MaximVW