前端videojs实现m3u8格式的直播

一、安装

 npm install --save-dev video.js
二、引入

import videojs from "video.js";
import "video.js/dist/video-js.css";

三、template

由于此处客户需要全屏至指定框大小,而不是全屏整个屏幕所以没用插件自带的全屏控件

隐藏自带全屏控件

:deep(.vjs-fullscreen-control.vjs-control.vjs-button){display: none!important;}
<div class="page-item-right margin-l20"><div class="video-box" v-if="!control.isScreen"><div :id="'videos'+index" class="item-box" v-for="(item,index) in control.videoList" :key="item" :class="{'selected-video-box':control.selectedVideoBox===index,'aaa':index===0}" @click="control.playerItemSelect('video'+index,item,index)"><span  class="video-fullScreen" @click="control.fullScreenClick(item,index,true)">全屏</span><el-icon class="video-close" @click.stop="control.playerItemClose('video'+index,item,index)"><CloseBold/></el-icon><video :id="'video'+index" muted=“muted” autoplay class="video-js vjs-default-skin vjs-big-play-centered"></video></div></div><div class="video-box1" v-if="control.isScreen"><div :id="'videos1'+index" class="item-box" v-for="(item,index) in control.videoList1" :key="item" :class="{'selected-video-box':control.selectedVideoBox===index}" @click="control.playerItemSelect('video'+index,item,index)"><video :id="'video'+index" muted=“muted” autoplay class="video-js vjs-default-skin vjs-big-play-centered"></video><span  class="video-fullScreen video-fullScreen1" @click="control.fullScreenClick(item,index,false)">退出全屏</span></div></div></div>

四、js代码

在onMounted里获取到数据列表后,就调用一次getVideoList(arguments),此处默认是有数据列表数据的,且arguments对象中即是包含.m3u8地址的,

 if(state.tableData.length===0)returncontrol.getVideoList(state.tableData[0].channels[0])
videoList:[],videoList1:[],//全屏状态的videoList,只能存放一个player:null,player1:null,playerList:[],playerList1:[],playerOptions:[],getVideoList(val){control.playerDispose()let exist=control.videoList.find(item=>{return item.msg===val.liveAddress})let maxViews=9if(!exist&&control.videoList.length<maxViews){control.videoList.push({msg: val.liveAddress, devID: val.id,data:val,time:Date.now()})}else if(!exist&&control.videoList.length>=maxViews){let minTime =(Math.min.apply(Math,control.videoList.map(item=>{return item.time})))let minTimeIndex= control.videoList.findIndex((item,index)=>{ return item.time===minTime})control.videoList.splice(minTimeIndex,1,{msg: val.liveAddress, devID: val.id,time:Date.now()})}control.playerList=[]control.videoList.forEach((item, i) => {control.player=null$(`#videos${i}`).append(` <video autoplay id='video${i}' style='width: 100%;height: 100%' class='video-js vjs-default-skin vjs-big-play-centered  ${item.devID}'></video>`);setTimeout(() => {control.player = videojs(`video${i}`, {controls:true,controlBar:['PlayToggle'],autoplay: true,width: "100%",height: "100%",preload: true,sources: [{src: item.msg,type: "application/x-mpegURL"}]})control.playerList.push(control.player)}, 100);});},getVideoList1(val){control.playerDispose()control.videoList1=[]control.videoList1.push({msg: val.liveAddress, devID: val.id,data:val,time:Date.now()})control.playerList1=[]control.videoList1.forEach((item, i) => {control.player1=nullif ($(`#videos1${i}`).children().length > 1) {$(`#videos1${i}`).children().not(":first").remove();}$(`#videos1${i}`).append(` <video autoplay id='video${i}' style='width: 100%;height: 100%' class='video-js vjs-default-skin vjs-big-play-centered  ${item.devID}'></video>`);setTimeout(() => {control.player1 = videojs(`video${i}`, {controls:true,controlBar:['PlayToggle'],autoplay: true,width: "100%",height: "100%",preload: true,sources: [{src: item.msg,type: "application/x-mpegURL"}]})control.playerList1.push(control.player1)}, 100);});},

五、效果展示

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 Elasticsearch、ESRE、LLM 和 LangChain 加速制药行业的研发 — 第 1 部分

