【问题标题】:Android record screen but only specific 'layers'/viewsAndroid 记录屏幕,但只有特定的“层”/视图
【发布时间】:2016-03-14 11:30:32
【问题描述】:

我使用 MediaProjection API 在 Android 中录制屏幕。现在我想知道是否可以创建一个“隐藏”视图,您实际上可以看到但在视频中看不到,因此不应记录该视图。此外,是否可以禁用通知记录甚至通知中心?

那么是否可以像“表面层系统”一样进行配置,从而您可以决定要记录哪一层?

【问题讨论】:

    标签: android android-mediaprojection


    【解决方案1】:

    可以通过设置"secure" flag 来防止图层出现在记录中。例如,参见Grafika 中的“多表面测试”,它在其 SurfaceView 之一上设置标志。

    如果您直接使用createVirtualDisplay(),而不是通过 MediaProjectionManager,您将配置一个虚拟显示器以仅显示您的应用程序自己的窗口。因为您正在为自己的内容创建显示,所以不会显示用户权限对话框。例如,请参阅 the tests 以获取 DisplayManager#createVirtualDisplay()

    【讨论】:

    • 不知道SurfaceView以外的其他View是否也可以使用?此外,我已经使用 WindowManager 对其进行了测试,您也可以设置一个安全标志,但问题是当我播放视频时,WindowManager 中的视图是“黑色背景”,但我希望视图不应该完全出现在录制的视频中。
    • 所有视图都由应用程序本身绘制在一个图层上。 SurfaceView 的 Surface 是一个独立的层,由系统图形合成器(SurfaceFlinger)处理。 “安全”标志适用于整个层,这就是您可以隐藏 Surface,但不能隐藏单个视图的原因。如果您创建一个演示文稿,您可以在其上放置您想要的任何视图;这可能比镜像显示对您更有用。 (我的答案中链接的测试会创建一个演示文稿并在其上放置一个 ImageView。)
    • 问题是我想在我的主应用程序之外录制,因此用户可以在主屏幕或其他应用程序中进行操作。另外我想给他一个浮动的覆盖控制面板,他可以与之交互(停止/暂停录制)。但是这个覆盖面板不应该出现在录音中,而应该只出现在用户面前。我设法使用 WindowManager 做到这一点并将其设置为安全,但它仍然作为空白视图出现在视频中。我现在试图弄清楚如何使这个透明或不可见而不是空白视图。
    • 我明白了...所以你想要完整的设备记录,但安全层被视为不可见而不是黑色。我不知道有什么方法可以做到这一点。您可能需要在 SurfaceFlinger 中定义一个“层堆栈”而不是省略不需要的层......我认为它总是会在不安全的显示器上遮盖安全层 (android.googlesource.com/platform/frameworks/native/+/…)。
    • 你有没有找到解决这个 Azrael 的方法?
    【解决方案2】:

    您可以使用EZ filter 记录特定布局。

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多