AVCaptureVideoPreviewLayer不使用renderInContext

时间:2012-04-22 18:03:11

标签: objective-c ios cocoa-touch uiview avfoundation

我有一个AVCaptureVideoPreviewLayer(可以正常显示视频全屏),我试图在另一个小视图中显示一个小预览,我已添加为子视图。要做到这一点,我试图使用renderInContext,但我得到的只是我的“预览视图”中的黑屏。

[[self.captureView.layer.sublayers objectAtIndex:0] renderInContext:context];

任何其他图层似乎工作正常并显示在我的“预览视图”中,为什么AVCaptureVideoPreviewLayer没有?

1 个答案:

答案 0 :(得分:8)

AVCaptureVideoPreviewLayer是作为OpenGL层实现的,它不会实现renderInContext以及CoreAnimation组合模型的其他方面,无论这意味着什么。

renderInContext的CALayer文档中的

Quoth Apple

  

重要说明此方法的Mac OS X v10.5实现不支持整个Core Animation组合模型。不渲染QCCompositionLayer,CAOpenGLLayer和QTMovieLayer图层。此外,不渲染使用3D变换的图层,也不渲染指定backgroundFilters,filters,compositingFilter或蒙版值的图层。未来版本的Mac OS X可能会增加对渲染这些图层和属性的支持。

从iOS 5.1.1开始,情况仍然如此。

我处理的方法是使用AVCaptureVideoDataOutput并将捕获的样本缓冲区发送到Apple在technical QA1702中发布的名为imageFromSampleBuffer:的便捷代码示例。