基于Trtc的内贸站视频聊天服务【二】

基于Trtc的内贸站视频聊天服务【二】

上一节课和大家聊了一下web端视频聊天的技术演变和发展,需要满足web端视频聊天的基本条件。以及介绍了一下腾讯云提供的Trtc服务,大概说了下腾讯云的sdk。本节课就以实际开发内贸站视频聊天的项目(Swan),和大家理一下这个项目的构造,以及重要的代码逻辑。

svn地址: http://192.168.16.81:58760/svn/ABIZ/SWAN/trunk/SWAN

项目框架

项目前端框架: React(16.12.0),TypeScript,Webpack,node服务等。
通过 WebpackDevServer(小型的node.js Express服务器)配置启动服务,node启动服务,经webpack打包,最后会生成6个js文件4个css文件
在这里插入图片描述
这个项目的最终目的就是**输出js和css。

通过在宿主页面引用不同的js和css,就可以将聊天的页面嵌入到其他的项目中,这样做对其他项目的影响较小,估计这也是设计这种类型项目的原因。

项目组成

这个项目主要分为3个页面,一个是视频聊天页,一个是等待聊天页,还有一个是各种错误显示页。
在宿主页通过script标签,给这3个页面传递数据,如下:

在这里插入图片描述
在主页面通过document.querySelector获取宿主页传递过来的数据进行初始化,如下:
在这里插入图片描述
项目框架是基于React,通过Typescript对页面形式进行约束,所以文件的形式是.tsx,实际上和jsx没有太大的区别。

逻辑介绍

因为核心代码逻辑都在聊天室这块,就以此为切入点。先看代码:

withStateManager(withTRTC(withRoomModules(DesktopRoom)))

这种是高阶组件的写法,主体是DesktopRoom模块,通过withStateManagerwithTRTCwithRoomModules对主模块进行各种分类功能分类处理,使逻辑看的清晰。
但是通过这种写法,尽管逻辑清晰,但对初看代码的同学可能不是那么友好,在主组件看到调用的方法,可能是上层声明的,也可能是上上层,如果你重外层往里面看,可能又不知道,这写的是啥,一头雾水。这也是这种高阶组件的弊端。

下面我分别介绍各个模块的功能:

WithStateManager(辅助高阶模块一)

这个模块在最外层,主要处理的是用户和聊天房间的关系。
因为是和楼上麦通部门合作,通过和麦通建立联系,他们对状态进行管理;

let token_url = `https://membercenter.cn.made-in-china.com/tm/dom_get_token/?callback=?`;MaiTong.configWeb({token_url,token: this.props.miccnToken,roomId: roomNo.toString(),domain: "miccn",lang: "zh"
});MaiTong.showlog(true);await MaiTong.startWeb();

通过监听事件对麦通传过来的各个状态进行处理;

addTradeMessengerEventListener(){const MaiTong = window.MaiTong;const _this = this;const i18n = I18n.getInstance();const { roomNo, isSupplier,expoId } = this.props;const expoUrl = "//cn.made-in-china.com/expo/"+expoId+".html";//TradeServerEventEnumMaiTong.listen(function () {if(msg as ReceivedUserMessage && (msg as ReceivedUserMessage).msgType === "TEXT") {const { content, timestamp } = msg as ReceivedUserMessage;_this.handleMessageReceive(content, timestamp);}})...
}
WithTRTC(辅助高阶模块二)

这个模块主要处理视频流的创建于发布,通过腾讯云的SDK建立联系,通过监听事件,完成对视频流的调节与交互。

const { sdkAppId, userId, userSig } = this.props;this.trtcClient = TRTC.createClient({mode: ClientModeEnum.VIDEO_CALL,sdkAppId,userId,userSig
});

sdkAppId, userId, userSig这3个字段是在注册腾讯云的时候官方提供的。

腾讯云SDK的监听:

this.trtcClient?.on(ClientEventNameEnum.STREAM_ADDED, ({ stream }) => {console.log('远端流增加: ' + stream.getId());this.trtcClient?.subscribe(stream);this.onStreamsNumberChange();
});this.trtcClient?.on(ClientEventNameEnum.STREAM_REMOVED, ({ stream }) => {this.removeStream(stream);this.onStreamsNumberChange();
});this.trtcClient?.on(ClientEventNameEnum.STREAM_SUBSCRIBED, ({ stream }) => {console.log('远端流订阅成功:' + stream.getId());this.appendStream(stream);
});this.trtcClient?.on(ClientEventNameEnum.MUTE_AUDIO, ({ userId }) => {this.appendAudioMutedId(userId);
});。。。

第三方提供了丰富的环境监测系统,举个例子:

//监测当前网络环境
this.qualityCheckTask = window.setInterval(async () => {if (this.trtcClient) {const { rtt } = await this.trtcClient.getTransportStats();if (rtt > 300 || rtt === 0) {toast(I18n.getInstance().toast.poorNetwork, {containerId: ToastContainerEnum.TOP_CENTER,toastId: ToastContainerEnum.TOP_CENTER,updateId: ToastContainerEnum.TOP_CENTER});}}}, 1000 * 60)

