2017-12-21 3 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) 
     } 
    } 
}