TypeScript · 项目报告

bashalarmistalt/decimen-optical-transfer

该仓库暂未提供 GitHub 项目描述。

已完成 打开 GitHub
B
4,658星标
564Fork
12Issue
MIT许可证

分析结果

项目分析

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