http-live-streaming

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

1. HTTP直播流简介


   HTTP实时流媒体提供了一个可靠的,成本效益的手段
   通过互联网提供连续和长时间的视频。它
   允许接收器使媒体的比特率适应当前
   网络条件,以保持不间断播放
   最好的质量。它支持插页式内容边界。
   它为媒体加密提供了一个灵活的框架。它可以
   有效地提供相同内容的多个呈现,例如
   音频翻译。它提供了与大规模HTTP的兼容性
   缓存基础设施以支持向大量受众传递。


   自2009年首次发布草案以来,HTTP Live Streaming就已经具备
   已经被广泛的内容制作者实施和部署,
   工具供应商,分销商和设备制造商。在里面
   随后的八年,协议已被广泛的提炼
   与各种媒体流媒体实现者进行审查和讨论。


   本文档的目的是为了促进互操作性
   在HTTP实时流媒体实现之间通过描述媒体
   传输协议。使用这个协议,客户端可以收到一个
   来自服务器的连续媒体流以便并行呈现。


   本文档介绍协议的第7版。

2.概述


    多媒体演示由统一资源指定
    标识符(URI)[RFC3986]播放列表。


    播放列表是媒体播放列表或主播放列表。 两者都是
    包含URI和描述性标签的UTF-8文本文件。


    媒体播放列表包含媒体片段的列表,当播放时

    依次播放多媒体演示。

   Here is an example of a Media Playlist:

   #EXTM3U
   #EXT-X-TARGETDURATION:10

   #EXTINF:9.009,
   http://media.example.com/first.ts
   #EXTINF:9.009,
   http://media.example.com/second.ts
   #EXTINF:3.003,
   http://media.example.com/third.ts

第一行是格式标识符标签#EXTM3U。 该线
    包含#EXT-X-TARGETDURATION表示所有媒体片段都会
    10秒或更少。 然后宣布三个媒体分段。
    第一和第二是9.009秒长; 第三个是3.003
   秒。

要播放此播放列表,客户端首先下载它然后
    下载并播放其中声明的每个媒体细分。该
    客户端会按照本文档中所述重新加载播放列表以发现
    任何额外的细分。 数据应该通过HTTP [RFC7230]传送,但是
    通常一个URI可以指定任何可以可靠传输的协议

    指定的资源按需。

主播放列表可以描述更复杂的演示。 一个
    主播放列表提供了一组变体流,其中每一个
    描述了相同内容的不同版本。


    变体流包括指定媒体的媒体播放列表
    以特定的比特率编码,以特定的格式编码,并以
    包含视频的媒体的特定分辨率。


    变体流也可以指定一组Renditions。译丛
    是内容的替代版本,例如制作的音频
    不同的语言或不同的摄像机角度录制的视频。


    客户应该在不同的变体流之间切换以适应
    网络状况。 客户应根据用户选择Renditions

    优先。

3. Media Segments


媒体播放列表包含一系列组成的媒体分段
   整体介绍。媒体段由URI和
   可选地一个字节范围。


   媒体播放列表中显示了每个媒体段的持续时间
   通过其EXTINF标签(第4.3.2.1节)。


   媒体播放列表中的每个片段都有一个唯一的整数媒体序列
   数。媒体中第一个片段的媒体序列号
   播放列表为0,或在播放列表中声明(第4.3.3.2节)。
   每隔一段的媒体序列号等于
   媒体序列号之前的分段加1。


   每个媒体段必须带有编码的延续
   从以前的媒体片段末尾开始的比特流
   序列号,其中序列中的值如时间戳和
   连续性计数器必须不中断。唯一的例外
   是媒体播放列表中第一个出现在媒体播放列表中的媒体细分
   媒体片段明确表示为不连续
   (第4.3.2.3节)。未标记的介质不连续可能会触发
   播放错误。


   包含视频的任何媒体片段都应该包含足够的内容
   信息来初始化视频解码器并解码连续集合
   包含段中最后一帧的帧;网络
   如果细分中有足够的信息,效率会得到优化
   解码段中的所有帧。例如,任何媒体细分
   包含H.264视频应该包含一个IDR;之前的帧

   第一个IDR将被下载但可能被丢弃。

3.1.  Supported Media Segment Formats

所有媒体片段必须采用本节所述的格式。
    其他媒体文件格式的传输未定义。


    某些媒体格式需要一个通用字节序列来初始化a
    可以解析Media Segment之前的解析器。 这种格式特定的
    序列被称为媒体初始化部分。 媒体
    初始化部分可以由EXT-X-MAP指定
    (第4.3.2.5节)标签。 媒体初始化部分不可以

    包含示例数据。

3.2.  MPEG-2 Transport Streams

MPEG-2传输流由[ISO_13818]指定。


    MPEG-2传输流的媒体初始化部分
    段是程序关联表(PAT),后面是程序
    地图表(PMT)。


    传输流片段必须包含一个MPEG-2节目;
    没有定义多节目传输流的回放。 每
    传输流段必须包含一个PAT和一个PMT,或者有一个
    EXT-X-MAP(第4.3.2.5节)标签应用于它。 前两个
    没有EXT-X-MAP标签的段中的传输流数据包应该
    成为一个PAT和一个PMT。

3.3.  Fragmented MPEG-4

