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最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数! 函数封装和传参 首先我们,要封装这样一个函数,首先要确定,传入哪些参数。…...
WinCDEmu:开源虚拟光驱工具的技术架构与实践指南
WinCDEmu:开源虚拟光驱工具的技术架构与实践指南 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu 副标题:5个核心优势让你高效管理光盘映像文件 一、核心价值解析 WinCDEmu作为一款开源虚拟光驱解决方案&…...
轻量级跨平台C++ GUI框架EUI在Ubuntu24上初试
EUI详见以下页面: https://github.com/sudoevolve/EUI 1 在Ubuntu24.04上部署需要做的准备工作 1.1 从Github拉源码 git clone https://github.com/sudoevolve/EUI.git1.2 为EUI准备所需的库 以为我的Ubuntu24.04装的是毛坯系统,一开始用cmake构建的…...
解决学术文献格式兼容难题:本地CAJ转PDF工具提升研究效率
解决学术文献格式兼容难题:本地CAJ转PDF工具提升研究效率 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https://gitcode.com…...
AI语音转换个性化模型实战指南:从认知到实践的全面探索
AI语音转换个性化模型实战指南:从认知到实践的全面探索 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conver…...
5个维度解析Bebas Neue:设计师与开发者的开源字体解决方案
5个维度解析Bebas Neue:设计师与开发者的开源字体解决方案 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 副标题:破解标题设计痛点——从视觉疲劳到品牌识别的全链路优化 在数字设计领域…...
技术判断力之AI三问映
认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...
5大场景彻底解决电脑休眠难题:Move Mouse开源防休眠工具全攻略
5大场景彻底解决电脑休眠难题:Move Mouse开源防休眠工具全攻略 【免费下载链接】movemouse Move Mouse is a simple piece of software that is designed to simulate user activity. 项目地址: https://gitcode.com/gh_mirrors/mo/movemouse 你是否也曾经历…...
GetQzonehistory终极指南:如何一键备份QQ空间历史说说
GetQzonehistory终极指南:如何一键备份QQ空间历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间里的珍贵回忆会随着时间流逝而消失?GetQz…...
工程师必读:Datasheet高效阅读与实战技巧
1. 为什么Datasheet是工程师的必修课第一次拿到TI的TPS5430电源芯片datasheet时,我盯着那58页的英文文档发呆了半小时。当时刚入行的我完全不明白,为什么一个简单的DC-DC转换器需要如此复杂的技术文档。直到项目deadline前三天,电路板上的电源…...
浏览器中的开发革命:Core72在线IDE版本控制实战指南
浏览器中的开发革命:Core72在线IDE版本控制实战指南 【免费下载链接】core Online IDE powered by Visual Studio Code ⚡️ 项目地址: https://gitcode.com/gh_mirrors/core72/core 当你在咖啡馆突然收到紧急修复需求,却发现没带开发笔记本时&am…...
