Используйте avfoundation для захвата изображения, но не можете захватить слишком быстро - PullRequest
3 голосов
/ 11 августа 2011

Я использую avfoundation для захвата изображений, но не могу сделать снимок слишком быстро (я установил интервал времени на 0,1 с).Там написано "NULL образец буфера".В чем проблема?Спасибо.

[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
 {
     CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
     if (exifAttachments)
     {
         // Do something with the attachments.
         // NSLog(@"attachements: %@", exifAttachments);
     }
     else
         NSLog(@"no attachments");

     NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
     UIImage *image = [[UIImage alloc] initWithData:imageData];
    //use the image
 }]; 

* Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '* + [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:] - NULL пример буфера.'

Ответы [ 2 ]

2 голосов
/ 24 июня 2012

Хорошо сказано в документации:

Этот метод выдает NSInvalidArgumentException, если jpegSampleBuffer имеет значение NULL или нет в формате JPEG.

Так что либо вы проверяете imageSampleBuffer для NULL или что я сделал, я обернул все это в проверку оператора if: CMSampleBufferIsValid(imageSampleBuffer), но на самом деле не знаю, правильный ли это вызов.Документация немного скудна.

0 голосов
/ 19 мая 2016

В данный момент мне помогла вещь:

[helper captureImage];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        [scheduledTimer invalidate];
        [helper stopRunningSession];


        imageView.image = helper.imageToReturn;
    });

Здесь я использую вспомогательный класс для запуска сеанса и таймер для получения кадров изображения.Итак, сначала я вызываю функцию захвата изображения и после задержки в 0,3 секунды.я делаю недействительным таймер и останавливаю AVCaptureSession.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...