writeImageToSavedPhotosAlbum сохранить только несколько изображений - PullRequest
0 голосов
/ 21 июля 2011

Я следовал примеру яблок, QA1702 , о том, как захватывать изображения с помощью AVFoundation.Я не буду приводить здесь код из-за космического беспокойства.Краткое описание того, чего я пытаюсь достичь: используйте камеру iPhone, чтобы передать «видео» (фактически последовательность изображений) на веб-сервер, и я знаю, что это возможно.Однако для того, чтобы можно было передать изображение с помощью HTTP POST, как в в этом примере , я должен сохранить изображение.не обязательно в альбоме с фотографиями, но я не хочу просматривать фотографии там и в целях отладки.

Apple QA1702 содержит 3 метода:

- (void)setupCaptureSession 

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
    didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
    fromConnection:(AVCaptureConnection *)connection

//this is modified to be void as you might see, will get back to this
- (void) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer

в setupCaptureSession Я запускаю сеанс, как в примере.captureOutput только запускает imageFromSampleBuffer, и вот где я добавил некоторые изменения:

// Create a Quartz image from the pixel data in the bitmap graphics context
CGImageRef quartzImage = CGBitmapContextCreateImage(context); 
// Unlock the pixel buffer
CVPixelBufferUnlockBaseAddress(imageBuffer,0);

// Free up the context and color space
CGContextRelease(context); 
CGColorSpaceRelease(colorSpace);

//library is declared in .h and is a ALAssetsLibrary
[library writeImageToSavedPhotosAlbum:quartzImage orientation:ALAssetOrientationDown completionBlock:nil];

// Release the Quartz image
CGImageRelease(quartzImage); 

Я удалил создание UIImage и изменил его на void typ, так как я делаю writeImageToSavedPhotosAlbum: сВместо этого здесь используется CGImageRef.

Проблема, как я вижу, заключается в том, что в течение 10 секунд, когда я снимаю изображения, выполняется ~ 150 вызовов captureOutput, и поэтому сохраняется то же количество для writeImageToSavedPhotos, но сохраняется только ~ 5-10 изображений.Мне известно о злоупотреблении памятью, но поскольку я не получаю никаких предупреждений, я не могу понять, почему не создается больше изображений.и что я могу с этим поделать?Это потому, что, и я только сейчас догадываюсь, writeImageToSavedPhotos запускает новые потоки, и iPhone не может обрабатывать более определенного количества потоков.Я прочитал кое-что о NSOperationQueue, я должен рассмотреть это?

В качестве примечания я использую NSTimer в setupCaptureSession:

    [NSTimer scheduledTimerWithTimeInterval: 10.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats: NO];

, однако я хочу запустить его при первом вызове captureOutput, чтобы избежать истечения времени во время запуска видеокамеры,но если я переместить эту строку кода в captureOutput, то timerFireMethod: никогда не вызывается?есть идеи?

1 Ответ

0 голосов
/ 12 августа 2011

Это решаемо с NSOperationQueue, но больше не представляет интереса для меня, поскольку запись в файл является неэффективной для большинства приложений.

...