Android 应用程序,通过Presentation
类和相关设施,可以在外部显示器(HDMI、MHL、Miracast 等)上显示单独的内容,而不是在手机或平板电脑自己的触摸屏(我在这里称之为“主显示器”)上显示单独的内容。
对于主显示器,我们可以使用screencap
或者DDMS做截图。
有没有办法对外接显示器进行截图?
理想情况下,这将是一个类似于以下用途的解决方案screencap
/DDMS,没有应用程序修改。然而,涉及以某种方式复制内容的解决方案Window
代表外部显示器也很有趣。
没有用于捕获外部显示器的操作系统功能。
主显示器由多个源合成,外部显示器也是如此。 “屏幕捕获”功能实际上只是合成各种源的另一种方式。因为它使用与主显示器相同的参数,所以您会得到相同的输出。 (请注意,任何“安全”层,例如受 DRM 保护的视频,都不会出现。)因此,要“捕获”外部显示器,您需要使用外部显示器“层堆栈”而不是使用外部显示器“层堆栈”的屏幕捕获变体。 main,并且没有 API 可以执行此操作。
(See SurfaceFlinger::captureScreenImplLocked()
in SurfaceFlinger.cpp https://android.googlesource.com/platform/frameworks/native/+/lollipop-release/services/surfaceflinger/SurfaceFlinger.cpp.)
The screenrecord
命令执行类似的操作:它使用主显示器的图层堆栈创建一个虚拟显示器,并捕获在那里渲染的任何内容。
至于捕获 a 的输出Presentation
是的,有几个 CTS 测试可能令人感兴趣。这虚拟显示测试 https://android.googlesource.com/platform/cts/+/lollipop-release/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java创建一个Presentation
并用一个捕获它图像读取器 https://developer.android.com/reference/android/media/ImageReader.html, while 编码虚拟显示测试 https://android.googlesource.com/platform/cts/+/lollipop-release/tests/tests/media/src/android/media/cts/EncodeVirtualDisplayTest.java通过完整的视频编码/解码路径提供演示文稿。测试只是绘制一系列颜色,然后检查以确保颜色可以被读回。这两者都需要最新版本的 Android(例如ImageReader
直到 API 19 才存在),并且应用程序的有限权限将限制输出为应用程序本身正在渲染的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)