minicap用于android设备屏幕实时截取和流传输

minicap 是一个用于 Android 设备屏幕实时截取和流传输 的开源工具。它最初由 OpenSTF 项目组开发,以其极高的性能低延迟而闻名。

adb -s ip:5555 shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -n 'minicap_26346' -P 1600x900@1600x900/0 -l 2>&1

1. 它能做什么?

普通的方法(如 adb shell screencap)截图非常慢,通常每秒只能抓取几帧。而 minicap 能够利用 Android 底层读取屏幕缓冲区(Frame Buffer)的技术,实现 30-60 FPS 的流畅画面传输。

2. 它的工作原理

  • 二进制组件:它包含一个用 C++ 编写的可执行文件,直接与 Android 系统交互。
  • **本地库 (.so 文件)**:由于 Android 不同版本的截屏接口(如 SurfaceFlinger)经常变动,minicap需要针对不同的 Android SDK 版本加载特定的 .so 库文件。
  • Socket 通信:它运行后会创建一个 Local Socket。你可以通过端口转发(adb forward),让电脑上的客户端连接到这个 Socket,从而获取实时的图像二进制流(通常是经过压缩的 JPEG 格式)。

3. 主要使用场景

  • 远程控制设备:比如在网页上操控云端真机(STF, DeviceFarmer 等)。
  • 自动化测试:在进行 UI 自动化脚本录制或回放时,需要实时查看手机画面。
  • 游戏直播/投屏:因为它延迟极低,常被集成到各种投屏工具中。

4. 局限性

  • 兼容性挑战:每当 Android 发布新版本(如 Android 10/11/12+),minicap 往往需要更新对应的 .so 文件才能工作。在较新的 Android 版本上,很多人开始转向使用 scrcpy(它利用了视频硬编码,性能更好且兼容性更强)。
  • 部署复杂:你需要先确认手机的 CPU 架构(ARM/x86)和 Android 版本,然后手动将正确的文件推送到 /data/local/tmp