# SocketSVC

Minecraft 距離語音聊天，改用 WebSocket 而非 UDP

Source: https://socketsvc.vercel.app/zh-TW/client
SocketSVC 是 Minecraft 的距離語音聊天專案，以 WebSocket／WSS 傳送 Opus 音訊。專案包含**用戶端模組**（Fabric/Quilt、NeoForge、Forge）與**伺服器外掛／模組**（Paper 外掛，或 Fabric/Quilt、NeoForge、Forge 伺服器模組），另有選用的 Velocity/BungeeCord 中繼代理伺服器外掛。玩家會依遊戲中彼此的距離即時交談。此外還有空間音訊 API，讓其他外掛加入音樂、廣播公告，以及擺在世界裡的具名喇叭。

所有語音資料（音訊、即時玩家名單、喇叭快照、連線狀態）都走**同一條持續的 WebSocket 連線**，和瀏覽器平常連 HTTPS 用的是同一種連線。

<Cards>
  <Card title="下載" href="/download">
    依 Minecraft 版本、載入器和用途（用戶端、伺服器或代理伺服器）挑選對應的版本
  </Card>
  <Card title="安裝用戶端" href="/client/installation">
    JAR 檔放哪裡、首次設定與語言
  </Card>
  <Card title="操作方式" href="/client/controls">
    說話、靜音、停止接收語音與 `/ssvc` 指令
  </Card>
  <Card title="設定" href="/client/settings">
    裝置、音量、音訊處理、樂器、圖示與自訂圖示包
  </Card>
  <Card title="音效板" href="/client/soundboard">
    把本機的音效片段播給附近的玩家聽
  </Card>
  <Card title="區域網路與單人遊戲" href="/client/lan">
    把世界開放到區域網路時，直接由自己的遊戲架設語音
  </Card>
  <Card title="相容性" href="/client/compatibility">
    Flashback、Essential Mod、Mod Menu 與已知衝突
  </Card>
  <Card title="疑難排解" href="/client/troubleshooting">
    自動重新連線、狀態診斷與常見問題
  </Card>
  <Card title="架設伺服器" href="/server">
    Paper 外掛或伺服器模組
  </Card>
</Cards>

## 為什麼用 WebSocket 而不是 UDP [#why-websocket-instead-of-udp]

大多數 Minecraft 語音模組走的是原始 UDP：你得在防火牆或路由器上多開一個連接埠，還得祈禱中間經過的每個代理伺服器、通道或主機面板都剛好能正確轉送。SocketSVC 完全不開 UDP 連接埠：

- **只是一次 HTTP(S) 升級。** 語音連線一開始就是普通的 WebSocket 交握，所以原本替伺服器代理 HTTP/HTTPS 的東西（反向代理、Cloudflare Tunnel、ngrok、Docker/Pterodactyl 面板）都能順便傳送語音，完全不用額外設定。
- **真正的 `wss://` 加密。** 把 `public-url` 指向你自己的 `wss://` 主機名稱，現有的 TLS 終止端（也就是原本就架在伺服器前面的代理）就會替語音加密，做法和加密 HTTPS 流量完全一樣。
- **一個 socket 就夠。** 音訊影格、玩家名單、具名喇叭快照，以及停止接收語音與狀態更新，全都多工在這條連線上，不必再開其他連接埠、設定轉送或防火牆規則。
- **依序傳送，照樣有抖動緩衝。** 傳輸本身雖然是依序送達（不是原始 UDP），每個影格仍帶有串流編號與序號；順序錯亂或短暫遺失的封包會經過補償（以原生 PLC 補償，最長 60 ms），不會出現破音。
- **連線會自我修復。** 每 10 秒一次 ping/pong，就算沒人說話也能確認 socket 正常運作；斷線時，用戶端會自動索取新的 token 並重新連線。一般的網路小狀況不必動用 `/ssvc reconnect`。
- **連線時協商協定功能。** 空間音訊、具名喇叭與停止接收語音同步，都會以升級標頭各自請求和回應。因此新版用戶端連到舊版伺服器（或反過來）時，只會順利退回舊的行為，不會出錯。

## 語音聊天功能 [#voice-chat-features]

