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-errorthis.livePusher = new window.TXLivePusher();this.deviceManager = this.livePusher.getDeviceManager(); //獲取當前流的設備信息。this.ObserveTitle = '正在錄制中'}init(safeUrl) {//靜態函數,檢查瀏覽器支持性。//@ts-expect-errorwindow.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.pswp.cn/diannao/42883.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42883.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42883.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

永磁同步電機控制算法--最大轉矩電流比控制(虛擬信號注入法)

目前&#xff0c;國內外相關學者對 MTPA 控制方法進行了一系列的理論研究與仿真分析。通過研究取得的成果綜合來看&#xff0c;該控制方法主要有&#xff1a;直接公式計算法、曲線擬合法、查表法、搜索法、高頻信號注入法以及參數辨識法等。 之前的文章中已經介紹了直接公式計…

Java.Maths類的常用方法

Maths類的常用方法 Math 類是 Java 標準庫中的一個類&#xff0c;位于 java.lang 包中。它提供了一些基本的數學操作方法&#xff0c;這些方法都是靜態的。以下是 Math 類的所有方法&#xff1a; 數學常量 double E: 自然對數的底數&#xff08;約等于 2.718&#xff09;doub…

對于“百模大戰”,幾乎所有大佬的口風都180 °大轉變了?

文 | 智能相對論 作者 | 陳泊丞 在2024世界人工智能大會暨人工智能全球治理高級別會議產業發展主論壇上&#xff0c;百度創始人、董事長兼首席執行官李彥宏談了些對于AI大模型的看法&#xff0c;語驚四座。 他先是指出&#xff0c;“百模大戰造成了社會資源的巨大浪費&#x…

ubuntu 如何復制文件夾的內容

在Ubuntu中&#xff0c;您可以使用cp命令來復制文件夾的內容。如果您想要復制文件夾及其所有內容&#xff08;包括子文件夾&#xff09;&#xff0c;可以使用-r&#xff08;遞歸&#xff09;選項。 cp -r /path/to/source/folder/* /path/to/destination/folder/ 這個命令會將s…

現在2024年網絡安全真實情況還好就業嗎?_2024年網絡安全專業到底行不行了

2024年網絡安全行業的前景看起來非常樂觀。根據當前的趨勢和發展&#xff0c;一些趨勢和發展可能對2024年網絡安全行業產生影響&#xff1a; 5G技術的廣泛應用&#xff1a;5G技術的普及將會使互聯網的速度更快&#xff0c;同時也將帶來更多的網絡威脅和安全挑戰。網絡安全專家…

java-spring boot光速入門教程(超詳細!!)

目錄 一、引言 1.1 初始化配置 1.2 整合第三方框架 1.3 后期維護 1.4 部署工程 1.5 敏捷式開發 二、SpringBoot介紹 spring boot 2.1 搭建一個spring boot工程 2.2 使用idea創建項目 2.3 在線創建姿勢 2.4 項目的目錄結構 2.5 項目的運行方式 2.6 yml文件格式 2…

CP AUTOSAR標準之XCP(AUTOSAR_CP_SWS_XCP)(更新中……)

1 簡介和功能概述 該規范規定了AUTOSAR基礎軟件模塊XCP的功能、API和配置。XCP是主設備(工具)和從設備(設備)之間的協議描述(ASAM標準),提供以下基本功能: 同步數據采集(測量)同步數據刺激(用于快速原型設計)在線內存校準(讀/寫訪問)校準數據頁面初始化和切換用于ECU開發目的…

分享外貿工作中常用英文標準表達和英文語句

常用英文表達 報拉格斯最低到岸價 quote the lowest price CIF Lagos經營紡織品多年 be in the line of textiles for many years貨物受歡迎 the goods are very popular with customers / have met with a warm reception /be well received/accepted/ enjoy a wide populari…

Java線程死鎖及解決方法

多線程環境下&#xff0c;死鎖即兩個或兩個以上的線程去爭奪同一個共享資源&#xff0c;而導致互相等待的情況。 要產生死鎖&#xff0c;必須滿足如下四個條件&#xff1a; 互斥條件&#xff0c;共享資源x和y只能被一個線程占有請求和保持條件&#xff0c;T1持有x&#xff0c…

解讀BASE理論:高可用性與性能的完美平衡

Base概念 BASE 理論是一種處理大規模分布式系統中的數據一致性問題的思路。相比于傳統的嚴格一致性&#xff0c;它更靈活&#xff0c;適用于那些需要高可用性和性能的系統。BASE 理論由三個部分組成&#xff1a; 基本可用&#xff08;Basically Available&#xff09; 基本可用…

