fmontes/insta360-link-cli

GitHub: fmontes/insta360-link-cli

macOS 平台上的轻量命令行工具,通过 UVC 协议直接控制 Insta360 Link 2 摄像头的云台和 AI 追踪,无需启动官方应用。

Stars: 1 | Forks: 0

# insta360-link-cli [![build](https://static.pigsec.cn/wp-content/uploads/repos/cas/05/052bc9eaea1744e860f382f618f1146be38e27dfd499bb29c253bcd1827fad60.svg)](https://github.com/fmontes/insta360-link-cli/actions/workflows/build.yml) 一个用于控制 **Insta360 Link 2** 摄像头的微型 macOS CLI —— 可以使云台回中、进行平移/俯仰/缩放,以及切换 AI 目标追踪 —— **无需打开缓慢的官方应用**。 ``` linkcam # recenter the gimbal (pan=0, tilt=0) linkcam ai # toggle AI subject tracking on/off linkcam status # show pan/tilt, zoom, and tracking state ``` 甚至不需要运行官方应用。 ## 安装说明 需要 macOS(Apple Silicon 或 Intel —— 这些二进制文件是通用的)以及一台 Insta360 Link 2。 ``` git clone https://github.com/fmontes/insta360-link-cli.git cd insta360-link-cli ./install.sh # symlinks `linkcam` onto your PATH linkcam status ``` 已包含预编译的二进制文件,因此无需编译。(如需自行编译,请参阅[构建说明](#building)。) ## 使用方法 ``` linkcam # center the gimbal (pan=0, tilt=0) [default] linkcam status # show pan/tilt, zoom, and ai-tracking state linkcam ai # toggle AI subject tracking linkcam ai on # force AI tracking on linkcam ai off # force AI tracking off linkcam zoom 150 # set zoom (100 = 1x) linkcam pan -30000 # pan only (tilt unchanged) linkcam tilt 20000 # tilt only (pan unchanged) linkcam set 0 0 # set pan and tilt explicitly ``` 应对 AI 漂移问题的实用组合:`linkcam ai off` 可停止追踪并防止摄像头偏移,随后使用 `linkcam` 使其回中。 ## 工作原理 Link 2 是一台标准的 **UVC** (USB Video Class) 摄像头。 - **云台 / 缩放**使用*标准* UVC 控制。回中只需将 **PanTilt Absolute** 设置为其默认值 `pan=0, tilt=0`。 - **AI 追踪** *并非*标准功能 —— 这是一个专有的 **Extension Unit (XU)** 命令,必须对其进行逆向工程(见下文)。 在 macOS 上,你**无法**使用 libusb/pyusb 来驱动它们:系统摄像头驱动程序会占用 USB 接口并且不会释放它(`detach_kernel_driver` → *Access denied*)。诀窍是通过 **IOKit** 发出 UVC 控制传输,它可以与摄像头驱动程序*协同*工作。本项目通过两个小型的 Objective-C 辅助工具实现了这一点: - **`uvc-util`** —— [Jeffrey Frey 的工具](https://github.com/jtfrey/uvc-util) (MIT),用于标准控制。 - **`xu-probe`** —— 为本项目编写的一个小工具,通过 unit-id + selector 添加了*原始* XU 的 get/set/scan 功能,并复用了 uvc-util 的 IOKit 机制。 ### AI 追踪逆向工程 AI 追踪并未作为标准控制公开,因此其开启/关闭命令是通过经验性测试发现的: 1. 在追踪**关闭**的状态下,**扫描**所有 XU 控制(在所有 3 个 extension unit 上对所有 selector 执行 `GET_CUR`)。 2. 在官方应用中**切换**追踪开启,然后**重新扫描**并执行 **diff**。 3. **过滤掉噪声** —— 某些寄存器(云台位置、曝光)会自行发生漂移,因此通过第二次空闲扫描可以识别并移除它们。 4. 剩下的是一个稳定的字节,它会随着开关状态在 `00`↔`01` 之间精确翻转,随后通过写入该字节并观察摄像头追踪情况来**确认**。 **结果:** USB 描述符中的三个供应商 extension unit: | Unit | GUID | 作用 | |------|------|------| | 9 | `FAF1672D-B71B-4793-8C91-7B1C9B7F95F8` | 设备信息 / 状态 | | 10 | `E307E649-4618-A3FF-82FC-2D8B5F216773` | (图像/AE 参数) | | 11 | `A8BD5DF2-1A98-474E-8DD0-D92672D194FA` | **AI 功能** | 使用原始工具进一步探索: ``` bin/xu-probe -V 0x2e1a:0x4c04 scan 11 # dump all controls on unit 11 bin/xu-probe -V 0x2e1a:0x4c04 get 11 0x02 1 # read AI-tracking state bin/xu-probe -V 0x2e1a:0x4c04 set 11 0x02 01 # tracking on ``` ## 构建说明 仅需 macOS **Command Line Tools**(不需要完整的 Xcode): ``` make # builds bin/uvc-util and bin/xu-probe from src/ ``` uvc-util 的源代码属于 MRC 时代的 Objective-C,因此构建时使用了 `-fno-objc-arc`。 ## 项目布局 ``` linkcam the CLI (bash) bin/ prebuilt arm64 helpers (uvc-util, xu-probe) src/xu-probe.m raw XU tool (this project) src/vendor/ uvc-util sources, MIT (jtfrey/uvc-util) Makefile builds the helpers install.sh symlinks linkcam onto your PATH ``` ## 兼容性与注意事项 - 预编译的二进制文件是**通用的** (arm64 + x86_64),可在 Apple Silicon 和 Intel Mac 上运行。 - 已在 **Insta360 Link 2** (USB `0x2e1a:0x4c04`) 上测试通过。其他 Insta360 摄像头可能使用不同的 XU selector —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解如何使用 `xu-probe scan` 查找它们。 - 基于观察到的行为进行逆向工程;与 Insta360 没有关联或受其认可。使用风险自负。 ## 致谢 - [uvc-util](https://github.com/jtfrey/uvc-util) 作者 Jeffrey Frey (MIT) —— 这是本项目构建所依赖的 IOKit UVC 控制基础。 ## 许可证 MIT —— 详见 [LICENSE](LICENSE)。内置的 uvc-util 同样遵循 MIT 协议 ([src/vendor/LICENSE.uvc-util](src/vendor/LICENSE.uvc-util)).
标签:CVE监控, UVC, 云资产清单, 应用安全, 摄像头控制, 硬件控制, 逆向工程