Я следовал примеру яблок, 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: никогда не вызывается?есть идеи?