新知实验室 腾讯云实时音视频产品体验_tuiroom gitee-程序员宅基地

技术标签: 经验分享  实时音视频  腾讯云  音视频专栏  云计算  

本次体验嫁接在本人正在开发的一个线上招聘系统(PCWEB端)中,实现线上面试沟通功能。

本文编写旨在记录本次体验的整体过程。

如果在某一个时间点可以帮助到其他同学,鄙人实属有幸。

名次解释:T —— Tencent 腾讯;R-T —— Real-Time 实时的;C —— Communication 传播 / 交流 / 通信。

前端代码链接:https://gitee.com/lzy147561/trtcdemo.git

参考文档:含UI的集成方案——集成 TUIRoom (Web)

接入腾讯云实时音视频

TRTC基本实现逻辑

房间是一个基本概念,从加入房间,到退出房间可以为本地音视频通话的一个生命周期。

  • 一切的开始——创建房间:通过这个房间,TRTC云服务才能知道,接收到的某个人的音视频信息要发送到哪里。
  • 发布文件流:加入房间,需要给房间内的其他人发送本地音视频数据流给到云服务,然后再由云服务处理完成后转发到房间内的其他用户。
  • 订阅远程流:其他的用户需要有一个订阅的处理,利用SDK接收云服务器端,别的用户发送过来经过处理的音视频,然后进行展现和播放。
  • 一切的终止——退出房间:生命周期结束,SDK会自动取消订阅远程流和取消发布本地流。

创建实时音视频应用

获取APPID

SDKAppID与SecretKey是必要信息,可以复制保存在服务端env文件
在这里插入图片描述

下载含UI的集成方案代码

集成方案代码下载地址
在这里插入图片描述

方案中重要代码结构简析

index.vue

  • 集成方案的入口文件,即在项目引入的组件
  • 主体包含header content footer 组件
  • 同时包含sidebar setting组件

components

  • 这里面的组件并不是所有都使用到index.Vue,如果在您的接入项目中有需要可以自行引入
  • 同时也可以自行修改组件中的代码来更适用于自己的项目,比如只允许通过房间号分享,那就直接注释掉相关代码
  • 也可以通过sidebar组件

stores

  • 本集成方案使用pinia对状态进行的管理
  • 可以找到你所需要的数据(用户列表等),自行做透传处理,比如加入到某事件的参数中

hooks

  • 交互操作的入口函数以及相关业务逻辑实现,在其中调用tui-room-core中的核心操作函数

trtc-cloud 与 tui-room-core

  • 与原生SDK交互的相关操作,如果后续有同学想直接对SDK进行操作可以参考这里的代码

接入项目实现业务

服务端(PHP)获取UserSig以及初始化参数

推荐使用服务端生成UserSig的方式,更安全。链路如下

在这里插入图片描述

下载生成UserSig SDK

要使用HMAC-SHA256签名算法(新版)生成UserSig

生成UserSig SDK下载地址

构建初始化参数

  • api参数:client_guid 用户uuid 以及 type:'admin' | 'client' 区分创建/加入
  • 推荐在后端整体生成初始化参数并响应回前端。注意初始化参数类型。相关处理见下方代码注释
export interface TuiRoomInitParam {
    
  // 特别注意appId是一个数字类型,千万别是string
  sdkAppId: number,
  // 根据type参数查询不同的表验证传入的userId,并获取用户详情$userInfo
  userId: string, 
  // 根据下载的生成UserSig的SDK中的genSig(可以在SDK中将appID和secretKey写入文件,避免作为参数传递)
  userSig: string,
  // $userInfo.nickName
  userName: string,
  // $userInfo.avatarUrl
  userAvatar: string,
  // 用户用于屏幕分享的唯一 Id,`share_${userId}`
  shareUserId: string,
  // 再次调用genSig生成
  shareUserSig: string,
}

创建房间信息

