即时通讯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…