在Android上的应用程序内屏幕录制,每秒捕获15帧

时间:2012-12-11 23:44:59

标签: android screen-capture

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

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

有没有“简单”的方法来捕捉应用程序本身的屏幕?

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

似乎有可能,即有一个类似的应用程序,它称为“会说话的汤姆”

1 个答案:

答案 0 :(得分:2)

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

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

你需要:

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

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

您可以优化编码方式:

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

希望有所帮助