MPEG-4片段由ISO基本媒体文件格式指定
   [ISOBMFF]。与具有电影盒的常规MPEG-4文件不同
   ('moov')包含示例表和一个媒体数据框('mdat')
   包含相应的样本,由MPEG-4片段组成
   包含样本表子集的Movie Fragment Box('moof')
   和包含这些样本的媒体数据框。使用MPEG-4
   片段确实需要一个Movie Box进行初始化,但该Movie需要
   Box仅包含非特定于样本的信息,如曲目和
   样本描述。


   分段的MPEG-4(fMP4)段是如由其定义的“段”
   [ISOBMFF]的第3部分,包括对媒体数据框的限制
   在第8.16节[ISOBMFF]中。


   fMP4段的媒体初始化部分是ISO基础
   媒体文件,可以初始化该段的解析器。


   广义而言,fMP4分段和媒体初始化部分是
   [ISOBMFF]文件也符合本文所述的约束
   部分。


   fMP4段的媒体初始化部分必须包含一个
   包含与之兼容的品牌的文件类型框('ftyp')
   'iso6'或更高。文件类型框必须跟着一个电影框。
   电影盒必须为每个音轨包含一个音轨盒('trak')
   fMP4片段中的片段框('traf'),具有匹配的track_ID。
   每个Track Box应该包含一个样本表,但是它的样本数量
   必须是零。电影标题框('mvhd')和曲目标题框
   ('tkhd')的持续时间必须为零。电影延伸框('mvex')
   必须按照最后一个轨道框。请注意,CMAF标题[CMAF]符合

   所有这些要求。

 在fMP4片段中,每个轨道片段框必须包含一个轨道
    片段解码时间框('tfdt')。 fMP4段必须使用电影 - 
    片段相对寻址。 fMP4段不得使用外部
    数据参考。 请注意,CMAF分部符合这些要求。


    包含EXT-X-I-FRAMES-ONLY的播放列表中的fMP4段
    (第4.3.3.6节)标签可以省略媒体数据盒的部分

    跟随I帧样本数据。

    媒体播放列表中的每个fMP4段都必须有一个EXT-X-MAP标签

    适用于它。

3.4.  Packed Audio

打包的音频段包含编码的音频样本和ID3标签
    只是简单的包装在一起,最小的框架,
    样本时间戳。 支持的打包音频格式是带有ADTS的AAC
    框架[ISO_13818_7]; MP3 [ISO_13818_3]; AC-3 [AC_3]; 和增强
    AC-3 [AC_3]。


    打包音频段没有媒体初始化部分。


    每个打包音频段必须发出第一个时间戳的信号
    在分段的开始处使用ID3 PRIV标签[ID3]进行采样。
    ID3 PRIV所有者标识必须是
   “com.apple.streaming.transportStreamTimestamp”。 ID3有效载荷必须
    是一个33位的MPEG-2节目基本流时间戳,表示为a
    大端八位字节数,高31位设为零。
    没有这个ID3标签,客户不应该播放打包音频段。

3.5.  WebVTT

WebVTT段是WebVTT [WebVTT]文件的一部分。 WebVTT插入
   分段带有字幕。


   WebVTT段的媒体初始化部分是WebVTT
   头。


   每个WebVTT片段必须包含所有预期的字幕提示
   在段EXTINF指示的时段内显示
   持续时间。每个提示的开始时间偏移量和结束时间偏移量必须
   指示该提示的总显示时间,即使提示的一部分
   时间范围在分段时段之外。 WebVTT部分可以
   不包含暗示;这表示不会显示字幕
   在那个时期。


   每个WebVTT段都必须以WebVTT头部开头或具有
   应用EXT-X-MAP标签。
   为了同步音频/视频和字幕之间的时间戳,
   一个X-TIMESTAMP-MAP元数据头应该被添加到每个WebVTT中
   头。此标题将WebVTT提示时间戳映射到MPEG-2(PES)
   时间戳在变体流的其他演绎中。其格式是:


   X-TIMESTAMP-MAP =本地:<提示时间>,MPEGTS:<MPEG-2时间>
   例如X-TIMESTAMP-MAP = LOCAL:00:00:00.000,MPEGTS:900000


   LOCAL属性中的提示时间戳可能会超出范围
   该段所涵盖的时间。


   如果WebVTT段没有X-TIMESTAMP-MAP,则为客户端
   必须假设0的WebVTT提示时间映射到MPEG-2时间戳
   0。

4.  Playlists

本节介绍HTTP Live使用的播放列表文件
   流。 在本节中,“必须”和“不能”指定规则
    用于合法播放列表文件的语法和结构。 播放列表
    违反这些规则是无效的; 客户端必须解析它们。
    见6.3.2节。


    播放列表文件的格式是从M3U [M3U]
    播放列表文件格式并从该早期文件继承两个标签
    格式:EXTM3U(第4.3.1.1节)和EXTINF(第4.3.2.1节)。


    在本节中,标记是使用BNF风格的语法指定的。


    每个播放列表文件必须可由路径组件识别
    的URI或HTTP Content-Type。 在第一种情况下,路径必须
    以.m3u8或.m3u结尾。 在第二个,HTTP内容类型
    必须是“application / vnd.apple.mpegurl”或“audio / mpegurl”。客户端
    应该拒绝解析不明确的播放列表。

4.1.  Definition of a Playlist

