winlin

add hls specification

  1 +http://tools.ietf.org/html/draft-pantos-http-live-streaming-12
  2 +
  3 +
  4 +Informational R. Pantos, Ed.
  5 +Internet-Draft W. May
  6 +Intended status: Informational Apple Inc.
  7 +Expires: April 17, 2014 October 14, 2013
  8 +
  9 +
  10 + HTTP Live Streaming
  11 + draft-pantos-http-live-streaming-12
  12 +
  13 +Abstract
  14 +
  15 + This document describes a protocol for transferring unbounded streams
  16 + of multimedia data. It specifies the data format of the files and
  17 + the actions to be taken by the server (sender) and the clients
  18 + (receivers) of the streams. It describes version 6 of this protocol.
  19 +
  20 +Status of this Memo
  21 +
  22 + This Internet-Draft is submitted in full conformance with the
  23 + provisions of BCP 78 and BCP 79. This document may not be modified,
  24 + and derivative works of it may not be created, and it may not be
  25 + published except as an Internet-Draft.
  26 +
  27 + Internet-Drafts are working documents of the Internet Engineering
  28 + Task Force (IETF). Note that other groups may also distribute
  29 + working documents as Internet-Drafts. The list of current Internet-
  30 + Drafts is at http://datatracker.ietf.org/drafts/current/.
  31 +
  32 + Internet-Drafts are draft documents valid for a maximum of six months
  33 + and may be updated, replaced, or obsoleted by other documents at any
  34 + time. It is inappropriate to use Internet-Drafts as reference
  35 + material or to cite them other than as "work in progress."
  36 +
  37 + This Internet-Draft will expire on April 17, 2014.
  38 +
  39 +Copyright Notice
  40 +
  41 + Copyright (c) 2013 IETF Trust and the persons identified as the
  42 + document authors. All rights reserved.
  43 +
  44 + This document is subject to BCP 78 and the IETF Trust's Legal
  45 + Provisions Relating to IETF Documents
  46 + (http://trustee.ietf.org/license-info) in effect on the date of
  47 + publication of this document. Please review these documents
  48 + carefully, as they describe your rights and restrictions with respect
  49 + to this document.
  50 +
  51 + This Informational Internet Draft is submitted as an RFC Editor
  52 +
  53 +
  54 +
  55 +Pantos & May Expires April 17, 2014 [Page 1]
  56 +
  57 +Internet-Draft HTTP Live Streaming October 2013
  58 +
  59 +
  60 + Contribution and/or non-IETF Document (not as a Contribution, IETF
  61 + Contribution, nor IETF Document) in accordance with BCP 78 and BCP
  62 + 79.
  63 +
  64 +
  65 +Table of Contents
  66 +
  67 + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
  68 + 2. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
  69 + 3. The Playlist file . . . . . . . . . . . . . . . . . . . . . . 4
  70 + 3.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 4
  71 + 3.2. Attribute Lists . . . . . . . . . . . . . . . . . . . . . 5
  72 + 3.3. Standard Tags . . . . . . . . . . . . . . . . . . . . . . 6
  73 + 3.3.1. EXTM3U . . . . . . . . . . . . . . . . . . . . . . . . 6
  74 + 3.3.2. EXTINF . . . . . . . . . . . . . . . . . . . . . . . . 7
  75 + 3.4. New Tags . . . . . . . . . . . . . . . . . . . . . . . . . 7
  76 + 3.4.1. EXT-X-BYTERANGE . . . . . . . . . . . . . . . . . . . 7
  77 + 3.4.2. EXT-X-TARGETDURATION . . . . . . . . . . . . . . . . . 8
  78 + 3.4.3. EXT-X-MEDIA-SEQUENCE . . . . . . . . . . . . . . . . . 8
  79 + 3.4.4. EXT-X-KEY . . . . . . . . . . . . . . . . . . . . . . 9
  80 + 3.4.5. EXT-X-PROGRAM-DATE-TIME . . . . . . . . . . . . . . . 10
  81 + 3.4.6. EXT-X-ALLOW-CACHE . . . . . . . . . . . . . . . . . . 11
  82 + 3.4.7. EXT-X-PLAYLIST-TYPE . . . . . . . . . . . . . . . . . 11
  83 + 3.4.8. EXT-X-ENDLIST . . . . . . . . . . . . . . . . . . . . 11
  84 + 3.4.9. EXT-X-MEDIA . . . . . . . . . . . . . . . . . . . . . 11
  85 + 3.4.9.1. Rendition Groups . . . . . . . . . . . . . . . . . 14
  86 + 3.4.10. EXT-X-STREAM-INF . . . . . . . . . . . . . . . . . . . 15
  87 + 3.4.10.1. Alternative Renditions . . . . . . . . . . . . . . 16
  88 + 3.4.11. EXT-X-DISCONTINUITY . . . . . . . . . . . . . . . . . 17
  89 + 3.4.12. EXT-X-DISCONTINUITY-SEQUENCE . . . . . . . . . . . . . 18
  90 + 3.4.13. EXT-X-I-FRAMES-ONLY . . . . . . . . . . . . . . . . . 18
  91 + 3.4.14. EXT-X-MAP . . . . . . . . . . . . . . . . . . . . . . 19
  92 + 3.4.15. EXT-X-I-FRAME-STREAM-INF . . . . . . . . . . . . . . . 20
  93 + 3.4.16. EXT-X-START . . . . . . . . . . . . . . . . . . . . . 20
  94 + 3.4.17. EXT-X-VERSION . . . . . . . . . . . . . . . . . . . . 21
  95 + 4. Media segments . . . . . . . . . . . . . . . . . . . . . . . . 22
  96 + 5. Key files . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  97 + 5.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 23
  98 + 5.2. IV for [AES_128] . . . . . . . . . . . . . . . . . . . . . 24
  99 + 6. Client/Server Actions . . . . . . . . . . . . . . . . . . . . 24
  100 + 6.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 24
  101 + 6.2. Server Process . . . . . . . . . . . . . . . . . . . . . . 24
  102 + 6.2.1. Introduction . . . . . . . . . . . . . . . . . . . . . 24
  103 + 6.2.2. Live Playlists . . . . . . . . . . . . . . . . . . . . 27
  104 + 6.2.3. Encrypting media segments . . . . . . . . . . . . . . 27
  105 + 6.2.4. Providing variant streams . . . . . . . . . . . . . . 28
  106 + 6.3. Client Process . . . . . . . . . . . . . . . . . . . . . . 29
  107 +
  108 +
  109 +
  110 +Pantos & May Expires April 17, 2014 [Page 2]
  111 +
  112 +Internet-Draft HTTP Live Streaming October 2013
  113 +
  114 +
  115 + 6.3.1. Introduction . . . . . . . . . . . . . . . . . . . . . 29
  116 + 6.3.2. Loading the Playlist file . . . . . . . . . . . . . . 29
  117 + 6.3.3. Playing the Playlist file . . . . . . . . . . . . . . 30
  118 + 6.3.4. Reloading the Playlist file . . . . . . . . . . . . . 31
  119 + 6.3.5. Determining the next segment to load . . . . . . . . . 31
  120 + 6.3.6. Decrypting encrypted media segments . . . . . . . . . 32
  121 + 7. Protocol version compatibility . . . . . . . . . . . . . . . . 32
  122 + 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
  123 + 8.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 33
  124 + 8.2. Simple Media Playlist file . . . . . . . . . . . . . . . . 34
  125 + 8.3. Live Media Playlist, using HTTPS . . . . . . . . . . . . . 34
  126 + 8.4. Playlist file with encrypted media segments . . . . . . . 34
  127 + 8.5. Master Playlist file . . . . . . . . . . . . . . . . . . . 35
  128 + 8.6. Master Playlist with I-Frames . . . . . . . . . . . . . . 35
  129 + 8.7. Master Playlist with Alternative audio . . . . . . . . . . 35
  130 + 8.8. Master Playlist with Alternative video . . . . . . . . . . 36
  131 + 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 37
  132 + 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37
  133 + 11. Security Considerations . . . . . . . . . . . . . . . . . . . 38
  134 + 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 39
  135 + 12.1. Normative References . . . . . . . . . . . . . . . . . . . 39
  136 + 12.2. Informative References . . . . . . . . . . . . . . . . . . 41
  137 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 41
  138 +
  139 +
  140 +
  141 +
  142 +
  143 +
  144 +
  145 +
  146 +
  147 +
  148 +
  149 +
  150 +
  151 +
  152 +
  153 +
  154 +
  155 +
  156 +
  157 +
  158 +
  159 +
  160 +
  161 +
  162 +
  163 +
  164 +
  165 +
  166 +Pantos & May Expires April 17, 2014 [Page 3]
  167 +
  168 +Internet-Draft HTTP Live Streaming October 2013
  169 +
  170 +
  171 +1. Introduction
  172 +
  173 + This document describes a protocol for transferring unbounded streams
  174 + of multimedia data. The protocol supports the encryption of media
  175 + data and allows clients to choose from among different encodings of
  176 + the presentation. Media data can be transferred soon after it is
  177 + created, allowing it to be played in near real-time. Data is usually
  178 + carried over HTTP [RFC2616].
  179 +
  180 + External references that describe related standards such as HTTP are
  181 + listed in Section 11.
  182 +
  183 +
  184 +2. Summary
  185 +
  186 + A multimedia presentation is specified by a URI [RFC3986] to a
  187 + Playlist file, which is an ordered list of media URIs and
  188 + informational tags. The URIs and their associated tags specify a
  189 + series of media segments.
  190 +
  191 + To play the presentation, the client first obtains the Playlist file
  192 + and then obtains and plays each media segment in the Playlist. It
  193 + reloads the Playlist file as described in this document to discover
  194 + additional segments.
  195 +
  196 + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
  197 + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
  198 + document are to be interpreted as described in RFC 2119 [RFC2119].
  199 +
  200 +
  201 +3. The Playlist file
  202 +
  203 +3.1. Introduction
  204 +
  205 + Playlists MUST be Extended M3U Playlist files [M3U]. This document
  206 + extends the M3U file format further by defining additional tags.
  207 +
  208 + An M3U Playlist is a text file that consists of individual lines.
  209 + Lines are terminated by either a single LF character or a CR
  210 + character followed by an LF character. Each line is a URI, blank, or
  211 + starts with the character '#'. Blank lines are ignored. White space
  212 + MUST NOT be present, except for elements in which it is explicitly
  213 + specified.
  214 +
  215 + A URI line identifies a media segment or a Playlist file (see
  216 + Section 3.4.10). Each media segment is specified by a media URI and
  217 + the tags that apply to it.
  218 +
  219 +
  220 +
  221 +
  222 +Pantos & May Expires April 17, 2014 [Page 4]
  223 +
  224 +Internet-Draft HTTP Live Streaming October 2013
  225 +
  226 +
  227 + A Playlist is known as a Media Playlist if all URI lines in the
  228 + Playlist identify media segments. A Playlist is known as a Master
  229 + Playlist if all URI lines in the Playlist identify Media Playlists.
  230 +
  231 + Lines that start with the character '#' are either comments or tags.
  232 +
  233 + Tags begin with #EXT. All other lines that begin with '#' are
  234 + comments and SHOULD be ignored.
  235 +
  236 + A URI in a Playlist, whether it is a URI line or part of a tag, MAY
  237 + be relative. Relative URIs MUST be resolved against the URI of the
  238 + Playlist file that contains it.
  239 +
  240 + The duration of a Media Playlist file is the sum of the durations of
  241 + the media segments within it.
  242 +
  243 + Playlist files whose names end in .m3u8 and/or have the HTTP Content-
  244 + Type "application/vnd.apple.mpegurl" are encoded in UTF-8 [RFC3629].
  245 + Files whose names end with .m3u and/or have the HTTP Content-Type
  246 + [RFC2616] "audio/mpegurl" are encoded in US-ASCII [US_ASCII].
  247 +
  248 + Playlist files MUST have names that end in .m3u8 and/or have the
  249 + Content-Type "application/vnd.apple.mpegurl" (if transferred over
  250 + HTTP), or have names that end in .m3u and/or have the HTTP Content-
  251 + Type type "audio/mpegurl" (for compatibility).
  252 +
  253 +3.2. Attribute Lists
  254 +
  255 + Certain extended M3U tags have values which are Attribute Lists. An
  256 + Attribute List is a comma-separated list of attribute/value pairs
  257 + with no whitespace.
  258 +
  259 + An attribute/value pair has the following syntax:
  260 +
  261 + AttributeName=AttributeValue
  262 +
  263 + An AttributeName is an unquoted string containing characters from the
  264 + set [A..Z] and '-'.
  265 +
  266 + An AttributeValue is one of the following:
  267 +
  268 + o decimal-integer: an unquoted string of characters from the set
  269 + [0..9] expressing an integer in base-10 arithmetic.
  270 +
  271 + o hexadecimal-integer: an unquoted string of characters from the set
  272 + [0..9] and [A..F] that is prefixed with 0x or 0X and which
  273 + expresses an integer in base-16 arithmetic.
  274 +
  275 +
  276 +
  277 +
  278 +Pantos & May Expires April 17, 2014 [Page 5]
  279 +
  280 +Internet-Draft HTTP Live Streaming October 2013
  281 +
  282 +
  283 + o decimal-floating-point: an unquoted string of characters from the
  284 + set [0..9] and '.' which expresses a floating-point number in
  285 + decimal positional notation.
  286 +
  287 + o quoted-string: a string of characters within a pair of double-
  288 + quotes ("), including Uniform Type Identifiers [UTI]. The set of
  289 + characters allowed in the string and any rules for escaping
  290 + special characters are specified by the Attribute definition, but
  291 + characters within a quoted-string MUST NOT include linefeed (0xA),
  292 + carriage-return (0xD) or double quote (0x22). Attributes that
  293 + wish to carry these characters must do so in an escaped form, such
  294 + as percent-encoded for a URI.
  295 +
  296 + o enumerated-string: an unquoted character string from a set which
  297 + is explicitly defined by the Attribute. An enumerated-string will
  298 + never contain double-quotes ("), commas (,), or whitespace.
  299 +
  300 + o decimal-resolution: two decimal-integers separated by the "x"
  301 + character. The first integer is a horizontal pixel dimension
  302 + (width); the second is a vertical pixel dimension (height).
  303 +
  304 + The type of the AttributeValue for a given AttributeName is specified
  305 + by the Attribute definition.
  306 +
  307 + A given AttributeName MUST NOT appear more than once in a given
  308 + Attribute List.
  309 +
  310 + An Attribute/value pair with an unrecognized AttributeName MUST be
  311 + ignored by the client.
  312 +
  313 + Any tag containing an attribute/value pair of type enumerated-string
  314 + whose AttributeName is recognized but whose AttributeValue is not
  315 + recognized MUST be ignored by the client.
  316 +
  317 +3.3. Standard Tags
  318 +
  319 +3.3.1. EXTM3U
  320 +
  321 + An Extended M3U file is distinguished from a basic M3U file by its
  322 + first line, which MUST be the tag #EXTM3U. This tag MUST be included
  323 + in both Media Playlists and Master Playlists. Its format is:
  324 +
  325 + #EXTM3U
  326 +
  327 +
  328 +
  329 +
  330 +
  331 +
  332 +
  333 +
  334 +Pantos & May Expires April 17, 2014 [Page 6]
  335 +
  336 +Internet-Draft HTTP Live Streaming October 2013
  337 +
  338 +
  339 +3.3.2. EXTINF
  340 +
  341 + The EXTINF tag specifies the duration of a media segment. It applies
  342 + only to the media segment that follows it, and MUST be followed by a
  343 + media segment URI. Each media segment MUST be preceded by an EXTINF
  344 + tag. Its format is:
  345 +
  346 + #EXTINF:<duration>,<title>
  347 +
  348 + where duration is an decimal-integer or decimal-floating-point number
  349 + that specifies the duration of the media segment in seconds.
  350 + Durations that are reported as integers SHOULD be rounded to the
  351 + nearest integer. Durations MUST be integers if the protocol version
  352 + of the Playlist file is less than 3. Durations SHOULD be floating-
  353 + point if the version is equal to or greater than 3. The remainder of
  354 + the line following the comma is an optional human-readable
  355 + informative title of the media segment.
  356 +
  357 +3.4. New Tags
  358 +
  359 + This document defines the following new tags: EXT-X-BYTERANGE, EXT-X-
  360 + TARGETDURATION, EXT-X-MEDIA-SEQUENCE, EXT-X-KEY, EXT-X-PROGRAM-DATE-
  361 + TIME, EXT-X-ALLOW-CACHE, EXT-X-PLAYLIST-TYPE, EXT-X-STREAM-INF, EXT-
  362 + X-I-FRAME-STREAM-INF, EXT-X-I-FRAMES-ONLY, EXT-X-MEDIA, EXT-X-
  363 + ENDLIST, EXT-X-DISCONTINUITY, EXT-X-DISCONTINUITY-SEQUENCE, EXT-X-
  364 + START, and EXT-X-VERSION.
  365 +
  366 +3.4.1. EXT-X-BYTERANGE
  367 +
  368 + The EXT-X-BYTERANGE tag indicates that a media segment is a sub-range
  369 + of the resource identified by its media URI. It applies only to the
  370 + next media URI that follows it in the Playlist. Its format is:
  371 +
  372 + #EXT-X-BYTERANGE:<n>[@<o>]
  373 +
  374 + where n is a decimal-integer indicating the length of the sub-range
  375 + in bytes. If present, o is a decimal-integer indicating the start of
  376 + the sub-range, as a byte offset from the beginning of the resource.
  377 + If o is not present, the sub-range begins at the next byte following
  378 + the sub-range of the previous media segment.
  379 +
  380 + If o is not present, a previous media segment MUST appear in the
  381 + Playlist file and MUST be a sub-range of the same media resource.
  382 +
  383 + A media URI with no EXT-X-BYTERANGE tag applied to it specifies a
  384 + media segment that consists of the entire resource.
  385 +
  386 + The EXT-X-BYTERANGE tag appeared in version 4 of the protocol. It
  387 +
  388 +
  389 +
  390 +Pantos & May Expires April 17, 2014 [Page 7]
  391 +
  392 +Internet-Draft HTTP Live Streaming October 2013
  393 +
  394 +
  395 + MUST NOT appear in a Master Playlist.
  396 +
  397 +3.4.2. EXT-X-TARGETDURATION
  398 +
  399 + The EXT-X-TARGETDURATION tag specifies the maximum media segment
  400 + duration. The EXTINF duration of each media segment in the Playlist
  401 + file, when rounded to the nearest integer, MUST be less than or equal
  402 + to the target duration. This tag MUST appear once in a Media
  403 + Playlist file. It applies to the entire Playlist file. Its format
  404 + is:
  405 +
  406 + #EXT-X-TARGETDURATION:<s>
  407 +
  408 + where s is a decimal-integer indicating the target duration in
  409 + seconds.
  410 +
  411 + The EXT-X-TARGETDURATION tag MUST NOT appear in a Master Playlist.
  412 +
  413 +3.4.3. EXT-X-MEDIA-SEQUENCE
  414 +
  415 + Each media segment in a Playlist has a unique integer sequence
  416 + number. The sequence number of a segment is equal to the sequence
  417 + number of the segment that preceded it plus one. The EXT-X-MEDIA-
  418 + SEQUENCE tag indicates the sequence number of the first segment that
  419 + appears in a Playlist file. Its format is:
  420 +
  421 + #EXT-X-MEDIA-SEQUENCE:<number>
  422 +
  423 + where number is a decimal-integer. The sequence number MUST NOT
  424 + decrease.
  425 +
  426 + A Media Playlist file MUST NOT contain more than one EXT-X-MEDIA-
  427 + SEQUENCE tag. If the Media Playlist file does not contain an EXT-X-
  428 + MEDIA-SEQUENCE tag then the sequence number of the first segment in
  429 + the playlist SHALL be considered to be 0. A client MUST NOT assume
  430 + that segments with the same sequence number in different Media
  431 + Playlists contain matching content.
  432 +
  433 + A media URI is not required to contain its sequence number.
  434 +
  435 + See Section 6.2.1, Section 6.3.2 and Section 6.3.5 for information on
  436 + handling the EXT-X-MEDIA-SEQUENCE tag.
  437 +
  438 + The EXT-X-MEDIA-SEQUENCE tag MUST NOT appear in a Master Playlist.
  439 +
  440 +
  441 +
  442 +
  443 +
  444 +
  445 +
  446 +Pantos & May Expires April 17, 2014 [Page 8]
  447 +
  448 +Internet-Draft HTTP Live Streaming October 2013
  449 +
  450 +
  451 +3.4.4. EXT-X-KEY
  452 +
  453 + Media segments MAY be encrypted. The EXT-X-KEY tag specifies how to
  454 + decrypt them. It applies to every media segment that appears between
  455 + it and the next EXT-X-KEY tag in the Playlist file with the same
  456 + KEYFORMAT attribute (or the end of the Playlist file). Two or more
  457 + EXT-X-KEY tags with different KEYFORMAT attributes MAY apply to the
  458 + same media segment, in which case they MUST resolve to the same key.
  459 + Its format is:
  460 +
  461 + #EXT-X-KEY:<attribute-list>
  462 +
  463 + The following attributes are defined:
  464 +
  465 + METHOD
  466 +
  467 + The value is an enumerated-string that specifies the encryption
  468 + method. This attribute is REQUIRED.
  469 +
  470 + The methods defined are: NONE, AES-128, and SAMPLE-AES.
  471 +
  472 + An encryption method of NONE means that media segments are not
  473 + encrypted. If the encryption method is NONE, the following
  474 + attributes MUST NOT be present: URI; IV; KEYFORMAT;
  475 + KEYFORMATVERSIONS.
  476 +
  477 + An encryption method of AES-128 means that media segments are
  478 + completely encrypted using the Advanced Encryption Standard [AES_128]
  479 + with a 128-bit key and PKCS7 padding [RFC5652]. If the encryption
  480 + method is AES-128, the URI attribute MUST be present. The IV
  481 + attribute MAY be present; see Section 5.2.
  482 +
  483 + An encryption method of SAMPLE-AES means that the media segments
  484 + contain elementary streams of audio, video, or other samples that are
  485 + encrypted using the Advanced Encryption Standard [AES_128]. How an
  486 + elementary stream is encrypted depends on the media encoding. The
  487 + encryption format for H.264 [H_264], AAC [ISO_14496] and AC-3 [AC_3]
  488 + elementary streams is described by [SampleEnc]. The IV attribute MAY
  489 + be present; see Section 5.2.
  490 +
  491 + A client MUST NOT not attempt to decrypt any segments whose EXT-X-KEY
  492 + tag has a METHOD attribute that it does not recognize.
  493 +
  494 + URI
  495 +
  496 + The value is a quoted-string containing a URI [RFC3986] that
  497 + specifies how to obtain the key. This attribute is REQUIRED unless
  498 + the METHOD is NONE.
  499 +
  500 +
  501 +
  502 +Pantos & May Expires April 17, 2014 [Page 9]
  503 +
  504 +Internet-Draft HTTP Live Streaming October 2013
  505 +
  506 +
  507 + IV
  508 +
  509 + The value is a hexadecimal-integer that specifies the Initialization
  510 + Vector to be used with the key. The IV attribute appeared in
  511 + protocol version 2. See Section 5.2 for when the IV attribute is
  512 + used.
  513 +
  514 + KEYFORMAT
  515 +
  516 + The value is a quoted-string that specifies how the key is
  517 + represented in the resource identified by the URI; see Section 5 for
  518 + more detail. This attribute is OPTIONAL; its absence indicates, an
  519 + implicit value of "identity". The KEYFORMAT attribute appeared in
  520 + protocol version 5.
  521 +
  522 + KEYFORMATVERSIONS
  523 +
  524 + The value is a quoted-string containing one or more positive integers
  525 + separated by the "/" character (for example, "1/3"). If more than
  526 + one version of a particular KEYFORMAT is defined, this attribute can
  527 + be used to indicate which version(s) this instance complies with.
  528 + This attribute is OPTIONAL; if it is not present, its value is
  529 + considered to be "1". The KEYFORMATVERSIONS attribute appeared in
  530 + protocol version 5.
  531 +
  532 + If the Media Playlist file does not contain an EXT-X-KEY tag then
  533 + media segments are not encrypted.
  534 +
  535 + See Section 5 for the format of the key file, and Section 5.2,
  536 + Section 6.2.3 and Section 6.3.6 for additional information on media
  537 + segment encryption.
  538 +
  539 +3.4.5. EXT-X-PROGRAM-DATE-TIME
  540 +
  541 + The EXT-X-PROGRAM-DATE-TIME tag associates the first sample of a
  542 + media segment with an absolute date and/or time. It applies only to
  543 + the next media segment.
  544 +
  545 + The date/time representation is ISO/IEC 8601:2004 [ISO_8601] and
  546 + SHOULD indicate a time zone:
  547 +
  548 + #EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ>
  549 +
  550 + For example:
  551 +
  552 + #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00
  553 +
  554 + See Section 6.2.1 and Section 6.3.3 for more information on the EXT-
  555 +
  556 +
  557 +
  558 +Pantos & May Expires April 17, 2014 [Page 10]
  559 +
  560 +Internet-Draft HTTP Live Streaming October 2013
  561 +
  562 +
  563 + X-PROGRAM-DATE-TIME tag.
  564 +
  565 + The EXT-X-PROGRAM-DATE-TIME tag MUST NOT appear in a Master Playlist.
  566 +
  567 +3.4.6. EXT-X-ALLOW-CACHE
  568 +
  569 + The EXT-X-ALLOW-CACHE tag indicates whether the client MAY or MUST
  570 + NOT cache downloaded media segments for later replay. It MAY occur
  571 + anywhere in a Media Playlist file; it MUST NOT occur more than once.
  572 + The EXT-X-ALLOW-CACHE tag applies to all segments in the playlist.
  573 + Its format is:
  574 +
  575 + #EXT-X-ALLOW-CACHE:<YES|NO>
  576 +
  577 + See Section 6.3.3 for more information on the EXT-X-ALLOW-CACHE tag.
  578 +
  579 +3.4.7. EXT-X-PLAYLIST-TYPE
  580 +
  581 + The EXT-X-PLAYLIST-TYPE tag provides mutability information about the
  582 + Playlist file. It applies to the entire Playlist file. It is
  583 + OPTIONAL. Its format is:
  584 +
  585 + #EXT-X-PLAYLIST-TYPE:<EVENT|VOD>
  586 +
  587 + Section 6.2.1 defines the implications of the EXT-X-PLAYLIST-TYPE
  588 + tag.
  589 +
  590 + The EXT-X-PLAYLIST-TYPE tag MUST NOT appear in a Master Playlist.
  591 +
  592 +3.4.8. EXT-X-ENDLIST
  593 +
  594 + The EXT-X-ENDLIST tag indicates that no more media segments will be
  595 + added to the Media Playlist file. It MAY occur anywhere in the
  596 + Playlist file; it MUST NOT occur more than once. Its format is:
  597 +
  598 + #EXT-X-ENDLIST
  599 +
  600 + The EXT-X-ENDLIST tag MUST NOT appear in a Master Playlist.
  601 +
  602 +3.4.9. EXT-X-MEDIA
  603 +
  604 + The EXT-X-MEDIA tag is used to relate Media Playlists that contain
  605 + alternative renditions of the same content. For example, three EXT-
  606 + X-MEDIA tags can be used to identify audio-only Media Playlists that
  607 + contain English, French and Spanish renditions of the same
  608 + presentation. Or two EXT-X-MEDIA tags can be used to identify video-
  609 + only Media Playlists that show two different camera angles.
  610 +
  611 +
  612 +
  613 +
  614 +Pantos & May Expires April 17, 2014 [Page 11]
  615 +
  616 +Internet-Draft HTTP Live Streaming October 2013
  617 +
  618 +
  619 + The EXT-X-MEDIA tag stands alone, in that it does not apply to a
  620 + particular URI in the Master Playlist. Its format is:
  621 +
  622 + #EXT-X-MEDIA:<attribute-list>
  623 +
  624 + The following attributes are defined:
  625 +
  626 + TYPE
  627 +
  628 + The value is enumerated-string; valid strings are AUDIO, VIDEO,
  629 + SUBTITLES and CLOSED-CAPTIONS. If the value is AUDIO, the Playlist
  630 + described by the tag MUST contain audio media. If the value is
  631 + VIDEO, the Playlist MUST contain video media. If the value is
  632 + SUBTITLES, the Playlist MUST contain subtitle media. If the value is
  633 + CLOSED-CAPTIONS, the media segments for the video renditions can
  634 + include closed captions. This attribute is REQUIRED.
  635 +
  636 + URI
  637 +
  638 + The value is a quoted-string containing a URI that identifies the
  639 + Playlist file. This attribute is OPTIONAL; see Section 3.4.10.1. If
  640 + the TYPE is CLOSED-CAPTIONS, the URI attribute MUST NOT be present.
  641 +
  642 + GROUP-ID
  643 +
  644 + The value is a quoted-string identifying a mutually-exclusive group
  645 + of renditions. The presence of this attribute signals membership in
  646 + the group. See Section 3.4.9.1. This attribute is REQUIRED.
  647 +
  648 + LANGUAGE
  649 +
  650 + The value is a quoted-string containing an RFC 5646 [RFC5646]
  651 + language tag that identifies the primary language used in the
  652 + rendition. This attribute is OPTIONAL.
  653 +
  654 + ASSOC-LANGUAGE
  655 +
  656 + The value is a quoted-string containing an RFC 5646 [RFC5646]
  657 + language tag that identifies a language that is associated with the
  658 + rendition. An associated language is often used in a different role
  659 + than the language specified by the LANGUAGE attribute (e.g. written
  660 + vs. spoken, or as a fallback dialect). This attribute is OPTIONAL.
  661 +
  662 + NAME
  663 +
  664 + The value is a quoted-string containing a human-readable description
  665 + of the rendition. If the LANGUAGE attribute is present then this
  666 + description SHOULD be in that language. This attribute is REQUIRED.
  667 +
  668 +
  669 +
  670 +Pantos & May Expires April 17, 2014 [Page 12]
  671 +
  672 +Internet-Draft HTTP Live Streaming October 2013
  673 +
  674 +
  675 + DEFAULT
  676 +
  677 + The value is an enumerated-string; valid strings are YES and NO. If
  678 + the value is YES, then the client SHOULD play this rendition of the
  679 + content in the absence of information from the user indicating a
  680 + different choice. This attribute is OPTIONAL. Its absence indicates
  681 + an implicit value of NO.
  682 +
  683 + AUTOSELECT
  684 +
  685 + The value is an enumerated-string; valid strings are YES and NO.
  686 + This attribute is OPTIONAL. If it is present, its value MUST be YES
  687 + if the value of the DEFAULT attribute is YES. If the value is YES,
  688 + then the client MAY choose to play this rendition in the absence of
  689 + explicit user preference because it matches the current playback
  690 + environment, such as chosen system language.
  691 +
  692 + FORCED
  693 +
  694 + The value is an enumerated-string; valid strings are YES and NO.
  695 + This attribute is OPTIONAL. Its absence indicates an implicit value
  696 + of NO. The FORCED attribute MUST NOT be present unless the TYPE is
  697 + SUBTITLES.
  698 +
  699 + A value of YES indicates that the rendition contains content which is
  700 + considered essential to play. When selecting a FORCED rendition, a
  701 + client should choose the one that best matches the current playback
  702 + environment (e.g. language).
  703 +
  704 + A value of NO indicates that the rendition contains content which is
  705 + intended to be played in response to explicit user request.
  706 +
  707 + INSTREAM-ID
  708 +
  709 + The value is a quoted-string that specifies a rendition within the
  710 + segments in the Media Playlist. This attribute is REQUIRED if the
  711 + TYPE attribute is CLOSED-CAPTIONS, in which case it MUST have one of
  712 + the values: "CC1", "CC2", "CC3", "CC4". For all other TYPE values,
  713 + the INSTREAM-ID SHOULD NOT be specified.
  714 +
  715 + CHARACTERISTICS
  716 +
  717 + The value is a quoted-string containing one or more Uniform Type
  718 + Identifiers [UTI] separated by comma (,) characters. This attribute
  719 + is OPTIONAL. Each UTI indicates an individual characteristic of the
  720 + rendition.
  721 +
  722 + A SUBTITLES rendition MAY include the following characteristics:
  723 +
  724 +
  725 +
  726 +Pantos & May Expires April 17, 2014 [Page 13]
  727 +
  728 +Internet-Draft HTTP Live Streaming October 2013
  729 +
  730 +
  731 + "public.accessibility.transcribes-spoken-dialog";
  732 + "public.accessibility.describes-music-and-sound"; "public.easy-to-
  733 + read" (which indicates that the subtitles have been edited for ease
  734 + of reading).
  735 +
  736 + An AUDIO rendition MAY include the following characteristics:
  737 + "public.accessibility.describes-video".
  738 +
  739 + The CHARACTERISTICS attribute MAY include private UTIs.
  740 +
  741 + The EXT-X-MEDIA tag appeared in version 4 of the protocol. The EXT-
  742 + X-MEDIA tag MUST NOT appear in a Media Playlist.
  743 +
  744 +3.4.9.1. Rendition Groups
  745 +
  746 + A set of EXT-X-MEDIA tags with the same GROUP-ID value forms a group
  747 + of renditions. Each member of the group MUST represent an
  748 + alternative rendition of the same content.
  749 +
  750 + All EXT-X-MEDIA tags in a Playlist MUST meet the following
  751 + constraints:
  752 +
  753 + o All EXT-X-MEDIA tags in the same group MUST have the same TYPE
  754 + attribute.
  755 +
  756 + o All EXT-X-MEDIA tags in the same group MUST have different NAME
  757 + attributes.
  758 +
  759 + o A group MUST NOT have more than one member with a DEFAULT
  760 + attribute of YES.
  761 +
  762 + o All members of a group whose AUTOSELECT attribute has a value of
  763 + YES MUST have LANGUAGE [RFC5646] attributes with unique values.
  764 +
  765 + A Playlist MAY contain multiple groups of the same TYPE in order to
  766 + provide multiple encodings of each group. If it does so, each group
  767 + of the same TYPE MUST contain identical attributes, with the
  768 + exception of the URI attribute.
  769 +
  770 + Each member in a group of renditions MAY have a different sample
  771 + format. However, any EXT-X-STREAM-INF tag or EXT-X-I-FRAME-STREAMINF
  772 + tag which references that group MUST have a CODECS attribute that
  773 + lists every sample format present in any rendition in the group.
  774 + Please see Section 3.4.10 and Section 3.4.15.
  775 +
  776 +
  777 +
  778 +
  779 +
  780 +
  781 +
  782 +Pantos & May Expires April 17, 2014 [Page 14]
  783 +
  784 +Internet-Draft HTTP Live Streaming October 2013
  785 +
  786 +
  787 +3.4.10. EXT-X-STREAM-INF
  788 +
  789 + The EXT-X-STREAM-INF tag specifies a variant stream, which is a set
  790 + of renditions which can be combined to play the presentation. The
  791 + attributes of the tag provide information about the variant stream.
  792 +
  793 + The EXT-X-STREAM-INF tag identifies the next URI line in the Playlist
  794 + as a rendition of the variant stream.
  795 +
  796 + The EXT-X-STREAM-INF tag MUST NOT appear in a Media Playlist.
  797 +
  798 + Its format is:
  799 +
  800 + #EXT-X-STREAM-INF:<attribute-list>
  801 + <URI>
  802 +
  803 + The following attributes are defined:
  804 +
  805 + BANDWIDTH
  806 +
  807 + The value is a decimal-integer of bits per second. It MUST be an
  808 + upper bound of the overall bitrate of each media segment (calculated
  809 + to include container overhead) that appears or will appear in the
  810 + Playlist.
  811 +
  812 + Every EXT-X-STREAM-INF tag MUST include the BANDWIDTH attribute.
  813 +
  814 + CODECS
  815 +
  816 + The value is a quoted-string containing a comma-separated list of
  817 + formats, where each format specifies a media sample type that is
  818 + present in a media segment in the Media Playlist file. Valid format
  819 + identifiers are those in the ISO Base Media File Format Name Space
  820 + defined by RFC 6381 [RFC6381].
  821 +
  822 + Every EXT-X-STREAM-INF tag SHOULD include a CODECS attribute.
  823 +
  824 + RESOLUTION
  825 +
  826 + The value is a decimal-resolution describing the approximate encoded
  827 + horizontal and vertical resolution of video within the presentation.
  828 +
  829 + The RESOLUTION attribute is OPTIONAL but is recommended if the
  830 + variant stream includes video.
  831 +
  832 + AUDIO
  833 +
  834 + The value is a quoted-string. It MUST match the value of the
  835 +
  836 +
  837 +
  838 +Pantos & May Expires April 17, 2014 [Page 15]
  839 +
  840 +Internet-Draft HTTP Live Streaming October 2013
  841 +
  842 +
  843 + GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master
  844 + Playlist whose TYPE attribute is AUDIO. It indicates the set of
  845 + audio renditions that MAY be used when playing the presentation. See
  846 + Section 3.4.10.1.
  847 +
  848 + The AUDIO attribute is OPTIONAL.
  849 +
  850 + VIDEO
  851 +
  852 + The value is a quoted-string. It MUST match the value of the
  853 + GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master
  854 + Playlist whose TYPE attribute is VIDEO. It indicates the set of
  855 + video renditions that MAY be used when playing the presentation. See
  856 + Section 3.4.10.1.
  857 +
  858 + The VIDEO attribute is OPTIONAL.
  859 +
  860 + SUBTITLES
  861 +
  862 + The value is a quoted-string. It MUST match the value of the
  863 + GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master
  864 + Playlist whose TYPE attribute is SUBTITLES. It indicates the set of
  865 + subtitle renditions that MAY be used when playing the presentation.
  866 + See Section 3.4.10.1.
  867 +
  868 + The SUBTITLES attribute is OPTIONAL.
  869 +
  870 + CLOSED-CAPTIONS
  871 +
  872 + The value can be either a quoted-string or an enumerated-string with
  873 + the value NONE. If the value is a quoted-string, it MUST match the
  874 + value of the GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in
  875 + the Playlist whose TYPE attribute is CLOSED-CAPTIONS, and indicates
  876 + the set of closed-caption renditions that may be used when playlist
  877 + the presentation. See Section 3.4.10.1.
  878 +
  879 + If the value is the enumerated-string value NONE, all EXT-X-STREAM-
  880 + INF tags MUST have this attribute with a value of NONE. This
  881 + indicates that there are no closed captions in any variant stream in
  882 + the Master Playlist.
  883 +
  884 + The CLOSED-CAPTIONS attribute is OPTIONAL.
  885 +
  886 +3.4.10.1. Alternative Renditions
  887 +
  888 + When an EXT-X-STREAM-INF tag contains an AUDIO, VIDEO, SUBTITLES, or
  889 + CLOSED-CAPTIONS attribute, it indicates that alternative renditions
  890 + of the content are available for playback of that variant stream.
  891 +
  892 +
  893 +
  894 +Pantos & May Expires April 17, 2014 [Page 16]
  895 +
  896 +Internet-Draft HTTP Live Streaming October 2013
  897 +
  898 +
  899 + When defining alternative renditions, the following constraints MUST
  900 + be met:
  901 +
  902 + o All playable combinations of renditions associated with an EXT-X-
  903 + STREAM-INF tag MUST have an aggregate bandwidth less than or equal
  904 + to the BANDWIDTH attribute of the EXT-X-STREAM-INF tag.
  905 +
  906 + o If an EXT-X-STREAM-INF tag contains a RESOLUTION attribute and a
  907 + VIDEO attribute, then every alternative video rendition MUST match
  908 + the value of the RESOLUTION attribute.
  909 +
  910 + o Every alternative rendition associated with an EXT-X-STREAM-INF
  911 + tag MUST meet the constraints for a variant stream described in
  912 + Section 6.2.4.
  913 +
  914 + The URI attribute is REQUIRED if the media type is SUBTITLES, but
  915 + OPTIONAL if the media type is VIDEO or AUDIO. If the media type is
  916 + VIDEO or AUDIO, a missing URI attribute indicates that the media data
  917 + for this rendition is included in the Media playlist of any EXT-X-
  918 + STREAM-INF tag referencing this MEDIA tag. If the media type is
  919 + AUDIO, the audio data for this rendition MUST also be present in any
  920 + video renditions specified by the EXT-X-STREAM-INF tag.
  921 +
  922 + The URI attribute MUST NOT be included if the media type is CLOSED-
  923 + CAPTIONS.
  924 +
  925 + Note that if a client chooses to play renditions of audio and video
  926 + that are not present in the main Media Playlist described by the EXT-
  927 + X-STREAM-INF tag, or if the client chooses to play an audio rendition
  928 + and the main Playlist is audio-only, then the client MAY ignore the
  929 + main Playlist and its media.
  930 +
  931 +3.4.11. EXT-X-DISCONTINUITY
  932 +
  933 + The EXT-X-DISCONTINUITY tag indicates an encoding discontinuity
  934 + between the media segment that follows it and the one that preceded
  935 + it. The set of characteristics that MAY change is:
  936 +
  937 + o file format
  938 +
  939 + o number and type of tracks
  940 +
  941 + o encoding parameters
  942 +
  943 + o encoding sequence
  944 +
  945 + o timestamp sequence
  946 +
  947 +
  948 +
  949 +
  950 +Pantos & May Expires April 17, 2014 [Page 17]
  951 +
  952 +Internet-Draft HTTP Live Streaming October 2013
  953 +
  954 +
  955 + Its format is:
  956 +
  957 + #EXT-X-DISCONTINUITY
  958 +
  959 + See Section 4, Section 6.2.1, and Section 6.3.3 for more information
  960 + about the EXT-X-DISCONTINUITY tag.
  961 +
  962 + The EXT-X-DISCONTINUITY tag MUST NOT appear in a Master Playlist.
  963 +
  964 +3.4.12. EXT-X-DISCONTINUITY-SEQUENCE
  965 +
  966 + The EXT-X-DISCONTINUITY-SEQUENCE tag allows synchronization between
  967 + different renditions of the same variant stream or different variant
  968 + streams that have EXT-X-DISCONTINUITY tags in their Media Playlists.
  969 +
  970 + Its format is:
  971 +
  972 + #EXT-X-DISCONTINUITY-SEQUENCE:<number>
  973 +
  974 + where number is a decimal-integer. The discontinuity sequence number
  975 + MUST NOT decrease.
  976 +
  977 + A Media Playlist MUST NOT contain more than one EXT-X-DISCONTINUITY-
  978 + SEQUENCE tag. If the Media Playlist does not contain an EXT-X-
  979 + DISCONTINUITY-SEQUENCE tag, then the discontinuity sequence number of
  980 + the first segment in the playlist SHALL be considered to be 0.
  981 +
  982 + The EXT-X-DISCONTINUITY-SEQUENCE tag MUST appear before any EXT-X-
  983 + DISCONTINUITY tag.
  984 +
  985 + A media playlist MUST NOT contain a EXT-X-DISCONTINUITY-SEQUENCE if
  986 + its EXT-X-PLAYLIST-TYPE is VOD or EVENT.
  987 +
  988 + An EXT-X-DISCONTINUITY-SEQUENCE tag MUST ONLY appear in a Media
  989 + Playlist.
  990 +
  991 + See Section 6.2.1 and Section 6.2.2 for more information about the
  992 + EXT-X-DISCONTINUITY-SEQUENCE tag.
  993 +
  994 +3.4.13. EXT-X-I-FRAMES-ONLY
  995 +
  996 + The EXT-X-I-FRAMES-ONLY tag indicates that each media segment in the
  997 + Playlist describes a single I-frame. I-frames (or Intra frames) are
  998 + encoded video frames whose encoding does not depend on any other
  999 + frame.
  1000 +
  1001 +
  1002 +
  1003 +
  1004 +
  1005 +
  1006 +Pantos & May Expires April 17, 2014 [Page 18]
  1007 +
  1008 +Internet-Draft HTTP Live Streaming October 2013
  1009 +
  1010 +
  1011 + The EXT-X-I-FRAMES-ONLY tag applies to the entire Playlist. Its
  1012 + format is:
  1013 +
  1014 + #EXT-X-I-FRAMES-ONLY
  1015 +
  1016 + In a Playlist with the EXT-X-I-FRAMES-ONLY tag, the media segment
  1017 + duration (EXTINF tag value) is the time between the presentation time
  1018 + of the I-frame in the media segment and the presentation time of the
  1019 + next I-frame in the Playlist, or the end of the presentation if it is
  1020 + the last I-frame in the Playlist.
  1021 +
  1022 + Media resources containing I-frame segments MUST begin with either a
  1023 + Transport Stream PAT/PMT or be accompanied by an EXT-X-MAP tag
  1024 + indicating the proper PAT/PMT. The byte range of an I-frame segment
  1025 + with an EXT-X-BYTERANGE tag applied to it (Section 3.4.1) MUST NOT
  1026 + include a PAT/PMT.
  1027 +
  1028 + The EXT-X-I-FRAMES-ONLY tag appeared in version 4 of the protocol.
  1029 + The EXT-X-I-FRAMES-ONLY tag MUST NOT appear in a Master Playlist.
  1030 +
  1031 +3.4.14. EXT-X-MAP
  1032 +
  1033 + The EXT-X-MAP tag specifies how to obtain header information required
  1034 + to parse the applicable media segments, such as the Transport Stream
  1035 + PAT/PMT or the WebVTT header. It applies to every media segment that
  1036 + appears after it in the Playlist until the next EXT-X-DISCONTINUITY
  1037 + tag, or until the end of the playlist.
  1038 +
  1039 + Its format is:
  1040 +
  1041 + #EXT-X-MAP:<attribute-list>
  1042 +
  1043 + The following attributes are defined:
  1044 +
  1045 + URI
  1046 +
  1047 + The value is a quoted-string containing a URI that identifies a
  1048 + resource that contains segment header information. This attribute is
  1049 + REQUIRED.
  1050 +
  1051 + BYTERANGE
  1052 +
  1053 + The value is a quoted-string specifying a byte range into the
  1054 + resource identified by the URI attribute. This range SHOULD contain
  1055 + only the header information. The format of the byte range is
  1056 + described in Section 3.4.1. This attribute is OPTIONAL; if it is not
  1057 + present, the byte range is the entire resource indicated by the URI.
  1058 +
  1059 +
  1060 +
  1061 +
  1062 +Pantos & May Expires April 17, 2014 [Page 19]
  1063 +
  1064 +Internet-Draft HTTP Live Streaming October 2013
  1065 +
  1066 +
  1067 + The EXT-X-MAP tag appeared in version 5 of the protocol for use in
  1068 + Media Playlist that contain the EXT-X-I-FRAMES-ONLY tag. In protocol
  1069 + version 6, it may appear in any Media Playlist.
  1070 +
  1071 + The EXT-X-MAP tag MUST NOT appear in a Master Playlist.
  1072 +
  1073 +3.4.15. EXT-X-I-FRAME-STREAM-INF
  1074 +
  1075 + The EXT-X-I-FRAME-STREAM-INF tag identifies a Media Playlist file
  1076 + containing the I-frames of a multimedia presentation. It stands
  1077 + alone, in that it does not apply to a particular URI in the Master
  1078 + Playlist. Its format is:
  1079 +
  1080 + #EXT-X-I-FRAME-STREAM-INF:<attribute-list>
  1081 +
  1082 + All attributes defined for the EXT-X-STREAM-INF tag (Section 3.4.10)
  1083 + are also defined for the EXT-X-I-FRAME-STREAM-INF tag, except for the
  1084 + AUDIO, SUBTITLES and CLOSED-CAPTIONS attributes. In addition, the
  1085 + following attribute is defined:
  1086 +
  1087 + URI
  1088 +
  1089 + The value is a quoted-string containing a URI that identifies the
  1090 + I-frame Playlist file.
  1091 +
  1092 + Every EXT-X-I-FRAME-STREAM-INF tag MUST include a BANDWIDTH attribute
  1093 + and a URI attribute.
  1094 +
  1095 + The provisions in Section 3.4.10.1 also apply to EXT-X-I-FRAME-
  1096 + STREAM-INF tags with a VIDEO attribute.
  1097 +
  1098 + A Master Playlist that specifies alternative VIDEO renditions and
  1099 + I-frame Playlists SHOULD include an alternative I-frame VIDEO
  1100 + rendition for each regular VIDEO rendition, with the same NAME and
  1101 + LANGUAGE attributes.
  1102 +
  1103 + The EXT-X-I-FRAME-STREAM-INF tag appeared in version 4 of the
  1104 + protocol. Clients that do not implement protocol version 4 or higher
  1105 + MUST ignore it. The EXT-X-I-FRAME-STREAM-INF tag MUST NOT appear in
  1106 + a Media Playlist.
  1107 +
  1108 +3.4.16. EXT-X-START
  1109 +
  1110 + The EXT-X-START tag indicates a preferred point at which to start
  1111 + playing a Playlist. By default, clients SHOULD start playback at
  1112 + this point when beginning a playback session. It MUST NOT appear
  1113 + more than once in a Playlist. This tag is OPTIONAL.
  1114 +
  1115 +
  1116 +
  1117 +
  1118 +Pantos & May Expires April 17, 2014 [Page 20]
  1119 +
  1120 +Internet-Draft HTTP Live Streaming October 2013
  1121 +
  1122 +
  1123 + If the EXT-X-START tag appears in a Master Playlist, it indicates the
  1124 + preferred starting point of every Media Playlist in the Master
  1125 + Playlist. If this tag appears in a Media Playlist that is referenced
  1126 + by a Master Playlist, then every other Media Playlist in the Master
  1127 + Playlist MUST also contain an EXT-X-START tag with the same
  1128 + attributes and values.
  1129 +
  1130 + Its format is:
  1131 +
  1132 + #EXT-X-START:<attribute list>
  1133 +
  1134 + The following attributes are defined:
  1135 +
  1136 + TIME-OFFSET
  1137 +
  1138 + The value of TIME-OFFSET is a decimal-floating-point number of
  1139 + seconds. A positive number indicates a time offset from the
  1140 + beginning of the Playlist. A negative number indicates a negative
  1141 + time offset from the end of the last segment in the Playlist. This
  1142 + attribute is REQUIRED.
  1143 +
  1144 + The absolute value of TIME-OFFSET MUST NOT be larger than the
  1145 + Playlist duration.
  1146 +
  1147 + If the Playlist does not contain the EXT-X-ENDLIST tag, the TIME-
  1148 + OFFSET SHOULD NOT be within three target durations of the end of the
  1149 + Playlist file.
  1150 +
  1151 + PRECISE
  1152 +
  1153 + The value is an enumerated-string; valid strings are YES and NO. If
  1154 + the value is YES, clients SHOULD start playback at the segment
  1155 + containing the TIME-OFFSET, but SHOULD NOT render media samples in
  1156 + that segment whose presentation times are prior to the TIME-OFFSET.
  1157 + If the value is NO, clients SHOULD attempt to render every media
  1158 + sample in that segment. This attribute is OPTIONAL. If it is
  1159 + missing, its value should be treated as NO.
  1160 +
  1161 + The EXT-X-START tag appeared in version 6 of the protocol.
  1162 +
  1163 +3.4.17. EXT-X-VERSION
  1164 +
  1165 + The EXT-X-VERSION tag indicates the compatibility version of the
  1166 + Playlist file. The Playlist file, its associated media, and its
  1167 + server MUST comply with all provisions of the most-recent version of
  1168 + this document describing the protocol version indicated by the tag
  1169 + value.
  1170 +
  1171 +
  1172 +
  1173 +
  1174 +Pantos & May Expires April 17, 2014 [Page 21]
  1175 +
  1176 +Internet-Draft HTTP Live Streaming October 2013
  1177 +
  1178 +
  1179 + The EXT-X-VERSION tag applies to the entire Playlist file. Its
  1180 + format is:
  1181 +
  1182 + #EXT-X-VERSION:<n>
  1183 +
  1184 + where n is an integer indicating the protocol version.
  1185 +
  1186 + A Playlist file MUST NOT contain more than one EXT-X-VERSION tag. A
  1187 + Playlist file that does not contain an EXT-X-VERSION tag MUST comply
  1188 + with version 1 of this protocol.
  1189 +
  1190 + The EXT-X-VERSION tag MAY appear in either Master Playlist or Media
  1191 + Playlist. It MUST appear in all playlists containing tags or
  1192 + attributes that are not compatible with protocol version 1.
  1193 +
  1194 +
  1195 +4. Media segments
  1196 +
  1197 + Each media URI in a Playlist file specifies a media segment which is
  1198 + part of the overall presentation. If a media URI has an EXT-X-
  1199 + BYTERANGE tag applied to it, the segment is a sub-range of the media
  1200 + file identified by the URI. Otherwise, the segment is the entire
  1201 + media file.
  1202 +
  1203 + Each media segment MUST be formatted as an MPEG-2 Transport Stream
  1204 + [ISO_13818], an MPEG audio elementary stream [ISO_11172], or a WebVTT
  1205 + [WebVTT] file.
  1206 +
  1207 + Transport Stream segments MUST contain a single MPEG-2 Program.
  1208 + There SHOULD be a Program Association Table (PAT) and a Program Map
  1209 + Table (PMT) at the start of each segment. A segment that contains
  1210 + video SHOULD have at least one key frame and enough information to
  1211 + completely initialize a video decoder.
  1212 +
  1213 + A Transport Stream or audio elementary stream segment MUST be the
  1214 + continuation of the encoded media at the end of the segment with the
  1215 + previous sequence number, where values in a continuous series, such
  1216 + as timestamps and Continuity Counters, continue uninterrupted -
  1217 + unless the media segment was the first ever to appear in the Playlist
  1218 + file or has an EXT-X-DISCONTINUITY tag applied to it.
  1219 +
  1220 + Clients SHOULD be prepared to handle multiple tracks of a particular
  1221 + type (e.g. audio or video). A client with no other preference SHOULD
  1222 + choose the track with the lowest numerical PID that it can play.
  1223 +
  1224 + Clients MUST ignore private streams inside Transport Streams that
  1225 + they do not recognize.
  1226 +
  1227 +
  1228 +
  1229 +
  1230 +Pantos & May Expires April 17, 2014 [Page 22]
  1231 +
  1232 +Internet-Draft HTTP Live Streaming October 2013
  1233 +
  1234 +
  1235 + Each Elementary Audio Stream segment MUST signal the timestamp of its
  1236 + first sample with an ID3 PRIV tag [ID3] at the beginning of the
  1237 + segment. The ID3 PRIV owner identifier MUST be
  1238 + "com.apple.streaming.transportStreamTimestamp". The ID3 payload MUST
  1239 + be a 33-bit MPEG-2 Program Elementary Stream timestamp expressed as a
  1240 + big-endian eight-octet number, with the upper 31 bits set to zero.
  1241 +
  1242 + The encoding parameters for samples in a media segment and across
  1243 + multiple media segments in a Media Playlist SHOULD remain consistent.
  1244 + However clients SHOULD deal with encoding changes as they are
  1245 + encountered, for example by scaling video content to accommodate a
  1246 + resolution change.
  1247 +
  1248 + Subtitle segments MUST be formatted as WebVTT [WebVTT] files. Each
  1249 + subtitle segment MUST contain all subtitle cues that are intended to
  1250 + be displayed during the period indicated by the segment EXTINF
  1251 + duration. The start time offset and end time offset of each cue MUST
  1252 + indicate the total display time for that cue, even if that time range
  1253 + extends beyond the EXTINF duration. A WebVTT segment MAY contain no
  1254 + cues; this indicates that no subtitles are to be displayed during
  1255 + that period.
  1256 +
  1257 + Each subtitle segment MUST either start with a WebVTT header or have
  1258 + an EXT-X-MAP tag applied to it in the Media Playlist.
  1259 +
  1260 + Within each WebVTT header there MUST be an X-TIMESTAMP-MAP metadata
  1261 + header. This header synchronizes the cue timestamps in the WebVTT
  1262 + file with the MPEG-2 (PES) timestamps in other renditions of the
  1263 + variant stream. Its format is:
  1264 +
  1265 + X-TIMESTAMP-MAP=LOCAL:<cue time>,MPEGTS:<MPEG-2 time>
  1266 + e.g. X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000
  1267 +
  1268 + The cue timestamp in the LOCAL attribute MAY fall outside the range
  1269 + of time covered by the segment.
  1270 +
  1271 +
  1272 +5. Key files
  1273 +
  1274 +5.1. Introduction
  1275 +
  1276 + An EXT-X-KEY tag with a URI attribute identifies a Key file. A Key
  1277 + file contains the cipher key that MUST be used to decrypt subsequent
  1278 + media segments in the Playlist.
  1279 +
  1280 + [AES_128] encryption uses 16-octet keys. If the KEYFORMAT of an EXT-
  1281 + X-KEY tag is "identity", the Key file is a single packed array of 16
  1282 + octets in binary format.
  1283 +
  1284 +
  1285 +
  1286 +Pantos & May Expires April 17, 2014 [Page 23]
  1287 +
  1288 +Internet-Draft HTTP Live Streaming October 2013
  1289 +
  1290 +
  1291 +5.2. IV for [AES_128]
  1292 +
  1293 + [AES_128] requires the same 16-octet Initialization Vector (IV) to be
  1294 + supplied when encrypting and decrypting. Varying this IV increases
  1295 + the strength of the cipher.
  1296 +
  1297 + If an EXT-X-KEY tag has a KEYFORMAT of "identity" and an IV attribute
  1298 + is present, implementations MUST use the attribute value as the IV
  1299 + when encrypting or decrypting with that key. The value MUST be
  1300 + interpreted as a 128-bit number.
  1301 +
  1302 + If an EXT-X-KEY tag with a KEYFORMAT of "identity" does not have the
  1303 + IV attribute, implementations MUST use the sequence number of the
  1304 + media segment as the IV when encrypting or decrypting that media
  1305 + segment. The big-endian binary representation of the sequence number
  1306 + SHALL be placed in a 16-octet buffer and padded (on the left) with
  1307 + zeros.
  1308 +
  1309 +
  1310 +6. Client/Server Actions
  1311 +
  1312 +6.1. Introduction
  1313 +
  1314 + This section describes how the server generates the Playlist and
  1315 + media segments and how the client should download and play them.
  1316 +
  1317 +6.2. Server Process
  1318 +
  1319 +6.2.1. Introduction
  1320 +
  1321 + The production of the source media is outside the scope of this
  1322 + document, which simply presumes a source of continuous encoded media
  1323 + containing the presentation.
  1324 +
  1325 + The server MUST divide the source media into individual media
  1326 + segments whose duration is less than or equal to a constant target
  1327 + duration. The server SHOULD attempt to divide the source media at
  1328 + points that support effective decode of individual media segments,
  1329 + e.g. on packet and key frame boundaries.
  1330 +
  1331 + The server MUST create a URI for every media segment that enables its
  1332 + clients to obtain the segment data. If a server supports partial
  1333 + loading of resources (e.g. via HTTP Range requests), it MAY specify
  1334 + segments as sub-ranges of larger resources using the EXT-X-BYTERANGE
  1335 + tag.
  1336 +
  1337 + If WebVTT segments are distributed by HTTP, the server SHOULD support
  1338 + client requests to use the "gzip" Content-Encoding.
  1339 +
  1340 +
  1341 +
  1342 +Pantos & May Expires April 17, 2014 [Page 24]
  1343 +
  1344 +Internet-Draft HTTP Live Streaming October 2013
  1345 +
  1346 +
  1347 + The server MUST create a Media Playlist file. The Playlist file MUST
  1348 + conform to the format described in Section 3. A URI for each media
  1349 + segment that the server wishes to make available MUST appear in the
  1350 + Media Playlist in the order in which it is to be played. The entire
  1351 + media segment MUST be available to clients if its URI is in the
  1352 + Playlist file.
  1353 +
  1354 + The Media Playlist file MUST contain an EXT-X-TARGETDURATION tag.
  1355 + Its value MUST be equal to or greater than the EXTINF duration of any
  1356 + media segment that appears or will appear in the Playlist file,
  1357 + rounded to the nearest integer. Its value MUST NOT change. A
  1358 + typical target duration is 10 seconds.
  1359 +
  1360 + The Playlist file SHOULD contain one EXT-X-VERSION tag which
  1361 + indicates its compatibility version. Its value MUST be the lowest
  1362 + protocol version with which the server, Playlist file, and associated
  1363 + media segments all comply. Its value MUST NOT change.
  1364 +
  1365 + The server MUST create a URI for the Playlist file that will allow
  1366 + its clients to obtain the file.
  1367 +
  1368 + If the Playlist file is distributed by HTTP, the server SHOULD
  1369 + support client requests to use "gzip" Content-Encoding.
  1370 +
  1371 + Changes to the Playlist file MUST be made atomically from the point
  1372 + of view of the clients.
  1373 +
  1374 + The server MUST NOT change the Media Playlist file, except to:
  1375 +
  1376 + Append lines to it (Section 6.2.1).
  1377 +
  1378 + Remove media segment URIs from the Playlist in the order that they
  1379 + appear, along with any tags that apply only to those segments
  1380 + (Section 6.2.2).
  1381 +
  1382 + Increment the value of the EXT-X-MEDIA-SEQUENCE or EXT-X-
  1383 + DISCONTINUITY-SEQUENCE tags (Section 6.2.2).
  1384 +
  1385 + Add or remove EXT-X-STREAM-INF tags or EXT-X-I-FRAME-STREAM-INF
  1386 + tags (Section 6.2.4). Note that clients are not required to
  1387 + reload Master Playlist files, so changing them may not have
  1388 + immediate effect.
  1389 +
  1390 + Add an EXT-X-ENDLIST tag to the Playlist (Section 6.2.1).
  1391 +
  1392 + Furthermore, the Playlist file MAY contain an EXT-X-PLAYLIST-TYPE tag
  1393 + with a value of either EVENT or VOD. If the tag is present and has a
  1394 + value of EVENT, the server MUST NOT change or delete any part of the
  1395 +
  1396 +
  1397 +
  1398 +Pantos & May Expires April 17, 2014 [Page 25]
  1399 +
  1400 +Internet-Draft HTTP Live Streaming October 2013
  1401 +
  1402 +
  1403 + Playlist file (although it MAY append lines to it). If the tag is
  1404 + present and has a value of VOD, the Playlist file MUST NOT change.
  1405 +
  1406 + Every media segment in a Playlist MUST have an EXTINF tag applied to
  1407 + it indicating the duration of the media segment.
  1408 +
  1409 + Each segment in a Media Playlist has an integer discontinuity
  1410 + sequence number. The discontinuity sequence number can be used in
  1411 + addition to the timestamps within the media to synchronize media
  1412 + segments across different renditions.
  1413 +
  1414 + A segment's discontinuity sequence number is the value of the EXT-X-
  1415 + DISCONTINUITY-SEQUENCE tag (or zero if none) plus the number of EXT-
  1416 + X-DISCONTINUITY tags in the playlist preceding the URI line of the
  1417 + segment.
  1418 +
  1419 + A Media Playlist that contains an EXT-X-PLAYLIST-TYPE tag with a
  1420 + value of EVENT or VOD MUST NOT contain an EXT-X-DISCONTINUITY-
  1421 + SEQUENCE tag.
  1422 +
  1423 + The server MAY associate an absolute date and time with a media
  1424 + segment by applying an EXT-X-PROGRAM-DATE-TIME tag to it. This
  1425 + defines an informative mapping of the (wall-clock) date and time
  1426 + specified by the tag to the first media timestamp in the segment,
  1427 + which may be used as a basis for seeking, for display, or for other
  1428 + purposes. If a server provides this mapping, it SHOULD apply an EXT-
  1429 + X-PROGRAM-DATE-TIME tag to every segment that has an EXT-X-
  1430 + DISCONTINUITY tag applied to it.
  1431 +
  1432 + If the Media Playlist contains the final media segment of the
  1433 + presentation then the Playlist file MUST contain the EXT-X-ENDLIST
  1434 + tag.
  1435 +
  1436 + If a Media Playlist does not contain the EXT-X-ENDLIST tag, the
  1437 + server MUST make a new version of the Playlist file available that
  1438 + contains at least one new media segment. It MUST be made available
  1439 + relative to the time that the previous version of the Playlist file
  1440 + was made available: no earlier than one-half the target duration
  1441 + after that time, and no later than 1.5 times the target duration
  1442 + after that time.
  1443 +
  1444 + If the server wishes to remove an entire presentation, it MUST make
  1445 + the Playlist file unavailable to clients. It SHOULD ensure that all
  1446 + media segments in the Playlist file remain available to clients for
  1447 + at least the duration of the Playlist file at the time of removal.
  1448 +
  1449 +
  1450 +
  1451 +
  1452 +
  1453 +
  1454 +Pantos & May Expires April 17, 2014 [Page 26]
  1455 +
  1456 +Internet-Draft HTTP Live Streaming October 2013
  1457 +
  1458 +
  1459 +6.2.2. Live Playlists
  1460 +
  1461 + The server MAY limit the availability of media segments by removing
  1462 + media segments from the Playlist file (Section 6.2.1). If media
  1463 + segments are to be removed, the Playlist file MUST contain exactly
  1464 + one EXT-X-MEDIA-SEQUENCE tag. Its value MUST be incremented by 1 for
  1465 + every media segment that is removed from the Playlist file.
  1466 +
  1467 + Media segments MUST be removed from the Playlist file in the order
  1468 + that they appear in the Playlist.
  1469 +
  1470 + The server MUST NOT remove a media segment from the Playlist file if
  1471 + the duration of the Playlist file minus the duration of the segment
  1472 + is less than three times the target duration.
  1473 +
  1474 + When the server removes a media segment from the Playlist, the
  1475 + corresponding media URI SHOULD remain available to clients for a
  1476 + period of time equal to the duration of the segment plus the duration
  1477 + of the longest Playlist file distributed by the server containing
  1478 + that segment.
  1479 +
  1480 + If the server wishes to remove segments from a Media Playlist
  1481 + containing an EXT-X-DISCONTINUITY tag, the playlist MUST contain an
  1482 + EXT-X-DISCONTINUITY-SEQUENCE tag.
  1483 +
  1484 + If the server removes a EXT-X-DISCONTINUITY tag from the Media
  1485 + Playlist, it MUST increment the value of the EXT-X-DISCONTINUITY-
  1486 + SEQUENCE tag so that the discontinuity sequence numbers of the
  1487 + segments still in the playlist remain unchanged.
  1488 +
  1489 + If a server plans to remove a media segment after it is delivered to
  1490 + clients over HTTP, it SHOULD ensure that the HTTP response contains
  1491 + an Expires header that reflects the planned time-to-live.
  1492 +
  1493 + A Live Playlist MUST NOT contain the EXT-X-PLAYLIST-TYPE tag.
  1494 +
  1495 +6.2.3. Encrypting media segments
  1496 +
  1497 + If media segments are to be encrypted the server MUST define a URI
  1498 + which will allow authorized clients to obtain a Key file containing a
  1499 + decryption key. The Key file MUST conform to the format described in
  1500 + Section 5.
  1501 +
  1502 + The server MAY set the HTTP Expires header in the key response to
  1503 + indicate that the key may be cached.
  1504 +
  1505 + The server MUST encrypt every media segment in a Playlist according
  1506 + to the EXT-X-KEY tag that applies to its URI in the Playlist file.
  1507 +
  1508 +
  1509 +
  1510 +Pantos & May Expires April 17, 2014 [Page 27]
  1511 +
  1512 +Internet-Draft HTTP Live Streaming October 2013
  1513 +
  1514 +
  1515 + Media segments with an EXT-X-KEY tag whose METHOD is NONE, or which
  1516 + do not have an EXT-X-KEY tag applied to them, MUST NOT be encrypted.
  1517 +
  1518 + If the encryption METHOD is AES-128 and the Playlist does not contain
  1519 + the EXT-X-I-FRAMES-ONLY tag, AES-128 CBC encryption with PKCS7
  1520 + padding [RFC5652] SHALL be applied to individual media segments. The
  1521 + entire segment MUST be encrypted. Cipher Block Chaining MUST NOT be
  1522 + applied across media segments. The IV used for encryption MUST be
  1523 + either the sequence number of the media segment or the value of the
  1524 + IV attribute of the EXT-X-KEY tag, as described in Section 5.2.
  1525 +
  1526 + If the encryption METHOD is AES-128 and the Playlist contains an EXT-
  1527 + X-I-FRAMES-ONLY tag, AES-128 CBC encryption with PKCS7 padding
  1528 + [RFC5652] MUST be applied to the entire resource. The entire
  1529 + resource MUST be encrypted. Encryption MAY be restarted on 16-byte
  1530 + block boundaries, unless the first block contains an I-frame. The IV
  1531 + used for encryption MUST be either the sequence number of the media
  1532 + segment or the value of the IV attribute of the EXT-X-KEY tag, as
  1533 + described in Section 5.2.
  1534 +
  1535 + If the encryption METHOD is SAMPLE-AES, certain elementary streams
  1536 + MAY be encrypted prior to encapsulation in a media segment. The
  1537 + encryption format for H.264, AAC and AC-3 elementary streams is
  1538 + described by [SampleEnc].
  1539 +
  1540 + The server MUST NOT remove an EXT-X-KEY tag from the Playlist file if
  1541 + it applies to any media segment in the Playlist file.
  1542 +
  1543 +6.2.4. Providing variant streams
  1544 +
  1545 + A server MAY offer multiple Media Playlist files to provide different
  1546 + encodings of the same presentation. If it does so it SHOULD provide
  1547 + a Master Playlist file that lists each variant stream to allow
  1548 + clients to switch between encodings dynamically.
  1549 +
  1550 + Master Playlists MUST contain an EXT-X-STREAM-INF tag or EXT-X-I-
  1551 + FRAME-STREAM-INF tag for each variant stream.
  1552 +
  1553 + If an EXT-X-STREAM-INF tag or EXT-X-I-FRAME-STREAM-INF tag contains
  1554 + the CODECS attribute, the attribute value MUST include every format
  1555 + defined by [RFC6381] that is present in any media segment that is
  1556 + part of the variant stream, including in any rendition.
  1557 +
  1558 + The server MUST meet the following constraints when producing variant
  1559 + streams:
  1560 +
  1561 + Each variant stream MUST present the same content, including EXT-
  1562 + X-DISCONTINUITY tags at the same points in each rendition.
  1563 +
  1564 +
  1565 +
  1566 +Pantos & May Expires April 17, 2014 [Page 28]
  1567 +
  1568 +Internet-Draft HTTP Live Streaming October 2013
  1569 +
  1570 +
  1571 + Matching content in variant streams MUST have matching timestamps.
  1572 + This allows clients to synchronize the media.
  1573 +
  1574 + Each Media Playlist in each variant stream MUST have the same
  1575 + target duration. The only exception is that SUBTITLES renditions
  1576 + with a EXT-X-PLAYLIST-TYPE of VOD MAY have longer target
  1577 + durations.
  1578 +
  1579 + Content that appears in a Media Playlist of one variant stream but
  1580 + not in another MUST appear either at the beginning or at the end
  1581 + of the Media Playlist file and MUST NOT be longer than the target
  1582 + duration.
  1583 +
  1584 + If any Media Playlist in a Master Playlist contains an EXT-X-
  1585 + PROGRAM-DATE-TIME tag, then all Media Playlists in that Master
  1586 + Playlist MUST contain EXT-X-PROGRAM-DATE-TIME tags with consistent
  1587 + mappings of date and time to media timestamps.
  1588 +
  1589 + In addition, for broadest compatibility, variant streams SHOULD
  1590 + contain the same encoded audio bitstream. This allows clients to
  1591 + switch between variant streams without audible glitching.
  1592 +
  1593 + The rules for variant streams also apply to alternative renditions -
  1594 + see Section 3.4.10.1.
  1595 +
  1596 +6.3. Client Process
  1597 +
  1598 +6.3.1. Introduction
  1599 +
  1600 + How the client obtains the URI to the Playlist file is outside the
  1601 + scope of this document; it is presumed to have done so.
  1602 +
  1603 + The client MUST obtain the Playlist file from the URI. If the
  1604 + Playlist file so obtained is a Master Playlist, the client MUST
  1605 + obtain the Media Playlist file from the Master Playlist.
  1606 +
  1607 + This document does not specify the treatment of variant streams by
  1608 + clients.
  1609 +
  1610 +6.3.2. Loading the Playlist file
  1611 +
  1612 + Every time a Playlist file is loaded or reloaded from the Playlist
  1613 + URI:
  1614 +
  1615 + The client MUST ensure that the Playlist file begins with the
  1616 + EXTM3U tag and that the EXT-X-VERSION tag, if present, specifies a
  1617 + protocol version supported by the client; if not, the client MUST
  1618 + NOT attempt to use the Playlist.
  1619 +
  1620 +
  1621 +
  1622 +Pantos & May Expires April 17, 2014 [Page 29]
  1623 +
  1624 +Internet-Draft HTTP Live Streaming October 2013
  1625 +
  1626 +
  1627 + The client SHOULD ignore any tags and attributes it does not
  1628 + recognize.
  1629 +
  1630 + The client MUST determine the next media segment to load, as
  1631 + described in Section 6.3.5.
  1632 +
  1633 + If the Media Playlist contains the EXT-X-MEDIA-SEQUENCE tag, the
  1634 + client SHOULD assume that each media segment in it will become
  1635 + unavailable at the time that the Playlist file was loaded plus the
  1636 + duration of the Playlist file.
  1637 +
  1638 +6.3.3. Playing the Playlist file
  1639 +
  1640 + The client SHALL choose which media segment to play first from the
  1641 + Media Playlist when playback starts. If the EXT-X-ENDLIST tag is not
  1642 + present and the client intends to play the media regularly (i.e. in
  1643 + playlist order at the nominal playback rate), the client SHOULD NOT
  1644 + choose a segment which starts less than three target durations from
  1645 + the end of the Playlist file. Doing so can trigger playback stalls.
  1646 +
  1647 + To achieve regular playback, media segments MUST be played in the
  1648 + order that they appear in the Playlist file. The client MAY present
  1649 + the available media in any way it wishes, including regular playback,
  1650 + random access, and trick modes.
  1651 +
  1652 + The client MUST be prepared to reset its parser(s) and decoder(s)
  1653 + before playing a media segment that has an EXT-X-DISCONTINUITY tag
  1654 + applied to it.
  1655 +
  1656 + The client SHOULD attempt to load media segments in advance of when
  1657 + they will be required for uninterrupted playback to compensate for
  1658 + temporary variations in latency and throughput.
  1659 +
  1660 + If the Playlist file contains the EXT-X-ALLOW-CACHE tag and its value
  1661 + is NO, the client MUST NOT cache downloaded media segments after they
  1662 + have been played. Otherwise the client MAY cache downloaded media
  1663 + segments indefinitely for later replay.
  1664 +
  1665 + The client MAY use the value of the EXT-X-PROGRAM-DATE-TIME tag to
  1666 + display the program origination time to the user. If the value
  1667 + includes time zone information the client SHALL take it into account,
  1668 + but if it does not the client MUST NOT infer an originating time
  1669 + zone.
  1670 +
  1671 + The client MUST NOT depend upon the correctness or the consistency of
  1672 + the value of the EXT-X-PROGRAM-DATE-TIME tag.
  1673 +
  1674 +
  1675 +
  1676 +
  1677 +
  1678 +Pantos & May Expires April 17, 2014 [Page 30]
  1679 +
  1680 +Internet-Draft HTTP Live Streaming October 2013
  1681 +
  1682 +
  1683 +6.3.4. Reloading the Playlist file
  1684 +
  1685 + The client MUST periodically reload the Media Playlist file unless it
  1686 + contains the EXT-X-ENDLIST tag.
  1687 +
  1688 + However the client MUST NOT attempt to reload the Playlist file more
  1689 + frequently than specified by this section.
  1690 +
  1691 + When a client loads a Playlist file for the first time or reloads a
  1692 + Playlist file and finds that it has changed since the last time it
  1693 + was loaded, the client MUST wait for at least the target duration
  1694 + before attempting to reload the Playlist file again, measured from
  1695 + the last time the client began loading the Playlist file.
  1696 +
  1697 + If the client reloads a Playlist file and finds that it has not
  1698 + changed then it MUST wait for a period of one-half the target
  1699 + duration before retrying.
  1700 +
  1701 + In order to reduce server load, the client SHOULD NOT reload the
  1702 + Playlist files of variant streams or alternate renditions that are
  1703 + not currently being played. If it decides to switch playback to a
  1704 + different variant stream, it SHOULD stop reloading the Playlist of
  1705 + the old variant stream and begin loading the Playlist of the new
  1706 + variant stream. It can use the EXTINF durations and the constraints
  1707 + in Section 6.2.4 to determine the approximate location of
  1708 + corresponding media. Once media from the new variant stream has been
  1709 + loaded, the timestamps in the media segments can be used to
  1710 + synchronize the old and new timelines precisely. A client MUST NOT
  1711 + assume that segments with the same media sequence number in different
  1712 + variant streams or different renditions contain matching content.
  1713 +
  1714 +6.3.5. Determining the next segment to load
  1715 +
  1716 + The client MUST examine the Media Playlist file every time it is
  1717 + loaded or reloaded to determine the next media segment to load.
  1718 +
  1719 + The first segment to load MUST be the segment that the client has
  1720 + chosen to play first, as described in Section 6.3.3.
  1721 +
  1722 + If the first segment to be played has been loaded and the Playlist
  1723 + file does not contain the EXT-X-MEDIA-SEQUENCE tag then the client
  1724 + MUST verify that the current Playlist file contains the URI of the
  1725 + last loaded media segment at the offset it was originally found at,
  1726 + halting playback if it does not. The next media segment to load MUST
  1727 + be the first media segment following the last-loaded segment in the
  1728 + Playlist.
  1729 +
  1730 + If the first segment to be played has been loaded and the Playlist
  1731 +
  1732 +
  1733 +
  1734 +Pantos & May Expires April 17, 2014 [Page 31]
  1735 +
  1736 +Internet-Draft HTTP Live Streaming October 2013
  1737 +
  1738 +
  1739 + file contains the EXT-X-MEDIA-SEQUENCE tag then the next media
  1740 + segment to load SHALL be the one with the lowest sequence number that
  1741 + is greater than the sequence number of the last media segment loaded.
  1742 +
  1743 +6.3.6. Decrypting encrypted media segments
  1744 +
  1745 + If a Media Playlist file contains an EXT-X-KEY tag that specifies a
  1746 + Key file URI, the client MUST obtain that key file and use the key
  1747 + inside it to decrypt all media segments to which that EXT-X-KEY tag
  1748 + applies.
  1749 +
  1750 + A client MUST NOT attempt to use an EXT-X-KEY tag with an unsupported
  1751 + or unrecognized KEYFORMAT attribute. A client SHOULD fail playback
  1752 + if the Playlist contains a media segment to which only EXT-X-KEY tags
  1753 + with unrecognized or unsupported KEYFORMAT attributes are applied.
  1754 +
  1755 + If the encryption METHOD is AES-128, AES-128 CBC decryption SHALL be
  1756 + applied to individual media segments. The entire segment MUST be
  1757 + decrypted. Cipher Block Chaining MUST NOT be applied across media
  1758 + segments. The IV used for decryption MUST be either the sequence
  1759 + number of the media segment or the value of the IV attribute of the
  1760 + EXT-X-KEY tag, as described in Section 5.2.
  1761 +
  1762 + If the encryption METHOD is AES-128 and the media segment is part of
  1763 + an I-frame playlist (Section 3.4.13) special care MUST be taken in
  1764 + loading and decrypting the segment, because the resource identified
  1765 + by the URI is encrypted in 16-byte blocks from the start of the
  1766 + resource (offset 0). The sub-range specified by the EXT-X-BYTERANGE
  1767 + tag MUST be widened to include the 16-byte blocks in which the
  1768 + beginning and end of the sub-range fall. Next, it MUST be widened
  1769 + further to include the previous 16-byte block. That range MUST be
  1770 + loaded and decrypted with AES-128 CBC using an arbitrary IV. The
  1771 + decrypted segment will then be in the original (unwidened) sub-range.
  1772 +
  1773 + If the encryption METHOD is SAMPLE-AES, AES-128 decryption SHALL be
  1774 + applied to encrypted elementary streams within the media segment.
  1775 + The encryption format for H.264, AAC and AC-3 elementary streams is
  1776 + described by [SampleEnc].
  1777 +
  1778 + An EXT-X-KEY tag with a METHOD of NONE indicates that the media
  1779 + segments it applies to are not encrypted.
  1780 +
  1781 +
  1782 +7. Protocol version compatibility
  1783 +
  1784 + Clients and servers MUST implement protocol version 2 or higher to
  1785 + use:
  1786 +
  1787 +
  1788 +
  1789 +
  1790 +Pantos & May Expires April 17, 2014 [Page 32]
  1791 +
  1792 +Internet-Draft HTTP Live Streaming October 2013
  1793 +
  1794 +
  1795 + o The IV attribute of the EXT-X-KEY tag.
  1796 +
  1797 + Clients and servers MUST implement protocol version 3 or higher to
  1798 + use:
  1799 +
  1800 + o Floating-point EXTINF duration values.
  1801 +
  1802 + Clients and servers MUST implement protocol version 4 or higher to
  1803 + use:
  1804 +
  1805 + o The EXT-X-BYTERANGE tag.
  1806 +
  1807 + o The EXT-X-I-FRAME-STREAM-INF tag.
  1808 +
  1809 + o The EXT-X-I-FRAMES-ONLY tag.
  1810 +
  1811 + o The EXT-X-MEDIA tag.
  1812 +
  1813 + o The AUDIO and VIDEO attributes of the EXT-X-STREAM-INF tag.
  1814 +
  1815 + Clients and servers MUST implement protocol version 5 or higher to
  1816 + use:
  1817 +
  1818 + o The KEYFORMAT and KEYFORMATVERSIONS attributes of the EXT-X-KEY
  1819 + tag.
  1820 +
  1821 + o The EXT-X-MAP tag.
  1822 +
  1823 + Clients and servers MUST implement protocol version 6 or higher to
  1824 + use:
  1825 +
  1826 + o The EXT-X-MAP tag in a Media playlist that does not contain EXT-X-
  1827 + I-FRAMES-ONLY.
  1828 +
  1829 + The PROGRAM-ID attribute of the EXT-X-STREAM-INF and the EXT-X-I-
  1830 + FRAME-STREAM-INF tags has been removed in protocol version 6.
  1831 +
  1832 +
  1833 +8. Examples
  1834 +
  1835 +8.1. Introduction
  1836 +
  1837 + This section contains several example Playlist files.
  1838 +
  1839 +
  1840 +
  1841 +
  1842 +
  1843 +
  1844 +
  1845 +
  1846 +Pantos & May Expires April 17, 2014 [Page 33]
  1847 +
  1848 +Internet-Draft HTTP Live Streaming October 2013
  1849 +
  1850 +
  1851 +8.2. Simple Media Playlist file
  1852 +
  1853 + #EXTM3U
  1854 + #EXT-X-VERSION:3
  1855 + #EXT-X-TARGETDURATION:5220
  1856 + #EXTINF:5219.2,
  1857 + http://media.example.com/entire.ts
  1858 + #EXT-X-ENDLIST
  1859 +
  1860 +8.3. Live Media Playlist, using HTTPS
  1861 +
  1862 + #EXTM3U
  1863 + #EXT-X-VERSION:3
  1864 + #EXT-X-TARGETDURATION:8
  1865 + #EXT-X-MEDIA-SEQUENCE:2680
  1866 +
  1867 + #EXTINF:7.975,
  1868 + https://priv.example.com/fileSequence2680.ts
  1869 + #EXTINF:7.941,
  1870 + https://priv.example.com/fileSequence2681.ts
  1871 + #EXTINF:7.975,
  1872 + https://priv.example.com/fileSequence2682.ts
  1873 +
  1874 +8.4. Playlist file with encrypted media segments
  1875 +
  1876 + #EXTM3U
  1877 + #EXT-X-VERSION:3
  1878 + #EXT-X-MEDIA-SEQUENCE:7794
  1879 + #EXT-X-TARGETDURATION:15
  1880 +
  1881 + #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"
  1882 +
  1883 + #EXTINF:2.833,
  1884 + http://media.example.com/fileSequence52-A.ts
  1885 + #EXTINF:15.0,
  1886 + http://media.example.com/fileSequence52-B.ts
  1887 + #EXTINF:13.333,
  1888 + http://media.example.com/fileSequence52-C.ts
  1889 +
  1890 + #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"
  1891 +
  1892 + #EXTINF:15.0,
  1893 + http://media.example.com/fileSequence53-A.ts
  1894 +
  1895 +
  1896 +
  1897 +
  1898 +
  1899 +
  1900 +
  1901 +
  1902 +Pantos & May Expires April 17, 2014 [Page 34]
  1903 +
  1904 +Internet-Draft HTTP Live Streaming October 2013
  1905 +
  1906 +
  1907 +8.5. Master Playlist file
  1908 +
  1909 + #EXTM3U
  1910 + #EXT-X-STREAM-INF:BANDWIDTH=1280000
  1911 + http://example.com/low.m3u8
  1912 + #EXT-X-STREAM-INF:BANDWIDTH=2560000
  1913 + http://example.com/mid.m3u8
  1914 + #EXT-X-STREAM-INF:BANDWIDTH=7680000
  1915 + http://example.com/hi.m3u8
  1916 + #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
  1917 + http://example.com/audio-only.m3u8
  1918 +
  1919 +8.6. Master Playlist with I-Frames
  1920 +
  1921 + #EXTM3U
  1922 + #EXT-X-STREAM-INF:BANDWIDTH=1280000
  1923 + low/audio-video.m3u8
  1924 + #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="low/iframe.m3u8"
  1925 + #EXT-X-STREAM-INF:BANDWIDTH=2560000
  1926 + mid/audio-video.m3u8
  1927 + #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=150000,URI="mid/iframe.m3u8"
  1928 + #EXT-X-STREAM-INF:BANDWIDTH=7680000
  1929 + hi/audio-video.m3u8
  1930 + #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=550000,URI="hi/iframe.m3u8"
  1931 + #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
  1932 + audio-only.m3u8
  1933 +
  1934 +8.7. Master Playlist with Alternative audio
  1935 +
  1936 + In this example, the CODECS attributes have been condensed for space.
  1937 + A '\' is used to indicate that the tag continues on the following
  1938 + line with whitespace removed:
  1939 +
  1940 +
  1941 +
  1942 +
  1943 +
  1944 +
  1945 +
  1946 +
  1947 +
  1948 +
  1949 +
  1950 +
  1951 +
  1952 +
  1953 +
  1954 +
  1955 +
  1956 +
  1957 +
  1958 +Pantos & May Expires April 17, 2014 [Page 35]
  1959 +
  1960 +Internet-Draft HTTP Live Streaming October 2013
  1961 +
  1962 +
  1963 + #EXTM3U
  1964 + #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="English", \
  1965 + DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en", \
  1966 + URI="main/english-audio.m3u8"
  1967 + #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Deutsch", \
  1968 + DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="de", \
  1969 + URI="main/german-audio.m3u8"
  1970 + #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Commentary", \
  1971 + DEFAULT=NO,AUTOSELECT=NO,URI="commentary/audio-only.m3u8"
  1972 + #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",AUDIO="aac"
  1973 + low/video-only.m3u8
  1974 + #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",AUDIO="aac"
  1975 + mid/video-only.m3u8
  1976 + #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",AUDIO="aac"
  1977 + hi/video-only.m3u8
  1978 + #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5",AUDIO="aac"
  1979 + main/english-audio.m3u8
  1980 +
  1981 +8.8. Master Playlist with Alternative video
  1982 +
  1983 + In this example, the CODECS attributes have been condensed for space.
  1984 + A '\' is used to indicate that the tag continues on the following
  1985 + line with whitespace removed:
  1986 +
  1987 +
  1988 +
  1989 +
  1990 +
  1991 +
  1992 +
  1993 +
  1994 +
  1995 +
  1996 +
  1997 +
  1998 +
  1999 +
  2000 +
  2001 +
  2002 +
  2003 +
  2004 +
  2005 +
  2006 +
  2007 +
  2008 +
  2009 +
  2010 +
  2011 +
  2012 +
  2013 +
  2014 +Pantos & May Expires April 17, 2014 [Page 36]
  2015 +
  2016 +Internet-Draft HTTP Live Streaming October 2013
  2017 +
  2018 +
  2019 + #EXTM3U
  2020 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Main", \
  2021 + DEFAULT=YES,URI="low/main/audio-video.m3u8"
  2022 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Centerfield", \
  2023 + DEFAULT=NO,URI="low/centerfield/audio-video.m3u8"
  2024 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Dugout", \
  2025 + DEFAULT=NO,URI="low/dugout/audio-video.m3u8"
  2026 +
  2027 + #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",VIDEO="low"
  2028 + low/main/audio-video.m3u8
  2029 +
  2030 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Main", \
  2031 + DEFAULT=YES,URI="mid/main/audio-video.m3u8"
  2032 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Centerfield", \
  2033 + DEFAULT=NO,URI="mid/centerfield/audio-video.m3u8"
  2034 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Dugout", \
  2035 + DEFAULT=NO,URI="mid/dugout/audio-video.m3u8"
  2036 +
  2037 + #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",VIDEO="mid"
  2038 + mid/main/audio-video.m3u8
  2039 +
  2040 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Main", \
  2041 + DEFAULT=YES,URI="hi/main/audio-video.m3u8"
  2042 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Centerfield", \
  2043 + DEFAULT=NO,URI="hi/centerfield/audio-video.m3u8"
  2044 + #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Dugout", \
  2045 + DEFAULT=NO,URI="hi/dugout/audio-video.m3u8"
  2046 +
  2047 + #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",VIDEO="hi"
  2048 + hi/main/audio-video.m3u8
  2049 +
  2050 + #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
  2051 + main/audio-only.m3u8
  2052 +
  2053 +
  2054 +9. Contributors
  2055 +
  2056 + Significant contributions to the design of this protocol were made by
  2057 + Jim Batson, David Biderman, Bill May, Roger Pantos, Alan Tseng, and
  2058 + Eryk Vershen.
  2059 +
  2060 +
  2061 +10. IANA Considerations
  2062 +
  2063 + This memo requests that the following MIME type [RFC2046] be
  2064 + registered with the IANA:
  2065 +
  2066 + Type name: "application"
  2067 +
  2068 +
  2069 +
  2070 +Pantos & May Expires April 17, 2014 [Page 37]
  2071 +
  2072 +Internet-Draft HTTP Live Streaming October 2013
  2073 +
  2074 +
  2075 + Subtype name: "vnd.apple.mpegurl"
  2076 +
  2077 + Required parameters: (none)
  2078 +
  2079 + Optional parameters: (none)
  2080 +
  2081 + Encoding considerations: encoded as text. See Section 3 for more
  2082 + information.
  2083 +
  2084 + Security considerations: See Section 11.
  2085 +
  2086 + Compression: this media type does not employ compression.
  2087 +
  2088 + Interoperability considerations: There are no byte-ordering issues,
  2089 + since files are 7- or 8-bit text. Applications could encounter
  2090 + unrecognized tags, which SHOULD be ignored.
  2091 +
  2092 + Published specification: see Section 3.
  2093 +
  2094 + Applications that use this media type: Multimedia applications such
  2095 + as the iPhone media player in iOS 3.0 and later and QuickTime Player
  2096 + in Mac OS X version 10.6 and later.
  2097 +
  2098 + Additional information: files begin with the magic number #EXTM3U.
  2099 + Filenames normally end with .m3u8 or .m3u (see Section 3). No
  2100 + Macintosh file type codes have been registered.
  2101 +
  2102 + Person & email address to contact for further information: David
  2103 + Singer, singer AT apple.com.
  2104 +
  2105 + Intended usage: LIMITED USE
  2106 +
  2107 + Restrictions on usage: (none)
  2108 +
  2109 + Author: Roger Pantos
  2110 +
  2111 + Change Controller: David Singer
  2112 +
  2113 +
  2114 +11. Security Considerations
  2115 +
  2116 + Since the protocol generally uses HTTP to transfer data, most of the
  2117 + same security considerations apply. See section 15 of RFC 2616
  2118 + [RFC2616].
  2119 +
  2120 + Media file parsers are typically subject to "fuzzing" attacks.
  2121 + Clients SHOULD take care when parsing segments received from a server
  2122 + that non-compliant segments are rejected.
  2123 +
  2124 +
  2125 +
  2126 +Pantos & May Expires April 17, 2014 [Page 38]
  2127 +
  2128 +Internet-Draft HTTP Live Streaming October 2013
  2129 +
  2130 +
  2131 + Playlist files contain URIs, which clients will use to make network
  2132 + requests of arbitrary entities. Clients SHOULD range-check responses
  2133 + to prevent buffer overflows. See also the Security Considerations
  2134 + section of RFC 3986 [RFC3986].
  2135 +
  2136 + Clients SHOULD load resources identified by URI lazily to avoid
  2137 + contributing to denial-of-service attacks.
  2138 +
  2139 + HTTP requests often include session state ("cookies"), which may
  2140 + contain private user data. Implementations MUST follow cookie
  2141 + restriction and expiry rules specified by RFC 6265 [RFC6265]. See
  2142 + also the Security Considerations section of RFC 6265, and RFC 2964
  2143 + [RFC2964].
  2144 +
  2145 + Encryption keys are specified by URI. The delivery of these keys
  2146 + SHOULD be secured by a mechanism such as HTTP over TLS [RFC5246]
  2147 + (formerly SSL) in conjunction with a secure realm or a session
  2148 + cookie.
  2149 +
  2150 +
  2151 +12. References
  2152 +
  2153 +12.1. Normative References
  2154 +
  2155 + [AC_3] Advanced Television Systems Committee, "ATSC Standard:
  2156 + A/52:2010: Digital Audio Compression (AC-3) (E-AC-3)
  2157 + Standard", November 2010,
  2158 + <http://www.atsc.org/cms/standards/a_52-2010.pdf>.
  2159 +
  2160 + [AES_128] U.S. Department of Commerce/National Institute of
  2161 + Standards and Technology, "Advanced Encryption Standard
  2162 + (AES), FIPS PUB 197", November 2001, <http://
  2163 + csrc.nist.gov/publications/fips/fips197/fips-197.pdf>.
  2164 +
  2165 + [H_264] International Telecommunications Union, "Advanced video
  2166 + coding for generic audiovisual services", January 2012,
  2167 + <http://www.itu.int/rec/T-REC-H.264>.
  2168 +
  2169 + [ISO_11172]
  2170 + International Organization for Standardization, "ISO/IEC
  2171 + International Standard 11172-1; Coding of moving pictures
  2172 + and associated audio for digital storage media -- Part 1:
  2173 + Systems", 1993,
  2174 + <http://www.iso.org/iso/catalogue_detail?csnumber=19180>.
  2175 +
  2176 + [ISO_13818]
  2177 + International Organization for Standardization, "ISO/IEC
  2178 + International Standard 13818; Generic coding of moving
  2179 +
  2180 +
  2181 +
  2182 +Pantos & May Expires April 17, 2014 [Page 39]
  2183 +
  2184 +Internet-Draft HTTP Live Streaming October 2013
  2185 +
  2186 +
  2187 + pictures and associated audio information", October 2007,
  2188 + <http://www.iso.org/iso/catalogue_detail?csnumber=44169>.
  2189 +
  2190 + [ISO_14496]
  2191 + International Organization for Standardization, "ISO/IEC
  2192 + 14496-3:2009 Information technology -- Coding of audio-
  2193 + visual objects -- Part 3: Audio", 2009,
  2194 + <http://www.iso.org/iso/catalogue_detail?csnumber=53943>.
  2195 +
  2196 + [ISO_8601]
  2197 + International Organization for Standardization, "ISO/IEC
  2198 + International Standard 8601:2004; Data elements and
  2199 + interchange formats -- Information interchange --
  2200 + Representation of dates and times", December 2004,
  2201 + <http://www.iso.org/iso/catalogue_detail?csnumber=40874>.
  2202 +
  2203 + [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
  2204 + Extensions (MIME) Part Two: Media Types", RFC 2046,
  2205 + November 1996.
  2206 +
  2207 + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
  2208 + Requirement Levels", BCP 14, RFC 2119, March 1997.
  2209 +
  2210 + [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
  2211 + Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
  2212 + Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
  2213 +
  2214 + [RFC2964] Moore, K. and N. Freed, "Use of HTTP State Management",
  2215 + BCP 44, RFC 2964, October 2000.
  2216 +
  2217 + [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
  2218 + 10646", STD 63, RFC 3629, November 2003.
  2219 +
  2220 + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
  2221 + Resource Identifier (URI): Generic Syntax", STD 66,
  2222 + RFC 3986, January 2005.
  2223 +
  2224 + [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
  2225 + (TLS) Protocol Version 1.2", RFC 5246, August 2008.
  2226 +
  2227 + [RFC5646] Phillips, A. and M. Davis, "Tags for Identifying
  2228 + Languages", BCP 47, RFC 5646, September 2009.
  2229 +
  2230 + [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70,
  2231 + RFC 5652, September 2009.
  2232 +
  2233 + [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265,
  2234 + April 2011.
  2235 +
  2236 +
  2237 +
  2238 +Pantos & May Expires April 17, 2014 [Page 40]
  2239 +
  2240 +Internet-Draft HTTP Live Streaming October 2013
  2241 +
  2242 +
  2243 + [RFC6381] Gellens, R., Singer, D., and P. Frojdh, "The 'Codecs' and
  2244 + 'Profiles' Parameters for "Bucket" Media Types", RFC 6381,
  2245 + August 2011.
  2246 +
  2247 + [US_ASCII]
  2248 + American National Standards Institute, "ANSI X3.4-1986,
  2249 + Information Systems -- Coded Character Sets 7-Bit American
  2250 + National Standard Code for Information Interchange (7-Bit
  2251 + ASCII)", December 1986.
  2252 +
  2253 + [WebVTT] World Wide Web Consortium (W3C), "WebVTT: The Web Video
  2254 + Text Tracks Format", July 2013,
  2255 + <http://dev.w3.org/html5/webvtt/>.
  2256 +
  2257 +12.2. Informative References
  2258 +
  2259 + [ID3] ID3.org, "The ID3 audio file data tagging format",
  2260 + <http://www.id3.org/Developer_Information>.
  2261 +
  2262 + [M3U] Nullsoft, Inc., "The M3U Playlist format, originally
  2263 + invented for the Winamp media player",
  2264 + <http://wikipedia.org/wiki/M3U>.
  2265 +
  2266 + [SampleEnc]
  2267 + Apple Inc., "MPEG-2 Stream Encryption Format for HTTP Live
  2268 + Streaming", <https://developer.apple.com/library/ios/
  2269 + documentation/AudioVideo/Conceptual/
  2270 + HLS_Sample_Encryption/>.
  2271 +
  2272 + [UTI] Apple Inc., "Uniform Type Identifier", <http://
  2273 + developer.apple.com/library/ios/#documentation/general/
  2274 + conceptual/DevPedia-CocoaCore/UniformTypeIdentifier.html>.
  2275 +
  2276 +
  2277 +Authors' Addresses
  2278 +
  2279 + Roger Pantos (editor)
  2280 + Apple Inc.
  2281 + Cupertino, California
  2282 + United States
  2283 +
  2284 + Email: http-live-streaming-review@group.apple.com
  2285 +
  2286 +
  2287 +
  2288 +
  2289 +
  2290 +
  2291 +
  2292 +
  2293 +
  2294 +Pantos & May Expires April 17, 2014 [Page 41]
  2295 +
  2296 +Internet-Draft HTTP Live Streaming October 2013
  2297 +
  2298 +
  2299 + William May, Jr.
  2300 + Apple Inc.
  2301 + Cupertino, California
  2302 + United States
  2303 +
  2304 + Email: http-live-streaming-review@group.apple.com
  2305 +
  2306 +
  2307 +
  2308 +
  2309 +
  2310 +
  2311 +
  2312 +
  2313 +
  2314 +
  2315 +
  2316 +
  2317 +
  2318 +
  2319 +
  2320 +
  2321 +
  2322 +
  2323 +
  2324 +
  2325 +
  2326 +
  2327 +
  2328 +
  2329 +
  2330 +
  2331 +
  2332 +
  2333 +
  2334 +
  2335 +
  2336 +
  2337 +
  2338 +
  2339 +
  2340 +
  2341 +
  2342 +
  2343 +
  2344 +
  2345 +
  2346 +
  2347 +
  2348 +
  2349 +
  2350 +Pantos & May Expires April 17, 2014 [Page 42]
  2351 +
不能预览此文件类型