Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TRTC零基础入门之Web篇(一)

TRTC零基础入门之Web篇(一)

原创
作者头像
天上云间
修改于 2020-12-21 03:28:15
修改于 2020-12-21 03:28:15
4.2K00
代码可运行
举报
文章被收录于专栏:云学堂云学堂
运行总次数:0
代码可运行

这是一篇关于TRTC的Web应用的初级入门文章,高手请略过。经过一段时间对腾讯云的TRTC的Web端和安卓端SDK学习和摸索,分几个周末把这个学习过程给大家整理成为笔记,如有错漏的地方,欢迎指正。

小要求:

小目标:

  • 使用TRTC创建一个无服务器(Servless)的在线课堂WEB应用。
  • 老师可以通过浏览器打开主页,输入手机号,使用摄像头和麦克风在线开课,然后可以把课堂链接分享到学生/家长群。
  • 学生可以通过浏览器打开老师发送的链接或通过家长手机扫码进入老师房间,观看老师的课件和音视频的讲解。
  • 学生和老师可以在房间内进行文字、连麦、答疑等互动交流。

小步骤:

  • 第一步:构建教师端页面模块,接入TRTC JSSDK,完成音视频流的采集和数据的发送功能,创建教师专用的房间和生成唯一的地址。
  • 第二步:构建学生端页面模块,读取链接参数引导学生进入教师房间,并播放老师侧推送的音视频流以及屏幕影像。
  • 第三步:完成教师端和学生端音视频的交流。

在建立这个在线课堂应用过程中,可能会使用到腾讯云的IM、云直播等服务,以及对应安卓端SDK,下面将通过三篇文章来记录这个过程,本文为第一篇。

一、Vue开发环境的搭建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装VUEJS开发手脚架
npm install -g @vue/cli

# 创建新项目
vue create ClassRoomVue

# 进入工程目录
cd ClassRoomVue

# 引入base64 模块 生成转码URI
npm install --save js-base64

# 引入md5 模块 生产房间ID摘要
npm install --save js-md5

# 启动VUE开发服务程序
npm run serve

打开浏览器访问 http://localhost:8080,可以看到正确渲染的页面。

使用Visual Studio Code 或者其他代码编辑器打开 ClassRoomVue目录,如下图所示:

二、获取TRTC的sdkAppID和密匙

  •  进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ) 创建应用,即可看到 SDKAppId,
  •  计算签名用的加密密钥,获取步骤如下:
    •   step1. 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ),如果还没有应用就创建一个,
    •   step2. 单击“应用配置”进入基础配置页面,并进一步找到“帐号体系集成”部分。
    •   step3. 点击“查看密钥”按钮,就可以看到计算 UserSig 使用的加密的密钥了。

三、安装TRTC JSSDK

方式一,通过 NPM安装SDK:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 
npm install trtc-js-sdk

方式二,通过<script>标签嵌入trtc脚本文件:

  • 从https://github.com/tencentyun/TRTCSDK下载Web版SDK压缩包。
  • 解压后到目录后,下面的文件拷贝到工程放在工程的public/js目录
    • TRTCSimpleDemo/js/debug/GenerateTestUserSig.js
    • TRTCSimpleDemo/js/lib-generate-test-usersig.min.js
    • TRTCSimpleDemo/js/trtc.js
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在index.html文件中插入以下代码
 <script src="js/GenerateTestUserSig.js"></script>
 <script src="js/lib-generate-test-usersig.min.js"></script>
 <script src="js/trtc.js"></script>

四、按模块来创建教师端相关页面

1. 在工程的components 目录下创建以下文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AppTitleBar.vue  // 标题栏组件                (通用)
ClassRoom.vue    // 教师房间UI组件            (通用)
LoginBox.vue     // 登录组件                  (通用)
MessageBox.vue    //消息发送框组件            (通用)
StudentVideo.vue    // 学生视频显示组件        (教师端)
TeacherLocalVideo.vue    //教师本地视频显示组件 (教师端)
TeacherVideo.vue    // 教师远程视频显示组件     (学生端)
TeacherWhiteBoard.vue    // 教师白板         (教师端)

登录界面

2 . 在工程目录创建TRTC服务模块 TRTC.Sevice.js,方便各组件调用TRTC的api

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 
import TRTC from 'trtc-js-sdk'; 
import { genTestUserSig } from "./GenerateTestUserSig";
   
export let roomId = null;
export let userSig = null;
export const streamInfo = {};
export const userInfo = {name:"MyName"};
export let sdkAppId = null; 
export let client = null; 
 
export const createLocalStream = function(userId,callback){
    console.log("create local stream "+userId);
    streamInfo.localStream = TRTC.createStream({ userId:userId, audio: true, video: true }); 
    streamInfo.localStream.setVideoProfile('480p'); 
    streamInfo.localStream.initialize().then(() => {  
       callback(streamInfo.localStream);
    });
    return streamInfo.localStream;
};

