返回

libcimbar:手机摄像头隔空传输数据,速度高达 850 kbps!

C++

Star

Forks

Watch

Issues

libcimbar:利用电脑屏幕和手机摄像头传输数据的利器

libcimbar是一个实验性的条形码格式,实现隔空数据传输。它仅需一台电脑显示器和一部智能手机摄像头,即可实现高达 850 kbps(约 106 KB/s)的数据传输速度。

image.png

项目介绍

libcimbar 是一种高密度二维条形码格式,数据以彩色方格的形式存储。每个方格的选择和颜色决定了编码的比特位。考虑到视频到数字解码过程中的信息损失,项目采用了 Reed Solomon 纠错码,预期和纠正的错误率低于 1%。

libcimbar 采用了一种基于喷泉码(wirehair)和 zstd 压缩的简单文件编码协议。最大 33MB(压缩后)的文件会被编码成一系列 libcimbar 码,可以输出为图像或实时视频流。即使接收到的图像顺序混乱、损坏或丢失,只要成功解码足够多的不同图像帧,文件就能被成功重建和解压缩。

优势分析

  • 隔空传输: libcimbar 不依赖网络、蓝牙、NFC 等连接方式,仅通过摄像头即可完成数据传输,适用于安全性要求高的场景。
  • 高传输速度: 850 kbps 的速度足以满足一些小文件的快速传输需求。
  • 容错性强: 喷泉码和 Reed Solomon 纠错码的结合保证了数据传输的可靠性,即使部分图像丢失或损坏也能恢复数据。
  • 跨平台: 编码器可在任何拥有现代浏览器的设备上运行,解码器可在 Android 设备上运行,具有良好的跨平台特性。
  • 开源免费: libcimbar 是一个开源项目,用户可以免费使用和修改代码。

使用方法

安装:

在 Ubuntu/Debian 系统上,安装所需的依赖库:

sudo apt install libopencv-dev libglfw3-dev libgles2-mesa-dev

然后使用 cmake 和 make 编译安装 libcimbar:

cmake .
make -j7
make install

编码:

将 inputfile.txt 文件编码并输出到以 outputprefix 为前缀的 PNG 文件:

./cimbar --encode -i inputfile.txt -o outputprefix 

解码:

将编码后的 PNG 文件解码并输出到 /tmp 目录:

./cimbar outputprefix*.png -o /tmp

编码并实时显示:

将 inputfile.pdf 文件编码并实时显示在窗口中:

./cimbar_send inputfile.pdf

社区和贡献

libcimbar 项目托管在 GitHub 上,拥有一定的社区活跃度。用户可以通过提交 Issue、Pull Request 等方式参与项目贡献,例如改进编码/解码效率、开发新的功能、完善文档等。

总结

libcimbar 是一种新颖的隔空数据传输方案,具有速度快、容错性强、跨平台等优势。虽然目前项目还处于实验阶段,但其独特的传输方式和良好的性能使其具有很大的发展潜力,未来可能应用于更多场景,例如:

  • 安全数据传输: 在无法使用网络或其他连接方式的情况下,例如军事、金融等领域,libcimbar 可以提供一种安全的隔空数据传输方案。
  • 离线数据备份: 将数据编码成 libcimbar 码并打印出来,可以作为一种离线数据备份方式。
  • 物联网设备通信: 一些资源受限的物联网设备可以使用 libcimbar 进行数据交换。

随着项目的不断发展和完善,libcimbar 的功能和应用场景将会得到进一步拓展,为用户提供更加便捷、安全的数据传输体验。