📊

M3U8 文件格式解析

M3U8 文件基本结构

M3U8 文件是一个纯文本文件,使用 UTF-8 编码。文件的第一行必须是 #EXTM3U,这是 M3U8 文件的标识符,告诉播放器这是一个 M3U8 播放列表文件。

主要标签类型

M3U8 文件包含多种标签,每种标签都有特定的功能:

1. #EXTM3U

文件头标识,必须出现在文件的第一行。表示这是一个 M3U8 播放列表文件。

2. #EXT-X-VERSION

指定 M3U8 文件的版本号,例如 #EXT-X-VERSION:3。不同版本支持不同的功能特性。

3. #EXTINF

媒体片段信息标签,格式为:#EXTINF:时长,标题。其中:

  • 时长:片段的播放时长(秒),可以是整数或小数
  • 标题:可选的片段标题

下一行必须是该片段的 URL 地址。

4. #EXT-X-STREAM-INF

多码率主播放列表标签,用于指定不同码率的流。包含以下属性:

  • BANDWIDTH:码率(比特每秒)
  • RESOLUTION:分辨率(如 1920x1080)
  • CODECS:编码格式(如 avc1.4d001f,mp4a.40.2)
  • NAME:流的名称
5. #EXT-X-PLAYLIST-TYPE

播放列表类型,可以是:

  • VOD:点播(Video On Demand),播放列表不会变化
  • EVENT:事件流,播放列表会持续更新
6. #EXT-X-TARGETDURATION

指定每个媒体片段的最大时长(秒),例如 #EXT-X-TARGETDURATION:10 表示每个片段最长 10 秒。

7. #EXT-X-MEDIA-SEQUENCE

媒体序列号,表示播放列表中第一个片段的序列号,通常从 0 开始。

8. #EXT-X-ENDLIST

表示播放列表结束,不会再添加新的片段。通常出现在点播(VOD)播放列表中。

9. #EXT-X-KEY

加密密钥信息,用于加密的流媒体。包含:

  • METHOD:加密方法(如 AES-128、NONE)
  • URI:密钥文件的 URL
  • IV:初始化向量(可选)

播放列表类型

主播放列表(Master Playlist)

包含多个不同码率的流,用于自适应码率播放。示例:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=1280000,RESOLUTION=854x480
stream_480p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,RESOLUTION=1280x720
stream_720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=5120000,RESOLUTION=1920x1080
stream_1080p.m3u8
媒体播放列表(Media Playlist)

包含实际的视频片段列表。示例:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
segment_000.ts
#EXTINF:10.0,
segment_001.ts
#EXTINF:10.0,
segment_002.ts
#EXT-X-ENDLIST

相对路径与绝对路径

M3U8 文件中的 URL 可以是:

  • 绝对路径:完整的 URL,如 https://example.com/video/segment.ts
  • 相对路径:相对于 M3U8 文件位置的路径,如 segment.ts../video/segment.ts

常见问题与调试

在编辑或调试 M3U8 文件时,需要注意:

  • 确保文件使用 UTF-8 编码
  • 第一行必须是 #EXTM3U
  • 每个 #EXTINF 标签后必须紧跟 URL
  • URL 中的特殊字符需要正确编码
  • 检查片段文件的路径是否正确
  • 确保服务器支持 CORS(跨域资源共享)

手动编辑 M3U8 文件

您可以使用任何文本编辑器打开和编辑 M3U8 文件。编辑时需要注意:

  • 保持标签格式正确
  • 确保 URL 地址可访问
  • 验证片段时长信息准确
  • 保存时使用 UTF-8 编码

通过理解 M3U8 文件的结构和标签含义,您可以更好地理解流媒体播放的工作原理,并在需要时手动编辑或调试播放列表文件。

← 返回文章列表