2017-08-16 20 views
0

私は、私は次のエラーを取得するAVCaptureDeviceInputタイプのインスタンスを作成してみてください。
私はこれまで何をした:
1)私は、カメラの使用とマイクのゲインの権限を持っています。
2)iPhone 7とiPhone 5でコードをテストしました。
3)それは私がsession.isRunningの値の印刷エラーを表示し、それが真の値を返します。
4)すべてのプロパティは強いままです。 AVCaptureDeviceInput初期化例外

Error Domain=AVFoundationErrorDomain Code=-11814 "Cannot Record" UserInfo={NSLocalizedDescription=Cannot Record, NSLocalizedRecoverySuggestion=Try recording again. 

この

はコードです:

let session = AVCaptureSession() 
self.session = session 
session.sessionPreset = AVCaptureSessionPresetPhoto 

do { 
    let input = try AVCaptureDeviceInput(device: device) 
    session.addInput(input) 
    if session.canAddInput(input) { 
     let stillImageOutput = AVCapturePhotoOutput() 
     self.stillImageOutput = stillImageOutput 
     let settings = AVCapturePhotoSettings() 
     stillImageOutput.capturePhoto(with: settings, delegate: self) 
     if session.canAddOutput(stillImageOutput) { 
       session.addOutput(stillImageOutput) 
       if let previewLayer = AVCaptureVideoPreviewLayer(session: session) { 
        self.previewLayer = previewLayer 
        previewLayer.videoGravity = AVLayerVideoGravityResizeAspect 
        previewLayer.connection!.videoOrientation = AVCaptureVideoOrientation.portrait 
        viewController.centerView.layer.insertSublayer(previewLayer, at: 0) 
        session.startRunning() 
       } 
      } 
     } 
} catch { 
    print(error.localizedDescription) 
} 
+2

方法'デバイス'は初期化されていますか? Oleg氏が述べたように –

+0

、デバイスの初期化を確認しますか?または、そのコードをここに追加できますか? –

+0

@kapsym let device = AVCaptureDevice(ユニークID:AVMediaTypeVideo) – Andrew

答えて

1

あり、あなたのコード内で私が見つけるいくつかの問題があるので、それについてのコメントで更新されたバージョンは、次のようになります。

let session = AVCaptureSession() 
self.session = session 
// `This method is used to start the flow of data from the inputs to the outputs connected to the AVCaptureSession instance that is the receiver.` 
//session.startRunning() // Don't startRunning until everything is configured 
session.sessionPreset = AVCaptureSessionPresetPhoto 

do { 
    let input = try AVCaptureDeviceInput(device: device) 
// session.addInput(input) // This one has to be after you check if you `canAddInput` 
    if session.canAddInput(input) { 
     session.addInput(input) 
     let stillImageOutput = AVCapturePhotoOutput() 
     self.stillImageOutput = stillImageOutput 
     let settings = AVCapturePhotoSettings() 
//  stillImageOutput.capturePhoto(with: settings, delegate: self) // This one might want to be called after you add it as an output to the `session` 
     if session.canAddOutput(stillImageOutput) { 
      session.addOutput(stillImageOutput) 
      if let previewLayer = AVCaptureVideoPreviewLayer(session: session) { 
       self.previewLayer = previewLayer 
       previewLayer.videoGravity = AVLayerVideoGravityResizeAspect 
       previewLayer.connection!.videoOrientation = AVCaptureVideoOrientation.portrait 
       viewController.centerView.layer.insertSublayer(previewLayer, at: 0) 
       session.startRunning() 
      } 
      stillImageOutput.capturePhoto(with: settings, delegate: self) 
     } 
    } 
} catch { 
    print(error.localizedDescription) 
} 
+0

。3行目で呼び出された.startRunning()はテスト用です...私はコードを編集したものに置き換えました。同じエラーがあります – Andrew

+0

デバイスのように: 'てみましょうcaptureDevice = AVCaptureDevice.defaultDevice(withMediaType:AVMediaTypeVideo)' –

+0

あなたが実際にシミュレータ上またはデバイス上でコードを実行しますか?接続されたデバイスがない場合は、通常、エラーが発生しているようです。 –

関連する問題