Я разрабатываю приложение, которое требует захвата фреймбуфера как можно больше кадров. Я уже понял, как заставить Iphone, чтобы захватить в 60 кадров в секунду, ноAVCapture захват и получение фреймбуфера со скоростью 60 кадров в секунду в iOS 7
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
метод вызывается только 15 раз в секунду, что означает, что iPhone понижен выход захвата до 15 кадров в секунду.
Неужели кто-нибудь сталкивался с такой проблемой? Есть ли возможность увеличить частоту кадров захвата?
Update мой код:
camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if([camera isTorchModeSupported:AVCaptureTorchModeOn]) {
[camera lockForConfiguration:nil];
camera.torchMode=AVCaptureTorchModeOn;
[camera unlockForConfiguration];
}
[self configureCameraForHighestFrameRate:camera];
// Create a AVCaptureInput with the camera device
NSError *error=nil;
AVCaptureInput* cameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:&error];
if (cameraInput == nil) {
NSLog(@"Error to create camera capture:%@",error);
}
// Set the output
AVCaptureVideoDataOutput* videoOutput = [[AVCaptureVideoDataOutput alloc] init];
// create a queue to run the capture on
dispatch_queue_t captureQueue=dispatch_queue_create("captureQueue", NULL);
// setup our delegate
[videoOutput setSampleBufferDelegate:self queue:captureQueue];
// configure the pixel format
videoOutput.videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey,
nil];
// Add the input and output
[captureSession addInput:cameraInput];
[captureSession addOutput:videoOutput];
Я взял configureCameraForHighestFrameRate
метод здесь https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html
я точно такие же (за исключением, может быть, типа kCVPixelFormatType_420YpCbCr8BiPlanarFullRange), но метод делегата по-прежнему называют только 15 раз в секунду. Не могли бы вы предоставить полный исходный код, где вы инициализируете вход и выход видео? –
Я добавил код вывода видео, он довольно стандартный. Вы не делаете никаких тяжелых вычислений в captureOutput, которые замедляют работу? – Sten
Мой код выглядит так же. Я выяснил, как увеличить частоту кадров до 30 кадров в секунду (ранее я пытался установить предварительную настройку сеанса), но этого все равно недостаточно. У меня есть некоторые вычисления, но для целей тестирования я отключил их, и у меня все еще есть 30 кадров в секунду. –