帮助中心 帮助中心

M3U8播放列表的常见标签和参数解释

M3U8文件本质上就是个文本文件,里面写满了各种以#开头的标签。想搞懂M3U8是怎么工作的,把这些常见标签的意思搞明白就够了。不需要会写,至少能看懂。

文件头标签

#EXTM3U:这个必须写在第一行,表示这是一个扩展M3U播放列表文件。没有这一行,有些播放器会拒绝识别。

#EXT-X-VERSION:3:表示这个M3U8文件遵循的HLS协议版本。目前常见的是3、4、6。版本号越高支持的功能越多,比如加密方式、多音轨这些。不过大部分播放器对版本3的支持都已经很完善了。

切片信息标签

#EXTINF:10.000,:这是最重要也是最常见的标签,表示下面紧跟的媒体文件(TS切片)的时长,单位是秒。这里的10.000就是说这个切片有10秒。

注意标签后面有个逗号,逗号后面可以写一段描述文字,但大部分情况下是空的。写不写都不影响播放。

m3u8标签

加密相关标签

#EXT-X-KEY:METHOD=AES-128,URI="key.key":表示后续的TS切片是加密的,解密方法是AES-128,密钥在这个URI指向的文件里。播放器必须先下载密钥,才能解密播放。

如果METHOD是NONE,表示取消加密。这在同一个M3U8里部分加密、部分不加密的时候会用上。

多码率相关标签

#EXT-X-STREAM-INF:BANDWIDTH=1280000,RESOLUTION=720x480:这个标签出现在主M3U8文件里(也叫master playlist),表示下面是一个子播放列表,带宽要求是1280kbps,分辨率是720x480。

播放器会根据当前网速自动选择最合适的子播放列表。网速好的时候选带宽高的,网速差的时候自动降级。

其他常用标签

#EXT-X-TARGETDURATION:10:表示这个播放列表里所有切片的理论最大时长。播放器会根据这个值来预估缓冲策略。

#EXT-X-MEDIA-SEQUENCE:0:表示第一个切片的序列号。直播的时候这个值会不断增加,因为旧的切片会被删除,新的加进来。

#EXT-X-ENDLIST:表示这个播放列表结束了,不会再有新的切片。点播视频通常有这个标签,直播一般没有,因为直播是持续更新的。

#EXT-X-DISCONTINUITY:表示前后两个切片的编码参数发生了改变,比如分辨率切换了。播放器收到这个标签需要重新初始化解码器。

举个完整例子

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
segment001.ts
#EXTINF:10.0,
segment002.ts
#EXTINF:8.0,
segment003.ts
#EXT-X-ENDLIST

这个例子表示:版本3,最大切片时长10秒,从序列号0开始,有三个TS切片,分别时长10秒、10秒、8秒,播放列表已结束。看懂了这个,再看任何M3U8文件都不怵了。