创建房间时调用

  • api参数:invite_guid 邀请者guid以及creator_guid 创建者guid,响应数据:roomId
  • 根据creator_guid查询得到数据库中是否存在房间,获取roomID,如果不存在,使用用户信息中的id字段作为roomID(必须是数字)
  • 将房间信息添加/更新到数据库中。如果roomID存在,表示该用户之前已经创建过房间,当下想重新创建,则将字段更新即可
  • 核心字段:
    • roomId
    • creator 创建者guid
    • invite 邀请者guid(因为业务要求一对一面试 所以邀请者是一个确定的值)——创建时更新
    • expires 过期时间戳(做一个房间有效期限制)——创建时更新 当前时间+180分钟
    • status 状态 1:正常; 2:关闭 —— 创建时更新为1

查询房间信息

加入房间时调用

  • api参数:client_guid 用户guid 以及 roomId 房间号,响应数据:true/false
  • 根据roomId查询房间信息,验证是否存在
  • 验证该房间的邀请者存在 且 是否与client_guid匹配
  • 验证有效期存在 且 大于当前时间
  • 验证状态是否为1

清除房间信息

退出房间时调用

  • api参数:creator_guid 创建者guid 以及 roomId 房间号,响应数据:true/false
  • 根据roomId查询房间信息,验证是否存在
  • 验证创建者guid是否正确
  • 清空邀请者字段
  • 清空有效期
  • 更新状态为2

前端(VUE)业务逻辑

参考含UI的集成方案——集成 TUIRoom (Web)进行配置开发环境,注意该方案使用的是[email protected]

代码结构

在这里插入图片描述

Admin页面

  • 引入@/TUIRoom/index.vue组件,并设置ref为TuiRoom,用来获取该组件实例
  • mounted方法
    • 调构建初始化参数接口
    • 调用this.$refs.TuiRoom中的init接口,传入获取的初始化参数
    • 调创建房间接口获取roomId
    • 调用this.$refs.TuiRoom中的createRoom接口,传入roomId等信息(参看文档)
    • 监听onDestroyRoom事件,在销毁房间时,调用清除房间信息接口

Client页面

  • 引入@/TUIRoom/index.vue组件,并设置ref为TuiRoom,用来获取该组件实例
  • 添加modal窗用来输入roomId
  • modal窗confirm具柄
    • 调构建初始化参数接口
    • 调用this.$refs.TuiRoom中的init接口,传入获取的初始化参数
    • 调加入房间接口验证房间信息
    • 调用this.$refs.TuiRoom中的enterRoom接口,传入roomId等信息(参看文档)

体验感受总结

  • 整体感受非常好,文档完整,接入逻辑流畅,无“反人类”设计
  • 通话质量极好,但是因为受本系统业务使用场景限制,在一个房间内仅支持两人,延时基本可以忽略,且同时在线房间浅测尚无感知阙值
  • 方案中对错误的处理很完善,可以清楚的知道问题出在哪个环节
  • 此功能对本需求可谓完美切合
  • 建议:
    • roomId是否必须使用number,感觉比较局限,是否可以使用uuid
    • 可以将含UI集成方案进一步封装为NPM组件
    • 透传出来更多的信息,房间人数等,避免在组件内部进行修改
    • 创建房间可以增加一些可选限制参数,房间人数等

后续伴随业务拓展,可能会有更多建议将持续跟进补充,以上便是目前全部内容,与君共勉~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011184388/article/details/128194783

智能推荐

FX3/CX3 JLINK 调试_ezusbsuite_qsg.pdf-程序员宅基地

文章浏览阅读2.1k次。FX3 JLINK调试是一个有些麻烦的事情,经常有些莫名其妙的问题。 设置参见 c:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware 下的 EzUsbSuite_UG.pdf 文档。 常见问题: 1.装了多个版本的jlink,使用了未注册或不适当的版本 选择一个正确的版本。JLinkARM_V408l,JLinkA_ezusbsuite_qsg.pdf

用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放_qopengl如何鼠标控制旋转-程序员宅基地

