Вероятно, наиболее эффективный способ справиться с этим - использовать OpenGL ES для фильтрации и отображения этих видеокадров.Вы не сможете многое сделать напрямую с AVCaptureVideoPreviewLayer, кроме настройки его непрозрачности при наложении на другой вид или слой.
У меня есть пример приложения здесь , где я беру кадры изкамеру и применять шейдеры OpenGL ES 2.0 для обработки видео в реальном времени для отображения.В этом приложении (подробно объясненном здесь ) я использовал цветовую фильтрацию для отслеживания объектов на виде с камеры, но другие модифицировали этот код, чтобы сделать некоторые аккуратные эффекты обработки видео.Все фильтры на основе графического процессора в этом приложении, отображаемые на экране, работают на скорости 60 кадров в секунду на моем iPhone 4.
Единственное iOS-устройство, поддерживающее видео, но не имеющее GPU с поддержкой OpenGL ES 2.0,это iPhone 3G.Если вам необходимо настроить таргетинг на это устройство, вы можете взять базовый код для захвата видео и генерации текстур OpenGL ES, а затем использовать код фильтра из образца приложения Apple GLImageProcessing .Это приложение построено на основе OpenGL ES 1.1, поддержка которого присутствует на всех устройствах iOS.
Однако я настоятельно рекомендую рассмотреть возможность использования OpenGL ES 2.0 для этого, поскольку вы можете использовать гораздо большеэффект с использованием шейдеров, чем с помощью фиксированной функции OpenGL ES 1.1 pipe.
(Редактирование: 13.02.2012) В качестве обновления вышеизложенного я создал инфраструктуру с открытым исходным кодом под названием GPUImage , который инкапсулирует этот вид пользовательской фильтрации изображений.Он также обрабатывает захват видео и выводит его на экран после фильтрации, для чего требуется всего шесть строк кода.Чтобы узнать больше о фреймворке, вы можете прочитать мой более подробный анонс .