Decimen Optical Transfer 是一个基于浏览器的“屏幕到摄像头”离线文件传输 PoC。发送端把文件编码成连续播放的动态 QR 码,接收端用摄像头扫描并通过喷泉码/Luby Transform 码重建文件。它不需要两台设备之间有网络连接、不需要安装原生 App、不需要配对,也不需要除摄像头外的额外权限。项目使用 TypeScript/Vite 实现,解码侧使用 zxing-cpp 的 WASM 版本,适合研究空气隔离环境、离线数据传输、二维码编码和前端媒体能力。
适用领域
离线文件传输 / 空气隔离系统数据交换 / 二维码/动态 QR 传输 / 喷泉码与纠删码 / WebRTC/getUserMedia 摄像头应用 / 浏览器端 WASM 解码 / 前端实验性通信协议 / 信息安全与物理隔离场景
配置难度
中等偏高。运行项目本身较简单,只需 npm install 和 npm run dev;但理解其核心机制需要掌握二维码编码、喷泉码/LT Code、浏览器摄像头 API、WASM 解码、视频帧处理和跨浏览器兼容性。如果要改造成稳定产品或提升吞吐量,难度较高。
商业价值
该项目的直接商业化价值主要在于技术验证和原型参考,而不是开箱即用产品。它适合用于空气隔离环境下的单向小文件传输、离线设备数据导出、安全演示、工业现场无网络传输、教育培训和二维码通信协议研究。若进一步加入加密、身份校验、错误监控、更好的 UI、批量文件支持、压缩、审计日志和跨设备适配,有潜力发展为特定安全场景下的离线数据交换工具。
01
技术亮点
- 不需要发送端和接收端之间有任何网络链路,数据通过屏幕发光和摄像头采集完成传输。
- 不需要安装原生 App,浏览器即可运行。
- 使用喷泉码解决单向通道中的丢帧问题,接收端只需收集足够数量的不同帧即可恢复文件,不依赖顺序传输。
- 每帧自描述,包含 session id、sequence number、block count、block size、file length 和 hash,接收端可以从传输中途开始锁定数据流。
- 对发送端和接收端帧率不一致具有较好容错性。
- 使用 zxing-cpp 编译到 WASM,避免 Safari 不支持 BarcodeDetector 的问题。
- README 中披露了大量浏览器、iOS、JS 数值一致性和视频帧处理方面的工程经验。
- MIT 许可证,便于学习、改造和二次开发。
- 项目 Star 数较高,说明社区关注度不错。
02
目标用户
- 对离线/空气隔离数据传输感兴趣的开发者
- 前端工程师和 Web API 研究者
- 安全工程师、红队/蓝队研究人员
- 需要在无网络环境下交换小文件的技术人员
- 研究二维码编码、喷泉码、纠删码的工程师
- 想做屏幕-摄像头通信实验的创客和学生
03
配置要求
- 必须使用 HTTPS,因为浏览器在非安全上下文中不会提供 getUserMedia 摄像头 API;localhost 例外,但手机访问局域网地址时不属于 localhost。
- 项目通过 @vitejs/plugin-basic-ssl 提供自签名证书,移动端浏览器需要手动信任或继续访问。
- 发送端建议提高屏幕亮度,保持二维码显示清晰。
- 接收端需要授权摄像头权限。
- 手机最好固定或靠在支架上,避免手抖导致自动对焦频繁变化,影响吞吐量。
- 发送端可调参数包括 payload size、tx fps、bytes per frame、QR error-correction level、display size。
- 接收端可调参数包括 capture width、capture fps、decode worker count。
- 默认 tx fps 为 24;每帧至少需要占用约 2 个屏幕刷新周期。
- 默认 bytes per frame 为 1465,对应 QR v27;更高密度如 2953/QR v40 可提升速度,但对镜头距离、屏幕质量和解码能力要求更高。
- iOS 上帧率声明可能不准确,需要读取 getSettings() 确认真实帧率。
04
适用场景
- 在两台没有网络连通性的设备之间传输小文件
- 从高隔离设备向普通设备单向导出数据
- 演示空气隔离环境下的光学数据传输
- 作为动态二维码批量传输、喷泉码、LT Code 的学习样例
- 研究浏览器摄像头帧处理、WASM 条码解码和性能调优
- 构建更高吞吐量的屏幕到摄像头传输系统的原型基础
05
部署与配置
- 确保本机安装 Node.js 和 npm。
- 克隆仓库:git clone https://github.com/bashalarmistalt/decimen-optical-transfer.git
- 进入项目目录:cd decimen-optical-transfer
- 安装依赖:npm install
- 启动开发服务器:npm run dev
- 发送端设备通常使用笔记本或桌面浏览器,打开 https://localhost:5173/send/。
- 接收端设备通常使用手机,打开 Vite 输出的局域网 HTTPS 地址,例如 https://<lan-ip>:5173/receive/。
- 首次访问会遇到自签名证书警告,需要手动继续访问。
- 在接收端点击 Start camera,允许摄像头权限,并将摄像头对准发送端屏幕上的动态 QR 码。
06
风险与注意事项
- 当前是最小化 PoC,不是生产级文件传输工具。
- 主要演示 512 KB 或 2 MB 文件传输,传输大文件时体验和稳定性未必可靠。
- 依赖摄像头质量、屏幕亮度、刷新率、对焦能力、距离、环境光等物理条件。
- 使用自签名 HTTPS 证书,普通用户可能对浏览器安全警告感到困惑。
- 传输是可见光明文通道,附近摄像头理论上也可以拍摄并截获数据,不适合直接传输敏感明文。
- 浏览器兼容性和性能差异较大,尤其是移动端 Safari、Android 浏览器、摄像头帧率和 WASM 性能。
- 没有完整的用户权限、安全审计、传输加密、身份认证或访问控制。
- 二维码误码纠错级别默认较低,依赖喷泉码处理丢帧,但光照、模糊、反光仍可能显著降低成功率。
- 在企业或安全环境中使用前,需要评估是否违反空气隔离或数据外传管控策略。
2026-08-06
第2名
新收录 · github_search
2026-08-05
第2名
新收录 · github_search
2026-08-04
第2名
新收录 · github_search
2026-08-03
第3名
新收录 · github_search
2026-08-02
第3名
新收录 · github_search
2026-08-01
第3名
新收录 · github_search