videojs宫格视频选择播放

2024-08-30 05:36

本文主要是介绍videojs宫格视频选择播放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目需要四宫格播放视频,而且还要实现点击视频加入播放。

首先,肯定要实现再一个页面上显示多个视频源并播放视频:

<template><div><div v-for="(item,index) in videoList" :key="index"  class="test_two_box"><video :id="'myVideo' + item.id" class="video-js"><source :src="item.src" type="video/mp4" /></video></div></div>
</template><script>
export default {data() {return {videoList: [{id: 0,type: 'video/mp4',src: '/mp4/1.mp4',name:'视频1'},{id: 1,type: 'video/mp4',src: '/mp4/2.mp4',name:'视频2'},{id: 2,type: 'video/mp4',src: '/mp4/3.mp4',name:'视频3'},{id: 4,type: 'video/mp4',src: '/mp4/4.mp4',name:'视频5'}]}},mounted() {this.videoList.map((item, index) => {let myPlayer = this.$video('myVideo' + item.id, {//确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用autoplay属性或通过Player API。controls: true,poster: item.cover,//自动播放属性,muted:静音播放// autoplay: "muted",//建议浏览器是否应在<video>加载元素后立即开始下载视频数据。preload: "auto",//设置视频播放器的显示宽度(以像素为单位)width: "300px",//设置视频播放器的显示高度(以像素为单位)height: "150px"});})}
}
</script>

这样就能显示四个视频,但是四个视频的格式是一列的格式,与我们的目标四宫格不符。

可以在前端展示部分做一个步长2的循环,让每一行都有两个视频:

<template><div><div v-for="(item,index) in videoList" :key="index"><ul v-if="index % 2 == 0"><video :id="'myVideo' + videoList[index].id" class="video-js"><source :src="videoList[index].src" type="video/mp4" /></video><video :id="'myVideo' + videoList[index + 1].id" class="video-js"><source :src="videoList[index + 1].src" type="video/mp4" /></video></ul></div></div>
</template><script>......
</script>

这样就能实现一个页面四宫格播放四个视频。但是这样只能播放固定的写死的四个视频,怎么实现选择播放哪个呢?

首先,一定获取待播放的全部视频列表showallvideoList。之后可以按钮的方式,选择全部视频列表的某个视频,将其替换正在播放视频列表showvideoList中的某一个视频。至于替换哪一个,可以通过flag的形式标记最早播放的视频,替换后更新flag即可。

但是代码里,播放视频是通过循环建立myPlayer实现的,这种实现方法,只能修改最后一个建立的myPlayer。所以为此要建立四个不同的myPlayer

<template>......
</template>
<script>
export default {data() {return {oddflag:true,showvideoList: [{id: 0,type: 'video/mp4',src: '/mp4/1.mp4',name:'视频1'},{id: 1,type: 'video/mp4',src: '/mp4/2.mp4',name:'视频2'},{id: 2,type: 'video/mp4',src: '/mp4/3.mp4',name:'视频3'},{id: 4,type: 'video/mp4',src: '/mp4/4.mp4',name:'视频4'}],showallvideoList: [{id: 0,type: 'video/mp4',src: '/mp4/1.mp4',name:'视频1'},{id: 1,type: 'video/mp4',src: '/mp4/2.mp4',name:'视频2'},{id: 2,type: 'video/mp4',src: '/mp4/3.mp4',name:'视频3'},{id: 3,type: 'video/mp4',src: '/mp4/4.mp4',name:'视频4'},{id: 4,type: 'video/mp4',src: '/mp4/5.mp4',name:'视频5'},{id: 5,type: 'video/mp4',src: '/mp4/6.mp4',name:'视频6'}]}},mounted() {this.showvideoList.map((item, index) => {if(index == 0){this.myPlayer0 = this.$video('myVideo' + item.id, {//确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用autoplay属性或通过Player API。controls: true,// poster: item.cover,//自动播放属性,muted:静音播放// autoplay: "muted",//建议浏览器是否应在<video>加载元素后立即开始下载视频数据。preload: "auto",//设置视频播放器的显示宽度(以像素为单位)width: "600px",//设置视频播放器的显示高度(以像素为单位)height: "300px",})}if(index == 1){this.myPlayer1 = this.$video('myVideo' + item.id, {//确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用autoplay属性或通过Player API。controls: true,// poster: item.cover,//自动播放属性,muted:静音播放// autoplay: "muted",//建议浏览器是否应在<video>加载元素后立即开始下载视频数据。preload: "auto",//设置视频播放器的显示宽度(以像素为单位)width: "600px",//设置视频播放器的显示高度(以像素为单位)height: "300px",})}if(index == 2){this.myPlayer2 = this.$video('myVideo' + item.id, {//确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用autoplay属性或通过Player API。controls: true,// poster: item.cover,//自动播放属性,muted:静音播放// autoplay: "muted",//建议浏览器是否应在<video>加载元素后立即开始下载视频数据。preload: "auto",//设置视频播放器的显示宽度(以像素为单位)width: "600px",//设置视频播放器的显示高度(以像素为单位)height: "300px",})}if(index == 3){this.myPlayer3 = this.$video('myVideo' + item.id, {//确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用autoplay属性或通过Player API。controls: true,// poster: item.cover,//自动播放属性,muted:静音播放// autoplay: "muted",//建议浏览器是否应在<video>加载元素后立即开始下载视频数据。preload: "auto",//设置视频播放器的显示宽度(以像素为单位)width: "600px",//设置视频播放器的显示高度(以像素为单位)height: "300px",})}})},methods:{show(item){console.log(item)if(this.oddflag){console.log(this.showvideoList[2])this.showvideoList[2] = item}else{console.log(this.showvideoList[3])this.showvideoList[3] = item}this.reshow(this.oddflag)this.oddflag = !this.oddflag},reshow(oddflag){console.log(this.showvideoList)if(oddflag){this.myPlayer2.src({src:this.showvideoList[2].src,type:this.showvideoList[2].type})}else{this.myPlayer3.src({src:this.showvideoList[3].src,type:this.showvideoList[3].type})}// console.log(this.showvideoList)// this.myPlayer.src({src:this.showvideoList[3].src,type:this.showvideoList[3].type})}}
}
</script>

(本示例实现最后两个视频的选择播放)
这样就可以实现宫格视频选择播放了

这篇关于videojs宫格视频选择播放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119934

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试