獨立 RTC 頻道
Tauri 的介面視窗直接使用 Web SDK 的頻道 API,不需要另外接入媒體 SDK:需要登入身份的 HTTP 請求由引擎轉發,媒體連線(LiveKit)在介面視窗中執行。頻道的規則見概述。
加入
ts
import { createDRTauriClient } from '@deeprespond/im-tauri';
const im = createDRTauriClient({ appKey: 'org#app' });
// 等引擎就绪且用户登录完成;票据由业务服务端交付。
if (!im.channels.supported) throw new Error('当前窗口不支持频道媒体');
const channel = await im.channels.join('meeting-demo', { ticket: ticketFromBusinessServer });
await channel.setMicrophoneEnabled(true); // 用户操作触发,默认不采集。
const off = channel.on('track', ({ track, session_id, kind }) => {
// 按 Web 频道指南绑定本窗口的 audio/video 元素。
});
// 页面退出:
off();
await channel.leave();介面與引擎
- 介面視窗中沒有 IM 的 access token 和 refresh token,HTTP 請求由引擎帶上登入身份;視窗只用一個短期的媒體令牌連線頻道。
- 引擎視窗中
channels.supported為false:不能加入頻道、不能採集聲音和畫面,但可以查詢頻道的狀態。 - 只有呼叫加入的那個視窗持有頻道控制代碼,新開啟的視窗不會接管媒體。同一使用者在多個視窗中是否佔用頻道,由服務端統一判斷。
channels.supported只檢查 WebRTC 和媒體服務是否可用;還要 WebView、裝置許可權和媒體網路實際可用才能正常使用。不要根據一對一通話在各系統的支援情況推斷頻道也可用。
關閉與恢復
視窗被銷燬、頁面觸發 pagehide 或 freeze、引擎進入 restarting 或 failed 時,SDK 停止媒體並嘗試離開頻道。視窗最小化不會觸發 pagehide,不會因此離開頻道。頻道的定時任務使用精確計時,系統從休眠中恢復時重新整理狀態。
主動銷燬客戶端時,SDK 在關閉與引擎的通道之前嘗試離開頻道,最多等 5 秒;這與應用退出時的收尾時間是兩回事。引擎不可用、程序崩潰或被系統強制結束時,不保證離開的請求能發出,服務端會按超時和媒體清理收尾。
查詢頻道和 resume 的用法同 Web SDK:只能恢復當前登入使用者仍然有效的會話,恢復後預設不採集。頁面路由解除安裝時仍應主動 leave()。
許可權與釋出狀態
macOS 的麥克風、攝像頭用途說明和 entitlements,以及內容安全策略、媒體服務地址的配置,見快速整合。Windows、macOS、Linux 上實際的裝置和 WebView 支援需要分別測試,supported 為 true 不代表裝置一定能用。
Tauri 中的頻道目前只做了型別檢查和視窗生命週期的模擬測試,還沒有在各系統的真實 WebView 上驗證,也還沒有隨正式版本釋出。上線前請在目標系統上實測。
