首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在iOS中使用视频作为GL的纹理?

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

Stack Overflow用户
提问于 2010-11-21 19:12:14
回答 2查看 8.7K关注 0票数 11

是否可以使用视频(预渲染,使用H.264压缩)作为iOS中GL的纹理?

如果可能的话,怎么做呢?是否有播放质量/帧率或限制?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-22 10:00:39

从iOS 4.0开始,您可以使用AVCaptureDeviceInput将摄影机作为设备输入,并将其连接到将任何您喜欢的对象设置为代理的AVCaptureVideoDataOutput。通过为相机设置32bpp的BGRA格式,代理对象将从相机接收到的每一帧帧的格式都非常适合立即传递给glTexImage2D (如果设备不支持非2次方纹理,则为glTexSubImage2D;我认为MBX设备就属于这一类)。

有一堆帧大小和帧速率选项;在猜测中,你必须根据你想要使用GPU的多少来调整它们。我发现,一个完全平凡的场景,只有一个纹理四边形显示了最新的帧,只有当新帧到达iPhone 4时才重新绘制,能够显示该设备的最大720p 24fps视频,而没有任何明显的延迟。我还没有做过比这更彻底的基准测试,所以希望其他人能给我一些建议。

原则上,根据API,帧可以在扫描行之间返回一些内存填充,这意味着在发布到GL之前需要对内容进行一些混洗,因此您确实需要为此实现代码路径。在实践中,纯粹从经验上讲,当前版本的iOS似乎从未以这种形式返回图像,因此这并不是一个真正的性能问题。

编辑:现在已经非常接近三年后了。在此期间,苹果发布了iOS 5、6和7。他们在5中推出了CVOpenGLESTextureCVOpenGLESTextureCache,它们现在是将视频从采集设备传输到OpenGL的智能方式。苹果提供了示例代码here,其中特别有趣的部分在RippleViewController.m中,特别是它的setupAVCapturecaptureOutput:didOutputSampleBuffer:fromConnection: -参见第196-329行。遗憾的是,条款和条件避免了此处的代码复制,而不是附加整个项目,但逐步设置是:

使用video;

  • create device;

  • attach
  1. 创建CVOpenGLESTextureCacheCreateAVCaptureSession;
  2. grab适当AVCaptureDeviceInput AVCaptureVideoDataOutput,并告诉它调用您作为示例缓冲区委托。

在接收到每个采样缓冲器时:

  1. 从中获取CVImageBufferRef
  2. 使用CVOpenGLESTextureCacheCreateTextureFromImage从CV图像缓冲区中获取Y和UV纹理;
  3. 从CV OpenGLES纹理引用中获取纹理目标和名称,以便在着色器中绑定them;
  4. combine亮度和色度。<代码>H236<代码>G237
票数 19
EN

Stack Overflow用户

发布于 2015-04-07 01:24:01

有关如何进行OpenGL视频渲染的更好示例,请使用RosyWriter。性能非常好,特别是如果您降低帧率(在1080P/30时约为10%,在1080P/15时为>=5% )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4237538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档