播放列表文件必须以UTF-8 [RFC3629]编码。他们不可以
   包含任何字节顺序标记(BOM);客户应拒绝播放列表
   其中包含BOM或不解析为UTF-8。播放列表文件必须
   不包含UTF-8控制字符(U + 0000至U + 001F和U + 007F至
   U + 009F),但CR(U + 000D)和LF(U + 000A)除外。所有
   字符序列必须根据Unicode进行标准化
   规范化形成“NFC”。请注意,US-ASCII [US_ASCII]符合
   这些规则。


   播放列表文件中的行由单个换行符终止
   字符或回车符,然后换行
   字符。每一行都是一个URI,空白或者以字符开头
   '#'。空白行被忽略。白色空间不得存在,
   除了明确指定的元素外。


   以字符“#”开头的行是注释或标签。
   标签以#EXT开头。它们区分大小写。所有其他行
   以'#'开始的是评论,应该被忽略。


   一个URI行标识一个媒体段或播放列表文件(见
   第4.3.4.2节)。每个媒体段由一个URI和

   适用于它的标签。

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


   播放列表中的URI,无论是URI行还是标记的一部分,都可以
   是相对的。任何相对的URI被认为是相对的
   包含它的播放列表的URI。


   媒体播放列表文件的持续时间是持续时间的总和
   其中的媒体细分。


   媒体段的分段比特率是媒体的大小
   细分除以其EXTINF持续时间(第4.3.2.1节)。注意
   这包括容器开销,但不包括开销
   由传送系统施加,例如HTTP,TCP或IP报头。


   媒体播放列表的峰值比特率是最大的比特率
   总持续时间在0.5之间的任何连续的分段集合
   和目标持续时间的1.5倍。一组的比特率是
   通过用段的总和除以段长度之和来计算
   分段持续时间。


   媒体播放列表的平均分段比特率是
   媒体播放列表中每个媒体段的大小(以比特为单位)被划分
   媒体播放列表持续时间。请注意,这包括容器
   开销,而不是HTTP或其他交付强加的开销

   系统。

4.2.  Attribute Lists

某些标签的值是属性列表。 属性 - 
    列表是一个逗号分隔的属性/值对列表,没有

   空白。

属性/值对具有以下语法:


   为AttributeName =的AttributeValue


   一个AttributeName是一个不带引号的字符串,其中包含字符
   设置[A..Z],[0..9]和' - '。因此,AttributeNames只包含
   大写字母,不小写。绝不能有任何空格
   在AttributeName和'='字符之间,也不在'='
   字符和AttributeValue。


   AttributeValue是以下之一:


   十进制整数:来自集合的未加引号的字符串
      [0..9]表示范围内的基数为10的整数
      从0到2 ^ 64-1(18446744073709551615)。一个十进制整数可能是
      从1到20个字符。


   o十六进制序列:一个未加引号的字符串
      设置前缀为0x或0X的[0..9]和[A..F]。最大值
      十六进制序列的长度取决于其AttributeName。


   o十进制浮点数:一个未加引号的字符串
      设置[0..9]和'。'它表示一个非负的浮点数
      十进制位置表示法中的数字。


   o signed-decimal-floating-point:一个不带引号的字符串
      从集合[0..9],' - '和'。'表示签名
      十进制位置表示法中的浮点数。


   o quoted-string:一对双字符串中的一串字符,
      引号(0x22)。以下字符不能出现在a中
      quoted-string:换行符(0xA),回车符(0xD)或者double
      报价(0x22)。引用的字符串AttributeValues应该被构造
      所以按字节进行比较足以测试两个引用的字符串,
      字符串AttributeValues相等。请注意,这意味着case-
      敏感的比较。


   o枚举字符串:来自集合的未加引号的字符串
      由Attribute明确定义。一个枚举字符串会
      从不包含双引号(“),逗号(,)或空格。


   o十进制分辨率:由“x”分隔的两个十进制整数
      字符。第一个整数是一个水平像素尺寸
      (宽度);第二个是垂直像素尺寸(高度)。


   指定给定AttributeName的AttributeValue的类型

   由属性定义。

给定的AttributeName不能在给定的对象中出现多次

    属性列表。 客户应该拒绝播放这样的播放列表。

4.3.  Playlist Tags
    播放列表标签指定播放列表的全局参数,或
    有关出现的媒体片段或媒体播放列表的信息
    在他们之后。

4.3.1.  Basic Tags


   These tags are allowed in both Media Playlists and Master Playlists.


4.3.1.1.  EXTM3U


    EXTM3U标签指示该文件是扩展M3U [M3U]
    播放列表文件。 它必须是每个媒体播放列表的第一行
    每个主播放列表。 其格式是:


   #EXTM3U


4.3.1.2.  EXT-X-VERSION


   

 EXT-X-VERSION标签指示的兼容版本
    播放列表文件,其关联媒体及其服务器。


    EXT-X-VERSION标签适用于整个播放列表文件。 它的
    格式是:

#EXT-X-VERSION:<N>


    其中n是指示协议兼容性版本的整数
    数。


    它必须出现在包含标签或属性的所有播放列表中
    与协议版本1不兼容
    与老客户的互操作性。 第7节规定了最低限度
    任何给定播放列表的兼容版本号的值
    文件。


    播放列表文件不能包含多个EXT-X-VERSION标签。 如果
    客户端遇到具有多个EXT-X-VERSION标签的播放列表

    必须拒绝它。

4.3.2.  Media Segment Tags

  每个媒体分段由一系列媒体分段标记指定
    后跟一个URI。 一些媒体分段标签只适用于下一个
    分割; 其他人适用于所有后续部分直到另一部分
    相同标签的实例。


    媒体片段标签不得出现在主播放列表中。客户端
    必须拒绝包含媒体分段标签和主播的播放列表
    播放列表标签(第4.3.4节)。

4.3.2.1.  EXTINF

EXTINF标记指定媒体分段的持续时间。 它适用
    仅限于下一个媒体分部。 每个媒体都需要这个标签
    分割。 其格式是:


   #EXTINF:<持续时间>,[<TITLE>]


    其中duration是一个十进制浮点数或十进制整数
    (如第4.2节所述),指定的持续时间
    媒体细分在几秒钟内。 通常,持续时间应该是十进制的 - 
    浮点,具有足够的精度以避免可察觉的错误
    分段持续时间是累积的。 如果兼容版本
    数量小于3,持续时间必须是整数。 持续时间
    被报告为整数应该四舍五入到最接近的整数。
    逗号后面的行的其余部分是一个可选的人机对话框,
    媒体细分的可读信息标题以原始形式表达

    UTF-8文本。



