如何在 iPhone 上像 Talking Tomcat 应用程序一样录制屏幕视频?

5

嘿,我正在尝试录制我的游戏玩法,以便可以从设备本身上传其视频到 YouTube...我正试图做与 Talking tomcat iPhone 应用程序相同的事情...录制视频然后播放等。

我正在使用 glReadPixels() 读取帧缓冲区数据,然后借助 AVFoundation 框架中的 AVAssetWriter 将其写入视频。但是,在每次绘图时读取数据会使 FPS 从大约 30-35 下降到仅约为 2-3。

我认为 Talking tomcat 也是使用 Opengl ES 制作的,它也具有视频录制功能,但在读取每一帧时不会减慢速度,您有什么想法吗?


嗨,我在代码上遇到一些问题,是关于同一个事情的。 我的视频中无法添加声音到视频中。你是如何将声音添加到视频文件中的? - Johnykutty
许多帖子涵盖了这个主题...请参阅以下链接:http://stackoverflow.com/questions/tagged/avassetwriter - Tornado
2个回答

8

如果有人想要实现相同的功能...我自己摸索出来了。 首先令我惊讶的是,Talking Tomcat 不是一个 3D 游戏应用程序...它使用帧动画来进行所有运动。如果有人想要捕捉这种视角,那么可以使用以下代码:

UIGraphicsBeginImageContext(self.view.bounds.size); //self.view.window.frame.size
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

然后使用AVAssetWriter从这些帧创建视频。当然,你可以在其他帖子中找到相关代码...对我来说并不有用,因为我需要捕捉3D部分... 干杯!


嗨,我在搜索这个问题并找到了这篇文章...感谢你给我指路...点赞给你 :) - DivineDesert
请查看我的帖子 https://dev59.com/5V3Va4cB1Zd3GeqPE-dF ,如果您知道,请回复它。我们将在周一上午的聊天中见面... - DivineDesert
AVPlayerLayer无法被[avplayerLayer renderInContext:UIGraphicsGetCurrentContext()];所捕获。 - Selvam M

0

这个问题并不新,但我想我可以提供一些帮助:

我们提供了一个名为“Everyplay”的 SDK,它可以让您做到您所需要的功能。它是免费使用的,并且非常轻巧。

我们为 Unity3D、cocos2d (1.x, 2.x)、cocos2d-x 提供了开箱即用的集成,当然您也可以集成到自定义的基于 OpenGL 的游戏引擎中。

文档可以在 https://developers.everyplay.com/doc 中找到。

文档包含一个示例应用密钥,可用于开发,但您当然也可以在 https://developers.everyplay.com/ 上申请自己的客户端密钥。


Everyplay仍需要许多改进。特别是面部摄像记录与预览不同。在录制的视频中,设置预览摄像头大小/位置的意义是什么?此外,在SpriteKit游戏中声音无法正常工作。 - GeneCode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接