Android Capture Surface Flinger

时间:2013-04-12 04:52:45

标签: android surfaceview framebuffer surfaceflinger

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

我想知道如何从Surface Flinger获取最终的构图数据?

如果我们可以从表面抛光器获得捕获,它可以帮助我们检索视频和相机预览,尽管没有帧缓冲。

1 个答案:

答案 0 :(得分:1)

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

可以捕捉合成的屏幕;例如,系统UI用于获取最近的应用程序菜单的屏幕截图,DDMS / ADT可以捕获屏幕截图以进行调试。但是,您需要相应的权限才能执行此操作,并且普通应用程序不具备此权限。限制某些网络钓鱼方案更难。

在任何情况下,您都无法捕获受DRM保护的视频。甚至SurfaceFlinger都没有看到它。

在shell中,您可以使用screencap命令(请参阅source code)。