export const createNewLiveClient = function(userId){
    return TRTC.createClient({ sdkAppId, userId, userSig, mode: 'live'});
};

// 房间控制器
export const RoomControl = {
    //创建课堂房间
    createClassRoom : function( roomId_,callback){
        console.log("createClassRoom "+roomId_);
        roomId = roomId_;
        const UserSig = genTestUserSig(roomId);
        sdkAppId = UserSig.sdkAppID;
        userSig = UserSig.userSig;
        client = TRTC.createClient({
            'mode': 'rtc',
            'sdkAppId':sdkAppId,
            'userId':roomId,
            'userSig':userSig
        });
        callback(client);
        return client;
    },
    // 进入课堂
    enterClassRoom:function(roomId,callback){
        client.join({ 'roomId':roomId })
        .catch(error => {
          console.error('进房失败 ' + error);
        })
        .then(() => {
          console.log('进房成功 '+roomId+" "+userSig); 
          callback(client);
        });
    },
    exitClassRoom : function(callback){
        if(window.confirm("确定退出课堂吗?")){ 
           callback();
        }
    }
}

3. 在LoginBox.vue 模块编写用户登录页面,收集教师用户的名字、手机等信息,为后面创建课堂的唯一URI做准备。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
 
      <div> 
      <el-row>
        <el-col :span="12" :offset="6">
          <el-card click="alert('aa');userInfo.role=0" :body-style="{ padding: '0px' }" :shadow="userInfo.role==0?'always':'never'">
            <img style="height:200px" src="teacher.jpeg" class="image">
            <div style="padding: 14px;">
              <span>我是老师,准备开课。</span>
              <div class="bottom clearfix"> 
              </div>
            </div>
          </el-card>
        </el-col>
      </el-row>
        <el-form style="margin:36px" label-width="80px" :model="userInfo">
          <el-form-item label="我的名字">
            <el-input v-model="userInfo.name"></el-input>
          </el-form-item> 
          <el-form-item label="手机号">
            <el-input v-model="userInfo.phone"></el-input>
          </el-form-item> 
            <el-form-item>
              <el-button type="primary" @click="enterRoom()"> 进入课堂 </el-button> 
            </el-form-item>
        </el-form>
      </div> 
</template>
<script>
import {RoomControl} from './../TRTC.Service';  
import {userInfo} from './../TRTC.Service'; 
export default {
  name: 'LoginBox',
  props: {
    msg: String
  },  
  data:function(){
    return {  
      userInfo:{role:0,name:"My Name",phone:"0001"}
    };
  },
  created:function(){
        userInfo.name = this.userInfo.name;
  },
  methods:
    { 
      enterRoom:function(){
        userInfo.name = this.userInfo.name;
        userInfo.phone = this.userInfo.phone;
        RoomControl.createClassRoom(this.userInfo.phone,()=>{ 
          this.$emit("enterroom");
        });     
      }
    }
}
</script> 
<style scoped>
 
</style>

登录界面
登录界面

4. 在ClassRoom.vue 模块里编写课堂的实现逻辑代码,流程如下,进入房间,显示本地视频流,然后通过client.publish() 把本地音视频流推送到TRTC。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

import Vue from 'vue'; 
import WhiteBoard from './TeacherWhiteBoard.vue';
import TeacherLocalVideo from './TeacherLocalVideo.vue'; 
import StudentVideo from './StudentVideo.vue';

import {createLocalStream} from './../TRTC.Service';  
import {RoomControl} from './../TRTC.Service';  
import {userInfo} from './../TRTC.Service';  

import {roomId} from './../TRTC.Service'; 
import {client} from './../TRTC.Service'; 
let Base64 = require('js-base64').Base64;
export default {
  name: 'TeacherClassRoom',
   components: {
    WhiteBoard, 
    TeacherLocalVideo,
    StudentVideo
  },
  props: {
    
  },
  created:function(){
    
    // 房间内容有新链路加入事件
    client.on('stream-added', event => {
      console.log('stream added ');
      this.students.push(event); 
      this.onStudentEnterRoom(event);
    });
    // 房间内容有新链路退出事件
    client.on('stream-removed', event => {
      console.log('stream removed ');
      this.onStudenExitRoom(event);
    }); 
    RoomControl.enterClassRoom(roomId,()=>{
      this.visitURI = window.location.href+"#"+ Base64.encode( roomId+"|"+userInfo.name);
      createLocalStream(roomId,(stream)=>{
          Vue.nextTick(()=>{  
            stream.play("local_stream");
            client.publish(stream).then(() => { 
              console.log('publish'); 
                callback(stream);
            }); 
          });
      }); 
    });
    
  },
  methods:{
    onStudenExitRoom:function(event){ 
        console.log('onStudenExitRoom ');
    },
    onStudentEnterRoom:function(event){ 
        console.log('onStudentEnterRoom ');
    }
  },
  data:function(){
    return {   
      visitURI:"", 
      students:[]
    };
  }
}

