Decimen 光學傳輸:使用噴泉碼 QR 碼透過光線傳送檔案
探索 Decimen 光學傳輸,這是一個開源工具,使用動態 QR 碼和噴泉碼在裝置之間串流傳輸檔案,無需網路連線即可達到最高 130 KB/s 的速度。
在一個檔案傳輸通常意味著雲端上傳、藍牙配對或 USB 線的世界裡,透過光線傳送資料幾乎是神奇的。Decimen 光學傳輸(decimen.app)正是如此:它將你的螢幕變成發射器,將你的相機變成接收器,以無限的動態 QR 碼序列串流傳輸檔案。無需網路、無需配對、無需安裝應用程式——只需兩個裝置面對面。
為什麼選擇光學傳輸?
傳統的檔案傳輸方法依賴於裝置之間的網路路徑。但如果你身處安全設施、偏遠地區,或者只是想避免設定連線的麻煩呢?光學傳輸使用了最通用的介面:螢幕和相機。每支智慧型手機都有這些功能,而且它們跨平台運作,除了相機存取權限外,無需任何驅動程式或權限。
關鍵在於,螢幕到相機的連結沒有反向通道。傳送者無法知道影格是否被正確接收。這就是噴泉碼發揮作用的地方。
噴泉碼的魔力
噴泉碼,特別是 Luby Transform(LT)碼,是一類抹除碼,從來源檔案產生無限的編碼符號串流。接收者只需收集一定數量的不同符號——約原始檔案大小的 1.15 倍——即可重建整個檔案,無論哪些符號遺失。
在光學傳輸的背景下,這意味著傳送者可以連續廣播影格,而接收者可以丟棄影格(由於動態模糊、眩光或相機未對準)而不影響正確性。丟棄影格只會花費時間,絕不會影響正確性。這比順序區塊傳輸有了巨大改進,在順序傳輸中,單一遺失的影格需要重傳機制——在沒有反向通道的情況下這是不可能的。
Decimen 的運作方式
該專案使用 TypeScript 建置,並使用 node-qrcode 進行編碼,使用 zxing-wasm 進行解碼。架構分為 send/ 和 receive/ 目錄,並有一個共享模組用於通用工具。
當你在兩個裝置上開啟應用程式時,一個前往 /send/ 頁面,另一個前往 /receive/。傳送者選擇一個檔案(最大 64 MB)或貼上文字片段。然後檔案會在有幫助時使用 gzip 壓縮,並分割成區塊。每個區塊被編碼成 QR 碼,QR 碼串流在螢幕上動畫顯示。
接收者的相機持續掃描螢幕,解碼出現的每個 QR 碼。解碼後的區塊被儲存,一旦收集到足夠的不同區塊,檔案就會被重新組裝。SHA-256 雜湊在檔案提供下載前驗證完整性。
效能與實際結果
該專案在實際測試中報告了 130.5 KB/s 的有效吞吐量(請參閱儲存庫中的螢幕截圖)。這對於視覺通道來說令人印象深刻。此專案提取自的原始實驗達到了手機對手機 128 KB/s 的速度。該協定設計為高效,使用噴泉碼確保即使影格遺失率很高,只要收到足夠的影格,傳輸就會完成。
開始使用
要自己執行,請複製儲存庫並安裝依賴項:
npm install
npm run dev # 帶有 HMR 的 https 開發伺服器
然後在傳送裝置上開啟 https://localhost:5173/send/,並在接收手機上開啟網路 URL(接受一次自簽憑證)。對於生產環境,使用 npm run build 並提供 dist/ 資料夾。
還有一個示範模式(npm run demo),只允許傳送捆綁的載入內容,適合在沒有真實檔案的情況下進行測試。
平台特性與離線支援
該應用程式是 PWA,因此首次造訪後可離線運作,並可安裝在 iOS 和 Android 主畫面上。v0.3.0 版本新增了 Android 能力探測、內聯媒體播放和分享對話框。該專案還包含一個獨立建置,產生兩個自包含頁面,可以託管在任何地方,甚至可以直接從檔案系統開啟。
隱私考量
重要的是要注意,光學傳輸未加密。傳送螢幕上的任何內容都可被任何指向它的相機讀取。你獲得的是無網路,而不是機密性。如果你需要隱私,你應該在傳送前加密檔案。
類似專案
光學資料傳輸的概念已被其他人探索過。README 中提到:
mohankumarelec/airgapped-qr-code-transfer:基於瀏覽器的 QR 檔案傳輸,具有壓縮和順序區塊傳輸。divan/txqr(2018):Go 中的動態 QR 加噴泉碼,並有優秀的文章說明為什麼噴泉碼勝過順序迴圈。sz3/libcimbar:完全超越 QR,使用專為此通道設計的自訂高密度彩色碼。
這些專案表明這個想法並不獨特,但 Decimen 的實作精緻、文件完善,並以 MIT 授權開源。
結論
Decimen 光學傳輸是一個迷人的例子,展示了將日常硬體用於非傳統用途。它不會取代 Wi-Fi 進行大型傳輸,但對於快速、在氣隙意義上安全的傳輸,它是一個簡潔的工具。使用噴泉碼是對無反向通道問題的巧妙解決方案,該專案對於任何對光學通訊或抹除編碼感興趣的人來說都是一個很好的學習資源。
無論你身處高安全性環境,還是只是想透過空氣傳送檔案來給朋友留下深刻印象,Decimen 都值得一試。而且由於它是開源的,你可以深入研究程式碼,確切了解它的運作方式。