【c++刷題筆記-動態規劃】day32: 509. 斐波那契數 、 70. 爬樓梯 、 746. 使用最小花費爬樓梯

509. 斐波那契數 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int fib(int n) {if(n0){return 0;}vector<int>dp(n1);dp[0]0;dp[1]1;for(int i2;i<n;i){dp[i]dp[i-1]dp[i-2];}return dp[n];} }; 70. 爬樓梯 - 力扣&#xff08;LeetCode&#x…

pytorch 模型保存到本地之后,如何繼續訓練

在 PyTorch 中&#xff0c;你可以通過以下步驟保存和加載模型&#xff0c;然后繼續訓練&#xff1a; 保存模型 通常有兩種方式來保存模型&#xff1a; 保存整個模型&#xff08;包括網絡結構、權重等&#xff09;&#xff1a; torch.save(model, model.pth) 只保存模型的state…

利用亞馬遜云科技云原生Serverless代碼托管服務開發OpenAI ChatGPT-4o應用

今天小李哥繼續介紹國際上主流云計算平臺亞馬遜云科技AWS上的熱門生成式AI應用開發架構。上次小李哥分享?了利用谷歌云serverless代碼托管服務Cloud Functions構建Gemini Pro API?&#xff0c;這次我將介紹如何利用亞馬遜的云原生服務Lambda調用OpenAI的最新模型ChatGPT 4o。…

CSAL: the Next-Gen Local Disks for the Cloud——論文泛讀

EuroSys 2024 Paper 論文閱讀筆記整理 問題 云本地磁盤以其實惠的價格和高性能而極具吸引力。在云本地磁盤中&#xff0c;物理存儲設備直接連接到計算服務器&#xff0c;并作為塊設備虛擬化到虛擬機&#xff08;VM&#xff09;。在這種設置下&#xff0c;計算節點受其有限的計…

純前端如何實現Gif暫停、倍速播放

前言 GIF 我相信大家都不會陌生&#xff0c;由于它被廣泛的支持&#xff0c;所以我們一般用它來做一些簡單的動畫效果。一般就是設計師弄好了之后&#xff0c;把文件發給我們。然后我們就直接這樣使用&#xff1a; <img src"xxx.gif"/>這樣就能播放一個 GIF …

MPC學習資料匯總

模型預測控制MPC學習資料匯總 需要的私信我~ 需要的私信我~ 需要的私信我~ 【01】課件內容 包含本號所有MPC課程的課件&#xff0c;以及相關MATLAB文檔。 【02】課件源代碼 本號所有MPC課程的源代碼。 【03】MPC仿真案例 三個MPC大型仿真案例&#xff1a; 1&#xff09;…

Python面試題:在 Python 中如何進行多線程編程?

在 Python 中進行多線程編程通常使用 threading 模塊。下面是一個簡單的示例&#xff0c;展示了如何創建和啟動多個線程。 示例代碼 import threading import time# 定義一個簡單的函數&#xff0c;它將在線程中運行 def print_numbers():for i in range(10):print(f"Nu…

鏈接器的工作原理,靜態鏈接與動態鏈接的區別,如何創建和使用動態鏈接庫

鏈接器在程序開發中的作用至關重要&#xff0c;它負責將多個目標文件和庫文件整合成一個可以執行的文件。在深入了解鏈接器的工作原理、靜態鏈接與動態鏈接的區別&#xff0c;以及如何創建和使用動態鏈接庫之前&#xff0c;我們先來概述一下鏈接器的基本功能。 鏈接器的工作原…

20240704每日后端------聊聊 mybatis的 where 1=1

目標 最近&#xff0c;在項目中使用MyBatis進行SQL腳本編寫時&#xff0c;我遇到了以“WHERE 11”開頭的WHERE子句的做法&#xff0c;以簡化多個條件的串聯。這里有一個例子來討論這種技術以及“WHERE 11”是否對性能有任何影響。 <select id"" parameterType&q…

【數據結構】09.樹與二叉樹

一、樹的概念與結構 1.1 樹的概念 樹是一種非線性的數據結構&#xff0c;它是由n&#xff08;n>0&#xff09;個有限結點組成一個具有層次關系的集合。把它叫做樹是因為它看起來像一棵倒掛的樹&#xff0c;也就是說它是根朝上&#xff0c;而葉朝下的。 根結點&#xff1a;根…