4.3.2.2.  EXT-X-BYTERANGE

EXT-X-BYTERANGE标签指示一个媒体段是一个子范围
    的URI所标识的资源。 它只适用于下一个
    在播放列表中跟随它的URI行。 其格式是:


   #EXT-X-BYTERANGE:<N>[@<O>]


    其中n是一个十进制整数,表示子范围的长度
    以字节为单位 如果存在,o是一个十进制整数,表示开始
    子范围,作为从资源开始的字节偏移量。
    如果o不存在,则子范围从下一个字节开始
    之前媒体分部的子范围。


    如果o不存在,以前的媒体段必须出现在
    播放列表文件并务必是相同媒体资源的子范围,或
    媒体段未定义,播放列表必须被拒绝。
    没有EXT-X-BYTERANGE标签的媒体段包含整个
    由其URI标识的资源。
    使用EXT-X-BYTERANGE标签需要一个兼容版本

    数量为4或更多。

4.3.2.3.  EXT-X-DISCONTINUITY

   EXT-X-DISCONTINUITY标签指示不连续
    跟随它的媒体细分以及之前的媒体细分。


    其格式是:


   #EXT-X-DISCONTINUITY


    EXT-X-DISCONTINUITY标签必须存在,如果有变化
    任何以下特征:


    o文件格式


    o轨道的号码,类型和标识符


    o时间戳序列


    EXT-X-DISCONTINUITY标签应该存在,如果有变化
    任何以下特征:


    o编码参数


    o编码序列


    有关更多信息,请参阅第3节,第6.2.1节和第6.3.3节

    关于EXT-X-DISCONTINUITY标签。

4.3.2.4.  EXT-X-KEY

媒体分段可以加密。 EXT-X-KEY标签指定如何
    解密它们。 它适用于出现在每个媒体段之间
    它与播放列表文件中的下一个EXT-X-KEY标签相同
    KEYFORMAT属性(或播放列表文件的结尾)。 两个或更多
    具有不同KEYFORMAT属性的EXT-X-KEY标签可适用于
    如果它们最终产生相同的解密,则是相同的媒体分段

    键。

The format is:

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

attribute包含下面:

METHOD:

该值是一个指定加密的枚举字符串方法。 该属性是必需的。 定义的方法有:NONE,AES-128和SAMPLE-AES。

NONE的加密方法意味着媒体段不是加密。如果加密方法是NONE,则为其他属性绝不能在场。
 媒体分段是AES-128信号的加密方法使用高级加密标准完全加密带有128位密钥,密码块链接和PKCS7的[AES_128]填充[RFC5652]。 CBC在每个分段边界上重新启动,使用IV属性值或媒体序列号作为IV;见第5.2节。

   SAMPLE-AES的加密方法意味着媒体分段包含加密的媒体样本,如音频或视频 使用高级加密标准[AES_128]。这些媒体如何
 流被加密并封装在一个段中取决于媒体编码和片段的媒体格式。 fMP4媒体 使用Common的'cbcs'方案对段进行加密加密[COMMON_ENC]。其他媒体分段的加密包含H.264 [H_264],AAC [ISO_14496],AC-3 [AC_3],和增强型AC-3 [AC_3]媒体流在HLS中进行了描述 示例加密[SampleEnc]规范。 IV属性可以出席;见第5.2节。

URI:

该值是一个带引号的字符串,其中包含指定方式的URI获得钥匙。 该属性是必需的,除非METHOD是NONE。

 IV:

该值是一个指定128位的十六进制序列无符号整数初始化Vector用于与键一起使用。使用IV属性需要一个兼容版本号2或更高。 有关何时使用IV属性的信息,请参见第5.2节。 

KEYFORMAT:

该值是一个带引号的字符串,用于指定密钥的方式在由URI标识的资源中表示; 见第5节

了解更多细节。 该属性是可选的; 它的缺席表明了“身份”的隐含价值。

使用KEYFORMAT属性需要5或更大的兼容版本号。

KEYFORMATVERSION:

该值是包含一个或多个肯定的带引号的字符串用“/”字符分隔的整数(例如“1”,“1/2”,“  或“1/2/5”)。 如果多个版本的特定KEYFORMAT 被定义,这个属性可以用来表示哪个这个实例符合的版本。 这个属性是 可选的; 如果不存在,则其值被认为是“1”。使用KEYFORMATVERSIONS属性需要兼容性 版本号为5或更大。

   If the Media Playlist file does not contain an EXT-X-KEY tag then
   Media Segments are not encrypted.

   See Section 5 for the format of the key file, and Section 5.2,
   Section 6.2.3 and Section 6.3.6 for additional information on Media
   Segment encryption.

4.3.2.5.  EXT-X-MAP

EXT-X-MAP标签指定如何获取媒体初始化部分(第3节)需要解析适用的媒体细分。

它适用于在其中出现的每个媒体分段播放列表直到下一个EXT-X-MAP标记或直到结束播放列表。

   Its format is:

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

   The following attributes are defined:

URI:

该值是一个带引号的字符串,其中包含标识一个URI的URI包含媒体初始化部分的资源。 这个属性是必需的。

BYTERANGE:

该值是一个带引号的字符串,用于指定一个字节范围资源由URI属性标识。 这个范围应该只包含媒体初始化部分。 的格式

 第4.3.2.2节描述了字节范围。 该属性是可选的; 如果不存在,则字节范围是由URI指示的整个资源。

