2010-10-30 81 views
0

嘿夥計們。試圖開始使用iPhone視頻捕捉的東西,並有可怕的時間去實現它。iPhone上的視頻截圖; captureOutput委託從未呼籲

目前,使用Apple Apple Q & A:qa1702的示例代碼的精確副本進行操作;不會在這裏重新粘貼,因爲它是一個相對較大的代碼塊。

在任何情況下,我複製並粘貼代碼到一個,否則空項目,加送到setupCaptureSession呼叫到一個自定義的UIView,並推斷我應該是好去:

- (void)awakeFromNib { 
    NSLog(@"init"); 
    [self setupCaptureSession]; 
} 

不幸的是,當我運行代碼時,我的委託似乎永遠不會被調用:

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
     fromConnection:(AVCaptureConnection *)connection 
{ 
    NSLog(@"New Image!"); 
} 

我期望看到大量的「新形象!被傾倒到日誌中,但我一無所獲。我知道所有的初始化代碼都正在運行(我在setupCaptureSession中向其中扔了一些NSLog語句,並且它們都打印出來了)。因此,我要麼A)想弄清楚我在做什麼錯誤或B)看到一些非常簡單嵌入到實際工作的UIView中的捕獲代碼(代碼越少越好)。理想情況下,示例代碼將使用上面Apple開發人員網站中所述的setupCaptureSession代碼。

注意,此代碼被在iPhone 3GS測試提前

由於運行iOS 4

的最新版本!

回答

2

我將相同的代碼複製並粘貼到一個新項目中,並且對我來說工作正常。 這是我做的:

我在XCode中創建了一個基於視圖的應用程序。

添加以下框架:CoreMedia,corevideo的,AVFoundation

我導入AVFoundation到我的ViewController的頭文件

我指定我使用AVCaptureVideoDataOutputSampleBufferDelegate協議在其接口定義視圖控制器

在我從你的問題中指定的應用程序文檔複製了代碼的實現

我註釋掉了這個:

[self setSession:session] 

我評論了這一點:

UIImage *image = [self imageFromSampleBuffer:sampleBuffer]; 

,並將此:

NSLog(@"here"); 

在viewDidLoad方法我把

[self setupCaptureSession]; 

生成。跑。 「here」被重複打印到控制檯。

+1

感謝您的幫助;方向清晰,運作良好。我仍然想知道爲什麼UIView方法不起作用,但我想我會繼續使用現在的工作。 – cubic1271 2010-10-30 18:39:02

+1

嗨。 UIView方法絕對有用。事實上,通過將UIImageView的image屬性設置爲在委託函數中返回的UIImage,您可以輕鬆製作相機預覽器。事實上,如果你按照上面的說明,但不要註釋掉UIImage的東西,並添加一個UIImage到你的視圖控制器,那麼你將被設置去,因爲UIImageViews圖像屬性與保留,你不必擔心釋放圖像。讓我知道你是否需要密碼 – twerdster 2010-10-31 23:00:11

+0

是的,我需要密碼!我得到的圖像始終是空白的。 – AndrewS 2011-05-26 04:23:46