gpt4 book ai didi

Android,屏幕截图

转载 作者:行者123 更新时间:2023-11-29 20:58:56 27 4
gpt4 key购买 nike

我正在构建一个应用程序,它应该为任何具有 Android 4 及更高版本的无根设备实现屏幕~镜像~,2 帧/秒就足够了。

我正在尝试使用 ADB“framebuffer:”命令来抓取设备屏幕截图

ADB USB 通信协议(protocol)是面向消息的(不是流式传输),因此,要获取数据 block ,需要接收/发送一组读取(A_WRTE@4096bytes)/确认(A_OKEY@24bytes)命令对。
只要接收端没有发送 A_OKEY,设备就不会推送额外的数据(因此,不是流协议(protocol))。

为了优化性能我直接实现了ADB USB协议(protocol)而不是使用ADB.exe

Samsung Galaxy 5 设备的图像具有 1920*1080 的分辨率和 32 位深度,因此,RAW 帧缓冲区图像的重量为 1920*1080*4=8294400 字节(对于 iPAD,它甚至会更大) ,在面向 ADB 消息的协议(protocol)上使用“framebuffer:”命令,接收单个屏幕截图需要约 2 秒 (grrr..)。

如果这是一个流媒体协议(protocol),它应该在 USB 2.0 @ 480Mbps 上花费大约 150 毫秒

  • 考虑到上述情况,有什么方法可以使“帧缓冲区:”更快?
  • 有什么方法可以在通过 USB 发送之前降低分辨率吗?
  • 是否有任何其他适用于所有设备的方法可以更快地全天候 24x7 截取屏幕截图?
  • 适用于 Android 的 AirPlay 等价物(COMMON to all devices)将是最佳选择?

附言
我已经尝试过 ASL 项目,它在我的“Samsung Galaxy 5”上不起作用,因为 ADB.exe shell 没有以系统权限运行(相反,它在“shell”帐户下运行)。

最佳答案

在 Android 4.3 及更高版本上,您可以执行 screenrecord 的操作,并将镜像虚拟显示输入视频编码器。 Version 1.2随 5.0“Lollipop”一起提供的,具有内置的 USB 流式传输功能,包括通过 adb shell 发送二进制数据的 termio 代码。使用“隐藏”参数 --output-format=h264 并指定连字符 (-) 作为输出文件名。

源代码在frameworks/av/cmds/screenrecord .

这是通过 USB 获得良好帧速率的唯一方法。您可以通过指定 --output-format=raw-frames 来试验未压缩的数据,但即使在 VGA 分辨率下,您也无法以合适的速度传输帧。

FWIW,目前的设备通常不使用帧缓冲区开发,除非在恢复模式下。相反,他们使用由硬件 Composer 在扫描显示时组合的叠加层。详细信息在 architecture doc 中.

关于Android,屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26786926/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com