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