当使用AVCaptureFileOutput将视频录制到文件时,开始录制时,可能会遇到无法调用委托的问题。这可能是因为委托的方法调用被延迟,直到文件写入完成为止。
要解决此问题,可以在文件输出的委托方法中使用自定义委托,以便在开始录制时立即获取回调。在这种情况下,使用AVCaptureFileOutput的captureStillImageAsynchronously()方法。
以下是相应的代码示例:
@objc protocol MyCustomDelegate: AnyObject { func didStartRecording() }
...
class MyFileOutputDelegate: NSObject, AVCaptureFileOutputRecordingDelegate { weak var delegate: MyCustomDelegate?
func fileOutput(_: AVCaptureFileOutput, didStartRecordingTo _: URL, from _: [AVCaptureConnection]) {
delegate?.didStartRecording()
}
}
let fileOutput = AVCaptureMovieFileOutput()
...
let delegate = MyFileOutputDelegate() delegate.delegate = myCustomDelegate fileOutput.startRecording(to: fileUrl, recordingDelegate: delegate)
...
extension MyViewController: MyCustomDelegate { func didStartRecording() { // Here you can update UI or do any other relevant work } }