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



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

我使用这个答案中的代码描述的"渲染到纹理"方法来捕捉屏幕并为cocos2d游戏编写视频。我做的一个修改是,当我调用CVOpenGLESTextureCacheCreate时,我使用[EAGLContext currentContext]而不是

[[GPUImageOpenGLESContext sharedImageProcessingOpenGLESContext] context]

它确实录制了视频,但有两个问题

(1) -当它开始录制时,屏幕上的新绘图就会停止。我希望这个应用程序也能继续在屏幕上绘图。由于我是OpenGL ES的新手,我对帧缓冲区对象等没有深入的了解,所以我很难弄清楚如何同时在屏幕上绘制和捕捉屏幕。我会很欣赏这方面的代码示例。

(2) -录制的视频被倒置。我怎样才能把它指向正确的方向?

以前我也考虑过glReadPixels方法,但这有性能缺陷。

更新:我还想到了几个想法。据我所知,

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

我可以有一个次要的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?

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

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

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

相关内容

  • 没有找到相关文章

最新更新