9

经过大量搜索和几天的实验,我还没有找到一个直接的解决方案。

我正在开发一个应用程序,用户将在屏幕上与宠物互动,我想让他将其保存为视频。

是否有任何“简单”的方法来捕获应用程序本身的屏幕?

我找到了一种解决方法(每秒保存一些位图,然后将它们传递给编码器),但它似乎太重了。即使帧率为 15fps 我也会很高兴

这似乎是可能的,即有一个类似的应用程序可以做到这一点,它被称为“会说话的汤姆”

4

1 回答 1

2

这实际上取决于您实现“宠物视图”的方式。你在画布上画画吗?OpenGL ES?普通的Android视图层次结构?

无论如何,没有像其中一条评论所说的那样神奇的“recordScreenToVideo()”。

你需要:

  • 获取代表您的“框架”的位图。这取决于您如何实现您的视图。如果您自己绘制(Canvas 或 OpenGL),则将原始像素缓冲区保存为帧。如果您使用普通视图层次结构,则将 Android 的 onDraw 子类化并保存您在画布上获得的“帧”。系统调用 onDraw 的频率不会低于屏幕的实际“帧率”。如果需要,之后复制帧以提供 15fps 的视频。

  • 编码你的帧。好像你已经有一个机制来做到这一点,你只需要它更有效率。

优化编码的方法:

  • 缓存您的位图(帧)并在之后进行编码。这仅在您预期的视频相对较短时才有效,否则您将无法存储。
  • 仅以您的应用实际生成的帧速率录制(取决于您绘制的方式)并使用编码器参数生成 15fps 视频(实际上不提供每秒 15 帧)。
  • 调整当前设备的质量设置。可以通过在应用启动时执行隐藏的 CPU 周期测试并定义一些阈值来完成。
  • 仅对屏幕最相关的部分进行编码。
  • 同样,实际上取决于您实施的方式 - 如果您可以保存一些“历史数据”,然后将其转换为帧而无需实时执行,那将是最好的。例如,“移动”、“微笑”、“改变颜色”——或者任何你的业务逻辑,因为你没有详细说明。您的“生成电影”功能会将这些历史数据动画化为帧序列(不绘制到屏幕上),然后进行编码。

希望有帮助

于 2013-01-19T18:28:30.060 回答