跳至主要内容

微語會議 Meet 0.1.0 Preview 發布:開源音視訊會議系統

· 閱讀時間約 5 分鐘
Jack Ning
Maintainer of Bytedesk

微語會議(Bytedesk Meet)0.1.0 Preview 版本發布。作為微語(Bytedesk)生態中的開源會議系統,微語會議希望為團隊提供一個可以自建、自主掌控的音視訊會議方案:不依賴第三方 SaaS,資料留在自己的伺服器上,並且與微語的帳號體系、權限體系天然打通。

0.1.0 Preview 從音訊會議起步,優先把「建立會議 - 分享連結 - 加入會議 - 參會記錄」這條主鏈路跑通;視訊會議、螢幕共享等能力已在路線圖中。本文介紹這個版本包含的能力、技術架構與快速開始方式。

線上演示​

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/meetReact + 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. 開始第一次會議​

  1. 登入 meet,在會議室列表點擊「新建會議室」
  2. 在列表中複製該會議室的邀請連結,傳送給同事
  3. 同事開啟連結、登入後點擊「加入會議」,授權麥克風即可開始通話

提示:瀏覽器僅在安全上下文(HTTPS 或 localhost)下開放麥克風擷取。區域網路 IP + HTTP 存取時,meet 會給出明確指引;正式環境建議透過 nginx 反向代理提供 HTTPS + WSS。

Roadmap​

0.1.0 Preview 之後,微語會議將按以下方向演進:

  • 視訊會議(Janus VideoRoom)
  • 螢幕共享
  • 預定會議與快速會議區分
  • 會議密碼 / PIN 與主持人權限控制
  • 會議錄製與重播
  • 參會即時統計與後端推送
  • 行動端接入

相關連結​

微語會議仍處於早期版本,歡迎在 GitHub Issues 回報使用問題與功能建議。