draft-pantos-http-live-streaming-09
Informational R. Pantos, Ed.
Internet-Draft W. May
Intended status: Informational Apple Inc.
Expires: March 26, 2013 September 22, 2012
HTTP Live Streaming
draft-pantos-http-live-streaming-09
Abstract

This document describes a protocol for transferring unbounded streams
of multimedia data. It specifies the data format of the files and
the actions to be taken by the server (sender) and the clients
(receivers) of the streams. It describes version 5 of this protocol.

Status of this Memo

This Internet-Draft is submitted in full conformance with the
provisions of
BCP 78
and
BCP 79
. This document may not be modified,
and derivative works of it may not be created, and it may not be
published except as an Internet-Draft.

Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at

Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."

This Internet-Draft will expire on March 26, 2013.

Copyright Notice

Copyright (c) 2012 IETF Trust and the persons identified as the
document authors. All rights reserved.

This document is subject to
BCP 78
and the IETF Trust's Legal
Provisions Relating to IETF Documents
) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document.

This Informational Internet Draft is submitted as an RFC Editor
Pantos & May Expires March 26, 2013 [Page 1]
Internet-Draft HTTP Live Streaming September 2012
Contribution and/or non-IETF Document (not as a Contribution, IETF
Contribution, nor IETF Document) in accordance with
BCP 78
and
BCP
79

Table of Contents
. Introduction . . . . . . . . . . . . . . . . . . . . . . . . .
. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . .
. The Playlist file . . . . . . . . . . . . . . . . . . . . . .
3.1
. Introduction . . . . . . . . . . . . . . . . . . . . . . .
3.2
. Attribute Lists . . . . . . . . . . . . . . . . . . . . .
3.3
. Standard Tags . . . . . . . . . . . . . . . . . . . . . .
3.3.1
. EXTM3U . . . . . . . . . . . . . . . . . . . . . . . .
3.3.2
. EXTINF . . . . . . . . . . . . . . . . . . . . . . . .
3.4
. New Tags . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.1
. EXT-X-BYTERANGE . . . . . . . . . . . . . . . . . . .
3.4.2
. EXT-X-TARGETDURATION . . . . . . . . . . . . . . . . .
3.4.3
. EXT-X-MEDIA-SEQUENCE . . . . . . . . . . . . . . . . .
3.4.4
. EXT-X-KEY . . . . . . . . . . . . . . . . . . . . . .
3.4.5
. EXT-X-PROGRAM-DATE-TIME . . . . . . . . . . . . . . .
10
3.4.6
. EXT-X-ALLOW-CACHE . . . . . . . . . . . . . . . . . .
10
3.4.7
. EXT-X-PLAYLIST-TYPE . . . . . . . . . . . . . . . . .
10
3.4.8
. EXT-X-ENDLIST . . . . . . . . . . . . . . . . . . . .
11
3.4.9
. EXT-X-MEDIA . . . . . . . . . . . . . . . . . . . . .
11
3.4.9.1
. Rendition Groups . . . . . . . . . . . . . . . . .
13
3.4.10
. EXT-X-STREAM-INF . . . . . . . . . . . . . . . . . . .
14
3.4.10.1
. Alternative Renditions . . . . . . . . . . . . . .
15
3.4.11
. EXT-X-DISCONTINUITY . . . . . . . . . . . . . . . . .
16
3.4.12
. EXT-X-I-FRAMES-ONLY . . . . . . . . . . . . . . . . .
16
3.4.13
. EXT-X-MAP . . . . . . . . . . . . . . . . . . . . . .
17
3.4.14
. EXT-X-I-FRAME-STREAM-INF . . . . . . . . . . . . . . .
17
3.4.15
. EXT-X-VERSION . . . . . . . . . . . . . . . . . . . .
18
. Media segments . . . . . . . . . . . . . . . . . . . . . . . .
19
. Key files . . . . . . . . . . . . . . . . . . . . . . . . . .
20
5.1
. Introduction . . . . . . . . . . . . . . . . . . . . . . .
20
5.2
. IV for [
AES_128
] . . . . . . . . . . . . . . . . . . . . .
20
. Client/Server Actions . . . . . . . . . . . . . . . . . . . .
20
6.1
. Introduction . . . . . . . . . . . . . . . . . . . . . . .
20
6.2
. Server Process . . . . . . . . . . . . . . . . . . . . . .
21
6.2.1
. Introduction . . . . . . . . . . . . . . . . . . . . .
21
6.2.2
. Sliding Window Playlists . . . . . . . . . . . . . . .
23
6.2.3
. Encrypting media segments . . . . . . . . . . . . . .
23
6.2.4
. Providing variant streams . . . . . . . . . . . . . .
24
6.3
. Client Process . . . . . . . . . . . . . . . . . . . . . .
25
6.3.1
. Introduction . . . . . . . . . . . . . . . . . . . . .
25
6.3.2
. Loading the Playlist file . . . . . . . . . . . . . .
25
Pantos & May Expires March 26, 2013 [Page 2]
Internet-Draft HTTP Live Streaming September 2012
6.3.3
. Playing the Playlist file . . . . . . . . . . . . . .
26
6.3.4
. Reloading the Playlist file . . . . . . . . . . . . .
26
6.3.5
. Determining the next segment to load . . . . . . . . .
27
6.3.6
. Decrypting encrypted media segments . . . . . . . . .
28
. Protocol version compatibility . . . . . . . . . . . . . . . .
28
. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
8.1
. Introduction . . . . . . . . . . . . . . . . . . . . . . .
29
8.2
. Simple Playlist file . . . . . . . . . . . . . . . . . . .
29
8.3
. Sliding Window Playlist, using HTTPS . . . . . . . . . . .
30
8.4
. Playlist file with encrypted media segments . . . . . . .
30
8.5
. Variant Playlist file . . . . . . . . . . . . . . . . . .
30
8.6
. Variant Playlist with I-Frames . . . . . . . . . . . . . .
31
8.7
. Variant Playlist with Alternative audio . . . . . . . . .
31
8.8
. Variant Playlist with Alternative video . . . . . . . . .
31
. Contributors . . . . . . . . . . . . . . . . . . . . . . . . .
32
10
. IANA Considerations . . . . . . . . . . . . . . . . . . . . .
32
11
. Security Considerations . . . . . . . . . . . . . . . . . . .
33
12
. References . . . . . . . . . . . . . . . . . . . . . . . . . .
34
12.1
. Normative References . . . . . . . . . . . . . . . . . . .
34
12.2
. Informative References . . . . . . . . . . . . . . . . . .
36
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . .
36
Pantos & May Expires March 26, 2013 [Page 3]
Internet-Draft HTTP Live Streaming September 2012
. Introduction
This document describes a protocol for transferring unbounded streams
of multimedia data. The protocol supports the encryption of media
data and the provision of alternate versions (e.g. bitrates) of a
stream. Media data can be transferred soon after it is created,
allowing it to be played in near real-time. Data is usually carried
over HTTP [
RFC2616
].

External references that describe related standards such as HTTP are
listed in
Section 11
. Summary
A multimedia presentation is specified by a URI [
RFC3986
] to a
Playlist file, which is an ordered list of media URIs and
informational tags. The URIs and their associated tags specify a
series of media segments.

To play the stream, the client first obtains the Playlist file and
then obtains and plays each media segment in the Playlist. It
reloads the Playlist file as described in this document to discover
additional segments.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in
RFC 2119
RFC2119
].
. The Playlist file
3.1
. Introduction
Playlists MUST be Extended M3U Playlist files [
M3U
]. This document
extends the M3U file format further by defining additional tags.

An M3U Playlist is a text file that consists of individual lines.
Lines are terminated by either a single LF character or a CR
character followed by an LF character. Each line is a URI, blank, or
starts with the character '#'. Blank lines are ignored. White space
MUST NOT be present, except for elements in which it is explicitly
specified.

A URI line identifies a media segment or a variant Playlist file (see
Section 3.4.10
). Each media segment is specified by a media URI and
the tags that apply to it.
Pantos & May Expires March 26, 2013 [Page 4]
Internet-Draft HTTP Live Streaming September 2012
Lines that start with the character '#' are either comments or tags.

Tags begin with #EXT. All other lines that begin with '#' are
comments and SHOULD be ignored.

A URI in a Playlist, whether it is a URI line or part of a tag, MAY
be relative. Relative URIs MUST be resolved against the URI of the
Playlist file that contains it.

The duration of a Playlist file is the sum of the durations of the
media segments within it.

Playlist files whose names end in .m3u8 and/or have the HTTP Content-
Type "application/vnd.apple.mpegurl" are encoded in UTF-8 [
RFC3629
].
Files whose names end with .m3u and/or have the HTTP Content-Type
RFC2616
] "audio/mpegurl" are encoded in US-ASCII [
US_ASCII
].

Playlist files MUST have names that end in .m3u8 and/or have the
Content-Type "application/vnd.apple.mpegurl" (if transferred over
HTTP), or have names that end in .m3u and/or have the HTTP Content-
Type type "audio/mpegurl" (for compatibility).
3.2
. Attribute Lists
Certain extended M3U tags have values which are Attribute Lists. An
Attribute List is a comma-separated list of attribute/value pairs
with no whitespace.

An attribute/value pair has the following syntax:

AttributeName=AttributeValue

An AttributeName is an unquoted string containing characters from the
set [A..Z] and '-'.

