前端播放大视频卡顿的解决(m3u8视频流)

news2024/11/18 11:43:25

前言

最近在一个大屏看板项目中有一个需求是:要求视频和看板要进行来回切换。
最开始的做法是将MP4视频放在项目里,在本地运行时是没什么问题的,但是在往仓库里提交代码时出现了问题。当单个文件超过100MB时会导致代码提交失败;
后来的解决方案是将视频文件放到服务器上,项目里直接加载视频在服务器上的地址。但是这样也存在一个问题,就是视频加载会卡顿。video标签是边加载边播放,这样造成了视频播放几秒后会加载视频导致视频卡住,影响实际效果。

查询到的解决方案是将mp4视频转换成m3u8视频流的格式进行播放,因此打算尝试一下。下面会分别介绍:
1、将mp4视频转换为m3u8视频流
2、前端如何播放m3u8视频

将mp4视频转换为m3u8视频流

m3u8格式

m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8。M3U文件是一个记录索引的纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。

方法/步骤

主流的方式是通过 m3u8格式视频转码工具 FFmpeg 来实现的

下载

从网上找了个百度云下载地址:https://pan.baidu.com/s/1dCK-TrOcUfC6pdKi2Y1e6g
提取码:2pdo

下载完解压后可以在bin文件嘉下看到三个可执行文件,配置好相应的环境变量后即可使用
在这里插入图片描述
环境变量配置

在这里插入图片描述
在cdm终端里输入:ffmpeg -version,如下图表示安装成功。
在这里插入图片描述

常用命令
ffmpeg 常用命令

分割视频
在视频所在的文件夹下打开cmd终端,输入:

 ffmpeg -i video1.mp4 -profile:v  baseline -level 3.0 -start_number 0 -hls_time 1 -hls_list_size 0 -f hls demo.m3u8
  • -i 指定输入的文件名

  • -profile:v baseline 大概意思是档次转成基本画质,有四种画质级别,分别是baseline, extended, main, high,从低到高

  • -level 3.0 大概也是视频画质级别吧,基本上是从1到5,

  • -start_number 0 表示从0开始

  • -hls_time 1 标识每1秒切一个

  • -f hls 将视频转为hls格式

  • -hls_list_size 0 ,设置播放列表保存的最多条目,设置为 0 会保存有所片信息,默认值为5。

其他的命令不清楚,需要什么功能,基本都可以百度到

成功后可以得到下面的文件
在这里插入图片描述
注意:
ts文件的切割还与两个帧之间的时间间隔有关,任何一个ts分片的第一帧必须是1帧,否则无法进行播放。因此有时候并不会按照指定的时间进行分割
解决:
既然知道要1秒产生一个ts分片,那就必须产生切片的过程中,强制一秒中产生一个关键帧。设置关键帧间隔,设置间隔为 2 秒的参数如下:-force_key_frames "expr:gte(t,n_forced*2)“

 ffmpeg -i video1.mp4 -force_key_frames "expr:gte(t,n_forced*2)" -profile:v  baseline -level 3.0 -start_number 0 -hls_time 1 -hls_list_size 0 -f hls demo.m3u8

57秒的视频一共生产了30个片段,有可能我理解的还是有些问题,毕竟从来没用用过
在这里插入图片描述

如果有播放器的话,将m3u8这个文件拖到播放器里就可以进行播放了
在这里插入图片描述

前端播放

前端播放m3u8视频需要借助:video.jsvideojs-contrib-hls.js

安装依赖

npm install --save video.js
npm install --save videojs-contrib-hls

使用

import 'video.js/dist/video-js.css';
import videojs from 'video.js';
import 'videojs-contrib-hls';
<video id="singleVideo" autoplay="autoplay" class="video-js vjs-default-skin"></video>

