1 多人語音聊天功能介紹 本文展示瞭如何使用 ZEGO Express SDK 構造多人音視頻通話場景,即實現多對多實時音視頻聊天互動。用戶可在房間內與其餘用戶進行實時音視頻通話,互相推拉流。該場景可用於多人實時音視頻聊天、多人視頻會議等。 2 Web端實現多人語音聊天準備工作 在應用多人音視頻通話 ...
1 多人語音聊天功能介紹
本文展示瞭如何使用 ZEGO Express SDK 構造多人音視頻通話場景,即實現多對多實時音視頻聊天互動。用戶可在房間內與其餘用戶進行實時音視頻通話,互相推拉流。該場景可用於多人實時音視頻聊天、多人視頻會議等。
2 Web端實現多人語音聊天準備工作
在應用多人音視頻通話場景之前,請確保:
- 已在項目中集成 ZEGO Express SDK,實現基本的實時音視頻功能,詳情請參考 快速開始 - 集成 和 快速開始 - 實現流程。
- 已在 ZEGO 控制台 創建項目,並申請有效的 AppID,詳情請參考 控制台 - 項目管理 中的“項目信息”。
3 vue集成語音聊天示例源碼下載
請參考 下載示例源碼 獲取源碼。
相關源碼請查看ZEGO Express SDK “src/Examples/Scenes/VideoForMultipleUsers” 目錄下的文件。
4 ZEGO音視頻SDK使用步驟
本節將介紹如何使用 ZEGO Express SDK 實現多人視頻通話。
-
流程圖如下:
-
API 調用時序圖如下:
ZEGO Express SDK 可支持多人視頻通話,如上時序圖以 2 名房間成員間的實時視頻通話為例,建議開發者參考上述流程設計自己的多人實時視頻通話場景。
4.1 創建多人音視頻聊天引擎實例
創建 ZegoExpressEngine
引擎實例,將申請到的 AppID 傳入參數 “appID”,將接入伺服器地址傳入參數 “server”。
“server” 為接入伺服器地址,獲取方式如下:
- 登錄 ZEGO 控制台。
- 在對應項目下單擊“查看”。
- 進入“項目配置”界面,在“項目信息”頁簽的“配置信息”中,單擊 “ServerSecret” 後面的小眼睛按鈕即可獲取對應的接入伺服器地址。
const zg = new ZegoExpressEngine(appID, server);
4.2 多人語音聊天開啟房間內用戶變化通知
開發者需在每位用戶調用 loginRoom
介面登錄房間時,將 ZegoRoomConfig
中的 “userUpdate” 設置為 “true” ,用於接收其他用戶進出房間的回調通知(即 roomUserUpdate
。
const isLogin = await zg.loginRoom(
roomID,
token,
{ userID },
{ userUpdate: true }
);
4.3 監聽回調事件
為實現多人視頻通話功能,需要監聽房間內用戶和流的增減並做出相應處理,開發者可根據實際需要,實現 ZegoEvent(包含 ZegoRTCEvent
和 ZegoRTMEvent
)中的某些方法,創建引擎後可通過調用 on
) 介面設置回調。
4.3.1 監聽房間內的用戶變化
只有調用 loginRoom
登錄房間時設置了關註用戶變化,即 ZegoRoomConfig
中的 “userUpdate” 設置為 “true”(預設值為 “false”)時,才能監聽 roomUserUpdate
回調。
為了監聽房間內的用戶變化,需註冊 roomUserUpdate
回調,已登錄房間內用戶的新增和刪除都會觸發該回調,開發者可以根據實際需要在回調中實現自己的業務邏輯。
回調中 “updateType” 參數指明瞭房間內用戶變化的類型,該參數取值如下:
用戶變化類型 | 枚舉值 | 說明 |
---|---|---|
用戶新增 | ADD | 房間內用戶增加(即加入房間),“userList” 為新增的用戶列表。 |
用戶減少 | DELETE | 房間內用戶減少(即退出房間),“userList” 為減少的用戶列表。 |
用戶首次登錄房間時,若此房間內已存在其他用戶,該新登錄用戶會通過此回調接收到新增類型的用戶列表,即 “updateType” 為 “ADD” 的回調,該用戶列表為房間內已存在的用戶。
zg.on('roomUserUpdate', (roomID, updateType, userList) => {
console.log('roomUserUpdate roomID ', roomID, streamList);
if (updateType === 'ADD') {
// update view
} else if(updateType == 'DELETE') {
// update view
}
});
4.3.2 多人語音聊天監聽房間內的流變化
當某條流被刪除時,如果開發者正在調用 startPlayingStream
介面拉取該流,請調用 stopPlayingStream
介面停止拉流,否則 SDK 會報拉流錯誤。
為監聽房間內的流變化,需註冊 roomStreamUpdate
回調,已登錄房間內流的新增和刪除都會觸發該回調,開發者可以根據實際需要在回調中實現自己的業務邏輯。
回調中 “updateType” 參數指明瞭房間內流變化的類型,該參數取值如下:
流變化類型 | 枚舉值 | 說明 |
---|---|---|
流新增 | ADD | 房間內流增加,“streamList” 為新增的流列表。 |
流減少 | DELETE | 房間內流減少,“streamList” 為減少的流列表。 |
用戶首次登錄房間時,若此房間記憶體在其他用戶正在推流,會接收到流新增列表,即 “updateType” 為 “ADD” 的回調。
zg.on('roomStreamUpdate', (roomID, updateType, streamList) => {
console.log('roomStreamUpdate roomID ', roomID, streamList);
if(updateType === 'ADD') {
// update view
} else if(updateType == 'DELETE') {
// update view
}
});
4.3 推流、拉流、登錄房間其他操作
請參考 快速開始 - 實現流程 依次完成登錄房間、推流和拉流相關操作。
5 API 參考列表
方法 | 描述 |
---|---|
ZegoExpressEngine |
初始化 Engine |
roomStreamUpdate |
房間內流變化回調 |
roomUserUpdate |
房間內用戶變化回調 |
loginRoom |
登錄房間 |
createStream |
創建流 |
startPublishingStream |
開始推流 |
startPlayingStream |
開始拉流 |
stopPublishingStream |
停止推流 |
stopPlayingStream |
停止拉流 |
logoutRoom |
退出房間 |
5 獲取音視頻SDK更多幫助
獲取本文的Demo、開發文檔、技術支持,訪問即構文檔中心
近期有開發規劃的開發者可上即構官網查看,恰逢即構七周年全線音視頻產品1折的優惠,聯繫商務獲取RTC產品優惠;
音視頻場景解決方案分享,更多詳情可搜索官網(https://zegoguanwang.datasink.sensorsdata.cn/t/pB)