我需要获取在视频流中馈送的UIImage,所有这些都放在内存有限的iPad上,在流仍在馈送的同时将它们快速保存到文件系统中,然后在“录制”会话后对其进行处理。我需要保存快速进入的UIImage,以免中断仍在iPad上查看的提要。我正在考虑将每个帧保存到单独的文件中,然后依次读取这些文件并将它们组合成.mov文件。
技巧是:如何快速保存UIImages(也许是原始数据),然后在处理影片时,将每个UIImage文件附加到其中以制作无缝的影片文件?在添加之前,我将需要对每个帧进行一些处理,例如缩放和变换。
任何建议将不胜感激。
最佳答案
根据图像的大小,可以让新的coredata“使用外部存储”属性为您完成此操作。
这是它从另一个答案中复制的解释:
由于我们现在使用的是IO5,因此您不再需要将映像写入磁盘。
现在,您可以在coredata二进制属性上设置“允许外部存储”。根据苹果发布说明,它的含义如下:
小数据值(如图像缩略图)可以有效地存储在
数据库,但是大型照片或其他媒体最好由以下人员直接处理
文件系统。现在,您可以指定
对象属性可以存储为外部记录-请参见
setAllowsExternalBinaryDataStorage:启用后,核心数据
试探性地决定是否应保存数据
直接在数据库中存储或将URI存储到单独的文件中
为您服务。您不能根据二进制内容查询
数据属性(如果使用此选项)。
使用这种方法有几个优点。
第一个coredate至少要以与写入文件系统时一样快的速度保存文件。但是,如果有任何适用于上述条件的小图像,它将更快,因为它们将直接保存在coredata sqlite文件中。
此外,借助iOS 5,可以很容易地在单独的托管上下文中工作并在后台对子上下文进行更改。如果成功完成,则可以将此子上下文合并到主托管对象上下文中,并进行所需的处理。
[child performBlock:^{
[childsave:&parentError]; //do this in background on child context
}];
有一个NSPrivateQueueConcurrentType用于创建“ child-moc”-请参阅[apple文档] [1]
至少您可以使用coredata对象,使您可以在下载完成后缓存,限制和优化进一步的处理
[1]:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html#//apple_ref/doc/uid/TP40003385了解更多信息