【问题标题】:Convert Data to URL for AVPlayer将数据转换为 AVPlayer 的 URL
【发布时间】:2017-10-02 14:03:18
【问题描述】:

我正在使用领域离线存储我的数据。我将视频文件作为原始数据存储在领域中。我正在使用 AVPlayer 播放我的视频,它只需要 URL 作为参数。我尝试了不同的方法将原始数据转换为 URL,但它似乎不起作用。我检查了数据的大小,它正确存储和检索数据,我唯一的问题是将数据转换为正确的格式(URL),以便 AVPlayer 可以播放该视频。

【问题讨论】:

  • 无法将数据“转换”为 URL。 URL 是一个标识资源位置的值。以前有“存储图像或到领域”的历史,所以也许你在这件事上有所了解。因此,现在,您需要提供包含视频存储路径的 URL。这意味着如果您将视频存储在设备上,它应该直接作为文件存储在文件系统中。
  • @Orlando 我将原始数据存储到领域中,您认为我应该找到该数据的路径吗?
  • 嗯,问题是存储在 Realm 上的数据没有路径。 Realm 在文件系统上完成所有工作,因此您无法访问数据。您应该进行两处更改:1)将数据(在本例中为视频文件)直接存储到磁盘和 2)将保存的媒体文件的路径存储在 Realm 上。之后,您只需使用视频的磁盘路径初始化 AVPlayer 对象。

标签: swift3 realm realm-mobile-platform


【解决方案1】:

您需要将原始数据写入临时文件,然后将其 URL 提供给AVPlayer

let tmpFileURL = URL(fileURLWithPath:NSTemporaryDirectory()).appendingPathComponent("video").appendingPathExtension("mp4")
let wasFileWritten = (try? data.write(to: tmpFileURL, options: [.atomic])) != nil

if !wasFileWritten{
    print("File was NOT Written")
}
...
//play url with your AVPlayer

【讨论】:

  • 我认为这是一个很好的解决方案。我唯一担心的是存储。我不会在设备上的两个位置存储相同的数据吗?
  • @VandanPatel 您将把临时文件存储在 /temporary 文件夹中。 iOS 会在需要更多空间时对其进行清理。此外,您将只使用一个临时文件,所以这不是问题。
  • @VandanPatel 您也可以在不需要临时文件后将其删除。
  • 我一定会尝试并在完成后接受您的回答。我无处可去,所以非常感谢,朋友!
  • @VandanPatel 第二种方法是将视频存储在 /Documents 文件夹中,并在您的 Realm 数据库中提供指向它们的路径。然后就可以从文件路径获取URL了……就简单多了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多