@devicefarmer/minicap-prebuilt

中文文档
2.7.4发布于 2026/11/07Apache-2.0零依赖构建来源已验证近 30 天下载 4391

预建的二进制迷你帽.

中文使用文档
文档目录12 节
  1. 特征
  2. 所需资源
  3. 大楼
  4. 运行
  5. 简单的方式
  6. 艰难的路
  7. 使用量
  8. 全局信头二进制格式
  9. 框架二进制格式
  10. 调试
  11. 捐款
  12. 许可证

迷你盖

Minicap为流出Android设备的实时屏幕捕获数据提供了套接字接口. 其用意是作为一个更大的方案的组成部分,因此仅靠它本身并不十分有用。 例如,它被用于 工作队 用于远程控制.

启动后, Minicap 工作不会有根 亚行 在SDK 28(Android 9.0)和下方。 我们建造的最低SDK水平为9(即Android 2.3). 迷你卡普也从事Android Wear. 开发者预览一般在Google发布该发布版本的源代码后得到支持. 只有最新的"开发者预览"被支持,并且直到有稳定的发布. 不支持模拟器 。 注意Android 3.x不支持,因为这些版本从未被开源.

为了捕获屏幕,我们目前使用两种方法。 对于更古老的Android版本,我们使用ScreenshotClient,一个在AOSP的私人API. 对于更新的版本,我们使用虚拟显示,这也需要访问私人API. 然后使用 SIMD 启用的框架编码 蓝色涡轮 并发送了套接字接口。 今后计划进行的改进,以允许更高的FPS,是使用Media Record和朋友来利用硬件编码.

原则上,每个装置都应该起作用. 然而,由于迷你卡普依赖于私人API,因此有些可能不会. 请让我们知道 一个关于这个设备的GitHub问题.

该项目由两部分组成。 有主要的二进制可以单独使用NDK来建造. 另一部分是共享库,为AOSP源树内每个SDK级别和每个建筑所建. 我们在此repo中运送了预编译的库,但对这些共享库使用的代码的任何修改都需要针对相应的AOSP分支进行再编译. 这可能是一个重大的痛苦,但我们有几个公用事业可以帮助解决苦难。 如果你有兴趣的话, 在此读取构建指令。 。 。 .

共享库被冻结在SDK 30(Android 11)和以下. 在较新的Android版本中,请使用小头顶 apk 页:1 相反,它通过 app_process 并且不需要共享库. 工作队 选择自动高于 SDK 30 .

特征

  • 视设备而定,可用于非常平滑的FPS. 运行一个旧版Android的更老更弱的设备可以达到10-20 FPS. 运行Android最新版本的更新型设备通常可以相当容易地达到30-40 FPS,但有一些例外. 对于最大FPS,我们建议运行 迷你盖在一半真正的垂直和水平分辨率.
  • 体面且可用但非零延迟. 根据编码性能和USB传输速度,它可能是物理屏幕后方一到几个帧.
  • 在Android 4.2+上,帧只有在屏幕上出现变化时才会被发送. 在更古老的版本框上作为恒流发送,无论是否有变化.
  • 简单套接字接口 .

所需资源

大楼

我们包括 作为 Git 子模块的 libjpeg- turbo所以首先确定你已经拿了.

git submodule init
git submodule update

你现在可以继续了.

所需建筑 印度,并已知至少与NDK修订版10e(2015年5月)合作. 旧版本因缺乏 .asm x86 64 的文件支持 . 重要注意:NDK 15不再早于SDK 第14级支持Android平台. 这意味着如果编译于NDK 15或后期,二进制可能或不会在更早的平台上工作(如Android 2.3,Android 2.3.3).

这么说来,这只是一个问题 引用 ndk-build。 。 。 .

ndk-build

你现在应该有二进制了 ./libs。 。 。 .

如果你修改了共享库,你还需要 盖起它。 。 。 .

运行

你需要这样 构建 先说.

简单的方式

然后可以使用包含 运行。 sh 在设备上运行右二进制的脚本 。 这将确保正确的二进制和共享库被复制到您的设备中. 如果您有多个设备连接, 设置 ANDROID_SERIAL 在运行脚本之前.

# Run a preliminary check to see whether your device will work
./run.sh autosize -t
# Check help
./run.sh autosize -h
# Start minicap
./run.sh autosize

这个 autosize 命令用于自动选择正确的屏幕大小。 这是由脚本而不是二进制本身完成的. 为了了解为什么有必要这样做,请阅读以下的手册说明.

最后,我们只需要建立一个本地的前进,以便我们能够连接到插座.

adb forward tcp:1313 localabstract:minicap

现在你可以连接到1313港的接头了.

那就看一看吧 说吧 Then just see 使用量 见下文.

艰难的路

要手动运行, 您必须首先找出您的设备支持的 ABI :

ABI=$(adb shell getprop ro.product.cpu.abi | tr -d '\r')

请注意,由于Android shell总是用CRLF来结束行,所以你必须像上面一样去掉CR,否则其他命令不会正常工作.

请注意,如果你有多个设备连接,设置 ANDROID_SERIAL 这会让事情变得容易一些,因为你不需要具体说明 -s <serial> 每次选择.

现在,将相应的二进制推入设备:

adb push libs/$ABI/minicap /data/local/tmp/

请注意,对于 SDK < 16, 您必须使用 minicap-nopie 未执行的可执行文件 派伊(PIE) 支助。 检查 运行。 sh 用于脚本示例.

二进制不够 我们还需要选择正确的共享库并推进到设备上. 这一点可以如下:.

SDK=$(adb shell getprop ro.build.version.sdk | tr -d '\r')
adb push jni/minicap-shared/aosp/libs/android-$SDK/$ABI/minicap.so /data/local/tmp/

