m3u8格式详解

目录

一、文件结构概述

二、m3u8类型

2.1 媒体播放列表(Media Playlist)

2.2 主列表(Master Playlist)

三、标签类型

3.1 基础标签(Basic Tags)

3.1.1 EXTM3U

3.1.2 EXT-X-VERSION

3.2 媒体片段类型标签(Media Segment Tags)

3.2.1 EXTINF

3.2.2 EXT-X-BYTERANGE

3.2.3 EXT-X-DISCONTINUITY

3.2.4 EXT-X-KEY

3.2.5 EXT-X-MAP

3.2.6 EXT-X-PROGRAM-DATE-TIME

3.2.7 EXT-X-DATERANGE

3.3 媒体播放列表类型标签(Media Playlist Tags)

3.3.1 EXT-X-TARGETDURATION

3.3.2 EXT-X-MEDIA-SEQUENCE

3.3.3  EXT-X-DISCONTINUITY-SEQUENCE

3.3.5 EXT-X-PLAYLIST-TYPE

3.3.6 EXT-X-I-FRAMES-ONLY

3.4 主播放列表类型标签(Master Playlist Tags)

3.4.1 EXT-X-MEDIA

3.4.2 EXT-X-STREAM-INF

3.4.3 EXT-X-I-FRAME-STREAM-INF

3.4.4 EXT-X-SESSION-DATA

3.4.5 EXT-X-SESSION-KEY

3.5 播放列表类型标签(Media or Master Playlist Tags)

3.5.1 EXT-X-INDEPENDENT-SEGMENTS

3.5.2 EXT-X-START

四、知识点汇总

五、m3u8使用场景及优缺点

一、文件结构概述

1、写在前面:学习的时候一定要对照官方文档、结合分析工具,才能深入理解。

(1)m3u8官方文档:RFC 8216 - HTTP Live Streaming

2、m3u8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件它并不包含音视频数据m3u8文件实质是一个播放列表(playlist),打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的地址进行播放。如果没有音视频文件,单独存在m3u8则毫无意义。

3、m3u8文件其实是 HTTP Live Streaming(缩写为 HLS) 协议的部分内容,而 HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。

