2017-10-08 12 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

関連する問題