idnits 2.17.1 draft-pantos-http-live-streaming-18.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- -- The document has an IETF Trust Provisions (28 Dec 2009) Section 6.c(ii) Publication Limitation clause. If this document is intended for submission to the IESG for publication, this constitutes an error. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (November 19, 2015) is 3081 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Informational ---------------------------------------------------------------------------- ** Obsolete normative reference: RFC 2818 (Obsoleted by RFC 9110) ** Obsolete normative reference: RFC 7159 (Obsoleted by RFC 8259) ** Obsolete normative reference: RFC 7230 (Obsoleted by RFC 9110, RFC 9112) Summary: 3 errors (**), 0 flaws (~~), 1 warning (==), 3 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Informational R. Pantos, Ed. 3 Internet-Draft W. May 4 Intended status: Informational Apple Inc. 5 Expires: May 22, 2016 November 19, 2015 7 HTTP Live Streaming 8 draft-pantos-http-live-streaming-18 10 Abstract 12 This document describes a protocol for transferring unbounded streams 13 of multimedia data. It specifies the data format of the files and 14 the actions to be taken by the server (sender) and the clients 15 (receivers) of the streams. It describes version 7 of this protocol. 17 Status of This Memo 19 This Internet-Draft is submitted in full conformance with the 20 provisions of BCP 78 and BCP 79. 22 Internet-Drafts are working documents of the Internet Engineering 23 Task Force (IETF). Note that other groups may also distribute 24 working documents as Internet-Drafts. The list of current Internet- 25 Drafts is at http://datatracker.ietf.org/drafts/current/. 27 Internet-Drafts are draft documents valid for a maximum of six months 28 and may be updated, replaced, or obsoleted by other documents at any 29 time. It is inappropriate to use Internet-Drafts as reference 30 material or to cite them other than as "work in progress." 32 This Internet-Draft will expire on May 22, 2016. 34 Copyright Notice 36 Copyright (c) 2015 IETF Trust and the persons identified as the 37 document authors. All rights reserved. 39 This document is subject to BCP 78 and the IETF Trust's Legal 40 Provisions Relating to IETF Documents 41 (http://trustee.ietf.org/license-info) in effect on the date of 42 publication of this document. Please review these documents 43 carefully, as they describe your rights and restrictions with respect 44 to this document. 46 This Informational Internet Draft is submitted as an RFC Editor 47 Contribution and/or non-IETF Document (not as a Contribution, IETF 48 Contribution, nor IETF Document) in accordance with BCP 78 and BCP 49 79. 51 This document may not be modified, and derivative works of it may not 52 be created, and it may not be published except as an Internet-Draft. 54 Table of Contents 56 1. Introduction to HTTP Live Streaming . . . . . . . . . . . . . 3 57 2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 58 3. Media Segments . . . . . . . . . . . . . . . . . . . . . . . 5 59 4. Playlists . . . . . . . . . . . . . . . . . . . . . . . . . . 7 60 4.1. Definition of a Playlist . . . . . . . . . . . . . . . . 7 61 4.2. Attribute Lists . . . . . . . . . . . . . . . . . . . . . 8 62 4.3. Playlist Tags . . . . . . . . . . . . . . . . . . . . . . 10 63 4.3.1. Basic Tags . . . . . . . . . . . . . . . . . . . . . 10 64 4.3.1.1. EXTM3U . . . . . . . . . . . . . . . . . . . . . 10 65 4.3.1.2. EXT-X-VERSION . . . . . . . . . . . . . . . . . . 10 66 4.3.2. Media Segment Tags . . . . . . . . . . . . . . . . . 10 67 4.3.2.1. EXTINF . . . . . . . . . . . . . . . . . . . . . 11 68 4.3.2.2. EXT-X-BYTERANGE . . . . . . . . . . . . . . . . . 11 69 4.3.2.3. EXT-X-DISCONTINUITY . . . . . . . . . . . . . . . 12 70 4.3.2.4. EXT-X-KEY . . . . . . . . . . . . . . . . . . . . 12 71 4.3.2.5. EXT-X-MAP . . . . . . . . . . . . . . . . . . . . 14 72 4.3.2.6. EXT-X-PROGRAM-DATE-TIME . . . . . . . . . . . . . 15 73 4.3.3. Media Playlist Tags . . . . . . . . . . . . . . . . . 15 74 4.3.3.1. EXT-X-TARGETDURATION . . . . . . . . . . . . . . 15 75 4.3.3.2. EXT-X-MEDIA-SEQUENCE . . . . . . . . . . . . . . 16 76 4.3.3.3. EXT-X-DISCONTINUITY-SEQUENCE . . . . . . . . . . 16 77 4.3.3.4. EXT-X-ENDLIST . . . . . . . . . . . . . . . . . . 17 78 4.3.3.5. EXT-X-PLAYLIST-TYPE . . . . . . . . . . . . . . . 17 79 4.3.3.6. EXT-X-I-FRAMES-ONLY . . . . . . . . . . . . . . . 17 80 4.3.4. Master Playlist Tags . . . . . . . . . . . . . . . . 18 81 4.3.4.1. EXT-X-MEDIA . . . . . . . . . . . . . . . . . . . 18 82 4.3.4.1.1. Rendition Groups . . . . . . . . . . . . . . 21 83 4.3.4.2. EXT-X-STREAM-INF . . . . . . . . . . . . . . . . 22 84 4.3.4.2.1. Alternative Renditions . . . . . . . . . . . 25 85 4.3.4.3. EXT-X-I-FRAME-STREAM-INF . . . . . . . . . . . . 25 86 4.3.4.4. EXT-X-SESSION-DATA . . . . . . . . . . . . . . . 26 87 4.3.4.5. EXT-X-SESSION-KEY . . . . . . . . . . . . . . . . 27 88 4.3.5. Media or Master Playlist Tags . . . . . . . . . . . . 27 89 4.3.5.1. EXT-X-INDEPENDENT-SEGMENTS . . . . . . . . . . . 28 90 4.3.5.2. EXT-X-START . . . . . . . . . . . . . . . . . . . 28 91 5. Key files . . . . . . . . . . . . . . . . . . . . . . . . . . 29 92 5.1. Structure of Key files . . . . . . . . . . . . . . . . . 29 93 5.2. IV for [AES_128] . . . . . . . . . . . . . . . . . . . . 29 94 6. Client/Server Responsibilities . . . . . . . . . . . . . . . 29 95 6.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 29 96 6.2. Server Responsibilities . . . . . . . . . . . . . . . . . 29 97 6.2.1. General Server Responsibilities . . . . . . . . . . . 30 98 6.2.2. Live Playlists . . . . . . . . . . . . . . . . . . . 32 99 6.2.3. Encrypting Media Segments . . . . . . . . . . . . . . 33 100 6.2.4. Providing Variant Streams . . . . . . . . . . . . . . 34 101 6.3. Client Responsibilities . . . . . . . . . . . . . . . . . 35 102 6.3.1. General Client Responsibilities . . . . . . . . . . . 35 103 6.3.2. Loading the Media Playlist file . . . . . . . . . . . 36 104 6.3.3. Playing the Media Playlist file . . . . . . . . . . . 36 105 6.3.4. Reloading the Media Playlist file . . . . . . . . . . 37 106 6.3.5. Determining the next segment to load . . . . . . . . 38 107 6.3.6. Decrypting encrypted Media Segments . . . . . . . . . 38 108 7. Protocol version compatibility . . . . . . . . . . . . . . . 39 109 8. Playlist Examples . . . . . . . . . . . . . . . . . . . . . . 41 110 8.1. Simple Media Playlist . . . . . . . . . . . . . . . . . . 41 111 8.2. Live Media Playlist, using HTTPS . . . . . . . . . . . . 41 112 8.3. Playlist with encrypted Media Segments . . . . . . . . . 41 113 8.4. Master Playlist . . . . . . . . . . . . . . . . . . . . . 42 114 8.5. Master Playlist with I-Frames . . . . . . . . . . . . . . 42 115 8.6. Master Playlist with Alternative audio . . . . . . . . . 43 116 8.7. Master Playlist with Alternative video . . . . . . . . . 43 117 8.8. Session Data in a Master Playlist . . . . . . . . . . . . 44 118 8.9. CHARACTERISTICS attribute containing multiple 119 characteristics . . . . . . . . . . . . . . . . . . . . . 44 120 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 45 121 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 45 122 11. Security Considerations . . . . . . . . . . . . . . . . . . . 46 123 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 46 124 12.1. Normative References . . . . . . . . . . . . . . . . . . 46 125 12.2. Informative References . . . . . . . . . . . . . . . . . 49 126 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 49 128 1. Introduction to HTTP Live Streaming 130 HTTP Live Streaming provides a reliable, cost-effective means of 131 delivering continuous and long-form video over the Internet. It 132 allows a receiver to adapt the bit rate of the media to the current 133 network conditions in order to maintain uninterrupted playback at the 134 best possible quality. It supports interstitial content boundaries. 135 It provides a flexible framework for media encryption. It can 136 efficiently offer multiple renditions of the same content, such as 137 audio translations. It offers compatibility with large-scale HTTP 138 caching infrastructure to support delivery to large audiences. 140 Since its first draft publication in 2009, HTTP Live Streaming has 141 been implemented and deployed by a wide array of content producers, 142 tools vendors, distributors, and device manufacturers. 144 The purpose of this document is to facilitate interoperability 145 between HTTP Live Streaming implementations by describing the media 146 transmission protocol. Using this protocol, a client can receive a 147 continuous stream of media from a server for concurrent presentation. 149 This document describes version 7 of the protocol. 151 2. Overview 153 A multimedia presentation is specified by a Uniform Resource 154 Identifier (URI) [RFC3986] to a Playlist. 156 A Playlist is either a Media Playlist or a Master Playlist. Both are 157 UTF-8 text files containing URIs and descriptive tags. 159 A Media Playlist contains a list of Media Segments, which when played 160 sequentially will play the multimedia presentation. 162 Here is an example of a Media Playlist: 164 #EXTM3U 165 #EXT-X-TARGETDURATION:10 167 #EXTINF:9.009, 168 http://media.example.com/first.ts 169 #EXTINF:9.009, 170 http://media.example.com/second.ts 171 #EXTINF:3.003, 172 http://media.example.com/third.ts 174 The first line is the format identifier tag #EXTM3U. The line 175 containing #EXT-X-TARGETDURATION says that all Media Segments will be 176 10 seconds long or less. Then three Media Segments are declared. 177 The first and second are 9.009 seconds long; the third is 3.003 178 seconds. 180 To play this Playlist, the client first downloads it and then 181 downloads and plays each Media Segment declared within it. The 182 client reloads the Playlist as described in this document to discover 183 any added segments. Data SHOULD be carried over HTTP [RFC7230], but 184 in general a URI can specify any protocol that can reliably transfer 185 the specified resource on demand. 187 A more complex presentation can be described by a Master Playlist. A 188 Master Playlist provides a set of Variant Streams, each of which 189 describes a different version of the same content. 191 A Variant Stream includes a Media Playlist that specifies media 192 encoded at a particular bit rate, in a particular format, and at a 193 particular resolution for media containing video. 195 A Variant Stream can also specify a set of Renditions. Renditions 196 are alternate versions of the content, such as audio produced in 197 different languages or video recorded from different camera angles. 199 Clients should switch between different Variant Streams to adapt to 200 network conditions. Clients should choose Renditions based on user 201 preferences. 203 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 204 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 205 document are to be interpreted as described in RFC 2119 [RFC2119]. 207 3. Media Segments 209 A Media Playlist contains a series of Media Segments which make up 210 the overall presentation. A Media Segment is specified by a URI and 211 optionally a byte range. 213 The duration of each Media Segment is indicated in the Media Playlist 214 by its EXTINF tag (Section 4.3.2.1). 216 Each segment in a Media Playlist has a unique integer Media Sequence 217 Number. The Media Sequence Number of the first segment in the Media 218 Playlist is either 0, or declared in the Playlist (Section 4.3.3.2). 219 The Media Sequence Number of every other segment is equal to the 220 Media Sequence Number of the segment that precedes it plus one. 222 Each Media Segment MUST be formatted as an MPEG-2 Transport Stream 223 [ISO_13818], a WebVTT [WebVTT] file, or a Packed Audio file, which is 224 a file containing packed encoded audio samples and ID3 tags, such as 225 AAC with ADTS framing [ISO_13818_7], MP3 [ISO_13818_3], AC-3 [AC_3], 226 or Enhanced AC-3 [AC_3]. Transport of other media file formats is 227 not defined. 229 Some media formats require that a parser be initialized with a common 230 sequence of bytes before a Media Segment can be parsed. This format- 231 specific sequence is called the Media Initialization Section. The 232 Media Initialization Section of an MPEG-2 Transport Stream segment is 233 the Program Association Table (PAT) followed by the Program Map 234 Table (PMT). The Media Initialization Section of a WebVTT segment is 235 the WebVTT header. A Packed Audio segment has no Media 236 Initialization Section. 238 Transport Stream segments MUST contain a single MPEG-2 Program; 239 playback of Multi-Program Transport Streams is not defined. Each 240 Transport Stream segment SHOULD contain a PAT and a PMT at the start 241 of the segment - or have a Media Initialization Section declared in 242 the Media Playlist (Section 4.3.2.5). 244 A Media Segment that contains video SHOULD have at least one key 245 frame and enough information to completely initialize a video 246 decoder. 248 Each Media Segment MUST be the continuation of the encoded media at 249 the end of the segment with the previous Media Sequence Number, where 250 values in a continuous series such as timestamps and Continuity 251 Counters continue uninterrupted. The only exceptions are the first 252 Media Segment ever to appear in a Media Playlist, and Media Segments 253 which are explicitly signaled as discontinuities (Section 4.3.2.3). 254 Unmarked media discontinuities can trigger playback errors. 256 Each Packed Audio segment MUST signal the timestamp of its first 257 sample with an ID3 PRIV tag [ID3] at the beginning of the segment. 258 The ID3 PRIV owner identifier MUST be 259 "com.apple.streaming.transportStreamTimestamp". The ID3 payload MUST 260 be a 33-bit MPEG-2 Program Elementary Stream timestamp expressed as a 261 big-endian eight-octet number, with the upper 31 bits set to zero. A 262 Packed Audio segment without such an ID3 tag can trigger playback 263 errors. 265 Subtitle segments are formatted as WebVTT [WebVTT] files. Each 266 subtitle segment MUST contain all subtitle cues that are intended to 267 be displayed during the period indicated by the segment EXTINF 268 duration. The start time offset and end time offset of each cue MUST 269 indicate the total display time for that cue, even if part of the cue 270 time range is outside the segment period. A WebVTT segment MAY 271 contain no cues; this indicates that no subtitles are to be displayed 272 during that period. 274 Each subtitle segment MUST either start with a WebVTT header or have 275 a Media Initialization Section declared in the Media Playlist 276 (Section 4.3.2.5). 278 In order to synchronize timestamps between audio/video and subtitles, 279 a X-TIMESTAMP-MAP metadata header SHOULD be added to each WebVTT 280 header. This header maps WebVTT cue timestamps to MPEG-2 (PES) 281 timestamps in other Renditions of the Variant Stream. Its format is: 283 X-TIMESTAMP-MAP=LOCAL:,MPEGTS: 284 e.g. X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000 285 The cue timestamp in the LOCAL attribute MAY fall outside the range 286 of time covered by the segment. 288 If a WebVTT segment does not have the X-TIMESTAMP-MAP, the client 289 MUST assume that the WebVTT cue time of 0 maps to an MPEG-2 timestamp 290 of 0. 292 4. Playlists 294 This section describes the Playlist files used by HTTP Live 295 Streaming. In this section, "MUST" and "MUST NOT" specify the rules 296 for the syntax and structure of legal Playlist files. Playlists that 297 violate these rules are invalid; clients MUST fail to parse them. 298 See Section 6.3.2. 300 The format of the Playlist files is derived from the M3U [M3U] 301 playlist file format and inherits two tags from that earlier file 302 format: EXTM3U (Section 4.3.1.1) and EXTINF (Section 4.3.2.1). 304 In this section, tags are specified using a BNF-style syntax. 306 Each Playlist file MUST be identifiable by either the path component 307 of its URI or by HTTP Content-Type. In the first case, the path MUST 308 end with either .m3u8 or .m3u. In the second, the HTTP Content-type 309 MUST be "application/vnd.apple.mpegurl" or "audio/mpegurl". Clients 310 SHOULD refuse to parse Playlists that are not so identified. 312 4.1. Definition of a Playlist 314 Playlist files MUST be encoded in UTF-8 [RFC3629]. They MUST NOT 315 contain any byte order mark (BOM); Clients SHOULD reject Playlists 316 which contain a BOM or do not parse as UTF-8. PLaylist files MUST 317 NOT contain UTF-8 control characters (U+0000 to U+001F and U+007F to 318 U+009F), with the exceptions of CR (U+000D) and LF (U+000A). All 319 character sequences MUST be normalized according to Unicode 320 normalization form "NFC". Note that US-ASCII [US_ASCII] conforms to 321 these rules. 323 Lines in a Playlist file are terminated by either a single line feed 324 character or a carriage return character followed by an line feed 325 character. Each line is a URI, blank, or starts with the character 326 '#'. Blank lines are ignored. White space MUST NOT be present, 327 except for elements in which it is explicitly specified. 329 Lines that start with the character '#' are either comments or tags. 330 Tags begin with #EXT. They are case-sensitive. All other lines that 331 begin with '#' are comments and SHOULD be ignored. 333 A URI line identifies a Media Segment or a Playlist file (see 334 Section 4.3.4.2). Each Media Segment is specified by a URI and the 335 tags that apply to it. 337 A Playlist is a Media Playlist if all URI lines in the Playlist 338 identify Media Segments. A Playlist is a Master Playlist if all URI 339 lines in the Playlist identify Media Playlists. A Playlist MUST be 340 either a Media Playlist or a Master Playlist; all other Playlists are 341 invalid. 343 A URI in a Playlist, whether it is a URI line or part of a tag, MAY 344 be relative. Any relative URI is considered to be relative to the 345 URI of the Playlist that contains it. 347 The duration of a Media Playlist file is the sum of the durations of 348 the Media Segments within it. 350 The segment bit rate of a Media Segment is the size of the Media 351 Segment divided by its EXTINF duration (Section 4.3.2.1). Note that 352 this includes container overhead but does not include overhead 353 imposed by the delivery system, such as HTTP, TCP or IP headers. 355 The peak segment bit rate of a Media Playlist is the largest bit rate 356 of any contiguous set of segments whose total duration is between 0.5 357 and 1.5 times the target duration. The bit rate of a set is 358 calculated by dividing the sum of the segment sizes by the sum of the 359 segment durations. 361 The average segment bit rate of a Media Playlist is the sum of the 362 sizes (in bits) of every Media Segment in the Media Playlist, divided 363 by the Media Playlist duration. Note that this includes container 364 overhead, but not HTTP or other overhead imposed by the delivery 365 system. 367 4.2. Attribute Lists 369 Certain tags have values which are Attribute Lists. An Attribute 370 List is a comma-separated list of attribute/value pairs with no 371 whitespace. 373 An attribute/value pair has the following syntax: 375 AttributeName=AttributeValue 377 An AttributeName is an unquoted string containing characters from the 378 set [A..Z], [0..9] and '-'. Therefore, AttributeNames contain only 379 uppercase letters, not lowercase. There MUST NOT be any whitespace 380 between the AttributeName and the '=' character, nor between the '=' 381 character and the AttributeValue. 383 An AttributeValue is one of the following: 385 o decimal-integer: an unquoted string of characters from the set 386 [0..9] expressing an integer in base-10 arithmetic in the range 387 from 0 to 2^64-1 (18446744073709551615). A decimal-integer may be 388 from 1 to 20 characters long. 390 o hexadecimal-sequence: an unquoted string of characters from the 391 set [0..9] and [A..F] that is prefixed with 0x or 0X. The maximum 392 length of a hexadecimal-sequence depends on its AttributeName. 394 o decimal-floating-point: an unquoted string of characters from the 395 set [0..9] and '.' which expresses a non-negative floating-point 396 number in decimal positional notation. 398 o signed-decimal-floating-point: an unquoted string of characters 399 from the set [0..9], '-' and '.' which expresses a signed 400 floating-point number in decimal positional notation. 402 o quoted-string: a string of characters within a pair of double- 403 quotes (0x22). The following characters MUST NOT appear in a 404 quoted-string: line feed (0xA), carriage return (0xD), or double 405 quote (0x22). Quoted-string AttributeValues SHOULD be constructed 406 so that byte-wise comparison is sufficient to test two quoted- 407 string AttributeValues for equality. Note that this implies case- 408 sensitive comparison. 410 o enumerated-string: an unquoted character string from a set which 411 is explicitly defined by the Attribute. An enumerated-string will 412 never contain double-quotes ("), commas (,), or whitespace. 414 o decimal-resolution: two decimal-integers separated by the "x" 415 character. The first integer is a horizontal pixel dimension 416 (width); the second is a vertical pixel dimension (height). 418 The type of the AttributeValue for a given AttributeName is specified 419 by the Attribute definition. 421 A given AttributeName MUST NOT appear more than once in a given 422 Attribute List. Clients SHOULD refuse to play such Playlists. 424 4.3. Playlist Tags 426 Playlist tags specify either global parameters of the Playlist, or 427 information about the Media Segments or Media Playlists that appear 428 after them. 430 4.3.1. Basic Tags 432 These tags are allowed in both Media Playlists and Master Playlists. 434 4.3.1.1. EXTM3U 436 The EXTM3U tag indicates that the file is an Extended M3U [M3U] 437 Playlist file. It MUST be the first line of every Media Playlist and 438 every Master Playlist. Its format is: 440 #EXTM3U 442 4.3.1.2. EXT-X-VERSION 444 The EXT-X-VERSION tag indicates the compatibility version of the 445 Playlist file, its associated media, and its server. 447 The EXT-X-VERSION tag applies to the entire Playlist file. Its 448 format is: 450 #EXT-X-VERSION: 452 where n is an integer indicating the protocol compatibility version 453 number. 455 It MUST appear in all Playlists containing tags or attributes that 456 are not compatible with protocol version 1 to support 457 interoperability with older clients. Section 7 specifies the minimum 458 value of the compatibility version number for any given Playlist 459 file. 461 A Playlist file MUST NOT contain more than one EXT-X-VERSION tag. If 462 a client encounters a Playlist with multiple EXT-X-VERSION tags, it 463 MUST reject it. 465 4.3.2. Media Segment Tags 467 Each Media Segment is specified by a series of Media Segment tags 468 followed by a URI. Some Media Segment tags apply to just the next 469 segment; others apply to all subsequent segments until another 470 instance of the same tag. 472 A Media Segment tag MUST NOT appear in a Master Playlist. Clients 473 MUST reject Playlists that contain both Media Segment Tags and Master 474 Playlist tags (Section 4.3.4). 476 4.3.2.1. EXTINF 478 The EXTINF tag specifies the duration of a Media Segment. It applies 479 only to the next Media Segment. This tag is REQUIRED for each Media 480 Segment. Its format is: 482 #EXTINF:,[] 484 where duration is a decimal-floating-point or decimal-integer number 485 (as described in Section 4.2) that specifies the duration of the 486 Media Segment in seconds. Generally, durations SHOULD be decimal- 487 floating-point, with enough accuracy to avoid perceptible error when 488 segment durations are accumulated. If the compatibility version 489 number is less than 3, durations MUST be integers. Durations that 490 are reported as integers SHOULD be rounded to the nearest integer. 491 The remainder of the line following the comma is an optional human- 492 readable informative title of the Media Segment expressed as raw 493 UTF-8 text. 495 4.3.2.2. EXT-X-BYTERANGE 497 The EXT-X-BYTERANGE tag indicates that a Media Segment is a sub-range 498 of the resource identified by its URI. It applies only to the next 499 URI line that follows it in the Playlist. Its format is: 501 #EXT-X-BYTERANGE:<n>[@<o>] 503 where n is a decimal-integer indicating the length of the sub-range 504 in bytes. If present, o is a decimal-integer indicating the start of 505 the sub-range, as a byte offset from the beginning of the resource. 506 If o is not present, the sub-range begins at the next byte following 507 the sub-range of the previous Media Segment. 509 If o is not present, a previous Media Segment MUST appear in the 510 Playlist file and MUST be a sub-range of the same media resource, or 511 the Media Segment is undefined and the Playlist MUST be rejected. 513 A Media Segment without an EXT-X-BYTERANGE tag consists of the entire 514 resource identified by its URI. 516 Use of the EXT-X-BYTERANGE tag REQUIRES a compatibility version 517 number of 4 or greater. 519 4.3.2.3. EXT-X-DISCONTINUITY 521 The EXT-X-DISCONTINUITY tag indicates a discontinuity between the 522 Media Segment that follows it and the one that preceded it. 524 Its format is: 526 #EXT-X-DISCONTINUITY 528 The EXT-X-DISCONTINUITY tag MUST be present if there is a change in 529 any of the following characteristics: 531 o file format 533 o number, type and identifiers of tracks 535 o timestamp sequence 537 The EXT-X-DISCONTINUITY tag SHOULD be present if there is a change in 538 any of the following characteristics: 540 o encoding parameters 542 o encoding sequence 544 See Section 3, Section 6.2.1, and Section 6.3.3 for more information 545 about the EXT-X-DISCONTINUITY tag. 547 4.3.2.4. EXT-X-KEY 549 Media Segments MAY be encrypted. The EXT-X-KEY tag specifies how to 550 decrypt them. It applies to every Media Segment that appears between 551 it and the next EXT-X-KEY tag in the Playlist file with the same 552 KEYFORMAT attribute (or the end of the Playlist file). Two or more 553 EXT-X-KEY tags with different KEYFORMAT attributes MAY apply to the 554 same Media Segment if they ultimately produce the same decryption 555 key. The format is: 557 #EXT-X-KEY:<attribute-list> 559 The following attributes are defined: 561 METHOD 563 The value is an enumerated-string that specifies the encryption 564 method. This attribute is REQUIRED. 566 The methods defined are: NONE, AES-128, and SAMPLE-AES. 568 An encryption method of NONE means that Media Segments are not 569 encrypted. If the encryption method is NONE, other attributes 570 MUST NOT be present. 572 An encryption method of AES-128 signals that Media Segments are 573 completely encrypted using the Advanced Encryption Standard 574 [AES_128] with a 128-bit key, Cipher Block Chaining, and PKCS7 575 padding [RFC5652]. CBC is restarted on each segment boundary, 576 using either the IV attribute value or the Media Sequence Number 577 as the IV; see Section 5.2. The URI attribute is REQUIRED for 578 this METHOD. 580 An encryption method of SAMPLE-AES means that the Media Segments 581 contain media samples, such as audio or video, that are encrypted 582 using the Advanced Encryption Standard [AES_128]. How these media 583 streams are encrypted and encapsulated in a segment depends on the 584 media encoding and the media format of the segment. The 585 encryption format for H.264 [H_264], AAC [ISO_14496], AC-3 [AC_3], 586 and Enhanced AC-3 [AC_3] media streams is described in the HLS 587 Sample Encryption specification [SampleEnc]. The IV attribute MAY 588 be present; see Section 5.2. 590 URI 592 The value is a quoted-string containing a URI that specifies how 593 to obtain the key. This attribute is REQUIRED unless the METHOD 594 is NONE. 596 IV 598 The value is a hexadecimal-sequence that specifies a 128-bit 599 unsigned integer Initialization Vector to be used with the key. 600 Use of the IV attribute REQUIRES a compatibility version number of 601 2 or greater. See Section 5.2 for when the IV attribute is used. 603 KEYFORMAT 605 The value is a quoted-string that specifies how the key is 606 represented in the resource identified by the URI; see Section 5 607 for more detail. This attribute is OPTIONAL; its absence 608 indicates an implicit value of "identity". Use of the KEYFORMAT 609 attribute REQUIRES a compatibility version number of 5 or greater. 611 KEYFORMATVERSIONS 613 The value is a quoted-string containing one or more positive 614 integers separated by the "/" character (for example, "1", "1/2", 615 or "1/2/5"). If more than one version of a particular KEYFORMAT 616 is defined, this attribute can be used to indicate which 617 version(s) this instance complies with. This attribute is 618 OPTIONAL; if it is not present, its value is considered to be "1". 619 Use of the KEYFORMATVERSIONS attribute REQUIRES a compatibility 620 version number of 5 or greater. 622 If the Media Playlist file does not contain an EXT-X-KEY tag then 623 Media Segments are not encrypted. 625 See Section 5 for the format of the key file, and Section 5.2, 626 Section 6.2.3 and Section 6.3.6 for additional information on Media 627 Segment encryption. 629 4.3.2.5. EXT-X-MAP 631 The EXT-X-MAP tag specifies how to obtain the Media Initialization 632 Section (Section 3) required to parse the applicable Media Segments. 633 It applies to every Media Segment that appears after it in the 634 Playlist until the next EXT-X-MAP tag or until the end of the 635 playlist. 637 Its format is: 639 #EXT-X-MAP:<attribute-list> 641 The following attributes are defined: 643 URI 645 The value is a quoted-string containing a URI that identifies a 646 resource that contains the Media Initialization Section. This 647 attribute is REQUIRED. 649 BYTERANGE 651 The value is a quoted-string specifying a byte range into the 652 resource identified by the URI attribute. This range SHOULD 653 contain only the Media Initialization Section. The format of the 654 byte range is described in Section 4.3.2.2. This attribute is 655 OPTIONAL; if it is not present, the byte range is the entire 656 resource indicated by the URI. 658 An EXT-X-MAP tag SHOULD be supplied for Media Segments in Playlists 659 with the EXT-X-I-FRAMES-ONLY tag when the first Media Segment (i.e., 660 I-frame) in the Playlist (or the first segment following an 661 EXT-X-DISCONTINUITY tag) does not immediately follow the Media 662 Initialization Section at the beginning of its resource. 664 Use of the EXT-X-MAP tag in a Media Playlist that contains the 665 EXT-X-I-FRAMES-ONLY tag REQUIRES a compatibility version number of 5 666 or greater. Use of the EXT-X-MAP tag in a Media Playlist that DOES 667 NOT contain the EXT-X-I-FRAMES-ONLY tag REQUIRES a compatibility 668 version number of 6 or greater. 670 4.3.2.6. EXT-X-PROGRAM-DATE-TIME 672 The EXT-X-PROGRAM-DATE-TIME tag associates the first sample of a 673 Media Segment with an absolute date and/or time. It applies only to 674 the next Media Segment. 676 The date/time representation is ISO/IEC 8601:2004 [ISO_8601] and 677 SHOULD indicate a time zone and fractional parts of seconds: 679 #EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ> 681 For example: 683 #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00 685 EXT-X-PROGRAM-DATE-TIME tags SHOULD provide millisecond accuracy. 687 See Section 6.2.1 and Section 6.3.3 for more information on the EXT-X 688 -PROGRAM-DATE-TIME tag. 690 4.3.3. Media Playlist Tags 692 Media Playlist tags describe global parameters of the Media Playlist. 693 There MUST NOT be more than one Media Playlist tag of each type in 694 any Media Playlist. 696 A Media Playlist Tag MUST NOT appear in a Master Playlist 698 4.3.3.1. EXT-X-TARGETDURATION 700 The EXT-X-TARGETDURATION tag specifies the maximum Media Segment 701 duration. The EXTINF duration of each Media Segment in the Playlist 702 file, when rounded to the nearest integer, MUST be less than or equal 703 to the target duration; longer segments can trigger playback stalls 704 or other errors. It applies to the entire Playlist file. Its format 705 is: 707 #EXT-X-TARGETDURATION:<s> 709 where s is a decimal-integer indicating the target duration in 710 seconds. The EXT-X-TARGETDURATION tag is REQUIRED. 712 4.3.3.2. EXT-X-MEDIA-SEQUENCE 714 The EXT-X-MEDIA-SEQUENCE tag indicates the Media Sequence Number of 715 the first Media Segment that appears in a Playlist file. Its format 716 is: 718 #EXT-X-MEDIA-SEQUENCE:<number> 720 where number is a decimal-integer. 722 If the Media Playlist file does not contain an EXT-X-MEDIA-SEQUENCE 723 tag then the Media Sequence Number of the first Media Segment in the 724 Media Playlist SHALL be considered to be 0. A client MUST NOT assume 725 that segments with the same Media Sequence Number in different Media 726 Playlists contain matching content - see Section 6.3.2. 728 A URI for a Media Segment is not required to contain its Media 729 Sequence Number. 731 See Section 6.2.1 and Section 6.3.5 for more information on setting 732 the EXT-X-MEDIA-SEQUENCE tag. 734 The EXT-X-MEDIA-SEQUENCE tag MUST appear before the first Media 735 Segment in the Playlist. 737 4.3.3.3. EXT-X-DISCONTINUITY-SEQUENCE 739 The EXT-X-DISCONTINUITY-SEQUENCE tag allows synchronization between 740 different Renditions of the same Variant Stream or different Variant 741 Streams that have EXT-X-DISCONTINUITY tags in their Media Playlists. 743 Its format is: 745 #EXT-X-DISCONTINUITY-SEQUENCE:<number> 747 where number is a decimal-integer. 749 If the Media Playlist does not contain an EXT-X-DISCONTINUITY- 750 SEQUENCE tag, then the Discontinuity Sequence Number of the first 751 Media Segment in the Playlist SHALL be considered to be 0. 753 The EXT-X-DISCONTINUITY-SEQUENCE tag MUST appear before the first 754 Media Segment in the Playlist. 756 The EXT-X-DISCONTINUITY-SEQUENCE tag MUST appear before any 757 EXT-X-DISCONTINUITY tag. 759 See Section 6.2.1 and Section 6.2.2 for more information about 760 setting the value of the EXT-X-DISCONTINUITY-SEQUENCE tag. 762 4.3.3.4. EXT-X-ENDLIST 764 The EXT-X-ENDLIST tag indicates that no more Media Segments will be 765 added to the Media Playlist file. It MAY occur anywhere in the Media 766 Playlist file. Its format is: 768 #EXT-X-ENDLIST 770 4.3.3.5. EXT-X-PLAYLIST-TYPE 772 The EXT-X-PLAYLIST-TYPE tag provides mutability information about the 773 Media Playlist file. It applies to the entire Media Playlist file. 774 It is OPTIONAL. Its format is: 776 #EXT-X-PLAYLIST-TYPE:<EVENT|VOD> 778 Section 6.2.1 defines the implications of the EXT-X-PLAYLIST-TYPE 779 tag. 781 If the EXT-X-PLAYLIST-TYPE value is EVENT, Media Segments can only be 782 added to the end of the Media Playlist. If the EXT-X-PLAYLIST-TYPE 783 value is VOD, the Media Playlist cannot change. 785 If the EXT-X-PLAYLIST-TYPE tag is omitted from a Media Playlist, the 786 Playlist can be updated according to the rules in Section 6.2.1 with 787 no additional restrictions. For example, a live Playlist 788 (Section 6.2.2) MAY be updated to remove Media Segments in the order 789 that they appeared. 791 4.3.3.6. EXT-X-I-FRAMES-ONLY 793 The EXT-X-I-FRAMES-ONLY tag indicates that each Media Segment in the 794 Playlist describes a single I-frame. I-frames (or Intra frames) are 795 encoded video frames whose encoding does not depend on any other 796 frame. I-frame playlists can be used for trick play, such as fast 797 forward, rapid reverse and scrubbing. 799 The EXT-X-I-FRAMES-ONLY tag applies to the entire Playlist. Its 800 format is: 802 #EXT-X-I-FRAMES-ONLY 804 In a Playlist with the EXT-X-I-FRAMES-ONLY tag, the Media Segment 805 duration (EXTINF tag value) is the time between the presentation time 806 of the I-frame in the Media Segment and the presentation time of the 807 next I-frame in the Playlist, or the end of the presentation if it is 808 the last I-frame in the Playlist. 810 Media resources containing I-frame segments MUST begin with either a 811 Media Initialization Section (Section 3) or be accompanied by an 812 EXT-X-MAP tag indicating the Media Initialization Section so that 813 clients can load and decode I-frame segments in any order. The byte 814 range of an I-frame segment with an EXT-X-BYTERANGE tag applied to it 815 (Section 4.3.2.2) MUST NOT include its Media Initialization Section; 816 clients can assume that the Media Initialization Section is defined 817 by EXT-X-MAP tag, or is located from the start of the resource to the 818 offset of the first I-frame segment in that resource. 820 Use of the EXT-X-I-FRAMES-ONLY REQUIRES a compatibility version 821 number of 4 or greater. 823 4.3.4. Master Playlist Tags 825 Master Playlist tags define the Variant Streams, Renditions, and 826 other global parameters of the presentation. 828 Master Playlist Tags MUST NOT appear in a Media Playlist; clients 829 MUST reject any Playlist that contains both a Master Playlist tag and 830 either a Media Playlist tag or a Media Segment tag. 832 4.3.4.1. EXT-X-MEDIA 834 The EXT-X-MEDIA tag is used to relate Media Playlists that contain 835 alternative Renditions (Section 4.3.4.2.1) of the same content. For 836 example, three EXT-X-MEDIA tags can be used to identify audio-only 837 Media Playlists that contain English, French and Spanish Renditions 838 of the same presentation. Or two EXT-X-MEDIA tags can be used to 839 identify video-only Media Playlists that show two different camera 840 angles. 842 Its format is: 844 #EXT-X-MEDIA:<attribute-list> 846 The following attributes are defined: 848 TYPE 850 The value is an enumerated-string; valid strings are AUDIO, VIDEO, 851 SUBTITLES and CLOSED-CAPTIONS. This attribute is REQUIRED. 853 In Transport Streams, Closed captions [CEA608] media is carried in 854 the video stream. Therefore, an EXT-X-MEDIA tag with TYPE of 855 CLOSED-CAPTION does not specify a Rendition; the closed caption 856 media is present in the Media Segments of every video Rendition. 858 URI 860 The value is a quoted-string containing a URI that identifies the 861 Media Playlist file. This attribute is OPTIONAL; see 862 Section 4.3.4.2.1. If the TYPE is CLOSED-CAPTIONS, the URI 863 attribute MUST NOT be present. 865 GROUP-ID 867 The value is a quoted-string which specifies the group to which 868 the Rendition belongs. See Section 4.3.4.1.1. This attribute is 869 REQUIRED. 871 LANGUAGE 873 The value is a quoted-string containing one of the standard Tags 874 for Identifying Languages [RFC5646], which identifies the primary 875 language used in the Rendition. This attribute is OPTIONAL. 877 ASSOC-LANGUAGE 879 The value is a quoted-string containing a language tag [RFC5646] 880 that identifies a language that is associated with the Rendition. 881 An associated language is often used in a different role than the 882 language specified by the LANGUAGE attribute (e.g. written vs. 883 spoken, or as a fallback dialect). This attribute is OPTIONAL. 885 The LANGUAGE and ASSOC-LANGUAGE attributes can be used, for 886 example, to link Norwegian renditions that use different spoken 887 and written languages. 889 NAME 891 The value is a quoted-string containing a human-readable 892 description of the Rendition. If the LANGUAGE attribute is 893 present then this description SHOULD be in that language. This 894 attribute is REQUIRED. 896 DEFAULT 898 The value is an enumerated-string; valid strings are YES and NO. 899 If the value is YES, then the client SHOULD play this Rendition of 900 the content in the absence of information from the user indicating 901 a different choice. This attribute is OPTIONAL. Its absence 902 indicates an implicit value of NO. 904 AUTOSELECT 906 The value is an enumerated-string; valid strings are YES and NO. 907 This attribute is OPTIONAL. Its absence indicates an implicit 908 value of NO. If the value is YES, then the client MAY choose to 909 play this Rendition in the absence of explicit user preference 910 because it matches the current playback environment, such as 911 chosen system language. 913 If the AUTOSELECT attribute is present, its value MUST be YES if 914 the value of the DEFAULT attribute is YES. 916 FORCED 918 The value is an enumerated-string; valid strings are YES and NO. 919 This attribute is OPTIONAL. Its absence indicates an implicit 920 value of NO. The FORCED attribute MUST NOT be present unless the 921 TYPE is SUBTITLES. 923 A value of YES indicates that the Rendition contains content which 924 is considered essential to play. When selecting a FORCED 925 Rendition, a client SHOULD choose the one that best matches the 926 current playback environment (e.g. language). 928 A value of NO indicates that the Rendition contains content which 929 is intended to be played in response to explicit user request. 931 INSTREAM-ID 933 The value is a quoted-string that specifies a Rendition within the 934 segments in the Media Playlist. This attribute is REQUIRED if the 935 TYPE attribute is CLOSED-CAPTIONS, in which case it MUST have one 936 of the values: "CC1", "CC2", "CC3", "CC4", or "SERVICEn" where n 937 MUST be an integer between 1 and 63 (e.g."SERVICE3" or 938 "SERVICE42"). 940 The values "CC1", "CC2", "CC3", and "CC4" identify a Line 21 Data 941 Services channel [CEA608]. The "SERVICE" values identify a 942 Digital Television Closed Captioning [CEA708] service block 943 number. 945 For all other TYPE values, the INSTREAM-ID MUST NOT be specified. 947 CHARACTERISTICS 949 The value is a quoted-string containing one or more Uniform Type 950 Identifiers [UTI] separated by comma (,) characters. This 951 attribute is OPTIONAL. Each UTI indicates an individual 952 characteristic of the Rendition. 954 A SUBTITLES Rendition MAY include the following characteristics: 955 "public.accessibility.transcribes-spoken-dialog"; 956 "public.accessibility.describes-music-and-sound"; "public.easy-to- 957 read" (which indicates that the subtitles have been edited for 958 ease of reading). 960 An AUDIO Rendition MAY include the following characteristics: 961 "public.accessibility.describes-video". 963 The CHARACTERISTICS attribute MAY include private UTIs. 965 4.3.4.1.1. Rendition Groups 967 A set of one or more EXT-X-MEDIA tags with the same GROUP-ID value 968 and the same TYPE value defines a Group of Renditions. Each member 969 of the Group MUST be an alternative rendition of the same content; 970 otherwise playback errors can occur. 972 All EXT-X-MEDIA tags in a Playlist MUST meet the following 973 constraints: 975 o All EXT-X-MEDIA tags in the same Group MUST have different NAME 976 attributes. 978 o A Group MUST NOT have more than one member with a DEFAULT 979 attribute of YES. 981 o All members of a Group whose AUTOSELECT attribute has a value of 982 YES MUST have LANGUAGE [RFC5646] attributes with unique values. 984 A Playlist MAY contain multiple Groups of the same TYPE in order to 985 provide multiple encodings of that media type. If it does so, each 986 Group of the same TYPE MUST have the same set of members, and each 987 corresponding member MUST have identical attributes with the 988 exception of the URI attribute. 990 Each member in a Group of Renditions MAY have a different sample 991 format. However, any EXT-X-STREAM-INF (Section 4.3.4.2) tag or 992 EXT-X-I-FRAME-STREAM-INF (Section 4.3.4.3) tag which references that 993 Group MUST have a CODECS attribute that lists every sample format 994 present in any Rendition in the Group, or client playback failures 995 can occur. 997 4.3.4.2. EXT-X-STREAM-INF 999 The EXT-X-STREAM-INF tag specifies a Variant Stream, which is a set 1000 of Renditions which can be combined to play the presentation. The 1001 attributes of the tag provide information about the Variant Stream. 1003 The URI line that follows the EXT-X-STREAM-INF tag specifies a Media 1004 Playlist that carries a Rendition of the Variant Stream. The URI 1005 line is REQUIRED. Clients that do not support multiple video 1006 renditions SHOULD play this Rendition 1008 Its format is: 1010 #EXT-X-STREAM-INF:<attribute-list> 1011 <URI> 1013 The following attributes are defined: 1015 BANDWIDTH 1017 The value is a decimal-integer of bits per second. It represents 1018 the peak segment bit rate of the Variant Stream. 1020 If all the Media Segments in a Variant Stream have already been 1021 created, the BANDWIDTH value MUST be the largest sum of peak 1022 segment bit rates that is produced by any playable combination of 1023 Renditions. (For a Variant Stream with a single Media Playlist, 1024 this is just the peak segment bit rate of that Media Playlist.) 1025 An inaccurate value can cause playback stalls or prevent clients 1026 from playing the variant. 1028 If the Master Playlist is to be made available before all Media 1029 Segments in the presentation have been encoded, the BANDWIDTH 1030 value SHOULD be the BANDWIDTH value of a representative period of 1031 similar content, encoded using the same settings. 1033 Every EXT-X-STREAM-INF tag MUST include the BANDWIDTH attribute. 1035 AVERAGE-BANDWIDTH 1037 The value is a decimal-integer of bits per second. It represents 1038 the average segment bit rate of the Variant Stream. 1040 If all the Media Segments in a Variant Stream have already been 1041 created, the AVERAGE-BANDWIDTH value MUST be the largest sum of 1042 average segment bit rates that is produced by any playable 1043 combination of Renditions. (For a Variant Stream with a single 1044 Media Playlist, this is just the average segment bit rate of that 1045 Media Playlist.) An inaccurate value can cause playback stalls or 1046 prevent clients from playing the variant. 1048 If the Master Playlist is to be made available before all Media 1049 Segments in the presentation have been encoded, the AVERAGE- 1050 BANDWIDTH value SHOULD be the AVERAGE-BANDWIDTH value of a 1051 representative period of similar content, encoded using the same 1052 settings. 1054 The AVERAGE-BANDWIDTH attribute is OPTIONAL. 1056 CODECS 1058 The value is a quoted-string containing a comma-separated list of 1059 formats, where each format specifies a media sample type that is 1060 present in one or more Renditions specified by the Variant Stream. 1061 Valid format identifiers are those in the ISO Base Media File 1062 Format Name Space defined by The 'Codecs' and 'Profiles' 1063 Parameters for "Bucket" Media Types [RFC6381]. 1065 For example, a stream containing AAC-LC audio and H.264 Main 1066 Profile Level 3.0 video would have a CODECS value of 1067 "mp4a.40.2,avc1.4d401e". 1069 Every EXT-X-STREAM-INF tag SHOULD include a CODECS attribute. 1071 RESOLUTION 1073 The value is a decimal-resolution describing the optimal pixel 1074 resolution at which to display all the video in the Variant 1075 Stream. 1077 The RESOLUTION attribute is OPTIONAL but is recommended if the 1078 Variant Stream includes video. 1080 FRAME-RATE 1082 The value is a decimal-floating-point describing the maximum frame 1083 rate for all the video in the Variant Stream, rounded to 3 decimal 1084 places. 1086 The FRAME-RATE attribute is OPTIONAL but is recommended if the 1087 Variant Stream includes video. The FRAME-RATE attribute SHOULD be 1088 included if any video in a Variant Stream exceeds 30 frames per 1089 second. 1091 AUDIO 1092 The value is a quoted-string. It MUST match the value of the 1093 GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master 1094 Playlist whose TYPE attribute is AUDIO. It indicates the set of 1095 audio Renditions that SHOULD be used when playing the 1096 presentation. See Section 4.3.4.2.1. 1098 The AUDIO attribute is OPTIONAL. 1100 VIDEO 1102 The value is a quoted-string. It MUST match the value of the 1103 GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master 1104 Playlist whose TYPE attribute is VIDEO. It indicates the set of 1105 video Renditions that SHOULD be used when playing the 1106 presentation. See Section 4.3.4.2.1. 1108 The VIDEO attribute is OPTIONAL. 1110 SUBTITLES 1112 The value is a quoted-string. It MUST match the value of the 1113 GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master 1114 Playlist whose TYPE attribute is SUBTITLES. It indicates the set 1115 of subtitle Renditions that can be used when playing the 1116 presentation. See Section 4.3.4.2.1. 1118 The SUBTITLES attribute is OPTIONAL. 1120 CLOSED-CAPTIONS 1122 The value can be either a quoted-string or an enumerated-string 1123 with the value NONE. If the value is a quoted-string, it MUST 1124 match the value of the GROUP-ID attribute of an EXT-X-MEDIA tag 1125 elsewhere in the Playlist whose TYPE attribute is CLOSED-CAPTIONS, 1126 and indicates the set of closed-caption Renditions that can be 1127 used when playing the presentation. See Section 4.3.4.2.1. 1129 If the value is the enumerated-string value NONE, all EXT-X 1130 -STREAM-INF tags MUST have this attribute with a value of NONE, 1131 indicating that there are no closed captions in any Variant Stream 1132 in the Master Playlist. Having closed captions in one Variant 1133 Stream but not another can trigger playback inconsistencies. 1135 The CLOSED-CAPTIONS attribute is OPTIONAL. 1137 4.3.4.2.1. Alternative Renditions 1139 When an EXT-X-STREAM-INF tag contains an AUDIO, VIDEO, SUBTITLES, or 1140 CLOSED-CAPTIONS attribute, it indicates that alternative Renditions 1141 of the content are available for playback of that Variant Stream. 1143 When defining alternative Renditions, the following constraints MUST 1144 be met to prevent client playback errors: 1146 o All playable combinations of Renditions associated with an EXT-X 1147 -STREAM-INF tag MUST have an aggregate bandwidth less than or 1148 equal to the BANDWIDTH attribute of the EXT-X-STREAM-INF tag. 1150 o If an EXT-X-STREAM-INF tag contains a RESOLUTION attribute and a 1151 VIDEO attribute, then every alternative video Rendition MUST have 1152 an optimal display resolution matching the value of the RESOLUTION 1153 attribute. 1155 o Every alternative Rendition associated with an EXT-X-STREAM-INF 1156 tag MUST meet the constraints for a Variant Stream described in 1157 Section 6.2.4. 1159 The URI attribute of the EXT-X-MEDIA tag is REQUIRED if the media 1160 type is SUBTITLES, but OPTIONAL if the media type is VIDEO or AUDIO. 1161 If the media type is VIDEO or AUDIO, a missing URI attribute 1162 indicates that the media data for this Rendition is included in the 1163 Media Playlist of any EXT-X-STREAM-INF tag referencing this 1164 EXT-X-MEDIA tag. If the media TYPE is AUDIO and the URI attribute is 1165 missing, clients MUST assume that the audio data for this Rendition 1166 is present in every video Rendition specified by the EXT-X-STREAM-INF 1167 tag. 1169 The URI attribute of the EXT-X-MEDIA tag MUST NOT be included if the 1170 media type is CLOSED-CAPTIONS. 1172 4.3.4.3. EXT-X-I-FRAME-STREAM-INF 1174 The EXT-X-I-FRAME-STREAM-INF tag identifies a Media Playlist file 1175 containing the I-frames of a multimedia presentation. It stands 1176 alone, in that it does not apply to a particular URI in the Master 1177 Playlist. Its format is: 1179 #EXT-X-I-FRAME-STREAM-INF:<attribute-list> 1181 All attributes defined for the EXT-X-STREAM-INF tag (Section 4.3.4.2) 1182 are also defined for the EXT-X-I-FRAME-STREAM-INF tag, except for the 1183 AUDIO, SUBTITLES and CLOSED-CAPTIONS attributes. In addition, the 1184 following attribute is defined: 1186 URI 1188 The value is a quoted-string containing a URI that identifies the 1189 I-frame Media Playlist file. That Playlist file MUST contain an 1190 EXT-X-I-FRAMES-ONLY tag. 1192 Every EXT-X-I-FRAME-STREAM-INF tag MUST include a BANDWIDTH attribute 1193 and a URI attribute. 1195 The provisions in Section 4.3.4.2.1 also apply to EXT-X-I-FRAME- 1196 STREAM-INF tags with a VIDEO attribute. 1198 A Master Playlist that specifies alternative VIDEO Renditions and 1199 I-frame Playlists SHOULD include an alternative I-frame VIDEO 1200 Rendition for each regular VIDEO Rendition, with the same NAME and 1201 LANGUAGE attributes. 1203 4.3.4.4. EXT-X-SESSION-DATA 1205 The EXT-X-SESSION-DATA tag allows arbitrary session data to be 1206 carried in a Master Playlist. 1208 Its format is: 1210 #EXT-X-SESSION-DATA:<attribute list> 1212 The following attributes are defined: 1214 DATA-ID 1216 The value of DATA-ID is a quoted-string which identifies that data 1217 value. The DATA-ID SHOULD conform to a reverse DNS naming 1218 convention, such as "com.example.movie.title"; however, there is 1219 no central registration authority, so Playlist authors SHOULD take 1220 care to choose a value which is unlikely to collide with others. 1221 This attribute is REQUIRED. 1223 VALUE 1225 VALUE is a quoted-string. It contains the data identified by 1226 DATA-ID. If the LANGUAGE is specified, VALUE SHOULD contain a 1227 human-readable string written in the specified language. 1229 URI 1231 The value is a quoted-string containing a URI. The resource 1232 identified by the URI MUST be formatted as JSON [RFC7159]; 1233 otherwise, clients may fail to interpret the resource. 1235 LANGUAGE 1237 The value is a quoted-string containing a language tag [RFC5646] 1238 that identifies the language of the VALUE. This attribute is 1239 OPTIONAL. 1241 Each EXT-X-SESSION-DATA tag MUST contain either a VALUE or URI 1242 attribute, but not both. 1244 A Playlist MAY contain multiple EXT-X-SESSION-DATA tags with the same 1245 DATA-ID attribute. A Playlist MUST NOT contain more than one EXT-X 1246 -SESSION-DATA tag with the same DATA-ID attribute and the same 1247 LANGUAGE attribute. 1249 4.3.4.5. EXT-X-SESSION-KEY 1251 The EXT-X-SESSION-KEY tag allows encryption keys from Media Playlists 1252 to be specified in a Master Playlist. This allows the client to 1253 preload these keys without having to read the Media Playlist(s) 1254 first. 1256 Its format is: 1258 #EXT-X-SESSION-KEY:<attribute list> 1260 All attributes defined for the EXT-X-KEY tag (Section 4.3.2.4) are 1261 also defined for the EXT-X-SESSION-KEY, except that the value of the 1262 METHOD attribute MUST NOT be NONE. If an EXT-X-SESSION-KEY is used, 1263 the values of the METHOD, KEYFORMAT and KEYFORMATVERSIONS attributes 1264 MUST match any EXT-X-KEY with the same URI value. 1266 EXT-X-SESSION-KEY tags SHOULD be added if multiple Variant Streams or 1267 Renditions use the same encryption keys and formats. 1269 The EXT-X-SESSION-KEY tag is optional. 1271 4.3.5. Media or Master Playlist Tags 1273 The tags in this section can appear in either Master Playlists or 1274 Media Playlists. If one of these tags appears in a Master Playlist, 1275 it SHOULD NOT appear in any Media Playlist referenced by that Master 1276 Playlist. A tag that appears in both MUST have the same value; 1277 otherwise, clients SHOULD ignore the value in the Media Playlist(s). 1279 These tags MUST NOT appear more than once in a Playlist. If a tag 1280 appears more than once, clients MUST reject the playlist. 1282 4.3.5.1. EXT-X-INDEPENDENT-SEGMENTS 1284 The EXT-X-INDEPENDENT-SEGMENTS tag indicates that all media samples 1285 in a Media Segment can be decoded without information from other 1286 segments. It applies to every Media Segment in the Playlist. 1288 Its format is: 1290 #EXT-X-INDEPENDENT-SEGMENTS 1292 If the EXT-X-INDEPENDENT-SEGMENTS tag appears in a Master Playlist, 1293 it applies to every Media Segment in every Media Playlist in the 1294 Master Playlist. 1296 4.3.5.2. EXT-X-START 1298 The EXT-X-START tag indicates a preferred point at which to start 1299 playing a Playlist. By default, clients SHOULD start playback at 1300 this point when beginning a playback session. This tag is OPTIONAL. 1302 Its format is: 1304 #EXT-X-START:<attribute list> 1306 The following attributes are defined: 1308 TIME-OFFSET 1310 The value of TIME-OFFSET is a signed-decimal-floating-point number 1311 of seconds. A positive number indicates a time offset from the 1312 beginning of the Playlist. A negative number indicates a negative 1313 time offset from the end of the last Media Segment in the 1314 Playlist. This attribute is REQUIRED. 1316 The absolute value of TIME-OFFSET SHOULD NOT be larger than the 1317 Playlist duration. If the absolute value of TIME-OFFSET exceeds 1318 the duration of the Playlist, it indicates either the end of the 1319 Playlist (if positive) or the beginning of the Playlist (if 1320 negative). 1322 If the Playlist does not contain the EXT-X-ENDLIST tag, the TIME- 1323 OFFSET SHOULD NOT be within three target durations of the end of 1324 the Playlist file. 1326 PRECISE 1328 The value is an enumerated-string; valid strings are YES and NO. 1329 If the value is YES, clients SHOULD start playback at the Media 1330 Segment containing the TIME-OFFSET, but SHOULD NOT render media 1331 samples in that segment whose presentation times are prior to the 1332 TIME-OFFSET. If the value is NO, clients SHOULD attempt to render 1333 every media sample in that segment. This attribute is OPTIONAL. 1334 If it is missing, its value should be treated as NO. 1336 5. Key files 1338 5.1. Structure of Key files 1340 An EXT-X-KEY tag with a URI attribute identifies a Key file. A Key 1341 file contains a cipher key that can decrypt Media Segments in the 1342 Playlist. 1344 [AES_128] encryption uses 16-octet keys. If the KEYFORMAT of an 1345 EXT-X-KEY tag is "identity", the Key file is a single packed array of 1346 16 octets in binary format. 1348 5.2. IV for [AES_128] 1350 [AES_128] REQUIRES the same 16-octet Initialization Vector (IV) to be 1351 supplied when encrypting and decrypting. Varying this IV increases 1352 the strength of the cipher. 1354 An IV attribute on an EXT-X-KEY tag with a KEYFORMAT of "identity" 1355 specifies an Initialization Vector that can be used when decrypting 1356 Media Segments encrypted with that Key file. IV values for AES-128 1357 are 128-bit numbers. 1359 An EXT-X-KEY tag with a KEYFORMAT of "identity" that does not have an 1360 IV attribute indicates that the Media Sequence Number is to be used 1361 as the IV when decrypting a Media Segment, by putting its big-endian 1362 binary representation into a 16-octet (128-bit) buffer and padding 1363 (on the left) with zeros. 1365 6. Client/Server Responsibilities 1367 6.1. Introduction 1369 This section describes how the server generates the Playlist and 1370 Media Segments and how the client should download them for playback. 1372 6.2. Server Responsibilities 1373 6.2.1. General Server Responsibilities 1375 The production of the source media is outside the scope of this 1376 document, which simply presumes a source of continuous encoded media 1377 containing the presentation. 1379 The server MUST divide the source media into individual Media 1380 Segments whose duration is less than or equal to a constant target 1381 duration. Segments that are longer than the planned target duration 1382 can trigger playback stalls and other errors. 1384 The server SHOULD attempt to divide the source media at points that 1385 support effective decode of individual Media Segments, e.g. on packet 1386 and key frame boundaries. 1388 The server MUST create a URI for every Media Segment that enables its 1389 clients to obtain the segment data. If a server supports partial 1390 loading of resources (e.g. via HTTP Range requests), it MAY specify 1391 segments as sub-ranges of larger resources using the EXT-X-BYTERANGE 1392 tag. 1394 Any Media Segment that is specified in a Playlist loaded by a client 1395 MUST be available for immediate download, or playback errors can 1396 occur. Once download starts, its transfer rate SHOULD NOT be 1397 constrained by the segment production process. 1399 HTTP servers SHOULD transfer text files - such as Playlists and 1400 WebVTT segments - using the "gzip" Content-Encoding if the client 1401 indicates that it is prepared to accept it. 1403 The server must create a Media Playlist file (Section 4) that 1404 contains a URI for each Media Segment that the server wishes to make 1405 available, in the order in which they are to be played. 1407 The value of the EXT-X-VERSION tag (Section 4.3.1.2) SHOULD NOT be 1408 greater than what is required for the tags and attributes in the 1409 Playlist - see Section 7. 1411 Changes to the Playlist file MUST be made atomically from the point 1412 of view of the clients, or playback errors MAY occur. 1414 The server MUST NOT change the Media Playlist file, except to: 1416 Append lines to it (Section 6.2.1). 1418 Remove Media Segment URIs from the Playlist in the order that they 1419 appear, along with any tags that apply only to those segments 1420 (Section 6.2.2). 1422 Increment the value of the EXT-X-MEDIA-SEQUENCE or EXT-X 1423 -DISCONTINUITY-SEQUENCE tags (Section 6.2.2). 1425 Add an EXT-X-ENDLIST tag to the Playlist (Section 6.2.1). 1427 A Media Playlist has further constraints on its updates if it 1428 contains an EXT-X-PLAYLIST-TYPE tag. An EXT-X-PLAYLIST-TYPE tag with 1429 a value of VOD indicates that the Playlist file MUST NOT change. An 1430 EXT-X-PLAYLIST-TYPE tag with a value of EVENT indicates that the 1431 server MUST NOT change or delete any part of the Playlist file; it 1432 MAY append lines to it. 1434 The value of the EXT-X-TARGETDURATION tag in the Media Playlist MUST 1435 NOT change. A typical target duration is 10 seconds. 1437 Playlist changes other than those allowed here can trigger playback 1438 errors and inconsistent client behavior. 1440 Each Media Segment in a Media Playlist has an integer Discontinuity 1441 Sequence Number. The Discontinuity Sequence Number can be used in 1442 addition to the timestamps within the media to synchronize Media 1443 Segments across different Renditions. 1445 A segment's Discontinuity Sequence Number is the value of the EXT-X 1446 -DISCONTINUITY-SEQUENCE tag (or zero if none) plus the number of 1447 EXT-X-DISCONTINUITY tags in the Playlist preceding the URI line of 1448 the segment. 1450 The server MAY associate an absolute date and time with a Media 1451 Segment by applying an EXT-X-PROGRAM-DATE-TIME tag to it. This 1452 defines an informative mapping of the (wall-clock) date and time 1453 specified by the tag to the first media timestamp in the segment, 1454 which may be used as a basis for seeking, for display, or for other 1455 purposes. If a server provides this mapping, it SHOULD apply an 1456 EXT-X-PROGRAM-DATE-TIME tag to every segment that has an 1457 EXT-X-DISCONTINUITY tag applied to it. 1459 If the Media Playlist contains the final Media Segment of the 1460 presentation then the Playlist file MUST contain the EXT-X-ENDLIST 1461 tag; this allows clients to minimize unproductive Playlist reloads. 1463 If a Media Playlist does not contain the EXT-X-ENDLIST tag, the 1464 server MUST make a new version of the Playlist file available that 1465 contains at least one new Media Segment. It MUST be made available 1466 relative to the time that the previous version of the Playlist file 1467 was made available: no earlier than one-half the target duration 1468 after that time, and no later than 1.5 times the target duration 1469 after that time. This allows clients to utilize the network 1470 efficiently. 1472 If the server wishes to remove an entire presentation, it SHOULD 1473 provide a clear indication to clients that the Playlist file is no 1474 longer available (e.g. with an HTTP 404 or 410 response). It MUST 1475 ensure that all Media Segments in the Playlist file remain available 1476 to clients for at least the duration of the Playlist file at the time 1477 of removal to prevent interruption of in-progress playback. 1479 6.2.2. Live Playlists 1481 The server MAY limit the availability of Media Segments by removing 1482 Media Segments from the Playlist file (Section 6.2.1). If Media 1483 Segments are to be removed, the Playlist file MUST contain an EXT-X 1484 -MEDIA-SEQUENCE tag. Its value MUST be incremented by 1 for every 1485 Media Segment that is removed from the Playlist file; it MUST NOT 1486 decrease or wrap. Clients can malfunction if each Media Segment does 1487 not have a consistent, unique Media Sequence Number. 1489 Media Segments MUST be removed from the Playlist file in the order 1490 that they appear in the Playlist; otherwise, client playback can 1491 malfunction. 1493 The server MUST NOT remove a Media Segment from a Playlist file 1494 without an EXT-X-ENDLIST tag if that would produce a Playlist whose 1495 duration is less than three times the target duration. Doing so can 1496 trigger playback stalls. 1498 When the server removes a Media Segment URI from the Playlist, the 1499 corresponding Media Segment MUST remain available to clients for a 1500 period of time equal to the duration of the segment plus the duration 1501 of the longest Playlist file distributed by the server containing 1502 that segment. Removing a Media Segment earlier than that can 1503 interrupt in-progress playback. 1505 If the server wishes to remove segments from a Media Playlist 1506 containing an EXT-X-DISCONTINUITY tag, the Media Playlist MUST 1507 contain an EXT-X-DISCONTINUITY-SEQUENCE tag. Without the EXT-X 1508 -DISCONTINUITY-SEQUENCE tag, it can be impossible for a client to 1509 locate corresponding segments between Renditions. 1511 If the server removes an EXT-X-DISCONTINUITY tag from the Media 1512 Playlist, it MUST increment the value of the EXT-X-DISCONTINUITY- 1513 SEQUENCE tag so that the Discontinuity Sequence Numbers of the 1514 segments still in the Media Playlist remain unchanged. The value of 1515 the EXT-X-DISCONTINUITY-SEQUENCE tag MUST NOT decrease or wrap. 1517 Clients can malfunction if each Media Segment does not have a 1518 consistent Discontinuity Sequence Number. 1520 If a server plans to remove a Media Segment after it is delivered to 1521 clients over HTTP, it SHOULD ensure that the HTTP response contains 1522 an Expires header that reflects the planned time-to-live. 1524 A Live Playlist MUST NOT contain the EXT-X-PLAYLIST-TYPE tag, as no 1525 value of that tag allows Media Segments to be removed. 1527 6.2.3. Encrypting Media Segments 1529 Media Segments MAY be encrypted. Every encrypted Media Segment MUST 1530 have an EXT-X-KEY tag (Section 4.3.2.4) applied to it with a URI that 1531 the client can use to obtain a Key file (Section 5) containing the 1532 decryption key. 1534 A Media Segment can only be encrypted with one encryption METHOD, 1535 using one encryption key and IV. However, a server MAY offer 1536 multiple ways to retrieve that key by providing multiple EXT-X-KEY 1537 tags, each with a different KEYFORMAT attribute value. 1539 The server MAY set the HTTP Expires header in the key response to 1540 indicate the duration for which the key can be cached. 1542 If an encrypted Media Segment is followed by one or more unencrypted 1543 Media Segments in the Playlist, the unencrypted Media Segments MUST 1544 have an EXT-X-KEY tag whose METHOD is NONE applied to them. 1545 Otherwise, the client will misinterpret those segments as encrypted. 1547 If the encryption METHOD is AES-128 and the Playlist does not contain 1548 the EXT-X-I-FRAMES-ONLY tag, AES encryption as described in 1549 Section 4.3.2.4 SHALL be applied to individual Media Segments. 1551 If the encryption METHOD is AES-128 and the Playlist contains an 1552 EXT-X-I-FRAMES-ONLY tag, the entire resource MUST be encrypted using 1553 AES-128 CBC with PKCS7 padding [RFC5652]. Encryption MAY be 1554 restarted on 16-byte block boundaries, unless the first block 1555 contains an I-frame. The IV used for encryption MUST be either the 1556 Media Sequence Number of the Media Segment or the value of the IV 1557 attribute of the EXT-X-KEY tag, as described in Section 5.2. These 1558 constraints allow a client to load and decrypt individual I-frames 1559 specified as sub-ranges of regular encrypted Media Segments, and 1560 their Media Initialization Sections. 1562 If the encryption METHOD is SAMPLE-AES, media samples MAY be 1563 encrypted prior to encapsulation in a Media Segment. The encryption 1564 format for H.264, AAC, AC-3 and Enhanced AC-3 media streams is 1565 described by the HLS Sample Encryption specification [SampleEnc]. 1567 The server MUST NOT remove an EXT-X-KEY tag from the Playlist file if 1568 it applies to any Media Segment in the Playlist file, or clients who 1569 subsequently load that Playlist will be unable to decrypt those Media 1570 Segments. 1572 6.2.4. Providing Variant Streams 1574 A server MAY offer multiple Media Playlist files to provide different 1575 encodings of the same presentation. If it does so it SHOULD provide 1576 a Master Playlist file that lists each Variant Stream to allow 1577 clients to switch between encodings dynamically. 1579 Master Playlists describe regular Variant Streams with EXT-X-STREAM- 1580 INF tags and I-frame Variant Streams with EXT-X-I-FRAME-STREAM-INF 1581 tags. 1583 If an EXT-X-STREAM-INF tag or EXT-X-I-FRAME-STREAM-INF tag contains 1584 the CODECS attribute, the attribute value MUST include every media 1585 format [RFC6381] present in any Media Segment in any of the 1586 Renditions specified by the Variant Stream. 1588 The server MUST meet the following constraints when producing Variant 1589 Streams in order to allow clients to switch between them seamlessly: 1591 Each Variant Stream MUST present the same content. 1593 Matching content in Variant Streams MUST have matching timestamps. 1594 This allows clients to synchronize the media. 1596 Matching content in Variant Streams MUST have matching 1597 Discontinuity Sequence Numbers - see Section 4.3.3.3. 1599 Each Media Playlist in each Variant Stream MUST have the same 1600 target duration. The only exception is that SUBTITLES Renditions 1601 with an EXT-X-PLAYLIST-TYPE of VOD MAY have longer target 1602 durations. 1604 Content that appears in a Media Playlist of one Variant Stream but 1605 not in another MUST appear either at the beginning or at the end 1606 of the Media Playlist file and MUST NOT be longer than the target 1607 duration. 1609 If any Media Playlists have an EXT-X-PLAYLIST-TYPE tag, all Media 1610 Playlists MUST have the EXT-X-PLAYLIST-TYPE tag with the same 1611 value. 1613 If the Playlist contains an EXT-X-PLAYLIST-TYPE tag with the value 1614 of VOD, the first segment of every Media Playlist in every Variant 1615 Stream MUST start at the same media timestamp. 1617 If any Media Playlist in a Master Playlist contains an EXT-X 1618 -PROGRAM-DATE-TIME tag, then all Media Playlists in that Master 1619 Playlist MUST contain EXT-X-PROGRAM-DATE-TIME tags with consistent 1620 mappings of date and time to media timestamps. 1622 In addition, for broadest compatibility, Variant Streams SHOULD 1623 contain the same encoded audio bitstream. This allows clients to 1624 switch between Variant Streams without audible glitching. 1626 The rules for Variant Streams also apply to alternative Renditions - 1627 see Section 4.3.4.2.1. 1629 6.3. Client Responsibilities 1631 6.3.1. General Client Responsibilities 1633 How the client obtains the URI to the Playlist file is outside the 1634 scope of this document; it is presumed to have done so. 1636 The client obtains the Playlist file from the URI. If the Playlist 1637 file so obtained is a Master Playlist, the client can select a 1638 Variant Stream to load from the Master Playlist. 1640 Clients MUST ensure that loaded Playlists comply with Section 4 and 1641 that the EXT-X-VERSION tag, if present, specifies a protocol version 1642 supported by the client; if either check fails, the client MUST NOT 1643 attempt to use the Playlist, or unintended behavior could occur. 1645 If any URI element in a Playlist contains an URI scheme that the 1646 client cannot handle, the client MUST stop playback. All clients 1647 MUST support HTTP schemes. 1649 To support forward compatibility, when parsing Playlists, Clients 1650 MUST: 1652 o ignore any unrecognized tags. 1654 o ignore any Attribute/value pair with an unrecognized 1655 AttributeName. 1657 o ignore any tag containing an attribute/value pair of type 1658 enumerated-string whose AttributeName is recognized but whose 1659 AttributeValue is not recognized, unless the definition of the 1660 attribute says otherwise. 1662 Algorithms used by the client to switch between Variant Streams are 1663 beyond the scope of this document. 1665 6.3.2. Loading the Media Playlist file 1667 Every time a Media Playlist is loaded or reloaded from a Playlist 1668 URI, the client MUST determine the next Media Segment to load, as 1669 described in Section 6.3.5, if it intends to play the presentation 1670 normally (i.e., in playlist order at the nominal playback rate). 1672 If the Media Playlist contains the EXT-X-MEDIA-SEQUENCE tag, the 1673 client SHOULD assume that each Media Segment in it will become 1674 unavailable at the time that the Playlist file was loaded plus the 1675 duration of the Playlist file. 1677 A client MAY use the segment Media Sequence Number to track the 1678 location of a Media Segment within a Playlist when the Playlist is 1679 reloaded. 1681 A client MUST NOT assume that segments with the same Media Sequence 1682 Number in different Variant Streams or Renditions have the same 1683 position in the presentation; Playlists MAY have independent Media 1684 Sequence Numbers. Instead, a client MUST use the relative position 1685 of each segment on the Playlist timeline and its Discontinuity 1686 Sequence Number to locate corresponding segments. 1688 A client MUST load the Media Playlist file of every Rendition 1689 selected for playback in order to locate the media specific to that 1690 Rendition. But, to prevent unnecessary load on the server, it SHOULD 1691 NOT load the Playlist file of any other Rendition. 1693 For some Variant Streams, it is possible to select Renditions that do 1694 not include the Rendition specified by the EXT-X-STREAM-INF tag. As 1695 noted above, the client SHOULD NOT load that Rendition in those 1696 cases. 1698 6.3.3. Playing the Media Playlist file 1700 The client SHALL choose which Media Segment to play first from the 1701 Media Playlist when playback starts. If the EXT-X-ENDLIST tag is not 1702 present and the client intends to play the media normally, the client 1703 SHOULD NOT choose a segment which starts less than three target 1704 durations from the end of the Playlist file. Doing so can trigger 1705 playback stalls. 1707 Normal playback can be achieved by playing the Media Segments in the 1708 order that they appear in the Playlist. The client MAY present the 1709 available media in any way it wishes, including normal playback, 1710 random access, and trick modes. 1712 The encoding parameters for samples in a Media Segment and across 1713 multiple Media Segments in a Media Playlist SHOULD remain consistent. 1714 However, clients SHOULD deal with encoding changes as they are 1715 encountered, for example by scaling video content to accommodate a 1716 resolution change. If the Variant Stream includes a RESOLUTION 1717 attribute, clients SHOULD display all video within a rectangle with 1718 the same proportions as that resolution. 1720 Clients SHOULD be prepared to handle multiple tracks of a particular 1721 type (e.g. audio or video). A client with no other preference SHOULD 1722 choose the track with the lowest numerical track identifier that it 1723 can play. 1725 Clients SHOULD ignore private streams inside Transport Streams that 1726 they do not recognize. Private streams can be used to support 1727 different devices with the same stream, although stream authors 1728 SHOULD be sensitive to the additional network load that this imposes. 1730 The client MUST be prepared to reset its parser(s) and decoder(s) 1731 before playing a Media Segment that has an EXT-X-DISCONTINUITY tag 1732 applied to it, otherwise playback errors can occur. 1734 The client SHOULD attempt to load Media Segments in advance of when 1735 they will be required for uninterrupted playback to compensate for 1736 temporary variations in latency and throughput. 1738 The client MAY use the value of the EXT-X-PROGRAM-DATE-TIME tag to 1739 display the program origination time to the user. If the value 1740 includes time zone information, the client SHALL take it into 1741 account; if it does not the client MAY assume the time to be local. 1743 The client MUST NOT depend upon the correctness or the consistency of 1744 the value of the EXT-X-PROGRAM-DATE-TIME tag; its value is 1745 informative. 1747 6.3.4. Reloading the Media Playlist file 1749 The client MUST periodically reload a Media Playlist file to learn 1750 what media is currently available, unless it contains an EXT-X 1751 -PLAYLIST-TYPE tag with a value of VOD, or a value of EVENT and the 1752 EXT-X-ENDLIST tag is also present. 1754 However the client MUST NOT attempt to reload the Playlist file more 1755 frequently than specified by this section, in order to limit the 1756 collective load on the server. 1758 When a client loads a Playlist file for the first time or reloads a 1759 Playlist file and finds that it has changed since the last time it 1760 was loaded, the client MUST wait for at least the target duration 1761 before attempting to reload the Playlist file again, measured from 1762 the last time the client began loading the Playlist file. 1764 If the client reloads a Playlist file and finds that it has not 1765 changed then it MUST wait for a period of one-half the target 1766 duration before retrying. 1768 After reloading a Media Playlist, the client SHOULD verify that each 1769 Media Segment in it has the same URI (and byte range, if specified) 1770 as the Media Segment with the same Media Sequence Number in the 1771 previous Media Playlist. It SHOULD halt playback if it does not, as 1772 this normally indicates a server error. 1774 In order to reduce server load, the client SHOULD NOT reload the 1775 Playlist files of Variant Streams or alternate Renditions that are 1776 not currently being played. If it decides to switch playback to a 1777 different Variant Stream, it SHOULD stop reloading the Playlist of 1778 the old Variant Stream and begin loading the Playlist of the new 1779 Variant Stream. It can use the EXTINF durations and the constraints 1780 in Section 6.2.4 to determine the approximate location of 1781 corresponding media. Once media from the new Variant Stream has been 1782 loaded, the timestamps in the Media Segments can be used to 1783 synchronize the old and new timelines precisely. 1785 A client MUST NOT attempt to use the Media Sequence Number to 1786 synchronize between streams - see Section 6.3.2. 1788 6.3.5. Determining the next segment to load 1790 The client MUST examine the Media Playlist file every time it is 1791 loaded or reloaded to determine the next Media Segment to load, as 1792 the set of available media MAY have changed. 1794 The first segment to load is generally the segment that the client 1795 has chosen to play first - see Section 6.3.3. 1797 In order to play the presentation normally, the next Media Segment to 1798 load is the one with the lowest Media Sequence Number that is greater 1799 than the Media Sequence Number of the last Media Segment loaded. 1801 6.3.6. Decrypting encrypted Media Segments 1803 If a Media Playlist file contains an EXT-X-KEY tag that specifies a 1804 Key file URI, the client can obtain that Key file and use the key 1805 inside it to decrypt all Media Segments to which that EXT-X-KEY tag 1806 applies. 1808 A client MUST ignore any EXT-X-KEY tag with an unsupported or 1809 unrecognized KEYFORMAT attribute, to allow for cross-device 1810 addressibility. If the Playlist contains a Media Segment to which 1811 only EXT-X-KEY tags with unrecognized or unsupported KEYFORMAT 1812 attributes are applied, playback SHOULD fail. 1814 A client MUST NOT attempt to decrypt any segments whose EXT-X-KEY tag 1815 has a METHOD attribute that it does not recognize. 1817 If the encryption METHOD is AES-128, AES-128 CBC decryption SHALL be 1818 applied to individual Media Segments, whose encryption format is 1819 described in Section 4.3.2.4. 1821 If the encryption METHOD is AES-128 and the Media Segment is part of 1822 an I-frame playlist (Section 4.3.3.6) and it has an EXT-X-BYTERANGE 1823 tag applied to it, special care needs to be taken in loading and 1824 decrypting the segment, because the resource identified by the URI is 1825 encrypted in 16-byte blocks from the start of the resource. 1827 The decrypted I-frame can be recovered by first widening its byte 1828 range, as specified by the EXT-X-BYTERANGE tag, so that it starts and 1829 ends on 16-byte boundaries from the start of the resource. 1831 Next, the byte range is widened further to include a 16-byte block at 1832 the beginning of the range. This 16-byte block allows the correct IV 1833 for the following block to be calculated. 1835 The widened byte range can then be loaded and decrypted with AES-128 1836 CBC using an arbitrary IV. The number of bytes added to the 1837 beginning and the end of the original byte range are discarded from 1838 the decrypted bytes; what remains is the decrypted I-frame. 1840 If the encryption METHOD is SAMPLE-AES, AES-128 decryption SHALL be 1841 applied to encrypted media samples within the Media Segment. The 1842 format for encrypted H.264, AAC, AC-3 and Enhanced AC-3 media streams 1843 is described by the HLS Sample Encryption specification [SampleEnc]. 1845 An EXT-X-KEY tag with a METHOD of NONE indicates that the Media 1846 Segments it applies to are not encrypted. 1848 7. Protocol version compatibility 1850 Protocol compatibility is specified by the EXT-X-VERSION tag. A 1851 Playlist that contains tags or attributes that are not compatible 1852 with protocol version 1 MUST include an EXT-X-VERSION tag. 1854 A client MUST NOT attempt playback if it does not support the 1855 protocol version specified by the EXT-X-VERSION tag, or unintended 1856 behavior could occur. 1858 A Media Playlist MUST indicate a EXT-X-VERSION of 2 or higher if it 1859 contains: 1861 o The IV attribute of the EXT-X-KEY tag. 1863 A Media Playlist MUST indicate a EXT-X-VERSION of 3 or higher if it 1864 contains: 1866 o Floating-point EXTINF duration values. 1868 A Media Playlist MUST indicate a EXT-X-VERSION of 4 or higher if it 1869 contains: 1871 o The EXT-X-BYTERANGE tag. 1873 o The EXT-X-I-FRAMES-ONLY tag. 1875 A Media Playlist MUST indicate a EXT-X-VERSION of 5 or higher if it 1876 contains: 1878 o The KEYFORMAT and KEYFORMATVERSIONS attributes of the EXT-X-KEY 1879 tag. 1881 o The EXT-X-MAP tag. 1883 A Media Playlist MUST indicate a EXT-X-VERSION of 6 or higher if it 1884 contains: 1886 o The EXT-X-MAP tag in a Media Playlist that does not contain 1887 EXT-X-I-FRAMES-ONLY. 1889 A Master Playlist MUST indicate a EXT-X-VERSION of 7 or higher if it 1890 contains: 1892 o "SERVICE" values for the INSTREAM-ID attribute of the EXT-X-MEDIA 1893 tag. 1895 The EXT-X-MEDIA tag and the AUDIO, VIDEO and SUBTITLES attributes of 1896 the EXT-X-STREAM-INF tag are backward compatible to protocol version 1897 1, but playback on older clients may not be desirable. A server MAY 1898 consider indicating a EXT-X-VERSION of 4 or higher in the Master 1899 Playlist but is not required to do so. 1901 The PROGRAM-ID attribute of the EXT-X-STREAM-INF and the EXT-X-I 1902 -FRAME-STREAM-INF tags was removed in protocol version 6. 1904 The EXT-X-ALLOW-CACHE tag was removed in protocol version 7. 1906 8. Playlist Examples 1908 8.1. Simple Media Playlist 1910 #EXTM3U 1911 #EXT-X-TARGETDURATION:10 1912 #EXTINF:9.009, 1913 http://media.example.com/first.ts 1914 #EXTINF:9.009, 1915 http://media.example.com/second.ts 1916 #EXTINF:3.003, 1917 http://media.example.com/third.ts 1918 #EXT-X-ENDLIST 1920 8.2. Live Media Playlist, using HTTPS 1922 #EXTM3U 1923 #EXT-X-VERSION:3 1924 #EXT-X-TARGETDURATION:8 1925 #EXT-X-MEDIA-SEQUENCE:2680 1927 #EXTINF:7.975, 1928 https://priv.example.com/fileSequence2680.ts 1929 #EXTINF:7.941, 1930 https://priv.example.com/fileSequence2681.ts 1931 #EXTINF:7.975, 1932 https://priv.example.com/fileSequence2682.ts 1934 8.3. Playlist with encrypted Media Segments 1935 #EXTM3U 1936 #EXT-X-VERSION:3 1937 #EXT-X-MEDIA-SEQUENCE:7794 1938 #EXT-X-TARGETDURATION:15 1940 #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52" 1942 #EXTINF:2.833, 1943 http://media.example.com/fileSequence52-A.ts 1944 #EXTINF:15.0, 1945 http://media.example.com/fileSequence52-B.ts 1946 #EXTINF:13.333, 1947 http://media.example.com/fileSequence52-C.ts 1949 #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53" 1951 #EXTINF:15.0, 1952 http://media.example.com/fileSequence53-A.ts 1954 8.4. Master Playlist 1956 #EXTM3U 1957 #EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000 1958 http://example.com/low.m3u8 1959 #EXT-X-STREAM-INF:BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000 1960 http://example.com/mid.m3u8 1961 #EXT-X-STREAM-INF:BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000 1962 http://example.com/hi.m3u8 1963 #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5" 1964 http://example.com/audio-only.m3u8 1966 8.5. Master Playlist with I-Frames 1968 #EXTM3U 1969 #EXT-X-STREAM-INF:BANDWIDTH=1280000 1970 low/audio-video.m3u8 1971 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="low/iframe.m3u8" 1972 #EXT-X-STREAM-INF:BANDWIDTH=2560000 1973 mid/audio-video.m3u8 1974 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=150000,URI="mid/iframe.m3u8" 1975 #EXT-X-STREAM-INF:BANDWIDTH=7680000 1976 hi/audio-video.m3u8 1977 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=550000,URI="hi/iframe.m3u8" 1978 #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5" 1979 audio-only.m3u8 1981 8.6. Master Playlist with Alternative audio 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: 1987 #EXTM3U 1988 #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="English", \ 1989 DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en", \ 1990 URI="main/english-audio.m3u8" 1991 #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Deutsch", \ 1992 DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="de", \ 1993 URI="main/german-audio.m3u8" 1994 #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Commentary", \ 1995 DEFAULT=NO,AUTOSELECT=NO,LANGUAGE="en", \ 1996 URI="commentary/audio-only.m3u8" 1997 #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",AUDIO="aac" 1998 low/video-only.m3u8 1999 #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",AUDIO="aac" 2000 mid/video-only.m3u8 2001 #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",AUDIO="aac" 2002 hi/video-only.m3u8 2003 #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5",AUDIO="aac" 2004 main/english-audio.m3u8 2006 8.7. Master Playlist with Alternative video 2008 This example shows 3 different video Renditions (Main, Centerfield 2009 and Dugout), and 3 different Variant Streams (low, mid and high). In 2010 this example, clients that did not support the EXT-X-MEDIA tag and 2011 the VIDEO attribute of the EXT-X-STREAM-INF tag would only be able to 2012 play the video Rendition "Main". 2014 Since the EXT-X-STREAM-INF tag has no AUDIO attribute, all video 2015 Renditions would be required to contain the audio. 2017 In this example, the CODECS attributes have been condensed for space. 2018 A '\' is used to indicate that the tag continues on the following 2019 line with whitespace removed: 2021 #EXTM3U 2022 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Main", \ 2023 DEFAULT=YES,URI="low/main/audio-video.m3u8" 2024 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Centerfield", \ 2025 DEFAULT=NO,URI="low/centerfield/audio-video.m3u8" 2026 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Dugout", \ 2027 DEFAULT=NO,URI="low/dugout/audio-video.m3u8" 2029 #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",VIDEO="low" 2030 low/main/audio-video.m3u8 2032 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Main", \ 2033 DEFAULT=YES,URI="mid/main/audio-video.m3u8" 2034 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Centerfield", \ 2035 DEFAULT=NO,URI="mid/centerfield/audio-video.m3u8" 2036 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Dugout", \ 2037 DEFAULT=NO,URI="mid/dugout/audio-video.m3u8" 2039 #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",VIDEO="mid" 2040 mid/main/audio-video.m3u8 2042 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Main", \ 2043 DEFAULT=YES,URI="hi/main/audio-video.m3u8" 2044 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Centerfield", \ 2045 DEFAULT=NO,URI="hi/centerfield/audio-video.m3u8" 2046 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Dugout", \ 2047 DEFAULT=NO,URI="hi/dugout/audio-video.m3u8" 2049 #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",VIDEO="hi" 2050 hi/main/audio-video.m3u8 2052 8.8. Session Data in a Master Playlist 2054 In this example, only the EXT-X-SESSION-DATA is shown: 2056 #EXT-X-SESSION-DATA:DATA-ID="com.example.lyrics",URI="lyrics.json" 2058 #EXT-X-SESSION-DATA:DATA-ID="com.example.title",LANGUAGE="en", \ 2059 VALUE="This is an example" 2060 #EXT-X-SESSION-DATA:DATA-ID="com.example.title",LANGUAGE="sp", \ 2061 VALUE="Este es un ejemplo" 2063 8.9. CHARACTERISTICS attribute containing multiple characteristics 2065 Certain characteristics are valid in combination, as in: 2067 <CODE BEGINS> 2068 CHARACTERISTICS= 2069 "public.accessibility.transcribes-spoken-dialog,public.easy-to-read" 2070 <CODE ENDS> 2072 9. Contributors 2074 Significant contributions to the design of this protocol were made by 2075 Jim Batson, David Biderman, Bill May, Roger Pantos, Alan Tseng, and 2076 Eryk Vershen. Stuart Cheshire helped edit the specification. 2078 10. IANA Considerations 2080 This memo requests that the following MIME type [RFC2046] be 2081 registered with the IANA: 2083 Type name: "application" 2085 Subtype name: "vnd.apple.mpegurl" 2087 Required parameters: (none) 2089 Optional parameters: (none) 2091 Encoding considerations: encoded as UTF-8 text. See Section 4 for 2092 more information. 2094 Security considerations: See Section 11. 2096 Compression: this media type does not employ compression. 2098 Interoperability considerations: There are no byte-ordering issues, 2099 since files are 7- or 8-bit text. Applications could encounter 2100 unrecognized tags, which SHOULD be ignored. 2102 Published specification: see Section 4. 2104 Applications that use this media type: Multimedia applications such 2105 as the iPhone media player in iOS 3.0 and later and QuickTime Player 2106 in Mac OS X version 10.6 and later. 2108 Additional information: files begin with the magic number #EXTM3U. 2109 Filenames normally end with .m3u8 or .m3u (see Section 4). No 2110 Macintosh file type codes have been registered. 2112 Person & email address to contact for further information: David 2113 Singer, singer AT apple.com. 2115 Intended usage: LIMITED USE 2117 Restrictions on usage: (none) 2119 Author: Roger Pantos 2121 Change Controller: David Singer 2123 11. Security Considerations 2125 Since the protocol generally uses HTTP to transfer data, most of the 2126 same security considerations apply. See section 15 of HTTP 2127 [RFC7230]. 2129 Media file parsers are typically subject to "fuzzing" attacks. 2130 Implementors SHOULD pay particular attention to code that will parse 2131 data received from a server and ensure that all possible inputs are 2132 handled correctly. 2134 Playlist files contain URIs, which clients will use to make network 2135 requests of arbitrary entities. Clients SHOULD range-check responses 2136 to prevent buffer overflows. See also the Security Considerations 2137 section of Uniform Resource Identifier (URI): Generic Syntax 2138 [RFC3986]. 2140 Clients SHOULD limit each playback session to a reasonable number of 2141 concurrent downloads (e.g. 4) to avoid contributing to denial-of- 2142 service attacks. 2144 HTTP requests often include session state ("cookies"), which may 2145 contain private user data. Implementations MUST follow cookie 2146 restriction and expiry rules specified by HTTP State Management 2147 Mechanism [RFC6265] to protect themselves from attack. See also the 2148 Security Considerations section of that document, and Use of HTTP 2149 State Management [RFC2964]. 2151 Encryption keys are specified by URI. The delivery of these keys 2152 SHOULD be secured by a mechanism such as HTTP Over TLS [RFC2818] 2153 (formerly SSL) in conjunction with a secure realm or a session token. 2155 12. References 2157 12.1. Normative References 2159 [AC_3] Advanced Television Systems Committee, "ATSC Standard: 2160 A/52:2010: Digital Audio Compression (AC-3) (E-AC-3) 2161 Standard", November 2010, <http://atsc.org/wp-content/ 2162 uploads/2015/03/A52-201212-17.pdf>. 2164 [AES_128] U.S. Department of Commerce/National Institute of 2165 Standards and Technology, "Advanced Encryption Standard 2166 (AES), FIPS PUB 197", November 2001, <http://csrc.nist 2167 .gov/publications/fips/fips197/fips-197.pdf>. 2169 [CEA608] Consumer Electronics Association, "CEA-608-E: Line 21 Data 2170 Services", April 2008, <http://www.ce.org/Standards/ 2171 Standard-Listings/R4-3-Television-Data-Systems 2172 -Subcommittee/Line-21-Data-Service.aspx>. 2174 [CEA708] Consumer Electronics Association, "CEA-708-E (ANSI): 2175 Digital Television (DTV) Closed Captioning", August 2013, 2176 <http://www.ce.org/Standards/Standard-Listings/ 2177 R4-3-Television-Data-Systems-Subcommittee/CEA-708-D.aspx>. 2179 [H_264] International Telecommunications Union, "Advanced video 2180 coding for generic audiovisual services", January 2012, 2181 <http://www.itu.int/rec/T-REC-H.264>. 2183 [ISO_13818] 2184 International Organization for Standardization, "ISO/IEC 2185 International Standard 13818; Generic coding of moving 2186 pictures and associated audio information", October 2007, 2187 <http://www.iso.org/iso/catalogue_detail?csnumber=44169>. 2189 [ISO_13818_3] 2190 International Organization for Standardization, "ISO/IEC 2191 International Standard 13818-3:1998; Generic coding of 2192 moving pictures and associated audio information - Part 3: 2193 Audio", April 1998, <http://www.iso.org/iso/home/store/ 2194 catalogue_tc/catalogue_detail.htm?csnumber=26797>. 2196 [ISO_13818_7] 2197 International Organization for Standardization, "ISO/IEC 2198 International Standard 13818-3:2006; Generic coding of 2199 moving pictures and associated audio information - Part 7: 2200 Advanced Audio Coding (AAC)", January 2006, 2201 <http://www.iso.org/iso/home/store/catalogue_tc/ 2202 catalogue_detail.htm?csnumber=43345>. 2204 [ISO_14496] 2205 International Organization for Standardization, "ISO/IEC 2206 14496-3:2009 Information technology -- Coding of audio- 2207 visual objects -- Part 3: Audio", 2009, 2208 <http://www.iso.org/iso/catalogue_detail?csnumber=53943>. 2210 [ISO_8601] 2211 International Organization for Standardization, "ISO/IEC 2212 International Standard 8601:2004; Data elements and 2213 interchange formats -- Information interchange -- 2214 Representation of dates and times", December 2004, 2215 <http://www.iso.org/iso/catalogue_detail?csnumber=40874>. 2217 [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail 2218 Extensions (MIME) Part Two: Media Types", RFC 2046, 2219 November 1996. 2221 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2222 Requirement Levels", BCP 14, RFC 2119, March 1997. 2224 [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. 2226 [RFC2964] Moore, K. and N. Freed, "Use of HTTP State Management", 2227 BCP 44, RFC 2964, October 2000. 2229 [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO 2230 10646", STD 63, RFC 3629, November 2003. 2232 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 2233 Resource Identifier (URI): Generic Syntax", STD 66, RFC 2234 3986, January 2005. 2236 [RFC5646] Phillips, A. and M. Davis, "Tags for Identifying 2237 Languages", BCP 47, RFC 5646, September 2009. 2239 [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, 2240 RFC 5652, September 2009. 2242 [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, 2243 April 2011. 2245 [RFC6381] Gellens, R., Singer, D., and P. Frojdh, "The 'Codecs' and 2246 'Profiles' Parameters for "Bucket" Media Types", RFC 6381, 2247 August 2011. 2249 [RFC7159] Bray, T., "The JavaScript Object Notation (JSON) Data 2250 Interchange Format", RFC 7159, March 2014. 2252 [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer 2253 Protocol (HTTP/1.1): Message Syntax and Routing", RFC 2254 7230, DOI 10.17487/RFC7230, June 2014, 2255 <http://www.rfc-editor.org/info/rfc7230>. 2257 [US_ASCII] 2258 American National Standards Institute, "ANSI X3.4-1986, 2259 Information Systems -- Coded Character Sets 7-Bit American 2260 National Standard Code for Information Interchange (7-Bit 2261 ASCII)", December 1986. 2263 [WebVTT] World Wide Web Consortium (W3C), "WebVTT: The Web Video 2264 Text Tracks Format", July 2013, 2265 <http://dev.w3.org/html5/webvtt/>. 2267 12.2. Informative References 2269 [ID3] ID3.org, "The ID3 audio file data tagging format", 2270 <http://www.id3.org/Developer_Information>. 2272 [M3U] Nullsoft, Inc., "The M3U Playlist format, originally 2273 invented for the Winamp media player", 2274 <http://wikipedia.org/wiki/M3U>. 2276 [SampleEnc] 2277 Apple Inc., "MPEG-2 Stream Encryption Format for HTTP Live 2278 Streaming", <https://developer.apple.com/library/ios/ 2279 documentation/AudioVideo/Conceptual/ 2280 HLS_Sample_Encryption/>. 2282 [UTI] Apple Inc., "Uniform Type Identifier", 2283 <http://developer.apple.com/library/ios/#documentation/ 2284 general/conceptual/DevPedia-CocoaCore/ 2285 UniformTypeIdentifier.html>. 2287 Authors' Addresses 2289 Roger Pantos (editor) 2290 Apple Inc. 2291 Cupertino, California 2292 United States 2294 Email: http-live-streaming-review@group.apple.com 2296 William May, Jr. 2297 Apple Inc. 2298 Cupertino, California 2299 United States 2301 Email: http-live-streaming-review@group.apple.com