2011-10-21 80 views
4

我需要在視頻流中輸入UIImages,所有這些都在iPad上有限的內存中,在流仍在進紙時快速保存到文件系統中,然後在「錄製」會話之後處理它們。我需要快速保存UIImages以避免中斷正在iPad上觀看的Feed。我正在考慮將每個幀保存到一個單獨的文件,然後按順序讀取這些文件並將它們組合成一個.mov文件。在iPad上處理大型視頻源

這些技巧是:如何快速保存UIImages,也許是原始數據,然後在處理電影時,將每個UIImage文件附加到它以製作無縫電影文件?在添加之前,我需要對每個幀進行一些處理,如縮放和變換。

任何意見將不勝感激。

回答

0

根據你的圖像有多大,你可以讓新的coredata「使用外部存儲」屬性爲你做這個。 下面是它從我的另一個答案複製的解釋:

因爲我們現在在IO5上,所以不再需要將圖像寫入磁盤。 您現在可以在coredata二進制屬性上設置「允許外部存儲」。根據蘋果發佈說明它意味着:

像圖像縮略圖小的數據值可以有效地存儲在數據庫 ,但大的照片或其他媒體最好由 文件系統直接處理。您現在可以指定管理對象屬性的值可以作爲外部記錄存儲 - 請參閱 setAllowsExternalBinaryDataStorage:啓用時,核心數據 試探性地確定每個值是否應將數據直接保存在數據庫中 或者將URI存儲到一個單獨的文件中,然後管理它。如果使用此選項,則無法基於二進制 數據屬性的內容進行查詢。

使用這種方法有幾個優點。 首先,Coredate至少可以在寫入文件系統時儘可能快地保存文件。但是,如果有適用於上述條件的小圖像,它會更快,因爲它們將直接保存在coredata sqlite文件中。

進一步在iOS 5中,可以很容易地處理單獨的託管上下文,並在後臺對子上下文執行更改。如果成功完成,您可以將此子上下文合併到主要的託管對象上下文中,並執行所需的處理。

[child performBlock:^{ 
[childsave:&parentError]; //do this in background on child context 
}]; 

有一個NSPrivateQueueConcurrentType創建「兒童MOC」 - 見[蘋果文檔] [1]

而且至少可以與coredata對象的工作,使您能夠緩存,限制和進一步優化您的下載完成後處理

[1]:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html#//apple_ref/doc/uid/TP40003385瞭解更多信息