【问题标题】:Video capture on an iPhone; captureOutput delegate never called在 iPhone 上拍摄视频; captureOutput 委托从未被调用
【发布时间】:2010-10-30 10:40:10
【问题描述】:

大家好。尝试开始使用 iPhone 视频捕获的东西,并且在开始时遇到了可怕的时间。

目前,正在使用来自此 Apple 开发人员问答的示例代码的精确副本: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 上进行测试。

提前致谢!

【问题讨论】:

    标签: iphone objective-c video-capture


    【解决方案1】:

    我将相同的代码复制并粘贴到一个新项目中,它对我来说很好用。 这是我所做的:

    我在 XCode 中创建了一个基于视图的应用程序。

    我添加了以下框架:CoreMedia、CoreVideo、AVFoundation

    我将 AVFoundation 导入到我的视图控制器的头文件中

    我指定我的视图控制器在其接口定义中使用 AVCaptureVideoDataOutputSampleBufferDelegate 协议

    在实现中,我从您在问题中指定的应用文档中复制了代码

    我注释掉了这个:

     [self setSession:session]
    

    我注释掉了这个:

    UIImage *image = [self imageFromSampleBuffer:sampleBuffer];
    

    并添加了这个:

    NSLog(@"here");
    

    在我放的viewDidLoad方法中

     [self setupCaptureSession];
    

    构建。跑。 “这里”会重复打印到控制台。

    【讨论】:

    • 感谢您的帮助;方向很明确,效果很好。我仍然想知道为什么 UIView 方法不起作用,但我想我会选择现在有效的方法。
    • 嗨。 UIView 方法确实有效。事实上,您可以通过将 UIImageView 的图像属性设置为委托函数中返回的 UIImage 来轻松制作相机预览器。事实上,如果您按照上述说明操作,但没有注释掉 UIImage 内容并将 UIImage 添加到您的视图控制器,那么您就可以开始使用了,因为 UIImageViews 图像属性具有保留功能,您不必担心释放图像。如果您需要代码,请告诉我
    • 我不认为您在某个地方可以下载完整的 xcode 项目?
    • 很遗憾没有。但我认为用 UIView 的东西完成上述过程并不难
    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2016-10-19
    • 1970-01-01
    相关资源
    最近更新 更多