vue3关于在线考试 实现监考功能 推流拉流

vue3 关于在线考试 实现监考功能,

pc端考试 本质是直播推流的功能

使用腾讯云直播: 在线文档

index.html

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<link rel="icon" href="/favicon.ico">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>xxx/title>
</head>
<style>
</style>

<body>
	<div id="app"></div>
	<script type="module" src="/src/main.ts"></script>
	<script src="https://video.sdk.qcloudecdn.com/web/TXLivePusher-2.1.1.min.js" charset="utf-8"></script>
</body>
<script type="text/javascript">
	window.TXLivePusher = TXLivePusher
</script>

</html>

TXLivePusher.js

class TXLivePusher {
	static onWarningCode(code) {
		const msg = {
			'-1001': '打开摄像头失败。',
			'-1005': '摄像头被中断(设备被拔出或者权限被用户取消)',
			'-1007': '屏幕分享被中断( Chrome 浏览器点击自带的停止共享按钮)。',
		}
		alert(msg[code + ''])
	}
	constructor(id) {
		this.id = id;
		this.CameraStatus = true;
		this.MicrophoneStatus = true;
		//@ts-expect-error
		this.livePusher = new window.TXLivePusher();
		this.deviceManager = this.livePusher.getDeviceManager(); //获取当前流的设备信息。
		this.ObserveTitle = '正在录制中'
	}
	init(safeUrl) {
		//静态函数,检查浏览器支持性。
		//@ts-expect-error
		window.TXLivePusher.checkSupport().then((data) => {
			// 是否支持WebRTC  
			if (data.isWebRTCSupported) {
				this.livePusher.setRenderView(this.id)
				// 设置视频质量
				this.livePusher.setVideoQuality('720p');
				// 设置音频质量
				this.livePusher.setAudioQuality('standard')
				// 自定义设置帧率
				this.livePusher.setProperty('setVideoFPS', 25);
				// 打开摄像头
				this.livePusher.startCamera();
				// 打开麦克风
				// this.livePusher.startMicrophone();
				//设置推流事件回调通知
				//设置推流事件回调通知
				this.livePusher.setObserver({
					//首帧视频采集完成的回调通知。
					onCaptureFirstVideoFrame: () => {
						if (safeUrl) {
							this.livePusher.startPush(`${safeUrl}`);
						}
					},
					onError: (status, msg) => {
						this.ObserveTitle = '录制失败'
						console.log(status, msg);
					},
					// 推流警告信息
					onWarning: (code, msg) => {
						console.log(code, msg);
						this.ObserveTitle = '录制失败'
						TXLivePusher.onWarningCode(code)
					},
					// 推流连接状态
					onPushStatusUpdate: (status, msg) => {
						console.log('推流连接状态', status, msg);
						// if (status === 0) this.ChangeCamera(false);
						// if (status === 2) this.ChangeCamera(true);
					},
					// 推流统计数据
					onStatisticsUpdate: (data) => {
						// console.log('video fps is ' + data.video.framesPerSecond);
					}
				});
			} else {
				this.ObserveTitle = '录制失败'
				alert('浏览器不支持');
			}
		});
	}
	// 获取摄像头设备
	getDevicesList() {
		return new Promise((resolve) => {
			// 获取设备列表
			this.deviceManager.getDevicesList('video').then(function (data) {
				resolve(data)
			});
		})
	}
	//切换摄像头设备
	switchCamera(cameraDeviceId) {
		this.deviceManager.switchCamera(cameraDeviceId);
	}
	//打开摄像头设备
	startCamera(cameraDeviceId) {
		this.livePusher.startCamera(cameraDeviceId);
	}

	closeClick() {
		//停止推流
		this.livePusher.stopPush();

		//需要停一段时间再关闭麦克风
		// 关闭摄像头
		this.livePusher.stopCamera();
		// 关闭麦克风
		this.livePusher.stopMicrophone();
		// 清理 SDK 实例
		this.livePusher.destroy()
	}
	// 查询是否推流中
	isPushing() {
		return this.livePusher.isPushing();
	}
}
export default TXLivePusher;

index.vue

<template>
	<div id="id_local_video" class="lacal_videl"></div>
</template>