rtt 就是通常所说的ping,我们认为超过300,就对视频聊天有一定影响了。

WithRoomModules(辅助高阶模块三)

这个模块是对房间加一些权限管理,比如聊天室的到期时间,会话倒计时,对聊天窗口的紧急关闭功能。另外还有一些比如和业务有关系的一些操作,都是在这个模块进行处理。

 return (<VideoItem attendee={attendee} stream={stream} hostUserId={hostUserId} userId={userId}hasMultiCameras={hasMultiCameras}hostComId={company.encodeComId}audioEnabled={audioEnabled}visible={visible}volume={volume}isSelf={isSelf} isSupplier={isSupplier} isARMode={isAREnabled}isCameraSwitching={isCameraSwitching}mirror={isSelf && facingMode === FacingModeEnum.FRONT}onInvitePrivateMeeting={this.handleInvite.bind(this)}onSwitchCamera={onSwitchCamera}key={streamUserId}/>
);
DesktopRoom(主模块)

此模块是主要的渲染模块,在经过上面的辅助模块处理后,将梳理整顿好数据流输到当前模块,对数据进行实际的渲染。

在这里插入图片描述
以上就是这个项目的核心代码逻辑,通过高阶组件将业务逻辑进行分批次处理,最后引入到主模块进行集中渲染。

注意事项

1.关于腾讯云的web端视频聊天只支持谷歌浏览器,对其他的浏览器暂不支持。

await TRTC.checkSystemRequirements()

Trtc的SDK提供对浏览器的判断接口。

2.关于Socket服务,内贸站开发的会客厅是和麦通部门合作,通过他们的Socket服务对状态进行管理。对于后端创建Socket服务的情况不是很了解。

3.关于Api,腾讯开发的腾讯云服务时间不长,正处于快速迭代的时期,api的接口是和SDK的版本想绑定的,所以随意升级SDK会导致api不能适配,没有向下兼容的设计。看api的时候一定要关注SDK的版本。

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

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

相关文章

谷歌外贸sem与百度内贸sem的不同

1&#xff0c;国内的话&#xff0c;不用在乎是否使用在家用&#xff0c;起订量问题一般不用特别注意&#xff0c;如果家用零售的话&#xff0c;大家会很自觉地想到淘宝&#xff0c;拼多多。但是进出口的话&#xff0c;必须是商用&#xff0c;批发&#xff0c;大批量货物类型&am…

外贸软件进出口内贸综合型管理解决方案

外贸公司综合型业务模式&#xff0c;指的是公司涉及自营、代理进出口业务、内贸业务、转口业务等等多业务模式&#xff0c;涉及的产品种类多&#xff0c;像这样的综合型外贸公司就需要通过信息化管理实现业财一体化&#xff0c;完善资金流向&#xff0c;简化工作流程&#xff0…

使用Azure OpenAI服务创建聊天机器人

创建聊天机器人步骤&#xff1a; 1、开通 Azure OpenAI 服务 在 Azure 国际版注册账号。注册后创建OpenAI 服务。申请提交后需要等待审核&#xff0c;审核通过后就可以对接接口了。 2、创建 Azure OpenAI 服务 当你的申请通过后&#xff0c;就可以到 Azure 上创建 OpenAI 服…

C#探索之路(9):深入理解C#代码编译的过程以及原理

C#探索之路(9)&#xff1a;深入理解C#代码编译的过程以及原理 文章目录 C#探索之路(9)&#xff1a;深入理解C#代码编译的过程以及原理一、前言&#xff1a;概念解析1、编译器&#xff1a;2、JIT是什么&#xff1f;3、AOT是什么&#xff1f;4、如何理解这个“基于运行时”的概念…

办公必备!不再被格式问题困扰,轻松搞定文档转换!

大家平时在工作中会需要将文档转换为其他格式吗&#xff1f; 日常工作中&#xff0c;经常碰到需要文件格式转换的情况&#xff0c;对于掌握了一些转换技能的朋友说&#xff0c;文件格式转换自然不在话下 对于不熟练的朋友来说&#xff0c;想要轻松转换文件格式&#xff0c;就…

微信dat文件用什么软件打开,如何转成jpg常用格式

微信dat文件是在PC端微信软件产生的图片文件&#xff0c;这个文件实际上是一个图片&#xff0c;微信把聊天过程中产生的图片进行了加密&#xff0c;更改了后缀存储为dat文件。 有时候删除了聊天记录或者被系统清理软件清理了&#xff0c;但还想查看曾经的微信聊天图片。这个时候…

PDF转Word怎么调整格式?这个方法轻松解决

在日常工作中&#xff0c;我们可能会遇到需要将PDF文件转换为Word文档的情况。虽然现在的PDF转Word工具越来越智能化&#xff0c;但仍然有一些格式调整需要我们手动进行。最近就有个小伙伴说接到了一份由客户提供的PDF文档&#xff0c;需要将其中的内容转换为Word文档&#xff…

