作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在从 iPhone 摄像头抓取实时视频帧,并将它们作为纹理应用到平面 OpenGL 几何体上,以便使用着色器来处理摄像头输入。有谁知道是否可以获取处理后的纹理并将其存储在电影文件中?
这似乎需要大量的处理能力,而且我不确定最好的处理方法是什么——或者是否可能。这里的动机是能够对从相机抓取的视频进行有趣的着色器效果,然后存储结果以与其他人分享。
预先感谢您的想法。
最佳答案
我无法评论性能,但您想要做的是:
AVAssetWriter
(它可以获取传入的样本并以 H.264 格式写出它们;当前的 iOS 版本似乎不支持其他文件格式)AVAssetWriterInput
附加到 Assets 编写器以提供视频帧(因为 Assets 编写器采用一个或多个输入,每个输入提供 Assets 的不同方面);AVAssetWriterInputPixelBufferAdaptor
附加到 Assets 编写器输入,以便您可以在输入处推送像素缓冲区。您需要告诉 Assets 编写者输入,它需要实时媒体数据。这样做告诉它只是尝试随时准备好输入。您可以在提供帧时指定帧时序,因此不会对代码的其余部分提出性能要求。从那里,您只需将 CVImageBuffers 推送到像素缓冲区适配器即可。 OS X 中有一个方便的 Core Video OpenGL 缓冲区类型,但 iOS 上似乎不存在。相反,您需要使用 glReadPixels
以及 CVPixelBufferCreate
等,锁定像素缓冲区并直接写入其基地址。希望您能得到可以直接传递给 OpenGL 的东西,而无需在中间打乱字节。
假设 iPhone 有一个专用的 H.264 编码器,主要的性能瓶颈可能是 glReadPixels,导致帧缓冲区中的任何内容都需要为 CPU 传输和重新格式化。如果您将其全部设置好并且结果看起来很慢,我会首先调查那里。
关于iphone - OpenGL ES : storing a series of textures as a movie file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4889300/
我是一名优秀的程序员,十分优秀!