如有可能,怎么办?和播放质量/帧速率还是局限性?
解决方法
有一堆帧大小和帧率选项;猜测你将不得不根据你想要使用GPU的其他方式进行调整.我发现一个完全微不足道的场景,只是一个纹理的四边形显示最新的框架,只有当新的帧到达iPhone 4时才能重新绘制,才能够显示该设备的最大720p 24fps进给,而没有任何明显的滞后.我没有执行任何更彻底的基准测试,所以希望别人可以建议.
原则上,根据API,帧可以在扫描线之间返回一些内存中的填充,这意味着在发布到GL之前会发生一些内容的混洗,因此您需要实现一个代码路径.实际上,纯粹凭经验来看,现在的iOS版本似乎从来没有返回这种形式的图像,所以它并不是一个性能问题.
编辑:现在已经非常接近三年了.在此期间,苹果已经发布了iOS 5,6和7.有5款,他们引入了CVOpenGLESTexture和CVOpenGLESTextureCache,它们现在是将捕获设备的视频管理到OpenGL的智能方式.苹果提供示例代码here,其中特别有趣的部分在RippleViewController.m中,特别是其setupAVCapture和captureOutput:didOutputSampleBuffer:fromConnection: – 参见第196-329行.令人遗憾的是,条款和条件阻止了这里的代码重复,而不附加整个项目,但分步安装是:
>创建一个CVOpenGLESTextureCacheCreate和一个AVCaptureSession;
抓住适合的视频AVCaptureDevice;
>使用该捕获设备创建一个AVCaptureDeviceInput;
>附加一个AVCaptureVideoDataOutput,并告诉它作为示例缓冲区委托来呼叫你.
收到每个样品缓冲液后:
从它获取CVImageBufferRef;>使用CVOpenGLESTextureCacheCreateTextureFromImage从CV图像缓冲区中获取Y和UV CVOpenGLESTextureRefs;从CV OpenGLES纹理引用获取纹理目标和名称,以便绑定它们;>在着色器中组合亮度和色度.