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 是“清单而不是视频本体”之后,后续再看播放失败、跨域限制或清晰度切换这些问题,会更容易抓住重点。