运行画面
运行画面

五、在后台仪表盘查看运行数据。

开发好教师端课堂相关模块后,可以看到音视频流成功地发送出去,下一步是在TRTC仪表盘看一下,刚刚发布的数据是否真的已经被TRTC服务器所接收。

从仪表盘看,老师端的音视频数据已经进入TRTC的服务器,并显示终端设备的一些信息。

本篇小结

  • 接入TRTC SDK 必须先在TRTC后台创建应用,并把正确的sdkAPPID 传入,并且需要注意 userSig生成步骤不能出错。
  • 生成UserSig的时候注意每个用户的UserId必须唯一,同时,不能跟RoomId混肴了。
  • 必须严格遵循 client 的 createClient -> join -> createStream 流程,否则会进入房间失败。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第8节:libtorch必用的代码段:加速开发你的C++深度学习模型
文章目录 环境请参考上一篇 cmakelists.txt TIPS 环境请参考上一篇 第一节:linux 开发AI算法以及libtorch部署算法详细教程-环境搭建 cmakelists.txt cmake_minimum_required (VERSION 3.8) project(SOLDIER) set(Torch_DIR "/libtorch/share/cmake/Torch") set(PYTHON_EXECUTABLE "/usr/bin/python3") find_package(T
AI拉呱
2022/08/07
7070
libtorch系列教程3:优雅地训练MNIST分类模型
在这篇文章中,我们对如何使用Libtorch进行MNIST分类模型的训练和测试进行详细描述。首先会浏览官方MNIST示例,然后对其进行模块化重构,为后续别的模型的训练提供 codebase。
王云峰
2023/10/23
6520
PyTorch 2.2 中文官方教程(十一)
PyTorch C++ 前端是 PyTorch 机器学习框架的纯 C++ 接口。虽然 PyTorch 的主要接口自然是 Python,但这个 Python API 坐落在一个庞大的 C++ 代码库之上,提供了基础数据结构和功能,如张量和自动微分。C++ 前端暴露了一个纯 C++11 API,扩展了这个底层 C++ 代码库,提供了用于机器学习训练和推断所需的工具。这包括一个内置的常见神经网络建模组件集合;一个 API 用于扩展此集合以添加自定义模块;一个流行的优化算法库,如随机梯度下降;一个并行数据加载器,具有定义和加载数据集的 API;序列化例程等。
ApacheCN_飞龙
2024/02/05
1.1K0
PyTorch 2.2 中文官方教程(十一)
libtorch-resnet18
与大家分享一下自己在学习使用libtorch搭建神经网络时学到的一些心得和例子,记录下来供大家参考 首先我们要参考着pytorch版的resnet来搭建,这样我们可以省去不必要的麻烦,上代码: 1、首先是pytorch版残差模块
全栈程序员站长
2022/08/31
6360
利用Pytorch的C++前端(libtorch)读取预训练权重并进行预测
本篇使用的平台为Ubuntu,Windows平台的请看Pytorch的C++端(libtorch)在Windows中的使用
老潘
2023/10/19
1.1K0
利用Pytorch的C++前端(libtorch)读取预训练权重并进行预测
libtorch:C++开发深度学习模型算法《张量基本操作》
环境搭建 CmakeLists.txt cmake_minimum_required (VERSION 3.8) project(SOLDIER) set(Torch_DIR "/libtorch/share/cmake/Torch") set(PYTHON_EXECUTABLE "/usr/bin/python3") find_package(Torch REQUIRED) find_package(OpenCV REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX
AI拉呱
2022/08/07
1.2K0
【社区投稿】pytorch+burn 实现A卡训练模型
我在刚接触的pytorch的时候,只有一台破笔记本,学到CNN的时候,需要用显卡训练模型,那时的我,兜比脸干净,此生头一次感觉到贫穷限制了我对知识的追求。
MikeLoveRust
2024/04/15
5220
【社区投稿】pytorch+burn 实现A卡训练模型
TorchScript | 目标检测部署实战
TorchScript 软件栈可以将 Python 代码转换成 C++ 代码。TorchScript 软件栈包括两部分:TorchScript(Python)和 LibTorch(C++)。TorchScript 负责将 Python 代码转成一个模型文件,LibTorch 负责解析运行这个模型文件
iResearch666
2023/11/22
5620
TorchScript | 目标检测部署实战
实践教程|Grad-CAM的详细介绍和Pytorch代码实现
Grad-CAM (Gradient-weighted Class Activation Mapping) 是一种可视化深度神经网络中哪些部分对于预测结果贡献最大的技术。它能够定位到特定的图像区域,从而使得神经网络的决策过程更加可解释和可视化。
一点人工一点智能
2023/08/25
1.7K0
实践教程|Grad-CAM的详细介绍和Pytorch代码实现
Pytorch 深度学习实战教程(三):UNet模型训练,深度解析!
PS:文中出现的所有代码,均可在我的 github 上下载,欢迎 Follow、Star:点击查看
Jack_Cui
2020/05/26
31.9K4
Spatial Transformer Network_transgression
上一篇通俗易懂的Spatial Transformer Networks(STN)(一)中,我们详细介绍了STN中会使用到的几个模块,并且用pytorch和numpy来实现了,这篇文章我们将会利用pytorch来实现一个MNIST的手写数字识别并且将STN模块嵌入到CNN中
全栈程序员站长
2022/09/28
3600
Spatial Transformer Network_transgression
【AICAMP —— Pytorch】看完就去搭网络!
张量和Numpy中ndarrays的概念很相似,有了这个作为基础,张量也可以被运行在GPU上来加速计算,下面直接可以感受下张量的创建与Numpy有什么样的区别。
灿视学长
2021/05/28
9610
【深度学习】基于web端和C++的两种深度学习模型部署方式
本文对深度学习两种模型部署方式进行总结和梳理。一种是基于web服务端的模型部署,一种是基于C++软件集成的方式进行部署。
黄博的机器学习圈子
2020/08/24
3.4K0
【深度学习】基于web端和C++的两种深度学习模型部署方式
基于卷积神经网络的垃圾分类
自今年7月1日起,上海市将正式实施 《上海市生活垃圾管理条例》。垃圾分类,看似是微不足道的“小事”,实则关系到13亿多人生活环境的改善,理应大力提倡。
云微
2023/02/11
9940
基于卷积神经网络的垃圾分类
「深度学习一遍过」必修24:基于UNet的Semantic Segmentation
Classic_model_examples/2015_UNet_SemanticSegmentation/MyUNet_SemanticSegmentation at main · zhao302014/Classic_model_examples · GitHub
荣仔_最靓的仔
2022/01/10
4090
「深度学习一遍过」必修24:基于UNet的Semantic Segmentation
「Deep Learning」PyTorch初步认识
torch.where(condition, x, y): 按照条件从x和y中选出满足条件的元素组成新的tensor。
曼亚灿
2023/07/05
6390
「Deep Learning」PyTorch初步认识
Pytorch的基本介绍及模型训练流程
PyTorch是一个很著名的支持GPU加速和自动求导的深度学习框架,在最近几年收到学术界的热捧,主要是因为其动态图机制符合思维逻辑,方便调试,适合于需要将想法迅速实现的研究者。PyTorch是Torch7团队开发的。Torch是一个开源科学计算框架,可以追溯到2002年纽约大学的项目。Torch的核心在于在构建深度神经网络及其优化和训练,为图像,语音,视频处理以及大规模机器学习问题提供快速高效的计算方案。为了追求更高的速度,灵活性和可扩展性,Torch采用Lua作为它的开发语言,但lua语言的受众比较局限。为了满足当今业界里Python先行(Python First)的原则,PyTorch应运而生,由Facebook人工智能研究员(FAIR)于2017年在GitHub上开源。顾名思义,PyTorch使用python作为开发语言,近年来和tensorflow, keras, caffe等热门框架一起,成为深度学习开发的主流平台之一。
Here_SDUT
2022/09/19
1.8K0
Pytorch的基本介绍及模型训练流程
PyTorch 60-Minute Blitz
Tensors(张量)与 Numpy 的 ndarrays 类似,但是其支持在 GPU 上使用来加速计算。
口仆
2020/08/14
9150
PyTorch 2.2 中文官方教程(九)
在本教程中,我们将使用 Flask 部署 PyTorch 模型,并为模型推理暴露一个 REST API。特别是,我们将部署一个预训练的 DenseNet 121 模型来检测图像。
ApacheCN_飞龙
2024/02/05
1.1K0
PyTorch 2.2 中文官方教程(九)
PyTorch常用代码段合集
本文是PyTorch常用代码段合集,涵盖基本配置、张量处理、模型定义与操作、数据处理、模型训练与测试等5个方面,还给出了多个值得注意的Tips,内容非常全面。
小白学视觉
2022/02/14
1.3K0
PyTorch常用代码段合集
推荐阅读
相关推荐
第8节:libtorch必用的代码段:加速开发你的C++深度学习模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验