在我的应用中,用户可以录制视频。在他们录制视频后,他们会被附加到一个数组中,并用缩略图放在桌面视图上,这样他们就可以选择视频并观看。但是,如果我录制了一个视频并且它进入了桌面视图,那么在我退出应用程序之后视频就会消失。
保存视频的最佳方法是什么,而不将其保存到用户相机胶卷,并在以后再次打开应用时检索。我读到了核心数据,但听说不推荐。有没有更好的方法呢?
有人可以向我解释一下,我处理目录非常糟糕。我几乎没有任何经验。
我将视频录制到此文件位置:
self.movieFileOutput.startRecording(toOutputFileURL: URL(fileURLWithPath:self.videoFileLocation()), recordingDelegate: self)
func videoFileLocation() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .long
let date = dateFormatter.string(from: Date())
return NSTemporaryDirectory().appending("videoFile\(date)")
}
视频完成录制后,我将其附加到此阵列。
var videosArray: [URL] = [URL]()
然后我使用此方法获取每个视频的缩略图:
func getThumbnail(_ outputFileURL:URL) -> UIImage {
let clip = AVURLAsset(url: outputFileURL)
let imgGenerator = AVAssetImageGenerator(asset: clip)
let cgImage = try! imgGenerator.copyCGImage(
at: CMTimeMake(0, 1), actualTime: nil)
let uiImage = UIImage(cgImage: cgImage)
return uiImage
}
然后我将它附加到此数组:
var thumbnails = [UIImage]()
当用户退出应用时,如何使这些视频及其缩略图不会消失。因为我很沮丧,我真的需要帮助。
最好的方法是将它们保存到:
你能告诉我最好的方法并告诉我如何做到这一点。我需要一个详细的答案。谢谢。
答案 0 :(得分:1)
我建议将记录的所有元数据存储在核心数据中,并将所有视频和图像数据存储在文件系统中。在核心数据存储中,您可能希望在tableview中显示的任何元数据 - 长度,标题,创建者,创建日期,修改日期,标记等 - 即使它可以通过加载文件生成 - 它很多更快地从数据库加载它。将视频和缩略图存储在文档目录(而不是临时目录)中,并将RELATIVE路径存储到core-data中的文件中。确保使用相对而非绝对路径,因为当通过iTunes升级或恢复应用程序时,app目录可以更改。
您似乎根据视频的创建日期命名文件。我建议不要这样做。日期格式器很复杂,可以根据区域设置或时区或其他系统设置进行更改。我建议改为根据存储在核心数据中的UUID命名文件。
总结: