技術說明
為什麼是 P2P
跟陌生人通話時,大多數情況下聲音不經過我們的伺服器。它直接從你的瀏覽器送到對方的瀏覽器。
你 ─────────── 直接連線 ─────────── 對方
↑
WebRTC(端到端加密)
我們的 server 在這個情況下只做兩件事:
- 把你跟對方介紹認識(交換 IP / port / 加密金鑰)
- 之後就退場,不參與通話內容
為什麼這樣做
- 我們聽不到你說什麼——聲音根本沒有經過 server
- 不可能存音檔——同上
- 運算成本接近零,所以可以免費
少部分情況:要走中繼伺服器
大約 10–20% 的通話因為對稱 NAT 或防火牆,無法直接 P2P。對這些通話,我們會走中繼(TURN 伺服器)讓你還能配對成功——這時候聲音會經過第三方主機。
你 ──→ TURN ──→ 對方
(加密封包流過,但解不開內容)
我們目前用的 TURN 提供者:Cloudflare Realtime TURN(每月 1000 GB 免費額度,超過後 $0.05/GB)。
幾個重要事實:
- TURN 伺服器看得到加密後的 UDP 封包,看不到聲音內容(DTLS-SRTP 端到端加密)
- 我們這邊不錄、不保留、不分析這些封包;TURN 提供者(Cloudflare)對中繼流量本身的處理依其隱私政策。我們不替 Cloudflare 背書,但選他們是因為他們不需要我們開帳號驗證身份,跟我們「零登入」設計一致
- TURN 憑證是短期的(1 小時)動態產生,不是固定密碼;即使外洩,最多用 1 小時就失效
- 嚴格說:TURN 可用於所有需要的通話,但通常只有 NAT 真的擋掉直連時 ICE 才會選擇 relay 候選;host-to-host 能通的情況會優先直連
- 我們只用 Cloudflare 每月免費的 1000 GB 額度,超過後不付費、自動停用 TURN(後續通話退回純 P2P,少數人會接不上)
- 實際用量直接從 Cloudflare 帳號 GraphQL API 讀取,不靠我們自己估算——他們說多少就是多少,不會有偷偷超用
- 1000 GB ≈ 6 萬通 30 分鐘的中繼通話
如果你完全不想走中繼,可以:
- 用沒有對稱 NAT 的網路(家用 wifi 通常 OK;手機 4G/5G 偶爾不行)
- 關閉瀏覽器的 VPN 或網路代理
- 遇到不行就直接跳下一位(系統不會強迫你接受中繼)
歷史紀錄
- 2026-05 前:完全不走 TURN,~10-20% 通話接不上就跳下一位
- 2026-05:開始用 Cloudflare Realtime TURN 中繼,1000 GB 免費額度上限自動斷流(不付費)
連線品質的其他事
連線品質取決於你跟對方的網路,不是我們的 server。語音 bitrate 目前 cap 在 24 kbps(電話會議級),同時讓 TURN 流量翻倍可用、行動網路也更省電。
通話品質
瀏覽器內建的 AEC(acoustic echo cancellation)跟噪音抑制都已開啟,所以同一裝置喇叭播出對方聲音、再被自己 mic 錄到的部分會被消掉。但 AEC 不是萬能:
- 外接喇叭離 mic 太遠 — 抑制效果下降
- 房間迴響大(空屋、廁所、教堂)— 部分有效
- 多人同時講話 — 噪音抑制可能誤殺低音量人聲
結論:能戴耳機就戴耳機。