【发布时间】:2013-04-12 04:52:44
【问题描述】:
许多设备不会将最终显示数据存储在帧缓冲区中,因此屏幕捕获方法在这些设备上不起作用。
我想知道如何从 Surface Flinger 中获取最终的成分数据?
如果我们可以从surface flinger实现捕获,它可以帮助我们在没有帧缓冲区的情况下检索视频和相机预览。
【问题讨论】:
标签: android surfaceview framebuffer surfaceflinger
许多设备不会将最终显示数据存储在帧缓冲区中,因此屏幕捕获方法在这些设备上不起作用。
我想知道如何从 Surface Flinger 中获取最终的成分数据?
如果我们可以从surface flinger实现捕获,它可以帮助我们在没有帧缓冲区的情况下检索视频和相机预览。
【问题讨论】:
标签: android surfaceview framebuffer surfaceflinger
您不需要或不需要最终合成的视频数据。要录制相机预览,您只需将其输入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)。
【讨论】: