搭建超级小班课网课系统

简介: 本场景介绍使用视频云技术搭建超级小班课网课系统。

体验简介

本场景将提供一台ECS(云服务器)实例。我们将会在这台实例上搭建超级小班课的server端和web端服务,帮助您快速上手超级小班课的部署流程和了解产品特性。

背景知识

音视频通信:

音视频通信 RTC(Real-Time Communication)是阿里云覆盖全球的实时音视频开发平台,提供高可用、高品质、超低延时的实时网络服务,适用于在线教育、互动娱乐、视频会议、保险定损、调度指挥等场景。使用阿里云RTC SDK,您可以在移动、Web、PC等多端快速搭建互通互联的实时音视频应用。

超级小班课:

超级小班课是将千名学生以小组形式分成若干小班(推荐4-6名为一组),同时由一名主讲名师和多名助教进行辅导。所有学生均可以实时观看主讲名师授课画面,并可以与名师进行连麦互动。多名助教实时关注小班内学生动态,维护小班课堂秩序,并可连麦小班内学生进行助教辅导。该场景不仅可以让优秀的名师辅导更多的学生,更可以保证学生之间的互动性,让学生的学习效果大大增加。

超级小班课解决方案适用于K12和少儿语培等教育场景。
在这里插入图片描述

获取音视频通信应用AppKey

1.使用您自己的阿里云账号登录到音视频通信RTC控制台。
2.在左侧单击应用管理。
在这里插入图片描述
3.在应用管理页面就可以看到您的默认应用的AppID。
在这里插入图片描述
4.在默认应用的右侧操作列单击查询AppKey。

在这里插入图片描述

  1. 在查询Appkey提示弹框中单击确定。

在这里插入图片描述

  1. 在查询成功的弹框中就可以看到AppKey。

连接ECS服务器

1.打开系统自带的终端工具。

  • Windows:CMD或Powershell。
  • MAC:Terminal。

2.在终端中输入连接命令ssh [username]@[ipaddress]。您需要将其中的username和ipaddress替换为第1小节中创建的ECS服务器的登录名和公网地址。例如:

ssh root@123.123.123.123

在这里插入图片描述
命令显示结果如下:
在这里插入图片描述

  1. 输入yes。
  2. 同意继续后将会提示输入登录密码。 密码为已创建的云服务的ECS的登录密码。

在这里插入图片描述
登录成功后会显示如下信息。
在这里插入图片描述

安装Node.js环境

1.执行以下命令下载Node.js二进制包。

wget https://nodejs.org/dist/v14.15.0/node-v14.15.0-linux-x64.tar.xz

2.执行以下命令将Node.js二进制包解压到路径/usr/local。

tar xf node-v14.15.0-linux-x64.tar.xz -C /usr/local/ --no-same-owner

3.执行以下命令将Node.js二进制文件所在路径加入到环境变量PATH中。

echo "export PATH=/usr/local/node-v14.15.0-linux-x64/bin:$PATH" >> /etc/profile

4.执行以下命令使修改的环境变量立即生效。

source /etc/profile

5.执行以下命令验证是否安装配置成功。

node -v

如果安装成功将会有类似如下显示。

在这里插入图片描述

修改配置

本场景中的ECS服务器/root路径中内置了超级小班课的项目源码和运行环境,在项目源码中填入自己的AppKey即可运行项目。
1.执行以下命令使用Vim打开config.js文件。

cd superclass_web/ && vim src/core/data/config.js

2.按下i键进入编辑模式,将appId和appKey修改为步骤二中查询到的AppId和AppKey。
在这里插入图片描述
3.修改完成后按下Esc键退出编辑模式,然后输入以下指令并按下回车键退出Vim编辑器。

:wq

运行Demo

1.执行以下命令安装项目依赖。

npm install

2.执行以下命令安装RTC SDK。

npm install aliyun-webrtc-sdk -S

3.执行以下命令运行项目。

npm run serve

运行成功之后,默认会在浏览器打开项目主页。如果没有自动打开,请在浏览器地址栏输入https://[ipaddress]:888,ipaddress请参见步骤三。

在这里插入图片描述

Demo源码解析

项目结构如下所示:

├── dist                               #打包文件
├── public                             #静态资源
├── src                                #项目文件目录
│   ├── assets                         #静态资源    
│   ├── components                     #公共组件
│   ├── core                           #js文件
│   │   ├── data
│   │   │   ├── config.js              #相关配置参数
│   │   ├── util
│   │   │   ├── utils.js               #一些公共方法
│   │   ├── rtc-engine.js              #单例
│   │   ├── rtc-clinet.js              #RTC实例文件
│   ├── plugins
│   ├── router                         #路由
│   ├── views                          #页面
│   │   ├── login                      
│   │   │   ├── login.vue              #登录页面
│   │   ├── student                   
│   │   │   ├── student.vue            #学生页面
│   │   ├── assistant                  
│   │   │   ├── assistant.vue          #助教页面
│   │   ├── teacher                  
│   │   │   ├── teacher.vue            #教师页面
│   ├── vuex
│   ├── App.vue                        #根组件
│   ├── main.js                        #入口文件
├── vue.config.js                      #vue配置文件

下面列出了一些关键性功能代码。

  1. 检查浏览器是否支持。
RtcEngine.instance.getDevices().then(re => {})
  1. 获取设备信息。
RtcEngine.instance.getDevices().then(re => {})
  1. 指定摄像头。
RtcEngine.instance.currentCamera(deviceId)
  1. 指定麦克风。
RtcEngine.instance.currentAudioCapture(deviceId)
  1. 开启预览。
/**
 * 预览
 * @parame {HtmlVideoElement} video 播放预览画面的video标签
 */
RtcEngine.instance.startPreview(video).then(re=>{})
  1. 停止预览。
RtcEngine.instance.stopPreview(video).then(re=>{})
  1. 设置是否自动推流自动订阅,需要在加入频道之前设置,此接口是针对频道设置的。
/**
   * 设置是否自动推流和自动订阅 默认自动推流自动订阅
   * @param {*} channel 频道
   * @param { boolean } autoPub true表示自动推流
   * @param { boolean } autoSub true表示自动订阅
   */
RtcEngine.instance.setAutoPublishSubscribe(channel, autoPub, autoSub)
  1. 注册回调,需要在加入频道之前设置,此接口是针对频道设置的。
/**
   * 注册回调
   * @param {*} channel 频道
   * @param {*} callback 
   */
RtcEngine.instance.registerCallBack(channel, callback)
  1. 加入频道。
/**
   * 加入房间
   * @param {*} channel 频道
   * @param {*} userName 
   */
RtcEngine.instance.login(channel, userName).then(re=>{})
  1. 开始推流。
/**
   * 开始推流
   * @param {*} channel 频道
   */
RtcEngine.instance.startPublish(channel).then(re=>{})
  1. 停止推流。
/**
   * 停止推流
   * @param {*} channel 频道
   */
RtcEngine.instance.stopPublish(channel).then(re=>{})
  1. 设置是否停止发布本地音频。
 /**
   * 设置是否停止发布本地音频
   * @param {*} channel  频道
   * @param {*} enable 
   */
RtcEngine.instance.muteLocalMic(channel, enable)
  1. 设置是否停止发布本地视频。
 /**
   * 设置是否停止发布本地视频
   * @param {*} channel  频道
   * @param {*} enable 
   */
RtcEngine.instance.muteLocalCamera(channel, enable)
  1. 切换开启和停止屏幕流。
/**
   * 切换开启和停止屏幕流
   * @param {*} channel  频道
   * @param {*} enable 
   */
RtcEngine.instance.switchPublishScreen(channel, enable)
  1. 订阅音视频。
/**
   * 设置远端渲染 默认订阅音频 + 视频(小流)
   * @param {*} channel  频道
   * @param {*} userId 
   */
RtcEngine.instance.subscribe(channel, userId).then(re=>{})
  1. 取消订阅。
/**
   * 取消订阅
   * @param {*} channel  频道
   * @param {*} userId 
   */
RtcEngine.instance.unSubScribe(channel, userId).then(re=>{})
  1. 设置远端渲染。
/**
   * 设置远端渲染
   * @param {*} channel  频道
   * @param {*} userId 
   * @param {*} video 
   * @param {*} streamType 
   */
RtcEngine.instance.setDisplayRemoteVideo(channel, userId, video, streamType)
  1. 获取频道用户列表。
  /**
   * 获取判断用户列表 频道
   * @param {*} channel 
   * @return { array | boolean }
   */
RtcEngine.instance.getUserList(channel)
  1. 获取用户信息。
  /**
   * 获取判断用户列表
   * @param {*} channel 频道
   * @return { array | boolean }
   */
RtcEngine.instance.getUserInfo(channel, userId)
  1. 离开频道。
 /**
   * 离开频道
   */
RtcEngine.instance.logout().then(re=>{})
相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
编解码
音频 AAC和MP3的帧大小
音频 AAC和MP3的帧大小
691 0
|
人工智能 关系型数据库 分布式数据库
沉浸式学习PostgreSQL|PolarDB 16: 植入通义千问大模型+文本向量化模型, 让数据库具备AI能力
本文将带领大家来体验一下如何将“千问大模型+文本向量化模型”植入到PG|PolarDB中, 让数据库具备AI能力.
25826 21
沉浸式学习PostgreSQL|PolarDB 16: 植入通义千问大模型+文本向量化模型, 让数据库具备AI能力
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
3061 1
|
8月前
|
机器学习/深度学习 自然语言处理
RWKV-7 2.9B 开源发布!纯 RNN 无 KV cache,支持世界所有语言
2025 年 2 月 11 日,RWKV 基金会正式发布 RWKV-7-World-2.9B-V3 模型(以下简称 RWKV-7-2.9B)。
243 17
|
算法 Java Go
Go vs Java:内存管理与垃圾回收机制对比
对比了Go和Java的内存管理与垃圾回收机制。Java依赖JVM自动管理内存,使用堆栈内存并采用多种垃圾回收算法,如标记-清除和分代收集。Go则提供更多的手动控制,内存分配与释放由分配器和垃圾回收器协同完成,使用三色标记算法并发回收。示例展示了Java中对象自动创建和销毁,而Go中开发者需注意内存泄漏。选择语言应根据项目需求和技术栈来决定。
|
前端开发 JavaScript 小程序
技术经验解读:你所不知的十二个前端组件库
技术经验解读:你所不知的十二个前端组件库
|
存储 人工智能 安全
LangChain-23 Vector stores 向量化存储 并附带一个实际案例 通过Loader加载 Embedding后持久化 LangChain ChatOpenAI ChatGLM3对话
LangChain-23 Vector stores 向量化存储 并附带一个实际案例 通过Loader加载 Embedding后持久化 LangChain ChatOpenAI ChatGLM3对话
399 0
|
XML JSON 数据挖掘
天猫商品评论接口:从申请到应用全攻略
天猫商品评论数据接口(Tmall.item_review)让商家与开发者获取天猫商品评论数据。接口通过HTTP请求提供评论内容、时间、评分等信息,助力商家优化产品与营销策略。使用需创建应用获App Key/Secret,编写代码调用并处理JSON/XML响应。适用于数据分析、商品优化、营销推广及客户管理。遵循规定合法使用数据。
|
Shell
Shell export 定义全局变量(变量的作用范围)
Shell export 定义全局变量(变量的作用范围)
499 0