#cocoa-touch #ipad #video
#cocoa-touch #iPad #Видео
Вопрос:
Мне нужно взять пользовательские изображения, которые передаются в видеопотоке, все это на iPad с ограниченной памятью, быстро сохранить их в файловой системе, пока поток все еще подается, а затем обработать их после сеанса «записи». Мне нужно сохранить UIImages, поступающие быстро, чтобы не прерывать канал, который все еще будет просматриваться на iPad. Я подумываю о том, чтобы сохранить каждый кадр в отдельный файл, а затем последовательно прочитать эти файлы и объединить их в файл .mov.
Хитрости таковы: как быстро сохранить пользовательские изображения, возможно, необработанные данные, а затем при обработке фильма добавить к нему каждый файл пользовательского изображения, чтобы создать бесшовный видеофайл? Мне нужно будет выполнить некоторую обработку каждого кадра, например, масштабирование и преобразования, перед добавлением.
Буду признателен за любые советы.
Ответ №1:
В зависимости от того, насколько велики ваши изображения, вы можете позволить новому атрибуту coredata «использовать внешнее хранилище» сделать это за вас. Вот объяснение того, что он делает, скопированное из другого моего ответа:
Поскольку мы теперь на IO5, вам больше не нужно записывать изображения на диск без необходимости. Теперь вы можете установить «разрешить внешнее хранилище» для двоичного атрибута coredata. Согласно примечаниям к выпуску apple, это означает следующее:
Небольшие значения данных, такие как эскизы изображений, могут эффективно храниться в базе данных, но большие фотографии или другие носители лучше всего обрабатывать непосредственно файловой системой. Теперь вы можете указать, что значение атрибута управляемого объекта может храниться как внешняя запись — см. setAllowsExternalBinaryDataStorage: при включении Core Data эвристически решает на основе каждого значения, следует ли сохранять данные непосредственно в базе данных или сохранять URI в отдельный файл, которым он управляет для вас. При использовании этой опции невозможно выполнить запрос на основе содержимого свойства двоичных данных.
При использовании этого подхода есть несколько преимуществ. Во-первых, coredate сохраняет файлы по крайней мере так быстро, как вы могли при записи в файловую систему. Но если есть какие-либо небольшие изображения, которые соответствуют условиям, описанным выше, это будет намного быстрее, потому что они будут сохранены непосредственно в файле coredata sqlite.
Кроме того, с iOS 5 очень легко работать с отдельными управляемыми контекстами и выполнять изменения в дочернем контексте в фоновом режиме. В случае успешного завершения вы можете объединить этот дочерний контекст с основным контекстом управляемого объекта и выполнить необходимую обработку.
[child performBlock:^{
[childsave:amp;parentError]; //do this in background on child context
}];
Существует NSPrivateQueueConcurrentType для создания «дочернего moc» — см. [Документация Apple][1]
И, по крайней мере, вы можете работать с объектами coredata, что позволяет кэшировать, ограничивать и оптимизировать дальнейшую обработку после завершения загрузки
[1]: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html#//apple_ref/doc/uid/TP40003385 для получения дополнительной информации