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

时间:2017-08-02 07:53:53

标签: ios swift xcode video core-data

在我的应用中,用户可以录制视频。在他们录制视频后,他们会被附加到一个数组中,并用缩略图放在桌面视图上,这样他们就可以选择视频并观看。但是,如果我录制了一个视频并且它进入了桌面视图,那么在我退出应用程序之后视频就会消失。

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

有人可以向我解释一下,我处理目录非常糟糕。我几乎没有任何经验。

我将视频录制到此文件位置:

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

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

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

  • 用户默认值
  • CoreData
  • 直接从目录中检索
  • 或者您可能有任何其他建议。

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

1 个答案:

答案 0 :(得分:1)

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

您似乎根据视频的创建日期命名文件。我建议不要这样做。日期格式器很复杂,可以根据区域设置或时区或其他系统设置进行更改。我建议改为根据存储在核心数据中的UUID命名文件。

总结:

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