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

news2024/11/15 12:48:25

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>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI产品经理发展与规划

今天引用高飞老师的讲课内容&#xff0c;分享一下&#xff0c;何为AI产品经理&#xff1f;这个话题不仅仅希望介绍AI产品经理的工作方式等方面的内容&#xff0c;更多的在于讨论未来产品经理这个行业应该如何发展&#xff1f;行业壁垒在何处&#xff1f;如何应对中年危机&#…

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

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

使用雨云Ubuntu搭建Mc服务器

快两年没写文了吧&#xff0c;好久不见(╹ڡ╹ ) 开门见山吧&#xff0c;网上搜了很多&#xff0c;发现没有使用雨云ubuntu搭建mc服务器的教程&#xff0c;所以准备写一篇&#xff08;顺便恰米 该文章涵盖了很多我自己搭建时遇到的问题&#xff0c;没有提到的大家可以评论或…

四川蔚澜时代电子商务有限公司持续领跑抖音电商

在当今这个数字化飞速发展的时代&#xff0c;电子商务已成为推动经济增长的重要引擎。而在众多电商平台中&#xff0c;抖音电商以其独特的社交属性和年轻化的用户群体&#xff0c;逐渐崭露头角。四川蔚澜时代电子商务有限公司正是这股潮流中的佼佼者&#xff0c;他们专注于抖音…

如何手工DIV一个小车:基于树莓派和总线舵机的智能小车实现

成品演示&#xff1a;bilibili - 悄悄的魔法书 代码仓库&#xff1a;github - flying forever 或者 gitee - 清风莫追 文章目录 1 引言1.1 课题背景1.2 课题意义1.3 课题目的 2 课题相关知识与开发环境3 课题的总体设计4 课题的详细设计与实现4.1 小车物理结构4.1.1 轮子4.1.2 …

食品制造业为什么需要EHS管理,EHS要怎么做才有效?

近年来&#xff0c;随着公众健康意识的显著提升&#xff0c;"舌尖上的安全"已成为广大消费者日益关注的焦点话题。这一趋势促使食品安全的监管力度不断加码&#xff0c;旨在构建一个更加安全、可靠的食品消费环境。 与此同时&#xff0c;ESG&#xff08;环境、社会与…

在 PostgreSQL 里如何实现数据的自动清理和过期处理?

文章目录 一、使用 TIMESTAMP 列和定期任务二、使用事件触发器&#xff08;Event Triggers&#xff09;三、使用分区表&#xff08;Partitioned Tables&#xff09;四、结合存储过程和定时任务示例场景实现步骤测试与验证 在 PostgreSQL 中&#xff0c;可以通过多种方式实现数据…

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

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

MPC学习资料汇总

模型预测控制MPC学习资料汇总 需要的私信我~ 需要的私信我~ 需要的私信我~ 【01】课件内容 包含本号所有MPC课程的课件&#xff0c;以及相关MATLAB文档。 【02】课件源代码 本号所有MPC课程的源代码。 【03】MPC仿真案例 三个MPC大型仿真案例&#xff1a; 1&#xff09;…

网口--内部有/没有变压器

内部有变压器 可以用万用万用表量出短路&#xff0c;75ohm&#xff0c; 150ohm电阻 网口&#xff1a;双网口&#xff0c; 汉仁 HR916103 内部没有变压器

EDI安全:如何在2024年保护您的数据免受安全和隐私威胁

电子数据交换&#xff08;EDI&#xff09;支持使用标准化格式在组织之间自动交换业务文档。这种数字化转型彻底改变了业务通信&#xff0c;消除了对纸质交易的需求并加速了交易。然而&#xff0c;随着越来越依赖 EDI 来传输发票、采购订单和发货通知等敏感数据&#xff0c;EDI …

谷粒商城学习笔记-18-快速开发-配置测试微服务基本CRUD功能

文章目录 一&#xff0c;product模块整合mybatis-plus1&#xff0c;引入依赖2&#xff0c;product启动类指定mapper所在包3&#xff0c;在配置文件配置数据库连接信息4&#xff0c;在配置文件中配置mapper.xml映射文件信息 二&#xff0c;单元测试1&#xff0c;编写测试代码&am…

举例说明深拷贝和浅拷贝

概述 简单描述一下对象的实例化过程。 创建对象的时候&#xff0c;或者说在实例化对象的时候 Person 类有年龄和学生类 int age 18; Student stu1 new Student(); 比如此时创建一个 age 对象&#xff0c;一个Student 对象&#xff0c;在虚拟机中&#xff0c;会在堆中开一…

AI大模型财务行业落地,金蝶徐少春:未来“人人都是财务人员”

财务管理价值模型从陀螺型向沙漏型转变。 AI使财务人员在计划与控制领域从只靠经验预测转变为精准预测&#xff0c;让财务管理信息从数据专享转变到信息普惠、专家服务从个人精英转变到AI天团、外部报告的重点从财务指标转变到发展能力评价&#xff0c;企业也从传统的‘财务信息…

STM32-旋转编码器和对射式红外传感器

本内容基于江协科技STM32视频内容&#xff0c;整理而得。 文章目录 1. 旋转编码器和对射式红外传感器1.1 旋转编码器1.1.1 旋转编码器简介1.1.2 旋转编码器硬件电路 1.2 对射式红外传感器 2. 库函数及代码2.1 EXTI库函数和NVIC库函数2.2 5-1对射式红外传感器计次2.2.1 硬件电路…

DDP:微软提出动态detection head选择,适配计算资源有限场景 | CVPR 2022

DPP能够对目标检测proposal进行非统一处理&#xff0c;根据proposal选择不同复杂度的算子&#xff0c;加速整体推理过程。从实验结果来看&#xff0c;效果非常不错 来源&#xff1a;晓飞的算法工程笔记 公众号 论文: Should All Proposals be Treated Equally in Object Detect…

HAProxy安装配置详解

HAProxy是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。   HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上&#xf…

algorithm算法库学习之——修改序列的操作

algorithm此头文件是算法库的一部分。本篇介绍修改序列的操作函数。 修改序列的操作 copycopy_if (C11) 将某一范围的元素复制到一个新的位置 (函数模板) copy_n (C11) 将一定数目的元素复制到一个新的位置 (函数模板) copy_backward 按从后往前的顺序复制一个范围内的元素 (函…

Java异常详解及自定义异常

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

优思学院|SPC控制图异常点占比可否用来评估过程的稳定程度?

使用SPC控制图异常点占比确实可以评估过程的稳定程度。通常来说&#xff0c;SPC&#xff08;统计过程控制&#xff09;控制图是用于监控和控制生产或业务过程&#xff0c;以确保这些过程在可接受的范围内运行。通过识别和分析控制图中的异常点&#xff0c;可以判断过程是否存在…