问题标签 [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.
java - 如何使用 Android API MediaProjection 从后台服务定期录制屏幕?
您好,我正在 Android 上构建一个弱 AI(机器人)应用程序,但我对此很陌生。
上下文:该应用程序是/将由一个 UI 组成,用于启动/停止机器人并修改其设置,屏幕捕获服务以固定间隔(例如每 5 秒)截屏,图像识别模块(OpenCv)和一个触摸模拟服务(Instrumentation 类,MotionEvent 类)。显然,除了 UI,每个模块都应该能够在机器人启动后在后台运行。
问题:制作可以从后台以固定间隔捕获屏幕的服务的最有效、最有意义的方法是什么?
我查找了 MediaProjection API 文档和演示,然后我开始制作一个使用 MediaProjection 记录屏幕的 IntentService 和一个 Timer + 预定 TimerTask 来保存位图,但我有点迷路了。这是我到目前为止所拥有的:
已移除
我觉得我做错了。你能帮我弄清楚如何通过解释、建议、片段、tutos 或任何有用的东西来做到这一点吗?
编辑:确实,使用运行时执行 adb shell 命令要简单得多。 另外,这允许在计算机上进行图像处理,速度更快
android - Android MediaProjection 可以记录对象(仅活动)?
从棒棒糖版本开始,MediaProjection API 发布,截屏或录制屏幕变得更加容易。
但我想记录我想要的屏幕。它更像是“对象记录”而不是整个屏幕。例如,当用户执行下拉通知栏等操作或屏幕上弹出推送通知消息时,我想在我的记录中排除这些情况。
是否有任何其他 API 支持我想要的?或者只是 MediaProjection API 已经具有这种功能?
android - 使用模拟器的 MediaProjection API 进行捕获会生成黑屏
我正在尝试使用 MediaProjection API 和 ImageReader 来捕获模拟器屏幕。但它总是产生黑屏。代码如下。
我已经提到Take a screenshot using MediaProjection and Android ImageReader.acquireLatestImage return invalid JPG \ reader-acquirelatestimage-returns-invalid-jpg 它们适用于真实设备,但不适用于模拟器。
如何使用模拟器进行屏幕截图?我的实现有问题吗?你有什么想法?
感谢所有帮助!
android - Android 上的 Image.getPlanes() 太重了
伙计们,
我正在使用 MediaProjection API 在 Android 上开发屏幕捕获应用程序。
我正在使用 ImageReader 来实现它,但 Image.getPlanes() 太重而无法捕获实时屏幕。
由于 Image.getPlanes() 阻塞了主线程,因此它丢失了太多帧而无法看到平滑渲染的屏幕。当我注释掉它时,ImageReader 获取的图像比以前多。
我不能在后台执行 Image.getPlanes(),因为在调用 Image.close() 之后调用了 onImageAvailable。
所以,我的问题是:
- 为什么 Image.getPlanes() 这么重?
- 有什么办法可以实现流畅的截屏吗?
代码如下。
感谢您的帮助!
问题已更新
android - 使 FLAG_SECURE 窗口在 Android 上的屏幕截图中不可见
我有一个带有标志 FLAG_SECURE 的浮动窗口。它成功地从我设置的屏幕截图和 MediaProjection 中隐藏起来。当我通过 MediaProjection 录制时,它显示为黑色矩形对象。我的浮动窗口中的所有东西都被涂黑了。
我的问题是,是否可以隐藏这个浮动窗口?我的意思是不将其显示为黑色对象,而是在浮动窗口下捕获内容,以便将其完全隐藏在 MediaProjection 中?
android - 通过网络传输 MediaProjection API 的输出
我一直在阅读 MediaProjection API,并在 Github 上查看了一些示例项目,展示了如何使用它。
所有这些项目只展示了如何将屏幕截图保存在文件中(记录屏幕),而没有显示将其实时传输到另一台设备(截屏)。
我不确定这是否可以通过此 API 实现,但后来我阅读了文档:
截屏和分享
Android 5.0 允许您使用新的 android.media.projection API 为您的应用添加屏幕捕获和屏幕共享功能。此功能很有用,例如,如果您想在视频会议应用程序中启用屏幕共享。
新的createVirtualDisplay()方法允许您的应用程序将主屏幕(默认显示)的内容捕获到 Surface 对象中,然后您的应用程序可以通过网络发送该对象。该 API 仅允许捕获非安全屏幕内容,而不是系统音频。要开始截屏,您的应用必须首先通过使用通过 createScreenCaptureIntent() 方法获得的 Intent 启动截屏对话框来请求用户的许可。
有关如何使用新 API 的示例,请参阅示例项目中的 MediaProjectionDemo 类。
我整天都在寻找有关如何使用 Surface 对象传输数据,然后在另一台设备上接收并显示它们的示例,但没有运气。
所以问题是,怎么做?谁能指出我正确的方向?
android - 使用 mediaprojection 的屏幕记录是黑色的
我正在尝试使用MediaProjection
API 录制屏幕,但我似乎总是只得到一个黑色视频(整个视频长度显示为黑色),我对原因一无所知。我startRecording()
在初始化MediaProjectionManager
之后打电话,然后打电话releaseEncoders()
停止录音。这是我的代码:
android - 在 MediaProjection 中完全隐藏安全视图 - android
我正在使用 MediaProjection API 创建一个屏幕录像机应用程序。在我的应用程序中,我将停止按钮显示为一个小的覆盖窗口。我已将此视图保持为安全状态,因此它不会出现在最终录制的视频中。
此视图不会出现在最终视频中,但最终输出本身就是一个黑色区域,而不是原始视图。
没有这个黑色区域,是否有可能获得最终的视频输出?
android - Android:在不创建新活动的情况下开始屏幕截图
我正在尝试使用 MediaProjection 录制屏幕视频。我想在同一个活动中捕获视频,而不是开始另一个活动。
我已经完成了一些教程。在这些教程中,调用 startActivityForResultcreateScreenCaptureIntent()
作为第一个参数,它基本上要求权限并开始屏幕捕获。并且resultCode
传递给getMediaProjection()
必须捕获主要活动,因此只需替换帧而不是新活动。我在主要活动中有一个浮动按钮,听停止录音。
所以,我想知道这是否可能?或者,如果我们可以创建一个导致相同事件的类似场景,当然不创建一个新活动?或者如果这不可能,鉴于我们现在处于新活动中,我们如何停止录制。
感谢您的时间。
java - 流式安卓屏幕
我正在尝试使用Truiton ScreenCapture示例,以便使用MediaProjection记录设备屏幕
在本地保存记录时,它可以工作
但是,当更改为使用 FileDescriptor 时,它不是
如果不使用LocalServerSocket,则mMediaRecorder.prepare()
抛出异常,现在我正在使用它,在下面的方法中获取异常mMediaRecorder.getSurface()
例外
这是我的 Java 服务器,在mMediaRecorder.prepare()
调用后我得到了套接字,并且它卡在inputStream.read
了 eccpected 上。当我打电话时,Android 中的异常发生mMediaRecorder.start()