Не думаю, что проблема связана с частотой кадров. Поэтому я предложу несколько советов по улучшению производительности вашего приложения:
1) AVCaptureVideoPreviewLayer это просто подкласс CALayer, который отображает выходные данные с камеры, поэтому невозможно ограничить частоту кадров.
2) Проверьте, правильно ли вы разместили свои анимации в нужном месте, это зависит от того, какие у вас есть анимации, если это CALayer, то слой анимации должен быть подслоем вашего основного слоя просмотра холста (НЕ AVCaptureVideoPreviewLayer !!!) , если это UIView, то это должно быть подпредставление вашего основного вида холста.
3) Вы можете улучшить производительность своего приложения, установив предустановку сеанса:
[captureSession setSessionPreset:AVCaptureSessionPresetLow];
По умолчанию он установлен на высокий уровень, вы можете установить его так, как вам нужно, это просто качество видео, и если его высокая производительность не может быть идеальной.
4) Я сделал свое собственное тестовое приложение, где случайная анимация перекрывает слой предварительного просмотра видео (но это подпредставление моего основного вида !!!), и все прошло гладко, даже на моем старом iPod, я могу дать вам код для инициализация сеанса захвата:
// Create a capture session
self.captureSession = [AVCaptureSession new];
if([captureSession canSetSessionPreset:AVCaptureSessionPresetHigh]){
[captureSession setSessionPreset:AVCaptureSessionPresetHigh];
}
else{
// HANDLE ERROR
}
// Find a suitable capture device
AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// Create and add a device input
NSError *error = nil;
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:cameraDevice error:&error];
if([captureSession canAddInput:videoInput]){
[captureSession addInput:videoInput];
}
else{
// HANDLE ERROR
}
// Create and add a device still image output
AVCaptureStillImageOutput *stillImageOutput = [AVCaptureStillImageOutput new];
[stillImageOutput addObserver:self forKeyPath:@"capturingStillImage" options:NSKeyValueObservingOptionNew context:AVCaptureStillImageIsCapturingStillImageContext];
if([captureSession canAddOutput:stillImageOutput]){
[captureSession addOutput:stillImageOutput];
}
else{
// HANDLE ERROR
}
// Setting up the preview layer for the camera
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
previewLayer.frame = self.view.bounds;
// ADDING FINAL VIEW layer TO THE CAMERA CANVAS VIEW sublayer
[self.view.layer addSublayer:previewLayer];
// start the session
[captureSession startRunning];
5) И, наконец, в iOS5 вы можете установить минимальную и максимальную частоту кадров видео, что также может улучшить производительность вашего приложения, я думаю, это то, что вы просили. Проверьте эту ссылку (Настройка минимальной и максимальной частоты кадров видео):
http://developer.apple.com/library/mac/#releasenotes/AudioVideo/RN-AVFoundation/_index.html
Надеюсь, что мой ответ был ясен.
С наилучшими пожеланиями,
Артем