| < 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/ | ||||