this.singlePlayer = videojs('singleVideo',{
    autoplay: true,// 自动播放
    controls: true,// 控件显示
    width: '440',// 视频框宽度
    height: '264',// 视频框高度
    preload: 'auto', //定义视频加载模式
    loop:true, //是否循环播放
});
let res = 'http://61.175.121.73:83/pag/10.13.7.2/7302/33052182001320012936/0/MAIN/TCP/live.m3u8';
if (res) {
    this.singlePlayer.src({ src: res, type: 'application/x-mpegURL' });
    this.singlePlayer.play();
}

video标签上添加的类video-js vjs-default-skinvideojs上的样式,如果不添加会有显示问题。
videojs的属性和方法应该大部分都是与video标签对应的

效果图
在这里插入图片描述

问题

服务器上的视频在播放时有可能会报跨域,例如:
在这里插入图片描述
一般是nginx没有配置m3u8的文件格式,可以让运维人员看一下:nginx HLS m3u8播放视频跨域问题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【闲聊杂谈】直击重灾区 - 多线程与高并发

在开始学习多线程与高并发的知识之前&#xff0c;我想先问一个问题&#xff1a;你平时在写代码的时候&#xff0c;有没有刻意的去思考如何压榨CPU性能&#xff1f;其实纵观整个编程的发展历史&#xff0c;其实就是一部对于CPU性能压榨的血泪史。 单进程人工切换 最早的编程…

@Reference、@Autowired、@Resource的区别

目录 1. Autowired 和 Resource 的区别相同点&#xff1a;不同点&#xff1a;Resource 装配顺序2. Reference 和 Autowired 的区别理解1理解2理解31. Autowired 和 Resource 的区别 相同点&#xff1a; Resource 的作用相当于Autowired &#xff0c;均可标注在字段或属性的se…

4、因果法

因果图中的图形符号 恒等。若原因出现&#xff0c;则结果出现&#xff1b;若原因不出现&#xff0c;则结果不出现。非。若原因出现&#xff0c;则结果不出现&#xff1b;若原因不出现&#xff0c;则结果出现。或。若几个原因中有一个出现&#xff0c;则结果出现&#xff1b;若几…

章节8 文本编辑器

8-Linux文本编辑器 文本编辑器 Windows&#xff1a;Notepad&#xff08;记事本&#xff09;、Sublime、UltraEdit等 Linux&#xff1a;VI/VIM &#xff08;最常用&#xff09;、nano、Emacs、Sed、gedit、Kate等 01 VI和VIM的区别 VI和VIM的区别 VI&#xff1a;Visual In…

C 语言零基础入门教程(十六)

C 位域 如果程序的结构中包含多个开关量&#xff0c;只有 TRUE/FALSE 变量&#xff0c;如下&#xff1a; struct {unsigned int widthValidated;unsigned int heightValidated; } status;这种结构需要 8 字节的内存空间&#xff0c;但在实际上&#xff0c;在每个变量中&#…

云计算|OpenStack发展简史

前言&#xff1a; 一般以open开始的软件都非常的牛逼&#xff0c;例如&#xff0c;OpenCV&#xff08;人工智能学习库&#xff09;&#xff0c;OpenStack&#xff08;云计算基础操作系统&#xff09;&#xff0c;openwrt&#xff08;软路由&#xff09;&#xff0c;openEuler&…

表单设计器

表单设计器目录概述需求&#xff1a;设计思路实现思路分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. happy for h…

vue2.x 富文本编辑器Tinymce的使用

VUE项目版本是2.x&#xff0c;切记&#xff1a; vue2中不能使用tinymce/tinymce-vue为4以上版本&#xff1b; 如果有安装高版本&#xff0c;卸载&#xff1a;npm uninstall tinymce/tinymce-vue 第一步&#xff1a;安装 npm install tinymce5.1.0 -S npm install tinymce/tiny…

费曼学习法——孩子弱点方向的提升和沟通技巧

这一篇虽然是兔年第一篇&#xff0c;但是&#xff0c;先不拜年了&#xff0c;主要是成文时间较短&#xff0c;后面会有一个详细的长篇文字&#xff0c;讨论一些观点和看法。每一个孩子都有弱点的方向&#xff0c;我们是否都要给孩子提升&#xff0c;首先表达一个观点&#xff1…

图论算法基础

