Непрерывный захват изображения с AVFoudation в iPhone - PullRequest
2 голосов
/ 05 августа 2011

Теперь я могу захватить изображение, используя avfoundation, как показано ниже. Но как мне делать непрерывную съемку изображений (например, 20 или 30)?

[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

 }];

1 Ответ

2 голосов
/ 17 августа 2011

Ой, я забыл проконтролировать ваш комментарий:

Сценарий, который вы описываете, будет легче всего решить с помощью какого-либо таймера.
В зависимости от того, какой уровень точности вам нужен, естьразличные кандидаты для поиска:

  1. Повторяющийся NSTimer довольно прост и понятен в использовании.Так как этот класс работает в сочетании с циклами выполнения, следует помнить о некоторых подводных камнях - одно из них состоит в том, что точность ограничена (но для того, что вы, казалось бы, хотите достичь, это не должно быть проблемой вообще).
  2. Если вам требуется немного больше точности в долгосрочной перспективе, вы все равно можете использовать NSTimer: используйте initWithFireDate:… с repeats:NO и таким образом создайте новый таймер (используя дату относительно предполагаемой даты fireDate старого)когда срабатывает старый.
  3. Если вам действительно нужна высокая степень точности, вам следует взглянуть на таймеры отправки.Они являются частью GCD и, таким образом, довольно низкоуровневой технологии.Если вы решите следовать этому пути для точности, вам, вероятно, следует использовать собственную очередь отправки в вызове dispatch_source_create.

В любом случае ваш код для привязки изображения отправляется в соответствующий обработчик..

...