2011-07-21 41 views
0

我一直在關注如何使用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:永遠不會被調用?有任何想法嗎?

回答

0

這可以用NSOperationQueue解決,但對我來說不再有意思,因爲寫入文件是對大多數應用程序無效的方式。