基于屏幕-摄像头的单向数据传输方案设计
## 一、需求分析
**场景特点:**
- 源端:隔离安全电脑(无网络、无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渲染细节、手机端解码优化)展开详细设计吗?
浙公网安备 33010602011771号