需求

(Web端和小程序端进行视频通话)

1. web 端 开启一个房间,房间号假设为 888。此时,画面可以看到自己端的画面。

2. 小程序 端,输入相同的房间号 888,进入房间,即可和 web 端进行视频通话。

准备工作

1. 打开腾讯云官方文档     腾讯云-实时音视频

2. web 端 参照 webDemo 将项目下载下来。小程序参照 小程序端 将项目下载下来。

集成

1. 项目根目录打开命令行,执行

npm install trtc-js-sdk 

2. 局部引入组件(哪个组件使用在哪个组件里引入),不建议在main.js里全局引入。

import TRTC from 'trtc-js-sdk'

3. 打开【准备工作 - 2】下载好的demo打开,寻找关键代码

  • 创建一个实时音视频通话的客户端对象,在每次会话中仅需要调用一次。(js -> rtc-client.js)
  • 因为创建 连接 是需要 skdAppid 和 userSig 的,所以继续往下看。
  •     // create a client for RtcClientthis.client_ = TRTC.createClient({mode: 'rtc', // 实时通话模式sdkAppId: this.sdkAppId_,userId: this.userId_,userSig: this.userSig_});
  • 上边的 sdkAppId 和 userSig 来自哪儿呢,我们按顺序可以找到
  • 我们可以看到 它来自【presetting】的【genTestUserSig】方法、那么获取签名的【genTestUserSig】方法哪里来的呢?在这儿
  • 准备工作做好了,接下来正式开始吧~

Vue文件用法

直接上代码了

