我有一个AVCaptureVideoPreviewLayer
(可以正常显示视频全屏),我试图在另一个小视图中显示一个小预览,我已添加为子视图。要做到这一点,我试图使用renderInContext
,但我得到的只是我的“预览视图”中的黑屏。
[[self.captureView.layer.sublayers objectAtIndex:0] renderInContext:context];
任何其他图层似乎工作正常并显示在我的“预览视图”中,为什么AVCaptureVideoPreviewLayer
没有?
答案 0 :(得分:8)
AVCaptureVideoPreviewLayer是作为OpenGL层实现的,它不会实现renderInContext以及CoreAnimation组合模型的其他方面,无论这意味着什么。
renderInContext的CALayer文档中的重要说明此方法的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:
的便捷代码示例。