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。