应为播放列表中的媒体片段提供EXT-X-MAP标记与第一媒体段(即,第一媒体段)的EXT-X-I-FRAMES-I帧)播放列表(或后面的第一个段)EXT-X-DISCONTINUITY标签)不会立即跟随媒体初始化部分在其资源的开始处。

在媒体播放列表中使用EXT-X-MAP标签EXT-X-I-FRAMES-ONLY标签需要5的兼容版本号或更高。 在媒体播放列表中使用EXT-X-MAP标签不包含EXT-X-I-FRAMES-ONLY标签需要兼容性版本号为6或更大。

4.3.2.6.  EXT-X-PROGRAM-DATE-TIME

EXT-X-PROGRAM-DATE-TIME标签将a的第一个样本关联起来媒体细分与绝对日期和/或时间。 它仅适用于
    下一个媒体分部。
    日期/时间表示为ISO / IEC 8601:2004 [ISO_8601]和
    应该表示秒的时区和小数部分:
   #EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDTHH:MM:ss.SSSZ>
    例如:
   #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+ 08:00
    EXT-X-PROGRAM-DATE-TIME标签应该提供毫秒精度。

    有关EXT-X的更多信息,请参见第6.2.1节和第6.3.3节-PROGRAM-DATE-TIME标签。

4.3.2.7.  EXT-X-DATERANGE

4.3.2.7.1.  Mapping SCTE-35 into EXT-X-DATERANGE

4.3.3.  Media Playlist Tags

4.3.3.1.  EXT-X-TARGETDURATION

4.3.3.2.  EXT-X-MEDIA-SEQUENCE

4.3.3.3.  EXT-X-DISCONTINUITY-SEQUENCE

4.3.3.4.  EXT-X-ENDLIST

4.3.3.5.  EXT-X-PLAYLIST-TYPE

4.3.3.6.  EXT-X-I-FRAMES-ONLY

4.3.4.  Master Playlist Tags

4.3.4.1.  EXT-X-MEDIA

4.3.4.1.1.  Rendition Groups

4.3.4.2.  EXT-X-STREAM-INF

4.3.4.2.1.  Alternative Renditions

4.3.4.3.  EXT-X-I-FRAME-STREAM-INF

4.3.4.4.  EXT-X-SESSION-DATA

4.3.4.5.  EXT-X-SESSION-KEY

4.3.5.  Media or Master Playlist Tags

4.3.5.1.  EXT-X-INDEPENDENT-SEGMENTS

4.3.5.2.  EXT-X-START

5.  Key files

5.1.  Structure of Key files

5.2.  IV for [AES_128]

6.  Client/Server Responsibilities

6.1.  Introduction

本节介绍服务器如何生成播放列表和媒体片段以及客户端如何下载它们以进行播放。

6.2.  Server Responsibilities

     源媒体的制作不在此范围之内文件,它只是假设连续编码媒体的来源包含演示文稿。服务器必须将源媒体分成单独的媒体段的持续时间小于或等于一个恒定的目标持续时间。 比计划的目标持续时间更长的细分可以触发播放失速和其他错误。

     服务器应该尝试在源点上分割源媒体支持各个媒体片段的有效解码,例如 在数据包上 和关键帧边界。

    服务器必须为每个启用它的媒体段创建一个URI客户端获取细分数据。 如果服务器支持部分加载资源(例如,通过HTTP范围请求),它可以指定使用EXT-X-BYTERANGE分段为更大资源的子范围标签。

    在客户端加载的播放列表中指定的任何媒体片段必须可以立即下载,否则播放错误可以发生。 一旦下载开始,它的传输速率不应该是受到segment 生产的制约。

     HTTP服务器应该传输文本文件 - 比如播放列表和WebVTT细分 - 如果客户使用“gzip”Content-Encoding表示它已准备好接受它。

     服务器必须创建一个媒体播放列表文件(第4节)包含服务器希望制作的每个媒体片段的URI可用,按其播放顺序。

    EXT-X-VERSION标签的值(第4.3.1.2节)不应该是大于标签和属性的要求播放列表 - 请参阅第7节。

   对播放列表文件的更改必须从该点开始进行原子操作的客户端视图,或播放错误可能会发生

   The server MUST NOT change the Media Playlist file, except to:

      Append lines to it (Section 6.2.1).

      Remove Media Segment URIs from the Playlist in the order that they
      appear, along with any tags that apply only to those segments
      (Section 6.2.2).

      Increment the value of the EXT-X-MEDIA-SEQUENCE or EXT-X
      -DISCONTINUITY-SEQUENCE tags (Section 6.2.2).

      Add an EXT-X-ENDLIST tag to the Playlist (Section 6.2.1).

     如果媒体播放列表携带 EXT-X-PLAYLIST-TYPE tag ,你意味着服务器不能随意更新播放列表。 EXT-X-PLAYLIST-TYPE标签
 VOD的值表示播放列表文件不能改变。 一个值为EVENT的EXT-X-PLAYLIST-TYPE标记表示服务器不得更改或删除播放列表文件的任何部分; 它可以附加行。

       媒体播放列表中EXT-X-TARGETDURATION标签的值务必不变。 典型的目标持续时间是10秒。

     除此之外的改动,可能导致播放器异常或者不一致行为。

   媒体播放列表中的每个媒体段都具有整数不连续性序列号。 不连续序列号可用于除媒体内的时间戳以同步媒体 跨越不同演绎的细分。

  A segment's Discontinuity Sequence Number is the value of the EXT-X
   -DISCONTINUITY-SEQUENCE tag (or zero if none) plus the number of
   EXT-X-DISCONTINUITY tags in the Playlist preceding the URI line of
   the segment.