文章浏览阅读2.6k次。** 本文仅通过用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放, 是比较入门的级别,由于个人能力有限,新手级别,所以未能施加光影灯光等操作, 未能让显示的stl文件更加真实。****效果图:**1. main.cpp```cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); _qopengl如何鼠标控制旋转

刘焕勇&王昊奋|ChatGPT对知识图谱的影响讨论实录-程序员宅基地

文章浏览阅读943次,点赞22次,收藏19次。以大规模预训练语言模型为基础的chatgpt成功出圈,在近几日已经给人工智能板块带来了多次涨停,这足够说明这一风口的到来。而作为曾经的风口“知识图谱”而言,如何找到其与chatgpt之间的区别,找好自身的定位显得尤为重要。形式化知识和参数化知识在表现形式上一直都是大家考虑的问题,两种技术都应该有自己的定位与价值所在。知识图谱构建往往是抽取式的,而且往往包含一系列知识冲突检测、消解过程,整个过程都能溯源。以这样的知识作为输入,能在相当程度上解决当前ChatGPT的事实谬误问题,并具有可解释性。

如何实现tomcat的热部署_tomcat热部署-程序员宅基地

文章浏览阅读1.3k次。最重要的一点,一定是degbug的方式启动,不然热部署不会生效,注意,注意!_tomcat热部署

用HTML5做一个个人网站,此文仅展示个人主页界面。内附源代码下载地址_个人主页源码-程序员宅基地

文章浏览阅读10w+次,点赞56次,收藏482次。html5 ,用css去修饰自己的个人主页代码如下:&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;html xmlns="http://www.w3.org/1999/xh..._个人主页源码

程序员公开上班摸鱼神器!有了它,老板都不好意思打扰你!-程序员宅基地

文章浏览阅读201次。开发者(KaiFaX)面向全栈工程师的开发者专注于前端、Java/Python/Go/PHP的技术社区来源:开源最前线链接:https://github.com/svenstaro/gen..._程序员怎么上班摸鱼

随便推点

UG\NX二次开发 改变Block UI界面的尺寸_ug二次开发 调整 对话框大小-程序员宅基地

文章浏览阅读1.3k次。改变Block UI界面的尺寸_ug二次开发 调整 对话框大小

基于深度学习的股票预测(完整版,有代码)_基于深度学习的股票操纵识别研究python代码-程序员宅基地

文章浏览阅读1.3w次,点赞18次,收藏291次。基于深度学习的股票预测数据获取数据转换LSTM模型搭建训练模型预测结果数据获取采用tushare的数据接口(不知道tushare的筒子们自行百度一下,简而言之其免费提供各类金融数据 , 助力智能投资与创新型投资。)python可以直接使用pip安装tushare!pip install tushareCollecting tushare Downloading https://files.pythonhosted.org/packages/17/76/dc6784a1c07ec040e74_基于深度学习的股票操纵识别研究python代码

中科网威工业级防火墙通过电力行业测评_电力行业防火墙有哪些-程序员宅基地

文章浏览阅读2k次。【IT168 厂商动态】 近日,北京中科网威(NETPOWER)工业级防火墙通过了中国电力工业电力设备及仪表质量检验测试中心(厂站自动化及远动)测试,并成为中国首家通过电力协议访问控制专业测评的工业级防火墙生产厂商。   北京中科网威(NETPOWER)工业级防火墙专为工业及恶劣环境下的网络安全需求而设计,它采用了非X86的高可靠嵌入式处理器并采用无风扇设计,整机功耗不到22W,具备极_电力行业防火墙有哪些

第十三周 ——项目二 “二叉树排序树中查找的路径”-程序员宅基地

文章浏览阅读206次。/*烟台大学计算机学院 作者:董玉祥 完成日期: 2017 12 3 问题描述:二叉树排序树中查找的路径 */#include #include #define MaxSize 100typedef int KeyType; //定义关键字类型typedef char InfoType;typedef struct node

C语言基础 -- scanf函数的返回值及其应用_c语言ignoring return value-程序员宅基地

文章浏览阅读775次。当时老师一定会告诉你,这个一个"warning"的报警,可以不用管它,也确实如此。不过,这条报警信息我们至少可以知道一点,就是scanf函数调用完之后是有一个返回值的,下面我们就要对scanf返回值进行详细的讨论。并给出在编程时利用scanf的返回值可以实现的一些功能。_c语言ignoring return value

数字医疗时代的数据安全如何保障?_数字医疗服务保障方案-程序员宅基地

文章浏览阅读9.6k次。十四五规划下,数据安全成为国家、社会发展面临的重要议题,《数据安全法》《个人信息保护法》《关键信息基础设施安全保护条例》已陆续施行。如何做好“数据安全建设”是数字时代的必答题。_数字医疗服务保障方案

推荐文章

热门文章

相关标签