<template><div class="video_wrap"><div class="content"><!-- 远端视频 --><divv-for="(item, index) in remoteStreamList":key="index"class="remote-stream"><divv-html="item.view":class="{ 'distant-stream': item.view }"></div></div><!-- 本地视频 --><divid='local_stream'class="local-stream"></div></div></div>
</template>
<script>
import * as LibGenerateTestUserSig from 'static/lib-generate-test-usersig.min.js'
import TRTC from 'trtc-js-sdk'export default {data () {return {SDKAPPIDConfig: '腾讯云自己申请的SDKAPPID',SECRETKEYConfig: '腾讯云自己申请的SECRETKEY',userId: '',roomId: null,client: '', // 客户端服务remoteStream: '', // 远方播放流localStream: '', // 本地流remoteStreamList: [] // 远端小视频}},methods: {// 可以绑定在按钮上,点击按钮,进行视频通话createClient (roomId) {this.userId = 'web_' + parseInt(Math.random() * 100000000)this.roomId = roomId || '888'this.localStream = ''this.remoteStreamList = []// 获取签名const config = this.genTestUserSig(this.userId)const sdkAppId = config.sdkAppIdconst userSig = config.userSigconst userId = this.userIdthis.client = TRTC.createClient({mode: 'rtc', // 实时音视频通话sdkAppId,userId,userSig})// 注册远程监听this.subscribeStream(this.client)// 注册监听事件 如,房间关闭this.handleEvents(this.client)// 初始化成功后才能加入房间this.joinRoom(this.client, this.roomId)},// 订阅远端流--加入房间之前subscribeStream (client) {client.on('stream-added', event => {const remoteStream = event.streamconsole.log('远端流增加: ' + remoteStream.getId())// 订阅远端流client.subscribe(remoteStream)})},handleEvents (client) {client.on('stream-subscribed', event => {const remoteStream = event.streamconsole.log('远端流订阅成功:' + remoteStream.getId())// 创建远端流标签,因为id是动态的,所以动态创建,用了v-htmllet remoteStreamItem = `<view id="${'remote_stream-' + remoteStream.getId()}"  ></view>`let isExist = this.remoteStreamList.find(item => item.userId === remoteStream.getUserId())if (!isExist) {this.remoteStreamList.push({id: remoteStream.getId(),userId: remoteStream.getUserId(),view: remoteStreamItem,hasVideo: true, // 是否开启了摄像头hasMic: true // 是否开启了麦克风})// 做了dom操作 需要使用$nextTick(),否则找不到创建的标签无法进行播放this.$nextTick(() => {//播放远端流remoteStream.play('remote_stream-' + remoteStream.getId())})}})},// 加入房间joinRoom (client, roomId) {client.join({ roomId }).catch(error => {console.error('进房失败 ' + error)}).then(() => {console.log('进房成功')// 创建本地流this.createStream(this.userId)})},// 创建本地音频流async createStream (userId) {const localStream = TRTC.createStream({ userId, audio: true, video: true })// 设置视频属性 Profile 为 '480p'localStream.setVideoProfile('480p')this.localStream = localStreamtry {await localStream.initialize()// .catch(error => {//   console.error('初始化本地流失败 ' + error)// }).then(() => {console.log('初始化本地流成功')// 创建好后才能播放 本地流播放 local_stream 是div的idlocalStream.play('local_stream')// 创建好后才能发布this.publishStream(localStream, this.client)})} catch (error) {switch (error.name) {case 'NotReadableError':alert('暂时无法访问摄像头/麦克风,请确保系统允许当前浏览器访问摄像头/麦克风,并且没有其他应用占用摄像头/麦克风')breakcase 'NotAllowedError':if (error.message === 'Permission denied by system') {alert('请确保系统允许当前浏览器访问摄像头/麦克风')} else {console.log('User refused to share the screen')alert('请确保系统允许当前浏览器访问摄像头/麦克风')}breakcase 'NotFoundError':alert('浏览器获取不到摄像头/麦克风设备,请检查设备连接并且确保系统允许当前浏览器访问摄像头/麦克风')breakdefault:break}}},// 发布本地音视频流publishStream (localStream, client) {client.publish(localStream).catch(error => {console.error('本地流发布失败 ' + error)}).then(() => {console.log('本地流发布成功')})},// 退出房间logoutHandler () {this.leaveRoom(this.client)},leaveRoom (client) {client.leave().then(() => {console.log('退房成功')// 停止本地流,关闭本地流内部的音视频播放器this.localStream.stop()// 关闭本地流,释放摄像头和麦克风访问权限this.localStream.close()this.localStream = nullthis.client = null// 退房成功,可再次调用client.join重新进房开启新的通话。}).catch(error => {console.error('退房失败 ' + error)// 错误不可恢复,需要刷新页面。})},// 获取用户签名 - 前端测试使用genTestUserSig (userID) {/*** 腾讯云 SDKAppId,需要替换为您自己账号下的 SDKAppId。** 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ) 创建应用,即可看到 SDKAppId,* 它是腾讯云用于区分客户的唯一标识。*/const SDKAPPID = this.SDKAPPIDConfig/*** 签名过期时间,建议不要设置的过短* <p>* 时间单位:秒* 默认时间:7 x 24 x 60 x 60 = 604800 = 7 天*/const EXPIRETIME = 604800/*** 计算签名用的加密密钥,获取步骤如下:** step1. 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ),如果还没有应用就创建一个,* step2. 单击“应用配置”进入基础配置页面,并进一步找到“帐号体系集成”部分。* step3. 点击“查看密钥”按钮,就可以看到计算 UserSig 使用的加密的密钥了,请将其拷贝并复制到如下的变量中** 注意:该方案仅适用于调试Demo,正式上线前请将 UserSig 计算代码和密钥迁移到您的后台服务器上,以避免加密密钥泄露导致的流量盗用。* 文档:https://cloud.tencent.com/document/product/647/17275#Server*/const SECRETKEY = this.SECRETKEYConfigif (SDKAPPID === '' || SECRETKEY === '') {alert('请先配置好您的账号信息: SDKAPPID 及 SECRETKEY ' +'\r\n\r\nPlease configure your SDKAPPID/SECRETKEY in js/debug/GenerateTestUserSig.js')}const generator = new LibGenerateTestUserSig(SDKAPPID, SECRETKEY, EXPIRETIME)const userSig = generator.genTestUserSig(userID)return {sdkAppId: SDKAPPID,userSig: userSig}}}
}
<script>
<style scoped>.local-stream {width: 500px;height: 500px;}.remote-stream {width: 200px;height: 200px;}
</style>

以上就实现了简单的 web 端,在 小程序端输入相同的房间号就可以连接上。

效果图:

注意:

  1. 可在本地 localhost 下访问。
  2. 不可不可不可在 http 下访问,需升级为 https

线上必须使用 https,,,https~~~!!!。

问题:

UserId 使用的中文

Q:web端和小程序端输入相同的房间号进行视频通话,如果小程序的用户名格式是 【中文+数字】,则两端互相看不到。小程序端的用户名格式改为【英文+数字】就好了??

A:UserId 最好不要用中文,不同平台会有编码的问题。

结语:

以上只是实现了简单的通话效果,更多的细节请参考官网。实时音视频

如果大家需要一些更详细的效果,如:web端 点击某一个视频将其放大这种,可私信我。

Vue 接入腾讯云【实时音视频】TRTC相关推荐

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

    [Web端接入经验分享] 腾讯云即时通信TIM.实时音视频TRTC 即时通信TIM官网地址 即时通信TIM SDK API文档地址 实时音视频TRTC官网地址 实时音视频TRTC SDK API文档地 ...

  2. uniapp对接腾讯云IM+音视频。音视频含UI集成

    uniapp对接腾讯云IM+音视频 文章目录 uniapp对接腾讯云IM+音视频 前言 一.准备工作 二.使用步骤 1.App.vue配置 2.登录时操作 login.vue 3.使用方法 一.音视频 ...

  3. 李郁韬:短期爆发还是未来趋势?腾讯云海量音视频通信服务背后的技术发展

    面临特殊时期,无论远程办公.还是学校"停课不停学"都成为时下的必然选择,众多视频会议平台也在特殊环境下开启了短期免费开放及功能服务.但与此同时不可避免会带来突发的大规模在线视频与协 ...

  4. “音”你而来,“视”而可见 腾讯云+社区音视频技术开发实战沙龙圆满结束...

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云技术沙龙团队发布于腾讯云云+社区 近年来,得益于移动互联网的普及和智能终端设备的广泛应用,短视频.直播.在线教学等音视频通信模式 ...

  5. “音”你而来,“视”而可见 腾讯云+社区音视频技术开发实战沙龙圆满结束... 1

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云技术沙龙团队发布于腾讯云云+社区 近年来,得益于移动互联网的普及和智能终端设备的广泛应用,短视频.直播.在线教学等音视频通信模式 ...

  6. 揭秘腾讯云最新音视频及融合通信技术实践

    社交到视频会议,从金融到医疗,云端通信能力正在与传统的电话/IM.呼叫中心.企业通信融合,打通各个端与渠道的数据,实现实时互联与掌控.而音视频技术在其中扮演着重要的角色,如何为用户提供更低延迟.更佳体 ...

  7. 微信小程序接入腾讯云实时音视频TRTC----基本使用

    前言:虽然说的有点乱,我觉得有必要说一下什么是音视频与整体开发需要些什么东西,因为当时我也是不知道这是啥? .我的理解音视频就是类似微信视频通话的东西,以自己的角度来看,我与好友建立视频的步骤简单来讲 ...

  8. 【腾讯云】音视频存储管理CVS

    音视频存储管理(Cloud Video Storage)基于腾讯云强大的云存储平台,为客户提供音视频上传.存储.媒资管理等聚焦于音视频领域的安全可靠的云存储服务.

  9. Vue实现腾讯云_音视频通话的推拉流

    目标:单对单通信 大部分异步使用 async await 进行同步,try catch 捕获错误处理 先放一个流程图,解决80%的问题 安装 TRTC Web SDK 安装 npm install t ...

最新文章

  1. Exchage 2007 Client Application Functions(2) -- 如何收取邮件
  2. 1.7 截取(提取)子字符串(substring())
  3. CVPR 2021 | 澳洲国立大学提出基于模型的图像风格迁移
  4. boost::mp11::mp_size相关用法的测试程序
  5. 无法启动ASP.NET状态服务 错误0x8007277a;无法加载或初始化请求的服务提供程序
  6. J.U.C之并发工具类:Exchanger
  7. 大一计算机专业,大一计算机专业学生
  8. CentOS7安装无线管理软件Wireless Tools for Linux
  9. mootools温习与深入_Element_1
  10. 简单理解混淆矩阵—Matlab详细代码注解
  11. Cognos SDK 入门教程(一) - Hello Cognos
  12. MacBook在任意文件夹目录打开终端
  13. 电脑自动同步服务器时间bat,用Internet时间服务器来同步本机系统时间的批处理...
  14. f.lux 自动调节显示器色温
  15. 浏览器标准模式和怪异模式之间的区别是什么?
  16. 褚时健 | 我这辈子最问心无愧的就是:没有庸庸碌碌地过完一生
  17. Android中网络优化
  18. 无线连接中心服务器连接异常,解决Win7/Win8.1的无线网络连接受限故障
  19. android与iPhoneX区别,iphone8plus和iphonex区别 买iphone8plus还是iphonex好
  20. 流程图软件最新排名,一分钟了解画流程图用什么软件

热门文章

  1. 15个值得推荐的个人提升方法
  2. 微信开发之使用第三方图文编辑器
  3. 华为鸿蒙cpu,华为转投第三大CPU架构RISC-V?首款鸿蒙开发板曝光
  4. Python3-word文档操作(九):给word文档添加/删除一张图片-利用docx库
  5. 解决HA is not enable for this namenode错误
  6. html+js+canvas实现画板涂画功能和vue+canvas实现画板涂画功能
  7. 计算机word操作基础题,计算机操作基础Word练习题
  8. 财务分账是什么意思?
  9. Firefox 地址栏用法三: 搜索引擎
  10. Layer js——弹窗/提示/询问/加载/层