我一直在關注如何使用AVFoundation捕獲圖像的蘋果示例,QA1702。由於空間問題,我不會在這裏引用代碼。我試圖實現的簡要說明: 使用iPhone相機將「視頻」(實際上是一系列圖像)傳遞到Web服務器,我知道這是可能的。但是,爲了能夠像this example那樣使用HTTP POST傳遞圖像,我必須保存圖像。不一定在照片相冊中,但我無法在調試目的中查看照片。writeImageToSavedPhotosAlbum僅保存幾張圖片
蘋果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的創建和更改它,因爲我做的writeImageToSavedPhotosAlbum無效類型:這裏與CGImageRef代替。
這個問題,我看到它是在10秒內,我捕捉圖像〜150調用captureOutput進行,因此相同的數量writeImageToSavedPhotos但只有約5-10圖片被保存。我知道這是內存濫用,但由於我沒有收到任何警告,我不知道爲什麼不創建更多的圖像。我能做些什麼呢?是因爲,現在我只是在猜測,writeImageToSavedPhotos開始新線程,iPhone無法處理超過一定數量的線程。我讀過一些關於NSOperationQueue的內容,我應該看看它嗎?
在一個側面說明,我在setupCaptureSession使用的NSTimer:
[NSTimer scheduledTimerWithTimeInterval: 10.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats: NO];
但是我要開始它第一次調用captureOutput爲了避免攝像機的啓動過程中時間流逝。但如果我將此代碼行移至captureOutput,那麼timerFireMethod:永遠不會被調用?有任何想法嗎?