M3U8 本质上是一个文本清单
M3U8 不是视频文件本身,而是一个 UTF-8 编码的文本文件。它的作用更像“播放说明书”:告诉播放器去哪里拿视频分片、音频流、字幕流,以及每段内容持续多久。
也正因为如此,双击打开 m3u8 文件时你看到的通常是一堆文本标签和地址,而不是直接出现画面。真正的视频数据往往在 ts、fmp4 或其他媒体分片文件里。
主清单和媒体清单的区别
在 HLS 体系里,M3U8 常见为两种角色。第一种是主清单,它列出不同码率、分辨率或音轨的子清单;第二种是媒体清单,它继续列出实际媒体分片地址。
如果你看到文件里主要是多个子 m3u8 地址和 `#EXT-X-STREAM-INF`,大概率是主清单;如果你看到大量 ts、m4s 或分片时长标签,那通常就是媒体清单。
常见标签分别表示什么
- `#EXTM3U`:表明这是一个扩展 M3U 清单,通常位于第一行。
- `#EXT-X-VERSION`:声明使用的 HLS 协议版本。
- `#EXT-X-TARGETDURATION`:说明分片最大时长。
- `#EXTINF`:描述某个媒体分片的播放时长。
- `#EXT-X-STREAM-INF`:在主清单中声明某一路码流信息,比如带宽和分辨率。
- `#EXT-X-ENDLIST`:表示当前媒体清单已经结束,常见于点播流。
只看这些标签,就能初步判断一个 m3u8 是直播还是点播、是入口清单还是最终分片清单。
读懂一个简单的 M3U8 示例
下面这个例子是一个非常简化的媒体清单。播放器会按顺序请求每个分片,并根据时长信息拼接出连续播放效果。
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:6 #EXTINF:6.0, segment001.ts #EXTINF:6.0, segment002.ts #EXTINF:6.0, segment003.ts #EXT-X-ENDLIST
这里的意思很直接:视频由三个大约 6 秒的分片组成,最后有结束标记,所以这是一个点播型媒体清单。如果把这些分片路径换成完整 URL 或相对路径,播放器就能继续去加载真实内容。
总结
介绍 M3U8 文件的文本结构、常见标签以及主清单和媒体清单的区别。理解 M3U8 是“清单而不是视频本体”之后,后续再看播放失败、跨域限制或清晰度切换这些问题,会更容易抓住重点。