即時通訊TIM官網地址 即時通訊TIM SDK API文檔地址 實時音視頻TRTC官網地址 實時音視頻TRTC SDK API文檔地址html
即時通訊 IM 提供全球接入、單聊、羣聊、消息推送、資料關係鏈託管、賬號鑑權等全方位解決方案,並提供完備的 App 接入、後臺管理接口。 使用這些功能的邏輯是,下載騰訊雲給出的SDK包,根據SDK包封裝好的API進行調用。前端
推薦使用NPM 集成 建立實例並註冊插件按照文檔地址來便可,再也不贅述。git
須要兩個參數web
生成UserSig 文檔數組
此處演示在前端生成方法: 直接用官方Demo裏的js文件promise
咱們須要加以修改服務器
緣由:由於Demo裏的 lib-generate-test-usersig.min.js
是註冊了全局方法GenerateTestUserSig()
在 window 裏,而後GenerateTestUserSig
調用了這個方法,而咱們的代碼裏沒有註冊過,因此咱們不能直接使用,不然會提示找不到全局方法。markdown
修改:將GenerateTestUserSig.js
粘貼進lib-generate-test-usersig.min.js
,並export 導出,這樣須要生成UserSig的地方直接引入lib-generate-test-usersig.min.js
裏面的genTestUserSig()
函數便可。網絡
登陸成功後,並不能立刻使用SDK,而是需等待 sdk 處於 ready 狀態後(監聽事件 TIM.EVENT.SDK_READY)才能調用 sendMessage 等須要鑑權的接口。
這裏個人解決方案是:在須要在調用的地方添加監聽,在監聽執行一次以後即撤銷。
羣組自定義字段的使用
官網沒有示例,使用方法爲:
let promise = window.tim.createGroup({
type: TIM.TYPES.GRP_AVCHATROOM,
name: state.formState.roomName,
groupID: state.formState.roomID,
introduction: state.formState.roomIntro,
groupCustomField: [{ key: "partyBeginTime", value: partyBeginTime }],
});
複製代碼
數組 + 鍵值對的形式,value 最好 toString()。 在取的時候是這樣的 groupProfile.groupCustomField["0"].value
消息發送
API文檔 須要注意的是建立消息的異步與發送消息異步的協調,並且本身發送的消息本身是不會收到的,若是須要顯示本身發的消息,須要單獨作處理。
EVENT 事件列表文檔 羣成員對象的字段 接受到的消息的字段 這裏接收到的消息存在一個數組裏,每個消息都是 e2 格式,須要遍歷出來。
官網地址 比 TIM 更簡單一點。
這裏與 TIM 不一樣的是,再也不有建立房間這一律念,加入即建立,退出即銷燬。 加入房間通話後的流程爲
建立TRTC client
const client = TRTC.createClient({
mode: "rtc",
sdkAppId: window.options.SDKAppID,
userId: state.formState.userID,
userSig: state.userSig,
useStringRoomId: true,
});
複製代碼
注意,若是 RoomID 你想整成字符串,須要跟上述代碼同樣 useStringRoomId: true
,不然roomId 爲 number 類型時,取值要求爲 [1, 4294967294] 的整數; 詳細限制請看這裏
client 加監聽,進來以後須要監聽,不然加入以後再監聽可能錯過消息
client.on("stream-added", (event) => {
const remoteStream = event.stream;
console.log("遠端流增長: " + remoteStream.getId());
//訂閱遠端流
client.subscribe(remoteStream);
});
client.on("stream-subscribed", (event) => {
const remoteStream = event.stream;
console.log("遠端流訂閱成功:" + remoteStream.getId());
// 播放遠端流
remoteStream.play("remote_stream");
});
複製代碼
初始化本地流 這裏與 官方文檔 無異,須要額外注意的一點是,這裏不管如何不能重複執行,不然會出現兩個乃至多個本地視頻窗口
加入房間與推流,須要先加入以後再推流,這裏我沒有區分的需求,索性直接合起來寫
window.client
.join({ roomId: roomID })
.catch((error) => {
console.error("進房失敗 " + roomID + error);
console.log(roomID);
})
.then(() => {
console.log("進房成功");
window.client
.publish(localStream)
.catch((error) => {
console.error("本地流發佈失敗 " + error);
})
.then(() => {
console.log("本地流發佈成功");
});
});
複製代碼
取消推流與退出房間,取消推流時,本地的畫面其實沒有任何改變,對方那裏本身的畫面會消失,退出房間時,本地的對方畫面消失,但都不會自動移除 video 元素,若有須要,本身移除。這裏也與官網不同,我合起來寫了。
console.log("leave1v1Room Action");
window.client.unpublish(window.localStream).then(() => {
console.log("取消推送");
client
.leave()
.then(() => {
// 退房成功,可再次調用client.join從新進房開啓新的通話。
console.log("leave success");
})
.catch((error) => {
console.error("退房失敗 " + error);
// 錯誤不可恢復,須要刷新頁面。
});
});
複製代碼
參考連接
www.cnblogs.com/fqh123/p/12… www.zhongweipeng.cn/2020/03/31/… blog.csdn.net/b7410852963…