基本概念
通用方案和专有方案
通用的截图方案,将截图从安卓模拟器内发送、再由脚本接收,在截图后需经过编码、传输、解码三个步骤。
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,其余均为主动截图。