Обработка большого видео на iPad - PullRequest
4 голосов
/ 21 октября 2011

Мне нужно взять UIImages, которые передаются в видеопотоке, все это на iPad с ограниченной памятью, быстро сохранить их в файловую систему, пока поток все еще подается, а затем обработать их после «записи» сессия. Мне нужно сохранить входящие UIImages быстро, чтобы не прерывать канал, который все еще будет отображаться на iPad. Я думаю о том, чтобы сохранить каждый кадр в отдельный файл, а затем последовательно прочитать эти файлы и объединить их в файл .mov.

Хитрости заключаются в том, как быстро сохранить UIImages, может быть, необработанные данные, а затем при обработке фильма добавить каждый файл UIImage к нему, чтобы создать цельный файл фильма? Перед добавлением мне потребуется выполнить некоторую обработку каждого кадра, например, масштабирование и преобразование.

Любой совет будет принята с благодарностью.

1 Ответ

0 голосов
/ 13 августа 2012

В зависимости от размера ваших изображений, вы можете позволить новому атрибуту coredata «использовать внешнее хранилище» сделать это для вас.Вот объяснение того, что он скопировал из другого моего ответа:

Поскольку мы сейчас находимся на IO5, вам больше не нужно записывать образы на диск по необходимости.Теперь вы можете установить «разрешить внешнее хранение» в двоичном атрибуте coredata.Согласно примечаниям к выпуску яблок, это означает следующее:

Небольшие значения данных, такие как миниатюры изображений, могут быть эффективно сохранены в базе данных, но большие фотографии или другие носители лучше всего обрабатываются непосредственно файловой системой.Теперь вы можете указать, что значение атрибута управляемого объекта может быть сохранено как внешняя запись - см. SetAllowsExternalBinaryDataStorage: если этот параметр включен, Core Data эвристически решает для каждого значения значение, следует ли сохранять данные непосредственно в базе данных или сохранять URI.в отдельный файл, которым он управляет для вас.Если вы используете эту опцию, вы не сможете выполнять запросы на основе содержимого свойства двоичных данных.

У этого подхода есть несколько преимуществ.Первое, что нужно сделать, - это сохранить файлы, по крайней мере, так быстро, как вы могли бы при записи в файловую систему.Но если есть небольшие изображения, которые соответствуют описанным выше условиям, это будет намного быстрее, потому что они будут сохранены непосредственно в файле sqlite coredata.

Кроме того, с 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 для получения дополнительной информации.

...