2017-12-21 27 views
0

私は、アプリの起動時にAVCaptureMovieFileOutputを使ってデバイスカメラをビデオファイルに記録しようとしていました。私の大きな不満に、私はそれが仕事を得ることができませんでした:AVCaptureMovieFileOutputですぐにビデオ録画を開始

  • 私はAVCaptureVideoPreviewLayerだけで罰金を使用してビデオフィードを見ることができるので、私のセッションは正しく配線されました。

  • 出力先のファイルが存在せず、書き込み可能なディレクトリにあります。

  • API呼び出しまたはAVCaptureSessionRuntimeError通知からエラーは返されませんでした。

  • 私のAVCaptureFileOutputRecordingDelegateメソッドはまったく呼び出されませんでした。

サンプルコードの後でサンプルコードを試してみましたが、実際に動作するように思われました。

答えて

0

それはあなたがすぐにこのようなファイルへの記録を開始することができないことが判明:

let session = AVCaptureSession() 
session.beginConfiguration() 
// add inputs, outputs 
session.commitConfiguration() 
videoFileOutput.startRecording(to: filePath, recordingDelegate: self) 

この黙っを失敗し、全く何もしません!

代わりに、あなたはAVCaptureSessionDidStartRunning通知のために登録することにより、起動するセッションを待つ必要があります。

NotificationCenter.default.addObserver(self, selector: #selector(sessionDidStartRunning), name: .AVCaptureSessionDidStartRunning, object: session) 

次のように、セッションの開始直後に一時ファイルへの記録を開始するには、このメソッドを実装することができます

@objc 
func sessionDidStartRunning(notification: NSNotification) { 
    let session = notification.object as! AVCaptureSession 
    for output in session.outputs { 
     if let output = output as? AVCaptureMovieFileOutput { 
      let filePath = URL(fileURLWithPath: NSTemporaryDirectory() + "recording.mov") 
      try? FileManager.default.removeItem(at: filePath) 
      output.startRecording(to: filePath, recordingDelegate: self) 
     } 
    } 
}