目前,使用Apple Developer 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代码。
请注意,此代码正在运行最新版iOS 4的iPhone 3GS上进行测试。
提前致谢!
答案 0 :(得分:2)
我将相同的代码复制并粘贴到一个新项目中,它对我来说很好。 这是我做的:
我在XCode中创建了一个基于View的应用程序。
我添加了以下框架:CoreMedia,CoreVideo,AVFoundation
我将AVFoundation导入到我的viewcontroller的头文件
中我指定我的视图控制器在其接口定义中使用AVCaptureVideoDataOutputSampleBufferDelegate协议
在实现中,我从您在问题中指定的应用文档中复制了代码
我评论了这个:
[self setSession:session]
我评论了这个:
UIImage *image = [self imageFromSampleBuffer:sampleBuffer];
并添加了这个:
NSLog(@"here");
在viewDidLoad方法中,我把
[self setupCaptureSession];
构建。跑。 “here”重复打印到控制台。