[Web端接入经验分享] 腾讯云即时通信TIM、实时音视频TRTC

[Web端接入经验分享] 腾讯云即时通信TIM、实时音视频TRTC

即时通信TIM官网地址
即时通信TIM SDK API文档地址
实时音视频TRTC官网地址
实时音视频TRTC SDK API文档地址

概念与可能造成疑惑的问题

  1. SDK 是什么?
    Github 地址
    腾讯云将底层与后台代码封装混淆之后生成 SDK,用户下载 SDK 后,即可简单使用封装的功能。在这个包内包含了发送网络请求自动与腾讯云的服务器通信。
    即时通信 IM 的前身是 QQ 的即时通信系统,我们抽离 QQ 的通用模块,并将其整合成适合终端接入的 IM SDK 及后台服务。
    您可以把 IM SDK 理解为一个没有用户交互界面的 QQ,把 IM SDK 集成到您的 App 里,就相当于把一个 QQ 的内核集成在您的 App 内部。

  2. SDKAppID 与密钥的概念
    在调 部分 SDK 接口时,需要传入的参数。
    这两个东西需要从控制台生成。应用获得,与其他云平台操作步骤类似。
    密钥是区分你是否是本人的关键,需要保管好,以防泄露。

  3. TIM 即时通信, TRTC 实时音视频,TRTC CALLING 三者的关系
    TIM 专注于消息通信,TRTC 可以使用户进入一个房间进行音视频推流与接收,TRTC CALLING 可以向指定用户进行呼叫。可见问题:https://cloud.tencent.com/developer/ask/231493
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KAvyQP5P-1627648197378)(https://main.qcloudimg.com/raw/06840f27440b0295968dc66601f3436c.svg)]

img

  1. TRTC 音视频通话房间是什么?
    不存在会自动生成,相当于一个不需要创建的频道。

1 TIM 即时通信接入

即时通信 IM 提供全球接入、单聊、群聊、消息推送、资料关系链托管、帐号鉴权等全方位解决方案,并提供完备的 App 接入、后台管理接口。
使用这些功能的逻辑是,下载腾讯云给出的SDK包,根据SDK包封装好的API进行调用。

引入 SDK 包 文档地址

推荐使用NPM 集成
创建实例并注册插件按照文档地址来即可,不再赘述。

用户登录注册/鉴权

官网文档 API文档

需要两个参数

  • UserID:旧称为 Identifier,用户登录即时通信 IM 时使用的用户名,即您 App 里的用户 ID。
    例如,App 里有一个用户,该用户的 ID 是27149 ,那么您可以用27149作为登录即时通信 IM 的 UserID。
  • UserSig:用户登录即时通信 IM 时使用的密码,其本质是 App Server 用密钥对 UserID 等信息加密后的数据。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2cHHYps-1627648197387)(https://main.qcloudimg.com/raw/4d3353723b75a1df35f8bb09a3bfe386.svg)]

生成UserSig 文档

此处演示在前端生成方法:
直接用官方Demo里的js文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P2ICM3rj-1627648197389)(C:\Users\longyuqi\Desktop\接入经验分享.assets\image-20210730185603454.png)]

我们需要加以修改

原因:因为Demo里的 lib-generate-test-usersig.min.js是注册了全局方法GenerateTestUserSig()在 window 里,然后GenerateTestUserSig调用了这个方法,而我们的代码里没有注册过,所以我们不能直接使用,否则会提示找不到全局方法。

修改:将GenerateTestUserSig.js粘贴进lib-generate-test-usersig.min.js,并export 导出,这样需要生成UserSig的地方直接引入lib-generate-test-usersig.min.js里面的genTestUserSig()函数即可。

两个有启发的地方:这个博客 和 github 。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WPOEbQmT-1627648197392)(C:\Users\longyuqi\Desktop\接入经验分享.assets\image-20210730190038461.png)]

监听逻辑 与 SDK Ready

登录成功后,并不能马上使用SDK,而是需等待 sdk 处于 ready 状态后(监听事件 TIM.EVENT.SDK_READY)才能调用 sendMessage 等需要鉴权的接口。