服务器可以将绝对日期和时间与媒体相关联通过对其应用EXT-X-PROGRAM-DATE-TIME标记来分段。 这个定义了(墙上时钟)日期和时间的信息映射由标记指定给段中的第一个媒体时间戳,这可以用作寻求,显示或其他的基础

   目的。 如果一个服务器提供这个映射,它应该应用一个 EXT-X-PROGRAM-DATE-TIME标记到每个有一个段的段EXT-X-DISCONTINUITY标签应用于它。

服务器不得将任何EXT-X-PROGRAM-DATE-TIME标签添加到播放列表中这会导致节目日期和媒体分段之间的映射变得模糊。

6.2.1.  General Server Responsibilities

6.2.2.  Live Playlists

6.2.3.  Encrypting Media Segments

6.2.4.  Providing Variant Streams

服务器可以提供多个媒体播放列表文件来提供不同的
   相同演示文稿的编码。如果它这样做,它应该提供
   列出每个变体流允许的主播放列表文件
   客户端动态地在编码之间切换。


   主播放列表用EXT-X-STREAM-
   INF标签和I-frame Variant Streams与EXT-X-I-FRAME-STREAM-INF
   标签。


   如果EXT-X-STREAM-INF标签或EXT-X-I-FRAME-STREAM-INF标签包含
   CODECS属性,属性值必须包含每个媒体
   格式[RFC6381]出现在任何媒体段中
   由变体流指定的演绎。


   生成变体时,服务器必须满足以下约束条件
   Streams为了让客户能够无缝切换它们:


      每个变体流必须呈现相同的内容。


      匹配Variant Streams中的内容必须有匹配的时间戳。
      这允许客户端同步媒体。


      匹配Variant Streams中的内容必须匹配
      不连续序列号 - 见第4.3.3.3节。


      每个变体流中的每个媒体播放列表必须相同
      目标时长。唯一的例外是SUBTITLES Renditions和
      包含EXT-X-I-FRAMES-ONLY标签的媒体播放列表,可以
      如果他们有EXT-X-PLAYLIST-

      VOD的类型。

      Each Media Playlist in each Variant Stream MUST have the same
      target duration.  The only exceptions are SUBTITLES Renditions and
      Media Playlists containing an EXT-X-I-FRAMES-ONLY tag, which MAY
      have different target durations if they have an EXT-X-PLAYLIST-
      TYPE of VOD.
出现在一个变体流的媒体播放列表中的内容
      不在另一个必须出现在开始或结束
      的媒体播放列表文件,并且不得超过目标
      持续时间。


      如果任何媒体播放列表具有EXT-X-PLAYLIST-TYPE标签,则所有媒体
      播放列表必须具有相同的EXT-X-PLAYLIST-TYPE标签
      值。


      如果播放列表包含带值的EXT-X-PLAYLIST-TYPE标签
      VOD,每个变体中每个媒体播放列表的第一部分
      流必须从相同的媒体时间戳开始。


      如果主播放列表中的任何媒体播放列表包含EXT-X
      -PROGRAM-DATE-TIME标记,然后是该主设备中的所有媒体播放列表
      播放列表必须包含一致的EXT-X-PROGRAM-DATE-TIME标签
      日期和时间到媒体时间戳的映射。


      每个变体流必须包含相同的一组日期范围
      一个由具有相同ID的EXT-X-DATERANGE标签标识
      属性值并包含相同的一组属性/值
      对。


   此外,为了最广泛的兼容性,变体流应该
   包含相同的编码音频比特流。这允许客户
   在变化流之间切换而不会听到干扰。


   Variant Streams的规则也适用于替代转换 - 
   参见第4.3.4.2.1节。

6.3.  Client Responsibilities

6.3.1.  General Client Responsibilities

客户端如何获取播放列表文件的URI不在
    本文档的范围; 据推测已经这样做了。


    客户端从URI获取播放列表文件。 如果播放列表
    如此获得的文件是一个主播放列表,客户可以选择一个
    变体流从主播放列表加载。


    客户必须确保加载的播放列表符合第4节和
    EXT-X-VERSION标签(如果存在)指定协议版本
    由客户支持; 如果任一检查失败,则客户端禁止

    尝试使用播放列表,或者可能会发生意外行为。

如果播放列表中的任何URI元素包含一个URI方案
    客户端无法处理,客户端必须停止播放。 所有客户
    必须支持HTTP方案。


    在解析播放列表,客户端时支持向前兼容性
    必须:


    o忽略任何无法识别的标签。


    o忽略任何具有无法识别的属性/值对
      AttributeName会。


    o忽略包含类型的属性/值对的任何标签
       枚举字符串的属性名称被识别,但是其中的
       AttributeValue不被识别,除非定义了
       否则属性说。


    客户端用于在Variant Stream之间切换的算法是
    超出了本文的范围。

6.3.2.  Loading the Media Playlist file

每次播放列表加载或重新加载媒体播放列表时
   URI,客户端必须确定要加载的下一个媒体段
   如果它打算播放演示文稿,在第6.3.5节中描述
   通常(即按标称播放速率按播放列表顺序)。


   如果媒体播放列表包含EXT-X-MEDIA-SEQUENCE标签,则
   客户端应该假设其中的每个媒体段都会变成
   播放列表文件加载时不可用
   播放列表文件的持续时间。


   客户可以使用段媒体序列号来跟踪
   当播放列表存在时,媒体段在播放列表中的位置
   重新加载。


   客户不得假定具有相同媒体序列的片段
   不同变种流或变种中的数量相同
   在演讲中的位置;播放列表可以有独立的媒体
   序列号。相反,客户端必须使用相对位置
   播放列表时间轴上的每个片段及其不连续性
   序列号来定位相应的片段。


   客户端必须加载每个Rendition的媒体播放列表文件
   选定用于播放以便定位特定于该媒体的媒体
   移交。但是,为了防止服务器上不必要的负载,它应该

   不要加载任何其他Rendition的播放列表文件。

