m3u8文件是用文件方式对媒体文件进行描述,由一些列标签组成。
m3u8文件示例1:单码率适配流
1 #EXTM3U
2 #EXT-X-VERSION:3
3 #EXT-X-ALLOW-CACHE:YES
4 #EXT-X-MEDIA-SEQUENCE:2
5 #EXT-X-TARGETDURATION:16
6 #EXTINF:14.357, no desc
7 livestream-2.ts
8 #EXTINF:15.617, no desc
9 livestream-3.ts
10 #EXTINF:14.358, no desc
11 livestream-4.ts
12 #EXTINF:15.618, no desc
13 livestream-5.ts
14 #EXTINF:11.130, no desc
15 livestream-6.ts
该文件只是一个简单的Media PlayerList
1.其中#EXTM3U:
每个 m3u8 ⽂件第一行必须是这个 tag
2.#EXT-X-VERSION:m3u8文件版本号,⽐如#EXT-X-VERSION:3。
3. #EXTINF :指定每个媒体段(ts)的持续时间,这个仅对其后⾯的 URI 有效,每两个媒体段 URI 间被这个 tag 分隔开。
4. #EXT-X-TARGETDURATION :指定当前视频流中的单个切⽚(即 ts)⽂件的最⼤时长(秒)。所以 #EXTINF 中指定的时间⻓度必须⼩于或是等于这个最⼤值。这个 tag 在整个 Playlist ⽂件中只能出现一次(在嵌套的情况下,⼀般有真正ts url 的 m3u8 才会出现该 tag)。
5. #EXT-X-MEDIA-SEQUENCE : 每⼀个 media URI 在 Playlist 中只有唯⼀的序号,相邻之间序号 +1。 格式为: #EXT-X #EXT-X-MEDIA-SEQUENCE: 。⼀个 media URI 并不是必须要包含的,如果没 有,默认为 0.
6. #EXT-X-PLAYLIST-TYPE :提供关于 Playlist 的可变性的信息,这个对整个 Playlist 文件有效, 是可选的,格式如下: #EXT-X-PLAYLIST-TYPE: VOD,即为点播视频,服务器不能改变 Playlist ⽂件,换句话说就是该视频全部的 ts ⽂件已经被生成好了EVENT,就是实时⽣成 m3u8 和 ts 文件。服务器不能改变或是删除 Playlist ⽂件中的任何部分,但是可以向该⽂件中增加新的一⾏内容。它的索引⽂件一直处于动态变化中,播放的时候需要不断下载⼆级 index文件。
7. #EXT-X-ENDLIST : #EXT-X-ENDLIST 表示 m3u8 文件的结束,live m3u8 没有该 tag。它可以在 Playlist 中任意位置出现,但是只能出现一个,格式如下:#EXT-X-ENDLIST
示例文件2:
1 #EXTM3U
2 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
3 http://example.com/low.m3u8
4 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
5 http://example.com/mid.m3u8
6 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
7 http://example.com/hi.m3u8
8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"
9 http://example.com/audio-only.m3u8
这是包含多种比特率的Master PlayerList。该文件是一个实际使用中的顶级m3u8文件,该文件中又定义了多个二级文件。顶级m3u8文件主要是做码率适配的,二级m3u8才是真正的切片文件,客户端会默认选择码率最高的请求,如果发现码率达不到,会请求降低码率的刘。客户端拿到二级m3u8文件后,会继续请求里面的文件,这样就可以进行播放了。
#EXT-X-STREAM-INF :指定⼀个包含多媒体信息的 media URI 作为 Playlist,⼀般做 m3u8 的嵌 套使⽤,它只对紧跟后⾯的 URI 有效,格式如下:#EXT-X-STREAM-INF:<attribute-list>
常用的属性如下:
BANDWIDTH:带宽,必须有
PROGRAM-ID:该值是⼀个十进制整数,唯⼀地标识⼀个在 Playlist ⽂件范围内的特定的描述。 ⼀个 Playlist 文件中可能包含多个有相同 ID 的此 tag
CODECS:指定流的编码类型,不是必须的
RESOLUTION:分辨率 AUDIO:这个值必须和 AUDIO 类别的 "EXT-X-MEDIA" 标签中 "GROUP-ID" 属性值相匹配