【发布时间】:2020-11-01 10:30:50
【问题描述】:
我有以下代码用于保存录制的视频:
func saveVideo() -> Void {
guard let url = self.videoUrl else {
Logger.shared.log(.video, .error, "error video url invalid")
return
}
let homeDirectory = URL.init(fileURLWithPath: NSHomeDirectory(), isDirectory: true)
let fileUrl = homeDirectory.appendingPathComponent(self.adId.toString()).appendingPathComponent("video-clip").appendingPathComponent(UUID.init().uuidString, isDirectory: false).appendingPathExtension("mov")
Logger.shared.log(.video, .debug, "saving video to: \(fileUrl)")
self.savedVideoUrl = fileUrl
do {
let data = try Data(contentsOf: url)
try data.write(to: fileUrl, options: .atomicWrite)
} catch {
Logger.shared.log(.video, .error, "error saving video: \(error.localizedDescription)")
}
}
这里的self.videoUrl是摄像头录制视频的url,是从委托方法初始化的:func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
问题是saveVideo()方法执行的时候报错:
[878 ] 13:22:16.045 | video | Main thread | error saving video: The folder “4A601A28-C4EB-405E-8110-6D01965D5920.mov” doesn’t exist.
我不确定这段代码有什么问题。如果文件不存在,那我们如何先创建文件,然后再写入数据呢?
【问题讨论】:
-
您需要一个实际的文件夹路径,例如
var/root/myvids/而不是一些UUID数字。使用文件管理器应用程序/工具检查视频文件的文件夹名称和路径,然后在代码中测试该路径。 -
@VC.One 的目的是将视频保存到具有随机 UUID 名称的文件中。这是为了避免覆盖和现有文件。
-
即便如此,我想说的是确保您的代码可以首先在基本代码级别保存文件。何时或如果成功,那么您可以检查您的代码的此 UUID 版本是否实际上也指向同一个文件夹。错误说_“文件夹不存在”,但正如您所知,
.mov是文件类型而不是文件夹名称,所以不知何故,您的编译器认为...D5920.mov是文件夹名称(但我认为您希望它作为文件名)。
标签: ios swift video camera save