问题标签 [android-mediaprojection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
868 浏览

java - 如何使用 Android API MediaProjection 从后台服务定期录制屏幕?

您好,我正在 Android 上构建一个弱 AI(机器人)应用程序,但我对此很陌生。

上下文:该应用程序是/将由一个 UI 组成,用于启动/停止机器人并修改其设置,屏幕捕获服务以固定间隔(例如每 5 秒)截屏,图像识别模块(OpenCv)和一个触摸模拟服务(Instrumentation 类,MotionEvent 类)。显然,除了 UI,每个模块都应该能够在机器人启动后在后台运行。

问题:制作可以从后台以固定间隔捕获屏幕的服务的最有效、最有意义的方法是什么?

我查找了 MediaProjection API 文档和演示,然后我开始制作一个使用 MediaProjection 记录屏幕的 IntentService 和一个 Timer + 预定 TimerTask 来保存位图,但我有点迷路了。这是我到目前为止所拥有的:

已移除

我觉得我做错了。你能帮我弄清楚如何通过解释、建议、片段、tutos 或任何有用的东西来做到这一点吗?

编辑:确实,使用运行时执行 adb shell 命令要简单得多。 另外,这允许在计算机上进行图像处理,速度更快

0 投票
0 回答
144 浏览

android - Android MediaProjection 可以记录对象(仅活动)?

从棒棒糖版本开始,MediaProjection API 发布,截屏或录制屏幕变得更加容易。

但我想记录我想要的屏幕。它更像是“对象记录”而不是整个屏幕。例如,当用户执行下拉通知栏等操作或屏幕上弹出推送通知消息时,我想在我的记录中排除这些情况。

是否有任何其他 API 支持我想要的?或者只是 MediaProjection API 已经具有这种功能?

0 投票
1 回答
874 浏览

android - 使用模拟器的 MediaProjection API 进行捕获会生成黑屏

我正在尝试使用 MediaProjection API 和 ImageReader 来捕获模拟器屏幕。但它总是产生黑屏。代码如下。

我已经提到Take a screenshot using MediaProjection and Android ImageReader.acquireLatestImage return invalid JPG \ reader-acquirelatestimage-returns-invalid-jpg 它们适用于真实设备,但不适用于模拟器。

如何使用模拟器进行屏幕截图?我的实现有问题吗?你有什么想法?

感谢所有帮助!

0 投票
1 回答
1078 浏览

android - Android 上的 Image.getPlanes() 太重了

伙计们,

我正在使用 MediaProjection API 在 Android 上开发屏幕捕获应用程序。

我正在使用 ImageReader 来实现它,但 Image.getPlanes() 太重而无法捕获实时屏幕。

由于 Image.getPlanes() 阻塞了主线程,因此它丢失了太多帧而无法看到平滑渲染的屏幕。当我注释掉它时,ImageReader 获取的图像比以前多。

我不能在后台执行 Image.getPlanes(),因为在调用 Image.close() 之后调用了 onImageAvailable。

所以,我的问题是:

  • 为什么 Image.getPlanes() 这么重?
  • 有什么办法可以实现流畅的截屏吗?

代码如下。

感谢您的帮助!

问题已更新

0 投票
0 回答
1024 浏览

android - 使 FLAG_SECURE 窗口在 Android 上的屏幕截图中不可见

我有一个带有标志 FLAG_SECURE 的浮动窗口。它成功地从我设置的屏幕截图和 MediaProjection 中隐藏起来。当我通过 MediaProjection 录制时,它显示为黑色矩形对象。我的浮动窗口中的所有东西都被涂黑了。

我的问题是,是否可以隐藏这个浮动窗口?我的意思是不将其显示为黑色对象,而是在浮动窗口下捕获内容,以便将其完全隐藏在 MediaProjection 中?

0 投票
1 回答
1274 浏览

android - 通过网络传输 MediaProjection API 的输出

我一直在阅读 MediaProjection API,并在 Github 上查看了一些示例项目,展示了如何使用它。
所有这些项目只展示了如何将屏幕截图保存在文件中(记录屏幕),而没有显示将其实时传输到另一台设备(截屏)。

我不确定这是否可以通过此 API 实现,但后来我阅读了文档

截屏和分享

Android 5.0 允许您使用新的 android.media.projection API 为您的应用添加屏幕捕获和屏幕共享功能。此功能很有用,例如,如果您想在视频会议应用程序中启用屏幕共享。

新的createVirtualDisplay()方法允许您的应用程序将主屏幕(默认显示)的内容捕获到 Surface 对象中,然后您的应用程序可以通过网络发送该对象。该 API 仅允许捕获非安全屏幕内容,而不是系统音频。要开始截屏,您的应用必须首先通过使用通过 createScreenCaptureIntent() 方法获得的 Intent 启动截屏对话框来请求用户的许可。

有关如何使用新 API 的示例,请参阅示例项目中的 MediaProjectionDemo 类。

我整天都在寻找有关如何使用 Surface 对象传输数据,然后在另一台设备上接收并显示它们的示例,但没有运气。

所以问题是,怎么做?谁能指出我正确的方向?

0 投票
1 回答
2226 浏览

android - 使用 mediaprojection 的屏幕记录是黑色的

我正在尝试使用MediaProjectionAPI 录制屏幕,但我似乎总是只得到一个黑色视频(整个视频长度显示为黑色),我对原因一无所知。我startRecording()在初始化MediaProjectionManager之后打电话,然后打电话releaseEncoders()停止录音。这是我的代码:

0 投票
1 回答
650 浏览

android - 在 MediaProjection 中完全隐藏安全视图 - android

我正在使用 MediaProjection API 创建一个屏幕录像机应用程序。在我的应用程序中,我将停止按钮显示为一个小的覆盖窗口。我已将此视图保持为安全状态,因此它不会出现在最终录制的视频中。

此视图不会出现在最终视频中,但最终输出本身就是一个黑色区域,而不是原始视图。

没有这个黑色区域,是否有可能获得最终的视频输出?

0 投票
0 回答
1258 浏览

android - Android:在不创建新活动的情况下开始屏幕截图


我正在尝试使用 MediaProjection 录制屏幕视频。我想在同一个活动中捕获视频,而不是开始另一个活动。

我已经完成了一些教程。在这些教程中,调用 startActivityForResultcreateScreenCaptureIntent()作为第一个参数,它基本上要求权限并开始屏幕捕获。并且resultCode传递给getMediaProjection()

必须捕获主要活动,因此只需替换帧而不是新活动。我在主要活动中有一个浮动按钮,听停止录音。

所以,我想知道这是否可能?或者,如果我们可以创建一个导致相同事件的类似场景,当然不创建一个新活动?或者如果这不可能,鉴于我们现在处于新活动中,我们如何停止录制。
感谢您的时间。

0 投票
1 回答
4327 浏览

java - 流式安卓屏幕

我正在尝试使用Truiton ScreenCapture示例,以便使用MediaProjection记录设备屏幕

在本地保存记录时,它可以工作

但是,当更改为使用 FileDescriptor 时,它不是

如果不使用LocalServerSocket,则mMediaRecorder.prepare()抛出异常,现在我正在使用它,在下面的方法中获取异常mMediaRecorder.getSurface()

例外

这是我的 Java 服务器,在mMediaRecorder.prepare()调用后我得到了套接字,并且它卡在inputStream.read了 eccpected 上。当我打电话时,Android 中的异常发生mMediaRecorder.start()