对于某些变体流,可以选择这样做的Renditions
    不包括由EXT-X-STREAM-INF标签指定的Rendition。 如
    如上所述,客户端不应该加载那些Rendition
   案例。

6.3.3.  Playing the Media Playlist file

    客户端应该首先选择从那个分片开始播放。如果EXT-X-ENDLIST没有出现,而且客户希望正常速度播放,那么不应该选择离结束时间点少于3个分片的段开始播放,因为可能导致停顿。

    正常播放可以通过播放中的媒体片段来实现
   为了它们出现在播放列表中。客户可以出示
   可用媒体以其希望的任何方式,包括正常播放,
   随机存取和特技模式。


   媒体片段中的样本的编码参数
   媒体播放列表中的多个媒体片段应该保持一致。
   但是,客户应该按照原样处理编码更改
   遇到,例如通过缩放视频内容以适应a
   分辨率变化。如果变体流包含解决方案
   属性,客户端应该显示矩形内的所有视频
   与该决议相同的比例。


   客户应该准备好处理一个特定的多个轨道
   类型(例如音频或视频)。没有其他偏好的客户应该
   选择具有最低数字轨道标识符的轨道
   可以玩。


   客户端应该忽略传输流内的私有流
   他们不承认。私人流可用于支持
   不同的设备具有相同的流,虽然流作者
   应该对这种额外的网络负载敏感。


   客户端必须准备重置它的解析器和解码器,
   在播放具有EXT-X-DISCONTINUITY标记的媒体分段之前
   应用于它,否则会发生播放错误。


   客户应该尝试在时间之前加载媒体片段
   他们将需要不间断播放来弥补

   等待时间和吞吐量的暂时变化。

如果该值包含时区信息,则客户端应将其带入
    帐户; 如果不是,客户可能会认为时间是本地的。


    请注意,播放列表中的日期可以引用内容的时间
    产生(或其他时间),这与时间无关
    回放。


    如果播放列表中的第一个EXT-X-PROGRAM-DATE-TIME标签出现在后面
    一个或多个媒体分段URI,客户端应该外推
    从该标记向后(使用EXTINF持续时间和/或媒体)
    时间戳)将日期与这些段相关联。 关联一个
    与任何其他没有EXT-X的媒体片段一起使用
    -PROGRAM-DATE-TIME标签直接应用于它,客户端应该
    从最后一个EXT-X-PROGRAM-DATE-TIME标签推断
    出现在播放列表中的该段之前。

6.3.4.  Reloading the Media Playlist file


 客户端必须定期重新加载媒体播放列表文件来学习
   目前有哪些媒体可用,除非它包含EXT-X
   -PLAYLIST-TYPE标记的值为VOD,或值为EVENT和
   EXT-X-ENDLIST标签也存在。


   但客户端不得尝试重新加载播放列表文件
   经常超过本节规定的限制
   服务器上的集体负载。

   Variant Stream.  It can use the EXTINF durations and the constraints
   in Section 6.2.4 to determine the approximate location of
   corresponding media.  Once media from the new Variant Stream has been
   loaded, the timestamps in the Media Segments can be used to
   synchronize the old and new timelines precisely.

   A client MUST NOT attempt to use the Media Sequence Number to
   synchronize between streams - see Section 6.3.2.


   当客户端第一次加载播放列表文件或重新加载时
   播放列表文件,并发现自上次播放列表文件以来发生了更改
   被加载时,客户端必须至少等待目标持续时间
   在尝试重新加载播放列表文件之前,从测量
   上次客户端开始加载播放列表文件。


   如果客户端重新加载播放列表文件并发现它没有
   改变,那么它必须等待目标的一半
   重试前的持续时间。


   重新加载媒体播放列表后,客户端应该验证每个
   其中的媒体段具有相同的URI(如果指定了字节范围)
   作为具有相同媒体序列号的媒​​体​​段
   之前的媒体播放列表。它应该停止播放,如果没有,如
   这通常表示服务器错误。


   为了减少服务器负载,客户端不应该重新加载
   变体流的播放列表文件或替代演绎
   目前未播放。如果它决定将播放切换到
   不同的变种流,它应该停止重新加载播放列表
   旧的Variant Stream并开始加载新的播放列表

6.3.5.  Determining the next segment to load

6.3.6.  Decrypting encrypted Media Segments

7.  Protocol version compatibility

8.  Playlist Examples

8.1.  Simple Media Playlist

   #EXTM3U
   #EXT-X-TARGETDURATION:10
   #EXT-X-VERSION:3
   #EXTINF:9.009,
   http://media.example.com/first.ts
   #EXTINF:9.009,
   http://media.example.com/second.ts
   #EXTINF:3.003,
   http://media.example.com/third.ts
   #EXT-X-ENDLIST

8.2.  Live Media Playlist, using HTTPS

   #EXTM3U
   #EXT-X-VERSION:3
   #EXT-X-TARGETDURATION:8
   #EXT-X-MEDIA-SEQUENCE:2680

   #EXTINF:7.975,
   https://priv.example.com/fileSequence2680.ts
   #EXTINF:7.941,
   https://priv.example.com/fileSequence2681.ts
   #EXTINF:7.975,
   https://priv.example.com/fileSequence2682.ts

