在iOS中可以使用视频作为GL的纹理吗?

前端之家收集整理的这篇文章主要介绍了在iOS中可以使用视频作为GL的纹理吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用视频(预渲染,H.264压缩)可以在iOS中使用GL的纹理吗?

如有可能,怎么办?和播放质量/帧速率还是局限性?

解决方法

从iOS 4.0开始,您可以使用AVCaptureDeviceInput将相机作为设备输入,并将其连接到AVCaptureVideoDataOutput,并将任何您喜欢设置的对象设置为代理.通过为相机设置一个32bpp BGRA格式,委托对象将以一种格式接收相机中的每个帧,只需将其立即处理为glTex Image2D(如果设备不支持非二次纹理,则为glTexSubImage2D; I认为MBX设备属于这一类).

有一堆帧大小和帧率选项;猜测你将不得不根据你想要使用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纹理引用获取纹理目标和名称,以便绑定它们;>在着色器中组合亮度和色度.

猜你在找的iOS相关文章