首页 > 其他分享 >web端播放m3u8视频流注意事项

web端播放m3u8视频流注意事项

时间:2023-04-20 18:22:06浏览次数:74  
标签:web 文件 HLS 视频流 hls m3u8 video

项目上有一个播放实时视频(直播)的需求,后端童鞋直接传过来一个类似 https://...️️/live.m3u8的视频流地址。让我自行播放,拿到地址的我一脸懵逼,下面开始我的探索(baidu)之路。

 

 

HLS(HTTP Live Streaming)

介绍.m3u8之前得先介绍一下HLS技术,HLS是苹果公司提出的,官方给出的简介如下:

使用Apple的HTTP实时流媒体(HLS)技术,将实时和点播的音频和视频发送到iPhone,iPad,Mac,Apple TV和PC。 使用与Web相同的协议,HLS允许您使用普通Web服务器和内容交付网络部署内容。 HLS旨在提高可靠性,并通过针对可用的有线和无线连接速度优化回放来动态适应网络条件。

HLS将音频和视频作为一系列小文件发送,通常持续时间约为6秒,称为媒体段文件。 索引文件或播放列表提供媒体段文件的URL的有序列表。 HLS的索引文件保存为M3U8播放列表,这是用于MP3播放列表的M3U格式的扩展名。 客户端访问索引文件的URL,然后客户端按顺序请求索引文件。

简而言之,.m3u8格式的文件是HLS技术下的产物,它是HLS的索引文件。如果看到后端童鞋传给我们的视频流链接后缀是.m3u8,基本就可以断定直播流采用的是HLS技术。

m3u8文件

出于好奇,我下载了其中一个.m3u8文件,并用电脑自带的文本编辑器打开,内容如下:

 

 

它实际上就是一个普通的文本文件。

  • #EXT-X-MEDIA-SEQUENCE:每一个媒体文件在 PlayList中的唯一序列号,相邻之间序号加一。上图中是序号 303。
  • #EXT-X-TARGETDURATION:每一份媒体文件的时间, 以秒为单位。 上图中是2s。
  • #EXTINF:格式 #EXTINF <duration>,<title>duration:每一份 媒体文件持续时间;title:每一个媒体文件url地址。上图中seghik303.ts就是后缀为.ts视频切片文件的地址,这里看上去应该是相对路径。

如何在网页上播放?

我项目里是用的hls.js来播放的(以React为例)。

  1. 先安装依赖
npm i hls.js
复制代码
  1. 然后相应的文件头里引入
import Hls from 'hls.js';
复制代码
  1. 页面上放入标签
<video id="hlsVedio"></video>
复制代码
  1. 操作播放
componentDidMount() {
    const video = document.getElementById('hlsVedio');
    if (Hls.isSupported()) {
      const hls = new Hls();
      this.hls = hls;
      hls.loadSource('https://.../live.m3u8');
      hls.attachMedia(video);
      hls.on(Hls.Events.MANIFEST_PARSED, function() {
        video.play();
      });
    } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
      video.src = 'https://.../live.m3u8';
      video.addEventListener('loadedmetadata', function() {
        video.play();
      });
    }
  }
复制代码

完成上面四步,基本上直播视频流可以播放了

 

 

打开浏览器的控制台看一下

 

 

它怎么突然穿了品如的衣服,它怎么一直在发送请求?难道我代码里写死循环了?还是浏览器需要重启一下?

 

 

再回过头看一下HLS,发现这项流媒体技术就是会根据.m3u8的索引文件去不断请求新的.m3u8.ts视频文件。所以浏览器不断发送请求是正常的,不发送才是不正常的。

  1. 销毁视频流

    componentWillUnmount() {
        if (this.hls) {
          this.hls.destroy();
        }
      }
    复制代码

    千万不要忘记在组件销毁的生命周期里销毁创建的hls对象,不然在SPA应用里切换页面或者切换tab的时候,虽然看不到视频组件了,但还会一直在发送请求。


作者:嘴里起了个泡
链接:https://juejin.cn/post/6844903832472780813
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:web,文件,HLS,视频流,hls,m3u8,video
From: https://www.cnblogs.com/wj204/p/17337842.html

相关文章

  • day 04 4.2 web开发核心之【二】
    web开发核心之flask【一】基于flask搭建web网站fromflaskimportFlask,render_templateapp=Flask(__name__,template_folder="templates")@app.get("/index")defindex():returnrender_template("index.html")@app.get("/timer&q......
  • day 04 4.1web开发核心之http协议
    web开发核心之http协议http协议1.什么是请求头请求体,响应头响应体2.URL地址包括什么3.get请求和post请求到底是什么4.Content-Type是什么【一】简介HTTP协议是HyperTextTransferProtocol(超文本传输协议)的缩写,是用于万维网(WWW:WorldWideWeb)服务器与本地浏览......
  • Web应用程序简介
    Web应用程序是一种特殊类型的软件程序,运行在Web浏览器上。它们通常用于处理各种任务,例如在线购物、社交媒体、在线支付、博客、邮件、在线搜索、即时通讯等等。Web应用程序主要由两部分组成:前端和后端。前端通常是指用户直接与之交互的部分,它由HTML、CSS和JavaScript等技术构成,可......
  • 14-CSS3属性详解:Web字体
    title:14-CSS3属性详解:Web字体publish:true前言开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体。从此,把特殊字体处理成图片的方式便成为了过去。支持程度比较好,甚至IE低版本的浏览器也能支持。字体的常见格......
  • WebStorm的使用
    WebStorm的简单设置1、主题修改:可能大家会觉得软件的界面不太好看,我们可以换一下主题。选择菜单栏“File--settings--appearance--theme”,主题选择Dracula:2、导入第三方主题:系统提供的两种主题可能都不太好看,我们可以进入网站http://color-themes.com/来获取第三方主题,这里......
  • 01-认识Web和Web标准
    title:01-认识Web和Web标准publish:trueWeb、网页、浏览器WebWeb(WorldWideWeb)即全球广域网,也称为万维网。我们常说的Web端就是网页端。网页网页是构成网站的基本元素。网页主要由文字、图像和超链接等元素构成。当然,除了这些元素,网页中还可以包含音频、视频以及Flash......
  • C# Web实现文件上传下载功能实例解析
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • webservice 客户端生成命令
    wsdl2java-frontendjaxws21-client-pcom.creditease.webapp.webservice.voices-dd:/http://10.105.48.14:8893/Service.svc?wsdlwsdl2java-frontendjaxws21-client-pcom.creditease.webapp.webservice.voices-dd:/http://10.105.48.14:......
  • 在web.xml下配置error-page
    评:解决问题:捕获页面错误并反到指定页面处理。在web.xml中加入如下配置:<!--404页面不存在错误--><error-page><error-code>404</error-code><location>/error.jsp</location></error-page><!--500服务器内部错误--><error-page><er......
  • python+playwright 学习-54 结合 gremlins.js 实现web 网页的mokey测试
    前言在Android应用测试里面有个mokey测试可以对app做稳定性的测试,在app里面随机乱点发送一些事件,看app会不会异常。这种做法,也称为Monkey测试或Fuzz测试,在移动应用程序开发中非常常见。Gremlins.js模拟随机用户操作:gremlins单击窗口中的任意位置,在表格中输入随机数......