当前位置: 首页 > news >正文

m3u8是什么?

引入

最近在视频网站中下载视频发现下载下来不是传统的mp4格式,而是m3u8格式,而且这个格式在播放器中还识别不了,我还以为是什么最新的加密格式,查阅资料才找到它是最近流行的流媒体传输格式。

m3u8文件是用来干啥的?

现在的视频网站采用的是流媒体传输协议,就是将一段视频切成无数个小段,这几个小段就是ts格式的视频文件,一段一段的网站上播放。

这样做的好处是观看更加流畅,因为他会根据网络状况自动切换视频的清晰度,在网络状况不稳定的情况下,对保障流畅播放非常有帮助。

我们可以了解下,一个视频播放的全过程。

1.服务器采集编码传输视频到切片器
2.切片器对视频创建索引文件,并且切割成n个ts文件
3.这2个文件传输到http服务器上
4.网站/客户端根据索引文件查找http服务器上的ts文件,连续播放这n个ts文件,就可以了。

所以我们可以知道,索引文件非常重要,索引文件里面存储着ts文件的网络url链接,网站需要拿到索引文件,去按照url链接下载在http服务器中的ts文件,类似于爬虫。
拿到了ts文件之后,本身这些ts文件就是原视频中的一小段视频,所有ts文件下载顺序播放,就完成了整个视频的播放。

而索引文件就是m3u8文件。

m3u8文件会过期吗?

这个文件是ts文件的索引,所以当视频网站更换了ts视频文件的存放位置或者删除了视频文件,这个m3u8文件就会报废。
当我们下载的视频是m3u8格式就需要使用一些工具将视频的原始数据下载下来。

一些注意事项

  • 有两种请求 m3u8 播放列表的方法:一是通过 m3u8 的 URI 进行请求,则该文件必须以 .m3u8 或 .m3u 结尾;
    二是通过 HTTP 进行请求,则请求头Content-Type必须设置为 application/vnd.apple.mpegurl或者audio/mpegurl。
  • 空行和注释行在解析时都忽略。
  • 媒体播放列表(Media Playlist)的流资源总时长就是各切片资源的时长之和。
  • 每个切片的码率(bit rate)就是切片的大小除以它对应的时长(EXTINF 指定的时长)。
  • 一个标签的属性列表的同一个属性AttributeName只能出现一次。
  • EXT-X-TARGETDURATION 指定的时长绝对不能进行更改。通常该值指定的时长为 10 秒。
  • 对于指定了 EXT-X-I-FRAMES-ONLY 且 第一个媒体片段(或者第一个尾随 EXT-X-DISCONTINUITY 的片段)其资源没有立即携带媒体初始化块的切片,应当增加使用标签 EXT-X-MAP 指定媒体初始化块获取途径。
  • 使用 EXT-X-MAP 标签内含标签 EXT-X-I-FRAMES-ONLY 要求的兼容版本号 EXT-X-VERSION 要大于等于 5;只使用 EXT-X-MAP 要求的兼容版本号要大于等于 6。
  • 由标签 EXT-X-MAP 声明的媒体初始化块可使用 AES-128 方法进行加密,此时,作用于 EXT-X-MAP 标签的 EXT-X-KEY 标签必须设置 IV 属性。
  • 带有属性 END-ON-NEXT=YES 的标签 EXT-X-DATERANGE 必须携带 CLASS 属性,但不能携带 DURATION 和 END-DATE 属性。其余带有相同 CLASS 的标签 EXT-X-DATERANGE 不能指定重叠的日期范围。
  • 日期范围如果未指明 DURATION,END_DATE,END-ON-NEXT=YES 属性时,则其时长(duration)未知,即使其设置了 PLANNED-DURATION 属性。
  • 如果播放列表设置了 EXT-X-DATERANGE 标签,则必须同时设置 EXT-X-PROGRAM-DATE-TIME 标签。
  • 如果播放列表设置了拥有相同 ID 属性值的两个 EXT-X-DATERANGE 标签,则对于相同的属性名,在这两个 EXT-X-DATERANGE 中对应的值必须一致。
  • 如果 EXT-X-DATERANGE 同时设置了 DURATION 和 END-DATE 属性,则 END-DATE 属性值必须等于 START-DATE 属性值加上 DURATION 属性值。
  • EXT-X-MEDIA-SEQUENCE 标签必须出现在播放列表第一个切片之前。
  • EXT-X-DISCONTINUITY-DEQUENCE 标签必须出现在播放列表第一个切片之前。
  • EXT-X-DISCONTINUITY-DEQUENCE 标签必须出现在任意 EXT-X-DISCONTINUITY 标签之前。
  • m3u8 文件如果没有设置 EXT-X-PLAYLIST-TYPE 标签,那么播放列表可以随时进行更改。比如,可以更新或删除播放列表中的媒体片段。
  • 每个 EXT-X-I-FRAME-STREAM-INF 标签必须包含一个 BANDWIDTH 和 URI 属性。
  • 每个 EXT-X-SESSION-DATA 标签都必须包含一个 VALUE 或 URI 属性,但不能同时包含两者。
  • 一个播放列表可以包含多个携带相同 DATA-ID 属性的 EXT-X-SESSION-DATA 标签。但是不能包含多个携带相同 DATA-ID 和相同 LANGUAGE 属性的 EXT-X-SESSION-DATA 标签。
  • 如果设置了 EXT-X-SESSION-KEY,那么其 METHOD,KEYFORMAT 和 KEYFORMATVERSIONS 属性值必须与任意相同 URI 的 EXT-X-KEY 标签值相同。
  • 如果多份备用流或者多语言流使用相同的加密密钥和格式,则应当设置 EXT-X-SESSION-KEY 标签。
  • 主播放列表必须不能设置多个具有相同 METHOD,URI,IV,KEYFORMAT 和 KEYFORMATVERSIONS 属性值得 EXT-X-SESSION-KEY 标签。

相关文章:

  • 第十九章 维护本地数据库(四)
  • 如何提高安全关键领域的软件开发质量
  • Learning Transferable Features with Deep Adaptation Networks
  • zabbix监控脑裂
  • 网页js实现的各种3D树形结构模型
  • 软考高项——各输入输出文件的含义
  • 让你快速理解工厂模式
  • 牛客网零碎小东西
  • Java面试(五)设计模式
  • docker的简单操作
  • 工业互联网标识解析的数据安全风险有哪些?
  • 2022年外资EDI证办理流程及要求
  • 内网渗透-【横向移动】PsExec工具远程命令执行横向移动
  • 菜谱查询易语言代码
  • springboot+旅游管理系统 毕业设计-附源码261117
  • ES6--对象的扩展
  • Median of Two Sorted Arrays
  • October CMS - 快速入门 9 Images And Galleries
  • Spring声明式事务管理之一:五大属性分析
  • 从零开始的无人驾驶 1
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 高程读书笔记 第六章 面向对象程序设计
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 判断客户端类型,Android,iOS,PC
  • 前端存储 - localStorage
  • 删除表内多余的重复数据
  • 新手搭建网站的主要流程
  • #define 用法
  • #pragma multi_compile #pragma shader_feature
  • #Spring-boot高级
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ***检测工具之RKHunter AIDE
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET Core Web APi类库如何内嵌运行?
  • .net Signalr 使用笔记
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net6Api后台+uniapp导出Excel
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • @font-face 用字体画图标
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [BJDCTF2020]The mystery of ip