0

许多设备不会将最终显示数据存储在帧缓冲区中,因此屏幕捕获方法不适用于这些设备。

我想知道如何从 Surface Flinger 获得最终的成分数据?

如果我们可以实现从表面抛掷器的捕获,它可以帮助我们在没有帧缓冲区的情况下检索视频和相机预览。

4

1 回答 1

1

您不需要或不需要最终合成的视频数据。要录制相机预览,您只需将其输入到MediaCodec(需要 Android 4.1,API 16)。在 Android 4.3 (API 18) 中,通过对类的一些调整MediaCodec和引入,这变得更加容易MediaMuxer。有关示例,请参阅此页面,尤其是CameraToMpegTest.

可以截取合成画面;例如,系统 UI 会为最近的应用程序菜单抓取屏幕截图,而 DDMS/ADT 可以捕获屏幕截图以进行调试。但是,您需要适当的权限才能执行此操作,而普通应用程序没有。限制使某些网络钓鱼计划更难。

在任何情况下,您都无法捕获受 DRM 保护的视频。甚至 SurfaceFlinger 也看不到这一点。

在 shell 中,您可以使用screencap命令(参见源代码)。

于 2013-07-30T05:08:00.907 回答