libcimbar:手机摄像头隔空传输数据,速度高达 850 kbps!
Star
Forks
Watch
Issues
libcimbar:利用电脑屏幕和手机摄像头传输数据的利器
libcimbar是一个实验性的条形码格式,实现隔空数据传输。它仅需一台电脑显示器和一部智能手机摄像头,即可实现高达 850 kbps(约 106 KB/s)的数据传输速度。
项目介绍
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 的功能和应用场景将会得到进一步拓展,为用户提供更加便捷、安全的数据传输体验。