hls协议中m3u8文件tag总结

1.  引言

本文档主要描述了“如何传输无边界多媒体数据流的”的协议的规范和实现细节。该协议支持加密媒体流和统一流得多版本自适应(多码流自适应)。在该协议下,媒体数据在生成之后会立即进行传输,进而保证其具有接近实时播放的效果。数据的传输建立在HTTP协议的基础之上。

 

其他相关参考文档将在第11节中给出。

 

2.  总结

任意多媒体流将由只想某播放列表文件的URI表示,该文件由一个排序的媒体URI列表和信息标签组成。每个媒体URI只想一个连续的流的文件切片。

在播放过程中,客户端首先获取播放列表文件,进而获取播放列表中描述的文件片并播放它。客户端会不断地重新加载播放列表文件。

本文档中部分关键词的描述可参考RFC 2119。

 

3.  播放列表文件

3.1 引言

         播放列表文件是扩展M3U播放列表。本文档通过定义额外的标签扩展了M3U文件格式。

        

         一个M3U播放列表文件包含多个独立的行。每一行由一个LF标记结尾或由一个CR+LF标记结尾。每行的内容可以是一个URI,空行或者是以”#”开头的注释。空白行将被忽略。空格符将不会被展示出来,除非某元素明确的制定它。

 

         一个URI行指定了一个媒体文件或者另外一个播放列表。(参阅3.3.8节)

 

         URIs地址可以使相对地址。该相对路径的定位地址必须与播放列表文件所在目录一致。

         由”#”开头的行可以是注释或者标签。一般标签以”#EXT”开头,其余的行均被视为注释。

 

         播放列表的总时长应该是其所包含媒体文件的时长之和。

 

         M3U文件中,以.m3u8结尾,或其http头中”Content-Type”字段为” application/vnd.apple.mpegurl”会以UTF-8编码,而以”m3u” 或其http对应字段为” "audio/mpegurl”会以US-ASCII编码。播放列表文件必须以上面某一匹配对对应。

 

         扩展的M3U文件格式定义了两个标签:EXTM3U和EXTINF。扩展的M3U文件通过在第一行中加入” #EXTM3U” 与基本的M3U文件进行区分。

 

        

3.2 属性列表

         某些扩展的M3U标签的值是一个由逗号作为分隔符的属性列表,属性列表中不应出现空格。其语法如:

         AttributeName=AttributeValue

        

         其中属性名不需要被引号包含,它是一个有字符[A –Z ] 和‘-‘组成的字符串。而属性值得取值范围如下:

l  十进制整型数:由[ 0 –9 ]组合成的10进制整数。

l  十六进制整数:[ 0 –9 ] 和 [A –F],以0x或0X开头

l  十进制浮点数:[ 0 –9 ] 和‘ . ‘

l  字符串:引号包含,不可使用linefeed(0xA,换行) carriage-return(0xD, 回车) 和双引号(0x22)。需要使用这些特殊符号时,需要转义。

l  枚举字符串:由属性定义的一个取值集合,表现形式为一个无引号字符串,其值不能包括双引号、逗号和空格。

l  十进制表示的分辨率: 宽度X高度,单位为像素

 

属性值得类型由给定的属性定义。在一个属性列表中,属性名应该仅出现一次。客户端在实现的过程中,需要忽略无法识别的属性名/属性值对。尤其对于枚举类型,若其属性名可识别,但其属性值不可识别,则也需要忽略。

 

 

        

3.3 标准标签

3.3.1 EXTM3U

扩展的M3U文件与基本的M3U的区别在第一行,其值必须为标签 #EXTM3U。这个标签在媒体播放列表和主播放列表中均应该被包含。形式如下:

 

#EXTM3U

 

3.3.2 EXTINF

该标签指定媒体文件片的时长。其作用范围仅限于它后面的媒体文件片,其后必须为一个媒体文件片的资源地址(URI)。每个文件片均需前置一个EXTINF。形式如下:

#EXTINF:<duration>,<title>

 

Duration的取值可以是:十进制整型或十进制浮点数,采用近似取整。若协议版本低于3,则该值必须为整数。协议版本不小于3时,其值使用浮点数表示。

Title部分用于对其后文件片添加一些可读的描述信息。

 

3.4 新标签

本节中我们将展示本文档中新定义的标签。

 

