M3U8 视频列表格式

本文最后更新于:5 年前

Reference

  • 《FFmpeg 从入门到精通》

常用标签

标签|必要性|说明
–|–
EXTM3U|是|必须在文件的第一行,所有的 M3U8 文件中必须包含这个标签
EXT-X-VERSION||M3U8 版本
EXT-X-TARGETDURATION||每一个分片都会有一个分片自己的 duration,这个标签是最大的那个分片的浮点数四舍五入后的整数值
EXT-X-MEDIA-SEQUENCE||1、直播时的直播切片序列,当播放打开 M3U8 时,以这个标签的值为参考,播放对应的序列号的切片;
2、分片必须是动态改变的,序列不能相同,并且序列必须是增序的;
3、当M3U8列表中没有出现 EXT-X-ENDLIST 标签时,无论这个 M3U8 列表中有多少片分片,播放分片都是从倒数第三片开始播放,如果不满三片则不应该播放。当然,如果有些播放器特别定制了的话,则可以不遵照这个原则;
4、如果播放列表在刷新之后与之前的列表相同,那么在播放当前分片 duration 一半的时间内会再刷新一次
EXT-X-DISCONTINUITY||解决因播放的前一片分片与后一片分片不连续而导致的报错
EXTINF||1、包含每一个分片的 duration 和可选的描述信息,主要为标注切片信息,使用逗号分隔开;
2、EXTINF 下面的信息为具体的分片信息,分片存储路径可以为相对路径,也可以为绝对路径,也可以为互联网的 URL 链接地址
EXT-X-ENDLIST||表明该 M3U8 文件不会再产生更多的切片,可以理解为该 M3U8 已停止更新,并且播放分片到这个标签后结束
EXT-X-STREAM-INF||主要是出现在多级 M3U8 文件中,例如 M3U8 中包含子 M3U8 列表,或者主 M3U8 中包含多码率 M3U8 时;该标签后需要跟一些属性

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3.760000,
out0.ts
#EXTINF:1.880000,
out1.ts
#EXTINF:1.760000,
out2.ts
#EXTINF:1.040000,
out3.ts
#EXTINF:1.560000,
out4

EXT-X-STREAM-INF

属性名|必要性|说明
–|–
BANDWIDTH|是|播放时占用的最大码率
AVERAGE-BANDWIDTH|否|播放时占用的平均码率
CODECS|应该|声明音频编码、视频编码的信息
RESOLUTION|否|视频的宽高信息
FRAME-RATE|否|视频帧率

示例:使用4个 EXT-X-STREAM-INF 标签来标注子 M3U8 的属性——最高码率为 1.28M、平均码率为 1M 的 M3U8;最高码率为 2.56M、平均码率为 2M 的 M3U8;最高码率为 7.68M、平均码率为 6M 的 M3U8;以及只有 65K 的音频编码的 M3U8。

1
2
3
4
5
6
7
8
9
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000
http://example.com/hi.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
http://example.com/audio-only.m3u8

各版本区别

版本号|增加|删除
–|–
2|EXT-X-KEY|
3|浮点 EXTINF 的 duration|
4|EXT-X-BYTERAGE
EXT-X-I-FRAMES-ONLY|
5|EXT-X-KEY 的格式说明 KEYFORMAT
KEYFORMATVE-RSION
EXT-X-MAP|
6|EXT-X-MAP 里面不包含 EXT-X-I-FRAMES-ONLY|EXT-X-STREAM-INF
EXT-X-I-FRAME-STREAM-INF
7||EXT-X-ALLOW-CACHE



M3U8 视频列表格式
https://weichao.io/130731b48fd1/
作者
魏超
发布于
2018年5月16日
更新于
2018年5月16日
许可协议