SDK 30以上没有共享的库. 在那些设备上,推出"迷你盖",然后开始 app_process 相反,因为 运行。 sh 已经.

此时,检查一下用法可能是有益的:

adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -h

注意,你需要设置 LD_LIBRARY_PATH 每次你打电话给迷你帽,否则它找不到共享的图书馆.

另外,每次使用迷你盖时,还需要指定显示和投影的大小. 这是因为我们不得不使用私人API来访问许多三星设备上的信息断层(因为迷你帽本身运行正常)。 这个 运行。 sh 帮助脚本提供 autosize 上文提到的帮助者.

因此,让我们假设你的设备有一个1080x1920屏幕. 首先,让我们进行快速检查,看看您的设备是否能够运行当前版本的迷你盖:

adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 1080x1920@1080x1920/0 -t

-P 参数的格式是 : {RealWidth}x{RealHeight} 虚拟Width}x{虚拟Height}/{Orientation}。 "虚拟"大小是所期望的投影的大小. 取向论证讲述了设备当前取向是什么(以度为单位),这需要这样,我们才能向帧消费者报告套接字界面的正确取向. 获得当前取向(或旋转)的方法之一是 旋转监视器. apk。 。 。 .

如果命令输出"OK",那么一切都应该很好. 如果它分解出错( 可能挂了一段时间后), 您的设备不支持 我们想知道。 。 。 .

最后,让我们开始迷你帽。 它会开始在抽象的unix域套接字上听取.

adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 1080x1920@1080x1920/0

现在我们只需要创建一个本地的前进, 这样我们就可以连接到插座.

adb forward tcp:1313 localabstract:minicap

现在可以使用本地端口连接到套接字. 注意目前 一次只支持一个连接 . 不管怎么说,拥有一个以上的连接是没有道理的,因为USB总线会很快饱和. 所以,让我们连接.

nc localhost 1313

这将给您二进制输出, 将在下一节中解释 .

使用量

假设你现在和迷你盖套接字开通了 如果没有,就跟随 指令 见上文.

迷你帽协议是一种简单的基于推取的二进制协议. 当您第一次连接到套接字时,您会得到一个全局头,然后是第一个框架。 全球信头不会再出现。 继续发送更多帧 直到你停止迷你帽.

全局信头二进制格式

曾相见.

字节长度类型解释
0 个1个未签名字符版本(目前为1)
1个1个未签名字符页眉大小( 从字节 0)
2至5岁页:1金特32 (低端词)过程的管道
第6-9条页:1金特32 (低端词)实际显示宽度, 像素
第10-13条页:1金特32 (低端词)以像素计的真实显示高度
14-17 (中文(简体) )页:1金特32 (低端词)虚拟显示宽度, 像素
第18-21页页:1金特32 (低端词)虚拟显示高度, 像素
22个1个未签名字符显示方向
第23条1个未签名字符克克比特旗(见下文)

克克比特旗

目前,可以报告以下怪事:

数值名称解释
1个QUIRK DUMB即使前一个框架没有变化,框架也会被发送. 告密者,不需要你采取任何行动 您可以通过在自己的代码中读取较慢的框架数据来限制捕获率.
2个QUIRK ALLYS 实相不论器件取向如何,车架始终是正向的. 在制作图像时需要考虑到这一点.
页:1卡塔尔语NAME框架撕裂可能可见。 信息化,不需要任何行动。 我们目前的两种方法都没有表现出这种行为.

框架二进制格式

看起来像一个潜在的无限次数.

字节长度类型解释
0-3 (韩语)页:1金特32 (低端词)框架大小, 以字节表示 (=n)
4(n+4)无未签名字符 []JPG 格式的框架

调试

NDK号已经不再出动了 gdb所以旧的 gdb.sh 帮助已删除 。 以 ndk-build NDK_DEBUG=1 并附加到运行中的 迷你盖进程, 与 NDK 的 lldb 换句话说.

捐款

作为一个小的免责词,"迷你盖"是作者第一次使用C++,因此,除了错误修正和新特性外,甚至任何非功能性修改,使代码更加平庸(最好是不引入新的依赖性)也非常受欢迎.

见 捐款额。 。 。 .

许可证

见 自由主义。 。 。 .

版权:© OpenSTF 项目. 所有权利保留.

版本与发布记录

@devicefarmer/minicap-prebuilt 共发布 9 个版本,首次发布于 2020/05/16;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.7.4latest2026/11/074 天前
2.7.32025/05/191.5 年前
2.7.22024/06/042 年前
2.7.12022/01/074 年前
2.7.02021/06/015 年前
2.6.02020/11/265 年前

关于 @devicefarmer/minicap-prebuilt 的常见问题

@devicefarmer/minicap-prebuilt 是什么?

预建的二进制迷你帽.

如何安装 @devicefarmer/minicap-prebuilt?

在项目目录运行 npm install @devicefarmer/minicap-prebuilt,或使用 pnpm add / yarn add / bun add。

@devicefarmer/minicap-prebuilt 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/devicefarmer__minicap-prebuilt 是否存在。

@devicefarmer/minicap-prebuilt 可以商用吗?

@devicefarmer/minicap-prebuilt 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@devicefarmer/minicap-prebuilt 的下载量有多少?

根据 npm 官方下载统计,@devicefarmer/minicap-prebuilt 在 2026/10/12 – 2026/11/10 这 30 天内被下载 4,391 次,日均约 146 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@devicefarmer/minicap-prebuilt 还在维护吗?

最新版本 2.7.4 发布于 2026/11/07(4 天前);至今共发布 9 个版本,其中过去 12 个月发布了 1 个;首次发布于 2020/05/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。