3.4.1 EXT-X-BYTERANGE

         本标签标明文件片为URI对应文件资源的一个子集。其仅作用于其后的下一个媒体文件URI 。形式如下:

         #EXT-X-BYTERANGE:<n>[@<o>]

         其中n为整数,表示子集的字节数。o为可选项,标明子集的起始位置,相当于从资源开始出计算的偏移量。若o未定义,则其开始位置为上一个子集的结束位置下一个字节。

 

         当o未定义的时候,其上一个文件资源必须是同一文件的子集,且其不能为文件列表中的第一个文件片。

         本标签出现在4以上版本,且不应出现在主播放列表中。

 

3.4.2 EXT-X-TARGETDURATION

         本标签的值应大于等于文件列表中最大文件片的时长,其只在媒体播放列表中出现一次,作用域为整个媒体文件列表,它不可出现在主播放列表中,形式如下:

         #EXT-X-TARGETDURATION:<max-duration>

 

3.4.3 EXT-X-MEDIA-SEQUENCE

         播放列表中的每个文件片均由唯一的一个整型序列号,其值顺序加1递增。本标签的值为当前播放列表中第一个文件片的序列号。形式如下:

         #EXT-X-MEDIA-SEQUENCE:<number>

 

         本标签需出现在第一个文件片之前,且不能出现在主播放列表中。当媒体播放列表不包含改标签时,其首个文件片的序列号被视为0 。

         文件资源定位符中可不出现序列号。

 

3.4.4 EXT-X-KEY

         媒体文件片可能被加密,而本标签表明如何对其进行解密。它作用于其后所有的文件片,直到下一个同名标签(with the same KEYFORMAT)的出现。两个以上的EXT-X-KEY可能会将不同的KEYFORMAT属性作用于同一文件片,它们必须被解析为相同的key。

 

#EXT-X-KEY:<attribute-list>

 

以下是一些属性:

METHOD : 枚举值,标明加密方法,必须。

u  NONE ,未加密,当METHOD取值为NONE时,以下属性不得出现 URI、IV、KEYFORMAT、KEYFORMATVERSION

u  AES-128,使用128位密钥和PKCS7补齐的AES算法。该取值下,URI属性必须出现,IV属性可选。

u  SAMPLE-AES ,标明文件片中包含使用AES-128加密的媒体取样,如audio或video,这些取样的加密和封装方式与媒体文件的编码和文件片类型有关。

客户端遇到无法识别的METHOD,放弃解密。

 

URI : 引号包含的字符串,其URI指明获取密钥的地址,出METHOD取值为NONE时,该属性为必须。

 

Iv:   十六进制整数,指明密钥使用的初始向量。

 

KEYFORMAT: 引号包含的字符串,指明密钥在URI中的表现形式。该属性可选,当该属性不出现时,其具有一个默认值”identity”。

 

KEYFORMATVERSION:引号包含的字符串,其内容为斜杠分隔的整数,如”1/3”,当有多个KEYFORMAT时,指明实例的版本,不出现表示值为1 。

 

3.4.5 EXT-X-PROGRAM-DATE-TIME

         标明其后一个文件片第一个取样的日期和事件,形式如下:

         #EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ>

         示例:#EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00

 

3.4.6 EXT-X-ALLOW-CACHE

         作用于全局文件片,表明客户端是否缓存文件资源。

         #EXT-X-ALLOW-CACHE:<YES|NO>

 

3.4.7 EXT-X-PLAYLIST-TYPE

         标明播放列表的类型信息,作用于整个播放列表文件,可选的。

         #EXT-X-PLAYLIST-TYPE:<EVENT|VOD>

 

3.4.8 EXT-X-ENDLIST

         标明其后再没有文件片,可以出现在播放列表文件的任意位置,但只能出现一次。

 

3.4.9 EXT-X-MEDIA

         用于对统一内容会有不同翻译的媒体播放列表。属性有点多,而且感觉不是很重要,不翻了,自己看吧。

http://tools.ietf.org/html/draft-pantos-http-live-streaming-13

 

3.4.10 EXT-X-STREAM-INF

         用于指定一个变化的流(多码流)。其属性提供了该可变留的一些信息。其标明它后面的URI是该可变流的一个可选项。

         该标签不应出现在媒体文件播放列表中。

         #EXT-X-STREAM-INF:<attribute-list>

<URI>

 

其属性定义如下:

BANDWIDTH : 指定码率的整数。应该为URI中文件片码流的上限,必须。

 

