獨立 RTC 頻道
獨立 RTC 頻道用於業務會議、語音房、臨時協作這類不依賴 IM 群的多人音影片。你的服務端用自己的 channel_id 建立頻道,使用者登入後加入,不需要先加好友或建群。頻道里的成員分兩種角色:釋出者(publisher)可以開麥、開攝像頭,訂閱者(subscriber)只能看和聽。
一個需要票據的視訊會議,從建立到使用者入會:
# 1. 你的服务端:创建频道(默认需要票据、成员默认为发布者)
curl -X PUT "$IM_API/$ORG/$APP/rtc/channels/meeting-demo" \
-H "Authorization: Bearer $APP_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"项目会议","media":"video"}'
# 2. 你的服务端:给 alice 签发一次性票据,响应中的 tickets[0].ticket 经你的业务接口交给她
curl -X POST "$IM_API/$ORG/$APP/rtc/channels/meeting-demo/tickets" \
-H "Authorization: Bearer $APP_TOKEN" -H "Content-Type: application/json" \
-d '{"users":[{"username":"alice","role":"publisher"}]}'
# 3. alice 的客户端:登录 IM 后,用客户端 SDK 带上票据加入频道客戶端的完整程式碼見頻道快速接入。
| 要做什麼 | 看哪裡 |
|---|---|
| 建立、修改、關閉頻道 | 頻道管理 |
| 讓指定使用者入會 | 頻道票據 |
| 檢視誰在頻道里,移出或封禁某人 | 頻道會話與成員管理 |
| 不用 SDK、自己實現客戶端的加入和心跳 | 客戶端頻道會話 |
| 核對頻道用量 | 頻道用量與更正 |
| 瞭解人數、時長等上限 | 使用限制 |
| 在控制檯中檢視和處理頻道 | 控制檯指南 |
使用條件:
- 應用開啟了音影片(執行策略
rtc_enabled),平臺的頻道總開關和應用的頻道開關都開啟。應用的頻道開關預設開啟,平臺可以單獨為某個應用關閉; - 應用狀態正常,併發額度和媒體服務可用;
- 新計費啟用後,應用的音影片餘額為正;切換到新計費之前,按套餐的許可權。
客戶端從執行配置讀取 rtc_channels_enabled 和 rtc_channels_protocol_version(當前為 1),並檢查 SDK 的 channels.supported,決定是否顯示頻道入口。
選擇通話還是頻道
| 單聊 / 群通話 | 獨立頻道 | |
|---|---|---|
| 標識 | call_id,群通話關聯 group_id | 你的服務端指定的 channel_id |
| 怎麼進入 | 呼叫、振鈴、接聽,或加入群裡進行中的通話 | 直接加入開放頻道,或用發給本人的一次性票據加入 |
| 誰能進入 | 按單聊規則或群成員規則 | 本應用的登入使用者,按票據和頻道封禁判斷 |
| 誰能發言 | 所有參與者 | 只有 publisher,subscriber 只接收 |
| IM 記錄 | 可以在單聊、群聊中留下通話記錄 | 不產生群、會話訊息或通話記錄 |
| 客戶端如何控制 | 通話信令和客戶端介面 | HTTP 介面加入、心跳、續發憑據和退出;通知只用於更快重新整理狀態 |
頻道只提供音影片,不包含聊天訊息、呼叫邀請、系統振鈴、螢幕共享或媒體資料訊息。需要文字互動時,另外使用 IM 訊息或聊天室。
接入順序
- 在控制檯確認應用的音影片可用、平臺的頻道總開關已開啟。沒有單獨設定過的應用,頻道開關預設開啟。
- 你的服務端用 App Token 建立頻道,指定媒體型別(
audio或video)和訪問方式。 - 訪問方式為
ticket的頻道,由你的服務端為指定使用者簽發票據,再透過你自己的業務介面交給這個使用者。 - 使用者在客戶端 SDK 中登入 IM,檢查能力後加入頻道。麥克風和攝像頭預設關閉,由使用者主動開啟。
- SDK 連上媒體、服務端確認入會後才返回頻道控制代碼。使用者離開頁面時退出頻道。
App Token 只能放在你的服務端。頻道票據只用於進入頻道,不能代替 IM 登入憑證。
訪問方式與角色
| 取值 | 含義 |
|---|---|
open | 本應用的任何登入使用者都能加入,不需要也不能提交票據。角色取頻道的 default_role,仍受應用狀態、頻道封禁和併發額度限制 |
ticket | 預設值。必須提交一次性票據,票據繫結本應用的某個使用者、這個頻道和角色。知道使用者名稱、頻道 ID 或媒體房間名都不能繞過 |
publisher | 可以釋出麥克風音訊;影片頻道還可以釋出攝像頭影片 |
subscriber | 只能接收。角色由服務端決定,釋出者關掉麥克風和攝像頭也還是釋出者 |
audio頻道不能開攝像頭。video頻道里關掉攝像頭,每日用量中仍計入影片類別;實際扣費的標準時長按收到的影片流分檔,沒有收到影片時按音訊檔計算。- 建立後不能修改媒體型別、訪問方式、預設角色和人數上限。
生命週期與佔用
頻道的狀態:open(開放)→ closing(關閉中)→ closed(已關閉)。關閉或到期後不能再加入,已有成員開始退出,媒體資源全部回收後才變為 closed。頻道 ID 區分大小寫,關閉後不能再用來建立頻道。
成員的會話:使用者每加入一次生成一個 session_id,狀態為 joining(加入中)→ joined(已加入)→ leaving(退出中)→ left(已退出)。joining 時已經佔了一個席位;leaving 時可能還佔著席位和併發額度,換一個新的加入請求也不能繞過回收。
同時只能在一處:
- 一個使用者同一時間只能在一個通話或一個頻道里,他登入的其他裝置不能同時加入。
- 頻道和通話共用應用的併發通話額度:進行中的通話和有媒體活動的頻道合計計數,一個頻道無論多少人只佔一個額度。
- 頻道里沒人時,媒體房間會被回收,但頻道本身仍然開放,之後還可以加入。
人數:
| 欄位 | 含義 |
|---|---|
seat_count | 佔用的席位數,包括還在加入中、退出中的 |
joined_count | 最近一次確認的媒體線上人數 |
media_state 為 unknown 時,服務端暫時無法確認媒體狀態,joined_count 是最後一次確認的人數,不要當作準確的實時人數顯示。成員的 media_connected 為 null 也表示暫時無法確認。
平臺與釋出狀態
| 平臺 | 頻道能力 |
|---|---|
| Web / React / Vue | 加入頻道收發音影片,訂閱頻道狀態 |
| Android | Kotlin / Java API、LiveKit 適配和影片檢視 |
| Flutter / iOS | Flutter 接入 LiveKit 和影片元件;iOS 透過 Flutter 外掛接入 |
| Tauri | 在介面視窗中執行媒體,依賴實際的 WebView 和裝置許可權 |
| UniApp H5 | 專用的 H5 入口,複用 Web SDK;可以用倉庫 demo直接驗證 |
| 微信小程式 | 只能查詢頻道、本人會話和成員,不能加入頻道收發音影片 |
| UniApp App(Android / iOS) | 已提供 UTS 原生橋接,可以在 App Demo 的頻道頁用真機驗證;還沒有獨立的 Swift SDK |
這些能力已經在原始碼中實現並透過部分自動化檢查,但還沒有釋出包含它們的 SDK 版本;真機互通和後臺持續採集仍在驗收。請使用包含頻道 API 的 SDK 版本:舊版 SDK 不會因為服務端開啟了頻道就能使用。
