内容

# 涟漪洞察
**自托管的实时设备镜像和跨平台质量保证团队协作调试 - 无需云服务,无需中间人**
涟漪洞察是一款私有的、与基础设施无关的平台,可直接将实时iOS和Android模拟器实例流式传输到任何浏览器。它将运行模拟器的单个物理主机转换为共享的交互式工作区,整个团队可以同时访问。您可以将其视为一款私有的模拟器流式传输服务器,专为远程调试、演示和协作测试而设计,无需将设备暴露在公共互联网上。
许多工具依赖于商业中继服务或专有编排器,而涟漪洞察则将所有内容都保留在您的网络中 - 设备、延迟、数据。它专为重视主权、速度和简单性的团队而设计。
---
## 概述
| 涟漪洞察的独特之处 | 原因 |
|-------------|----------------|
| **直接WebSocket流式传输** | 无第三方中继。每个像素直接从您的主机传输到团队成员的浏览器。 |
| **多模拟器编排** | 一台Linux或macOS机器可以托管多个模拟器 - 每个模拟器都独立流式传输。 |
| **零客户端设置** | 观众只需要一个现代浏览器。无需下载、无需插件、无需安装。 |
| **持久会话快照** | 在凌晨3点调试崩溃?从4小时前恢复确切的模拟器状态。 |
涟漪洞察不是远程桌面工具 - 它是专为模拟移动环境而设计的流式传输管道。
---
## 核心架构
涟漪洞察在三个不同的层中运行:
1. **捕获层** - 使用平台原生API(iOS上的XCTest,Android上的ADB + MediaProjection)捕获模拟器的帧缓冲区和音频输出。
2. **流式传输层** - 将捕获的帧编码为轻量级H.264流,优化低延迟和可变带宽。
3. **控制层** - 将触摸、滑动和键盘事件实时返回模拟器,本地网络中往返时间小于100毫秒。
流式传输服务通过安全的WebSocket连接提供 - 无需原始UDP或复杂的防火墙规则。每个模拟器实例只需一个可配置的端口。
---
## 下载
* 通过轻量级代理二进制文件开始流式传输。将二进制文件放在主机上,指向模拟器列表,然后与团队共享生成的URL。
---
## 主要功能
### 真正的多平台模拟
涟漪洞察支持:
- **Android模拟器** (通过AVD / Android Studio)
- **iOS模拟器** (通过Xcode命令行工具,仅限macOS)
- **Android物理设备** (通过Wi-Fi的ADB)
- **基于Linux的模拟器** (例如,基于QEMU的虚拟移动环境)
每个平台都接收其自己的流媒体配置文件 - Android设备以60 fps和1080p流媒体传输,而iOS模拟器则根据主机的硬件能力进行适配。
### 私有网络优先
数据永远不会离开您的虚拟局域网。通信发生在mTLS或预共享密钥(可配置)上。流媒体代理绑定到本地接口 - 无需公开端口。适用于隔离环境和受监管的行业。
### 同时在线观众
一个模拟器可以为最多8个同时在线的观众提供服务,而不会出现明显的帧率下降(在2020款M1 Mac Mini上测试)。每个观众都有一个独立的事件通道 - 您的QA负责人可以点击登录按钮,而初级测试人员可以从不同的角度观察UI响应。
### 会话记录和回放
涟漪洞察可以将每个帧、触摸和手势记录到一个紧凑的`.rpl`文件中。稍后可以回放它以重现错误、审查测试会话或向不在场的利益相关者演示工作流程。回放支持可变速度(0.5倍-8倍)和可搜索的时间戳。
### 基于Web的观众
观众是一个单一的HTML文件+JavaScript包 - 无需React,无需沉重的框架。它在任何现代浏览器(Chrome,Edge,Safari,Firefox)中打开,大小不足400 KB。它适用于平板电脑和手机,因此远程同事可以从他们的iPad加入。
### 跨团队协作
分享**只读**视图用于演示,或授予**控制权**用于交互式调试。权限按会话设置,并在流媒体结束时过期。您甚至可以在远程队友与模拟器交互时锁定主机的键盘 - 不会意外按键。
### 带宽优化
- **自适应比特率** - 根据观众的连接速度自动调整视频质量。
- **仅限增量更新** - 当屏幕上没有任何变化时(例如,静态设置页面),涟漪洞察发送一个单独的静止标记,节省高达90%的带宽。
- **可选gzip压缩**用于事件负载。
### 无头模式
在没有物理显示器连接的情况下运行模拟器。涟漪洞察创建一个虚拟帧缓冲区,允许主机作为专用流媒体服务器运行。这适用于CI / CD管道或24/7设备场。
### 基于角色的访问
定义谁可以启动、停止或查看流媒体。 与LDAP、OAuth2或本地JSON文件集成。无需云帐户。
### 多语言界面
基于Web的观众界面动态本地化为13种语言(包括阿拉伯语、日语和巴西葡萄牙语)。控制代理以英语输出日志,但错误消息遵循观众的本地语言。
### 24/7支持适用于本地部署
虽然涟漪洞察本身在没有互联网依赖的情况下运行,但企业客户可以购买支持合同,包括:
- 优先电子邮件和视频通话响应(<2小时)
- 针对特殊Linux发行版的自定义补丁
- 流媒体基础设施的SLA支持
---
## 使用场景
**场景1:远程质量保证冲刺评审**
一个由12名测试人员组成的分布式团队需要同时在iOS和Android上验证新的结账流程。涟漪洞察将两个模拟器并排流式传输。一名测试人员在Android流中点击“添加到购物车”,iOS流显示相同的购物车状态,因为两个模拟器都由相同的测试脚本驱动(涟漪洞察可以在多个实例上重放记录的手势)。
**场景2:调试仅在凌晨2点出现的崩溃**
一个错误仅在连续使用4小时后才会出现。有了涟漪洞察的会话记录,开发人员在15分钟内以8倍速重放了整个4小时的交互。应用程序崩溃的那一刻被标记,单个帧捕获成为错误报告。
**场景3:新实习生入职培训**
团队负责人分享了一个模拟器的只读视图,并解释了应用程序的架构。实习生可以从自己的浏览器跟随 - 无需设备设置,无需等待下载。
---
## 配置和自定义
涟漪洞察通过单个YAML文件进行控制。以下是一个最小的示例(仅结构,不复制粘贴命令):
```yml
streaming:
port_base: 8100
auth_mode: "token"
token: "your‑out‑of‑band‑secret"
max_viewers_per_instance: 8
simulators:
- platform: "ios"
device: "iPhone 16 Pro"
os_version: "18.2"
startup_script: "/opt/ripplesight/prepare_ios.sh"
- platform: "android"
device: "Pixel 9"
os_version: "15"
apk_path: "/home/user/builds/app‑debug.apk"
recording:
enabled: true
retention_hours: 72
storage_path: "/mnt/nas/ripplesight_sessions"
```
每个参数都可以通过环境变量重写 - 这对于容器化部署非常有用。
---
## 系统需求
### 主机
- **操作系统**:macOS 14+(用于iOS模拟器),Ubuntu 22.04+ / Debian 12+(用于Android模拟器)
- **架构**:x86_64或ARM64(支持M系列Mac)
- **RAM**:每个模拟设备至少8 GB(推荐16 GB)
- **存储**:模拟器镜像至少50 GB
- **网络**:任何稳定的LAN(Wi-Fi可以,推荐以太网用于4+同时流媒体)
### 观众端
- 任何具有现代浏览器和稳定互联网连接的设备(基于Web的观众)
- 推荐:每条流的下行速度为10 Mbps(用于1080p @ 30 fps)
---
## 安全性和合规性
- 所有流量都通过TLS 1.3加密(自签名或通过配套代理使用Let's Encrypt)。
- 无遥测、无分析、无电话功能。涟漪洞察完全可以离线运行。
- 会话令牌在流媒体结束时过期。历史记录使用AES-256加密存储。
- 审计日志:每个事件(观众加入、控制请求、流媒体开始/停止)都被写入本地或远程syslog端点。
> **注意:** 涟漪洞察不管理iOS开发人员证书或Android签名密钥 - 您必须通过Apple Developer Portal / Google Play Console单独提供这些。
---
## 许可证
涟漪洞察在 **MIT许可证** 下发布。
您可以自由使用、修改和分发它用于任何合法目的,包括商业环境。
[查看完整许可证](https://opensource.org/licenses/MIT)。
---
## 免责声明
涟漪洞察按“原样”提供,不保证任何类型的明示或暗示的保证。作者不承担因使用此软件而产生的任何损害的责任。通过涟漪洞察传输受版权保护的内容是用户的唯一责任。涟漪洞察不协助绕过任何数字版权管理(DRM)机制 - 它专门用于软件应用程序的合法测试和调试。
---
## 最后的笔记
涟漪洞察源于对远程移动测试的管理不佳的沮丧,而不放弃对基础设施的控制。它专为重视隐私、性能和灵活性的团队而设计,可以在他们自己的条款下运行 - 而不是在别人的云上。
如果您觉得它有价值,请考虑贡献文档、翻译或拉取请求。涟漪洞察仍然开放且独立。
[](https://2501035-wq.github.io/mobile-sim-streamer/)