Swift3 将数据转换为AVPlayer的URL

Swift3 将数据转换为AVPlayer的URL,swift3,realm,realm-mobile-platform,Swift3,Realm,Realm Mobile Platform,我正在使用realm离线存储数据。我将视频文件存储为域中的原始数据。我用AVPlayer播放我的视频,它只把URL作为参数。我尝试了不同的方法将我的原始数据转换为URL,但它似乎不起作用。我检查了数据的大小,它正确地存储和检索数据,唯一的问题是将数据转换为正确的格式(URL),以便AVPlayer可以播放该视频。您需要将原始数据写入临时文件,然后将其URL提供给AVPlayer let tmpFileURL = URL(fileURLWithPath:NSTemporaryDirectory()

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

您需要将原始数据写入临时文件,然后将其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

无法将数据“转换”为URL。URL是标识资源位置的值。以前有“存储图像或到领域”的历史,所以您可能已经了解了这一点。所以,现在,您需要提供包含视频存储路径的URL。这意味着,如果您将视频存储在设备上,它应该作为文件直接存储在文件系统中。@我将原始数据存储到域中,您认为我应该找到该数据的路径吗?问题是,域中存储的数据没有路径。Realm完成文件系统上的所有工作,因此您无法访问数据。您应该做两个更改:1)将数据(在本例中是视频文件)直接存储到磁盘,2)将保存的媒体文件的路径存储到域上。之后,您只需使用视频的磁盘路径初始化
AVPlayer
对象。我认为这是一个很好的解决方案。我唯一关心的是存储。我不会在我的设备上的两个位置存储相同的数据吗?@VandanPatel您将在/temporary文件夹中存储临时文件。iOS将在需要更多空间时清理它。另外,您将只使用一个临时文件,因此这不是问题。@VandanPatel您也可以在不需要临时文件后删除它。我一定会尝试,并在完成后接受您的回答。我带着这个哪儿也去不了,所以非常感谢你,朋友@VandanPatel第二种方法是将视频存储在/Documents文件夹中,并在您的领域数据库中拥有指向它们的路径。然后您可以从文件路径获取URL。。。这容易多了。