AVCaptureVideoPreviewLayer不使用renderInContext

Nic*_*ard 5 cocoa-touch objective-c avfoundation uiview ios

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

[[self.captureView.layer.sublayers objectAtIndex:0] renderInContext:context];
Run Code Online (Sandbox Code Playgroud)

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

wob*_*als 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捕获的样本缓冲区并将其发送到imageFromSampleBuffer:Apple在技术QA1702中发布的一个方便的代码示例中.