<script setup lang="ts">
import TXLivePusher from './TXLivePusher'
const TXLivePusherObj = ref<any>({})
const getDomainPushUrl = async () => {
//替换自己项目的推流接口 
	const res = await bank.GetDomainPushUrl_API({})
	if (res.code === 200) {
		TXLivePusherObj.value = new TXLivePusher('id_local_video');
		TXLivePusherObj.value.init(res.data)
	}
}

onMounted(() => {
	getDomainPushUrl()
})

onBeforeUnmount(() => {
	TXLivePusherObj.value.closeClick()
})
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述
后台巡考观看 实现拉流功能

使用腾讯云直播: 在线文档
index.html
Web 播放器 SDK (TCPlayer)

	<link href="https://web.sdk.qcloud.com/player/tcplayer/release/v5.1.0/tcplayer.min.css" rel="stylesheet" />
	<!--播放器脚本文件-->
	<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.7.2/tcplayer.v4.7.2.min.js"></script>

index.vue

<video id="playerVideo" width="240" height="180" preload="auto" playsinline
webkit-playsinline></video>
<script>
//请求后端拉流接口
const player = TCPlayer('playerVideo' + props.item.sourceId, {
			autoplay: true,
			controls: false,
			webrtcConfig: {
				connectRetryCount: 1,
				receiveAudio: false,
			}
		});
		player.src('xxxxx');
</script>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux 安装Openjdk1.8

