Vue3_对接声网实时音视频_多人视频会议

目录

一、声网

1.注册账号

2.新建项目

二、实时音视频集成

1.声网CDN集成

2.iframe嵌入html

3.自定义UI集成

4.提高进入房间速度


web项目需要实现一个多人会议,对接的声网的灵动课堂。在这里说一下对接流程。

一、声网

声网成立于2014年,是全球实时互动云服务开创者和引领者。开发者只需简单调用声网 API,即可在应用内构建多种实时音视频互动场景。声网 API 已经赋能社交直播、教育、游戏电竞、IoT、AR/VR、金融、保险、医疗、企业协作等 20 余行业赛道,共计 200 多种场景。2020年6月26日,声网母公司 Agora, Inc. 成功登陆纳斯达克,股票代码为“API”。截至2023年12月31日,声网全球注册应用数超过74.2万。 

声网的实时互动技术服务覆盖全球 200 多个国家和地区。声网的客户包括小米、陌陌、斗鱼、哔哩哔哩、小红书、Yalla等巨头、独角兽及创业企业。

1.注册账号

声网官网icon-default.png?t=N7T8https://sso.shengwang.cn/cn/v4/signup/with-sms点击链接,注册账号。

注册后,登录,进入声网首页:

2.新建项目

首先实名认证,然后创建项目。

     

每个月有免费的10000分钟。

我的项目用的灵动课堂,你可以选择通用项目。

创建完成后,首页左上角选择创建好的项目,如果有多个项目,在这个切换。

查看当前项目信息:

二、实时音视频集成

我的项目是vue3框架的。

后端创建了声网会议房间,前端直接使用cdn进入房间。

创建房间相关接口,都在后端API:

后端_声网创建房间APIicon-default.png?t=N7T8https://doc.shengwang.cn/doc/flexible-classroom/restful/api/api-classroom#%E5%88%9B%E5%BB%BA%E8%AF%BE%E5%A0%82

先说一下实现方式。使用html引入声网cdn,然后用iframe嵌入到vue页面。传参使用window。

1.声网CDN集成

在vue项目的public文件夹下新建一个文件,videoSW.html 

videoSW.html 

<!DOCTYPE html>
<html lang=""><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><!-- 请把 script的src 的版本号替换为你的灵动课堂版本号,例如 2.9.40。你可以通过发版说明或 GitHub 仓库分支查看最新版本号。 --><scriptsrc="https://download.agora.io/edu-apaas/release/edu_sdk@2.9.40.bundle.js"></script>
</head><body><div class="videoContainer"></div><style>.videoContainer {width: 100%;height: 100%;}</style><script type="text/javascript">AgoraEduSDK.config({appId: window.appidB,region: 'cn'});// 启动在线课堂。AgoraEduSDK.launch(document.querySelector('.videoContainer'), {userUuid: window.userUuid,userName: window.userName,roomUuid: window.roomUuid,roleType: Number(window.roleType), // 用户角色:1 为老师,2 为学生, 3助教。roomType: Number(window.roomType), // 房间类型:0 为一对一,2 为大班课,4 为小班课。roomName: window.roomName,pretest: true, // 是否开启课前设备检测。rtmToken: window.rtmToken,language: 'zh', // 课堂界面的语言。如需界面为英文,设为 'en' 即可。duration: 60 * 30, // 课程时间,单位为秒。// recordUrl: 'https://teaching-research-1314823014.cos.ap-nanjing.myqcloud.com/js/shengwang/edu_sdk.bundle.gz.js',courseWareList: [],webrtcExtensionBaseUrl: 'https://solutions-apaas.agora.io/static', // WebRTC 插件部署地址uiMode: 'light', // 设置课堂界面为明亮模式。如需界面为暗黑模式,设为 'dark' 即可。mediaOptions: {  //(选填)媒体流相关设置,包含媒体流加密、摄像头视频流编码参数配置和屏幕共享视频流编码参数配置。cameraEncoderConfiguration: {width: 160,height: 120,frameRate: 10,bitrate: 100,},lowStreamCameraEncoderConfiguration:{width: 160,height: 120,frameRate: 10,bitrate: 100,}},// 课堂启动状态:ready: 课堂准备完毕 destroyed: 课堂已销毁listener: (evt, args) => {if (evt == 2) {//教室已销毁,传参给父元素,也就是index.vue,然后在index.vue里面进行一些路由跳转。window.parent.postMessage(2)}if (evt == 101) {//被踢出房间window.parent.postMessage(101)}if (evt == 202 && args == 3) {//课堂已结束window.parent.postMessage(202)}},});</script>
</body></html>

 window.userUuid等这些参数值都是后端传过来的。

