1 截图
zhbaor edited this page 2024-12-06 16:34:48 +08:00

基本概念

通用方案和专有方案

通用的截图方案,将截图从安卓模拟器内发送、再由脚本接收,在截图后需经过编码、传输、解码三个步骤。

MuMu和雷电都开发了专有的截图API,通过与模拟器共享内存的方式,降低了进程间通信的开销,截图速度远高于通用截图方案。

Linux下可以使用Waydroid配合grim截图。

有损压缩和无损压缩

常见的无损截图方案有:

  • adb
  • DroidCast_raw
  • DroidCast png
  • uiautomator2

无损截图一般采用的编解码方案速度慢,传输文件体积大。已知最快的通用无损截图方案是DroidCast_raw,将截图数据直接以RGB565格式传输。

常见的有损截图方案有:

  • DroidCast jpg
  • scrcpy录制视频帧
  • minicap
command format time
imencode png 69.9 ms ± 269 μs
imencode jpg 6.27 ms ± 81.6 μs
imdecode png 31.2 ms ± 417 μs
imdecode jpg 8.7 ms ± 65.4 μs
format size time
png 3.1 MiB 8.4 ms
jpg 352.6 KiB 2.3 ms

测试环境:AMD Ryzen R5-5500U, opencv-python 4.9.0.80

主动截图和被动截图

响应调用者截图请求的称为主动截图;主动向调用者发送截图的称为被动截图。

常见的被动截图方案有scrcpy和minicap,其余均为主动截图。