将视频及其缩略图保存和检索到应用程序的目录



在我的应用程序中,允许用户录制视频。录制视频后,它们将附加到数组中,并带有缩略图放置在表视图上,以便他们可以选择视频并观看。但是,如果我录制视频并且它出现在表格视图上,则在我退出应用程序后,视频将消失。

保存视频的最佳方法是什么,而无需将其保存到用户的相机胶卷中,并在以后再次打开应用程序时检索它。我读过关于核心数据的信息,但听说不推荐。有没有更好的方法?

有人可以向我解释一下吗,我对目录处理得很糟糕。我对他们几乎没有任何经验。

我在这里录制视频到此文件位置:

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]()

如何使这些视频及其缩略图在用户退出应用程序时不会消失。我真的需要帮助,因为我非常沮丧。

最好的方法是将它们保存到:

  • 用户默认值
  • 核心数据
  • 直接从目录中检索它们
  • 或者您可能有的任何其他建议。

你能告诉我最好的方法并告诉我如何做到这一点吗?我需要一个详细的答案。谢谢。

我建议将记录的所有元数据存储在核心数据中,并将所有视频和图像数据存储在文件系统中。 在核心数据存储中,您可能希望在表格视图中显示的任何元数据 - 长度,标题,创建者,创建日期,修改日期,标签等 - 即使可以通过加载文件生成 - 从数据库加载它要快得多。 将视频和缩略图存储在文档目录(不是临时目录(中,并将文件的相对路径存储在核心数据中。 确保使用相对路径而不是绝对路径,因为当通过iTunes升级或恢复应用程序时,应用程序目录可能会更改。

您似乎正在根据视频的创建日期命名文件。 我建议不要这样做。 日期格式化程序很复杂,可能会根据区域设置、时区或其他系统设置而更改。 我建议根据存储在核心数据中的UUID来命名文件。

总结一下:

  1. 将文件存储在文档目录中 - 而不是临时目录
  2. 将所有文件元数据存储在核心数据中。
  3. 在核心数据中保存视频文件和缩略图文件的相对路径
  4. 使用 UUID 命名文件 - 而不是日期字符串

最新更新