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 文件的结构和标签含义,您可以更好地理解流媒体播放的工作原理,并在需要时手动编辑或调试播放列表文件。