这里我的解决方案是:在需要在调用的地方添加监听,在监听执行一次之后即撤销。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F2dYnU19-1627648197393)(C:\Users\longyuqi\Desktop\接入经验分享.assets\image-20210730192646931.png)]

群组相关

相关文档地址
群组系统介绍

群组自定义字段的使用

官网没有示例,使用方法为:

      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 格式,需要遍历出来。

2 TRTC 实时音视频接入

API 文档地址

与 TIM 相同,第一步是引入SDK

官网地址 比 TIM 更简单一点。

加入房间

这里与 TIM 不同的是,不再有创建房间这一概念,加入即创建,退出即销毁。
加入房间通话后的流程为

  1. 创建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] 的整数; 详细限制请看这里

  2. 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");});
    
  3. 初始化本地流 这里与官方文档无异,需要额外注意的一点是,这里无论如何不能重复执行,否则会出现两个乃至多个本地视频窗口

  4. 加入房间与推流,需要先加入之后再推流,这里我没有区分的需求,索性直接合起来写

        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("本地流发布成功");});});
    
  5. 取消推流与退出房间,取消推流时,本地的画面其实没有任何改变,对方那里自己的画面会消失,退出房间时,本地的对方画面消失,但都不会自动移除 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);// 错误不可恢复,需要刷新页面。});});
    

参考链接

https://www.cnblogs.com/fqh123/p/12696124.html
http://www.zhongweipeng.cn/2020/03/31/%E5%8D%B3%E6%97%B6%E9%80%9A%E8%AE%AFIM/
https://blog.csdn.net/b7410852963/article/details/105796326

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云部署清华大学ChatGLM-6B实战

简介(来自官方) ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别…

Chat GPT的到来,对普通人来说是福还是祸?

AI机器人的功能可能比我们想象的更大,可以创作也可以模拟人类的语言行为,与人类进行自然的聊天交流。同时已经开始代替人类做一些基础的工作,未来可能代替更多的人类工作。人工智能的出现也值得我们人类自己深思,如果我们的工作被…

使用Mendeley和CvtCNKI进行中英文参考文献引用管理(含硕博论文)

在写学术论文和学位论文的时候,往往需要引用大量参考文献,以前博主的做法都是边写论文边把相关参考文献以word批注的形式列在侧边栏(因为后面修改的时候可能还会有所变动),等论文定稿之后再手动对引用的相关参考文献编…

关于硕士毕业论文中会议conference的参考文献格式修正GB7714-87#outputstyle#endnote