An AttributeValue is one of the following:

o decimal-integer: an unquoted string of characters from the set
[0..9] expressing an integer in base-10 arithmetic.

o hexadecimal-integer: an unquoted string of characters from the set
[0..9] and [A..F] that is prefixed with 0x or 0X and which
expresses an integer in base-16 arithmetic.

o decimal-floating-point: an unquoted string of characters from the
set [0..9] and '.' which expresses a floating-point number in
decimal positional notation.
Pantos & May Expires March 26, 2013 [Page 5]
Internet-Draft HTTP Live Streaming September 2012
o quoted-string: a string of characters within a pair of double-
quotes ("), including Uniform Type Identifiers [
UTI
]. The set of
characters allowed in the string and any rules for escaping
special characters are specified by the Attribute definition, but
any double-quote (") character and any carriage-return or linefeed
will always be replaced by an escape sequence.

o enumerated-string: an unquoted character string from a set which
is explicitly defined by the Attribute. An enumerated-string will
never contain double-quotes ("), commas (,), or whitespace.

o decimal-resolution: two decimal-integers separated by the "x"
character. The first integer is a horizontal pixel dimension
(width); the second is a vertical pixel dimension (height).

The type of the AttributeValue for a given AttributeName is specified
by the Attribute definition.

A given AttributeName MUST NOT appear more than once in a given
Attribute List.

An Attribute/value pair with an unrecognized AttributeName MUST be
ignored by the client.

Any tag containing an attribute/value pair of type enumerated-string
whose AttributeName is recognized but whose AttributeValue is not
recognized MUST be ignored by the client.
3.3
. Standard Tags
3.3.1
. EXTM3U
An Extended M3U file is distinguished from a basic M3U file by its
first line, which MUST be the tag #EXTM3U.
3.3.2
. EXTINF
The EXTINF tag specifies the duration of a media segment. It applies
only to the media segment that follows it. Each media segment MUST
be preceded by an EXTINF tag. Its format is:

#EXTINF:,</p> <p>"duration" is an integer or floating-point number in decimal<br>positional notation that specifies the duration of the media segment<br>in seconds. Durations that are reported as integers SHOULD be<br>rounded to the nearest integer. Durations MUST be integers if the<br>protocol version of the Playlist file is less than 3. The remainder<br>Pantos & May Expires March 26, 2013 [Page 6]<br>Internet-Draft HTTP Live Streaming September 2012<br>of the line following the comma is an optional human-readable<br>informative title of the media segment.<br>3.4<br>. New Tags<br>This document defines the following new tags: EXT-X-BYTERANGE, EXT-X-<br>TARGETDURATION, EXT-X-MEDIA-SEQUENCE, EXT-X-KEY, EXT-X-PROGRAM-DATE-<br>TIME, EXT-X-ALLOW-CACHE, EXT-X-PLAYLIST-TYPE, EXT-X-STREAM-INF, EXT-<br>X-I-FRAME-STREAM-INF, EXT-X-I-FRAMES-ONLY, EXT-X-MEDIA, EXT-X-<br>ENDLIST, EXT-X-DISCONTINUITY, and EXT-X-VERSION.<br>3.4.1<br>. EXT-X-BYTERANGE<br>The EXT-X-BYTERANGE tag indicates that a media segment is a sub-range<br>of the resource identified by its media URI. It applies only to the<br>next media URI that follows it in the Playlist. Its format is:</p> <p>#EXT-X-BYTERANGE:<n>[@o]</p> <p>where n is a decimal-integer indicating the length of the sub-range<br>in bytes. If present, o is a decimal-integer indicating the start of<br>the sub-range, as a byte offset from the beginning of the resource.<br>If o is not present, the sub-range begins at the next byte following<br>the sub-range of the previous media segment.</p> <p>If o is not present, a previous media segment MUST appear in the<br>Playlist file and MUST be a sub-range of the same media resource.</p> <p>A media URI with no EXT-X-BYTERANGE tag applied to it specifies a<br>media segment that consists of the entire resource.</p> <p>The EXT-X-BYTERANGE tag appeared in version 4 of the protocol.<br>3.4.2<br>. EXT-X-TARGETDURATION<br>The EXT-X-TARGETDURATION tag specifies the maximum media segment<br>duration. The EXTINF duration of each media segment in the Playlist<br>file MUST be less than or equal to the target duration. This tag<br>MUST appear once in the Playlist file. It applies to the entire<br>Playlist file. Its format is:</p> <p>#EXT-X-TARGETDURATION:<s></p> <p>where s is an integer indicating the target duration in seconds.<br>Pantos & May Expires March 26, 2013 [Page 7]<br>Internet-Draft HTTP Live Streaming September 2012<br>3.4.3<br>. EXT-X-MEDIA-SEQUENCE<br>Each media segment in a Playlist has a unique integer sequence<br>number. The sequence number of a segment is equal to the sequence<br>number of the segment that preceded it plus one. The EXT-X-MEDIA-<br>SEQUENCE tag indicates the sequence number of the first segment that<br>appears in a Playlist file. Its format is:</p> <p>#EXT-X-MEDIA-SEQUENCE:<number></p> <p>A Playlist file MUST NOT contain more than one EXT-X-MEDIA-SEQUENCE<br>tag. If the Playlist file does not contain an EXT-X-MEDIA-SEQUENCE<br>tag then the sequence number of the first segment in the playlist<br>SHALL be considered to be 0. A client MUST NOT assume that segments<br>with the same sequence number in different variants or renditions<br>contain matching content.</p> <p>A media URI is not required to contain its sequence number.</p> <p>See<br>Section 6.3.2<br>and<br>Section 6.3.5<br>for information on handling the<br>EXT-X-MEDIA-SEQUENCE tag.<br>3.4.4<br>. EXT-X-KEY<br>Media segments MAY be encrypted. The EXT-X-KEY tag specifies how to<br>decrypt them. It applies to every media segment that appears between<br>it and the next EXT-X-KEY tag in the Playlist file with the same<br>KEYFORMAT attribute (or the end of the Playlist file). Two or more<br>EXT-X-KEY tags with different KEYFORMAT attributes MAY apply to the<br>same media segment, in which case they MUST resolve to the same key.<br>Its format is:</p> <p>#EXT-X-KEY:<attribute-list></p> <p>The following attributes are defined:</p> <p>METHOD</p> <p>The value is an enumerated-string that specifies the encryption<br>method. This attribute is mandatory.</p> <p>The methods defined are: NONE, AES-128, and SAMPLE-AES.</p> <p>An encryption method of NONE means that media segments are not<br>encrypted. If the encryption method is NONE, the following<br>attributes MUST NOT be present: URI; IV; KEYFORMAT;<br>KEYFORMATVERSIONS.<br>Pantos & May Expires March 26, 2013 [Page 8]<br>Internet-Draft HTTP Live Streaming September 2012<br>An encryption method of AES-128 means that media segments are<br>completely encrypted using the Advanced Encryption Standard [<br>AES_128<br>with a 128-bit key and PKCS7 padding [<br>RFC5652<br>]. If the encryption<br>method is AES-128, the URI attribute MUST be present. The IV<br>attribute MAY be present; see<br>Section 5.2</p> <p>An encryption method of SAMPLE-AES means that the media segments<br>contain elementary streams of audio, video, or other samples that are<br>encrypted using the Advanced Encryption Standard [<br>AES_128<br>]. How an<br>elementary stream is encrypted depends on the media encoding. The<br>encryption format for H.264 [<br>H_264<br>], AAC [<br>ISO_14496<br>] and AC-3 [<br>AC_3<br>elementary streams is described by [<br>SampleEnc<br>]. The IV attribute MAY<br>be present; see<br>Section 5.2</p> <p>URI</p> <p>The value is a quoted-string containing a URI [<br>RFC3986<br>] that<br>specifies how to obtain the key. This attribute is mandatory unless<br>the METHOD is NONE.</p> <p>IV</p> <p>The value is a hexadecimal-integer that specifies the Initialization<br>Vector to be used with the key. The IV attribute appeared in<br>protocol version 2.</p> <p>KEYFORMAT</p> <p>The value is a quoted-string that specifies how the key is<br>represented in the resource identified by the URI; see<br>Section 5<br>for<br>more detail. This attribute is optional; its absence indicates, an<br>implicit value of "identity". The KEYFORMAT attribute appeared in<br>protocol version 5.</p> <p>KEYFORMATVERSIONS</p> <p>The value is a quoted-string containing one or more positive integers<br>separated by the "/" character (for example, "1/3"). If more than<br>one version of a particular KEYFORMAT is defined, this attribute can<br>be used to indicate which version(s) this instance complies with.<br>This attribute is optional; if it is not present, its value is<br>considered to be "1". The KEYFORMATVERSIONS attribute appeared in<br>protocol version 5.</p> <p>If the Playlist file does not contain an EXT-X-KEY tag then media<br>segments are not encrypted.</p> <p>See<br>Section 5<br>for the format of the key file, and<br>Section 5.2<br>Pantos & May Expires March 26, 2013 [Page 9]<br>Internet-Draft HTTP Live Streaming September 2012<br>Section 6.2.3<br>and<br>Section 6.3.6<br>for additional information on media<br>segment encryption.<br>3.4.5<br>. EXT-X-PROGRAM-DATE-TIME<br>The EXT-X-PROGRAM-DATE-TIME tag associates the first sample of a<br>media segment with an absolute date and/or time. It applies only to<br>the next media segment.</p> <p>The date/time representation is ISO/IEC 8601:2004 [<br>ISO_8601<br>] and<br>SHOULD indicate a time zone:</p> <p>#EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ></p> <p>For example:</p> <p>#EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00</p> <p>See<br>Section 6.2.1<br>and<br>Section 6.3.3<br>for more information on the EXT-<br>X-PROGRAM-DATE-TIME tag.<br>3.4.6<br>. EXT-X-ALLOW-CACHE<br>The EXT-X-ALLOW-CACHE tag indicates whether the client MAY or MUST<br>NOT cache downloaded media segments for later replay. It MAY occur<br>anywhere in the Playlist file; it MUST NOT occur more than once. The<br>EXT-X-ALLOW-CACHE tag applies to all segments in the playlist. Its<br>format is:</p> <p>#EXT-X-ALLOW-CACHE:<YES|NO></p> <p>See<br>Section 6.3.3<br>for more information on the EXT-X-ALLOW-CACHE tag.<br>3.4.7<br>. EXT-X-PLAYLIST-TYPE<br>The EXT-X-PLAYLIST-TYPE tag provides mutability information about the<br>Playlist file. It applies to the entire Playlist file. It is<br>optional. Its format is:</p> <p>#EXT-X-PLAYLIST-TYPE:<EVENT|VOD><br>Section 6.2.1<br>defines the implications of the EXT-X-PLAYLIST-TYPE<br>tag.<br>Pantos & May Expires March 26, 2013 [Page 10]<br>Internet-Draft HTTP Live Streaming September 2012<br>3.4.8<br>. EXT-X-ENDLIST<br>The EXT-X-ENDLIST tag indicates that no more media segments will be<br>added to the Playlist file. It MAY occur anywhere in the Playlist<br>file; it MUST NOT occur more than once. Its format is:</p> <p>#EXT-X-ENDLIST<br>3.4.9<br>. EXT-X-MEDIA<br>The EXT-X-MEDIA tag is used to relate Playlists that contain<br>alternative renditions of the same content. For example, three EXT-<br>X-MEDIA tags can be used to identify audio-only Playlists that<br>contain English, French and Spanish renditions of the same<br>presentation. Or two EXT-X-MEDIA tags can be used to identify video-<br>only Playlists that show two different camera angles.</p> <p>The EXT-X-MEDIA tag stands alone, in that it does not apply to a<br>particular URI in the Playlist. Its format is:</p> <p>#EXT-X-MEDIA:<attribute-list></p> <p>The following attributes are defined:</p> <p>URI</p> <p>The value is a quoted-string containing a URI that identifies the<br>Playlist file. This attribute is optional; see<br>Section 3.4.10.1</p> <p>TYPE</p> <p>The value is enumerated-string; valid strings are AUDIO, VIDEO and<br>SUBTITLES. If the value is AUDIO, the Playlist described by the tag<br>MUST contain audio media. If the value is VIDEO, the Playlist MUST<br>contain video media. If the value is SUBTITLES, the Playlist MUST<br>contain subtitle media.</p> <p>GROUP-ID</p> <p>The value is a quoted-string identifying a mutually-exclusive group<br>of renditions. The presence of this attribute signals membership in<br>the group. See<br>Section 3.4.9.1</p> <p>LANGUAGE</p> <p>The value is a quoted-string containing an<br>RFC 5646<br>RFC5646<br>language tag that identifies the primary language used in the<br>rendition. This attribute is optional.<br>Pantos & May Expires March 26, 2013 [Page 11]<br>Internet-Draft HTTP Live Streaming September 2012<br>NAME</p> <p>The value is a quoted-string containing a human-readable description<br>of the rendition. If the LANGUAGE attribute is present then this<br>description SHOULD be in that language.</p> <p>DEFAULT</p> <p>The value is an enumerated-string; valid strings are YES and NO. If<br>the value is YES, then the client SHOULD play this rendition of the<br>content in the absence of information from the user indicating a<br>different choice. This attribute is optional. Its absence indicates<br>an implicit value of NO.</p> <p>AUTOSELECT</p> <p>The value is an enumerated-string; valid strings are YES and NO.<br>This attribute is optional. Its absence indicates an implicit value<br>of NO. If the value is YES, then the client MAY choose to play this<br>rendition in the absence of explicit user preference because it<br>matches the current playback environment, such as chosen system<br>language.</p> <p>FORCED</p> <p>The value is an enumerated-string; valid strings are YES and NO.<br>This attribute is optional. Its absence indicates an implicit value<br>of NO. The FORCED attribute MUST NOT be present unless the TYPE is<br>SUBTITLES.</p> <p>A value of YES indicates that the rendition contains content which is<br>considered essential to play. When selecting a FORCED rendition, a<br>client should choose the one that best matches the current playback<br>environment (e.g. language).</p> <p>A value of NO indicates that the rendition contains content which is<br>intended to be played in response to explicit user request.</p> <p>CHARACTERISTICS</p> <p>The value is a quoted-string containing one or more Uniform Type<br>Identifiers [<br>UTI<br>] separated by comma (,) characters. This attribute<br>is optional. Each UTI indicates an individual characteristic of the<br>rendition.</p> <p>A SUBTITLES rendition MAY include the following characteristics:<br>"public.accessibility.transcribes-spoken-dialog";<br>"public.accessibility.describes-music-and-sound"; "public.easy-to-<br>Pantos & May Expires March 26, 2013 [Page 12]<br>Internet-Draft HTTP Live Streaming September 2012<br>read" (which indicates that the subtitles have been edited for ease<br>of reading).</p> <p>An AUDIO rendition MAY include the following characteristics:<br>"public.accessibility.describes-video".</p> <p>The CHARACTERISTICS attribute MAY include private UTIs.</p> <p>The EXT-X-MEDIA tag appeared in version 4 of the protocol.<br>3.4.9.1<br>. Rendition Groups<br>A set of EXT-X-MEDIA tags with the same GROUP-ID value forms a group<br>of renditions. Each member of the group MUST represent an<br>alternative rendition of the same content.</p> <p>All EXT-X-MEDIA tags in a Playlist MUST meet the following<br>constraints:</p> <p>o All EXT-X-MEDIA tags in the same group MUST have the same TYPE<br>attribute.</p> <p>o All EXT-X-MEDIA tags in the same group MUST have different NAME<br>attributes.</p> <p>o A group MUST NOT have more than one member with a DEFAULT<br>attribute of YES.</p> <p>o All members of a group whose AUTOSELECT attribute has a value of<br>YES MUST have LANGUAGE [<br>RFC5646<br>] attributes with unique values.</p> <p>o All members of a group with TYPE=AUDIO MUST use the same audio<br>sample format.</p> <p>o All members of a group with TYPE=VIDEO MUST use the same video<br>sample format.</p> <p>A Playlist MAY contain multiple groups of the same TYPE in order to<br>provide multiple encodings of each rendition. If it does so, each<br>group of the same TYPE SHOULD contain corresponding members with the<br>same NAME attribute, LANGUAGE attribute, and rendition.<br>Pantos & May Expires March 26, 2013 [Page 13]<br>Internet-Draft HTTP Live Streaming September 2012<br>3.4.10<br>. EXT-X-STREAM-INF<br>The EXT-X-STREAM-INF tag identifies a media URI as a Playlist file<br>containing a multimedia presentation and provides information about<br>that presentation. It applies only to the URI that follows it. Its<br>format is:</p> <p>#EXT-X-STREAM-INF:<attribute-list><br><URI></p> <p>The following attributes are defined:</p> <p>BANDWIDTH</p> <p>The value is a decimal-integer of bits per second. It MUST be an<br>upper bound of the overall bitrate of each media segment (calculated<br>to include container overhead) that appears or will appear in the<br>Playlist.</p> <p>Every EXT-X-STREAM-INF tag MUST include the BANDWIDTH attribute.</p> <p>PROGRAM-ID</p> <p>The value is a decimal-integer that uniquely identifies a particular<br>presentation within the scope of the Playlist file.</p> <p>A Playlist file MAY contain multiple EXT-X-STREAM-INF tags with the<br>same PROGRAM-ID to identify different encodings of the same<br>presentation. These variant playlists MAY contain additional EXT-X-<br>STREAM-INF tags.</p> <p>CODECS</p> <p>The value is a quoted-string containing a comma-separated list of<br>formats, where each format specifies a media sample type that is<br>present in a media segment in the Playlist file. Valid format<br>identifiers are those in the ISO File Format Name Space defined by<br>RFC 6381<br>RFC6381<br>].</p> <p>Every EXT-X-STREAM-INF tag SHOULD include a CODECS attribute.</p> <p>RESOLUTION</p> <p>The value is a decimal-resolution describing the approximate encoded<br>horizontal and vertical resolution of video within the presentation.<br>Pantos & May Expires March 26, 2013 [Page 14]<br>Internet-Draft HTTP Live Streaming September 2012<br>AUDIO</p> <p>The value is a quoted-string. It MUST match the value of the<br>GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Playlist<br>whose TYPE attribute is AUDIO. It indicates the set of audio<br>renditions that MAY be used when playing the presentation. See<br>Section 3.4.10.1</p> <p>VIDEO</p> <p>The value is a quoted-string. It MUST match the value of the<br>GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Playlist<br>whose TYPE attribute is VIDEO. It indicates the set of video<br>renditions that MAY be used when playing the presentation. See<br>Section 3.4.10.1</p> <p>SUBTITLES</p> <p>The value is a quoted-string. It MUST match the value of the<br>GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Playlist<br>whose TYPE attribute is SUBTITLES. It indicates the set of subtitle<br>renditions that MAY be used when playing the presentation. See<br>Section 3.4.10.1<br>3.4.10.1<br>. Alternative Renditions<br>When an EXT-X-STREAM-INF tag contains an AUDIO, VIDEO, or SUBTITLE<br>attribute, it indicates that alternative renditions of the content<br>are available for playback of that variant.</p> <p>When defining alternative renditions, the following constraints MUST<br>be met:</p> <p>o All playable combinations of renditions associated with an EXT-X-<br>STREAM-INF tag MUST have an aggregate bandwidth less than or equal<br>to the BANDWIDTH attribute of the EXT-X-STREAM-INF tag.</p> <p>o If an EXT-X-STREAM-INF tag contains a RESOLUTION attribute and a<br>VIDEO attribute, then every alternative video rendition MUST match<br>the value of the RESOLUTION attribute.</p> <p>o Every alternative rendition associated with an EXT-X-STREAM-INF<br>tag MUST meet the constraints for a variant stream described in<br>Section 6.2.4</p> <p>The URI attribute of an EXT-X-MEDIA tag is optional. If it is<br>missing, it indicates that the rendition described by the EXT-X-MEDIA<br>tag is present in the main Playlist described by the EXT-X-STREAM-INF<br>Pantos & May Expires March 26, 2013 [Page 15]<br>Internet-Draft HTTP Live Streaming September 2012<br>tag.</p> <p>Note that if a client chooses to play renditions of audio and video<br>that are not present in the main Playlist described by the EXT-X-<br>STREAM-INF tag, or if the client chooses to play an audio rendition<br>and the main Playlist is audio-only, then the client MAY ignore the<br>main Playlist and its media.<br>3.4.11<br>. EXT-X-DISCONTINUITY<br>The EXT-X-DISCONTINUITY tag indicates an encoding discontinuity<br>between the media segment that follows it and the one that preceded<br>it. The set of characteristics that MAY change is:</p> <p>o file format</p> <p>o number and type of tracks</p> <p>o encoding parameters</p> <p>o encoding sequence</p> <p>o timestamp sequence</p> <p>Its format is:</p> <p>#EXT-X-DISCONTINUITY</p> <p>See<br>Section 4<br>Section 6.2.1<br>, and<br>Section 6.3.3<br>for more information<br>about the EXT-X-DISCONTINUITY tag.<br>3.4.12<br>. EXT-X-I-FRAMES-ONLY<br>The EXT-X-I-FRAMES-ONLY tag indicates that each media segment in the<br>Playlist describes a single I-frame. I-frames (or Intra frames) are<br>encoded video frames whose encoding does not depend on any other<br>frame.</p> <p>The EXT-X-I-FRAMES-ONLY tag applies to the entire Playlist. Its<br>format is:</p> <p>#EXT-X-I-FRAMES-ONLY</p> <p>In a Playlist with the EXT-X-I-FRAMES-ONLY tag, the media segment<br>duration (EXTINF tag value) is the time between the presentation time<br>of the I-frame in the media segment and the presentation time of the<br>next I-frame in the Playlist, or the end of the presentation if it is<br>the last I-frame in the Playlist.<br>Pantos & May Expires March 26, 2013 [Page 16]<br>Internet-Draft HTTP Live Streaming September 2012<br>Media resources containing I-frame segments MUST begin with either a<br>Transport Stream PAT/PMT or be accompanied by an EXT-X-MAP tag<br>indicating the proper PAT/PMT. The byte range of an I-frame segment<br>with an EXT-X-BYTERANGE tag applied to it (<br>Section 3.4.1<br>) MUST NOT<br>include a PAT/PMT.</p> <p>The EXT-X-I-FRAMES-ONLY tag appeared in version 4 of the protocol.<br>3.4.13<br>. EXT-X-MAP<br>The EXT-X-MAP tag specifies how to obtain the Transport Stream PAT/<br>PMT for the applicable media segment. It applies to every media<br>segment that appears after it in the Playlist until the next EXT-X-<br>DISCONTINUITY tag, or until the end of the playlist.</p> <p>The EXT-X-MAP tag MUST NOT appear unless the Playlist also contains<br>the EXT-X-I-FRAMES-ONLY tag. It is RECOMMENDED that the EXT-X-MAP<br>tag only be used for segments whose resource does not start with a<br>PAT/PMT.</p> <p>Its format is:</p> <p>#EXT-X-MAP:<attribute-list></p> <p>The following attributes are defined:</p> <p>URI</p> <p>The value is a quoted-string containing a URI that identifies a<br>resource that contains the Transport Stream PAT/PMT. This attribute<br>is mandatory.</p> <p>BYTERANGE</p> <p>The value is a quoted-string specifying a byte range into the<br>resource identified by the URI attribute. This range SHOULD contain<br>only the Transport Stream PAT/PMT. The format of the byte range is<br>described in<br>Section 3.4.1<br>. This attribute is optional; if it is not<br>present, the byte range is the entire resource indicated by the URI.</p> <p>The EXT-X-MAP tag appeared in version 5 of the protocol.<br>3.4.14<br>. EXT-X-I-FRAME-STREAM-INF<br>The EXT-X-I-FRAME-STREAM-INF tag identifies a Playlist file<br>containing the I-frames of a multimedia presentation. It stands<br>alone, in that it does not apply to a particular URI in the Playlist.<br>Its format is:<br>Pantos & May Expires March 26, 2013 [Page 17]<br>Internet-Draft HTTP Live Streaming September 2012<br>#EXT-X-I-FRAME-STREAM-INF:<attribute-list></p> <p>All attributes defined for the EXT-X-STREAM-INF tag (<br>Section 3.4.10<br>are also defined for the EXT-X-I-FRAME-STREAM-INF tag, except for the<br>AUDIO and SUBTITLES attributes. In addition, the following attribute<br>is defined:</p> <p>URI</p> <p>The value is a quoted-string containing a URI that identifies the<br>I-frame Playlist file.</p> <p>Every EXT-X-I-FRAME-STREAM-INF tag MUST include a BANDWIDTH attribute<br>and a URI attribute.</p> <p>The provisions in<br>Section 3.4.10.1<br>also apply to EXT-X-I-FRAME-<br>STREAM-INF tags with a VIDEO attribute.</p> <p>A Playlist that specifies alternative VIDEO renditions and I-frame<br>Playlists SHOULD include an alternative I-frame VIDEO rendition for<br>each regular VIDEO rendition, with the same NAME and LANGUAGE<br>attributes.</p> <p>The EXT-X-I-FRAME-STREAM-INF tag appeared in version 4 of the<br>protocol. Clients that do not implement protocol version 4 or higher<br>MUST ignore it.<br>3.4.15<br>. EXT-X-VERSION<br>The EXT-X-VERSION tag indicates the compatibility version of the<br>Playlist file. The Playlist file, its associated media, and its<br>server MUST comply with all provisions of the most-recent version of<br>this document describing the protocol version indicated by the tag<br>value.</p> <p>The EXT-X-VERSION tag applies to the entire Playlist file. Its<br>format is:</p> <p>#EXT-X-VERSION:<n></p> <p>where n is an integer indicating the protocol version.</p> <p>A Playlist file MUST NOT contain more than one EXT-X-VERSION tag. A<br>Playlist file that does not contain an EXT-X-VERSION tag MUST comply<br>with version 1 of this protocol.<br>Pantos & May Expires March 26, 2013 [Page 18]<br>Internet-Draft HTTP Live Streaming September 2012<br>. Media segments<br>Each media URI in a Playlist file specifies a media segment which is<br>part of the overall presentation. If a media URI has an EXT-X-<br>BYTERANGE tag applied to it, the segment is a sub-range of the media<br>file identified by the URI. Otherwise, the segment is the entire<br>media file.</p> <p>Each media segment MUST be formatted as an MPEG-2 Transport Stream<br>ISO_13818<br>], an MPEG audio elementary stream [<br>ISO_11172<br>], or a WebVTT<br>WebVTT<br>] file.</p> <p>Transport Stream segments MUST contain a single MPEG-2 Program.<br>There SHOULD be a Program Association Table (PAT) and a Program Map<br>Table (PMT) at the start of each segment. A segment that contains<br>video SHOULD have at least one key frame and enough information to<br>completely initialize a video decoder.</p> <p>A Transport Stream or audio elementary stream segment MUST be the<br>continuation of the encoded media at the end of the segment with the<br>previous sequence number, where values in a continuous series, such<br>as timestamps and Continuity Counters, continue uninterrupted -<br>unless the media segment was the first ever to appear in the Playlist<br>file or has an EXT-X-DISCONTINUITY tag applied to it.</p> <p>Clients SHOULD be prepared to handle multiple tracks of a particular<br>type (e.g. audio or video). A client with no other preference SHOULD<br>choose the track with the lowest numerical PID that it can play.</p> <p>Clients MUST ignore private streams inside Transport Streams that<br>they do not recognize.</p> <p>The encoding parameters for samples in a stream inside a media<br>segment and between corresponding streams across multiple media<br>segments SHOULD remain consistent. However clients SHOULD deal with<br>encoding changes as they are encountered, for example by scaling<br>video content to accommodate a resolution change.</p> <p>Subtitle segments MUST be formatted as WebVTT [<br>WebVTT<br>] files. Each<br>subtitle segment MUST contain all subtitle cues that are intended to<br>be displayed during the period indicated by the segment EXTINF<br>duration. The start time offset and end time offset of each cue MUST<br>indicate the total display time for that cue, even if that time range<br>extends beyond the EXTINF duration. A WebVTT segment MAY contain no<br>cues; this indicates that no subtitles are to be displayed during<br>that period.</p> <p>Each WebVTT segment MUST have an X-TIMESTAMP-MAP metadata header.<br>Pantos & May Expires March 26, 2013 [Page 19]<br>Internet-Draft HTTP Live Streaming September 2012<br>This header synchronizes the cue timestamps in the WebVTT file with<br>the MPEG-2 (PES) timestamps in other streams. Its format is:</p> <p>X-TIMESTAMP-MAP:LOCAL=<cue time>,MPEGTS=<MPEG-2 time><br>e.g. X-TIMESTAMP-MAP:LOCAL=00:00:00.000,MPEGTS=900000</p> <p>The cue timestamp in the X-TIMESTAMP-MAP header need not appear in<br>the WebVTT segment.<br>. Key files<br>5.1<br>. Introduction<br>An EXT-X-KEY tag with a URI attribute identifies a Key file. A Key<br>file contains the cipher key that MUST be used to decrypt subsequent<br>media segments in the Playlist.</p> <p>AES_128<br>] encryption uses 16-octet keys. If the KEYFORMAT of an EXT-<br>X-KEY tag is "identity", the Key file is a single packed array of 16<br>octets in binary format.<br>5.2<br>. IV for [<br>AES_128<br>AES_128<br>] requires the same 16-octet Initialization Vector (IV) to be<br>supplied when encrypting and decrypting. Varying this IV increases<br>the strength of the cipher.</p> <p>If an EXT-X-KEY tag has a KEYFORMAT of "identity" and an IV attribute<br>is present, implementations MUST use the attribute value as the IV<br>when encrypting or decrypting with that key. The value MUST be<br>interpreted as a 128-bit number.</p> <p>If an EXT-X-KEY tag with a KEYFORMAT of "identity" does not have the<br>IV attribute, implementations MUST use the sequence number of the<br>media segment as the IV when encrypting or decrypting that media<br>segment. The big-endian binary representation of the sequence number<br>SHALL be placed in a 16-octet buffer and padded (on the left) with<br>zeros.<br>. Client/Server Actions<br>6.1<br>. Introduction<br>This section describes how the server generates the Playlist and<br>media segments and how the client should download and play them.<br>Pantos & May Expires March 26, 2013 [Page 20]<br>Internet-Draft HTTP Live Streaming September 2012<br>6.2<br>. Server Process<br>6.2.1<br>. Introduction<br>The production of the media stream is outside the scope of this<br>document, which simply presumes a source of a continuous stream<br>containing the presentation.</p> <p>The server MUST divide the stream into individual media segments<br>whose duration is less than or equal to a constant target duration.<br>The server SHOULD attempt to divide the stream at points that support<br>effective decode of individual media segments, e.g. on packet and key<br>frame boundaries.</p> <p>The server MUST create a URI for every media segment that enables its<br>clients to obtain the segment data. If a server supports partial<br>loading of resources (e.g. via HTTP Range requests), it MAY specify<br>segments as sub-ranges of larger resources using the EXT-X-BYTERANGE<br>tag.</p> <p>If WebVTT segments are distributed by HTTP, the server SHOULD support<br>client requests to use the "gzip" Content-Encoding.</p> <p>The server MUST create a Playlist file. The Playlist file MUST<br>conform to the format described in<br>Section 3<br>. A URI for each media<br>segment that the server wishes to make available MUST appear in the<br>Playlist in the order in which it is to be played. The entire media<br>segment MUST be available to clients if its URI is in the Playlist<br>file.</p> <p>The Playlist file MUST contain an EXT-X-TARGETDURATION tag. Its<br>value MUST be equal to or greater than the EXTINF value of any media<br>segment that appears or will appear in the Playlist file. Its value<br>MUST NOT change. A typical target duration is 10 seconds.</p> <p>The Playlist file SHOULD contain one EXT-X-VERSION tag which<br>indicates the compatibility version of the stream. Its value MUST be<br>the lowest protocol version with which the server, Playlist file, and<br>associated media segments all comply. Its value MUST NOT change.</p> <p>The server MUST create a URI for the Playlist file that will allow<br>its clients to obtain the file.</p> <p>If the Playlist file is distributed by HTTP, the server SHOULD<br>support client requests to use "gzip" Content-Encoding.</p> <p>Changes to the Playlist file MUST be made atomically from the point<br>of view of the clients.<br>Pantos & May Expires March 26, 2013 [Page 21]<br>Internet-Draft HTTP Live Streaming September 2012<br>The server MUST NOT change the Playlist file, except to:</p> <p>Append lines to it (<br>Section 6.2.1<br>).</p> <p>Remove media segment URIs from the Playlist in the order that they<br>appear, along with any tags that apply only to those segments<br>Section 6.2.2<br>).</p> <p>Increment the value of the EXT-X-MEDIA-SEQUENCE tag<br>Section 6.2.2<br>).</p> <p>Add or remove EXT-X-STREAM-INF tags or EXT-X-I-FRAME-STREAM-INF<br>tags (<br>Section 6.2.4<br>). Note that clients are not required to<br>reload variant Playlist files, so changing them may not have<br>immediate effect.</p> <p>Add an EXT-X-ENDLIST tag to the Playlist (<br>Section 6.2.1<br>).</p> <p>Furthermore, the Playlist file MAY contain an EXT-X-PLAYLIST-TYPE tag<br>with a value of either EVENT or VOD. If the tag is present and has a<br>value of EVENT, the server MUST NOT change or delete any part of the<br>Playlist file (although it MAY append lines to it). If the tag is<br>present and has a value of VOD, the Playlist file MUST NOT change.</p> <p>Every media segment in a Playlist MUST have an EXTINF tag applied to<br>it indicating the duration of the media segment.</p> <p>The server MAY associate an absolute date and time with a media<br>segment by applying an EXT-X-PROGRAM-DATE-TIME tag to the segment.<br>The date and time value provides an informative mapping of the<br>timeline of the media to an appropriate wall-clock time, which may be<br>used as a basis for seeking, for display, or for other purposes. If<br>a server provides this mapping, it SHOULD apply an EXT-X-PROGRAM-<br>DATE-TIME tag to every segment that has an EXT-X-DISCONTINUITY tag<br>applied to it.</p> <p>If the Playlist contains the final media segment of the presentation<br>then the Playlist file MUST contain the EXT-X-ENDLIST tag.</p> <p>If the Playlist does not contain the EXT-X-ENDLIST tag, the server<br>MUST make a new version of the Playlist file available that contains<br>at least one new media segment. It MUST be made available relative<br>to the time that the previous version of the Playlist file was made<br>available: no earlier than one-half the target duration after that<br>time, and no later than 1.5 times the target duration after that<br>time.</p> <p>If the server wishes to remove an entire presentation, it MUST make<br>Pantos & May Expires March 26, 2013 [Page 22]<br>Internet-Draft HTTP Live Streaming September 2012<br>the Playlist file unavailable to clients. It SHOULD ensure that all<br>media segments in the Playlist file remain available to clients for<br>at least the duration of the Playlist file at the time of removal.<br>6.2.2<br>. Sliding Window Playlists<br>The server MAY limit the availability of media segments by removing<br>media segments from the Playlist file (<br>Section 6.2.1<br>). If media<br>segments are to be removed, the Playlist file MUST contain exactly<br>one EXT-X-MEDIA-SEQUENCE tag. Its value MUST be incremented by 1 for<br>every media segment that is removed from the Playlist file.</p> <p>Media segments MUST be removed from the Playlist file in the order<br>that they appear in the Playlist.</p> <p>The server MUST NOT remove a media segment from the Playlist file if<br>the duration of the Playlist file minus the duration of the segment<br>is less than three times the target duration.</p> <p>When the server removes a media segment from the Playlist, the<br>corresponding media URI SHOULD remain available to clients for a<br>period of time equal to the duration of the segment plus the duration<br>of the longest Playlist file distributed by the server containing<br>that segment.</p> <p>If a server plans to remove a media segment after it is delivered to<br>clients over HTTP, it SHOULD ensure that the HTTP response contains<br>an Expires header that reflects the planned time-to-live.<br>6.2.3<br>. Encrypting media segments<br>If media segments are to be encrypted the server MUST define a URI<br>which will allow authorized clients to obtain a Key file containing a<br>decryption key. The Key file MUST conform to the format described in<br>Section 5</p> <p>The server MAY set the HTTP Expires header in the key response to<br>indicate that the key may be cached.</p> <p>The server MUST encrypt every media segment in a Playlist according<br>to the EXT-X-KEY tag that applies to its URI in the Playlist file.<br>Media segments with an EXT-X-KEY tag whose METHOD is NONE, or which<br>do not have an EXT-X-KEY tag applied to them, MUST NOT be encrypted.</p> <p>If the encryption METHOD is AES-128 and the Playlist does not contain<br>the EXT-X-I-FRAMES-ONLY tag, AES-128 CBC encryption with PKCS7<br>padding [<br>RFC5652<br>] SHALL be applied to individual media segments. The<br>entire segment MUST be encrypted. Cipher Block Chaining MUST NOT be<br>Pantos & May Expires March 26, 2013 [Page 23]<br>Internet-Draft HTTP Live Streaming September 2012<br>applied across media segments. The IV used for encryption MUST be<br>either the sequence number of the media segment or the value of the<br>IV attribute of the EXT-X-KEY tag, as described in<br>Section 5.2</p> <p>If the encryption METHOD is AES-128 and the Playlist contains an EXT-<br>X-I-FRAMES-ONLY tag, AES-128 CBC encryption with PKCS7 padding<br>RFC5652<br>] MUST be applied to the entire resource. The entire<br>resource MUST be encrypted. Encryption MAY be restarted on 16-byte<br>block boundaries, unless the first block contains an I-frame. The IV<br>used for encryption MUST be either the sequence number of the media<br>segment or the value of the IV attribute of the EXT-X-KEY tag, as<br>described in<br>Section 5.2</p> <p>If the encryption METHOD is SAMPLE-AES, certain elementary streams<br>MAY be encrypted prior to encapsulation in a media segment. The<br>encryption format for H.264, AAC and AC-3 elementary streams is<br>described by [<br>SampleEnc<br>].</p> <p>The server MUST NOT remove an EXT-X-KEY tag from the Playlist file if<br>it applies to any media segment in the Playlist file.<br>6.2.4<br>. Providing variant streams<br>A server MAY offer multiple Playlist files to provide different<br>encodings of the same presentation. If it does so it SHOULD provide<br>a variant Playlist file that lists each variant stream to allow<br>clients to switch between encodings dynamically.</p> <p>Variant Playlists MUST contain an EXT-X-STREAM-INF tag or EXT-X-I-<br>FRAME-STREAM-INF tag for each variant stream. Each tag identifying<br>an encoding of the same presentation MUST have the same PROGRAM-ID<br>attribute value. The PROGRAM-ID value for each presentation MUST be<br>unique within the variant Playlist.</p> <p>If an EXT-X-STREAM-INF tag or EXT-X-I-FRAME-STREAM-INF tag contains<br>the CODECS attribute, the attribute value MUST include every format<br>defined by [<br>RFC6381<br>] that is present in any media segment that<br>appears or will appear in the Playlist file.</p> <p>The server MUST meet the following constraints when producing variant<br>streams:</p> <p>Each variant stream MUST present the same content, including<br>stream discontinuities.</p> <p>Each variant Playlist file MUST have the same target duration.<br>The only exception is that SUBTITLES renditions with a EXT-X-<br>PLAYLIST-TYPE of VOD MAY have longer target durations.<br>Pantos & May Expires March 26, 2013 [Page 24]<br>Internet-Draft HTTP Live Streaming September 2012<br>Content that appears in one variant Playlist file but not in<br>another MUST appear either at the beginning or at the end of the<br>Playlist file and MUST NOT be longer than the target duration.</p> <p>Matching content in variant streams MUST have matching timestamps.<br>This allows clients to synchronize the streams.</p> <p>Each Elementary Audio Stream segment MUST signal the timestamp of<br>its first sample with an ID3 PRIV tag [<br>ID3<br>] at the beginning of<br>the segment. The ID3 PRIV owner identifier MUST be<br>"com.apple.streaming.transportStreamTimestamp". The ID3 payload<br>MUST be a 33-bit MPEG-2 Program Elementary Stream timestamp<br>expressed as a big-endian eight-octet number, with the upper 31<br>bits set to zero.</p> <p>In addition, all variant streams SHOULD contain the same encoded<br>audio bitstream. This allows clients to switch between streams<br>without audible glitching.</p> <p>The rules for variant streams also apply to alternate renditions -<br>see<br>Section 3.4.10.1<br>6.3<br>. Client Process<br>6.3.1<br>. Introduction<br>How the client obtains the URI to the Playlist file is outside the<br>scope of this document; it is presumed to have done so.</p> <p>The client MUST obtain the Playlist file from the URI. If the<br>Playlist file so obtained is a variant Playlist, the client MUST<br>obtain the Playlist file from the variant Playlist.</p> <p>This document does not specify the treatment of variant streams by<br>clients.<br>6.3.2<br>. Loading the Playlist file<br>Every time a Playlist file is loaded or reloaded from the Playlist<br>URI:</p> <p>The client MUST ensure that the Playlist file begins with the<br>EXTM3U tag and that the EXT-X-VERSION tag, if present, specifies a<br>protocol version supported by the client; if not, the client MUST<br>NOT attempt to use the Playlist.</p> <p>The client SHOULD ignore any tags and attributes it does not<br>recognize.<br>Pantos & May Expires March 26, 2013 [Page 25]<br>Internet-Draft HTTP Live Streaming September 2012<br>The client MUST determine the next media segment to load, as<br>described in<br>Section 6.3.5</p> <p>If the Playlist contains the EXT-X-MEDIA-SEQUENCE tag, the client<br>SHOULD assume that each media segment in it will become unavailable<br>at the time that the Playlist file was loaded plus the duration of<br>the Playlist file.<br>6.3.3<br>. Playing the Playlist file<br>The client SHALL choose which media segment to play first from the<br>Playlist when playback starts. If the EXT-X-ENDLIST tag is not<br>present and the client intends to play the media regularly (i.e. in<br>playlist order at the nominal playback rate), the client SHOULD NOT<br>choose a segment which starts less than three target durations from<br>the end of the Playlist file. Doing so can trigger playback stalls.</p> <p>To achieve regular playback, media segments MUST be played in the<br>order that they appear in the Playlist file. The client MAY present<br>the available media in any way it wishes, including regular playback,<br>random access, and trick modes.</p> <p>The client MUST be prepared to reset its parser(s) and decoder(s)<br>before playing a media segment that has an EXT-X-DISCONTINUITY tag<br>applied to it.</p> <p>The client SHOULD attempt to load media segments in advance of when<br>they will be required for uninterrupted playback to compensate for<br>temporary variations in latency and throughput.</p> <p>If the Playlist file contains the EXT-X-ALLOW-CACHE tag and its value<br>is NO, the client MUST NOT cache downloaded media segments after they<br>have been played. Otherwise the client MAY cache downloaded media<br>segments indefinitely for later replay.</p> <p>The client MAY use the value of the EXT-X-PROGRAM-DATE-TIME tag to<br>display the program origination time to the user. If the value<br>includes time zone information the client SHALL take it into account,<br>but if it does not the client MUST NOT infer an originating time<br>zone.</p> <p>The client MUST NOT depend upon the correctness or the consistency of<br>the value of the EXT-X-PROGRAM-DATE-TIME tag.<br>6.3.4<br>. Reloading the Playlist file<br>The client MUST periodically reload the Playlist file unless it<br>contains the EXT-X-ENDLIST tag.<br>Pantos & May Expires March 26, 2013 [Page 26]<br>Internet-Draft HTTP Live Streaming September 2012<br>However the client MUST NOT attempt to reload the Playlist file more<br>frequently than specified by this section.</p> <p>When a client loads a Playlist file for the first time or reloads a<br>Playlist file and finds that it has changed since the last time it<br>was loaded, the client MUST wait for a period of time before<br>attempting to reload the Playlist file again. This period is called<br>the initial minimum reload delay. It is measured from the time that<br>the client began loading the Playlist file.</p> <p>The initial minimum reload delay is the duration of the last media<br>segment in the Playlist. Media segment duration is specified by the<br>EXTINF tag.</p> <p>If the client reloads a Playlist file and finds that it has not<br>changed then it MUST wait for a period of one-half the target<br>duration before retrying.</p> <p>In order to reduce server load, the client SHOULD NOT reload the<br>Playlist files of variant streams that are not currently being<br>played. If it decides to switch playback to a different variant, it<br>SHOULD stop reloading the Playlist of the old variant and begin<br>loading the Playlist of the new variant. It can use the EXTINF<br>durations and the constraints in<br>Section 6.2.4<br>to determine the<br>approximate location of corresponding media. Once media from the new<br>variant has been loaded, the timestamps in the media segments can be<br>used to synchronize the old and new timelines precisely. A client<br>MUST NOT assume that segments with the same media sequence number in<br>different variants or renditions contain matching content.<br>6.3.5<br>. Determining the next segment to load<br>The client MUST examine the Playlist file every time it is loaded or<br>reloaded to determine the next media segment to load.</p> <p>The first segment to load MUST be the segment that the client has<br>chosen to play first, as described in<br>Section 6.3.3</p> <p>If the first segment to be played has been loaded and the Playlist<br>file does not contain the EXT-X-MEDIA-SEQUENCE tag then the client<br>MUST verify that the current Playlist file contains the URI of the<br>last loaded media segment at the offset it was originally found at,<br>halting playback if it does not. The next media segment to load MUST<br>be the first media segment following the last-loaded segment in the<br>Playlist.</p> <p>If the first segment to be played has been loaded and the Playlist<br>file contains the EXT-X-MEDIA-SEQUENCE tag then the next media<br>Pantos & May Expires March 26, 2013 [Page 27]<br>Internet-Draft HTTP Live Streaming September 2012<br>segment to load SHALL be the one with the lowest sequence number that<br>is greater than the sequence number of the last media segment loaded.<br>6.3.6<br>. Decrypting encrypted media segments<br>If a Playlist file contains an EXT-X-KEY tag that specifies a Key<br>file URI, the client MUST obtain that key file and use the key inside<br>it to decrypt all media segments to which that EXT-X-KEY tag applies.</p> <p>A client MUST NOT attempt to use an EXT-X-KEY tag with an unsupported<br>or unrecognized KEYFORMAT attribute. A client SHOULD fail playback<br>if the Playlist contains a media segment to which only EXT-X-KEY tags<br>with unrecognized or unsupported KEYFORMAT attributes are applied.</p> <p>If the encryption METHOD is AES-128, AES-128 CBC decryption SHALL be<br>applied to individual media segments. The entire segment MUST be<br>decrypted. Cipher Block Chaining MUST NOT be applied across media<br>segments. The IV used for decryption MUST be either the sequence<br>number of the media segment or the value of the IV attribute of the<br>EXT-X-KEY tag, as described in<br>Section 5.2</p> <p>If the encryption METHOD is AES-128 and the media segment is part of<br>an I-frame playlist (<br>Section 3.4.12<br>) special care MUST be taken in<br>loading and decrypting the segment, because the resource identified<br>by the URI is encrypted in 16-byte blocks from the start of the<br>resource (offset 0). The sub-range specified by the EXT-X-BYTERANGE<br>tag MUST be widened to include the 16-byte blocks in which the<br>beginning and end of the sub-range fall. Next, it MUST be widened<br>further to include the previous 16-byte block. That range MUST be<br>loaded and decrypted with AES-128 CBC using an arbitrary IV. The<br>decrypted segment will then be in the original (unwidened) sub-range.</p> <p>If the encryption METHOD is SAMPLE-AES, AES-128 decryption SHALL be<br>applied to encrypted elementary streams within the media segment.<br>The encryption format for H.264, AAC and AC-3 elementary streams is<br>described by [<br>SampleEnc<br>].</p> <p>An EXT-X-KEY tag with a METHOD of NONE indicates that the media<br>segments it applies to are not encrypted.<br>. Protocol version compatibility<br>Clients and servers MUST implement protocol version 2 or higher to<br>use:</p> <p>o The IV attribute of the EXT-X-KEY tag.<br>Pantos & May Expires March 26, 2013 [Page 28]<br>Internet-Draft HTTP Live Streaming September 2012<br>Clients and servers MUST implement protocol version 3 or higher to<br>use:</p> <p>o Floating-point EXTINF duration values.</p> <p>Clients and servers MUST implement protocol version 4 or higher to<br>use:</p> <p>o The EXT-X-BYTERANGE tag.</p> <p>o The EXT-X-I-FRAME-STREAM-INF tag.</p> <p>o The EXT-X-I-FRAMES-ONLY tag.</p> <p>o The EXT-X-MEDIA tag.</p> <p>o The AUDIO and VIDEO attributes of the EXT-X-STREAM-INF tag.</p> <p>Clients and servers MUST implement protocol version 5 or higher to<br>use:</p> <p>o The KEYFORMAT and KEYFORMATVERSIONS attributes of the EXT-X-KEY<br>tag.</p> <p>o The EXT-X-MAP tag.<br>. Examples<br>8.1<br>. Introduction<br>This section contains several example Playlist files.<br>8.2<br>. Simple Playlist file<br>#EXTM3U<br>#EXT-X-VERSION:3<br>#EXT-X-TARGETDURATION:5220<br>#EXTINF:5219.2,<br>#EXT-X-ENDLIST<br>Pantos & May Expires March 26, 2013 [Page 29]<br>Internet-Draft HTTP Live Streaming September 2012<br>8.3<br>. Sliding Window Playlist, using HTTPS<br>#EXTM3U<br>#EXT-X-VERSION:3<br>#EXT-X-TARGETDURATION:8<br>#EXT-X-MEDIA-SEQUENCE:2680</p> <p>#EXTINF:7.975,<br>#EXTINF:7.941,<br>#EXTINF:7.975,<br>8.4<br>. Playlist file with encrypted media segments<br>#EXTM3U<br>#EXT-X-VERSION:3<br>#EXT-X-MEDIA-SEQUENCE:7794<br>#EXT-X-TARGETDURATION:15</p> <p>#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"</p> <p>#EXTINF:2.833,<br>#EXTINF:15.0,<br>#EXTINF:13.333,</p> <p>#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"</p> <p>#EXTINF:15.0,<br>8.5<br>. Variant Playlist file<br>#EXTM3U<br>#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000<br>#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000<br>#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000<br>#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"<br>Pantos & May Expires March 26, 2013 [Page 30]<br>Internet-Draft HTTP Live Streaming September 2012<br>8.6<br>. Variant Playlist with I-Frames<br>In this example, the PROGRAM-ID attributes have been left out:</p> <p>#EXTM3U<br>#EXT-X-STREAM-INF:BANDWIDTH=1280000<br>low/audio-video.m3u8<br>#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="low/iframe.m3u8"<br>#EXT-X-STREAM-INF:BANDWIDTH=2560000<br>mid/audio-video.m3u8<br>#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=150000,URI="mid/iframe.m3u8"<br>#EXT-X-STREAM-INF:BANDWIDTH=7680000<br>hi/audio-video.m3u8<br>#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=550000,URI="hi/iframe.m3u8"<br>#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"<br>audio-only.m3u8<br>8.7<br>. Variant Playlist with Alternative audio<br>In this example, the PROGRAM-ID attributes have been left out. The<br>CODECS attributes have been condensed for space. A '\' is used to<br>indicate that the tag continues on the following line with whitespace<br>removed:</p> <p>#EXTM3U<br>#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="English", \<br>DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en", \<br>URI="main/english-audio.m3u8"<br>#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Deutsche", \<br>DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="de", \<br>URI="main/german-audio.m3u8"<br>#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Commentary", \<br>DEFAULT=NO,AUTOSELECT=NO,URI="commentary/audio-only.m3u8"<br>#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",AUDIO="aac"<br>low/video-only.m3u8<br>#EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",AUDIO="aac"<br>mid/video-only.m3u8<br>#EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",AUDIO="aac"<br>hi/video-only.m3u8<br>#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5",AUDIO="aac"<br>main/english-audio.m3u8<br>8.8<br>. Variant Playlist with Alternative video<br>In this example, the PROGRAM-ID attributes have been left out. The<br>CODECS attributes have been condensed for space. A '\' is used to<br>indicate that the tag continues on the following line with whitespace<br>removed:<br>Pantos & May Expires March 26, 2013 [Page 31]<br>Internet-Draft HTTP Live Streaming September 2012<br>#EXTM3U<br>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Main", \<br>DEFAULT=YES,URI="low/main/audio-video.m3u8"<br>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Centerfield", \<br>DEFAULT=NO,URI="low/centerfield/audio-video.m3u8"<br>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Dugout", \<br>DEFAULT=NO,URI="low/dugout/audio-video.m3u8"</p> <p>#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",VIDEO="low"<br>low/main/audio-video.m3u8</p> <p>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Main", \<br>DEFAULT=YES,URI="mid/main/audio-video.m3u8"<br>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Centerfield", \<br>DEFAULT=NO,URI="mid/centerfield/audio-video.m3u8"<br>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Dugout", \<br>DEFAULT=NO,URI="mid/dugout/audio-video.m3u8"</p> <p>#EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",VIDEO="mid"<br>mid/main/audio-video.m3u8</p> <p>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Main", \<br>DEFAULT=YES,URI="hi/main/audio-video.m3u8"<br>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Centerfield", \<br>DEFAULT=NO,URI="hi/centerfield/audio-video.m3u8"<br>#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Dugout", \<br>DEFAULT=NO,URI="hi/dugout/audio-video.m3u8"</p> <p>#EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",VIDEO="hi"<br>hi/main/audio-video.m3u8</p> <p>#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"<br>main/audio-only.m3u8<br>. Contributors<br>Significant contributions to the design of this protocol were made by<br>Jim Batson, David Biderman, Bill May, Roger Pantos, and Alan Tseng.<br>10<br>. IANA Considerations<br>This memo requests that the following MIME type [<br>RFC2046<br>] be<br>registered with the IANA:</p> <p>Type name: "application"<br>Pantos & May Expires March 26, 2013 [Page 32]<br>Internet-Draft HTTP Live Streaming September 2012<br>Subtype name: "vnd.apple.mpegurl"</p> <p>Required parameters: (none)</p> <p>Optional parameters: (none)</p> <p>Encoding considerations: encoded as text. See<br>Section 3<br>for more<br>information.</p> <p>Security considerations: See<br>Section 11</p> <p>Compression: this media type does not employ compression.</p> <p>Interoperability considerations: There are no byte-ordering issues,<br>since files are 7- or 8-bit text. Applications could encounter<br>unrecognized tags, which SHOULD be ignored.</p> <p>Published specification: see<br>Section 3</p> <p>Applications that use this media type: Multimedia applications such<br>as the iPhone media player in iOS 3.0 and later and QuickTime Player<br>in Mac OS X version 10.6 and later.</p> <p>Additional information: files begin with the magic number #EXTM3U.<br>Filenames normally end with .m3u8 or .m3u (see<br>Section 3<br>). No<br>Macintosh file type codes have been registered.</p> <p>Person & email address to contact for further information: David<br>Singer, singer AT apple.com.</p> <p>Intended usage: LIMITED USE</p> <p>Restrictions on usage: (none)</p> <p>Author: Roger Pantos</p> <p>Change Controller: David Singer<br>11<br>. Security Considerations<br>Since the protocol generally uses HTTP to transfer data, most of the<br>same security considerations apply. See<br>section 15 of RFC 2616<br>RFC2616<br>].</p> <p>Media file parsers are typically subject to "fuzzing" attacks.<br>Clients SHOULD take care when parsing segments received from a server<br>that non-compliant segments are rejected.<br>Pantos & May Expires March 26, 2013 [Page 33]<br>Internet-Draft HTTP Live Streaming September 2012<br>Playlist files contain URIs, which clients will use to make network<br>requests of arbitrary entities. Clients SHOULD range-check responses<br>to prevent buffer overflows. See also the Security Considerations<br>section of<br>RFC 3986<br>RFC3986<br>].</p> <p>Clients SHOULD load resources identified by URI lazily to avoid<br>contributing to denial-of-service attacks.</p> <p>HTTP requests often include session state ("cookies"), which may<br>contain private user data. Implementations MUST follow cookie<br>restriction and expiry rules specified by<br>RFC 6265<br>RFC6265<br>]. See<br>also the Security Considerations section of<br>RFC 6265<br>, and<br>RFC 2964<br>RFC2964<br>].</p> <p>Encryption keys are specified by URI. The delivery of these keys<br>SHOULD be secured by a mechanism such as HTTP over TLS [<br>RFC5246<br>(formerly SSL) in conjunction with a secure realm or a session<br>cookie.<br>12<br>. References<br>12.1<br>. Normative References<br>AC_3<br>] Advanced Television Systems Committee, "ATSC Standard:<br>A/52:2010: Digital Audio Compression (AC-3) (E-AC-3)<br>Standard", November 2010,<br>>.</p> <p>AES_128<br>] U.S. Department of Commerce/National Institute of<br>Standards and Technology, "Advanced Encryption Standard<br>(AES), FIPS PUB 197", November 2001, <<br>csrc.nist.gov/publications/fips/fips197/fips-197.pdf<br>>.</p> <p>H_264<br>] International Telecommunications Union, "Advanced video<br>coding for generic audiovisual services", January 2012,<br>>.</p> <p>ISO_11172<br>International Organization for Standardization, "ISO/IEC<br>International Standard 11172-1; Coding of moving pictures<br>and associated audio for digital storage media -- Part 1:<br>Systems", 1993, <<br>catalogue_detail.htm?csnumber=19180<br>>.</p> <p>ISO_13818<br>International Organization for Standardization, "ISO/IEC<br>International Standard 13818; Generic coding of moving<br>Pantos & May Expires March 26, 2013 [Page 34]<br>Internet-Draft HTTP Live Streaming September 2012<br>pictures and associated audio information", October 2007,<br>>.</p> <p>ISO_14496<br>International Organization for Standardization, "ISO/IEC<br>14496-3:2009 Information technology -- Coding of audio-<br>visual objects -- Part 3: Audio", 2009, <<br>www.iso.org/iso/iso_catalogue/catalogue_ics/<br>catalogue_detail_ics.htm?csnumber=53943<br>>.</p> <p>ISO_8601<br>International Organization for Standardization, "ISO/IEC<br>International Standard 8601:2004; Data elements and<br>interchange formats -- Information interchange --<br>Representation of dates and times", December 2004,<br>>.</p> <p>RFC2046<br>] Freed, N. and N. Borenstein, "Multipurpose Internet Mail<br>Extensions (MIME) Part Two: Media Types",<br>RFC 2046<br>November 1996.</p> <p>RFC2119<br>] Bradner, S., "Key words for use in RFCs to Indicate<br>Requirement Levels",<br>BCP 14<br>RFC 2119<br>, March 1997.</p> <p>RFC2616<br>] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,<br>Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext<br>Transfer Protocol -- HTTP/1.1",<br>RFC 2616<br>, June 1999.</p> <p>RFC2964<br>] Moore, K. and N. Freed, "Use of HTTP State Management",<br>BCP 44<br>RFC 2964<br>, October 2000.</p> <p>RFC3629<br>] Yergeau, F., "UTF-8, a transformation format of ISO<br>10646", STD 63,<br>RFC 3629<br>, November 2003.</p> <p>RFC3986<br>] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform<br>Resource Identifier (URI): Generic Syntax", STD 66,<br>RFC 3986<br>, January 2005.</p> <p>RFC5246<br>] Dierks, T. and E. Rescorla, "The Transport Layer Security<br>(TLS) Protocol Version 1.2",<br>RFC 5246<br>, August 2008.</p> <p>RFC5646<br>] Phillips, A. and M. Davis, "Tags for Identifying<br>Languages",<br>BCP 47<br>RFC 5646<br>, September 2009.</p> <p>RFC5652<br>] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70,<br>RFC 5652<br>, September 2009.</p> <p>RFC6265<br>] Barth, A., "HTTP State Management Mechanism",<br>RFC 6265<br>Pantos & May Expires March 26, 2013 [Page 35]<br>Internet-Draft HTTP Live Streaming September 2012<br>April 2011.</p> <p>RFC6381<br>] Gellens, R., Singer, D., and P. Frojdh, "The 'Codecs' and<br>'Profiles' Parameters for "Bucket" Media Types",<br>RFC 6381<br>August 2011.</p> <p>US_ASCII<br>American National Standards Institute, "ANSI X3.4-1986,<br>Information Systems -- Coded Character Sets 7-Bit American<br>National Standard Code for Information Interchange (7-Bit<br>ASCII)", December 1986.<br>12.2<br>. Informative References<br>ID3<br>] ID3.org, "The ID3 audio file data tagging format",<br>>.</p> <p>M3U<br>] Nullsoft, Inc., "The M3U Playlist format, originally<br>invented for the Winamp media player",<br>>.</p> <p>SampleEnc<br>Apple Inc., "MPEG-2 Stream Encryption Format for HTTP Live<br>Streaming", <<br>documentation/AudioVideo/Conceptual/<br>HLS_Sample_Encryption/<br>>.</p> <p>UTI<br>] Apple Inc., "Uniform Type Identifier", <<br>developer.apple.com/library/ios/#documentation/general/<br>conceptual/DevPedia-CocoaCore/UniformTypeIdentifier.html<br>>.</p> <p>WebVTT<br>] World Wide Web Consortium (W3C), "WebVTT Standard",<br>September 2012, <<br>>.</p> <p>Authors' Addresses</p> <p>Roger Pantos (editor)<br>Apple Inc.<br>Cupertino, California<br>United States</p> <p>Email: http-live-streaming-review@group.apple.com<br>Pantos & May Expires March 26, 2013 [Page 36]<br>Internet-Draft HTTP Live Streaming September 2012<br>William May, Jr.<br>Apple Inc.<br>Cupertino, California<br>United States</p> <p>Email: http-live-streaming-review@group.apple.com</p> <p>Pantos & May Expires March 26, 2013 [Page 37]<br>Datatracker<br>draft-pantos-http-live-streaming-09<br>This is an older version of an Internet-Draft that was ultimately published as<br>RFC 8216<br>Document<br>Document type<br>This is an older version of an Internet-Draft that was ultimately published as<br>RFC 8216<br>This document is an Internet-Draft (I-D).<br>Anyone may submit an I-D to the IETF.<br>This I-D is<br>not endorsed by the IETF<br>and has<br>no formal standing<br>in the<br>IETF standards process<br>Select version<br>00<br>01<br>02<br>03<br>04<br>05<br>06<br>07<br>08<br>09<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>RFC 8216<br>Compare versions<br>Author<br>Roger Pantos<br>RFC stream<br>(None)<br>Other formats<br>txt<br>bibtex<br>bibxml<br>Report a datatracker bug<br>Show sidebar by default<br>Yes<br>No<br>Tab to show by default<br>Info<br>Contents<br>HTMLization configuration<br>HTMLize the plaintext<br>Plaintextify the HTML<br>Maximum font size<br>Page dependencies<br>Inline<br>Reference<br>Citation links<br>Go to reference section<br>Go to linked document</p></div> </div> <div class="detail-actions"> <a href="/search?q=tools.ietf.org" class="btn">Same domain →</a> <a href="/search?q=draft-pantos-http-live-streami" class="btn btn-secondary">Similar titles →</a> </div> </article> </main> <footer class="site-footer"> <div class="container"> <p>C U Cyber History — Public Interest Web Archive</p> <p class="footer-small">Preserving fading web memories. Discover history that once existed.</p> </div> </footer> <script id="chat-i18n-en" type="application/json">{"button_label":"Need Help?","placeholder":"Ask us anything...","title":"CUCH Assistant","subtitle":"How can we help you?","send":"Send","close":"Close","folder":"/var/www/cu","greeting":"Hi! Welcome to CUCH.org. How can I help you today? Feel free to ask about our archive, search, or anything else!","error":"Sorry, our service is temporarily unavailable. Please try again later.","banner_text":"Need help? Ask our AI assistant!"}</script> <script src="/static/js/chat-widget.js"></script> </body> </html>