我正在尝试在我的应用中实现自定义视频录制和图像捕获。我已经设置了AVCaptureSession和所有必要的输入/输出来捕获音频,视频和静止图像。但是,完成录制视频后输出文件不存在。由于输出网址上没有文件,因此我无法将视频保存到用户照片库。
为什么没有创建输出文件?我self.videoOutput
(AVCaptureMovieFileOutput
)上缺少一个设置?
startRecording
实施:
func startRecording() throws {
if !self.recording {
let documentDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let url = documentDirectory.appendingPathComponent(UUID().uuidString)
self.videoOutput.startRecording(to: url, recordingDelegate: self)
}
}
AVCaptureFileOutputRecordingDelegate
实施。
extension MainViewController: AVCaptureFileOutputRecordingDelegate {
func fileOutput(_ output: AVCaptureFileOutput, didStartRecordingTo fileURL: URL, from connections: [AVCaptureConnection]) {
self.recording = true
//FileManager.default.fileExists(fileURL.absoluteString) == false
}
func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
self.recording = false
//FileManager.default.fileExists(outputFileURL.absoluteString) == false
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: outputFileURL)
}) { saved, error in
if saved {
do {
try FileManager.default.removeItem(at: outputFileURL)
} catch _ as NSError {
//error
}
}
}
}
}
答案 0 :(得分:0)
结束时有两个问题:
首先 - 我正在检查文件是否存在使用错误的代码。检查文件是否存在的正确方法是:
FileManager.default.fileExists(atPath: outputFileURL.path)
第二 - 除了UUID作为有效文件名之外,Photos框架没有。一旦我在文件名中添加了“.mov”扩展名,框架就能够将视频保存到Photos应用程序中。下面的工作代码:
let url = documentDirectory.appendingPathComponent(UUID().uuidString + ".mov")