Хорошо, у меня есть несколько идей для вас.
Когда вы говорите «он просто показывает кадр и никогда не воспроизводит видео», у нас есть хороший признак того, что весь ваш конвейер обработки от начала до конца работает ровно один раз, а затем перестает работать.
Это говорит нам о том, что вы правильно соединяете вещи, но некоторые компоненты не существуют дольше, чем один цикл буфера кадра, и впоследствии весь процесс останавливается.
похоже, что filter
и movieWriter
привязаны к классу (я предполагаю, что они не являются свойствами из-за отсутствия подчеркивания, _filter and _movieWriter
). Так что они будут жить после того, как этот метод закончится (поправьте меня, если я ошибаюсь...)
Я думаю, что проблема, с которой вы столкнулись, связана с вашим (GPUImageView*)displayView
Это, вероятно, следует объявить как свойство класса (хотя оно может работать как просто переменную), а затем создать экземпляр с помощью nib или метода viewDidLoad контроллера представления.
Как у вас сейчас, эта строка: GPUImageView* filterView = (GPUImageView*)displayView;
делает назначение для filterView, который не используется (и, следовательно, не нужен). Неясно, действительно ли displayView
является экземпляром GPUImageView
или он все еще будет существовать, когда текущий метод завершится. (на самом деле вы говорите, что это «UIView, который я создал программно»)
displayView должен быть подклассом GPUImageView, чтобы все это работало, и он должен быть привязан к классу, а не к методу.
Объявите это так:
@property (strong, nonatomic)GPUImageView* displayView;
а затем создайте его и добавьте в иерархию представлений изнутри viewDidLoad
person
ryan cumley
schedule
24.10.2013