当我的应用启动时,我尝试使用AVCaptureMovieFileOutput
将设备相机录制到视频文件中。令我非常沮丧的是,我无法让它发挥作用:
我可以使用AVCaptureVideoPreviewLayer
查看视频供稿就好了,所以我的会话连接正确。
它将输出的文件尚不存在,并且位于可写目录中。
API调用或AVCaptureSessionRuntimeError
通知未返回任何错误。
我的AVCaptureFileOutputRecordingDelegate
方法根本没有被调用。
我在示例代码之后尝试了示例代码,更令人抓狂的是其中一些代码实际上工作正常。
答案 0 :(得分:1)
事实证明,您不能立即开始录制到这样的文件:
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)
}
}
}