5

我有一个AVCaptureVideoPreviewLayer(可以很好地显示视频全屏),我试图在另一个小视图中显示一个小预览,该小视图已添加为子视图。为此,我试图使用renderInContext,但我得到的只是“预览视图”中的黑屏。

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

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

4

1 回答 1

8

AVCaptureVideoPreviewLayer 被实现为一个 OpenGL 层,它没有实现 renderInContext 以及 CoreAnimation 组合模型的其他一些方面,无论这意味着什么。

在 renderInContext 的 CALayer 文档中引用 Apple

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

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

我处理的方法是使用AVCaptureVideoDataOutput捕获的样本缓冲区并将其发送到一个方便的代码样本中,该代码样本imageFromSampleBuffer:由 Apple 在技术 QA1702中发布。

于 2012-05-15T20:58:37.043 回答