作者&#xff1a;Valerio Arvizzigno, Dimitri Marx, Francesco Di Stefano 这是一篇通过生成式 AI/LLM、自定义模型和 Elasticsearch 相关性引擎 (ESRE​​) 支持制药行业更快的药物创新和发现的综合指南。更快的药物发现带来有前途的候选药物是制药行业的主要目标。 为了支持…

三、学习分类 - 基于图像大小进行分类

天下一半剑仙是我友 谁家娘子不娇羞 我以醇酒洗我剑 谁人说我不风流 1 设置问题 根据图片的尺寸&#xff0c;把图片分为纵向图像和横向图像。这种把图像分成两种类别的问题&#xff0c;就是二分类问题。 纵向图片示例&#xff1a; 横向图片示例&#xff1a; 这样就有了两个…

jmeter列表数据断言

在jmeter接口请求中&#xff0c;通常需要根据接口data列表有无返回的数据断言是接口请求成功&#xff0c;如图1&#xff0c; 通常有这么几种方法&#xff1a; beanshell断言 json断言 响应断言 图1&#xff1a; 失败请求&#xff1a;{"code":0,"msg"…

Android自动化测试之Monkey

目录 一、Monkey与Android SDK之间的关系 二、环境配置 三、正式测试 四、报错分析 五、总结 本来是做Web后端的&#xff0c;来公司实习变成微信小程序前端了&#xff0c;到这周变成Android APP测试人员了&#xff0c;也是微醺啊。 由于对手工测试终究是有些抵触&#xff…

OpenCV 入门教程: Sobel算子和Scharr算子

OpenCV 入门教程&#xff1a; Sobel 算子和 Scharr 算子 导语一、Sobel 算子二、Scharr 算子三、示例应用3.1 图像边缘检测3.2 边缘增强 总结 导语 在图像处理和计算机视觉领域&#xff0c;边缘检测是一项重要的任务。 Sobel 算子和 Scharr 算子是两种常用的边缘检测算子&…

Pinia学习笔记 | 入门 - 映射辅助函数

文章目录 Pinia学习笔记简介Pinia是什么 代码分割机制案例1.挂载PiniaVue3Vue2&#xff1a;安装PiniaVuePlugin插件 2.定义store的两种方式options API 和 composition API使用options API模式定义使用composition API模式 2.业务组件对store的使用创建store实例解构访问Pinia容…

【Docker】快速入门,带你快速了解 Docker

文章底部有投票活动&#xff0c;赶快参与进来吧&#x1f603; 相信大家在开发过程中都听说过 Docker 一词&#xff0c;至于 Docker 在开发中扮演的角色&#xff0c;估计好多人都说不上来&#xff0c;今天就让阿Q带大家一起揭开它神秘的面纱&#xff01; 文章目录 什么是容器&a…

Ubuntu 的安装及其设置

文章目录 安装 Ubuntu屏幕分辨率设置修改软件源服务器锁屏时间设置设置 dash跨系统拖拽复制文件的设置 安装 Ubuntu 首先安装 VMware 虚拟机&#xff0c;虚拟机的安装比较简单&#xff0c;一步步点击Next即可完成安装。 安装完成后启动虚拟机&#xff0c;点击创建新的虚拟机。…

Spring @RequestMapping 工作原理

Spring RequestMapping 工作原理 配置基础启动类及Controller类 SpringBootApplication public class DemoServiceApplication {public static void main(String[] args) {SpringApplication.run(DemoServiceApplication.class, args);} }RestController public class HelloC…

yapi的部署和安装

安装Node.js环境 wget https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz 或者直接浏览器下载传输到服务器上。 https://nodejs.org/zh-cn/download/tar -xvf node-v14.15.4-linux-x64.tar.xz 太高版本不行&#xff0c;install会报错。16开头的。 配置环境…

FastAPI 初体验,效率杠杠滴

目录 前言&#xff1a; 1、官网信息 2、环境安装 3、写个demo 4、关注的几个技术点 4.1 路径参数数据接收 4.2 查询参数数据接收 4.3 post 数据接收 4.4 header数据接收 4.5 cookie数据接收 5、总结 5.1 没有使用门槛 5.2 开发效率 5.3 劣势 前言&#xff1a; 写…

Vue简单使用及整合elementui

创建vue工程 在vue工程目录下npm install vue 下载离线vue https://v2.vuejs.org/v2/guide/installation.html 引入工程中 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" c…