- **距離與定位音訊**：其他玩家的聲音會隨距離變小，並依你面對的方向左右平移；戴耳機還能分辨前後（請參閱[設定](/client/settings#headphone-spatial-audio)）。
- **「按鍵說話」或自動語音偵測**：由 RNNoise 輔助，可手動調整靈敏度門檻；停止說話後會稍微延遲才關閉，避免話尾被切掉。
- **內建「雜訊抑制」（RNNoise）**：直接包含在用戶端裡，不用另外安裝原生元件。支援的平台還能額外下載效果更強的「進階雜訊消除」模型。
- **自動麥克風增益與峰值限制**：不用手動調整，說話小聲和大聲的人都能保持平衡。
- **自適應「迴音消除」**：會自動對齊延遲，也能手動覆寫，可減少開放式麥克風或喇叭常見的「聽到自己聲音」問題。
- **個別玩家音量（0–200%）**、主音量、靜音與停止接收語音，全都儲存在用戶端設定中。
- **即時玩家名單**：由伺服器同步，附有說話指示和名牌圖示。
- **精簡的設定對話框**：有「一般設定」、「進階設定」、「音量設定」等分頁，切換裝置不必重新連線，還有首次設定流程。
- **自動重新連線**：連線中斷時，不必離開再重新加入。
- **「音效板」**：從本機資料夾把 WAV/MP3/OGG/Opus/FLAC/AIFF 片段播給附近的玩家聽，也能從網址下載音訊。
- **樂器輸入**：可以從線路輸入裝置、MIDI 樂器或內建的「鼓機」，把吉他或鍵盤彈進語音聊天。樂器走獨立串流，不會干擾說話。16 軌「循環錄音」能錄下你的演奏並一層層疊加；MIDI 也能改用你自己的錄音或 SoundFont 發聲，不必用內建的振盪器。
- **自訂圖示包**：用自己的圖片取代語音狀態圖示（支援動態 GIF，名牌上也會播放），還能打包成 zip 分享。
- **區域網路語音**：把單人世界開放到區域網路時，會啟動內建的語音伺服器，加入的玩家馬上就能交談。

目前已實作按鍵說話、語音偵測、Opus、RNNoise、增益與限幅、迴音處理、距離與立體聲定位、個別玩家音量、靜音與停止接收語音、狀態圖示，以及會取得新 token 的自動重新連線。音質仍需在實際裝置上驗證，合成測試的結果不代表實際通話品質。

## 空間喇叭（擴充套件 API） [#spatial-speakers-addon-api]

除了玩家之間的對話，SocketSVC 還提供空間音訊 API，讓其他伺服器外掛在世界中放置獨立、有位置的音源：

- **由伺服器定義的喇叭**：有固定的 ID 和顯示名稱，重新啟動後喇叭的身分不變，玩家替它設定的音量也會保留。
- **每個喇叭兩種音源**：把某位玩家的即時麥克風轉送到固定位置，或播放伺服器上的 WAV 檔案。
- **距離衰減與立體聲定位**：和玩家語音採用相同模型，每個喇叭都能設定範圍與開始淡出的距離。
- **每個喇叭各自的用戶端音量滑桿**：和一般的玩家音量清單分開，依伺服器與喇叭 ID 儲存在本機。
- **收聽者控制**：限制哪些人聽得到某個喇叭。
- 附帶**選用的範例外掛**（`SocketSVCSpeakerExample`），示範如何用簡單的指令，把固定在方塊上的喇叭綁定到 WAV 檔案或某位玩家的麥克風。

有了這個 API，大廳音樂、點唱機、廣播公告或環境音景都能做成獨立的擴充套件外掛，不必更動 SocketSVC 核心。請參閱[空間音訊 API](/server/spatial-audio-api)。

## 支援對照表 [#support-matrix]

資料截至 2026-09-17，版本可能會變動。

| 元件 | 目前配置 |
| --- | --- |
| 用戶端模組 | Minecraft 1.21.11、26.1、26.1.1、26.1.2、26.2、26.3；每種版本與載入器的組合各有一個獨立的 JAR 檔 |
| 伺服器 | Paper/Purpur/Folia 外掛，或對應同一 Minecraft 版本的 Fabric/Quilt、NeoForge、Forge 專用伺服器模組 |
| 載入器 | Fabric：所有版本（同一個 JAR 檔也標示支援 Quilt）；NeoForge：所有版本（26.1 和 26.1.1 使用 beta 版載入器，並以 beta 版發布）；Forge：所有版本 |
| Java | 1.21.11 使用 Java 21；26.x 使用 Java 25 |
| 網路 | 伺服器外掛／模組會自行開啟 WebSocket 監聽器；可以直接對外開放（區域網路），公開伺服器則可放在反向代理後面以使用 `wss://` |
| Velocity / BungeeCord 伺服器網路 | 一個選用的中繼外掛 JAR 檔（兩種代理伺服器共用同一個檔案），讓整個代理伺服器網路只需要一個公開語音連接埠，不必每台後端伺服器各開一個。請參閱[代理伺服器中繼](/proxy) |
| 用戶端語言 | 英文、簡體中文、繁體中文、文言文、日文、韓文、俄文、德文、法文和西班牙文，跟隨 Minecraft 的語言設定 |

語音聊天需要**用戶端和伺服器**都安裝才能運作；任何載入器的用戶端都能搭配 Paper 外掛或任一種伺服器模組。Modrinth 上每個檔案的版本號都以 `@client`、`@server` 或 `@proxy` 結尾，一看就知道是用戶端、伺服器還是代理伺服器用的。用戶端支援 26.x，**不代表**伺服器版本已經在相同的 Paper 版本上驗證過。

## 已在使用 SocketSVC 的伺服器 [#servers-already-using-socketsvc]

| 伺服器 | IP | Minecraft 版本 | 網站 |
| --- | --- | --- | --- |
| 泥土商店 (dirtshop) | `dirtshop.xyz` | 1.21.11+ | [dirtshop.xyz](https://dirtshop.xyz) |