问题标签 [android-virtualdisplay]
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.
android-virtualdisplay - 如何附加已经创建的虚拟显示器
我使用 createVirtualDisplay() 方法创建了一个虚拟显示器。单击主页按钮并返回后,我需要重新附加已经创建的虚拟显示器。我也得到了 displayID 和表面。但无法显示虚拟显示器。
android - Android MediaProjection - VirtualDisplay 和 ImageReader 的合适分辨率是多少?
我使用 MediaProjection api 以及 VirtualDisplay 和 ImageReader 来共享屏幕。下面是创建 VirtualDisplay 和 ImageReader 的方法:
并且在 OnimageAvailable 上接收到 rgba 原始字节:
到目前为止,一切都很好,并且框架可以毫无问题地渲染到表面视图上。但事情在这一点上变得有趣:
将宽高改为640 x 480后,效果好一点:
但如您所见,共享屏幕的纵横比有问题。最后,当我将宽度和高度更改为 768 * 1366 时,结果在某种程度上可以接受但
为什么当我为 Imageريالeader 和 VirtualDisplay 设置设备屏幕的宽度和高度时,共享屏幕损坏了?(对于这个设备:宽度=1080 高度=2400)
为什么当我设置高度大于宽度时,共享屏幕是好的?
在上一张图中,共享屏幕并没有覆盖整个目标 SurfaceView。如何为 VirtualDisplay 和 ImageReader 设置覆盖整个 SurfaceView 的分辨率?
android - 通过捕获 VirtualDisplay 为 MediaCodec 设置正确的时间戳
这是我的设置:
我从 VirtualDisplay 捕获帧到 SurfaceTexture,使用 OpenGL 在纹理本身上绘制一些动画对象并将其发送到 MediaCodec 的输入表面。但是在绘制之后,我必须正确地将时间戳设置为 EGL。我尝试了两种方法:
- 设置从 SurfaceTexture 接收的时间戳。当屏幕上有内容更新时,这可以正常工作。一般来说,虚拟显示帧率在 (0 - displayRefresh) 范围内。这导致编码器在等待 SurfaceTexture 更新时可能什么都不做,我无法通过 RTMP 发送编码帧的问题。
- 使用通过 const FPS 循环计算的自定义时间戳并不断绘制。由于不正确的视频帧速度,它会导致视频滞后。
我看到了一些技巧,比如在屏幕上设置动画视图来推动 VirtualDisplay 生成帧,但它看起来不是一个好的解决方案。MediaCodec 也有一个标志 - KEY_REPEAT_PREVIOUS_FRAME_AFTER,但它不能完全工作。
在这种情况下正确计算时间戳的正确方法是什么?
android - 辅助显示器不支持屏幕投影
我有以下设置 Android 设备连接到 2 个物理显示器
我正在尝试在辅助显示器上启动屏幕投影
当我运行上面的代码时,系统弹出一条消息
应用程序不支持在辅助显示器上启动
我正在构建的应用程序具有系统应用程序权限,但仍然没有改善这种情况。
问题
如果应用程序作为系统应用程序运行,是否可以投影辅助显示
如果应用程序作为非系统应用程序运行,是否可以投影辅助显示
是否可以在创建虚拟显示时指定显示 ID
java - Android - 在 SurfaceView 上显示屏幕录制
我正在开发一个可以记录 Android 设备屏幕内容并将其显示在 SurfaceView 上的应用程序。到目前为止,SurfaceView 是屏幕中间的一个框,当前正在显示整个屏幕的内容,连同它自己,创建一个重复的图像。有没有办法重复隐藏SurfaceView,创建一个虚拟显示,然后用虚拟显示的内容显示SurfaceView?
RecordingSession.java
窗口.java
popup_window.xml
java - Android - 实时读取 VirtualDisplay 帧
我正在使用MediaProjection
API 捕获我的 Android 设备屏幕,方法是创建一个VirtualDisplay
并将其显示在SurfaceView
始终可见的 a 上。我想对 VirtualDisplay 抓取的帧进行一些图像处理,然后将它们实时绘制回 SurfaceView。有没有办法使用 VirtualDisplay 和 MediaProjection API 来做到这一点?
RecordingSession.java