8.3.  Playlist with encrypted Media Segments

   #EXTM3U
   #EXT-X-VERSION:3
   #EXT-X-MEDIA-SEQUENCE:7794
   #EXT-X-TARGETDURATION:15

   #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"

   #EXTINF:2.833,
   http://media.example.com/fileSequence52-A.ts
   #EXTINF:15.0,
   http://media.example.com/fileSequence52-B.ts
   #EXTINF:13.333,
   http://media.example.com/fileSequence52-C.ts

   #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"

   #EXTINF:15.0,
   http://media.example.com/fileSequence53-A.ts

8.4.  Master Playlist

   #EXTM3U
   #EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000
   http://example.com/low.m3u8
   #EXT-X-STREAM-INF:BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000
   http://example.com/mid.m3u8
   #EXT-X-STREAM-INF:BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000
   http://example.com/hi.m3u8
   #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
   http://example.com/audio-only.m3u8

8.5.  Master Playlist with I-Frames

   #EXTM3U
   #EXT-X-STREAM-INF:BANDWIDTH=1280000
   low/audio-video.m3u8
   #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="low/iframe.m3u8"
   #EXT-X-STREAM-INF:BANDWIDTH=2560000
   mid/audio-video.m3u8
   #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=150000,URI="mid/iframe.m3u8"
   #EXT-X-STREAM-INF:BANDWIDTH=7680000
   hi/audio-video.m3u8
   #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=550000,URI="hi/iframe.m3u8"
   #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
   audio-only.m3u8

8.6.  Master Playlist with Alternative audio

   In this example, the CODECS attributes have been condensed for space.
   A '\' is used to indicate that the tag continues on the following
   line with whitespace removed:

   #EXTM3U
   #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="English", \
      DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en", \
      URI="main/english-audio.m3u8"
   #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Deutsch", \
      DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="de", \
      URI="main/german-audio.m3u8"
   #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Commentary", \
      DEFAULT=NO,AUTOSELECT=NO,LANGUAGE="en", \
      URI="commentary/audio-only.m3u8"
   #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",AUDIO="aac"
   low/video-only.m3u8
   #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",AUDIO="aac"
   mid/video-only.m3u8
   #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",AUDIO="aac"
   hi/video-only.m3u8
   #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5",AUDIO="aac"
   main/english-audio.m3u8

8.7.  Master Playlist with Alternative video

  This example shows 3 different video Renditions (Main, Centerfield
   and Dugout), and 3 different Variant Streams (low, mid and high).  In
   this example, clients that did not support the EXT-X-MEDIA tag and
   the VIDEO attribute of the EXT-X-STREAM-INF tag would only be able to
   play the video Rendition "Main".
   Since the EXT-X-STREAM-INF tag has no AUDIO attribute, all video
   Renditions would be required to contain the audio.

   In this example, the CODECS attributes have been condensed for space.
   A '\' is used to indicate that the tag continues on the following
   line with whitespace removed:

   #EXTM3U
   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Main", \
      DEFAULT=YES,URI="low/main/audio-video.m3u8"
   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Centerfield", \
      DEFAULT=NO,URI="low/centerfield/audio-video.m3u8"
   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Dugout", \
      DEFAULT=NO,URI="low/dugout/audio-video.m3u8"

   #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",VIDEO="low"
   low/main/audio-video.m3u8

   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Main", \
      DEFAULT=YES,URI="mid/main/audio-video.m3u8"
   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Centerfield", \
      DEFAULT=NO,URI="mid/centerfield/audio-video.m3u8"
   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Dugout", \
      DEFAULT=NO,URI="mid/dugout/audio-video.m3u8"

   #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",VIDEO="mid"
   mid/main/audio-video.m3u8

   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Main", \
      DEFAULT=YES,URI="hi/main/audio-video.m3u8"
   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Centerfield", \
      DEFAULT=NO,URI="hi/centerfield/audio-video.m3u8"
   #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Dugout", \
      DEFAULT=NO,URI="hi/dugout/audio-video.m3u8"

   #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",VIDEO="hi"
   hi/main/audio-video.m3u8

8.8.  Session Data in a Master Playlist

In this example, only the EXT-X-SESSION-DATA is shown:
   #EXT-X-SESSION-DATA:DATA-ID="com.example.lyrics",URI="lyrics.json"

   #EXT-X-SESSION-DATA:DATA-ID="com.example.title",LANGUAGE="en", \
       VALUE="This is an example"
   #EXT-X-SESSION-DATA:DATA-ID="com.example.title",LANGUAGE="es", \
       VALUE="Este es un ejemplo"

8.9.  CHARACTERISTICS attribute containing multiple characteristics

   Certain characteristics are valid in combination, as in:

   CHARACTERISTICS=
   "public.accessibility.transcribes-spoken-dialog,public.easy-to-read"

8.10.  EXT-X-DATERANGE carrying SCTE-35 tags

   This example shows two EXT-X-DATERANGE tags that describe a single
   Date Range, with a SCTE-35 "out" splice_insert() command that is
   subsequently updated with an SCTE-35 "in" splice_insert() command.

   #EXTM3U
   ...
   #EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2014-03-05T11:
   15:00Z",PLANNED-DURATION=59.993,SCTE35-OUT=0xFC002F0000000000FF0
   00014056FFFFFF000E011622DCAFF000052636200000000000A0008029896F50
   000008700000000

   ... Media Segment declarations for 60s worth of media

   #EXT-X-DATERANGE:ID="splice-6FFFFFF0",DURATION=59.993,SCTE35-IN=
   0xFC002A0000000000FF00000F056FFFFFF000401162802E6100000000000A00
   08029896F50000008700000000

9.  Contributors

10.  IANA Considerations

11.  Security Considerations

12.  References

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值