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

本文介绍了一种解决大文件提交问题的方法,即将MP4视频转换为M3U8视频流,并详细说明了使用FFmpeg工具进行转换的过程。此外,还介绍了如何在前端利用video.js和videojs-contrib-hls.js播放M3U8视频。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在一个大屏看板项目中有一个需求是:要求视频和看板要进行来回切换。
最开始的做法是将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这个文件拖到播放器里就可以进行播放了
在这里插入图片描述
视频合并
如果需要将视频合并成一个完整的mp4可以执行以下命令

ffmpeg -i demo.m3u8 -c copy abc.mp4

注意:demo.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播放视频跨域问题

### 回答1: 要制作一个视频播放网页,需要以下步骤: 1. 选择合适的 Web 开发技术,例如 HTML、CSS、JavaScript 和某种服务器端语言(如 PHP)。 2. 创建一个 HTML 页面,在其中添加一个 `<video>` 标签,以播放视频。 3. 使用 CSS 来样式化页面,以让它看起来更好看。 4. 使用 JavaScript 来实现页面的交互功能,例如控制视频播放、暂停和进度。 5. 将视频文件存储在某个服务器上,以便在网页中播放。 6. 发布页面到 Web 服务器,使其对公众可访问。 7. 测试网页,确保视频能够正常播放并且页面看起来良好。 这是一个致的流程,具体的实现方法可能会因技术选择、需求不同而有所不同。 ### 回答2: 制作一个视频播放网页可以按以下步骤进行。 第一步,确定网页的基本结构。可以使用HTML和CSS来创建网页的框架和布局。在HTML中,可以使用<div>标签来创建不同区域的容器,例如头部、导航栏、主内容区和底部等。然后,使用CSS来为这些区域设置样式和布局,包括小、颜色和位置等。 第二步,选择一个合适的视频播放器。可以使用HTML5的<video>标签来嵌入视频,并设置相关属性,如视频文件的URL、标题、小和自动播放等。此外,还可以选择使用流行的视频播放器库,如Video.js或Plyr,以便更好地控制视频播放和外观。 第三步,设计用户界面和交互。在播放网页上,通常需要包括播放/暂停按钮、音量控制、全屏切换和进度条等功能。可以使用HTML和CSS来创建这些按钮和控件的样式和布局,并利用JavaScript来实现相应的交互和功能。例如,可以使用JavaScript来控制视频播放和暂停,调整音量和监控视频的进度。 第四步,优化视频加载播放性能。为了提高用户体验,可以优化视频加载播放性能。可以将视频文件进行压缩和编码,以减小文件小并提高加载速度。此外,可以设置视频的预加载和缓冲机制,以确保视频播放时没有中断和卡顿。还可以针对不同的设备和网络条件进行适配和优化,以提供更好的播放体验。 第五步,测试和部署。制作完成后,可以进行测试,确保视频播放网页在不同的浏览器和设备上正常运行。可以使用调试工具进行调试,并修复可能出现的错误和问题。最后,将网页的文件和资源上传到服务器,并进行部署,使其能够在互联网上访问和使用。 制作一个视频播放网页需要熟悉HTML、CSS和JavaScript等前端开发技术,同时也需要对视频格式、编码和性能优化有一定的了解。 ### 回答3: 制作一个视频播放网页需要以下几个步骤: 1. 设计网页布局:首先,确定网页的整体设计风格和布局。可以选择一个现成的网页模板或自己设计一个。确保布局简洁清晰,并考虑到不同设备和屏幕尺寸的适配问题。 2. 编写HTML代码:使用HTML语言编写网页的结构。包括创建视频播放器的容器元素,并设置合适的尺寸和位置。 3. 插入视频播放器:通过使用HTML或者JavaScript来插入视频播放器。可以选择使用HTML5的标准视频标签`<video>`,也可以使用外部插件(如jPlayer、Video.js等)来实现视频播放功能。将视频文件的URL链接或路径指定到视频播放器的相应属性中。 4. 设置视频播放器的控制功能:根据需求,可以自定义视频播放器的控制功能,如播放、暂停、快进、音量控制等。这可以通过JavaScript代码来实现,或者使用外部的媒体播放器插件。 5. 添加视频信息和封面图:为视频播放器添加标题、描述等相关信息,并选择一个合适的封面图展示在视频播放器上,增加视觉吸引力。 6. 优化视频播放网页:为了提供更好的用户体验,可以对视频播放网页进行优化。例如,优化网页加载速度、响应式设计、兼容性适配、网页SEO等。 7. 测试和发布:在制作完成后,进行测试以确保视频播放网页在不同浏览器和设备上正常运行。最后,将网页部署到服务器上,使其可以通过网络进行访问。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值