gpt4 book ai didi

ios - AVCaptureMovieFileOutput 输出文件不存在

转载 作者:行者123 更新时间:2023-11-30 11:51:16 25 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现自定义视频录制和图像捕获。我已经设置了 AVCaptureSession 和所有必要的输入/输出来捕获音频、视频和静态图像。但是,我录制完视频后,输出文件不存在。由于输出 URL 处没有文件,因此我无法将视频保存到用户照片库中。

为什么没有创建输出文件?我在 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
}
}
}
}
}

最佳答案

最终有两个问题:

首先 - 我正在使用错误的代码检查文件是否存在。检查文件是否存在的正确方法是:

FileManager.default.fileExists(atPath: outputFileURL.path)

第二 - 照片框架不将 UUID 作为有效文件名。一旦我在文件名中添加了“.mov”扩展名,框架就能够将视频保存到照片应用程序中。工作代码如下:

let url = documentDirectory.appendingPathComponent(UUID().uuidString + ".mov")

关于ios - AVCaptureMovieFileOutput 输出文件不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48294797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com