微語會議 Meet 0.1.0 Preview 發布:開源音視訊會議系統
微語會議(Bytedesk Meet)0.1.0 Preview 版本發布。作為微語(Bytedesk)生態中的開源會議系統,微語會議希望為團隊提供一個可以自建、自主掌控的音視訊會議方案:不依賴第三方 SaaS,資料留在自己的伺服器上,並且與微語的帳號體系、權限體系天然打通。
0.1.0 Preview 從音訊會議起步,優先把「建立會議 - 分享連結 - 加入會議 - 參會記錄」這條主鏈路跑通;視訊會議、螢幕共享等能力已在路線圖中。本文介紹這個版本包含的能力、技術架構與快速開始方式。
線上演示
- 會議用戶端演示:https://www.weiyuai.cn/meet/
- 會議管理後台演示:https://www.weiyuai.cn/meetadmin
0.1.0 Preview 包含什麼
1. 會議室管理
- 會議室資訊儲存在
RoomEntity(會議名稱、會議號inviteUid、類型、描述、建立時間等) - meet 前端使用 antd ProTable 展示會議室列表,支援建立、刪除會議室
- 會議號
inviteUid天然充當會議分享碼,無需額外產生 QR Code 或通關密語
2. 一鍵邀請連結
- 建立會議後即可複製邀請連結,形如
https://your-domain/meet/room/{inviteUid} - 收到連結的成員開啟後,未登入 會被引導到登入頁,登入成功後自動進入會議
- 參會者以登入使用者身分加入會議,會議室內顯示其暱稱,無需現場輸入姓名
3. 音訊會議
基於 Janus AudioBridge 外掛實現:
- 加入 / 退出會議
- 麥克風開關(靜音 / 取消靜音)
- 即時參與者列表(來自 Janus 事件推送)
- 伺服器端混音播放,多人同時發言互不干擾
- 會議室按需動態建立:同一會議號穩定對應到同一個 Janus 會議室,重複建立自動轉為加入
4. 參會記錄(CDR 式)
每次加入會議都會產生一條參會記錄(ParticipantEntity):
- 記錄加入時間、離開時間、參會時長(秒)
- 記錄參會者、關聯會議室、是否主持人、Janus 參與者 ID
- 參會狀態(在會 / 已離開),斷網未正常退出的「在會」遺留記錄會在下次操作時自動結算
這些記錄為後續的會議統計、出勤與稽核打下資料基礎。
5. meetAdmin 管理後台
配套的管理後台 meetAdmin 同步上線:
- 會議室管理:查詢、建立、編輯、刪除會議室
- 參會記錄管理:查詢參會明細、查看單筆記錄詳情
- 細粒度權限控制:會議室與參會記錄分別對應獨立權限模組,可按角色授權增刪改查
- Janus 伺服器監控:伺服器資訊、執行設定、活動會話、Token 四個監控頁面(超級管理員可見),即時掌握媒體伺服器狀態
6. 瀏覽器相容與權限預檢
- 加入會議前自動預檢麥克風權限,按「權限被拒絕 / 無麥克風裝置 / 瀏覽器不支援 / 非安全上下文」分類給出可操作的提示
- 自動偵測非安全上下文(HTTP + 非 localhost)場景,指引切換 localhost 或設定 HTTPS
7. 國際化
meet 與 meetAdmin 前端均支援簡體中文、繁體中文、English 三種語言,會議室類型、參會狀態等列舉欄位全部走國際化翻譯。
技術架構
微語會議採用「瀏覽器直連 Janus WebSocket」的架構,後端不做信令轉發,結構簡單、時延更低:
| 層次 | 組成 | 說明 |
|---|---|---|
| 媒體層 | Janus AudioBridge | 伺服器端混音、會議室管理、參與者事件 |
| 瀏覽器 | WebRTC + janus-gateway JS SDK | 瀏覽器直連 Janus WS,擷取 / 推流 / 播放 |
| 後端 | modules/webrtc | 會議室 RoomEntity、參會記錄 ParticipantEntity 與 REST API |
| 前端 | frontend/apps/meet | React + TypeScript + antd ProTable |
| 管理後台 | frontend/apps/meetAdmin | 會議室 / 參會記錄管理、Janus 監控 |
幾個關鍵設計:
- 會議號穩定對應:邀請碼
inviteUid透過穩定雜湊映射為正整數 Janus 會議室號,保證所有參與者進入同一音訊會議室,不依賴伺服器預先設定 - 動態建房:首次加入時傳送
create,會議室已存在(錯誤碼 486)則自動轉join,無需人工開通會議室 - 登入即身分:加入會議複用微語登入態,後端回傳使用者暱稱作為會議顯示名,同時記錄參與關係
- 安全邊界:邀請連結受登入保護;Janus Admin API 由
admin_secret獨立保護;客戶端設定介面不暴露任何金鑰
快速開始
1. 啟動 Janus 媒體伺服器
cd deploy/docker
./start.sh webrtc
該命令會啟動 Janus 容器,WebSocket API 位於 ws://localhost:18188/janus,Admin API 位於 18091 連接埠。
2. 啟動微語後端
按常規方式啟動 starter(預設已開啟 bytedesk.webrtc.janus.enabled=true,並設定了 Janus WS 位址與 ICE 伺服器)。
3. 啟動 meet 前端
cd frontend
pnpm install
turbo dev --filter=meet
4. 開始第一次會議
- 登入 meet,在會議室列表點擊「新建會議室」
- 在列表中複製該會議室的邀請連結,傳送給同事
- 同事開啟連結、登入後點擊「加入會議」,授權麥克風即可開始通話
提示:瀏覽器僅在安全上下文(HTTPS 或 localhost)下開放麥克風擷取。區域網路 IP + HTTP 存取時,meet 會給出明確指引;正式環境建議透過 nginx 反向代理提供 HTTPS + WSS。
Roadmap
0.1.0 Preview 之後,微語會議將按以下方向演進:
- 視訊會議(Janus VideoRoom)
- 螢幕共享
- 預定會議與快速會議區分
- 會議密碼 / PIN 與主持人權限控制
- 會議錄製與重播
- 參會即時統計與後端推送
- 行動端接入
相關連結
- 微語官網:https://www.weiyuai.cn
- 微語 GitHub:https://github.com/Bytedesk/bytedesk
- 問題回饋:https://github.com/Bytedesk/bytedesk/issues
- Janus WebRTC Gateway:https://github.com/meetecho/janus-gateway
微語會議仍處於早期版本,歡迎在 GitHub Issues 回報使用問題與功能建議。