CODECS: 引号包含的字符串,内容为逗号分割的格式列表,每个格式标明一个媒体播放列表中的文件片的媒体取样类型。该属性属于推荐属性(should,但是不加好像也没事)。

 

RESOLUTION: 十进制坐标,标明资源的分辨率。

 

PROGRAM-ID: 实际使用中用到过,但是不知道其作用,文档中也没写。

 

还有一些其他的属性,去看英文吧。

 

3.4.11 EXT-X-DISCONTINUITY

         标明前后两个文件片编码方式不连续,比如:

         文件类型,track的类型和数量,编码参数,编码序号,时间戳序号等

         #EXT-X-DISCONTINUITY

         其不应出现在主播放列表中。实际中还没发现它的用处。

 

3.4.12 EXT-X-DISCONTINUITY-SEQUENCE

         该标签允许多码流不同码流之间同步,并能够使多个流在它们的媒体播放列表文件中加入EXT-X-DISCONTINUITY标签。

         #EXT-X-DISCONTINUITY-SEQUENCE:<number>

         其中number是一个十进制证书。不连续的文件片序列号必须是递增的。

         一个媒体播放列表不能包含多于一个EXT-X-DISCONTINUITY-SEQUENCE标签。如果列表文件中不包含该标签,则文件列表中第一个文件片的不连续序列号标记为0。

         本标签必须出现在第一个文件片之前,且必须出现在EXT-X-DISCONTINUITY标签前,且只能出现在媒体播放文件列表中 。

         如果媒体列表文件中EXT-X-PLAYLIST-TYPE的值为VOD或者EVENT,则不可使用本标签。

 

3.4.13 EXT-X-I-FRAMES-ONLY

本选项标明播放列表文件中文件片都描述了一个I关键帧。本标签作用于整个播放列表文件。

#EXT-X-I-FRAMES-ONLY

在拥有 该标签的播放列表文件中,文件片的时长是从某一个I帧开始到另外一个I帧的出现或者文件列表末尾。

包含关键帧资源的媒体文件必须以传输流PAT/PMT开始,或者与EXT-X-MAP标签一起出现。

包含有EXT-X-BYTERANGE标签的I帧分片的字节范围不能包含PAT/PMT。本标签只应该出现在媒体文件列表中。

 

3.4.14 EXT-X-MAP

         本标签用于说明如何获取用于解析媒体文件片的头部信息,比如传输流 PAT/PMT 或者WebVTT头。

         它作用于其后出现的所有文件片,直到文件末尾或EXT-X-DISCONTINUITY出现。

         #EXT-X-MAP:<attribute-list>

 

         选项情况如下:

         URI:”string” ,指明包含头部信息的资源的URI,必须的。

        

        

         BYTERANGE:”string”,指明URI资源的一定字节范围,可选的。不填写该属性时,指代URI所指的全部资源。

 

         这个标签的使用情景:当播放列表文件中的第一个文件片在资源的开头部分没有和PAT/PMT紧随,且文件片带有EXT-X-I-FRAMES-ONLY标签。该标签不应出现在主列表文件中。

 

3.4.15 EXT-X-I-FRAME-STREAM-INF

         本标签标明媒体播放列表文件包含多媒体内容的I-frame。本标签单独使用,不依赖于任何资源的URI。

         #EXT-X-I-FRAME-STREAM-INF:<attribute-list>

本标签支持所有EXT-X-I-FRAME-STREAM-INF支持的属性,并额外支持一个URI属性。

 

3.4.16 EXT-X-INDEPENDENT-SEGMENTS

         本标签标明,一个分片可以独立解码而不需要其他分片的信息。本选项作用于列表文件中的所有项目。

         #EXT-X-INDEPENDENT-SEGMENTS

         本选项可选,但只能使用一次,当其放置在主列表文件中时,其作用于所有播放列表文件中的每一个文件片。貌似很有用啊。

 

3.4.17 EXT-X-INDEPENDENT-SEGMENTS

         没太看懂他的作用,有时间测试了之后再翻译这段。

 

3.4.18 EXT-X-VERSION

         本标签标明播放列表文件兼容版本。

         #EXT-X-VERSION:<n>

         这个标签没啥意思,自己看看吧。

        

 hls协议地址 :http://tools.ietf.org/html/draft-pantos-http-live-streaming-13#section-3.4.11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值