通話與語音
通話與語音頻道會透過專屬的埠,直接將音訊、影片與螢幕分享傳送至伺服器。本頁涵蓋網路端、安裝後應檢查的設定,以及使用您自行執行的語音轉文字模型進行文字轉錄。
通話運作方式
通話由 通話 應用程式(id com.mattermost.calls)提供,預設已安裝並啟用。語音頻道(語音頻道 應用程式,antimatter-next 映像檔)是建立在通話之上的永久性通話室:它需要啟用通話,並使用相同的設定、埠與伺服器。
通話應用程式在 Antimatter 內執行媒體伺服器。網頁應用程式、桌面應用程式與行動應用程式透過 WebRTC 與其連線:
- 訊號透過一般的網頁連線(您的 HTTPS 代理)傳送;
- 媒體(音訊、影片、螢幕分享)則不透過代理:它直接透過通話埠傳送至伺服器,預設為 8443 UDP 和 TCP。
設定位於 系統控制台 › 擴充程式 › 通話。這些設定也可以透過 antimatter 服務上的 AM_CALLS_ 環境變數來設定,此時環境變數會優於系統控制台並鎖定該設定。舊版的 MM_CALLS_ 名稱也可以使用。
安裝後請檢查這些項目
- 開啟通話埠。 在伺服器與雲端服務商的防火牆中允許 8443/udp 和 8443/tcp。
- 檢查測試模式。測試模式(
DefaultEnabled)預設為關閉,因此所有人都可以開始通話。在系統控制台 › 擴充程式 › 通話中將其開啟,以便在檢查通話功能是否正常運作時,僅允許系統管理員在頻道中開始通話,完成後再將其關閉。變數為AM_CALLS_DEFAULT_ENABLED:true表示測試模式已關閉。從 Mattermost 遷移而來的伺服器會保留其設定中儲存的選項。 - 決定是否啟用影片。啟用影片(
EnableVideo、AM_CALLS_ENABLE_VIDEO)預設為開啟:在允許通話的地方(包括私人訊息、群組訊息和頻道),使用者都可以開啟相機。在語音頻道中,由語音頻道應用程式的允許在語音頻道中使用影片選項決定。若將其關閉,則任何人都無法開啟相機,即使在語音頻道中也是如此。 - 在 NAT 後方,設定公開位址(下一節)。
通話啟用的位置
每個社群都有一種類型,即工作場所或社群(請參閱新社群的類型)。如果頻道的管理員未明確開啟或關閉通話,該頻道將遵循其所属社群的類型:
- 在工作場所中,頻道遵循伺服器的預設值:在測試模式關閉時,所有人都可以通話;
- 在社群中,頻道內的通話預設為關閉:人們改在語音頻道中交談。頻道和社群管理員仍可選擇在特定頻道中開啟通話。
頻道自身的設定始終優先。私人訊息和群組訊息不屬於任何社群:在測試模式關閉時,這些地方的通話對所有人開放。社群類型的變更將在 30 秒內套用到通話設定。
埠、NAT 與 STUN
| 設定 | 變數 | 預設值 |
|---|---|---|
| RTC 伺服器埠(UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| RTC 伺服器埠(TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| RTC 伺服器位址(UDP)、(TCP) | AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESS | 空白:所有位址 |
| ICE 主機覆寫 | AM_CALLS_ICE_HOST_OVERRIDE | 留空:透過 STUN 找到 |
| ICE 主機埠覆寫 | AM_CALLS_ICE_HOST_PORT_OVERRIDE | 留空:伺服器埠 |
| ICE 伺服器設定 | AM_CALLS_ICE_SERVERS_CONFIGS | [{"urls":["stun:stun.cloudflare.com:3478"]}] |
| (實驗性) 啟用 IPv6 支援 | (系統控制台) | 關閉 |
埠號必須介於 80 到 49151 之間。使用網站的 compose 檔案時,請修改 .env 中的 CALLS_PORT:它會同時設定兩個變數並發布埠號,主機與容器使用相同的數字。客戶端會先嘗試 UDP,若失敗則在同一埠號上改用 TCP。
客戶端傳送媒體的位址
伺服器會告知每個客戶端應將媒體傳送至哪個位址(即其「主機候選位址」)。預設情況下,伺服器會透過詢問 STUN 伺服器來找到其公用位址。STUN 伺服器是一項公用服務,會回覆要求來源的位址與埠號。預設使用 Cloudflare 的公用 STUN 伺服器 stun:stun.cloudflare.com:3478。伺服器並非唯一使用它的元件:每個加入通話的客戶端也會向它詢問自己的公用位址。STUN 伺服器只能看到 IP 位址與埠號,絕不會看到通話的音訊、影片或訊息。
如果伺服器(例如從 Mattermost 遷移而來)的 ICE 伺服器設定 中仍儲存著 Mattermost 的 STUN 伺服器(stun.global.calls.mattermost.com),系統將改用 Cloudflare 的 STUN 伺服器。已儲存的設定不會被修改。
在以下情況下,請自行設定位址:
- 伺服器位於 NAT 之後,或擁有多個公用位址:將 ICE 主機覆寫 設為公用 IP 位址(或解析至該位址的主機名稱);
- NAT 將不同的公用埠號映射到 8443:同時將 ICE 主機埠覆寫 設為該公用埠號;
- 伺服器無法存取網際網路,或您不希望伺服器與客戶端聯繫外部 STUN 伺服器:設定 ICE 主機覆寫,並使用
AM_CALLS_ICE_SERVERS_CONFIGS=[]清空 STUN 清單。設定 ICE 主機覆寫 後,伺服器不再向 STUN 伺服器詢問其位址;清空清單可阻止客戶端向 STUN 伺服器詢問。
services:
antimatter:
environment:
AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
AM_CALLS_ICE_SERVERS_CONFIGS: "[]"
若要保留 STUN 但不使用第三方服務,請自行執行 STUN 伺服器(coturn 等 TURN 伺服器也能回應 STUN 請求),並在 ICE 伺服器設定 中列出它,如下方 TURN 範例所示。
若僅在區域網路中使用,請使用伺服器的 LAN 位址。變更埠號、位址或 ICE 設定後,請重新啟動伺服器,或停用再啟用通話應用程式:媒體伺服器是在應用程式啟動時設定的。
用於嚴格防火牆的 TURN
有些網路會封鎖 UDP 以及對非標準 TCP 端口的出站連線。使用這些網路的使用者需要 TURN 伺服器,透過可達的端口(通常是 443)轉送媒體。Antimatter 未內建此功能;請執行 coturn 等 TURN 伺服器,並將其加入 ICE Servers Configurations(一個 JSON 清單):
[
{"urls": ["stun:turn.example.com:3478"]},
{"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
- 若使用共用金鑰(coturn 的
use-auth-secret),請將相同的金鑰填入 TURN Static Auth Secret(AM_CALLS_TURN_STATIC_AUTH_SECRET):伺服器會為每個用戶端提供短期憑證,有效期為 TURN Credentials Expiration (minutes)(預設為 240 分鐘)。 - 若使用固定憑證,請改為在 TURN 項目中加入
"username"和"credential"。 - Server Side TURN(預設為關閉)也會使用 TURN 伺服器來處理由伺服器啟動的連線。
其他通話設定
| 設定 | 變數 | 預設值 | 功能說明 |
|---|---|---|---|
| Max call participants | AM_CALLS_MAX_CALL_PARTICIPANTS | 0(無限制) | 單一通話中允許的最大人數。 |
| Allow screen sharing | (系統控制台) | 開啟 | 允許參與者進行螢幕分享。 |
| Enable call ringing | AM_CALLS_ENABLE_RINGING | 開啟 | 當私人訊息或群組訊息中的通話開始時,會響鈴通知其他人員。 |
| Enable simulcast for screen sharing (Experimental) | (系統控制台) | 關閉 | 以多種畫質傳送螢幕分享。 |
| Enable AV1 codec for screen sharing (Experimental) | (系統控制台) | 關閉 | 在 Simulcast 開啟時將被忽略。 |
語音頻道應用程式有兩項設定,位於 系統控制台 › 擴充程式 › 語音頻道:開啟語音頻道時加入(預設開啟)和 允許在語音頻道中使用影片(預設開啟,但請參閱上方的影片說明)。社群管理員可以在頻道的設定中將頻道轉換為語音頻道。
AM_CALLS_DISABLE=true。此時語音頻道也會停止運作。大型伺服器:外部 rtcd
預設情況下,單一 Antimatter 伺服器會承載所有通話媒體。若有多數同時進行的通話,或希望將媒體流量與聊天伺服器分離,Calls 應用程式可將媒體交由 rtcd(一個獨立的媒體伺服器,即 Mattermost 的開源 rtcd,版本 0.17 或更新)處理。請設定 RTCD service URL(AM_CALLS_RTCD_SERVICE_URL),例如 https://rtcd.example.com:之後所有通話都會透過它進行,且用戶端會將媒體傳送至 rtcd 自己的埠,而非 Antimatter 的埠。可使用 AM_CALLS_RTCD_CLIENT_ID 和 AM_CALLS_RTCD_AUTH_KEY 提供憑證;若未提供,應用程式會自行向 rtcd 註冊。此功能無需授權。當伺服器上同時有超過 50 人進行通話時,Calls 應用程式會向管理員顯示建議使用 rtcd 的警告。
文字轉錄與即時字幕
Antimatter 可使用您自行執行的語音轉文字模型來轉錄通話,並在人們說話時顯示即時字幕。Antimatter 可使用任何提供 OpenAI 相容 /v1/audio/transcriptions 端點的伺服器,例如您網路上的 Whisper 伺服器。無需 Antimatter 提供額外服務。
運作方式
- 通話主持人可以在通話控制項中使用 轉錄通話 來開始文字轉錄。轉錄中 徽章會通知所有人。
- 每位參與者的應用程式會監聽其自身的麥克風,將語音切分為短片段(最長 12 秒,靜音期間不會切分),並將其傳送至 Antimatter,再由 Antimatter 轉送至您的語音轉文字伺服器。
- 開啟即時字幕後,每個片段的文字會立即以字幕形式顯示給參與者。
- 當轉錄停止或通話結束時,Calls 機器人會將轉錄內容作為文字檔案和 WebVTT 字幕檔案發佈在通話的討論串中(在語音頻道中,則發佈在頻道中)。
- 若開啟 Summarize transcriptions,Agents 應用程式的預設代理程式也會在討論串中發佈摘要(請參閱 AI)。

設定步驟
在 antimatter 服務上設定以下項目:
services:
antimatter:
environment:
AM_CALLS_ENABLE_TRANSCRIPTIONS: "true"
AM_CALLS_TRANSCRIBE_API: openai
AM_CALLS_TRANSCRIBE_API_OPEN_AIURL: http://stt.internal:8000/v1
AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL: whisper-1
AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY: ""
AM_CALLS_ENABLE_LIVE_CAPTIONS: "true"
AM_CALLS_LIVE_CAPTIONS_LANGUAGE: en
| 設定 | 變數 | 應填入的內容 |
|---|---|---|
| Enable call transcriptions (Beta) | AM_CALLS_ENABLE_TRANSCRIPTIONS | true |
| Call transcriber API | AM_CALLS_TRANSCRIBE_API | openai(顯示為 "OpenAI-compatible API (no job service)") |
| Speech-to-text API URL | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | API 的基礎 URL,包含 /v1 為止。 |
| Speech-to-text model | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | API 所識別的模型名稱,例如 whisper-1。必填。 |
| Speech-to-text API key | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | 作為 bearer token 傳送。若 API 不需要金鑰,請留空。 |
| 啟用即時字幕(Beta) | AM_CALLS_ENABLE_LIVE_CAPTIONS | 設定為 true 可在通話期間顯示字幕。 |
| 即時字幕語言 | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | 口語語言,以兩個字母的代碼表示(預設為 en)。此設定也會傳送至語音轉文字 API 以產生文字轉錄,因此即使不啟用字幕也應予以設定。 |
| 摘要文字轉錄 | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | 設定為 true 可在通話結束後產生 AI 摘要。 |
openai 轉錄器同時開啟:若開始錄製,系統會嘗試啟動 job-service 轉錄器並導致失敗。當文字轉錄開啟時,所有發言者的音訊都會傳送至您設定的語音轉文字伺服器,而轉錄結果會發佈在頻道中,讓所有成員都能閱讀。請告知您的使用者,若通話內容機密,請確保該伺服器位於您自己的網路內。
錄製
通話錄製(以及使用內建的 whisper.cpp 或 Azure 轉錄器進行文字轉錄)是在由工作服務啟動的獨立容器中執行的。該工作服務是 Mattermost 的開源專案 calls-offloader,您需自行將其部署在 Antimatter 旁邊。相關設定包括:啟用通話錄製(AM_CALLS_ENABLE_RECORDINGS,預設為關閉)、工作服務 URL(AM_CALLS_JOB_SERVICE_URL)、通話錄製最長時長(預設為 60 分鐘,範圍為 15 至 180 分鐘)以及通話錄製品質(低、中或高;預設為中)。此功能不需要授權。一旦啟用錄製,通話主持人即可在通話控制項中使用錄製通話來開始和停止錄製;通話中的所有參與者都會看到正在錄製的提示,當錄製停止時,錄製檔案會發佈到該通話的討論串中。語音頻道中的通話沒有討論串,因此無法錄製。如果只需要文字轉錄和即時字幕,上述的語音轉文字設定較為簡單:它不需要工作服務。