GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

基于屏幕-摄像头的单向数据传输方案设计

 

## 一、需求分析

**场景特点:**
- 源端:隔离安全电脑(无网络、无USB、无外设)
- 通道:显示器 → 手机摄像头(光学单向通道)
- 目标:手机接收并保存数据
- 核心诉求:**高效、可靠**

**关键挑战:**
- 带宽受限(屏幕刷新率 × 单帧信息量)
- 无反向通信(纯单向,不能ACK重传)
- 摄像头对焦、抖动、摩尔纹、光照干扰

---

## 二、技术选型对比

| 方案 | 单帧容量 | 容错性 | 复杂度 | 推荐度 |
|------|---------|--------|--------|--------|
| 普通QR码 | ~2.9KB | 中 | 低 | ⭐⭐⭐ |
| 高密度QR序列 | 2.9KB×30fps | 中 | 中 | ⭐⭐⭐⭐ |
| **彩色多层QR (CCC)** | ~8-10KB/帧 | 中 | 中高 | ⭐⭐⭐⭐⭐ |
| 自定义色块矩阵 | 20-50KB/帧 | 低 | 高 | ⭐⭐⭐ |
| 屏幕视频流(像素编码) | 高 | 极低 | 极高 | ⭐⭐ |

**推荐方案:彩色分层QR + 喷泉码(Fountain Code) + 连续帧广播**

---

## 三、最佳设计方案

### 3.1 整体架构

```
┌─────────────────────┐ ┌──────────────────┐
│ PC 发送端 │ 光学 │ 手机接收端 │
│ │ =====> │ │
│ 文件→分块→编码→渲染 │ 摄像头 │ 解码→去重→重组→保存│
└─────────────────────┘ └──────────────────┘
```

### 3.2 发送端设计(PC)

**数据处理流水线:**

```
原始文件

[压缩] zstd/LZMA

[加密] AES-256-GCM(可选)

[分片] 每片 ~1KB

[喷泉码编码] LT码/RaptorQ ← 关键:无需ACK即可恢复

[分层打包] R/G/B三通道各一个QR

[渲染帧] 30fps显示
```

**关键技术点:**

1. **喷泉码(RaptorQ推荐)**
- 发送端持续生成新编码包
- 接收端收到任意 K×(1+ε) 个包即可恢复原文件
- 完美适配单向无反馈信道

2. **彩色三层QR**
- R、G、B通道各承载一个QR码
- 单帧容量提升约3倍
- 使用Version 40 + L纠错:约2.9KB × 3 ≈ 8.7KB/帧

3. **帧头协议**
```
[魔数4B][文件ID4B][总分片数4B][编码包序号4B]
[原文件大小8B][CRC32 4B][数据载荷...]
```

4. **显示优化**
- 屏幕区域:中央最大正方形
- 背景:纯白/纯黑对比
- 四角放置定位标记(便于摄像头识别边界)
- 帧率:15-30fps(根据手机解码能力调整)

### 3.3 接收端设计(手机App)

**技术栈建议:**
- Android: CameraX + ZXing/ML Kit + 原生C++解码
- iOS: AVFoundation + Vision框架

**处理流程:**

```
摄像头预览帧(30-60fps)

[图像预处理] 灰度化、二值化、透视校正

[通道分离] 拆分RGB三层

[并行QR解码] 多线程

[包去重] 基于编码包序号

[进度显示] 已收集包数/估计所需包数

[喷泉码解码] 达到阈值后触发

[CRC校验] → [解密] → [解压] → [保存]
```

**UX关键设计:**
- 实时显示接收进度条(0% → 100%)
- 显示预计剩余时间
- 画面对齐辅助框(引导用户稳定拍摄)
- 完成后震动+声音提示

### 3.4 传输效率估算

| 参数 | 数值 |
|------|------|
| 单帧数据 | 8.7 KB |
| 实际有效率(扣除帧头/冗余) | ~70% |
| 有效帧率(手机解码) | ~15 fps |
| **理论吞吐** | **~90 KB/s** |
| 1MB文件传输时间 | ~12秒 |
| 10MB文件传输时间 | ~2分钟 |

---

## 四、进阶优化建议

### 4.1 提升带宽
- **使用灰度N级编码**:8级灰度 = 3bit/像素,比二值QR多3倍
- **Base45编码**:相比Base64节约30%
- **HEVC式时域差分**(仅适合大文件)

### 4.2 提升可靠性
- **多次循环广播**:发送端循环2-3轮所有编码包
- **自适应帧率**:接收端通过闪烁屏幕边缘信号(虽是单向,但可以用定时器同步)
- **Reed-Solomon + 喷泉码双层保护**

### 4.3 安全性
- 传输前AES-GCM加密,密钥通过另一安全通道(如口令)
- 每次会话随机IV,防重放
- 接收端App做完整性校验

---

## 五、开发路线图

**Phase 1 - MVP(2周)**
- 单色QR + 固定分片序列化
- 手机端ZXing扫描保存
- 验证可行性

**Phase 2 - 性能版(4周)**
- 引入喷泉码(使用 openRQ 库)
- 彩色三通道QR
- 原生解码优化

**Phase 3 - 产品化(4周)**
- 安全加密
- UI/UX打磨
- 多分辨率/多机型适配
- 错误恢复

---

## 六、推荐开源库

| 用途 | 库 |
|------|-----|
| QR生成 | qrcodegen (C/Java) |
| QR识别 | ZXing / ML Kit / QuircKit |
| 喷泉码 | openRQ (RaptorQ, Java) |
| 压缩 | Zstandard |
| 加密 | libsodium |

---

## 七、类似方案参考

- **TXQR** (https://github.com/divan/txqr) - 动画QR数据传输
- **PixelFlow / QRStream** - 学术研究原型
- **Twibright Ronja** - 光学通信先驱
- 商用产品:**SideChannel**、**Flashpaq**

---

## 总结

**最佳方案 = 彩色分层QR + RaptorQ喷泉码 + 循环广播 + 手机并行解码**

这个组合可以在纯单向光学通道下达到 **~100KB/s** 的稳定传输速率,适合传输文档、代码、配置文件等中小型数据(MB级别最佳)。对于更大文件(100MB+)建议考虑合规的物理介质方案。

需要我针对某个具体模块(如喷泉码实现、QR渲染细节、手机端解码优化)展开详细设计吗?

posted on 2026-04-24 08:28  GKLBB  阅读(18)  评论(0)    收藏  举报