flv视频轮播功能(单个时)
1.轮播思路
获取八个视频源的地址。
将这些地址分成两组,每组包含四个地址。
在页面中创建一个四分屏布局的视频播放器。
将第一组的四个视频地址分别插入到四分屏布局的四个视频框中。
设置一个定时器,每10秒执行一次。
每次定时器触发时,将第二组的四个视频地址分别插入到四分屏布局的四个视频框中,覆盖原来的视频地址。
继续等待10秒后,再次执行定时器,将第一组的四个视频地址重新插入到四分屏布局的四个视频框中,覆盖第二组的视频地址。
<div @click="getHandList ">选择数据</div>
<img @click="stopClick" src="@/assets/images/1p.png" class="imgStyle" alt="">停止
const currentVideoIndex = ref(0)
当选择数据调用函数 list为数据
const getHandList = (List) => {
如果有定时器,则先清除
if (onesetInterTimeInter.value) {
clearInterval(onesetInterTimeInter.value)
}
// 提前清除二维数组对应的下标取余数
// 当多分屏进入单分屏的话currentVideoIndex.value 可能会有问题,不能保证选择的视频是从index=0开始的所以currentVideoIndex设置为0
currentVideoIndex.value = 0
cutArray.value = List
// 看当前是几个屏,把几屏和数据源传入进行二维分组,huanuam 为 当前几分屏
twoDimensionalArray.value = convertToTwoDimensionalArray(List, huaNum.value);
console.log(twoDimensionalArray.value, 'twoDimensionalArray.value')
if (huaNum.value == '1') {
单屏
oneHua();
}
}
// 根据当前几分屏,分成几个二维数组
const convertToTwoDimensionalArray = (arr, num) => {
var result = [];
var length = arr.length;
var rows = Math.ceil(length / num); // 计算行数
for (var i = 0; i < rows; i++) {
var row = arr.slice(i * num, (i + 1) * num); // 根据给定的数字切割一维数组
result.push(row);
}
return result;
}
const oneHua = () => {
// 添加当前的视频源
if (url.value.length) {
url.value = []
}
默认第一项第一个视频
url.value.push({ "url": twoDimensionalArray.value[currentVideoIndex.value][0].url, "id": twoDimensionalArray.value[currentVideoIndex.value][0].id, "shename": twoDimensionalArray.value[currentVideoIndex.value][0].shename, "index": 0 });
clearonedestoryVideo()
// // 赋值url
// 默认索引0,取二维数组第一项的id 1为视频时,调用init改变dom和index
aaa(0, twoDimensionalArray.value[currentVideoIndex.value][0].id)
// 定时器进行轮播
twoDimensionalArray.value.length > 1说明有1组以上的二维数据,那么就轮播,初次外,当别的分屏过来时,如果当前的画面大于数据源,那么则清除定时器,不轮播
if (twoDimensionalArray.value.length > 1) {
onesetInterTimeInter.value = setInterval(rotateVideo, setInterTime.value)
} else {
clearInterval(onesetInterTimeInter.value)
}
}
const rotateVideo = () => {
clearonedestoryVideo()
url.value = []
// 对数据twoDimensionalArray列表进行取余
currentVideoIndex.value = (currentVideoIndex.value + 1) % twoDimensionalArray.value.length
url.value.push({ "url": twoDimensionalArray.value[currentVideoIndex.value][0].url, "id": twoDimensionalArray.value[currentVideoIndex.value][0].id, "shename": twoDimensionalArray.value[currentVideoIndex.value][0].shename, "index": 0 });
// 进行调用初始化方法
// currentVideoIndex.value取余二维范围区间
aaa(currentVideoIndex.value, twoDimensionalArray.value[currentVideoIndex.value][0].id)
}
aaa为初始化函数,当单个屏时,dom也应该只有一个
const aaa = (i, id) => {
console.log(i, id, "i-id");
if (url.value && url.value.length) {
const item = url.value.find(item => item.id == id)
console.log(url.value, "init url");
console.log(item, 'item');
let player = null;
var videoElement = document.getElementById("myFlvVideo" + 0); 固定
console.log(videoElement, "videoElement");
player = flvjs.createPlayer(
{
type: "flv",
url: item["url"],
},
{
cors: true, // 是否跨域
enableWorker: false, //启用分离的线程进行转换
autoCleanupSourceBuffer: true, //对SourceBuffer进行自动清理缓存
enableStashBuffer: false, //关闭IO隐藏缓冲区
stashInitialSize: 128, //减少首帧显示等待时长
fixAudioTimestampGap: false, //音频同步
}
);
player.attachMediaElement(videoElement);
player.load();
// 断开重连
player.on(flvjs.Events.ERROR, (errorInfo, errType, errDetail) => {
if (errorInfo.code == 404) {
this.$message.error('流媒体代理服务未找到,请检查');
}
console.log(i, flvPlayer.value[i], '---销毁');
destoryVideo(flvPlayer.value[i].player)
init(i, flvPlayer.value[i].id)
});
setTimeout(function () {
player.play() // 播放数据流
}, 300)
flvPlayer.value = flvPlayer.value.filter(item => item.index != i)
console.log(flvPlayer.value, 'flvPlayer.value')
flvPlayer.value.push({ "id": id, "player": player, "index": 0 })
}
}
相关文章:
flv视频轮播功能(单个时)
1.轮播思路 获取八个视频源的地址。 将这些地址分成两组,每组包含四个地址。 在页面中创建一个四分屏布局的视频播放器。 将第一组的四个视频地址分别插入到四分屏布局的四个视频框中。 设置一个定时器,每10秒执行一次。 每次定时器触发时…...
快速了解软件工程学概述(5种软件过程模型)
目录 1 、什么是软件?特点有哪些 ? 2 、 软件危机 定义: 软件危机产生的原因 消除软件危机的方法 3 、软件工程 1.软件工程的介绍 (1)概念 (2)本质特征 (3)软件工程方法学(方…...
sql21(Leetcode1174即时食物配送2)
代码: # Write your MySQL query statement belowselect round (sum(order_date customer_pref_delivery_date) * 100 /count(*),2 ) as immediate_percentage from Delivery where (customer_id, order_date) in (select customer_id, min(order_date)from deliv…...
Node——Node.js基础
对Node.js中的基础知识进行讲解,包括全局变量、全局对象、全局函数以及用于实现模块化编程的exports和module对象等内容,这些知识是学习Node.js应用开发的基础。 1、Node.js全局对象 全局,即程序中任何地方都可以使用,Node.js内…...
基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目
演示视频: 基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringM…...
中国吡啶行业市场研究与投资评估报告(2023版)
内容简介: 目前吡啶及其衍生物作为某些化学合成反应的催化剂,需求量在不断增加,因此吡啶在化学品合成领域的市场潜力最大。此外,对高效农药的需求量上升也是促进全球吡啶市场发展的另一关键因素。受人均可支配收入的持续增长和对…...
鼠标点击位置获取几何体对象_vtkAreaPicker_vtkInteractorStyleRubberBandPick
开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题:框选或者点选某一区域,并获取区域prop3D对象(红线内为有效区域,polydata组成的3d几何对象&a…...
【好玩的 Docker 项目】搭建一个简洁的记事本 ——minimalist-web-notepad
前言 搭建一个类似于 notepad 的纯文本笔记本,可以用来做记事本,也可以用来做临时记录的工具。 演示地址:https:/https://chinausdt.com 环境准备 腾讯香港轻量云应用服务器 1 核 1G(24 元 / 月款)域名一枚并做好解析Docker宝塔面板安装 Docker 更新、安装必备软件 BA…...
Linux4.5、进程状态
个人主页:Lei宝啊 愿所有美好如期而遇 目录 进程状态介绍 Linux下具体进程状态 R状态 和 S状态 D状态 T状态 t状态 Z状态 X状态 进程状态介绍 首先,进程状态有运行,阻塞,挂起,这些只是一个大体的概括&am…...
C# Onnx PP-Vehicle 车辆分析(包含:车辆检测,识别车型和车辆颜色)
目录 效果 模型信息 mot_ppyoloe_s_36e_ppvehicle.onnx vehicle_attribute_model.onnx 项目 代码 下载 其他 C# Onnx PP-Vehicle 车辆分析(包含:车辆检测,识别车型和车辆颜色) 效果 模型信息 mot_ppyoloe_s_36e_ppvehi…...
OpenGL之Mesa3D编译for Ubuntu20.04(三十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...
ubuntu22.04 arrch64版操作系统编译zlmediakit
脚本 系统没有cmake,需要通过apt先进行下载,下面的脚本已经包含了 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64 cm…...
Course1-Week1:机器学习简介
Course1-Week1:机器学习简介 文章目录 Course1-Week1:机器学习简介1. 课程简介1.1 课程大纲1.2 Optional Lab的使用 (Jupyter Notebooks)1.3 欢迎参加《机器学习》课程 2. 机器学习简介2.1 机器学习定义2.2 有监督学习2.3 无监督学习 3. 线性回归模型3.1…...
这19个JS代码技巧,后悔没有早点看到
在实际工作中,开发者常面临一些需巧妙编程解决的挑战。有时几行代码就能迎刃而解。本文整理了一系列实用代码片段,助您轻松处理URL、DOM操作、事件处理、日期处理以及用户偏好设置等常见问题。 这些精选代码片段均源自“30 seconds of code”——一个卓…...
Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符
注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 iced的基本逻辑是: UI交互产生消息message,message传递给后台的update,在这个函数中编写逻辑,然后通过…...
ros2文件package.xml与cmakelists.txt比较
每次在ros2里面添加文件以后,都要修改packages.xml,与cmakelists.txt文件。...
vue3使用element plus树形选择器懒加载回显失败问题。
vue3使用element plus树形选择器懒加载回显时树形数据还未加载完成,回显时显示的的绑定值,不是要显示的名称。 解决1:不使用懒加载,一次性将数据返回完成 解决2:编辑回显时,拿到要显示的中文强制修改显示…...
Java基于springoot开发的企业招聘求职网站
演示视频: https://www.bilibili.com/video/BV1xw411n7Tu/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 技术:springootmysqlvuejsbootstrappoi制作word模板 主要功能:求职者可以注册发布简历,选择简…...
数据结构 / 顺序表 / 顺序表概述和结构体定义
1. 顺序表概述 顺序表:线性表的顺序存储称为顺序表逻辑结构:线性结构(一对一)存储结构:顺序存储(使用一段连续的存储空间存储类型相同的数据元素)顺序表:逻辑相邻,物理也相邻顺序表是借助于数组实现,但是不…...
js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数!
js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数! 函数封装和传参 首先我们,要封装这样一个函数,首先要确定,传入哪些参数。…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
