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
优先。
第一个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:
例如X-TIMESTAMP-MAP = LOCAL:00:00:00.000,MPEGTS:900000
LOCAL属性中的提示时间戳可能会超出范围
该段所涵盖的时间。
如果WebVTT段没有X-TIMESTAMP-MAP,则为客户端
必须假设0的WebVTT提示时间映射到MPEG-2时间戳
0。
4. Playlists
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:
其中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:<持续时间>,[
UTF-8文本。
4.3.2.2. EXT-X-BYTERANGE
EXT-X-BYTERANGE标签指示一个媒体段是一个子范围
的URI所标识的资源。 它只适用于下一个
在播放列表中跟随它的URI行。 其格式是:
#EXT-X-BYTERANGE:
其中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包含下面:
METHOD:
该值是一个指定加密的枚举字符串方法。 该属性是必需的。 定义的方法有:NONE,AES-128和SAMPLE-AES。
NONE的加密方法意味着媒体段不是加密。如果加密方法是NONE,则为其他属性绝不能在场。
媒体分段是AES-128信号的加密方法使用高级加密标准完全加密带有128位密钥,密码块链接和PKCS7的[AES_128]填充[RFC5652]。 CBC在每个分段边界上重新启动,使用IV属性值或媒体序列号作为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: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:
例如:
#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.出现在一个变体流的媒体播放列表中的内容
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.
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