一、在线安装 1、更新软件包 sudo apt-get update 2、安装openjdk sudo apt-get install openjdk-8-jdk 3、配置openjdk1.8 openjdk默认会安装在/usr/lib/jvm/java-8-openjdk-amd64 vim ~/.bashrc export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME${J…

数据分析入门指南Excel篇:各类Excel函数概览与详解(二)

在当今数字化时代&#xff0c;数据已成为推动业务决策和创新的关键因素。而表格结构数据&#xff0c;作为最常见的数据存储形式之一&#xff0c;广泛应用于财务、物流、电商等多个领域。本文将基于提供的材料文本&#xff0c;深入探讨表格数据的处理与分析&#xff0c;特别是通…

【云原生】Kubernetes部署EFK日志分析系统

Kubernetes部署EFK日志分析系统 文章目录 Kubernetes部署EFK日志分析系统一、前置知识点1.1、k8s集群应该采集哪些日志&#xff1f;1.2、k8s比较流行的日志收集解决方案1.3、fluentd、filebeta、logstash对比分析1.3.1、Logstash1.3.2、Filebeat1.3.3、fluentd 1.4、EFK工作原理…

STM32自己从零开始实操08:STM32主控原理图

由于老师使用的各引脚分门别类的单片机原理图我没有找到&#xff0c;我使用是引脚按顺序摆放的&#xff0c;不方便一个模块一个模块截图展示&#xff0c;所以这部分使用老师的原理图。 一、电源 1.1电源的介绍 1.1.1数字电源和地&#xff08;VDD和VSS&#xff09; 数字电源…

修改CentOS7.9跟Unbantu24的ip地址

修改CentOS的IP地址 ip addr 查看IP地址 cd /etc/sysconfig/network-scripts ls vi ifcfg-ens33修改ip地址跟干网关地址 TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" DEFROUTE"yes" IPV4_FA…

项目2:API Hunter 细节回顾 -2

一. 接口上线/下线功能 接口的上线和下线是由管理员负责进行的。 上线接口&#xff0c;即发布接口。首先需要判断接口是否存在&#xff0c;然后判断接口是否可调用。如果可以调用&#xff0c;就修改数据库中该接口的状态字段为 1&#xff0c;代表发布&#xff0c;默认状态为 …

精美个人博客 付费搭建

博客演示地址&#xff1a;http://gavana.top/ 1、前端博客页 2、后端管理页 此项目原作者已开源&#xff0c;地址&#xff1a;Naccl/NBlog: &#x1f353; Spring Boot Vue 前后端分离博客系统 https://naccl.top (github.com) 可以自己搭建&#xff0c;我只是负责搭建起可直…

【Java13】包

“包”这个机制&#xff0c;类似于分组。主要作用是区分不同组内的同名类。例如&#xff0c;高三三班有一个“王五”&#xff0c;高二八班也有一个“王五”。高三三班和高三八班就是两个不同的包。 Java中的包&#xff08;package&#xff09;机制主要提供了类的多层命名空间&…

被全球数千企业应用的TOGAF®标准,不仅仅是IT框架

2022 年 4 月 25 日&#xff0c;The Open Group 发布了 TOGAF标准第10版。这不仅仅是 The Open Group 的重要里程碑&#xff0c;也是整个企业架构行业和所有从业者的重大利好。作为企业架构师的首选标准&#xff0c;TOGAF一直以来都受到人们的欢迎。对此&#xff0c;第10版必须…

Java异常详解及自定义异常

认识异常&#xff0c;掌握异常处理主要的5个关键字&#xff1a;throw、try、catch、final、throws并掌握自定义异常 目录 1、异常概念与体系结构 1、1异常的概念 1、2异常体系结构 1、3异常的分类 编译时异常&#xff1a; 运行时异常 &#xff1a; 2、异常处理 2、1防御式…

每日直播分享车载知识:硬件在环、UDS诊断、OTA升级、TBOX测试、CANoe、ECU刷写、CAN一致性测试:物理层、数据链路层等

每日直播时间&#xff1a;&#xff08;进腾讯会议方式&#xff1a;QazWsxEdc_2010&#xff09; 周一到周五&#xff1a;20&#xff1a;00-23&#xff1a;00&#xff08;讲一个小时&#xff0c;实操两个小时&#xff09; 周六与周日&#xff1a;9&#xff1a;00-17&#xff1a;0…

C# 中的Semaphore(信号量)详解与应用

文章目录 1. 信号量是什么&#xff1f;2. C# 中的 Semaphore 类3. 信号量的使用示例3.1 创建信号量3.2使用信号量同步线程 4. 总结 在并发编程中&#xff0c;同步是一种基本的需求。信号量&#xff08;Semaphore&#xff09;是一种常见的同步机制&#xff0c;它用于控制对共享资…

智能充电(新能源电动车,电单车)云管理系统的定制解决方案

一 系统简介 智能充电&#xff08;新能源电动车&#xff0c;电单车&#xff09;云管理系统 是一套能够实现对充电站/桩的实时通讯、状态监控、故障检测、运营分析、数据统计、策略设置的智能化多任务管理系统。 二 平台概览 智能充电云管理系统 https://chongdianzhuang.itg…

AI大模型+软件开发,计算机从业者转行的契机?

自从大模型吹响新一轮技术革命的号角后&#xff0c;整个行业各个层次都面临大模型带来的范式转换。我今年在 4 月份上海举办的全球机器学习技术大会上演讲时曾提出&#xff0c;大模型为计算产业带来了计算范式、开发范式、交互范式的三大范式改变。今天是软件研发技术大会&…

职业理念教育观

职业道德理念——教育观 教育是什么、干什么、为了什么&#xff0c;教育心该培养什么样的人、如何培养人等。 教育观 素质教育内涵 教学观 素质教育内涵 新课程改革的教学观

力扣-贪心算法4

406.根据身高重建队列 406. 根据身高重建队列 题目 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或…

微信商城自定义小程序源码系统,PHP+MySQL组合开发 带完整的源代码包以及搭建教程

系统概述 传统电商模式面临着诸多挑战&#xff0c;如用户体验不够个性化、运营成本较高等。而微信商城小程序凭借其轻量级、便捷性和与微信生态系统的紧密结合&#xff0c;为企业提供了新的发展机遇。小编给大家分享一款功能强大、易于定制和扩展的源码系统&#xff0c;帮助企…

C# 快速排序算法的详细讲解

目录 一、前言 二、例子 三、快速排序算法图片讲解 四、快速排序算法代码 五、纯净代码 一、前言 用比较好懂的方式讲一下快速排序算法。 二、例子 如果我有一堆钱&#xff0c;想数清楚&#xff0c;最快的方案是什么&#xff1f; 图1 一堆钱 答&#xff1a;先分类&…

数据库之MQL

1&#xff0c;查询所有 mysql> select * from grade;2&#xff0c; mysql> select id,firstname,lastname from grade;3&#xff0c; mysql> select firstname,lastname from grade where id > 4;4&#xff0c; mysql> select * from grade where sex f;5&…

『SD』比例切换插件 sd-webui-aspect-ratio-helper(附插件)

本文简介 ✨ 告别手动计算&#xff0c;SD绘图神器来啦&#xff01; &#x1f494; 是不是每次使用SD绘图时&#xff0c;都要自己手动去计算图片的宽高比&#xff0c;感觉好繁琐啊&#xff1f; &#x1f389; 今天就来给各位工友安利一个超实用的插件——sd-webui-aspect-ratio-…