新知实验室 腾讯云实时音视频产品体验_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

智能推荐

C++ vector 初始化使用笔记_初始化vector数组-程序员宅基地

文章浏览阅读637次。vector 初始化_初始化vector数组

JAVA多线程详解(超详细)-程序员宅基地

文章浏览阅读1w次,点赞12次,收藏51次。程序:开发写的代码称之为程序。程序就是一堆代码,一组数据和指令集,是一个静态的概念。进程(Process):将程序运行起来,我们称之为进程。进程是执行程序的一次执行过程,它是动态的概念。进程存在生命周期,也就是说程序随着程序的终止而销毁。进程之间是通过TCP/IP端口实现交互的。线程(Thread):线程是进程中的实际运作的单位,是进程的一条流水线,是程序的实际执行者,是最小的执行单位。通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程。线程是CPU调度和执行的最小单位。注意。_java多线程

快乐的用vscode刷LeetCode题目_vacod怎么刷leetco题目-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏5次。vscode是一款越来越受码农们喜爱的软件,大多数人学习编程绕不开的一部分就是算法,很多人都喜欢刷LeetCode的题目,本篇文章就讲述如何用vscode快乐的刷LeetCode的题目。首先我们需要准备vscode这个软件,可以去官网自行下载。下载地址:https://code.visualstudio.com/。傻瓜式安装即可,安装完成后打开软件,如果英文看不习惯可安装中文插件(vscode的大量插件拓展让这个软件变得深受喜爱)。一、首先点击应用商店,输入language搜索,选择中文简体,点击安装_vacod怎么刷leetco题目

【Scikit-Learn 中文文档】流形学习 - 监督学习 - 用户指南 | ApacheCN-程序员宅基地

文章浏览阅读143次。中文文档:http://sklearn.apachecn.org/cn/stable/modules/manifold.html 英文文档:http://sklearn.apachecn.org/en/stable/modules/manifold.html 官方文档:http://..._arpack用户指南,

分布式基础(四)——分布式理论之分布式一致性:Paxos算法-程序员宅基地

文章浏览阅读793次,点赞14次,收藏17次。通过本章的讲解 ,我们应该理解了Paxos算法的核心内容:Basic Paxos算法和Multi-Paxos 思想。Basic Paxos 是经过证明的,而 Multi-Paxos 是一种思想,缺失实现算法的必须编程细节,这就导致Multi-Paxos 的最终算法实现,是建立在一个未经证明的基础之上的,正确性是个问号。所以在实际使用时,不推荐设计和实现新的 Multi-Paxos 算法,而是建议优先考虑 Raft 算法,因为 Raft 的正确性是经过证明的。

传统TCP拥塞控制算法详解一(TCP Reno传统拥塞控制算法)_用matlab比较慢启动算法和tcp reno算法-程序员宅基地

文章浏览阅读164次。传统的TCP拥塞控制算法AIMD,TCP Reno算法_用matlab比较慢启动算法和tcp reno算法

随便推点

下列哪一个是c语言中不合法的变量,C语言程序设计(山东联盟)-程序员宅基地

文章浏览阅读2.1k次。第一章 单元测试1、问题:01110011:流程图中用下列哪一个图形符号表示判断?()选项:A:矩形框B:菱形框C:平行四边形框D:圆形框答案: 【菱形框】2、问题:01110021:流程图中用下列哪种图形符号表示事情处理过程的开始?(选项:A:圆括号矩形B:矩形C:箭头D:圆圈答案: 【圆括号矩形】3、问题:01110031:流程图中用于描述输出的是下列哪一个图形符号?选项:A:矩形框B:菱形框..._c语言不合法的变量

Linux下部署Mysql_linux 部署mysql-程序员宅基地

文章浏览阅读441次。目录概述环境说明准备内容部署步骤(部分步骤可忽略)概述本文介绍在Linux下部署Mysql的详细步骤,以供参考。环境说明OS Version:CentOS Linux release 8.1.1911 (此为发行版本)Linux下查看系统版本命令查看系统发行版本:cat /etc/redhat-release查看系统内核版本:uname -a准备内容Linux文件命令行工具Xshell 4下载地址链接:https://pan.baidu.com/s/1yBHjFQeD5IxOl_linux 部署mysql

【内网开发之pkg打包nodejs项目踩坑实践】_nodejs pkg 指定node-程序员宅基地

文章浏览阅读1.3k次,点赞22次,收藏25次。最近新入职新公司,内网开发()。将现有nodejs服务打包成指定平台(国产麒麟系统V10,arm64架构)可执行文件交付,避免源代码泄露。在我完完全全掌握了他的原理后,我终于解决了我所遇到的坑,特此记录学习,参考(基于es6规范封装 Express + DM8 + WebSocket + PKG )_nodejs pkg 指定node

python - 简单算法题 - 列表偏移_列表偏移:现有lst = [1,2,3,4,5],将列表向右偏移2位后,变成lst = [4,5,1-程序员宅基地

文章浏览阅读887次。列表偏移来源:http://www.coolpython.net/python_primary/algorithm_exercises/easy_list_shift.html题目要求lst = [1,2,3,4,5],列表向右偏移两位后,变成lst = [4,5,1,2,3]思路分析第一种方式:用切片将 [1,2,3] 和 [4,5] 取出来,之后合并在一起lst = [1,2,3,4,5]result = lst[3:]+lst[:3]print(result)或者lst = [_列表偏移:现有lst = [1,2,3,4,5],将列表向右偏移2位后,变成lst = [4,5,1,2,3]

MySQL之PXC集群搭建_gcomm://-程序员宅基地

文章浏览阅读366次。一、PXC 介绍1.1 PXC 简介PXC是一套MySQL高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性;1.2 PXC特性和优点完全兼容 MySQL。 同步复制,事务..._gcomm://

动力电池MES系统方案_锂电池mes系统-程序员宅基地

文章浏览阅读487次,点赞5次,收藏4次。总之,MES系统是一种强大的生产管理工具,可以帮助企业提高生产效率、优化生产流程、降低成本、提高产品质量和客户满意度。_锂电池mes系统

推荐文章

热门文章

相关标签