图论算法基础有向图有向图的实现方式无向图无向图的实现方式连通图连通分量的定义强连通图和强连通分量的定义弱连通图和单向连通图的定义判断图是否是强连通图&#xff0c;弱连通图还是单项连通图一个很典型的错误代码JAVA实现C实现生成树最小生成树拓扑排序邻接表的实现方式数…

【ShaderGraph】道路引导,小溪流水等UV动画效果

目录 一&#xff1a;创建ShaderGraph文件 二&#xff1a;设置UV动画速度变量 ​三&#xff1a;设置UV动画方向和Tiling变量 ​四&#xff1a;设置贴图属性 五&#xff1a;设置主色MainColor属性 六&#xff1a;最终效果 一&#xff1a;创建ShaderGraph文件 1.在assets下…

css之BFC是什么

在讲BFC之前先来了解一下FC FC-Formatting Context FC全称Formatting Context(格式化上下文)&#xff0c;元素在标准流里面都属于一个FC的 官网解释&#xff1a; Boxes in the normal flow belong to a formatting context,which may be block or inline, but not both sim…

指针(基础)

目录 一、内存和地址 二、指针是什么&#xff1f; 三、指针变量的内容 四、指针类型 五、间接访问操作符 &#xff08;一&#xff09;易混淆 六、野指针 &#xff08;一&#xff09;野指针成因 1. 指针未初始化 2. 指针越界访问 3. 指针指向的空间释放 &…

php xss攻击

文章目录一、什么是xss攻击二、攻击类型三、php相关处理函数1、htmlspecialchars 函数2、htmlentities 函数3、strip_tags 函数一、什么是xss攻击 xss攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法注入恶意指令代码到网页&#xff0c;使用户加载并执…

make menuconfig分析

在uboot源码顶层目录下&#xff0c;进入scripts/kconfig目录&#xff0c;打开Makefile文件 mconf作为可执行参数,uboot源码顶层目录下的配置文件传递给conf

39_tp6的rce漏洞

tp6的rce漏洞 一、环境搭建 使用docker本地搭建tp6环境 1. 下载镜像 docker pull vulfocus/thinkphp:6.0.122. 端口映射 启动镜像,并将80端口映射到8081端口,防止80端口冲突,运行容器 docker run -it -d -p 8081:80 1fc5d159922e3. 打开网站 默认的网页目录是在public目…

怎么在线识别图片文字?说一个思路

图片中的文字怎么在线识别&#xff1f;很多小伙伴在接收到图片类型的文件时&#xff0c;不知道怎么处理其中记录的信息。打字整理嫌麻烦怕出错的话&#xff0c;可以借助识别软件来处理&#xff0c;下面给大家介绍三种比较好用的工具&#xff0c;希望能解决你的问题。方法一、在…

SAP ADM100-Unit3 系统配置介绍:如何设置配置文件参数

本节将介绍如何改变配置文件参数的值。 1、管理并维护配置文件 如果想去调整配置文件参数,可以使用操作系统特定的编辑器去调整参数。但是,这个过程是有确定风险的,因此用户必须确保这个调整被正确的执行和记录。设置的参数不正确可能导致实例无法启动。因此,SAP系统提供…

JVM学习疑问之——逃逸分析

前言 根据之前安排的jvm学习计划在进行jvm学习&#xff0c;找到了尚硅谷宋红康老师的jvm视频&#xff0c;跟着视频学习、做笔记&#xff0c;学习到了很多&#xff0c;为尚硅谷及宋红康老师点赞。说到这里&#xff0c;虽然我有一键三连&#xff0c;但这么好的视频&#xff0c;我…

(六)redis持久化操作(RDBAOF)

目录 一、RDB&#xff08;Redis DataBase&#xff09; 1、简介 2、持久化流程 3、dump.rdb文件 4、配置文件 5、rdb的备份 6、rdb的恢复 7、优势 8、劣势 二、AOF&#xff08;Append Only File&#xff09; 1、简介 2、持久化流程 3、AOF和RDB同时开启 4、AOF启动…