集成声网灵动课堂icon-default.png?t=N7T8https://doc.shengwang.cn/doc/flexible-classroom/javascript/get-started/integrate

2.iframe嵌入html

新建一个vue页面,在里面请求需要后端传过来的数据。并且嵌入iframe。

idnex.vue

<template><div class="append"><iframe id="iframeEvent" src="videoSW.html" width="100%" height="100%"></iframe></div>
</template>
<script setup>
import { onMounted, reactive, watchEffect, toRefs, computed, onUnmounted } from "vue";//后端已经新建会议房间,前端直接进入房间,需要从后端获得数据。
//需要这些数据 userUuid、userName、roomUuid、rtmRole、rtmToken、theme(房间名名称)、roomType、appid//以下数据是你从后端请求得到的数据。
let userId = userUuid;
let user = userName;
let roomId = roomUuid;
let role = rtmRole;
let token = rtmToken;
let room = theme;
let eduId = eduId;
let type = roomType;
let appidA = appid;const event = (e) => {if (e.data == 2) {//教室已销毁,填入你的逻辑,进行页面跳转} else if (e.data == 101) {//被踢出房间} else if (e.data == 202) {//课堂已结束}
};onMounted(() => {// 房间参数,传给videoSW.html,然后好进入会议房间document.querySelector("#iframeEvent").contentWindow.userUuid = userId;document.querySelector("#iframeEvent").contentWindow.userName = user;document.querySelector("#iframeEvent").contentWindow.roomUuid = roomId;document.querySelector("#iframeEvent").contentWindow.roleType = role;document.querySelector("#iframeEvent").contentWindow.rtmToken = token;document.querySelector("#iframeEvent").contentWindow.roomName = room;document.querySelector("#iframeEvent").contentWindow.roomType = type;document.querySelector("#iframeEvent").contentWindow.appidB = appidA;window.addEventListener("message", event, false);});onUnmounted(() => {window.removeEventListener("message", event, false);
});
</script><style lang="less" scoped>
.append {width: 100vw;height: 100vh;
}
</style>

 document.querySelector("#iframeEvent").contentWindow.userUuid = userId;

contentWindow这个属性:

此时即可进入多人会议了。

 你的界面可能和这个不一样,这个是声网的一个低代码产品_灵动课堂,右侧中间部分为白板,也是他们的产品。如果你想更改他的UI,下面介绍一下自定义UI方式集成。

3.自定义UI集成

具体步骤文档写的很详细。

自定义UI集成灵动课堂icon-default.png?t=N7T8https://doc.shengwang.cn/doc/flexible-classroom/javascript/get-started/integrate#%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89-ui-%E7%9A%84%E6%96%B9%E5%BC%8F%E9%9B%86%E6%88%90如果你不是灵动课堂产品,你就找他相应的文档,按照上面操作即可。

按照文档改完UI后,进行打包:

 

 把 edu_sdk.bundle.js ,放到可以访问的服务器就可以,比如阿里oss或者腾讯云cos存储桶也可以。

4.提高进入房间速度

如果想让进入房间时访问速度加快,就需要使用CDN,步骤如下:

①压缩代码

② 阿里云oss设置

上传文件至阿里云OSS
如果使用阿里云OSS,可以使用管理界面上传。上传文件至OSS后,通过管理界面增加 content-encoding 响应头:

    

 修改引用文件
修改页面中引入的 sdk 文件路径:<script src="path/to/your/oss-bucket/edu_sdk.bundle.gz.js" /></script>

验证是否生效
上传成功后,在页面加载时打开开发者工具,检查此文件的网络请求:

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

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

相关文章

ARCGIS PRO DSK GraphicsLayer创建文本要素

一、判断GraphicsLayer层【地块注记】是否存在&#xff0c;如果不存在则新建、如果存在则删除所有要素 Dim GraphicsLayer pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() 获取当前map对象中的GetLayer图层 Await Queue…

DataKit之OpenGauss数据迁移工具

# 在讲openGauss和datakit之前&#xff0c;我先说下pgloader这个工具也支持将数据从mysql同步到openGauss或者postgresql&#xff0c;但是 注意了&#xff0c;官网明确说明了不支持视图和触发器的迁移&#xff0c;如果你只是迁移表结构和数据&#xff0c;那么这个既简单又快下面…

使用Go的tls库搭建HTTPS服务

文章目录 tls.go 中文文档使用OpenSSL生成证书Win系统安装openssl生成证书 HTTP情况下的通信编写服务器代码编写客户端代码 tls.go 中文文档 https://studygolang.com/pkgdoc 使用OpenSSL生成证书 Win系统安装openssl 安装地址 https://slproweb.com/products/Win32OpenSSL.…

设计模式17-适配模式

设计模式17-适配模式 动机定义与结构C代码推导总结应用具体应用示例 动机 在软件系统中由于应用环境的变化常常需要将一些现存的对象。放到新的环境中去应用。但是新环境要求的接口是这些现存对象所不满足的。那么这种情况下如何应对这种迁移的变化&#xff1f;如何既能利用现…

计算机毕业设计选题推荐-戏曲文化体验系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Python自动发送邮件如何设置邮件内容格式?

Python自动发送邮件时&#xff0c;如何自动化发送HTML格式邮件&#xff1f; Python是一种功能强大且灵活的编程语言&#xff0c;广泛用于各种自动化任务&#xff0c;其中包括自动发送邮件。AokSend将介绍在使用Python自动发送邮件时&#xff0c;如何设置邮件内容的格式&#x…

【系统架构设计师】二十二、嵌入式系统架构设计理论与实践②

目录 五、嵌入式中间件 5.1 嵌入式中间件定义 5.2 嵌入式中间件的分类 六、嵌入式系统软件架构设计方法 6.1 基于架构的软件设计开发方法的应用 6.2 属性驱动的软件设计方法 6.2.1 ADD 开发方法的质量属性与场景 6.2.2 ADD 开发过程 6.3 实时系统设计方法 6.3.1 DART…

索引:SpringCloudAlibaba分布式组件全部框架笔记

索引&#xff1a;SpringCloudAlibaba分布式组件全部框架笔记 一推荐一套分布式微服务的版本管理父工程pom模板&#xff1a;Springcloud、SpringCloudAlibaba、Springboot二SpringBoot、SpringCloud、SpringCloudAlibaba等各种组件的版本匹配图&#xff1a;三Spring Cloud Aliba…

【MySQL篇】Percona XtraBackup标准化全库完整备份策略(第三篇,总共五篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

C++初学(8)

8.1、string类简介 现在可以用string类型的变量而不是字符数组来存储字符串&#xff0c;string类也用的会比数组简单&#xff0c;同时提供了将字符串作为一种数据类型的表示方式。 要使用string类&#xff0c;必须在程序中包含头文件string。string类位于名称空间std中&#…

2024年8月1日 十二生肖 今日运势

小运播报&#xff1a;2024年8月1日&#xff0c;星期四&#xff0c;农历六月廿七 &#xff08;甲辰年辛未月丁酉日&#xff09;&#xff0c;法定工作日。今天建军节&#xff0c;祝保家卫国、英勇无畏的解放军战士们节日快乐&#xff01; 红榜生肖&#xff1a;龙、牛、猪 需要注…

使用CLI脚手架搭建Vue2项目

一、配置前端的环境 1、下载安装Node.js 网址&#xff1a;Node.js 中文网 (nodejs.com.cn) 参考&#xff1a;【简明图文教程】Node.js的下载、安装、环境配置及测试_node下载安装-CSDN博客 推荐安装路径C盘改为D盘 2、配置nodejs及环境变量【安装的时候勾选Add to PATH就不…

GPT 和 BERT 系列论文阅读总结

文章目录 1. GPT1.1 GPT的目的和任务1.2 GPT的实现1.2.1 Unsupervised pre-training1.2.2 Supervised fine-tuning1.2.3 特定任务的输入格式 2. BERT2.1 BERT的目的和任务2.2 BERT的实现2.2.1 Masked Language Model2.2.2 Next Sentence Prediction (NSP) 3. GPT-23.1 初见 pro…

2-51 基于matlab的IFP_FCM(Improved fuzzy partitions-FCM)

基于matlab的IFP_FCM&#xff08;Improved fuzzy partitions-FCM&#xff09;&#xff0c;改进型FCM(模糊C均值)聚类算法,解决了FCM算法对初始值设定较为敏感、训练速度慢、在迭代时容易陷入局部极小的问题。并附带了Box和Jenkins煤气炉数据模型辨识实例。程序已调通&#xff0…

基于单片机的电梯控制系统的设计

摘 要: 本文提出了一种基于单片机的电梯控制系统设计 。 设计以单片机为核心&#xff0c;通过使用和设计新型先进的硬件和控制程序来模拟和控制整个电梯的运行&#xff0c;在使用过程中具有成本低廉、 维护方便、 运行稳定 、 易于操作 、 安全系数高等优点 。 主要设计思路是…

RocketMQ消息发送基本示例(推送消费者)

消息生产者通过三种方式发送消息 1.同步发送:等待消息返回后再继续进行下面的操作 同步发送保证了消息的可靠性&#xff0c;适用于关键业务场景。 2.异步发送:不等待消息返回直接进入后续流程.broker将结果返回后调用callback函数,并使用 CountDownLatch计数 3.单向发送:只…

MySQL---JDBC

一、JDBC是什么&#xff1f; JDBC(Java Database Connectivity):是Java访问数据库的解决方案。 JDBC定义了一套标准的接口&#xff0c;即访问数据库的通用API&#xff0c;不同数据库的厂商根据各自数据库的特点实现这些接口。 JDBC希望用相同的方式访问不同的数据库&#xff0c…

cocos creator绘制网格背景(基于矢量绘图)

在2D游戏开发中&#xff0c;设计2D地图的背景实现通常有以下几种方式&#xff1a; 静态背景图&#xff1a; 最简单的方式是使用静态背景图&#xff0c;即将整个背景作为一个静态图像加载到游戏中。这种方式适用于简单的游戏或者背景不需要变化的场景。 平铺背景图&#xff1a;…

java~反射

反射 使用的前提条件&#xff1a;必须先得到代表的字节码的Class&#xff0c;Class类用于表示.class文件&#xff08;字节码&#xff09; 原理图 加载完类后&#xff0c;在堆中就产生了一个Class类型的对象&#xff08;一个类只有一个Class对象&#xff09;&#xff0c;这个对…

湖南(市场调研公司)源点咨询 如何进行精准化用户画像细分研究

湖南源点咨询认为&#xff0c;用户画像&#xff0c;是根据用户的基本属性、用户偏好、生活习惯、用户行为等信息而抽象出来的标签化用户模型。我们在这里为大家分析为什么要建立用户画像&#xff0c;进行用户细分调研。 一、什么是用户画像 简单来讲&#xff0c;就是想要在通…