iOS应用程序的快速屏幕录制

时间:2012-11-17 13:24:53

标签: iphone ios opengl-es opengl-es-2.0 core-video

我是OpenGL ES的新手。 我正在尝试为iOS应用程序的屏幕录制编写代码,尤其是游戏。

我正在使用this answer中的代码描述的'渲染到纹理'方法来捕获屏幕并为cocos2d游戏编写视频。 我做的一个修改是,当我打电话给CVOpenGLESTextureCacheCreate时,我正在使用 [EAGLContext currentContext] 而不是

[[GPUImageOpenGLESContext sharedImageProcessingOpenGLESContext] context]

它会录制视频,但有两个问题

(1) - 当它开始录制时,屏幕上的新绘图停止。我希望应用程序继续在屏幕上绘图。由于我是OpenGL ES的新手,我对帧缓冲对象等没有深刻理解,因此我很难弄清楚如何同时在屏幕上绘图并捕获屏幕。我会很感激这方面的代码示例。

(2) - 录制的视频被颠倒翻转。我怎样才能正确指明它?

之前我也考虑过glReadPixels方法,但这有性能上的缺点。

更新:还想到了一些想法。根据我的理解,

我可以简单地将纹理绘制回屏幕,但不知道如何。

OR

我可以有一个辅助FBO,我可以附加纹理,即

glGenFramebuffersOES(1, &textureFrameBuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, textureFrameBuffer);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, CVOpenGLESTextureGetName(renderTexture), 0);
//Then I restore the screen FBO.
glBindFramebufferOES(GL_FRAMEBUFFER_OES, 1);

但如果我这样做,那么如何将屏幕绘图复制到我的辅助FBO?

1 个答案:

答案 0 :(得分:0)

有现成的解决方案,所以如果你不打算重新发明轮子,你可以尝试Everyplay(https://everyplay.com/about)。

可以在此处找到用于从OpenGL级别录制屏幕的文档:https://developers.everyplay.com/doc/Everyplay-integration-to-iOS-game

免责声明:我为制作Everyplay的公司工作