1问题描述 在硕士毕业论文中需要按照GB7714-87的参考文献引用标准对会议论文进行参考文献格式规范 GB7714-87中的要求如图:(因为我们文中引用的论文一般 不会是论文集,而是论文集合中析出的一篇文章,so这个格式非常复杂&#xff…

IEEE Transactions模板中参考文献作者缩写、期刊名缩写

IEEE Transactions模板中参考文献作者缩写、期刊名缩写 本文章记录如何在IEEE Transactions的模板中,解决参考文献的作者缩写、期刊名字缩写的问题。 目录 IEEE Transactions模板中参考文献作者缩写、期刊名缩写0.上效果图1.如何设置.bib文件2.如何作者名字的缩写3…

ForeFront Chat 免费版GPT-4来了!

Forefront Chat简介 近日,Forefront AI 正式推出 Forefront Chat, 允许用户免费体验GPT-4 的强大功能 。 Forefront AI 在 Twitter 上表示:“今天,我们发布了 Forefront Chat 的免费 alpha 版,希望带来更出色的 ChatG…

女网红靠GPT-4交1000+男友,聊天按分钟收费,一周收入50万

点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源! 上一篇:Alibaba开源内网高并发编程手册.pdf 编辑:鱼羊 转自:量子位 | 公众号 QbitAI 注意看,这个女人叫卡琳,靠着GPT-4&a…

熵在计算机方向的应用(浅谈信息熵)

信息是一个很抽象的东西,吃苹果的概率是二分之一,吃香蕉的概率是二分之一,这里面包含了多少信息量,由于信息很抽象,无法直观的量化。 信息熵原先是热力学中的名词,原先含义是表示分子状态的混乱程度。 香…

中文信息熵的计算

摘要:本文介绍了利用基于词的一元模型、二元模型、三元模型估计中文信息熵的计算方法,并通过中文维基百科语料得到三种统计语言模型计算得到的中文信息熵分别为13.711比特/词、6.402比特/词、1.508比特/词。 关键词:信息熵; 统计…

信息与熵值的计算

原文地址https://blog.csdn.net/kuang_liu/article/details/21469553 1. 什么是信息? 信息的定义涉及概率论中的随机事件概率,如果待分类事物可能划分在多个分类之中,则符号 Xi 的信息定义为: 其中 p(xi) 是选择该分类的概率。&…

信息熵的数值计算公式

1948年,信息论之父 C. E. Shannon (香农)借鉴了热力学的概念,把信息中排除了冗余后的平均信息量称为“信息熵”,并给出了计算信息熵的数学表达式。 信息熵介绍 一元变量信息熵: 式中对数一般取2为底&#…

从熵到相位传递熵,附matlba和python代码

先来一张图,预览一下最近为了整明白相位传递熵所要恶补的知识叭,泪目了:( 好吧,废话不多说,直接开始吧! 一. 熵是什么? 1、香浓熵 2、联合熵、条件熵和互信息 3、传递熵 二、直方图 1、连续随…

信息熵计算权重

信息熵理论及应用 1948年美国数学家香农(shanonc.E)为解决信息的度量问题提出了信息熵的概念。信息熵是信息论中用来刻画信息无需度的一个量,熵值越大,表示信息的无序化程度越高,相对应的信息效率越高 计算过程 建立…

熵的推导与计算

一、信息熵 熵 (entropy) 这一词最初来源于热力学。1948年,克劳德爱尔伍德香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。本文只讨论信息熵。首先,我们先来理解一下信息这个…

如何更好的分析潜在人脉?聊聊华为云图引擎GES的Cypher子查询

摘要:本文以华为云图引擎 GES 为例,来介绍如何使用图查询语言 Cypher 表达一些需要做数据局部遍历的场景。 本文分享自华为云社区《使用 Cypher 子查询进行图探索 -- 以华为云图引擎 GES 为例》,作者:蜉蝣与海。 在图数据库/图计…

基于面板数据的熵值法介绍与实现

熵值法是一种基于信息熵理论的客观赋值方法。即数据越离散,所含信息量越多,对综合评价影响越大。 目录 一、基于面板数据熵值法介绍二、R语言实现参考文献 一、基于面板数据熵值法介绍 传统的熵值法有个弊端,只能针对于截面数据,…

信息熵的计算

信息熵计算公式: 演示数据: 性别(x)考试成绩(y)男优女优男差女优男优 X的信息熵计算为: p(男) 3/5 0.6 p(女) 2/5 0.4 根据上面的计算公式可得: 列X的信息熵 为: H&…

各种信息熵(Information entropy)的计算方法

一、Jensen不等式 若f为区间I上的凹函数,则Jensen不等式成立: 这里若函数f为凹函数,则有: 凹函数(上凸)如下图所示: 归纳证明: 二、信息论 1.熵(信息不确定性度…

信息与信源熵

0x01 三个定义 信息 指各个事物运动的状态及状态变化的方式。人们从对周围世界的观察得到的数据中获得信息。信息是抽象的意识或知识,它是看不见、摸不到的。当由人脑的思维活动产生的一种想法仍被存储在脑子里时,它就是一种信息。 消息 指包含信息的…

python计算图片的信源熵值(信息熵)

附录: from PIL import Image from matplotlib import pyplot as plt import numpy as np import scipy as cp import math image Image.open(rC:\Users\Administrator\Desktop\IMG.jpg) # 读入和显示图像 imagesnp.asarray(image) plt.subplot(211) plt.imshow(im…