新闻发布系统(java实现)+论文

java新闻发布系统以及论文&#xff0c;有需要联系QQ:1240952102 java源码以及论文 数据库脚本 以及开发工具齐全 只需安装即可使用 有需要联系QQ:1240952102

2020秋 英文科技论文写作与学术报告-期末

2020秋 英文科技论文写作与学术报告-期末 搜索答案不易&#xff0c;切勿白嫖

开题报告:基于java新冠疫苗在线预约系统 毕业设计论文开题报告模板

开发操作系统&#xff1a;windows10 4G内存 500G 开发环境&#xff1a;JDK1.8 Tomcat8 开发语言&#xff1a;Java 开发框架&#xff1a;springboot 模板引擎&#xff1a;Thymeleaf 开发工具&#xff1a;Idea 数据库&#xff1a;mysql8 数据库管理工具&#xff1a;nav…

大学计划《数字化转型赋能教育创新发展高峰论坛》成功举办

2023年4月8日&#xff0c;由航天科技控股集团股份有限公司&#xff08;简称“航天科技”&#xff09;主办&#xff0c;CFF上海与上海电子信息职业技术学院承办、智慧树网支持的《数字化转型赋能教育创新发展高峰论坛》线上会议顺利召开。此次会议邀请到了众多教育界专家、教学名…

可复现、开放科研、跨学科合作:数据驱动下的科研趋势及应用方案

信息技术的快速发展&#xff0c;催化了数据科学场景下科研组织提高科学研究的可复现性、实现开放科研、开展跨学科领域的交叉研究等协同诉求。本文剖析了此三类诉求的实现难点&#xff0c;并提供了系统化的解决方案。 欢迎进入ModelWhale 官网注册试用&#xff0c;个人专业版与…

教育信息化时代,如何打造中学理科信息化实验操作考场方案

近年来&#xff0c;我国考试招生制度不断改进完善&#xff0c;初步形成了相对完整的考试招生体系。但随着教育事业的逐步发展&#xff0c;国务院明确提出了改革考试形式和内容&#xff1a;完善中学学业水平考试&#xff0c;规范中考学生综合素质评价&#xff0c;加快推进中学院…

论文导读 | 社交网络上的信息传播预测

作者&#xff1a;北京大学苟向阳 编者按&#xff1a; 现代社交网络极大地促进了信息的生成和传播&#xff0c;也加剧了不同信息对用户注意力的竞争。 对于一条信息的传播范围进行预测&#xff0c;能够帮助运营者和用户提前发现潜在的热点&#xff0c;从而为其决策提供指导。 …

风变MTP管理课,助力职场乘风破浪

相信很多人在自己的职场规划中&#xff0c;最终都是奔着管理岗而去的。然而&#xff0c;管理人员也并不是那么容易做的&#xff0c;因为做了管理岗就意味着要有一定的领导力&#xff0c;要会管理员工&#xff0c;要学会把任务分发给员工&#xff0c;学会识人、用人等。所以对于…

基于jsp的新闻发布系统

新闻发布系统 下面就让我们来说一说基于jsp的新闻发布系统&#xff0c;其中使用的技术有JavaBean、fillter、数据库等&#xff0c;能够实现新闻的发布功能&#xff0c;在发布之后能够进行对每一条新闻的删除、修改、或者继续增加新的文章&#xff0c;最后还能够进行查询功能&am…

宋宇-课堂对话领域研究热点与 前沿趋势探究

好家伙。。。 看这种论文容易自闭&#xff0c;&#xff0c;&#xff0c;怎么能写这么好呢。。。 下次看看博士的论文吧还是。。 定义 课堂对话( classroom dialogue /discourse) 是师生间或者生生间围绕教育教 学目标的实现所形成的良性的交流活动。&#xff3b;1&#xff3d…

【论文阅读】社交网络传播最大化问题-03

Leader-aware community detection in complex networks Leader-aware community detection algorithm - 领导感知社区检测算法 创新点相关工作概念定义基础概念创新概念1. &#xff08;领导力&#xff09;2. &#xff08;边缘紧性&#xff09;3.&#xff08;引力&#xff09; …

用WEB OF SCIENCE助力创新性科学研究

用WEB OF SCIENCE助力创新性科学研究 Web of science是什么&#xff1f;web of science 怎么用&#xff1f;2.1 这个领域值得研究吗&#xff1f;-检索创建引文报告2.2若可行&#xff0c;那该领域进展如何&#xff1f;-看综述2.3 选择自己在该领域的->细分方向&#xff08;或…

【论文阅读】社交网络传播最大化问题-04

Efficient Influence Maximization in Social Networks 相关工作改进的贪心算法对独立级联模型的改进对加权级联模型的改进 改进度折扣算法 影响力最大化&#xff1a;在社交网络中找到一小部分能够最大化传播影响力的节点(种子节点)。 一是改进原有的贪心算法&#xff0c;进一步…