4、m3u8是一种常见的文件格式,主要以文件列表的形式存在,既支持直播又支持点播,尤其在Android、iOS等平台最为常用。(M3U8视频格式_M3U8格式详解

二、m3u8类型

1、上文提到m3u8 文件实质是一个播放列表(playlist),又分为媒体播放列表(Media Playlist)和主列表(Master Playlist)两类。但无论是哪种播放列表,其内部文字使用的都是 utf-8 编码。二者都可以应用到直播和点播的场景中。

2.1 媒体播放列表(Media Playlist)

1、当m3u8文件作为媒体播放列表(Meida Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。既可以用于直播,也可以用于点播。

2、直播来说,客户端一次请求的m3u8只显示最近几个ts文件(显示几个ts文件可以配置,默认是3个)如下图所示,但是直播过程中,ts文件是不间断产生的,m3u8的内容也是不断更新的,所以客户端播放时需要定时重新请求该m3u8文件,以此来播放最新生成的ts文件。

直播场景下的m3u8:每次只最近几个ts文件

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:3
#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts

3、对于点播来说,m3u8的内容是不变的,客户端只需请求一次然后播放即可。

点播场景下的m3u8:包含全量ts文件,是对整个视频的分割

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts
#EXTINF:3.333333,
test/3.ts
#EXTINF:3.333333,
test/4.ts
#EXTINF:3.333333,
test/5.ts
#EXT-X-ENDLIST

4、直播、点播场景下媒体播放列表的区别

(1)直播的m3u8没有#EXT-X-ENDLIST标签,播放时没有进度条。点播的m3u8有#EXT-X-ENDLIST标签,播放时有进度条

(2)直播的m3u8的内容会不断更新,并且总是保留最近几个ts文件(默认是保存最近3个ts文件,也可以设置)。点播的m3u8的内容不会改变,保存所有的ts文件。

2.2 主列表(Master Playlist)

1、当m3u8文件作为主列表(Master Playlist)时,其内部信息用来描述多个媒体流的元数据信息,包括不同分辨率、码率和编码格式等。客户端可以根据这些信息选择合适的媒体流进行播放,也就是多码率的适配客户端可以根据网络状况自动选择不同码率的视频流,条件允许的情况下使用高码率,网络繁忙的时候使用低码率,并且自动在二者间随意切换。既可以用于直播,也可以用于点播。

2、主列表(Master Playlist)类型的m3u8内容如下所示,包含多个子m3u8,这些子m3u8就是媒体播放列表(Meida Playlist)形式的m3u8。对于主列表(Master Playlist)类型的m3u8来说,直播、点播场景下的文件形式是一样的,区别在子m3u8中,直播、点播场景下的子m3u8的文件形式可参考“2.1”节。

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example/liveid/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example/liveid/mid.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example/liveid/high.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example/liveid/audio.m3u8

三、标签类型

1、标签的类型可分为五种类型:基础标签(Basic Tags)媒体片段类型标签(Media Segment Tags)媒体播放列表类型标签(Media Playlist Tags),主播放列表类型标签(Master Playlist Tags) 和 播放列表类型标签(Media or Master Playlist Tags)

(1)基础标签(Basic Tags):m3u8文件的整体描述。可同时适用于媒体播放列表(Media Playlist)和主播放列表(Master Playlist)。

(2)媒体片段类型标签(Media Segment Tags):每个媒体段由一系列媒体段标记和一个URI指定。有的标签仅适用于下一个片段。有的标签应用于所有后续段,直到同一标记的另一个实例为止;媒体片段类型标签(Media Segment Tags)不能出现在主播放列表(Master Playlist)中。客户端必须无法解析同时包含媒体段标签和主播放列表标签的播放列表。

(3)媒体播放列表类型标签(Media Playlist Tags):媒体播放列表标签为m3u8文件的全局参数信息。这些标签只能在 m3u8 文件中最多出现一次。媒体播放列表(Media Playlist)标签不能出现在主播放列表(Master Playlist)中。

(4)主播放列表类型标签(Master Playlist Tags):主播放列表标签定义了变体流、版本和其他全局参数。主播放列表标签不能出现在媒体播放列表中(Media Playlist),客户端必须无法解析同时包含主播放列表标签和媒体播放列表标签或媒体片段标签的任何播放列表。

(5)播放列表类型标签(Media or Master Playlist Tags):播放列表类型标签可以出现在主播放列表(Master Playlist)媒体播放列表(Media Playlist)中。如果其中一个标签出现在主播放列表中,则不应出现在该主播放列表引用的任何媒体播放列表中。在两者中都出现的标签必须具有相同的值,否则客户端应忽略媒体播放列表中的值。

2、无论哪种类型的标签,都有遵循如下规则:

(2)每一行都以换行符或换行符后面的回车符终止。每行是一个URI,URI为空白或以字符“#”开头,以#EXT开头的是标签,区分大小写,而仅以字符"#"开头的行是注释或标记,应该被忽略。此外应该忽略空白行。除了明确指定的元素外,不得存在空格。

如果播放列表中的所有URI行都标识媒体段,则播放列表是媒体播放列表。如果播放列表中的所有URI行都标识媒体播放列表,则播放列表是主播放列表。播放列表必须是媒体播放列表或主播放列表;所有其他播放列表都是无效的。

(3)根据HLS官方文档对标签的定义,每一种标签都自己的使用规则,比如有的标签只能出现在固定的位置,或只能出现一次,或者不能出现在媒体播放列表或主列表中,如果违反使用规则就都是错误的标签,此时客户端在解析时一定不能解析这些错误的标签。

(4)在标记语法的规范中,用<>括起来的是字符串标识标记参数,其具体格式在其标签定义中进行了描述。如果参数进一步被[]包围,则它是可选的,否则,它是必需的。

3、时长及比特率的规定

(1)媒体播放列表的持续时间是其中媒体段的持续时间之和。

(2)媒体段的段比特率是媒体段的大小除以其EXTINF持续时间。请注意,这包括容器开销,但不包括传输系统施加的开销,如HTTP、TCP或IP标头。

(3)媒体播放列表的峰值段比特率是任何连续段集合中最大的比特率,其总持续时间在0.5到1.5倍媒体段持续时间之间。集合的比特率通过将段大小的总和除以段持续时间的总和来计算。

(4)媒体播放列表的平均段比特率是媒体播放列表中每个媒体段的大小(以比特为单位)之和,除以媒体播放列表的持续时间。请注意,这包括容器开销,但不包括传输系统施加的开销,如HTTP、TCP或IP标头。

3.1 基础标签(Basic Tags)

1、m3u8文件的整体描述。可同时适用于媒体播放列表(Media Playlist)和主播放列表(Master Playlist)。

3.1.1 EXTM3U

1、表示该文件是一个m3u8文件,它必须在媒体播放列表和每个主播放列表的第一行。

2、格式:#EXTM3U

3.1.2 EXT-X-VERSION

1、表示播放列表文件、其相关媒体及其服务器的兼容版本。该标签作用于整个m3u8文件。每个m3u8文件内最多只能出现一个该标签定义。如果m3u8文件不包含该标签,则默认为协议的第1个版本。

2、格式:#EXT-X-VERSION:<n>

3.2 媒体片段类型标签(Media Segment Tags)

1、每个媒体段由一系列媒体段标记和一个URI指定。某些Media Segment标签仅适用于下一个片段。其它应用于所有后续段,直到同一标记的另一个实例为止

2、媒体段标记不得出现在主播放列表中。客户端必须无法解析同时包含媒体段标签和主播放列表标签的播放列表。

3.2.1 EXTINF

1、EXTINF标记指定当前媒体段的持续时间,只作用于一个媒体段。

2、格式:#EXTINF:<duration>,[<title>]                                                                                          其中,duration是十进制浮点或十进制整数,用于指定媒体段的持续时间(以秒为单位)。持续时间应为十进制浮点,具有足够的精度,以避免计算总时长把每个片段时间加合时出现明显的时间错误。但是,如果兼容版本号小于3,则持续时间必须是整数,是真实时间四舍五入到最接近的整数。逗号后面的行的其余部分是媒体段的可选可读信息标题。

3、例子

#EXTINF:3.333333,
test/0.ts
#EXTINF:6.666666,
test/1.ts

test/0.ts的时长是3.333333s,test/1.ts的时长是6.666666s

3.2.2 EXT-X-BYTERANGE

1、通常用于指定当前媒体段的偏移量和长度,只作用于一个媒体段。客户端可以在下载媒体段时可以根据EXT-X-BYTERANGE的信息来只请求需要的部分,从而提高下载效率并节省带宽。主要用于点播场景。

2、格式:#EXT-X-BYTERANGE:<n>[@<o>]                                                                                 其中,<n>表示媒体段的长度(以字节为单位),<o>表示媒体段的偏移量(以字节为单位)。如果省略<o>,则表示媒体段的偏移量为前一个媒体段的偏移量加上前一个媒体段的长度。

3、下面的例子中,test/0.ts大小是50000字节,偏移量是0字节。test/1.ts大小是50000字节,偏移量是50000字节,test/2.ts大小是30000字节,偏移量是100000字节。

#EXTINF:10, 
#EXT-X-BYTERANGE:50000@0 
test/0.ts 
#EXTINF:10, 
#EXT-X-BYTERANGE:50000@50000
test/1.ts
#EXTINF:10, 
#EXT-X-BYTERANGE:30000@100000 
test/2.ts 

3.2.3 EXT-X-DISCONTINUITY

1、表示其后面的媒体段和之前的媒体段之间的不连续。

2、格式:#EXT-X-DISCONTINUITY

3、当以下任一情况变化时,必须使用该标签:

(1)文件格式(file format)

(2)轨道(流)的编号、类型和标识符

(3)时间戳序列(timestamp sequence)

4、当以下任一情况变化时,应当使用该标签:

(1)编码参数(encoding parameters),如如分辨率、码率、编码格式等。

(2)编码序列(encoding sequence),是指将一系列原始数据(如音频、视频等)通过编码算法进行压缩和处理的过程。

5、在直播或点播过程中,可能需要在媒体内容中插入广告片段。由于广告片段和原始媒体内容之间可能存在编码参数、时间戳等方面的不连续性,可以使用EXT-X-DISCONTINUITY标签来表示这种不连续性,确保客户端能够正确播放广告和原始内容。

3.2.4 EXT-X-KEY

1、媒体段可能被加密。EXT-X-KEY标记指定如何解密它们。它适用于每个媒体段直到下一个EXT-X-KEY出现 或 由EXT-X-MAP标记声明的每个媒体初始化块。如果两个或多个具有不同的KEYFORMAT属性的EXT-X-KEY标签最终产生相同的解密密钥,则它们可能应用于同一媒体段。

2、格式:#EXT-X-KEY:<attribute-list>   其中,attribute-list中以包含如下几个键:

(1)METHOD:该值是一个枚举字符串,用于指定加密方法,是必选属性。定义的方法有:NONE、AES-128和SAMPLE-AES。NONE的加密方法意味着媒体段不加密。如果加密方法为NONE,则不得存在其它属性。AES-128是对整个文件进行加密,SAMPLE-AES加密是对媒体文件的每个样本进行加密。

(2)URI:该值是一个带引号的字符串,包含一个指定如何获取密钥的URI。除非METHOD为NONE,否则此属性是需要的。

(3)IV:该值是十六进制序列,用于指定要与密钥一起使用的128位无符号整数初始化向量。是可选属性。使用IV属性要求兼容性版本号为2或更高。(IV的详细用法可以参考官方文档)

(4)KEYFORMAT:该值是一个带引号的字符串,标识密钥在密钥文件中的存储方式,是可选属性,默认值为 "identity"(例如[AES_128]加密使用16个八位字节密钥。如果EXT-X-KEY标记的KEYFORMAT是“identity”,则密钥文件是二进制格式的16个八位字节的单个压缩数组) 。使用该属性要求EXT-X-VERSION(兼容版本号)为5或者更高。

(5)KEYFORMATVERSIONS:该值是一个带引号的字符串,包含一个或多个由“/”字符分隔的正整数(例如,“1”、“1/2”或“1/2/5”)。“1/2/5”表示支持的加密密钥的版本号为1,2,5。此属性是可选的,默认值是“1”。使用KEYFORMATVERSIONS属性要求EXT-X-VERSION(兼容版本号)为5或更高。

3、例子

(1)使用AES-128加密的例子:

#EXTM3U
#EXT-X-VERSION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:3
#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/keyfile",IV=0x00000000000000000000000000000000

#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts
#EXT-X-ENDLIST

使用了AES-128加密算法对媒体文件进行加密,加密密钥存储在URI指定的keyfile中,加密时使用了IV(Initialization Vector)为全0的值。客户端需要先获取加密密钥,然后使用密钥和IV对媒体文件进行解密。

(2)使用SAMPLE-AES加密的例子

#EXTM3U
#EXT-X-VERSION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:3
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="https://example.com/keyfile",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"

#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts
#EXT-X-ENDLIST

使用了SAMPLE-AES加密算法对媒体文件进行加密,加密密钥存储在URI指定的keyfile中,KEYFORMAT指定了密钥的格式为"com.apple.streamingkeydelivery",KEYFORMATVERSIONS指定了密钥的版本号是1。客户端需要先获取加密密钥,然后使用密钥对媒体文件进行解密。与AES-128加密不同的是,SAMPLE-AES加密是对媒体文件的每个样本进行加密,而不是对整个媒体文件进行加密。

3.2.5 EXT-X-MAP

hls m3u8文件学习分析_hls m3u8格式_HUI的技术笔记的博客-CSDN博客

1、这个字段是视频的初始化片段,简而言之,有了这个字段,说明后续的每一个分片文件必须和通过这个初始化片段才能完整解读,该标签对其后所有媒体片段生效,直至遇到另一个EXT-X-MAP标签。

2、格式: #EXT-X-MAP:<attribute-list>   其中,attribute-list中以包含如下几个键:

(1)URI:该值是一个带引号的字符串,是必选属性。它的值是一个包含媒体初始化信息的资源的URI。这个资源可以是一个独立的文件,也可以是媒体文件本身的一部分。客户端需要根据URI属性指定的资源来获取媒体初始化信息。

(2)BYTERANGE:含义和用法和“3.2.2 EXT-X-BYTERANGE”相同,是可选属性。在EXT-X-MAP中,BYTERANGE通常用于指定媒体初始化信息所在的字节范围,以提高媒体文件的解析效率。如果BYTERANGE属性不存在,则默认情况下,整个资源都包含媒体初始化信息。

3、作用:EXT-X-MAP标签的作用是为了提高媒体文件的解析效率。在使用#EXT-X-MAP标签之前,客户端需要下载整个媒体文件才能解析其中的数据。而使用#EXT-X-MAP标签之后,客户端可以根据标签中指定的偏移量和长度,只下载需要的部分,从而提高下载效率。

4、例子

#EXTM3U
#EXT-X-VERSION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:3
#EXT-X-MAP:URI="init.mp4",BYTERANGE="720@0"

#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts
#EXT-X-ENDLIST

URI属性指定了包含媒体初始化信息的资源的URI为"init.mp4"。客户端可以根据这个URI来获取媒体初始化信息。

3.2.6 EXT-X-PROGRAM-DATE-TIME

1、用于指定媒体文件的开始时间,只作用于下一个媒体段。

2、格式: #EXT-X-PROGRAM-DATE-TIME:<date-time-msec>                                                    其中,date-time-msec 是一个 ISO/IEC 8601:2004 规定的日期格式,形如:YYYY-MM-DDThh:mm:ss.SSSZ。

3、作用:可以仅仅作为一个不影响播放的标识,也可以播放控制,比如让客户端根据时间戳来进行播放控制,比如到标签指定的时刻再继续播放。

4、例子

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10

#EXT-X-PROGRAM-DATE-TIME:2022-01-01T00:00:00Z
#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts

第一个媒体段(0.ts)的开始时间是2022年1月1日1时0分0秒。后面的媒体段的开始时间就是上一个媒体段的开始时间加上一个媒体段的时长,例如1.ts的开始时间就是2022年1月1日1时0分0秒 + 3.333333秒。

3.2.7 EXT-X-DATERANGE

1、定义了 属性/值 的日期范围,只作用于下一个媒体段。

2、格式: #EXT-X-DATERANGE:<attribute-list>    其中,attribute-list中以包含如下几个键:

(1)ID:该值是一个带引号的字符串,是必选属性。是EXT-X-DATERANGE的唯一标识。

(2)CLASS:该值是一个带引号的字符串,是可选属性。用于指定某组属性及其关联的值语义。具有相同CLASS属性值的所有日期范围都必须遵守这些语义。

(3)START-DATE:该值是一个带引号的字符串,是必选属性。日期范围的起始值。

(4)END-DATE:该值是一个带引号的字符串,是可选属性。日期范围的结束值,该值必须大于或等于 START-DATE。

(5)DURATION:以十进制浮点数表示(秒),是可选属性。日期范围的持续时间,不得为负数。

(6)PLANNED-DURATION:以十进制浮点数表示(秒),是可选属性。日期范围的期望持续时长。在预先无法得知真实持续时长的情况下,可使用该属性作为日期范围的期望预估时长

(7)X-<client-attribute>:X- 前缀是预留给客户端自定义属性的命名空间,是可选属性。

(8)END-ON-NEXT:值必须为YES的枚举字符串,是可选属性。该属性表明达到该范围末尾,也即等于后续范围的起始位置 START-DATE。“后续范围”是指具有相同CLASS的最早的START-DATE表明的日期范围

3、作用:通常用于指定媒体文件的日期范围,可以仅仅是一个不影响播放的标识,也可以播放控制,例如一个电视节目的播出时间,客户端可以根据这个标签来获取媒体文件的播出时间,并进行相应的播放控制。

4、注意:如果一个播放列表包含EXT-X-DATERANGE标签,那么它必须至少包含一个EXT-X-PROGRAM-DATE-TIME标签。这是因为EXT-X-DATERANGE标签指定了媒体文件的日期范围,而EXT-X-PROGRAM-DATE-TIME标签指定了媒体文件的开始时间,客户端需要同时获取这两个信息才能进行正确的播放控制。

5、例子

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10

#EXT-X-PROGRAM-DATE-TIME:2022-01-01T00:00:00Z
#EXT-X-DATERANGE:ID="range1",START-DATE="2022-01-01T01:00:00Z",DURATION=60.0
#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts
#EXT-X-ENDLIST

#EXT-X-PROGRAM-DATE-TIME标签指定了后面第一个媒体段的开始时间为2022年1月1日0时0分0秒,时区为UTC。而#EXT-X-DATERANGE标签指定了后面第一个媒体段的日期范围,开始时间为2022年1月1日1时0分0秒,持续时间为60秒。这意味着,第一个媒体段(0.ts)的实际开始时间应该是从2022年1月1日1时0分0秒开始,而不是从2022年1月1日0时0分0秒开始。后面的媒体段的开始时间就是上一个媒体段的开始时间加上一个媒体段的时长,例如1.ts的开始时间就是2022年1月1日1时0分0秒 + 3.333333秒。

3.3 媒体播放列表类型标签(Media Playlist Tags)

1、媒体播放列表标签为m3u8文件的全局参数信息。这些标签只能在m3u8文件中最多出现一次。

2、媒体播放列表(Media Playlist)标签不能出现在主播放列表(Master Playlist)中。

3.3.1 EXT-X-TARGETDURATION

1、表示每个媒体段最大的时长(秒)。该标签为必选标签。

2、格式:#EXT-X-TARGETDURATION:<s>   其中,s是一个十进制整数,表示媒体段的最大时长(秒)

3.3.2 EXT-X-MEDIA-SEQUENCE

1、表示播放列表第一个媒体段的URI的序列号,每个媒体片段的URI都拥有一个唯一的整型序列号。每个媒体片段序列号按出现顺序依次加1。如果没有该标签,则默认序列号从0开始。媒体段序列号与片段文件名无关。该标签为可选标签。

2、格式:#EXT-X-MEDIA-SEQUENCE:<number>   其中,number是一个十进制数,表示第一个媒体段段起始序号。

3、例子:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10

#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXT-X-ENDLIST

#EXT-X-MEDIA-SEQUENCE:0,序号从0开始。第一个的媒体段的URI:test/0.ts,0就是URI的序号,文件名是0.ts。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:10

#EXTINF:3.333333,
test/media-1.ts
#EXTINF:3.333333,
test/media-2.ts
#EXT-X-ENDLIST

#EXT-X-MEDIA-SEQUENCE:1,序号从1开始。第一个的媒体段的URI:test/media-1.ts,1是URI的序号,文件名是media-0.ts。

3.3.3  EXT-X-DISCONTINUITY-SEQUENCE

1、允许在播放时切换同一变体流的不同版本时进行同步(比如同一个视频的720p和1080p版本) 或 媒体播放列表中的EXT-X-DISCONTINUITY标签分割的不同媒体段间进行同步;标签必须出现在播放列表中第一个媒体片段之前,该标签必须出现在任何EXT-X-DISCONTINUITY标签之前。

(1)播放时切换同一变体流的不同版本时进行同步:同一个视频可能会有多个不同的变体流,例如不同分辨率、不同码率等。当用户在播放视频时,播放器会根据当前网络状况和设备性能等因素选择最适合的变体流进行播放。如果不同变体流之间的媒体片段没有同步,就会导致播放器在切换变体流时出现卡顿或者画面不连续等问题,影响用户的观看体验。

(2)媒体播放列表中的EXT-X-DISCONTINUITY标签分割的不同媒体段间进行同步:当一路流的播放列表中的某个片段与前面的片段之间存在不连续性时,可以使用EXT-X-DISCONTINUITY标签来标识这种不连续性。而当需要同步不同变体流之间的媒体片段时,可以在播放列表中都加上EXT-X-DISCONTINUITY-SEQUENCE标签,这样就可以确保它们之间的同步性了。

2、格式:#EXT-X-DISCONTINUITY-SEQUENCE:<number>    其中,number 为一个十进制整型数值。

3、例子

(1)播放时切换同一变体流的不同版本时进行同步,720p和1080p的两个文件都有

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXT-X-DISCONTINUITY-SEQUENCE:1

#EXTINF:3.333333,
test/720p/0.ts
#EXTINF:3.333333,
test/720p/1.ts
#EXT-X-DISCONTINUITY
#EXTINF:3.333333,
test/720p/2.ts
#EXTINF:3.333333,
test/720p/3.ts
#EXT-X-ENDLIST
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXT-X-DISCONTINUITY-SEQUENCE:1

#EXTINF:3.333333,
test/1080p/0.ts
#EXTINF:3.333333,
test/1080p/1.ts
#EXT-X-DISCONTINUITY
#EXTINF:3.333333,
test/1080p/2.ts
#EXTINF:3.333333,
test/1080p/3.ts
#EXT-X-ENDLIST

(2)媒体播放列表中的EXT-X-DISCONTINUITY标签分割的不同媒体段间进行同步

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXT-X-DISCONTINUITY-SEQUENCE:1

#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXT-X-DISCONTINUITY
#EXTINF:3.333333,
test/2.ts
#EXTINF:3.333333,
test/3.ts
#EXT-X-ENDLIST

3.3.4 EXT-X-ENDLIST

1、表示将不再向媒体播放列表文件添加媒体段。可以出现在m3u8文件任意位置,一般是结尾。点播场景下有此标签,直播场景下没有此标签。这也是直播、点播场景下m3u8点区别之一。

2、格式:#EXT-X-ENDLIST

3.3.5 EXT-X-PLAYLIST-TYPE

1、表示媒体文件的类型(直播或点播),它适用于整个媒体播放列表文件。是可选标签。

2、格式: #EXT-X-PLAYLIST-TYPE:<type-enum>    其中,type-enum中以包含如下几个键:

(1)EVENT:表示直播,新的媒体片段或标签只能添加到媒体播放列表的末尾。

(2)VOD:表示点播,媒体播放列表不能更改。

3、例子

(1)直播

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXT-X-PLAYLIST-TYPE:EVENT

#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts

(2)点播

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXT-X-PLAYLIST-TYPE:VOD

#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts
#EXT-X-ENDLIST

3.3.6 EXT-X-I-FRAMES-ONLY

1、表示每个媒体片段都是一个 I-frame,该标签全局生效。如果播放列表设置了 EXT-X-I-FRAMES-ONLY,那么切片的时长(EXTINF 标签的值)即为当前切片 I-frame 帧开始到下一个 I-frame 帧出现的时长。或者是播放列表中的最后一个I帧的呈现时间和播放结束时间之间的时间间隔。

2、格式:#EXT-X-I-FRAMES-ONLY

3、例子

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXT-X-I-FRAMES-ONLY

#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts
#EXT-X-ENDLIST

3.4 主播放列表类型标签(Master Playlist Tags)

1、主播放列表标签定义了变体流、版本和其他全局参数。

2、主播放列表标签不能出现在媒体播放列表中(Media Playlist),客户端必须无法解析同时包含主播放列表标签和媒体播放列表标签或媒体片段标签的任何播放列表。

3.4.1 EXT-X-MEDIA

1、EXT-X-MEDIA标签用于关联包含相同内容的备选版本的媒体播放列表。例如,可以使用三个EXT-X-MEDIA标签来标识只包含英语、法语和西班牙语版本的音频媒体播放列表。或者,可以使用两个EXT-X-MEDIA标签来标识只包含两个不同摄像机角度的视频媒体播放列表。

2、格式:#EXT-X-MEDIA:<attribute-list>   其中,attribute-list中以包含如下几个键:

(1)TYPE:该属性的值是一个枚举字符串,有效的字符串包括AUDIO(音频)、VIDEO(视频)、SUBTITLES(字幕)和CLOSED-CAPTIONS(关闭字幕)。是必选属性。

(2)URI:该值是一个带引号的字符串,用于指定媒体列表的URI,是可选属性。如果TYPE属性值为 CLOSED-CAPTIONS ,那么则不能提供 URI。

(3)GROUP-ID:该值是一个带引号的字符串,用于指定版本所属的组。是必选属性。

(4)LANGUAGE:该值是一个带引号的字符串,用于指定流所用的语言,遵循RFC5646标准。(例如,如果是英语,则LANGUAGE是"en")是可选属性。

(5)ASSOC-LANGUAGE:该值是一个带引号的字符串,用于指定与版本相关联的语言。与LANGUAGE属性指定的语言不同(例如,书面语与口语或备用方言)。是可选属性。

(6)NAME:该值是一个带引号的字符串,包含可读的描述。是必选属性。如果存在LANGUAGE属性,则NAME中的描述应该是该语言的全称(例如,当LANGUAGE是"es"时,此时NAME应该是"Spanish")。

(7)DEFAULT:该值是一个枚举字符串,有效的字符串包括YES、NO,默认为NO。如果值为YES,如果用户没有选择其它流的情况下,客户端应该播放该流的内容。是可选属性。

(8)AUTOSELECT:该值是一个枚举字符串,有效的字符串包括YES、NO,默认为NO。如果值为YES,当用户没有显示进行设置时,客户端可以选择播放此版本,因为它与当前播放环境匹配,例如所选的系统语言。如果存在AUTOSELECT属性,并且DEFAULT属性的值为YES,则其值必须为YES。该属性是可选的。

(9)FORCED:该值是一个枚举字符串,有效的字符串包括YES、NO,默认为NO。只有TYPE属性的值为SUBTITLES时,才能存在FORCED属性。如果值为YES,表示该流包含了播放必需的内容。是可选属性。

(10)INSTREAM-ID:该值是一个带引号的字符串,用于指定媒体播放列表中的一个版本。只有TYPE属性的值为CLOSED-CAPTIONS时,该属性才是是必需的,并且必须具有以下值之一: "CC1"、 "CC2"、 "CC3"、"CC4"或"SERVICEn",其中n必须是介于1和63之间的整数(例如 "SERVICE3" 或"SERVICE42")。值"CC1"、"CC2"、"CC3"和"CC4"标识Line 21数据服务通道[CEA608]。 "SERVICE"值标识数字电视闭路字幕[CEA708]服务块号。当TYPE不是CLOSED-CAPTIONS时,则不能设置该属性。

(11)CHARACTERISTICS:该值是一个带引号的字符串,其中包含一个或多个Uniform Type Identifiers [UTI],由逗号(,)字符分隔。每个UTI表示版本的一个单独特征。SUBTITLES版本可能包括以下特征:"public.accessibility.transcribes-spoken-dialog"、"public.accessibility.describes-music-and-sound"和"public.easy-to-read"(表示字幕已经编辑以便于阅读)。AUDIO版本可能包括以下特征:"public.accessibility.describes-video"。CHARACTERISTICS属性可以包括私有UTIs 。该属性是可选的。

(12)CHANNELS:该值是一个带引号的字符串,指定了一个有序的、用反斜杠分隔("/")的参数列表。当TYPE属性的值为AUDIO时,第一个参数是表示任何版本中任何媒体段中同时存在的独立音频通道的最大数。所有音频EXT-X-MEDIA标签应该具有CHANNELS属性。如果主播放列表包含使用相同编解码器但不同通道数的两个版本,则需要CHANNELS属性;否则,它是可选的。

3、例子

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",LANGUAGE="en",URI="audio/english.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Spanish",LANGUAGE="es",URI="audio/spanish.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",LANGUAGE="en",URI="subs/english.vtt"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Spanish",LANGUAGE="es",URI="subs/spanish.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=2000000,AVERAGE-BANDWIDTH=1500000,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=640x360,AUDIO="audio",SUBTITLES="subs"
video_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4000000,AVERAGE-BANDWIDTH=3000000,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,AUDIO="audio",SUBTITLES="subs"
video_2.m3u8

主播放列表包含两个备选版本的视频,分别是video_1.m3u8和video_2.m3u8。同时,还定义了两个音频备选版本(英语和西班牙语)和两个字幕备选版本(英语和西班牙语)。在每个视频备选版本的标签中,使用了EXT-X-STREAM-INF标签来指定视频的码率、分辨率、音频和字幕版本等信息。

3.4.2 EXT-X-STREAM-INF

1、指明了不同变体流的信息和URI。不同变体流是指同一个视频的不同分辨率、码率或其它参数的版本。

2、格式: #EXT-X-STREAM-INF:<attribute-list>                                                                                               <URI>                                                                                                                                                其中,attribute-list中以包含如下几个键:

(1)BANDWIDTH:它表示变体流的峰值段比特率。是必选属性。

(2)AVERAGE-BANDWIDTH:它表示变体流的平均比特率。是可选属性。

(3)CODECS:该值是一个带引号的字符串,包含一个逗号分隔的格式列表。有效的格式标识符是由"Bucket"媒体类型的"Codecs"和"Profiles"参数[RFC6381]定义的ISO基本媒体文件格式名称空间中的标识符。例如,包含AAC(AAC-LC)的音频和H.264 Main Profile Level 3.0的视频的流将具有CODECS值为“mp4a.40.2,avc1.4d401e”。是必选属性。

(4)RESOLUTION:是十进制数,表示分辨率,如果流中包含视频流,则建议使用它。是可选属性。

(5)FRAME-RATE:是一个十进制浮点数,描述最大帧率,四舍五入保留三位小数,如果流中包含视频流,则建议使用它。是可选属性。

(6)HDCP-LEVEL:是一个枚举字符串,有效的字符串包括TYPE-0和NONE,该属性是建议性的。TYPE-0表示如果输出未受高带宽数字内容保护(HDCP),则可能无法播放。NONE的值表示内容不需要输出拷贝保护。是可选属性。

(7)AUDIO:该值是一个带引号的字符串,它表示播放时应该使用的音频格式集。它必须与主播放列表中EXT-X-MEDIA标签的GROUP-ID属性的值匹配,该标签的TYPE属性为AUDIO。是可选属性。

(8)VIDEO:该值是一个带引号的字符串,它表示播放时应该使用的视频格式集。它必须与主播放列表中EXT-X-MEDIA标签的GROUP-ID属性的值匹配,该标签的TYPE属性为VIDEO。是可选属性。

(9)SUBTITLES:该值是一个带引号的字符串,它表示播放时应该使用的字幕格式集。它必须与主播放列表中EXT-X-MEDIA标签的GROUP-ID属性的值匹配,该标签的TYPE属性为SUBTITLES。是可选属性。

(10)CLOSED-CAPTIONS:该值是一个带引号的字符串或枚举字符串值为NONE。如果该值是带引号的字符串,它表示播放时应该使用的关闭字幕的格式集,它必须与主播放列表中EXT-X-MEDIA标签的GROUP-ID属性的值匹配,该标签的TYPE属性为CLOSED-CAPTIONS。如果是枚举字符串值为NONE,则所有EXT-X-STREAM-INF标签都必须具有该属性并且值为NONE(否则可能会触发播放不一致性),表示没有任何一个变体流关闭字幕。是可选属性。

3、例子:可参考标签“EXT-X-MEDIA”中的例子

3.4.3 EXT-X-I-FRAME-STREAM-INF

1、定义了一个包含I帧的媒体播放列表文件(m3u8文件)。它是独立的,因为它不适用于主播放列表中的特定URI。每一个该标签都必须包含BANDWIDTH属性和URI属性。

2、格式:#EXT-X-I-FRAME-STREAM-INF:<attribute-list>

(1)EXT-X-I-FRAME-STREAM-INF标签中定义的属性与EXT-X-STREAM-INF标签中定义的属性相同,除了FRAME-RATE、AUDIO、SUBTITLES和CLOSED-CAPTIONS属性。此外,EXT-X-I-FRAME-STREAM-INF标签还定义了一个URI属性。

(2)URI:该值是带引号的字符串,指示了包含I帧的媒体播放列表文件(m3u8文件)对URI,该媒体播放列表文件必须包含EXT-X-I-FRAMES-ONLY标签。是必选属性。

3、例子

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-ALLOW-CACHE:YES
#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=640x360
http://example.com/playlist_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=1280x720
http://example.com/playlist_2.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="iframe-playlist.m3u8",PROGRAM-ID=1,CODECS="avc1.42c00d",RESOLUTION=426x240

EXT-X-I-FRAME-STREAM-INF标签定义了一个I帧播放列表文件,其带宽为86000,URI为"iframe-playlist.m3u8",程序ID为1,编解码器为"avc1.42c00d",分辨率为426x240。EXT-X-VERSION标签指定了使用的HLS协议版本为3。

3.4.4 EXT-X-SESSION-DATA

1、允许在主播放列表中携带任意会话数据。该标签可以包含任意数量的属性和属性值,用于传递与会话相关的信息。这些属性和属性值可以是任何字符串,但必须使用UTF-8编码,并且属性名和属性值之间必须使用等号分隔。客户端可以使用这些属性和属性值来实现自定义的会话管理逻辑。每个EXT-X-SESSION-DATA标签必须包含VALUE或URI属性,但不能同时包含两者。播放列表可以包含多个具有相同DATA-ID属性的EXT-X-SESSION-DATA标签,但是DATA-ID属性相同的同时LANGUAGE属性必须不同。

2、格式:#EXT-X-SESSION-DATA:<attribute-list>   其中,attribute-list中以包含如下几个键:

(1)DATA-ID:该值是一个带引号的字符串,用于标识特定的数据值。DATA-ID应该符合反向DNS命名约定,例如"com.example.movie.title";但是,由于没有中央注册机构,因此播放列表作者应该注意选择一个不太可能与其它值冲突的值。是必选属性。

(2)VALUE:该值是一个带引号的字符串,它包含了由DATA-ID标识的数据。如果指定了LANGUAGE,则VALUE应该包含用指定语言编写的可读字符串。

(3)URI:该值是一个带引号的字符串,包含一个URI。URI所标识的资源必须格式化为json,否则客户端可能无法解释该资源。

(4)LANGUAGE:该值是一个带引号的字符串,包含一个语言标签(符合[RFC5646]标准),用于标识属性VALUE使用的语言。是可选属性。

3、例子

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MAP:URI="init.mp4"
#EXT-X-SESSION-DATA:DATA-ID="com.example.title",LANGUAGE="en",VALUE="Example Title"

#EXT-X-STREAM-INF:BANDWIDTH=2000000,AVERAGE-BANDWIDTH=1500000,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=640x360
video_2000k.m3u8

DATA-ID表示会话数据的唯一ID:"com.example.title"。LANGUAGE表示使用语言是"en"(英语)。VALUE表示DATA-ID标识的内容:"Example Title"。

3.4.5 EXT-X-SESSION-KEY

1、允许主播放列表(Master Playlist)指定媒体播放列表(Meida Playlist)的加密密钥。这使得客户端可以在不必先读取媒体播放列表的情况下预加载这些密钥。如果多个变体流使用相同的加密密钥和格式,则应添加EXT-X-SESSION-KEY标签。 EXT-X-SESSION-KEY标签不与任何特定的媒体播放列表相关联。主播放列表中不能包含多个具有相同METHOD、URI、IV、KEYFORMAT和KEYFORMATVERSIONS属性值的EXT-X-SESSION-KEY标签。是可选标签。

2、格式:#EXT-X-SESSION-KEY:<attribute-list>

(1)EXT-X-SESSION-KEY标签定义的所有属性和EXT-X-KEY相同,唯一区别就是METHOD属性的值不能为NONE。如果使用EXT-X-SESSION-KEY,则METHOD、KEYFORMAT和KEYFORMATVERSIONS属性的值必须与具有相同URI值的任何EXT-X-KEY匹配。

3、例子

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",LANGUAGE="en",URI="audio.m3u8"
#EXT-X-SESSION-KEY:METHOD=AES-128,URI="https://example.com/keys/keyfile.key",IV=0x00000000000000000000000000000000
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="audio"
video_800k.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=960x540,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="audio"
video_1400k.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="audio"
video_2800k.m3u8

EXT-X-SESSION-KEY标签指定了加密方法为AES-128,密钥文件的URI为https://example.com/keys/keyfile.key,初始向量为0x00000000000000000000000000000000。这个密钥文件可以被客户端预加载,以便在播放媒体文件时使用。

3.5 播放列表类型标签(Media or Master Playlist Tags)

1、播放列表类型标签可以出现在主播放列表(Master Playlist)媒体播放列表(Media Playlist)中。如果其中一个标签出现在主播放列表中,则不应出现在该主播放列表引用的任何媒体播放列表中。在两者中都出现的标签必须具有相同的值,否则客户端应忽略媒体播放列表中的值。

3.5.1 EXT-X-INDEPENDENT-SEGMENTS

1、如果出现在媒体播放列表,表示每一个媒体段都是独立的,都可以在没有其它信息的情况下都可以独立解码。它适用于播放列表中的每个媒体片段。如果出现在主播放列表中,则它适用于主播放列表中每个媒体播放列表中的每个媒体片段。

2、格式:#EXT-X-INDEPENDENT-SEGMENTS

3、例子

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-INDEPENDENT-SEGMENTS

#EXTINF:10.0,
https://example.com/media1.ts
#EXTINF:10.0,
https://example.com/media2.ts
#EXTINF:10.0,
https://example.com/media3.ts
#EXTINF:10.0,
https://example.com/media4.ts
#EXTINF:10.0,
https://example.com/media5.ts
#EXT-X-ENDLIST

每个媒体片段都是独立的,可以单独解码,而不需要依赖于其它片段。

3.5.2 EXT-X-START

1、表示播放列表的首选播放起点。默认情况下,客户端应在开始播放会话时从此点开始播放。是可选标签。

2、格式:#EXT-X-START:<attribute-list>   其中,attribute-list中以包含如下几个键:

(1)TIME-OFFSET:该值是一个带符号的十进制浮点数,表示秒数。正数表示从播放列表的开始处的时间偏移量,负数表示从播放列表中最后一个媒体片段的结束处的负时间偏移量。是必选属性。TIME-OFFSET的绝对值不应大于播放列表的持续时间。如果TIME-OFFSET的绝对值超过了播放列表的持续时间,则表示播放列表的结束(如果是正数)或开始(如果是负数)。如果播放列表不包含EXT-X-ENDLIST标签,则TIME-OFFSET不应在播放列表文件的最后三个目标持续时间内。

(2)PRECISE:该值是一个枚举字符串,有效的字符串包括YES、NO。如果值为YES,则客户端应从包含TIME-OFFSET的媒体片段开始播放。如果值为NO,则客户端应从头播放。该属性是可选的,如果缺少该属性,则应将其值视为NO。

3、例子

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-START:TIME-OFFSET=10.0,PRECISE=YES

#EXTINF:10.0,
https://example.com/media1.ts
#EXTINF:10.0,
https://example.com/media2.ts
#EXTINF:10.0,
https://example.com/media3.ts
#EXT-X-ENDLIST

四、知识点汇总

1、m3u8类型,可分为媒体播放列表(Media Playlist)和主列表(Master Playlist)两类,详见“二、m3u8类型”。

2、标签类型,标签的类型可分为五种类型:基础标签(Basic Tags),媒体片段类型标签(Media Segment Tags),媒体播放列表类型标签(Media Playlist Tags),主播放列表类型标签(Master Playlist Tags) 和 播放列表类型标签(Media or Master Playlist Tags)。详见“三、标签类型”。

3、直播点播m3u8的区别:详见“2.1 媒体播放列表(Media Playlist)->4、直播、点播场景下媒体播放列表的区别”

五、m3u8使用场景及优缺点

1、使用场景

(1)m3u8文件是HLS协议的一部分,不能脱离HLS单独存在。所以m3u8的使用场景就是HLS的使用场景。HLS在直播、点播的场景中都有广泛的应用,所以m3u8也在直播、点播的场景中有广泛应用。

2、优点

(1)主列表的m3u8可以定义多个不同码率、分辨率的子m3u8,此时就可以做多码率的适配。客户端可以根据网络状况自动选择不同码率的视频流,条件允许的情况下使用高码率,网络繁忙的时候使用低码率,并且自动在二者间随意切换。

猜你喜欢

转载自blog.csdn.net/weixin_39399492/article/details/131687865