< draft-pantos-hls-rfc8216bis-10.txt   draft-pantos-hls-rfc8216bis-11.txt >
Informational R. Pantos, Ed. Informational R. Pantos, Ed.
Internet-Draft Apple Inc. Internet-Draft Apple Inc.
Obsoletes: 8216 (if approved) November 8, 2021 Obsoletes: 8216 (if approved) May 11, 2022
Intended status: Informational Intended status: Informational
Expires: May 12, 2022 Expires: November 12, 2022
HTTP Live Streaming 2nd Edition HTTP Live Streaming 2nd Edition
draft-pantos-hls-rfc8216bis-10 draft-pantos-hls-rfc8216bis-11
Abstract Abstract
This document obsoletes RFC 8216. It describes a protocol for This document obsoletes RFC 8216. It describes a protocol for
transferring unbounded streams of multimedia data. It specifies the transferring unbounded streams of multimedia data. It specifies the
data format of the files and the actions to be taken by the server data format of the files and the actions to be taken by the server
(sender) and the clients (receivers) of the streams. It describes (sender) and the clients (receivers) of the streams. It describes
version 10 of this protocol. version 10 of this protocol.
Status of This Memo Status of This Memo
skipping to change at page 1, line 35 skipping to change at page 1, line 35
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 12, 2022. This Internet-Draft will expire on November 12, 2022.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2022 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. to this document.
This document may not be modified, and derivative works of it may not This document may not be modified, and derivative works of it may not
skipping to change at page 3, line 9 skipping to change at page 3, line 9
4.4.4.1. EXTINF . . . . . . . . . . . . . . . . . . . . . 23 4.4.4.1. EXTINF . . . . . . . . . . . . . . . . . . . . . 23
4.4.4.2. EXT-X-BYTERANGE . . . . . . . . . . . . . . . . . 23 4.4.4.2. EXT-X-BYTERANGE . . . . . . . . . . . . . . . . . 23
4.4.4.3. EXT-X-DISCONTINUITY . . . . . . . . . . . . . . . 24 4.4.4.3. EXT-X-DISCONTINUITY . . . . . . . . . . . . . . . 24
4.4.4.4. EXT-X-KEY . . . . . . . . . . . . . . . . . . . . 24 4.4.4.4. EXT-X-KEY . . . . . . . . . . . . . . . . . . . . 24
4.4.4.5. EXT-X-MAP . . . . . . . . . . . . . . . . . . . . 26 4.4.4.5. EXT-X-MAP . . . . . . . . . . . . . . . . . . . . 26
4.4.4.6. EXT-X-PROGRAM-DATE-TIME . . . . . . . . . . . . . 27 4.4.4.6. EXT-X-PROGRAM-DATE-TIME . . . . . . . . . . . . . 27
4.4.4.7. EXT-X-GAP . . . . . . . . . . . . . . . . . . . . 28 4.4.4.7. EXT-X-GAP . . . . . . . . . . . . . . . . . . . . 28
4.4.4.8. EXT-X-BITRATE . . . . . . . . . . . . . . . . . . 28 4.4.4.8. EXT-X-BITRATE . . . . . . . . . . . . . . . . . . 28
4.4.4.9. EXT-X-PART . . . . . . . . . . . . . . . . . . . 28 4.4.4.9. EXT-X-PART . . . . . . . . . . . . . . . . . . . 28
4.4.5. Media Metadata Tags . . . . . . . . . . . . . . . . . 29 4.4.5. Media Metadata Tags . . . . . . . . . . . . . . . . . 29
4.4.5.1. EXT-X-DATERANGE . . . . . . . . . . . . . . . . . 29 4.4.5.1. EXT-X-DATERANGE . . . . . . . . . . . . . . . . . 30
4.4.5.1.1. Mapping SCTE-35 into EXT-X-DATERANGE . . . . 31 4.4.5.1.1. Mapping SCTE-35 into EXT-X-DATERANGE . . . . 32
4.4.5.2. EXT-X-SKIP . . . . . . . . . . . . . . . . . . . 33 4.4.5.2. EXT-X-SKIP . . . . . . . . . . . . . . . . . . . 34
4.4.5.3. EXT-X-PRELOAD-HINT . . . . . . . . . . . . . . . 34 4.4.5.3. EXT-X-PRELOAD-HINT . . . . . . . . . . . . . . . 35
4.4.5.4. EXT-X-RENDITION-REPORT . . . . . . . . . . . . . 35 4.4.5.4. EXT-X-RENDITION-REPORT . . . . . . . . . . . . . 36
4.4.6. Multivariant Playlist Tags . . . . . . . . . . . . . 36 4.4.6. Multivariant Playlist Tags . . . . . . . . . . . . . 37
4.4.6.1. EXT-X-MEDIA . . . . . . . . . . . . . . . . . . . 36 4.4.6.1. EXT-X-MEDIA . . . . . . . . . . . . . . . . . . . 37
4.4.6.1.1. Rendition Groups . . . . . . . . . . . . . . 40 4.4.6.1.1. Rendition Groups . . . . . . . . . . . . . . 41
4.4.6.2. EXT-X-STREAM-INF . . . . . . . . . . . . . . . . 40 4.4.6.2. EXT-X-STREAM-INF . . . . . . . . . . . . . . . . 41
4.4.6.2.1. Alternative Renditions . . . . . . . . . . . 46 4.4.6.2.1. Alternative Renditions . . . . . . . . . . . 48
4.4.6.3. EXT-X-I-FRAME-STREAM-INF . . . . . . . . . . . . 47 4.4.6.3. EXT-X-I-FRAME-STREAM-INF . . . . . . . . . . . . 48
4.4.6.4. EXT-X-SESSION-DATA . . . . . . . . . . . . . . . 47 4.4.6.4. EXT-X-SESSION-DATA . . . . . . . . . . . . . . . 49
4.4.6.5. EXT-X-SESSION-KEY . . . . . . . . . . . . . . . . 48 4.4.6.5. EXT-X-SESSION-KEY . . . . . . . . . . . . . . . . 50
4.4.6.6. EXT-X-CONTENT-STEERING . . . . . . . . . . . . . 49 4.4.6.6. EXT-X-CONTENT-STEERING . . . . . . . . . . . . . 51
5. Key Files . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5. Key Files . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.1. Structure of Key Files . . . . . . . . . . . . . . . . . 50 5.1. Structure of Key Files . . . . . . . . . . . . . . . . . 51
5.2. IV for AES-128 . . . . . . . . . . . . . . . . . . . . . 50 5.2. IV for AES-128 . . . . . . . . . . . . . . . . . . . . . 51
6. Client/Server Responsibilities . . . . . . . . . . . . . . . 50 6. Client/Server Responsibilities . . . . . . . . . . . . . . . 52
6.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 50 6.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 52
6.2. Server Responsibilities . . . . . . . . . . . . . . . . . 50 6.2. Server Responsibilities . . . . . . . . . . . . . . . . . 52
6.2.1. General Server Responsibilities . . . . . . . . . . . 50 6.2.1. General Server Responsibilities . . . . . . . . . . . 52
6.2.2. Live Playlists . . . . . . . . . . . . . . . . . . . 54 6.2.2. Live Playlists . . . . . . . . . . . . . . . . . . . 55
6.2.3. Encrypting Media Segments . . . . . . . . . . . . . . 55 6.2.3. Encrypting Media Segments . . . . . . . . . . . . . . 56
6.2.4. Providing Variant Streams . . . . . . . . . . . . . . 56 6.2.4. Providing Variant Streams . . . . . . . . . . . . . . 57
6.2.5. Delivery Directives Interface . . . . . . . . . . . . 57 6.2.5. Delivery Directives Interface . . . . . . . . . . . . 59
6.2.5.1. Playlist Delta Updates . . . . . . . . . . . . . 57 6.2.5.1. Playlist Delta Updates . . . . . . . . . . . . . 59
6.2.5.2. Blocking Playlist Reload . . . . . . . . . . . . 58 6.2.5.2. Blocking Playlist Reload . . . . . . . . . . . . 60
6.2.6. Providing Preload Hints . . . . . . . . . . . . . . . 59 6.2.6. Providing Preload Hints . . . . . . . . . . . . . . . 61
6.3. Client Responsibilities . . . . . . . . . . . . . . . . . 60 6.3. Client Responsibilities . . . . . . . . . . . . . . . . . 62
6.3.1. General Client Responsibilities . . . . . . . . . . . 60 6.3.1. General Client Responsibilities . . . . . . . . . . . 62
6.3.2. Loading the Media Playlist File . . . . . . . . . . . 61 6.3.2. Loading the Media Playlist File . . . . . . . . . . . 63
6.3.3. Playing the Media Playlist File . . . . . . . . . . . 62 6.3.3. Playing the Media Playlist File . . . . . . . . . . . 64
6.3.4. Reloading the Media Playlist File . . . . . . . . . . 63 6.3.4. Reloading the Media Playlist File . . . . . . . . . . 65
6.3.5. Determining the Next Segment to Load . . . . . . . . 64 6.3.5. Determining the Next Segment to Load . . . . . . . . 66
6.3.6. Decrypting Encrypted Media Segments . . . . . . . . . 65 6.3.6. Decrypting Encrypted Media Segments . . . . . . . . . 66
6.3.7. Requesting Playlist Delta Updates . . . . . . . . . . 66 6.3.7. Requesting Playlist Delta Updates . . . . . . . . . . 67
6.3.8. Issuing Blocking Requests . . . . . . . . . . . . . . 66 6.3.8. Issuing Blocking Requests . . . . . . . . . . . . . . 68
7. Content Steering . . . . . . . . . . . . . . . . . . . . . . 67 7. Content Steering . . . . . . . . . . . . . . . . . . . . . . 69
7.1. Steering Manifest . . . . . . . . . . . . . . . . . . . . 67 7.1. Steering Manifest . . . . . . . . . . . . . . . . . . . . 69
7.2. Steering Query Parameters . . . . . . . . . . . . . . . . 68 7.2. Pathway Cloning . . . . . . . . . . . . . . . . . . . . . 70
7.3. Steering Client Responsibilities . . . . . . . . . . . . 69 7.3. Steering Query Parameters . . . . . . . . . . . . . . . . 72
8. Protocol Version Compatibility . . . . . . . . . . . . . . . 70 7.4. Steering Client Responsibilities . . . . . . . . . . . . 73
9. Playlist Examples . . . . . . . . . . . . . . . . . . . . . . 72 8. Protocol Version Compatibility . . . . . . . . . . . . . . . 74
9.1. Simple Media Playlist . . . . . . . . . . . . . . . . . . 72 9. Playlist Examples . . . . . . . . . . . . . . . . . . . . . . 76
9.2. Live Media Playlist Using HTTPS . . . . . . . . . . . . . 72 9.1. Simple Media Playlist . . . . . . . . . . . . . . . . . . 76
9.3. Playlist with Encrypted Media Segments . . . . . . . . . 72 9.2. Live Media Playlist Using HTTPS . . . . . . . . . . . . . 76
9.4. Multivariant Playlist . . . . . . . . . . . . . . . . . . 73 9.3. Playlist with Encrypted Media Segments . . . . . . . . . 76
9.5. Multivariant Playlist with I-Frames . . . . . . . . . . . 73 9.4. Multivariant Playlist . . . . . . . . . . . . . . . . . . 77
9.6. Multivariant Playlist with Alternative Audio . . . . . . 74 9.5. Multivariant Playlist with I-Frames . . . . . . . . . . . 77
9.7. Multivariant Playlist with Alternative Video . . . . . . 74 9.6. Multivariant Playlist with Alternative Audio . . . . . . 78
9.8. Session Data in a Multivariant Playlist . . . . . . . . . 75 9.7. Multivariant Playlist with Alternative Video . . . . . . 78
9.8. Session Data in a Multivariant Playlist . . . . . . . . . 79
9.9. CHARACTERISTICS Attribute Containing Multiple 9.9. CHARACTERISTICS Attribute Containing Multiple
Characteristics . . . . . . . . . . . . . . . . . . . . . 75 Characteristics . . . . . . . . . . . . . . . . . . . . . 79
9.10. EXT-X-DATERANGE Carrying SCTE-35 Tags . . . . . . . . . . 76 9.10. EXT-X-DATERANGE Carrying SCTE-35 Tags . . . . . . . . . . 80
9.11. Low-Latency Playlist . . . . . . . . . . . . . . . . . . 76 9.11. Low-Latency Playlist . . . . . . . . . . . . . . . . . . 80
9.12. Content Steering Playlist and Manifest . . . . . . . . . 77 9.12. Content Steering Playlist and Manifest . . . . . . . . . 81
10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 78 9.13. Content Steering Manifest with Pathway Clone . . . . . . 82
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 79 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 83
11.1. vnd.apple.mpegurl . . . . . . . . . . . . . . . . . . . 79 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 84
11.2. vnd.apple.steering-list . . . . . . . . . . . . . . . . 80 11.1. vnd.apple.mpegurl . . . . . . . . . . . . . . . . . . . 84
12. Security Considerations . . . . . . . . . . . . . . . . . . . 81 11.2. vnd.apple.steering-list . . . . . . . . . . . . . . . . 85
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 82 12. Security Considerations . . . . . . . . . . . . . . . . . . . 86
13.1. Normative References . . . . . . . . . . . . . . . . . . 82 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 87
13.2. Informative References . . . . . . . . . . . . . . . . . 86 13.1. Normative References . . . . . . . . . . . . . . . . . . 87
Appendix A. Changes from RFC 8216 . . . . . . . . . . . . . . . 86 13.2. Informative References . . . . . . . . . . . . . . . . . 91
Appendix B. Server Configuration Profiles . . . . . . . . . . . 88 Appendix A. Changes from RFC 8216 . . . . . . . . . . . . . . . 91
B.1. Low-Latency Server Configuration Profile . . . . . . . . 88 Appendix B. Server Configuration Profiles . . . . . . . . . . . 93
Appendix C. Low-Latency CDN Tune-in . . . . . . . . . . . . . . 90 B.1. Low-Latency Server Configuration Profile . . . . . . . . 93
Appendix D. Interstitials . . . . . . . . . . . . . . . . . . . 91 Appendix C. Low-Latency CDN Tune-in . . . . . . . . . . . . . . 95
D.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 91 Appendix D. Interstitials . . . . . . . . . . . . . . . . . . . 96
D.2. EXT-X-DATERANGE Schema for Interstitials . . . . . . . . 92 D.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 96
D.3. Interstitial query parameters . . . . . . . . . . . . . . 94 D.2. EXT-X-DATERANGE Schema for Interstitials . . . . . . . . 97
D.4. Client Behavior . . . . . . . . . . . . . . . . . . . . . 95 D.3. Interstitial query parameters . . . . . . . . . . . . . . 100
D.5. Example: Interstitial EXT-X-DATERANGE . . . . . . . . . . 95 D.4. Client Behavior . . . . . . . . . . . . . . . . . . . . . 100
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 96 D.5. Example: Interstitial EXT-X-DATERANGE . . . . . . . . . . 101
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 101
1. Introduction to HTTP Live Streaming 1. Introduction to HTTP Live Streaming
HTTP Live Streaming provides a reliable, cost-effective means of HTTP Live Streaming provides a reliable, cost-effective means of
delivering continuous and long-form video over the Internet. It delivering continuous and long-form video over the Internet. It
allows a receiver to adapt the bit rate of the media to the current allows a receiver to adapt the bit rate of the media to the current
network conditions in order to maintain uninterrupted playback at the network conditions in order to maintain uninterrupted playback at the
best possible quality. It supports interstitial content boundaries. best possible quality. It supports interstitial content boundaries.
It provides a flexible framework for media encryption. It can It provides a flexible framework for media encryption. It can
efficiently offer multiple renditions of the same content, such as efficiently offer multiple renditions of the same content, such as
skipping to change at page 18, line 6 skipping to change at page 18, line 6
VALUE VALUE
The value is a quoted-string which specifies the Variable Value. The value is a quoted-string which specifies the Variable Value.
This attribute is REQUIRED if the EXT-X-DEFINE tag has a NAME This attribute is REQUIRED if the EXT-X-DEFINE tag has a NAME
attribute. The quoted-string MAY be empty. attribute. The quoted-string MAY be empty.
IMPORT IMPORT
The value is a quoted-string which specifies the Variable Name and The value is a quoted-string which specifies the Variable Name and
indicates that its value is that of the variable of the same name indicates that its value is that of the variable of the same name
in the Multivariant Playlist. EXT-X-DEFINE tags containing the in the Multivariant Playlist. The valid character set is the same
as for the NAME attribute. EXT-X-DEFINE tags containing the
IMPORT attribute MUST NOT occur in Multivariant Playlists; they IMPORT attribute MUST NOT occur in Multivariant Playlists; they
are only allowed in Media Playlists. are only allowed in Media Playlists.
If the IMPORT attribute value does not match any Variable Name If the IMPORT attribute value does not match any Variable Name
declared in the Multivariant Playlist, or if the Media Playlist declared in the Multivariant Playlist, or if the Media Playlist
was not loaded from a Multivariant Playlist, the parser MUST fail was not loaded from a Multivariant Playlist, the parser MUST fail
to parse the Playlist. to parse the Playlist.
An EXT-X-DEFINE tag MUST contain either a NAME or an IMPORT An EXT-X-DEFINE tag MUST contain either a NAME or an IMPORT
attribute, but not both. attribute, but not both.
skipping to change at page 21, line 49 skipping to change at page 21, line 49
The EXT-X-SERVER-CONTROL tag allows the Server to indicate support The EXT-X-SERVER-CONTROL tag allows the Server to indicate support
for Delivery Directives (Section 6.2.5). Its format is:. for Delivery Directives (Section 6.2.5). Its format is:.
#EXT-X-SERVER-CONTROL:<attribute-list> #EXT-X-SERVER-CONTROL:<attribute-list>
The following attributes are defined: The following attributes are defined:
CAN-SKIP-UNTIL CAN-SKIP-UNTIL
Indicates that the Server can produce Playlist Delta Updates in Indicates that the Server can produce Playlist Delta Updates
response to the _HLS_skip Delivery Directive. Its value is the (Section 6.2.5.1) in response to the _HLS_skip Delivery Directive.
Skip Boundary, a decimal-floating-point number of seconds. The Its value is the Skip Boundary, a decimal-floating-point number of
Skip Boundary MUST be at least six times the Target Duration. seconds. The Skip Boundary MUST be at least six times the Target
Duration.
This attribute is OPTIONAL. It MAY appear in any Media Playlist. This attribute is OPTIONAL. It MAY appear in any Media Playlist.
CAN-SKIP-DATERANGES CAN-SKIP-DATERANGES
A value of YES indicates that the Server can produce Playlist The value is an enumerated-string whose value is YES if the Server
Delta Updates that skip older EXT-X-DATERANGE tags in addition to can produce Playlist Delta Updates (Section 6.2.5.1) that skip
Media Segments. older EXT-X-DATERANGE tags in addition to Media Segments.
This attribute is OPTIONAL. It REQUIRES the presence of the CAN- This attribute is OPTIONAL. It REQUIRES the presence of the CAN-
SKIP-UNTIL attribute. SKIP-UNTIL attribute.
HOLD-BACK HOLD-BACK
The value is a decimal-floating-point number of seconds that The value is a decimal-floating-point number of seconds that
indicates the server-recommended minimum distance from the end of indicates the server-recommended minimum distance from the end of
the Playlist at which clients should begin to play or to which the Playlist at which clients should begin to play or to which
they should seek, unless PART-HOLD-BACK applies. Its value MUST they should seek, unless PART-HOLD-BACK applies. Its value MUST
skipping to change at page 23, line 26 skipping to change at page 23, line 26
4.4.4.1. EXTINF 4.4.4.1. EXTINF
The EXTINF tag specifies the duration of a Media Segment. It applies The EXTINF tag specifies the duration of a Media Segment. It applies
only to the next Media Segment. This tag is REQUIRED for each Media only to the next Media Segment. This tag is REQUIRED for each Media
Segment. Its format is: Segment. Its format is:
#EXTINF:<duration>,[<title>] #EXTINF:<duration>,[<title>]
where duration is a decimal-floating-point or decimal-integer number where duration is a decimal-floating-point or decimal-integer number
(as described in Section 4.2) that specifies the duration of the (as described in Section 4.2) that specifies the duration of the
Media Segment in seconds. Durations SHOULD be decimal-floating- Media Segment in seconds and title is the remainder of the line
point, with enough accuracy to avoid perceptible error when segment following the comma. Durations SHOULD be decimal-floating-point,
with enough accuracy to avoid perceptible error when segment
durations are accumulated. However, if the compatibility version durations are accumulated. However, if the compatibility version
number is less than 3, durations MUST be integers. Durations that number is less than 3, durations MUST be integers. Durations that
are reported as integers SHOULD be rounded to the nearest integer. are reported as integers SHOULD be rounded to the nearest integer.
The remainder of the line following the comma is an optional human- The title is an optional human-readable informative title of the
readable informative title of the Media Segment expressed as UTF-8 Media Segment expressed as UTF-8 text. If title is zero length or
text. entirely whitespace, the title is considered to be missing.
4.4.4.2. EXT-X-BYTERANGE 4.4.4.2. EXT-X-BYTERANGE
The EXT-X-BYTERANGE tag indicates that a Media Segment is a sub-range The EXT-X-BYTERANGE tag indicates that a Media Segment is a sub-range
of the resource identified by its URI. It applies only to the next of the resource identified by its URI. It applies only to the next
URI line that follows it in the Playlist. Its format is: URI line that follows it in the Playlist. Its format is:
#EXT-X-BYTERANGE:<n>[@<o>] #EXT-X-BYTERANGE:<n>[@<o>]
where n is a decimal-integer indicating the length of the sub-range where n is a decimal-integer indicating the length of the sub-range
skipping to change at page 28, line 41 skipping to change at page 29, line 4
less than 90% of the segment bit rate of each Media Segment to which less than 90% of the segment bit rate of each Media Segment to which
it is applied and no greater than 110% of the segment bit rate of it is applied and no greater than 110% of the segment bit rate of
each Media Segment to which it is applied. each Media Segment to which it is applied.
4.4.4.9. EXT-X-PART 4.4.4.9. EXT-X-PART
The EXT-X-PART tag identifies a Partial Segment. It is OPTIONAL. The EXT-X-PART tag identifies a Partial Segment. It is OPTIONAL.
Its format is: Its format is:
#EXT-X-PART:<attribute-list> #EXT-X-PART:<attribute-list>
The following attributes are defined: The following attributes are defined:
URI URI
The value is the URI for the Partial Segment. This attribute is The value is a quoted-string containing the URI for the Partial
REQUIRED. Segment. This attribute is REQUIRED.
DURATION DURATION
The value is the duration of the Partial Segment as a decimal- The value is the duration of the Partial Segment as a decimal-
floating-point number of seconds. This attribute is REQUIRED. floating-point number of seconds. This attribute is REQUIRED.
INDEPENDENT INDEPENDENT
The value is an enumerated-string whose value is YES if the The value is an enumerated-string whose value is YES if the
Partial Segment contains an independent frame. This attribute is Partial Segment contains an independent frame. This attribute is
skipping to change at page 30, line 22 skipping to change at page 30, line 34
A client-defined quoted-string that specifies some set of A client-defined quoted-string that specifies some set of
attributes and their associated value semantics. All Date Ranges attributes and their associated value semantics. All Date Ranges
with the same CLASS attribute value MUST adhere to these with the same CLASS attribute value MUST adhere to these
semantics. This attribute is OPTIONAL. semantics. This attribute is OPTIONAL.
START-DATE START-DATE
A quoted-string containing the [ISO_8601] date/time at which the A quoted-string containing the [ISO_8601] date/time at which the
Date Range begins. This attribute is REQUIRED. Date Range begins. This attribute is REQUIRED.
CUE
An enumerated-string-list of Trigger Identifiers. The list
collectively indicates when to trigger an action associated with
the Date Range. The time to trigger the action MAY be at a point
of playback outside the Date Range expressed by the START-DATE and
duration. The defined Trigger Identifiers are: PRE, POST, and
ONCE. This attribute is OPTIONAL.
END-DATE END-DATE
A quoted-string containing the [ISO_8601] date/time at which the A quoted-string containing the [ISO_8601] date/time at which the
Date Range ends. It MUST be equal to or later than the value of Date Range ends. It MUST be equal to or later than the value of
the START-DATE attribute. This attribute is OPTIONAL. the START-DATE attribute. This attribute is OPTIONAL.
DURATION DURATION
The duration of the Date Range expressed as a decimal-floating- The duration of the Date Range expressed as a decimal-floating-
point number of seconds. It MUST NOT be negative. A single point number of seconds. It MUST NOT be negative. A single
instant in time (e.g., crossing a finish line) SHOULD be instant in time (e.g., crossing a finish line) SHOULD be
represented with a duration of 0. This attribute is OPTIONAL. represented with a duration of 0. This attribute is OPTIONAL.
PLANNED-DURATION PLANNED-DURATION
The expected duration of the Date Range expressed as a decimal- The expected duration of the Date Range expressed as a decimal-
floating-point number of seconds. It MUST NOT be negative. This floating-point number of seconds. It MUST NOT be negative. This
attribute SHOULD be used to indicate the expected duration of a attribute SHOULD be used to indicate the expected duration of a
skipping to change at page 31, line 19 skipping to change at page 31, line 41
END-ON-NEXT END-ON-NEXT
An enumerated-string whose value MUST be YES. This attribute An enumerated-string whose value MUST be YES. This attribute
indicates that the end of the range containing it is equal to the indicates that the end of the range containing it is equal to the
START-DATE of its Following Range. The Following Range is the START-DATE of its Following Range. The Following Range is the
Date Range of the same CLASS that has the earliest START-DATE Date Range of the same CLASS that has the earliest START-DATE
after the START-DATE of the range in question. This attribute is after the START-DATE of the range in question. This attribute is
OPTIONAL. OPTIONAL.
A CUE attribute containing PRE indicates that an action is to be
triggered before playback of the primary asset begins, regardless of
where playback begins in the primary asset.
A CUE attribute containing POST indicates that an action is to be
triggered after the primary asset has been played to its end without
error.
The presence of a CUE attribute that contains ONCE indicates that an
action is to be triggered once. It SHOULD NOT be triggered again,
even if the user replays the portion of the primary asset that
includes the trigger point.
A CUE attribute MUST NOT include both PRE and POST.
An EXT-X-DATERANGE tag with an END-ON-NEXT=YES attribute MUST have a An EXT-X-DATERANGE tag with an END-ON-NEXT=YES attribute MUST have a
CLASS attribute. Other EXT-X-DATERANGE tags with the same CLASS CLASS attribute. Other EXT-X-DATERANGE tags with the same CLASS
attribute MUST NOT specify Date Ranges that overlap. attribute MUST NOT specify Date Ranges that overlap.
An EXT-X-DATERANGE tag with an END-ON-NEXT=YES attribute MUST NOT An EXT-X-DATERANGE tag with an END-ON-NEXT=YES attribute MUST NOT
contain DURATION or END-DATE attributes. contain DURATION or END-DATE attributes.
A Date Range with neither a DURATION, an END-DATE, nor an END-ON- A Date Range with neither a DURATION, an END-DATE, nor an END-ON-
NEXT=YES attribute has an unknown duration, even if it has a PLANNED- NEXT=YES attribute has an unknown duration, even if it has a PLANNED-
DURATION. DURATION.
skipping to change at page 33, line 50 skipping to change at page 34, line 38
Playlist Playlist
Its format is: Its format is:
#EXT-X-SKIP:<attribute-list> #EXT-X-SKIP:<attribute-list>
The following attributes are defined: The following attributes are defined:
SKIPPED-SEGMENTS SKIPPED-SEGMENTS
The value is the count of Media Segments were replaced by the EXT- The value is a decimal-integer specifying the number of Media
X-SKIP tag. This attribute is REQUIRED. Segments replaced by the EXT-X-SKIP tag. This attribute is
REQUIRED.
RECENTLY-REMOVED-DATERANGES RECENTLY-REMOVED-DATERANGES
The value is a quoted-string consisting of a tab (0x9) delimited The value is a quoted-string consisting of a tab (0x9) delimited
list of EXT-X-DATERANGE IDs that have been removed from the list of EXT-X-DATERANGE IDs that have been removed from the
Playlist recently. See Section 6.2.5.1 for more information. Playlist recently. See Section 6.2.5.1 for more information.
This attribute is REQUIRED if the Client requested an update that This attribute is REQUIRED if the Client requested an update that
skips EXT-X-DATERANGE tags. The quoted-string MAY be empty. skips EXT-X-DATERANGE tags. The quoted-string MAY be empty.
4.4.5.3. EXT-X-PRELOAD-HINT 4.4.5.3. EXT-X-PRELOAD-HINT
skipping to change at page 34, line 35 skipping to change at page 35, line 27
TYPE TYPE
The value is an enumerated-string that specifies the type of the The value is an enumerated-string that specifies the type of the
hinted resource. If the value is PART, the resource is a Partial hinted resource. If the value is PART, the resource is a Partial
Segment. If the value is MAP, the resource is a Media Segment. If the value is MAP, the resource is a Media
Initialization Section. This attribute is REQUIRED. Initialization Section. This attribute is REQUIRED.
URI URI
The value is a URI identifying the hinted resource. It MUST match The value is a quoted-string containing a URI identifying the
the URI that will be subsequently added to the Playlist as a non- hinted resource. It MUST match the URI that will be subsequently
hinted resource (for example, the URI of an EXT-X-PART tag). The added to the Playlist as a non-hinted resource (for example, the
URI MAY be relative to the URI of the Playlist or it MAY be URI of an EXT-X-PART tag). The URI MAY be relative to the URI of
absolute. The hostname MAY differ from the hostname of the the Playlist or it MAY be absolute. The hostname MAY differ from
Playlist URI. This attribute is REQUIRED. the hostname of the Playlist URI. This attribute is REQUIRED.
BYTERANGE-START BYTERANGE-START
The value is a decimal-integer specifying the byte offset of the The value is a decimal-integer specifying the byte offset of the
first byte of the hinted resource, from the beginning of the first byte of the hinted resource, from the beginning of the
resource identified by the URI attribute. This attribute is resource identified by the URI attribute. This attribute is
OPTIONAL. Its absence implies a value of 0. OPTIONAL. Its absence implies a value of 0.
BYTERANGE-LENGTH BYTERANGE-LENGTH
skipping to change at page 35, line 31 skipping to change at page 36, line 23
The EXT-X-RENDITION-REPORT tag carries information about an The EXT-X-RENDITION-REPORT tag carries information about an
associated Rendition that is as up-to-date as the Playlist that associated Rendition that is as up-to-date as the Playlist that
contains it. Its format is: contains it. Its format is:
#EXT-X-RENDITION-REPORT:<attribute-list> #EXT-X-RENDITION-REPORT:<attribute-list>
The following attributes are defined: The following attributes are defined:
URI URI
The value is the URI for the Media Playlist of the specified The value is a quoted-string containing the URI for the Media
Rendition. It MUST be relative to the URI of the Media Playlist Playlist of the specified Rendition. It MUST be relative to the
containing the EXT-X-RENDITION-REPORT tag. This attribute is URI of the Media Playlist containing the EXT-X-RENDITION-REPORT
REQUIRED. tag. This attribute is REQUIRED.
LAST-MSN LAST-MSN
The value is a decimal-integer specifying the Media Sequence The value is a decimal-integer specifying the Media Sequence
Number of the last Media Segment currently in the specified Number of the last Media Segment currently in the specified
Rendition. If the Rendition contains Partial Segments then this Rendition. If the Rendition contains Partial Segments then this
value is the Media Sequence Number of the last Partial Segment. value is the Media Sequence Number of the last Partial Segment.
This attribute is REQUIRED. This attribute is REQUIRED.
LAST-PART LAST-PART
skipping to change at page 37, line 44 skipping to change at page 38, line 38
The value is a quoted-string which is a stable identifier for the The value is a quoted-string which is a stable identifier for the
URI within the Multivariant Playlist. All characters in the URI within the Multivariant Playlist. All characters in the
quoted-string MUST be from the following set: [a..z], [A..Z], quoted-string MUST be from the following set: [a..z], [A..Z],
[0..9], '+', '/', '=', '.', '-', and '_'. This attribute is [0..9], '+', '/', '=', '.', '-', and '_'. This attribute is
OPTIONAL. OPTIONAL.
The STABLE-RENDITION-ID allows the URI of a Rendition to change The STABLE-RENDITION-ID allows the URI of a Rendition to change
between two distinct downloads of the Multivariant Playlist. IDs between two distinct downloads of the Multivariant Playlist. IDs
are matched using a byte-for-byte comparison. are matched using a byte-for-byte comparison.
All EXT-X-MEDIA tags in a Multivariant Playlist with the same URI
value SHOULD use the same STABLE-RENDITION-ID.
DEFAULT DEFAULT
The value is an enumerated-string; valid strings are YES and NO. 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 If the value is YES, then the client SHOULD play this Rendition of
the content in the absence of information from the user indicating the content in the absence of information from the user indicating
a different choice. This attribute is OPTIONAL. Its absence a different choice. This attribute is OPTIONAL. Its absence
indicates an implicit value of NO. indicates an implicit value of NO.
AUTOSELECT AUTOSELECT
The value is an enumerated-string; valid strings are YES and NO. The value is an enumerated-string; valid strings are YES and NO.
This attribute is OPTIONAL. Its absence indicates an implicit This attribute is OPTIONAL. Its absence indicates an implicit
value of NO. If the value is YES, then the client MAY choose to value of NO. If the value is YES, then the client MAY choose to
play this Rendition in the absence of explicit user preference play this Rendition in the absence of explicit user preference
because it matches the current playback environment, such as because it matches the current playback environment, such as
chosen system language. chosen system language.
If the AUTOSELECT attribute is present, its value MUST be YES if If the AUTOSELECT attribute is present, its value MUST be YES if
the value of the DEFAULT attribute is YES. the value of the DEFAULT attribute is YES.
skipping to change at page 39, line 28 skipping to change at page 40, line 28
The value is a quoted-string that specifies an ordered, slash- The value is a quoted-string that specifies an ordered, slash-
separated ("/") list of parameters. separated ("/") list of parameters.
If the TYPE attribute is AUDIO, then the first parameter is a If the TYPE attribute is AUDIO, then the first parameter is a
count of audio channels expressed as a decimal-integer, indicating count of audio channels expressed as a decimal-integer, indicating
the maximum number of independent, simultaneous audio channels the maximum number of independent, simultaneous audio channels
present in any Media Segment in the Rendition. For example, an present in any Media Segment in the Rendition. For example, an
AC-3 5.1 Rendition would have a CHANNELS="6" attribute. AC-3 5.1 Rendition would have a CHANNELS="6" attribute.
If the TYPE attribute is AUDIO, then the second parameter If the TYPE attribute is AUDIO, then the second parameter
identifies the encoding of object-based audio used by the identifies non-channel-based audio coding, such as object-based
Rendition. This parameter is a comma-separated list of Audio audio, used by the Rendition. This parameter is a comma-separated
Object Coding Identifiers. It is optional. An Audio Object list of Audio Coding Identifiers. It is optional. An Audio
Coding Identifier is a string containing characters from the set Coding Identifier is a string containing characters from the set
[A..Z], [0..9], and '-'. They are codec-specific. A parameter [A..Z], [0..9], and '-'. They are codec-specific. A parameter
value of consisting solely of the dash character (0x2D) indicates value of consisting solely of the dash character (0x2D) indicates
that the audio is not object-based. that the audio is only channel-based.
No other CHANNELS parameters are currently defined. No other CHANNELS parameters are currently defined.
All audio EXT-X-MEDIA tags SHOULD have a CHANNELS attribute. If a All audio EXT-X-MEDIA tags SHOULD have a CHANNELS attribute. If a
Multivariant Playlist contains two Renditions with the same NAME Multivariant Playlist contains two Renditions with the same NAME
encoded with the same codec but a different number of channels, encoded with the same codec but a different number of channels,
then the CHANNELS attribute is REQUIRED; otherwise, it is then the CHANNELS attribute is REQUIRED; otherwise, it is
OPTIONAL. OPTIONAL.
The LANGUAGE and ASSOC-LANGUAGE attributes can be used, for example, The LANGUAGE and ASSOC-LANGUAGE attributes can be used, for example,
skipping to change at page 42, line 45 skipping to change at page 43, line 47
For example, a stream containing AAC low complexity (AAC-LC) audio For example, a stream containing AAC low complexity (AAC-LC) audio
and H.264 Main Profile Level 3.0 video would have a CODECS value and H.264 Main Profile Level 3.0 video would have a CODECS value
of "mp4a.40.2,avc1.4d401e". of "mp4a.40.2,avc1.4d401e".
Note that if a Variant Stream specifies one or more Renditions Note that if a Variant Stream specifies one or more Renditions
that include IMSC subtitles, the CODECS attribute MUST indicate that include IMSC subtitles, the CODECS attribute MUST indicate
this with a format identifier such as "stpp.ttml.im1t". this with a format identifier such as "stpp.ttml.im1t".
Every EXT-X-STREAM-INF tag SHOULD include a CODECS attribute. Every EXT-X-STREAM-INF tag SHOULD include a CODECS attribute.
SUPPLEMENTAL-CODECS
The SUPPLEMENTAL-CODECS attribute describes media samples with
both a backward-compatible base layer and a newer enhancement
layer. The base layers are specified in the CODECS attribute and
the enhancement layers are specified by the SUPPLEMENTAL-CODECS
attribute.
The value is a quoted-string containing a comma-separated list of
elements, where each element specifies an enhancement layer media
sample type that is present in one or more Renditions specified by
the Variant Stream.
Each element is a slash-separated list of fields. The first field
must be a valid CODECS format. If more than one field is present,
the remaining fields must be compatibility brands [MP4RA] that
pertain to that codec's bitstream.
Each member of SUPPLEMENTAL-CODECS must have its base layer codec
declared in the CODECS attribute.
For example, a stream containing Dolby Vision 8.4 content might
have a CODECS attribute including "hvc1.2.4.L153.b0", and a
SUPPLEMENTAL-CODECS attribute including "dvh1.08.07/db4h".
The SUPPLEMENTAL-CODECS attribute is OPTIONAL.
RESOLUTION RESOLUTION
The value is a decimal-resolution describing the optimal pixel The value is a decimal-resolution describing the optimal pixel
resolution at which to display all the video in the Variant resolution at which to display all the video in the Variant
Stream. Stream.
The RESOLUTION attribute is OPTIONAL but is recommended if the The RESOLUTION attribute is OPTIONAL but is recommended if the
Variant Stream includes video. Variant Stream includes video.
FRAME-RATE FRAME-RATE
skipping to change at page 45, line 4 skipping to change at page 46, line 35
This attribute is OPTIONAL. Its absence implies a value of SDR. This attribute is OPTIONAL. Its absence implies a value of SDR.
Clients that do not recognize the attribute value SHOULD NOT Clients that do not recognize the attribute value SHOULD NOT
select the Variant Stream. select the Variant Stream.
STABLE-VARIANT-ID STABLE-VARIANT-ID
The value is a quoted-string which is a stable identifier for the The value is a quoted-string which is a stable identifier for the
URI within the Multivariant Playlist. All characters in the URI within the Multivariant Playlist. All characters in the
quoted-string MUST be from the following set: [a..z], [A..Z], quoted-string MUST be from the following set: [a..z], [A..Z],
[0..9], '+', '/', '=', '.', '-', and '_'. This attribute is [0..9], '+', '/', '=', '.', '-', and '_'. This attribute is
OPTIONAL. OPTIONAL.
The STABLE-VARIANT-ID allows the URI of the Variant Stream to The STABLE-VARIANT-ID allows the URI of the Variant Stream to
change between two distinct downloads of the Multivariant change between two distinct downloads of the Multivariant
Playlist. IDs are matched using a byte-for-byte comparison. Playlist. IDs are matched using a byte-for-byte comparison.
All EXT-X-STREAM-INF tags in a Multivariant Playlist with the same
URI value SHOULD use the same STABLE-VARIANT-ID.
AUDIO AUDIO
The value is a quoted-string. It MUST match the value of the 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 GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the
Multivariant Playlist whose TYPE attribute is AUDIO. It indicates Multivariant Playlist whose TYPE attribute is AUDIO. It indicates
the set of audio Renditions that SHOULD be used when playing the the set of audio Renditions that SHOULD be used when playing the
presentation. See Section 4.4.6.2.1. presentation. See Section 4.4.6.2.1.
The AUDIO attribute is OPTIONAL. The AUDIO attribute is OPTIONAL.
skipping to change at page 49, line 30 skipping to change at page 51, line 17
The EXT-X-CONTENT-STEERING tag allows a server to provide a Content The EXT-X-CONTENT-STEERING tag allows a server to provide a Content
Steering (Section 7) Manifest. It is OPTIONAL. It MUST NOT appear Steering (Section 7) Manifest. It is OPTIONAL. It MUST NOT appear
more than once in a Multivariant Playlist. Its format is: more than once in a Multivariant Playlist. Its format is:
#EXT-X-CONTENT-STEERING:<attribute-list> #EXT-X-CONTENT-STEERING:<attribute-list>
The following attributes are defined: The following attributes are defined:
SERVER-URI SERVER-URI
The value is a URI to a Steering Manifest (Section 7.1). It MAY The value is a quoted-string containing a URI to a Steering
contain an asset identifier if the Steering Server requires it to Manifest (Section 7.1). It MAY contain an asset identifier if the
produce the Steering Manifest. It MAY use the "data" URI scheme Steering Server requires it to produce the Steering Manifest. It
to provide the manifest in-line in the Multivariant Playlist; in MAY use the "data" URI scheme to provide the manifest in-line in
that case, subsequent manifest reloads MAY be redirected to a the Multivariant Playlist; in that case, subsequent manifest
remote Steering Server using the RELOAD-URI parameter (see reloads MAY be redirected to a remote Steering Server using the
Section 7.1). This attribute is REQUIRED. RELOAD-URI parameter (see Section 7.1). This attribute is
REQUIRED.
PATHWAY-ID PATHWAY-ID
The value is a quoted-string that identifies the Pathway that MUST The value is a quoted-string that identifies the Pathway that MUST
be applied by any client that supports Content Steering (see be applied by any client that supports Content Steering (see
Section 7.3) until the initial Steering Manifest has been Section 7.4) until the initial Steering Manifest has been
obtained. Its value MUST be a legal Pathway ID according to obtained. Its value MUST be a legal Pathway ID according to
Section 7.1 that is specified by the PATHWAY-ID attribute of one Section 7.1 that is specified by the PATHWAY-ID attribute of one
or more Variant Streams in the Multivariant Playlist. This or more Variant Streams in the Multivariant Playlist. This
attribute is OPTIONAL. attribute is OPTIONAL.
5. Key Files 5. Key Files
5.1. Structure of Key Files 5.1. Structure of Key Files
An EXT-X-KEY tag with a URI attribute identifies a Key file. A Key An EXT-X-KEY tag with a URI attribute identifies a Key file. A Key
skipping to change at page 54, line 17 skipping to change at page 55, line 47
The server MAY limit the availability of Media Segments by removing The server MAY limit the availability of Media Segments by removing
Media Segments from the Playlist file (Section 6.2.1). If Media Media Segments from the Playlist file (Section 6.2.1). If Media
Segments are to be removed, the Playlist file MUST contain an EXT-X- Segments are to be removed, the Playlist file MUST contain an EXT-X-
MEDIA-SEQUENCE tag. Its value MUST be incremented by 1 for every MEDIA-SEQUENCE tag. Its value MUST be incremented by 1 for every
Media Segment that is removed from the Playlist file; it MUST NOT Media Segment that is removed from the Playlist file; it MUST NOT
decrease or wrap. Clients can malfunction if each Media Segment does decrease or wrap. Clients can malfunction if each Media Segment does
not have a consistent, unique Media Sequence Number. not have a consistent, unique Media Sequence Number.
EXT-X-PART tags SHOULD be removed from the Playlist after they are EXT-X-PART tags SHOULD be removed from the Playlist after they are
greater than three Target Durations from the end of the Playlist. greater than three Target Durations from the end of the Playlist.
Clients MUST be able to download the Partial Segment for at least
three Target Durations after the EXT-X-PART tag is removed from the
Playlist.
Media Segments and EXT-X-PART tags MUST be removed from the Playlist Media Segments and EXT-X-PART tags MUST be removed from the Playlist
in the order that they appear in the Playlist; otherwise, client in the order that they appear in the Playlist; otherwise, client
playback can malfunction. playback can malfunction.
The server MUST NOT remove a Media Segment from a Playlist file The server MUST NOT remove a Media Segment from a Playlist file
without an EXT-X-ENDLIST tag if that would produce a Playlist whose without an EXT-X-ENDLIST tag if that would produce a Playlist whose
duration is less than three times the Target Duration. Doing so can duration is less than three times the Target Duration. Doing so can
trigger playback stalls. trigger playback stalls.
skipping to change at page 58, line 14 skipping to change at page 59, line 46
EXT-X-SERVER-CONTROL tag. A Server can also offer support for EXT-X-SERVER-CONTROL tag. A Server can also offer support for
Playlist Delta Updates that skip older EXT-X-DATERANGE tags by adding Playlist Delta Updates that skip older EXT-X-DATERANGE tags by adding
the CAN-SKIP-DATERANGES attribute to the EXT-X-SERVER-CONTROL tag. the CAN-SKIP-DATERANGES attribute to the EXT-X-SERVER-CONTROL tag.
When a Server receives a request for a Playlist containing the CAN- When a Server receives a request for a Playlist containing the CAN-
SKIP-UNTIL attribute but no EXT-X-ENDLIST tag, and the requested URI SKIP-UNTIL attribute but no EXT-X-ENDLIST tag, and the requested URI
contains an _HLS_skip directive whose value is YES or v2, it MUST contains an _HLS_skip directive whose value is YES or v2, it MUST
respond with a Playlist Delta Update. respond with a Playlist Delta Update.
The Playlist Delta Update is a version of the Playlist in which Media The Playlist Delta Update is a version of the Playlist in which Media
Segments that are further from the end of the Playlist than the Skip Segments that are further from the end of the last (Parent) Media
Boundary (Section 4.4.3.8), as well as their associated tags, are Segment in the Playlist than the Skip Boundary (Section 4.4.3.8), as
replaced by an EXT-X-SKIP tag (Section 4.4.5.2). well as their associated tags, are replaced by an EXT-X-SKIP tag
(Section 4.4.5.2).
When the _HLS_skip directive has a value of v2, the Playlist Delta When the _HLS_skip directive has a value of v2, the Playlist Delta
Update additionally MUST NOT contain EXT-X-DATERANGE tags that were Update additionally MUST NOT contain EXT-X-DATERANGE tags that were
added to the Playlist more than CAN-SKIP-UNTIL seconds before the added to the Playlist more than CAN-SKIP-UNTIL seconds before the
Playlist request. The RECENTLY-REMOVED-DATERANGES attribute of the Playlist request. The RECENTLY-REMOVED-DATERANGES attribute of the
EXT-X-SKIP tag MUST list the date ranges that were removed from the EXT-X-SKIP tag MUST list the date ranges that were removed from the
Playlist within CAN-SKIP-UNTIL seconds of the Playlist request. Playlist within CAN-SKIP-UNTIL seconds of the Playlist request.
All tags that were not skipped MUST remain in the Playlist Delta All tags that were not skipped MUST remain in the Playlist Delta
Update. Update.
skipping to change at page 68, line 5 skipping to change at page 69, line 33
identical Media Segments. identical Media Segments.
7.1. Steering Manifest 7.1. Steering Manifest
Content Steering is accomplished by having clients periodically read Content Steering is accomplished by having clients periodically read
a Steering Manifest from a Steering Server. The Steering Manifest a Steering Manifest from a Steering Server. The Steering Manifest
identifies the available Pathways and their priority order. identifies the available Pathways and their priority order.
The Steering Manifest response is a JSON object: The Steering Manifest response is a JSON object:
{ {
"VERSION": number, // REQUIRED, must be an integer "VERSION": number, // REQUIRED, must be an integer
"TTL": number, // REQUIRED, number of seconds "TTL": number, // REQUIRED, number of seconds
"RELOAD-URI": string, // OPTIONAL, URI "RELOAD-URI": string, // OPTIONAL, URI
"PATHWAY-PRIORITY": [ // REQUIRED, array of Pathway IDs "PATHWAY-PRIORITY": // REQUIRED, array of Pathway IDs
One or more Pathway IDs in order of preference [
] One or more Pathway IDs in order of preference
} ],
"PATHWAY-CLONES": // OPTIONAL, array of Pathway Clone objects
[
One or more Pathway Clone objects. See Section 7.2.
]
}
A client MUST ignore any key of the Steering Manifest that it does A client MUST ignore any key of the Steering Manifest that it does
not recognize. Note that manifest keys are case-sensitive. not recognize. Note that manifest keys are case-sensitive.
This specification defines Steering Manifest VERSION 1. A client This specification defines Steering Manifest VERSION 1. A client
MUST refuse to use a Steering Manifest with an unrecognized VERSION MUST refuse to use a Steering Manifest with an unrecognized VERSION
number. number.
The TTL specifies how many seconds the client MUST wait before The TTL specifies how many seconds the client MUST wait before
reloading the Steering Manifest. The recommended value is 300 reloading the Steering Manifest. The recommended value is 300
skipping to change at page 68, line 45 skipping to change at page 70, line 29
preference, with the first being most preferred. A Steering Manifest preference, with the first being most preferred. A Steering Manifest
MUST contain at least one Pathway. A Pathway ID in the PATHWAY- MUST contain at least one Pathway. A Pathway ID in the PATHWAY-
PRIORITY array MUST NOT appear more than once. Clients MUST ignore PRIORITY array MUST NOT appear more than once. Clients MUST ignore
unrecognized Pathway IDs in the PATHWAY-PRIORITY array. unrecognized Pathway IDs in the PATHWAY-PRIORITY array.
Note that it is important for the most-preferred Pathway of the Note that it is important for the most-preferred Pathway of the
initial Steering Manifest to agree with the Multivariant Playlist. initial Steering Manifest to agree with the Multivariant Playlist.
Immediately redirecting a player to a different Pathway on startup Immediately redirecting a player to a different Pathway on startup
will delay playback and increase network utilization. will delay playback and increase network utilization.
7.2. Steering Query Parameters 7.2. Pathway Cloning
A steering server can introduce novel Pathways by cloning existing
ones. A Pathway Clone is produced by taking an existing Pathway and
applying well-defined replacements to the Rendition URIs of every
Pathway member.
A Pathway Clone object is a JSON object:
{
"BASE-ID": string, // REQUIRED. Pathway ID of the Base Pathway
"ID": string, // REQUIRED. Pathway ID for the Pathway Clone
"URI-REPLACEMENT": // REQUIRED. URI replacement rules
{
"HOST": string, // OPTIONAL. Hostname for cloned URIs
"PARAMS": // OPTIONAL. Query parameters for cloned URIs
{
JSON object where keys are query parameter names
and values are query parameter values
},
"PER-VARIANT-URIS": // OPTIONAL. URI overrides per Variant Stream
{
JSON object where keys are STABLE-VARIANT-ID strings
and values are replacement absolute URIs
},
"PER-RENDITION-URIS": // OPTIONAL. URI overrides per Rendition
{
JSON object where keys are STABLE-RENDITION-ID strings
and values are replacement absolute URIs
}
}
}
Clone a Pathway by following these steps:
Identify the Base Pathway, whose ID is the Pathway Clone BASE-ID
string.
Duplicate the Base Pathway. This is functionally equivalent to
(a) duplicating all EXT-X-STREAM-INF and EXT-X-I-FRAME-STREAM-INF
tags whose PATHWAY-ID attributes specify the base PathwayID, (b)
duplicating any EXT-X-MEDIA tags whose GROUP-ID appears as the
AUDIO, VIDEO or SUBTITLE attribute of one of the duplicated EXT-X-
STREAM-INF / EXT-X-I-FRAME-STREAM-INF tags, and (c) giving each
duplicated Rendition Group a new group ID.
Set the ID of the new Pathway to the Pathway Clone ID string. For
every Rendition URI in the new Pathway, resolve it against its
base if necessary and then replace its hostname with the Pathway
Clone HOST string (if present).
Append each name/value pair of the PARAMS object (if present), in
the UTF-8 order of the names, as a query parameter to every
Rendition URI in the new Pathway. If a parameter of the same name
is already present in the Rendition URI, replace it with the one
from the PARAMS object.
If the STABLE-VARIANT-ID of a Variant Stream on the new Pathway
appears in PER-VARIANT-URIS, set its URI to be the corresponding
value in PER-VARIANT-URIS.
If the STABLE-RENDITION-ID of a Rendition referred to by a Variant
Stream on the new Pathway appears in PER-RENDITION-URIS, set its
URI to be the corresponding value in PER-RENDITION-URIS.
A Pathway Clone MAY use another Pathway Clone as its base if it
appears earlier in the PATHWAY-CLONES array.
The Pathway ID that is defined by a Pathway Clone MAY appear in the
PATHWAY-PRIORITY list, in any position.
The HOST string of a Pathway Clone MUST be non-empty if it is
present.
The name of a PARAMS object name/value pair MUST be non-empty. The
names and values in a PARAMS object MUST be able to form a valid URI
query parameter. Any reserved characters in those strings MUST be
percent-encoded [RFC3986].
A client that does not have the definition of a Pathway specified by
the BASE-ID string of a Pathway Clone object MUST ignore the Pathway
Clone. The client has the definition of a Pathway if it appears in
the original playlist, or appears in the Pathway Clones array from
the current Steering Manifest.
Client support of Pathway Cloning is OPTIONAL. A steering server
SHOULD ensure that the PATHWAY-PRIORITY list always contains at least
one Pathway defined in the Multivariant Playlist.
7.3. Steering Query Parameters
The client sends a request with the Steering Manifest URI to obtain The client sends a request with the Steering Manifest URI to obtain
the Steering Manifest. It SHOULD add the following query parameters the Steering Manifest. It SHOULD add the following query parameters
to the URI: to the URI:
_HLS_pathway="<CURRENT-PATHWAY-ID>" _HLS_pathway="<CURRENT-PATHWAY-ID>"
_HLS_throughput=<THROUGHPUT> _HLS_throughput=<THROUGHPUT>
CURRENT-PATHWAY-ID is the ID of the Pathway currently applied by the CURRENT-PATHWAY-ID is the ID of the Pathway currently applied by the
skipping to change at page 69, line 21 skipping to change at page 73, line 11
THROUGHPUT is an integer number of bits per second. It represents a THROUGHPUT is an integer number of bits per second. It represents a
current prediction of media download throughput made by the client current prediction of media download throughput made by the client
for the applied Pathway. The exact method of bit rate estimation for the applied Pathway. The exact method of bit rate estimation
will vary by client. will vary by client.
HTTP proxy caches SHOULD be configured to exclude highly variable HTTP proxy caches SHOULD be configured to exclude highly variable
query parameters such as _HLS_throughput from their cache keys, or query parameters such as _HLS_throughput from their cache keys, or
treat the Steering Manifest response as non-cacheable. treat the Steering Manifest response as non-cacheable.
7.3. Steering Client Responsibilities 7.4. Steering Client Responsibilities
A Pathway is applied by first choosing a particular Pathway ID. The A Pathway is applied by first choosing a particular Pathway ID. The
set of Variant Streams to which the client is allowed to switch is set of Variant Streams to which the client is allowed to switch is
then restricted to those belonging to that Pathway. If a client is then restricted to those belonging to that Pathway. If a client is
currently playing a Variant Stream that does not belong to the currently playing a Variant Stream that does not belong to the
applied Pathway, it MUST switch to one that does. applied Pathway, it MUST switch to one that does.
A client that supports Content Steering MUST implement the following A client that supports Content Steering MUST implement the following
algorithm: algorithm:
1. When playing a Multivariant Playlist with an EXT-X-CONTENT- 1. When playing a Multivariant Playlist with an EXT-X-CONTENT-
STEERING tag, load the Steering Manifest. A client that wishes STEERING tag, load the Steering Manifest. A client that wishes
to play before it obtains the Steering Manifest SHOULD apply the to play before it obtains the Steering Manifest SHOULD apply the
Pathway specified by the PATHWAY-ID of the EXT-X-CONTENT-STEERING Pathway specified by the PATHWAY-ID of the EXT-X-CONTENT-STEERING
tag. If the EXT-X-CONTENT-STEERING tag does not contain a tag. If the EXT-X-CONTENT-STEERING tag does not contain a
PATHWAY-ID attribute, the client MAY use any Pathway until it PATHWAY-ID attribute, the client MAY use any Pathway until it
obtains the Steering Manifest. obtains the Steering Manifest.
2. When a Steering Manifest is received, perform a Content Steering 2. When a Steering Manifest is received, perform Pathway Cloning on
evaluation (step 5). any members of the PATHWAY-CLONES array. Then, perform a Content
Steering evaluation (step 5).
3. If all the Variant Streams from the current Pathway fail with a 3. If all the Variant Streams from the current Pathway fail with a
network error, mark the current Pathway as penalized, and perform network error, mark the current Pathway as penalized, and perform
a Content Steering evaluation (step 5). a Content Steering evaluation (step 5).
4. If the client decides that the Pathway has been penalized long 4. If the client decides that the Pathway has been penalized long
enough that it may have recovered, it SHOULD un-penalize the enough that it may have recovered, it SHOULD un-penalize the
Pathway and perform a Content Steering evaluation (step 5). Pathway and perform a Content Steering evaluation (step 5).
5. Content Steering evaluation: If no Pathway is currently applied, 5. Content Steering evaluation: If no Pathway is currently applied,
skipping to change at page 71, line 24 skipping to change at page 75, line 16
A Media Playlist MUST indicate an EXT-X-VERSION of 6 or higher if it A Media Playlist MUST indicate an EXT-X-VERSION of 6 or higher if it
contains: contains:
o The EXT-X-MAP tag in a Media Playlist that does not contain EXT- o The EXT-X-MAP tag in a Media Playlist that does not contain EXT-
X-I-FRAMES-ONLY. X-I-FRAMES-ONLY.
Note that in protocol version 6, the semantics of the EXT- Note that in protocol version 6, the semantics of the EXT-
X-TARGETDURATION tag changed slightly. In protocol version 5 and X-TARGETDURATION tag changed slightly. In protocol version 5 and
earlier it indicated the maximum segment duration; in protocol earlier it indicated the maximum segment duration; in protocol
version 6 and later it indicates the the maximum segment duration version 6 and later it indicates the maximum segment duration rounded
rounded to the nearest integer number of seconds. to the nearest integer number of seconds.
A Multivariant Playlist MUST indicate an EXT-X-VERSION of 7 or higher A Multivariant Playlist MUST indicate an EXT-X-VERSION of 7 or higher
if it contains: if it contains:
o "SERVICE" values for the INSTREAM-ID attribute of the EXT-X-MEDIA o "SERVICE" values for the INSTREAM-ID attribute of the EXT-X-MEDIA
tag. tag.
A Playlist MUST indicate an EXT-X-VERSION of 8 or higher if it A Playlist MUST indicate an EXT-X-VERSION of 8 or higher if it
contains: contains:
skipping to change at page 78, line 36 skipping to change at page 82, line 36
{ {
"VERSION": 1, "VERSION": 1,
"TTL": 300, "TTL": 300,
"RELOAD-URI": "https://example.com/steering?video=00012&session=123", "RELOAD-URI": "https://example.com/steering?video=00012&session=123",
"PATHWAY-PRIORITY": [ "PATHWAY-PRIORITY": [
"CDN-A", "CDN-A",
"CDN-B" "CDN-B"
] ]
} }
9.13. Content Steering Manifest with Pathway Clone
This example extends the previous example with a Steering Manifest
that includes a Pathway Clone.
{
"VERSION": 1,
"TTL": 300,
"PATHWAY-PRIORITY": [
"CDN-A-CLONE",
"CDN-A"
],
"PATHWAY-CLONES": [
{
"BASE-ID": "CDN-A",
"ID": "CDN-A-CLONE",
"URI-REPLACEMENT":
{
"HOST": "backup2.example.com",
"PARAMS":
{
"token": "dkfs1239414"
}
"PER-RENDITION-URIS": {
"Audio-37262": "https://q.example.com/video12/eng.m3u8"
}
}
}
]
}
The Pathway Clone with ID "CDN-A-CLONE" will have the URIs:
https://backup2.example.com/videos/video12/low/video.m3u8?token=dkfs1239414
https://backup2.example.com/videos/video12/hi/video.m3u8?token=dkfs1239414
https://q.example.com/video12/eng.m3u8
10. Contributors 10. Contributors
Significant contributions to the design of this protocol were made by Significant contributions to the design of this protocol were made by
Jim Batson, David Biderman, Bill May, Roger Pantos, Alan Tseng, and Jim Batson, David Biderman, Bill May, Roger Pantos, Alan Tseng, and
Eryk Vershen. Stuart Cheshire helped edit the specification. Eryk Vershen. Stuart Cheshire helped edit the specification.
Significant contributions to the update of this protocol were made by Significant contributions to the update of this protocol were made by
Bill May, Eryk Vershen, and Peng Zhou. Bill May, Eryk Vershen, and Peng Zhou.
In particular, Bill May co-authored the first edition of HTTP Live In particular, Bill May co-authored the first edition of HTTP Live
skipping to change at page 80, line 52 skipping to change at page 85, line 52
Applications that use this media type: Multimedia applications such Applications that use this media type: Multimedia applications such
as the iPhone media player in iOS 15.0 and later and QuickTime Player as the iPhone media player in iOS 15.0 and later and QuickTime Player
in macOS Monterey and later. in macOS Monterey and later.
Fragment identifier considerations: no Fragment Identifiers are Fragment identifier considerations: no Fragment Identifiers are
defined for this media type. defined for this media type.
Query parameter considerations: the definition of all query Query parameter considerations: the definition of all query
parameters for resources of this media type which begin with the parameters for resources of this media type which begin with the
string "_HLS_" are reserved by this specification. Currently-defined string "_HLS_" are reserved by this specification. Currently-defined
query parameters are specified in Section 7.2. query parameters are specified in Section 7.3.
Additional information: Additional information:
Deprecated alias names for this type: none Deprecated alias names for this type: none
Magic number(s): none Magic number(s): none
File extension(s): .json (see Section 7.1) File extension(s): .json (see Section 7.1)
Macintosh file type code(s): none Macintosh file type code(s): none
Person & email address to contact for further information: David Person & email address to contact for further information: David
Singer, singer AT apple.com. Singer, singer AT apple.com.
skipping to change at page 86, line 18 skipping to change at page 91, line 18
Information Interchange (7-Bit ASCII)", ANSI X3.4, Information Interchange (7-Bit ASCII)", ANSI X3.4,
December 1986. December 1986.
[WebVTT] World Wide Web Consortium (W3C), ""WebVTT: The Web Video [WebVTT] World Wide Web Consortium (W3C), ""WebVTT: The Web Video
Text Tracks Format", Draft Community Group Report", July Text Tracks Format", Draft Community Group Report", July
2013, <http://dev.w3.org/html5/webvtt/>. 2013, <http://dev.w3.org/html5/webvtt/>.
13.2. Informative References 13.2. Informative References
[ID3] ID3.org, "The ID3 audio file data tagging format", [ID3] ID3.org, "The ID3 audio file data tagging format",
<http://www.id3.org/Developer_Information>. <https://id3.org/Developer%20Information>.
[M3U] "M3U (MP3 URL)", <http://wikipedia.org/wiki/M3U>. [M3U] "M3U (MP3 URL)", <http://wikipedia.org/wiki/M3U>.
[MCT] Apple Inc., "QuickTime File Format Specification - Media [MCT] Apple Inc., "QuickTime File Format Specification - Media
Characteristic Tags", <https://developer.apple.com/library Characteristic Tags", <https://developer.apple.com/library
/archive/documentation/QuickTime/QTFF/QTFFChap2/ /archive/documentation/QuickTime/QTFF/QTFFChap2/
qtff2.html>. qtff2.html>.
[MP4RA] International Organization for Standardization, "Official
Registration Authority for the ISOBMFF family of
standards", <https://mp4ra.org>.
[SampleEnc] [SampleEnc]
Apple Inc., "MPEG-2 Stream Encryption Format for HTTP Live Apple Inc., "MPEG-2 Stream Encryption Format for HTTP Live
Streaming", Streaming",
<https://developer.apple.com/library/ios/documentation/ <https://developer.apple.com/library/ios/documentation/
AudioVideo/Conceptual/HLS_Sample_Encryption/>. AudioVideo/Conceptual/HLS_Sample_Encryption/>.
[UNICODE] The Unicode Consortium, "The Unicode Standard", [UNICODE] The Unicode Consortium, "The Unicode Standard",
<https://www.unicode.org/versions/latest/>. <https://www.unicode.org/versions/latest/>.
Appendix A. Changes from RFC 8216 Appendix A. Changes from RFC 8216
skipping to change at page 87, line 5 skipping to change at page 92, line 7
A "Multivariant Playlist" was formerly called a "Master Playlist". A "Multivariant Playlist" was formerly called a "Master Playlist".
The following tags have been added: EXT-X-GAP, EXT-X-BITRATE, EXT-X- The following tags have been added: EXT-X-GAP, EXT-X-BITRATE, EXT-X-
SERVER-CONTROL, EXT-X-SKIP, EXT-X-PART-INF, EXT-X-PART, EXT-X- SERVER-CONTROL, EXT-X-SKIP, EXT-X-PART-INF, EXT-X-PART, EXT-X-
PRELOAD-HINT, EXT-X-RENDITION-REPORT, and EXT-X-CONTENT-STEERING. PRELOAD-HINT, EXT-X-RENDITION-REPORT, and EXT-X-CONTENT-STEERING.
The EXT-X-DEFINE tag was introduced to support variable substitution. The EXT-X-DEFINE tag was introduced to support variable substitution.
IMSC has been added to the set of recognized subtitle formats. IMSC has been added to the set of recognized subtitle formats.
The VIDEO-RANGE, ALLOWED-CPC, STABLE-VARIANT-ID, and PATHWAY-ID The VIDEO-RANGE, ALLOWED-CPC, STABLE-VARIANT-ID, PATHWAY-ID, and
attributes have been added to the EXT-X-STREAM-INF and EXT-X-I-FRAME- SUPPLEMENTAL-CODECS attributes have been added to the EXT-X-STREAM-
STREAM-INF tags. INF and EXT-X-I-FRAME-STREAM-INF tags.
The STABLE-RENDITION-ID attribute has been added to the EXT-X-MEDIA The STABLE-RENDITION-ID attribute has been added to the EXT-X-MEDIA
tag. tag.
The CUE attribute has been added to the EXT-X-DATERANGE tag.
TYPE-1 has been added as a defined value for the HDCP-LEVEL TYPE-1 has been added as a defined value for the HDCP-LEVEL
attribute. attribute.
Redefined the CHANNELS attribute value. Redefined the CHANNELS attribute value.
The minimum new segment publication latency has been removed from The minimum new segment publication latency has been removed from
server timing model. server timing model.
The Availability Duration of a Media Segment now depends on the The Availability Duration of a Media Segment now depends on the
presence of an EXT-X-ENDLIST tag. presence of an EXT-X-ENDLIST tag.
skipping to change at page 87, line 47 skipping to change at page 92, line 51
Delta Updates and Blocking Playlist Reload. Delta Updates and Blocking Playlist Reload.
A Low-Latency Server Configuration Profile was added to Appendix B. A Low-Latency Server Configuration Profile was added to Appendix B.
Correct the reference for the semantics of the CHARACTERISTICS Correct the reference for the semantics of the CHARACTERISTICS
attribute. attribute.
Appendix C was added. Appendix C was added.
Content Steering (Section 7) was defined to allow alternate Pathways Content Steering (Section 7) was defined to allow alternate Pathways
to the presentation. to the presentation, including Pathway Cloning.
The IANA media type vnd.apple.steering-list (Section 11.2) was added. The IANA media type vnd.apple.steering-list (Section 11.2) was added.
Interstitials (Appendix D) were defined to simplify inserting bumpers Interstitials (Appendix D) were defined to simplify inserting bumpers
or advertising content. or advertising content.
The type enumerated-string-list was added to the possible The type enumerated-string-list was added to the possible
AttributeValues. AttributeValues.
Clarified the expected availability of Partial Segments.
There have been a number of minor editorial changes. There have been a number of minor editorial changes.
Appendix B. Server Configuration Profiles Appendix B. Server Configuration Profiles
Server Configuration Profiles specify additional requirements that Server Configuration Profiles specify additional requirements that
optimize delivery of HTTP Live Streaming for certain use cases. optimize delivery of HTTP Live Streaming for certain use cases.
B.1. Low-Latency Server Configuration Profile B.1. Low-Latency Server Configuration Profile
Playing at a reduced delay from live requires certain stream and Playing at a reduced delay from live requires certain stream and
skipping to change at page 94, line 32 skipping to change at page 99, line 44
X-<client-attribute> X-<client-attribute>
Client-defined attributes are allowed. See the discussion under Client-defined attributes are allowed. See the discussion under
EXT-X-DATERANGE (Section 4.4.5.1). EXT-X-DATERANGE (Section 4.4.5.1).
A client with specific knowledge of the presentation rules for an A client with specific knowledge of the presentation rules for an
asset MAY override restrictions specified by the X-RESTRICT attribute asset MAY override restrictions specified by the X-RESTRICT attribute
if such an action is consistent with those rules. if such an action is consistent with those rules.
Two or more interstitials scheduled at the same START-DATE SHOULD be For an Interstitial EXT-X-DATERANGE tag, the action whose trigger
time is controlled by the CUE attribute is the playback of the
interstitial.
An Interstitial whose EXT-X-DATERANGE tag does not contain a CUE
attribute SHOULD be scheduled for playback at the start of the Date
Range.
Multiple interstitials that are scheduled for the same time SHOULD be
played in the order that their EXT-X-DATERANGE tags appear in the played in the order that their EXT-X-DATERANGE tags appear in the
playlist. In that case, X-RESUME-OFFSET values are cumulative. Playlist. In that case, X-RESUME-OFFSET values are cumulative.
Multiple interstitials that are scheduled for the same time MUST
occur in the same order in all Media Playlists of a Multivariant
Playlist.
If present, the duration (or planned duration) of the Date Range
SHOULD be the duration of the interstitial asset(s), even if a CUE
attribute allows the interstitial to start at some time other than
the START-DATE.
D.3. Interstitial query parameters D.3. Interstitial query parameters
Packagers producing Interstitial EXT-X-DATERANGE tags SHOULD ensure Packagers producing Interstitial EXT-X-DATERANGE tags SHOULD ensure
that X-ASSET-URI and X-ASSET-LIST requests contain an that X-ASSET-URI and X-ASSET-LIST requests contain an
_HLS_interstitial_id query parameter whose value is the (quoted) ID _HLS_interstitial_id query parameter whose value is the (quoted) ID
attribute value of the EXT-X-DATERANGE tag. This supports attribute value of the EXT-X-DATERANGE tag. This supports
interoperability between content vendors and decisioning servers. interoperability between content vendors and decisioning servers.
Certain clients support setting the X-PLAYBACK-SESSION-ID request Certain clients support setting the X-PLAYBACK-SESSION-ID request
header with a common, globally-unique value on every HTTP request header with a common, globally-unique value on every HTTP request
associated with a particular playback session. Such clients SHOULD associated with a particular playback session. Such clients SHOULD
add an _HLS_primary_id query parameter to X-ASSET-URI and X-ASSET- add an _HLS_primary_id query parameter to X-ASSET-URI and X-ASSET-
LIST requests whose value matches the X-PLAYBACK-SESSION-ID of the LIST requests whose value matches the X-PLAYBACK-SESSION-ID of the
primary playback session. This provides useful context for primary playback session. This provides useful context for
decisioning servers. decisioning servers.
Clients that cannot set the the X-PLAYBACK-SESSION-ID request header Clients that cannot set the X-PLAYBACK-SESSION-ID request header
SHOULD create a globally-unique value for every primary playback SHOULD create a globally-unique value for every primary playback
session, and provide this value as an _HLS_primary_id query parameter session, and provide this value as an _HLS_primary_id query parameter
on both the request for the primary asset and the X-ASSET-URI and X- on both the request for the primary asset and the X-ASSET-URI and X-
ASSET-LIST requests made on behalf of that asset. ASSET-LIST requests made on behalf of that asset.
D.4. Client Behavior D.4. Client Behavior
If an interstitial specifies a non-zero resume offset and the user If an interstitial specifies a non-zero resume offset and the user
tries to seek to a time between the start of the interstitial and its tries to seek to a time between the start of the interstitial and its
resumption point on the primary asset timeline, the client SHOULD resumption point on the primary asset timeline, the client SHOULD
 End of changes. 47 change blocks. 
147 lines changed or deleted 369 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/