HTTP Live Streaming (HLS) authoring specification for Apple devices

Table of Contents

Overview

For a deeper discussion of the features available in HLS, refer to Apple’s streaming resource page, which contains pointers to the overview document, the HLS specification, technical notes, tools, presentations, and examples.

About HLS authoring

The HLS specification is a published RFC (RFC 8216). However, HLS continues to evolve, so there’s an updated draft specification — draft-pantos-hls-rfc8216bis (HLS2).

Please see Documentation, which may contain a reference to a preliminary version of the draft specification.

This document always uses the most up-to-date version, which is, either the preliminary version or the draft specification (whichever has a higher version number).

Note: HLS was originally specified in draft-pantos-http-live-streaming (HLS1). That document was superseded by RFC 8216.

The key words “MUST,” “MUST NOT,” “REQUIRED,” “SHALL,” “SHALL NOT,” “SHOULD,” “SHOULD NOT,” “RECOMMENDED,” “MAY,” and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.

Find additional information for HLS specifications in the Appendix.

About spatial video

Spatial video is intended to produce a richer experience for the user. Spatial video MUST use the REQ-VIDEO-LAYOUT attribute to specify desired channel and projection specifiers. Please see HLS specification for valid channel and projection specifiers.

Spatial video media is split into following categories.

  • Stereo Video: Similar to Stereo audio, which indicates different audio for the left and the right ear, visual media can be stereoscopic in which a separate view is available for the left eye and another view is available to be presented simultaneously to the right eye.

  • Projection Video: Rectilinear projection is default for the video media which indicates there is no further processing necessary to present the video. Content creators can opt for non rectilinear projections to preserve the artistic intent. Please refer to HLS specification for possible non-rectilinear projections. This content is categorized under Apple Projected Media Profile (APMP) and can be monoscopic or stereo.

  • Immersive Video: This video is projected from a hemisphere (typically a special lens) and often requires a special metadata file in order render correctly.

This video relies on a special projection type, known as 'PROJ-AIV' which is defined outside the core HLS specification. For details, see QuickTime and ISO Base Media File Formats and Spatial and Immersive Media

Note: Stereo, Immersive and stereo APMP video is only supported in visionOS. See amended requirements for visionOS.

About multi-format audio codecs

Multi-format audio codecs support combinations of channels, audio objects, and ambisonics as opposed to multi-channel codecs that just support channels. Examples of such a multi-format codec are:

  • Apple Positional Audio Codec APAC
  • Dolby Digital Plus JOC

About Apple podcasts HLS support

Apple Podcasts supports HTTP Live Streaming (HLS) video-on-demand (VOD) with Interstitials. Podcasts content providers MUST follow the published authoring guidelines. Please see Podcasts HLS guidelines for detailed authoring specification.

General authoring requirements

A stream that matches these requirements should be compatible with iOS, tvOS, macOS or visionOS. Rules with a leading asterisk (*) are modified by one or more of the Amended Requirements listed below.

Support for a specific video Profile and Level doesn’t imply that any particular device supports the maximum bit rate for that Level.

Video

1. Video encoding requirements

1.1. All video MUST be encoded using H.264/AVC, HEVC/H.265, Dolby Vision, or AV1.

1.2. The container format for H.264 video MUST be fragmented MP4 (fMP4) files or MPEG transport streams.

1.3.

1.3a. * For maximum compatibility, some H.264 variants SHOULD be less than or equal to High Profile, Level 4.1.

1.3b. * Profile and Level for H.264 MUST be less than or equal to High Profile, Level 5.2.

1.4. For H.264, you SHOULD use High Profile in preference to Main or Baseline Profile.

1.5. The container format for HEVC video MUST be fMP4.

1.6.

1.6a. * For maximum compatibility, some HEVC variants SHOULD be less than or equal to Main 10 Profile, Level 4.0, Main Tier.

1.6b. * Profile, Level, and Tier for HEVC MUST be less than or equal to Main 10 Profile, Level 5.1, High Tier.

1.7. High Dynamic Range (HDR) HEVC video MUST be HDR10, HLG, or Dolby Vision.

1.8. For HDR10 video, the SEI NAL units (that is, static metadata) SHOULD be in the HEVC Configuration Box ('hvcC') and not in the individual sample data.

1.9. * Profile and Level for Dolby Vision MUST be Profile 5 (single layer 10-bit HEVC) and less than or equal to Level 7.

1.10. You SHOULD use video formats in which the parameter sets are stored in the sample descriptions, rather than the samples. (That is, use 'avc1', 'hvc1', or 'dvh1' rather than 'avc3', 'hev1', or 'dvhe'.)

1.11. For backward compatibility, content SHOULD NOT use a higher level than required by the content resolution and frame rate.

1.12. * For backward compatibility, some video content SHOULD be encoded with H.264.

1.13. Key frames (IDRs) SHOULD be present every two seconds.

1.14. All interlaced source content MUST be deinterlaced.

1.15. You SHOULD deinterlace 30i content to 60p instead of 30p.

1.16. Live (linear) video from NTSC or ATSC source SHOULD be 60 or 59.94 fps.

1.17. Live (linear) video from PAL source SHOULD be 50 fps.

1.18. Video on Demand (VOD) content SHOULD use a natural frame rate for the content. Frame rates 23.976, 24, 25, 29.97, 30, 50, 59.94, and 60 fps are supported.

1.19. Frame rates above 60 fps SHALL NOT be used.

1.20. * For HDR content, frame rates less than or equal to 30 fps SHOULD be provided.

1.21. Streams SHOULD use a single color space — one of either Rec. 601, Rec. 709, DCI-P3, or Rec. 2020.

1.22. For VOD, the color space SHOULD be the original color space of the material.

1.23. * If multiple video streams are provided (H.264, HEVC, HDR), each stream SHOULD provide all anticipated bandwidths. Clients SHOULD NOT be required to switch codecs.

1.24. * For backward compatibility, SDR streams MUST be provided. (See also item 6.16.)

1.25. * There are many possible choices of bit rates for variants. The following tables provide one possible set of bit rate variants. (See On bit rates for variants for additional considerations.)

16:9 aspect ratio H.264/AVC Frame rate
416 x 234 145 ≤ 30 fps
640 x 360 365 ≤ 30 fps
768 x 432 730 ≤ 30 fps
768 x 432 1100 ≤ 30 fps
960 x 540 2000 Same as source
1280 x 720 3000 Same as source
1280 x 720 4500 Same as source
1920 x 1080 6000 Same as source
1920 x 1080 7800 Same as source
16:9 aspect ratio HEVC/H.265 30 fps HDR (HEVC) 30 fps Frame rate
640 x 360 145 160 ≤ 30 fps
768 x 432 300 360 ≤ 30 fps
960 x 540 600 730 ≤ 30 fps
960 x 540 900 1090 ≤ 30 fps
960 x 540 1600 1930 Same as source
1280 x 720 2400 2900 Same as source
1280 x 720 3400 4080 Same as source
1920 x 1080 4500 5400 Same as source
1920 x 1080 5800 7000 Same as source
2560 x 1440 8100 9700 Same as source
3840 x 2160 11600 13900 Same as source
3840 x 2160 16800 20000 Same as source

Following tables provide a possible bit rate recommendations for APMP videos.

APMP monoscopic videos:

Tier Resolution Bit rate Projection specifier fps
1 8k x 4k 80 Mbps PROJ-EQUI 60
2 8k x 4k 60 Mbps PROJ-EQUI 60
3 8k x 4k 40 Mbps PROJ-EQUI 60

If the quality of the 3rd tier is not acceptable, or you are working with very high motion content, one can lower the resolution and bitrate combination further.

Tier Resolution Bit rate Projection specifier fps
4 5760 x 2880 60 Mbps PROJ-EQUI 60
5 5760 x 2880 40 Mbps PROJ-EQUI 60
6 5760 x 2880 30 Mbps PROJ-EQUI 60
7 4096 x 2048 20 Mbps PROJ-EQUI 60

APMP stereoscopic videos:

Tier Resolution Bit rate Projection specifier fps
1 4k x 4k 80 Mbps PROJ-HEQU 60
2 4k x 4k 60 Mbps PROJ-HEQU 60
3 4k x 4k 40 Mbps PROJ-HEQU 60

If the quality of the 3rd tier is not acceptable, or you are working with very high motion content, one can lower the resolution and bitrate combination further.

Tier Resolution Bit rate Projection specifier fps
4 2880 x 2880 60 Mbps PROJ-EQUI 60
5 2880 x 2880 40 Mbps PROJ-EQUI 60
6 2880 x 2880 30 Mbps PROJ-EQUI 60
7 2048 x 2048 20 Mbps PROJ-EQUI 60

Following table provides a possible bit rate recommendations for AIV.

Tier Average bandwith Peak bandwidth Resolution fps
1 100 Mbps 150 Mbps 4320 x 4320 90
2 80 Mbps 120 Mbps 4320 x 4320 90
3 50 Mbps 100 Mbps 4320 x 4320 90
4 32 Mbps 64 Mbps 4320 x 4320 90
5 25 Mbps 50 Mbps 4320 x 4320 90

Note: The above bit rates are initial encoding targets for typical content delivered via HLS. Apple recommends that you evaluate them against your specific content and encoding workflow, then adjust accordingly.

30i source content is considered to have a source frame rate of 60 fps. 24 fps HEVC content should use bit rates reduced by about 20% from the values above.

1.26. For VOD content, the average segment bit rate MUST be within 10% of the AVERAGE-BANDWIDTH attribute. (See Declared versus measured values of bandwidths.)

1.27. For VOD content, the measured peak bit rate MUST be within 10% of the BANDWIDTH attribute.

1.28. For live (linear) content, the average segment bit rate over a long (~1 hour) period of time MUST be less than 110% of the AVERAGE-BANDWIDTH attribute.

1.29. For live (linear) content, the measured peak bit rate MUST be less than 125% of the BANDWIDTH attribute.

1.30. For VOD content, the peak bit rate SHOULD be no more than 200% of the average bit rate.

1.31. Different variants MAY have different frame rates.

1.32. * The default video variants SHOULD be the 2000 kbit/s (average bit rate) variant. (Defaults are the first variant listed in the Multivariant Playlist within a group of variants having compatible audio).

1.33. All video variants SHOULD have identical aspect ratios.

1.34. For maximum compatibility when UHD video resolution is provided, some UHD variants SHOULD be less than or equal to 15 Mbit/s.

1.35. For HDR10 content, the Mastering Display Color Volume and Content Light Level Information SEI messages SHOULD be present.

1.36. MV-HEVC video MUST NOT be used for anything other than stereo video.

1.37. Level for AV1 MUST be less than or equal to Level 6.2

1.38. All APMP monoscopic videos MUST be encoded using HEVC/H.265.

1.39. The container format for AV1 video MUST be fMP4.

Audio

2. Audio encoding requirements

2.1. Audio data SHOULD be provided as an elementary audio stream or in fMP4.

2.2. Codecs that provide stereo audio are:

  • Apple Positional Audio Codec (APAC)
  • AAC-LC
  • HE-AAC v1
  • HE-AAC v2
  • xHE-AAC
  • Apple Lossless
  • FLAC

2.3. * Stereo audio in AAC, HE-AAC v1, or HE-AAC v2 format MUST be provided.

2.4. You SHOULD NOT use HE-AAC if your audio bit rate is above 64 kbit/s.

2.5. Supported multichannel audio codecs are:

  • APAC
  • AAC-LC
  • HE-AAC v1
  • Apple Lossless
  • FLAC
  • Dolby Digital (AC-3)
  • Dolby Digital Plus (E-AC-3)(ec-3)
  • Dolby Digital Plus JOC (ec+3)

(See Values for the CODECS attribute for more information about specifying Dolby Digital Plus JOC.)

2.6. * If Dolby Digital Plus is provided and your streams are delivered to devices that don’t support Dolby Digital Plus, then Dolby Digital MUST be provided also. See Audio compatibility.

2.7. Stereo audio MAY be provided at multiple bit rates.

2.8. * Multichannel audio using a particular codec MAY be provided at multiple bit rates.

2.9. Overall bit rate recommendations are as follows:

Bitrate recommendations for stereo are as follows:

Audio channels Codec Total (kbit/s)
2.0 (stereo) APAC 32 to 160
2.0 (stereo) AAC 32 to 160
2.0 (stereo) xHE-AAC 24 to 160
2.0 (stereo) Dolby Digital Plus 96 to 160

Bitrate recommendations for multi-channel surround formats are as follows:

Audio channels Codec Total (kbit/s)
5.1 (surround) APAC 320
5.1 (surround) AAC 320
5.1 (surround) Dolby Digital 384
5.1 (surround) Dolby Digital Plus 192
7.1 (surround) APAC 384
7.1 (surround) Dolby Digital Plus 384

Bitrate recommendations for Ambisonics are as follows:

Ambisonic order Codec Audio coding identifier Total (kbit/s)
1 APAC 1OA 192 to 384
2 APAC 2OA 240 to 512
3 APAC 3OA /270 to 768

See APAC for more information about ambisonics.

2.10. * You MAY change channel layout within a stream.

2.11. Channel layout changes MUST be in conjunction with an EXT-X-DISCONTINUITY tag.

2.12. If you provide Descriptive Video Service (DVS), also called "Audio Description", it MUST be marked with the attribute CHARACTERISTICS="public.accessibility.describes-video".

2.13. If you provide DVS, the AUTOSELECT attribute MUST have a value of "YES".

2.14. The name of DVS audio SHOULD indicate that the stream is DVS content.

2.15. If you provide alternative audio or DVS, you MUST provide it for the entire content duration, even if it only really exists for a portion of the main content.

2.16. Alternative audio or DVS MAY reuse the audio segments of regular content when the alternative content isn’t available.

2.17. A single Media Segment MUST NOT contain multiple audio streams.

2.18. Loudness management or Dynamic range control SHOULD be present unless all content (including ads) has been encoded at the same audio levels.

2.19. In fMP4 files, except for the APAC codec, you SHOULD provide loudness information by way of a loudness box ('ludt'). When present, the loudness box takes precedence over any loudness information in the audio stream. For APAC, a loudness box SHALL not be used.

2.20. In the absence of a loudness box, Dolby Digital and Dolby Digital Plus loudness SHOULD be specified by the dialnorm field (ATSC A/52:2012). 

2.21. For AAC, in the absence of a loudness box, AAC dialog loudness SHOULD be specified by either AAC prog_ref_level (ISO 14496-3 subclause 4.5.2.7), as specified by SCTE 193-1 section 7.4.1, or by the loudnessInfo() payload as specified by ISO 23003-4, in which case, samplePeakLevel or truePeakLevel MUST be present, measurementSystem MUST be 2, and methodDefinition MUST be 1 or 2, while for video content it SHOULD be 2.

2.22. For xHE-AAC, loudness metadata MUST be present according to the Basic Loudness Metadata specified in ISO 23003-4 Table I.5; samplePeakLevel or truePeakLevel MUST be present. The methodDefinition SHOULD be 2 for video content.

2.23. The loudness value MUST indicate the actual loudness of the content.

2.24. HE-AAC in fMP4 files MUST use explicit signaling of SBR data.

2.25. The container format for xHE-AAC, Apple Lossless, FLAC, and APAC audio MUST be fMP4.

2.26. If you provide non-Dolby multichannel audio, you SHOULD provide multichannel AAC also.

2.27. For audio description, the LANGUAGE attribute MUST be present and indicate the primary language used to convey the descriptions.

2.28. Audio that has been prepared or otherwise processed to heighten the intelligibility of speech MAY be marked with the attribute CHARACTERISTICS="public.accessibility.enhances-speech-intelligibility".

2.29. Supported multi-format audio codecs that carry the combination of two or more formats out of channels, objects and Ambisonics are:

  • APAC
  • Dolby Digital Plus JOC

2.30. APAC encoded content MUST have in-stream loudness and DRC metadata.

2.31. If you provide APAC immersive audio, you SHOULD provide stereo AAC also.

Ads and pre-/mid-/post-rolls

3. Ad requirements (See also the Media Playlists section of hls-authoring-specification-for-apple-devices.)

3.1. Your ads and other nonprimary media MAY be inserted in the Media Playlists or as Interstitials.

3.2. Inserted media SHOULD be encoded with the same codecs as the other content in the Media Playlist.

3.3. Inserted media SHOULD be encoded with the same aspect ratio as the other content in the Media Playlist.

3.4. Inserted media SHOULD be at or under the specified bandwidths for that variant.

Accessibility

4. Accessibility requirements

4.1. Captions SHOULD be provided with your streams to make content accessible to people who are deaf or hard of hearing.

4.2. Supported caption formats are:

  • CEA-608 closed captions
  • CEA-708 closed captions
  • WebVTT subtitles
  • IMSC1 subtitles (text profile only)

4.3. Closed captions (if any) MUST be included in the video Media Segments.

4.4. The presence of closed captions MUST be declared via an EXT-X-MEDIA tag that contains a LANGUAGE attribute.

4.5. If a subtitles track is intended to provide accessibility for people who are deaf or hard of hearing, it MUST be marked with the attribute CHARACTERISTICS="public.accessibility.transcribes-spoken-dialog,public.accessibility.describes-music-and-sound". (Subtitles with this attribute value are treated the same as closed captions.)

4.6. If a subtitles track is intended to provide accessibility for people who are deaf or hard of hearing, the AUTOSELECT attribute MUST have a value of "YES".

4.7. The LANGUAGE attribute MUST be included in the EXT-X-MEDIA tag for a subtitles track.

4.8. For information on including audio descriptions with your streams, see items 2.12 through 2.16.

Subtitles

5. Subtitle requirements

5.1. Subtitles MAY be provided.

5.2. * Subtitles MUST be WebVTT (according to the HLS specification) or IMSC1 in fMP4.

5.3. WebVTT subtitles MUST be in text files, with an X-TIMESTAMP-MAP according to the HLS specification.

5.4. IMSC1 subtitles MUST be in fMP4 files.

5.5. The subtitle playlist MUST exist for the entirety of the main content, even if the actual subtitles only exist for a portion of the content.

5.6. For live (linear) content, target durations for subtitle playlists MUST be identical to other media.

5.7. For VOD content, target durations of subtitle playlists MAY be longer than the other media.

5.8. If the content has forced subtitles and regular subtitles in a given language, the regular subtitles track in that language MUST contain both the forced subtitles and the regular subtitles for that language.

5.9. If your videos contain text burnt into the video and you have access to a version without the burn-in, you SHOULD use forced subtitles instead. (This allows you to easily translate into multiple languages. An example of when you might use forced subtitles is a science fiction film, where alien languages are translated into English.)

5.10. The kind of subtitles SHOULD be specified in the CODECS attribute of the associated EXT-X-STREAM-INF tags. You SHOULD use "stpp.ttml.im1t" to identify IMSC1 subtitles. You MAY use "wvtt" to identify WebVTT subtitles.

5.11. Forced subtitles SHOULD always have AUTOSELECT=YES.

Trick Play

6. Trick play requirements

6.1. I-frame playlists (EXT-X-I-FRAME-STREAM-INF) MUST be provided to support scrubbing and scanning UI.

6.2. You SHOULD have one frame per second dense I-frame renditions. These are dedicated renditions that only contain I-frames.

6.3. Alternatively, you MAY use the I-frames from your normal content, but trick play performance is improved with a higher density of I-frames.

6.4. If you provide multiple bit rates at the same spatial resolution for your regular video, you SHOULD create the I-frame playlist for that resolution from the same source used for the lowest bit rate in that group.

6.5. The bit rate of I-frame playlists SHOULD be the bit rate of a normal playlist of the same resolution times the fps of the I-frame playlist divided by eight. (See I frame bit rates versus normal bit rates.)

6.6. * You SHOULD provide multiple I-frame Media Playlists with different bit rates.

6.7. As with normal video, there are many possible choices of bit rates for dense I-frame variants. The following tables provide one possible set of variants. (See On bit rates for variants.)

16:9 aspect ratio H.264/AVC
640 x 360 45
768 x 432 90
960 x 540 250
1280 x 720 375
1920 x 1080 580
16:9 aspect ratio HEVC/H.265 HDR (HEVC)
768 x 432 40 55
960 x 540 75 94
960 x 540 200 238
1280 x 720 300 360
1920 x 1080 525 650

Note: These bit rates are based on the assumption of a 1 fps dense I-frame track. The values should be modified based on the actual frame rate of the I-frame rendition. (See item 6.5.)

The above tables are average bit rates. Earlier versions of this specification used peak bit rates.

6.8. I-frame playlists MUST contain the EXT-X-I-FRAMES-ONLY tag.

6.9. The peak segment bit rate MUST be calculated according to the HLS specification.

6.10. If using fMP4, I-frame segments MUST include the 'moof' header associated with the I-frame.

6.11. For live (linear) content, target durations for I-frame playlists MUST be identical to other media.

6.12. For VOD content, target durations of I-frame playlists MAY be different from the other media.

6.13. * I-frame playlists MAY use a different video codec than the normal video segments.

6.14. * For backward compatibility, some trick play content SHOULD be encoded with H.264.

6.15. If HDR trick play streams are provided, they SHOULD be provided at all resolutions.

6.16. * For backward compatibility, SDR trick play streams MUST be provided.

6.17. I-frame content MAY be encoded using the fMP4 ‘mjpg’ codec. (See I frame image sequences.)

Media Segmentation

7. Media segmentation requirements

7.1. Your media MUST be continuous across segments, with the exception of transitions for ads and other inserted material.

7.2. If using a transport stream, continuity counters and timestamps MUST be sequential.

7.3. If using fMP4, the track fragment decode time MUST be consistent with the decode time and duration of the previous segment.

7.4. Video segments MUST start with an IDR frame.

7.5. Target durations SHOULD be 6 seconds.

7.6. Segment durations SHOULD be nominally 6 seconds (for example, NTSC 29.97 may be 6.006 seconds).

7.7. Media Segments MUST NOT exceed the target duration by more than 0.5 seconds.

7.8. Each xHE-AAC segment SHOULD start with an Immediate Playout Frame (IPF).

7.9. Each APAC segment MUST start with an Audio Synchronization Packet (ASP).

Media Playlists

8. Media Playlist requirements

8.1. You MUST use sufficiently accurate segment durations to ensure that the sum of the EXTINF durations of any contiguous group of segments is within one video frame duration of the actual duration of the content.

8.2. Audio and video playlists MUST all use the same target duration.

8.3. Audio and video playlists MUST contain the same duration of the content.

8.4. The EXT-X-PROGRAM-DATE-TIME tag MUST be present in every live (linear) Media Playlist.

8.5. The date-time value of an EXT-X-PROGRAM-DATE-TIME tag SHOULD be aligned with the airtime of the content.

8.6. If your Media Playlists are created from static source content (VOD), you MUST add the EXT-X-PLAYLIST-TYPE with the value VOD.

8.7. Within one asset, all Media Playlists with an EXT-X-PLAYLIST-TYPE of VOD MUST cover exactly the same media time range.

8.8. If your Media Playlists are event style (start from a fixed point with segments never removed), you MUST add the EXT-X-PLAYLIST-TYPE with the value EVENT.

8.9. Separate audio streams MUST be declared using EXT-X-MEDIA tags.

8.10. The LANGUAGE attribute MUST be included in every EXT-X-MEDIA tag that doesn’t have TYPE=VIDEO.

8.11. You MUST provide at least six segments in a live (linear) playlist.

8.12. * You SHOULD provide at least 15 minutes of content in a live (linear) playlist.

8.13. Breaks of encoding continuity MUST be indicated with the EXT-X-DISCONTINUITY tag.

8.14. Video frame rate changes MUST be marked as a discontinuity using EXT-X-DISCONTINUITY tags.

8.15. All variants and renditions MUST have discontinuities at the same points in time.

8.16. * You SHOULD avoid switching codecs at discontinuities, for example, switching between HEVC and H.264, or between AAC and Dolby Digital.

8.17. If live (linear) content will ever contain an EXT-X-DISCONTINUITY tag, the EXT-X-DISCONTINUITY-SEQUENCE tag MUST always be present.

8.18. Your media requests MUST NOT use HTTP redirects, with the exception of ad content to allow dynamic selection of ads.

8.19. You SHOULD identify interstitial and program boundaries using the EXT-X-DATERANGE tag.

8.20. If using fMP4, EXT-X-MAP tags MUST be present.

8.21. Metadata SHOULD be in the playlist (using EXT-X-DATERANGE) rather than in the media (using Timed Metadata).

8.22. * For maximum interoperability, all audio/video variants and renditions SHOULD have segment boundaries at the same points in time.

8.23. If your xHE-AAC segments start with an IPF, you SHOULD use the EXT-X-INDEPENDENT-SEGMENTS tag in the Media Playlist.

8.24. A live (linear) playlist update SHOULD be considered invalid when the Last-Modified HTTP header, if supplied, is more than three target durations from the Date HTTP header.

8.25. If your APAC segments start with an ASP, you SHOULD use the EXT-X-INDEPENDENT-SEGMENTS tag in the Media Playlist.

Multivariant Playlist

9. Multivariant Playlist requirements

9.1. Your EXT-X-STREAM-INF tag MUST always provide the CODECS attribute.

9.2. Your EXT-X-STREAM-INF tag MUST always provide the RESOLUTION attribute if the rendition includes video.

9.3. Your EXT-X-I-FRAME-STREAM-INF tag MUST always provide the CODECS attribute.

9.4. Your EXT-X-I-FRAME-STREAM-INF tag MUST always provide the RESOLUTION attribute.

9.5. You SHOULD deliver video and audio as separate streams.

9.6. If you have multichannel audio, you MUST use separate audio streams.

9.7. If you have alternative audio content (languages/commentary/DVS), you MUST use separate audio streams.

9.8. If you have different video angles, you MUST use separate audio streams.

9.9. You MUST provide multiple bit rates of video (that is, variants).

9.10. For HD content, there SHOULD be at least two variants encoded at the highest-available resolution.

9.11. If your video segments start with an IDR, you SHOULD use the EXT-X-INDEPENDENT-SEGMENTS tag in the Multivariant Playlist. (See item 7.4.)

9.12. If your video segments start with an IDR and the EXT-X-INDEPENDENT-SEGMENTS tag isn’t in the Multivariant Playlist, you MUST use the EXT-X-INDEPENDENT-SEGMENTS tag in all video Media Playlists. (See item 7.4.)

9.13. The BANDWIDTH attribute MUST be the largest sum of peak segment bit rates that’s produced by any playable combination of renditions.

9.14. You MUST include the AVERAGE-BANDWIDTH attribute.

9.15. Each EXT-X-STREAM-INF tag that includes video content MUST have a FRAME-RATE attribute.

9.16. The VIDEO-RANGE attribute MUST be specified unless all variants and renditions are SDR.

9.17. Within a group of Renditions (EXT-X-MEDIA tags having the same TYPE and GROUP-ID), those tags having the same LANGUAGE value should be ordered from most general to most specific. (Because CHARACTERISTICS are open-ended, the matching algorithm needs the ordering since it can’t interpret all the semantics.)

9.18. An EXT-X-CONTENT-STEERING tag SHOULD always have a PATHWAY-ID attribute.

9.19. The SCORE attribute (if present) MUST be on every variant. Otherwise, the SCORE attribute will be ignored.

9.20. For APAC, the APAC profile and level MUST be provided as a part of Codec string. See APAC for more information about APAC profile and level.

Delivery

10. Delivery requirements

10.1. The server MUST deliver playlists using gzip content-encoding.

10.2. You SHOULD support stream failover, for example by listing duplicate streams in the Multivariant Playlist.

10.3. Media data SHOULD NOT be delivered to the application through a local server.

10.4. You SHOULD use the recommended MIME types for content. The recommendations are in the following table:

Media type Format Recommended MIME type Typical file extension
Playlist HLS playlist application/vnd.apple.mpegurl m3u8
Playlist M3U playlist audio/mpegurl m3u
Video MPEG transport stream video/mp2t ts
Media Initializaton Fragmented MP4 video/mp4 mp4
Video or audio Fragmented MP4 video/iso.segment m4s
Video Fragmented MP4 video/mp4 mp4
Audio MPEG transport stream video/mp2t ts
Audio Fragmented MP4 audio/mp4 mp4
Audio Packed audio audio/aac aac
Audio Packed audio audio/mpeg mp3
Audio Packed audio audio/ac3 ac3
Audio Packed audio audio/eac3 ec3
Subtitles WebVTT text/vtt or text/plain vtt
Subtitles IMSC1 application/mp4 mp4
Content Steering Manifest JSON file application/vnd.apple.steering-list json
X-ASSET-LIST response JSON file application/json json

Note: The M3U playlist MIME type audio/mpegurl isn’t registered with the IANA. According to the IANA, the audio/aac MIME type allows LATM/LOAS or ADTS. HLS only supports ADTS. Some older players are known to reject text/vtt as an illegal type. For compatibility, text/plain is acceptable.

Privacy

Note: In a future release, Apple may require delivery over TLS.

11. Privacy requirements

11.1. Multivariant Playlists SHOULD be delivered using Transport Layer Security (TLS).

11.2. Media Playlists SHOULD be delivered using TLS.

11.3. Media Segments SHOULD be delivered using TLS.

11.4. Media Segment URLs requested over unencrypted transport SHOULD NOT contain revealing strings, such as movie title, show title, episode name, episode number, genre, advertiser, or product.

Security

12. Security requirements

12.1. Transport Layer Security (TLS) MUST be version 1.2 or later with forward secrecy.

12.2. TLS MUST NOT use known-insecure cryptographic primitives (such as, RC4 encryption, SHA-1 certificate signatures).

12.3. Within TLS, key sizes MUST be 2048 bits for RSA and 256 bits for EC.

12.4. The URLs for Media Segments SHOULD NOT be completely static. URLs should be issued per device or changed over time.

Content Protection

13. Content protection requirements

13.1. Content protection of video and audio SHOULD follow the FairPlay Streaming (FPS) specification.

13.2. If the content is encrypted with FPS, the method MUST be SAMPLE-AES.

13.3. If the content is encrypted with FPS, the key format MUST be "com.apple.streamingkeydelivery".

13.4. The IV attribute SHOULD NOT be used with FPS unless necessary for interoperability.

13.5. Content with HD resolutions SHOULD use HDCP-LEVEL of TYPE-0.

13.6. Content with greater than HD resolutions SHOULD use HDCP-LEVEL of TYPE-1.

13.7. Video encrypted with Common Encryption MUST use an encrypt:skip pattern of 1:9 (10% partial encryption).

13.8. Content encrypted with FPS MAY use the ALLOWED-CPC attribute. (See ALLOWED CPC values for FairPlay Streaming.)

13.9. Common encryption MUST NOT use content sensitive encryption.

13.10. Content authors MAY mix encrypted and unencrypted samples in a single HLS fMP4 segment with a single Media Initialization Section by supplying both an encrypted SampleDescription at index 0 and an unencrypted SampleDescription at index 1 for each track. The sample index field of each sample should point to the appropriate SampleDescription.

13.11. Encryption with SAMPLE-AES-CTR SHALL NOT be used on Apple devices.

Note: HD is approximately the range of 720p to 1080p.

Low-Latency HLS

14. Low-Latency HLS requirements

14.1. Low-Latency stream delivery MUST meet all requirements of the Low-Latency Server Configuration Profile in Appendix B of draft-pantos-hls-rfc8216bis-07 or later.

14.2.

14.2a. The Part Target Duration MUST be at least the maximum round-trip time (RTT) to the server that 95% of the clients are expected to see (P95 RTT).

14.2b. The Part Target Duration SHOULD be at least three times the P95 RTT.

14.2c. The RECOMMENDED Part Target Duration is one second.

14.3. The PART-HOLD-BACK value MUST be at least three times the Part Target Duration.

14.4. Services with Playlist windows longer than two minutes SHOULD offer Playlist Delta Updates.

14.5. Services that offer Playlist Delta Updates and use EXT-X-DATERANGE tags SHOULD also use CAN-SKIP-DATERANGES=YES.

SharePlay

Note: Other requirements only apply to the playlists and media received by a single client. SharePlay adds requirements that apply to all participants in the SharePlay session.

15. SharePlay HLS requirements

15.1. For live (linear) content, the timeline derived from the EXT-X-PROGRAM-DATE-TIME tag is used for synchronization. That timeline MUST be in agreement for all participants.

15.2. For VOD content, the timeline based on the start of the playlist is used for synchronization. That timeline MUST be in agreement for all participants.

15.3. Interstitials delivered to participants in a SharePlay session SHOULD match in duration. If they do not, participants receiving longer duration interstitials will miss some of the primary content. This behavior can only be overridden when all participants are using apps that support control of coordinated media playback.

Spatial (stereo, immersive and projected) video

Note: Please see About spatial video for information regarding Spatial Video.

16. Spatial (stereo, immersive and projected) video requirements

16.1. All variants containing spatial video MUST be marked with a REQ-VIDEO-LAYOUT attribute.

16.2. All spatial video content MUST include Video Extended Usage ('vexu') atoms/boxes. (See Additional spatial video specifications.)

16.3. Switches between spatial and non-spatial video content MUST be marked with an EXT-X-DISCONTINUITY tag, or the Media Initialization Section MUST contain sample descriptions for both kinds of content.

16.4. Stereo and Immersive video content SHOULD include parallax metadata if your content has subtitles. (See Additional spatial video specifications.)

16.5. If spatial video content includes sections of monoscopic video content, then the REQ-VIDEO-LAYOUT attribute MUST include “CH-MONO" as one entry.

Amended requirements for macOS

All general rules apply except as expressly modified by a rule with the same number in this section. Rules with a leading plus sign (+) are additional rules.

Video

1. Video encoding requirements

1.3.

1.3b. Profile and Level for H.264 MUST be less than or equal to High Profile, Level 5.0.

Amended requirements for iOS

All general rules apply except as expressly modified by a rule with the same number in this section. Rules with a leading plus sign (+) are additional rules.

Video

1. Video encoding requirements

1.6.

1.6b. Profile and Level for H.264 MUST be less than or equal to High Profile, Level 6.0.

1.9.

1.9a. Profile and Level for Dolby Vision MUST be Profile 5 (single layer 10-bit HEVC) or Profile 10 (single layer 10-bit AV1) and less than or equal to Level 9.

1.9b. + For maximum compatibility, some Dolby Vision variants SHOULD be Profile 5 and less than or equal to Level 7.

1.32.

1.32a. For Wi-Fi delivery, the default video variant SHOULD be the 2000 kbit/s (average bit rate) variant.

1.32b. For cellular delivery, the default video variant SHOULD be the 730 kbit/s (average bit rate) variant.

Multivariant Playlist

9. Multivariant Playlist requirements

9.21. + Multivariant Playlists that are delivered over cellular networks MUST contain a variant whose peak BANDWIDTH is less than or equal to 192 kbit/s.

9.22. + For backward compatibility, a peak 192 kbit/s H.264 variant packaged in a transport stream SHOULD be provided for cellular.

Amended requirements for visionOS

All general rules apply except as expressly modified by a rule with the same number in this section. Rules with a leading plus sign (+) are additional rules.

The following general rules regarding compatibility aren't applicable in visionOS if all variants contain stereo video content: 1.3a, 1.6a, 1.9b, 1.12, 1.24, 2.3, 2.6, 6.14, 6.16.

Video

1. Video encoding requirements

1.9.

1.9a. Dolby Vision monoscopic content MUST be Profile 5 (single layer 10-bit HEVC) and less than or equal to Level 9.

1.9c. + Dolby Vision stereo video MUST be Profile 20 (MV-HEVC) and less than or equal to Level 9.

1.25. Suggested bit rates for MV-HEVC variants.

16:9 aspect ratio MV-HEVC SDR 30 fps MV-HEVC HDR 30 fps Frame rate
640 x 360 246 272 ≤ 30 fps
768 x 432 510 612 ≤ 30 fps
960 x 540 1020 1241 ≤ 30 fps
960 x 540 1530 1853 ≤ 30 fps
960 x 540 2720 3281 Same as source
1280 x 720 4080 4930 Same as source
1280 x 720 5780 6936 Same as source
1920 x 1080 7650 9180 Same as source
1920 x 1080 9660 11900 Same as source
2560 x 1440 13770 16490 Same as source
3840 x 2160 19720 23630 Same as source
3840 x 2160 28560 34000 Same as source

1.40. + Stereo video MUST be encoded using Dolby Vision Profile 20 (MV-HEVC).

Trick play

6. Trick play requirements

6.6. If your only content is stereo video, then you SHOULD provide only one I-frame Media Playlist. (See item 6.19.)

6.18. + Trick play content SHOULD be monoscopic and rectilinear.

6.19. + In visionOS, a thumbnail list is produced for scrubbing and scanning. These thumbnails are 160px height with a width that matches the aspect ratio of the main content. For better performance, you MAY provide an I-frame playlist having exactly this height.

Spatial (stereo, immersive and projected) video

16. Spatial (stereo, immersive and projected) video requirements

16.6. + All Stereo (including APMP) video MUST be encoded using MV-HEVC.

16.7. + Immersive video content MUST use CH-STEREO and PROJ-AIV for channel and projection specifier in REQ-VIDEO-LAYOUT.

Amended requirements for tvOS

All general rules apply except as expressly modified by a rule with the same number in this section. Rules with a leading plus sign (+) are additional rules.

Video

1. Video encoding requirements

1.3.

1.3b. Profile and Level for H.264 MUST be less than or equal to High Profile, Level 5.1.

1.20. For HDR content, frame rates less than or equal to 30 fps MUST be provided.

1.25. The 145 kbit/s variant SHOULD NOT be provided.

Audio

2. Audio encoding requirements

2.8. Multichannel audio using a particular codec MAY be provided at multiple bit rates. However, Dolby Atmos content SHOULD be restricted to a single bit rate.

Trick Play

6. Trick play requirements

6.16. SDR trick play streams MUST be provided.

Media Playlists

8. Media Playlist requirements

8.12. You SHOULD provide at least 120 minutes of content in a live (linear) playlist.

Multivariant Playlist

9. Multivariant Playlist requirements

9.20. + You MUST have no audio-only variants listed in the Multivariant Playlist.

Amended requirements for AirPlay 2-Enabled TVs

All general rules apply except as expressly modified by a rule with the same number in this section. Rules with a leading plus sign (+) are additional rules.

Note: AirPlay on older third-party TVs does not support the Sample Group Description Box ('sgpd') and Sample to Group Box ('sbgp') for encrypted content. You must remove them from encrypted CMAF content to enable playback.

Video

1. Video encoding requirements

1.23. If multiple video streams are provided (H.264, HEVC, HDR), each stream MUST provide all anticipated bandwidths.

1.41. + Encrypted fMP4 content MUST contain either a Sample Encryption Box ('senc'), or both a Sample Auxiliary Information Sizes Box ('saiz') and a Sample Auxiliary Information Offsets Box ('saio').

Audio

2. Audio encoding requirements

2.10. Channel layout SHOULD NOT change within a stream.

Ads and pre-/mid-/post-rolls

3. Ad requirements

3.5. + Inserted media SHOULD be at a similar frame rate (x, 2x, x/2) as the other content in the Media Playlist.

Subtitles

5. Subtitle requirements

5.2. Subtitles MUST be WebVTT.

Trick Play

6. Trick play requirements

6.13. If a normal video variant uses a video codec, one or more I-frame variants MUST exist with the same video codec or the mjpg codec.

Media Playlists

8. Media Playlist requirements

8.16. You SHOULD NOT switch codecs at discontinuities. For example, don’t switch between HEVC and H.264, or between AAC and Dolby Digital.

8.22. All video variants and renditions MUST have segment boundaries at the same points in time.

8.25. + Frame rate changes at discontinuities SHOULD use a similar frame rate (x, 2x, x/2).

Multivariant Playlist

9. Multivariant Playlist requirements

9.23. + You SHOULD provide a full range of variants for each codec type and frame rate. Similar frame rates (x, 2x, x/2) are compatible, nonsimilar frame rates may cause playback issues.

9.24. + If you supply HDR content, you SHOULD provide both Dolby Vision and HDR10.

Appendix

This appendix expands on information provided earlier in this document. It is not intended as a standalone document.

Testing your streams

Apple provides several command-line tools for HTTP Live Streaming. After signing in with your Apple Developer account, search for http live streaming tools.

To assist in validating your streams, use the command-line tools mediastreamvalidator and hlsreport. While these tools are unable to check everything about your streams, the checks they do are fairly comprehensive and Apple continues to improve the tools.

Check the video quality of your streams by visual inspection. The mediastreamvalidator tool does not check video quality, so check playback of your streams under a variety of network conditions.

Using hlsreport

Use the binary hlsreport to generate an HTML summary report from a JSON file that mediastreamvalidator creates. The report includes several tables with details about variants, renditions, and I-frame variants. Each table entry has a unique stream ID number. A list of issues is included, divided into Must Fix and Should Fix categories according to this specification. The issues cross-reference individual variants and renditions using the unique stream IDs.

Note: Earlier versions of the HLS tools used a script called hlsreport.py rather than a binary.

The simplest way to call it is:

hlsreport validation_data.json

where validation_data.json is the JSON file that mediastreamvalidator generates. This produces a file called validation_data.html that is the report. You can change the name of the report file with the -o option:

hlsreport -o my_report.html validation_data.json

For further information, see the hlsreport(1) man page.

Declared versus measured values of bandwidths

VOD bit rates are measured over the entirety of the content. Live (linear) bit rates are measured over ~1 hour of content.

VOD Live/Linear
Measured average bit rate versus AVERAGE-BANDWIDTH (attribute) within 10% of attribute value < 110% of attribute value
Measured peak bit rate versus BANDWIDTH (attribute) within 10% of attribute value < 125% of attribute value
Measured peak bit rate versus measured average bit rate < 200% of measured average no rule

Audio compatibility

Additional information about device and audio format compatibility.

Note: Multichannel output depends on the capability of the actual output device.

Devices AAC (Stereo) AC-3/E-AC-3 Dolby Digital Plus with Dolby Atmos
iOS devices - A12 Bionic based and later Yes Yes Yes
Apple TV 4K (1st and 2nd Gen)† Yes Yes Yes
OS X devices - 2018 and later Yes Yes Yes
iOS and tvOS devices - A7-based or later *, but not listed above Yes Yes Plays as E-AC-3
Older OS X devices Yes Yes Plays as E-AC-3
Apple TV (3rd Gen), iPhone 5, and iPhone 5C Yes Only AC-3 via pass-through No
All older iOS and tvOS devices Yes No No

Note: All of the devices in the above table support AAC (Stereo).

See Specs for actual technical specifications.

*Complete support requires iOS 9.3 or tvOS 9.2, or later. Dolby Digital Plus with Dolby Atmos requires tvOS 12.0 or later.

Dolby Digital Plus with Dolby Atmos† requires tvOS 12.0 or later.

APAC support depends on the capability of the actual device and OS version. See APAC specification for support information.

On bit rates for variants

A number of factors affect the bit rate needed to encode video:

  • Codec (for example, H.264 or HEVC)
  • Specific encoder implementation and features used
  • Resolution (for example, 1920 x 1080, 1280 x 720, and so on)
  • Frame rate (for example, 24, 25, 30, 50, 60)
  • Bits per pixel (for example, HDR typically uses more bits than SDR)
  • Complexity of the content
  • Desired subjective quality

These factors make universal encoding recommendations for content difficult. This document includes initial bit rate recommendations that you can evaluate against your content, constraints and encoding workflow.

I-frame bit rates versus normal bit rates

The formula in item 6.5 (for I-frame bit rates) in this document requires some explanation.

During trick play, the player tries to deliver eight frames per second. If the playback rate implies a higher frame rate, frames will be dropped to keep the frame rate at eight frames per second. If fewer frames are available, it will play at a lower frame rate.

The I-frame bit rate is the bit rate of the rendition if it were played at normal speed. The I-frame rendition may be 2 fps, 1 fps, 0.5 fps, 0.2 fps, or something else. Let F be the frame rate of the I-frame rendition. Then, 8/F is the multiplier, that is, how much the bit rate is increased by playing the rendition at eight frames per second. The bit rate doesn't increase by more than this factor because the player can't play more than eight frames per second.

The I-frame rendition should have an effective bit rate similar to the normal content. So the normal bit rate divided by the multiplier should be the bit rate for the I-frame. Dividing by a fraction is the same as multiplying by its inverse, so the result is 6.5 — the bit rate of a normal playlist of the same resolution times the fps of the I-frame playlist divided by eight.

I-frame image sequences

I-frame image sequences using the mjpg codec have been added to support some third-party devices. The sequences should be low bandwidth and require minimal processing. Players should prefer video I-frame variants over image sequences.

The recommendations for image sequences are as folows:

  • Supply a single mjpg variant
  • Unencrypted
  • 400 pixels wide with height based on the aspect ratio
  • One key-frame every 1 to 2 seconds
  • Bandwidth should be reasonable for the resolution based on the codec implementation

Audio rendition groups and variants

In building up a multivariant playlist, the first step is to choose your video resolutions and codecs. These are your basic variants. Each one will have a video media playlist. The playlist URI may be repeated in multiple EXT-X-STREAM-INF tags so that the same video can be associated with different audio content.

You will have some set of audio languages and codecs. A particular codec may be in stereo, in 5.1 sound, or both. Create one audio group for each pair of codec and channel count. Each group needs to have every language in it.

When you're making audio groups, there are some things to remember. First, ensure you have a stereo AAC group. This is good fallback because it's something all devices can play. If you have multichannel in a lossless audio codec, it's a good practice to have a multichannel AAC codec as well. Lossless requires a high bit rate. You want something available that has a lower bit rate. During playback you don't want to switch the number of channels. If playback is in multichannel, you want to stay in multichannel.

Generally speaking, the player doesn't switch between audio codecs, but there are three notable exceptions. The player switches between the AAC variants: AAC-LC, HE-AAC, HE-AACv2, and USAC (also called xHE-AAC). The player will also switch between lossless codecs and AAC codecs. In addition, when rendering audio to Spatial Audio-capable routes on Apple devices, the player may switch between available audio codecs and even channel layouts.

After you have your audio groups, you replicate the variant entries for each group, with some exceptions. If the codecs are switchable, like the AAC codecs, then you can spread the audio groups across the variants using the low audio bit rate group with the low video bit rates and the high audio bit rate group with the high video. But, if the codecs are not switchable, like AC-3 and lossless, then you want each codec to be associated with every variant. This doesn't create new variant playlists; it just creates new EXT-X-STREAM-INF tags in the multivariant playlist, which associate a video playlist with an audio group.

You may encounter a problem where the variants you want to favor aren't being chosen. The default behavior is to choose the highest bit rate among what's currently playable. With USAC and with Dolby Digital Plus, this can cause an inversion where the chosen variant is not what you would prefer. To remedy this, Apple added the SCORE attribute. The value is a floating-point number. You have to put it on all the variants. If you want to set an order, it has to be complete, otherwise you'll have situations where you won't be able to choose. The usual filtering occurs to get down to a set of variants, any of which could be played. At that point, the system uses SCORE to decide and the highest SCORE wins.

Values for the CODECS attribute

Use the CODECS attribute of the EXT-X-STREAM-INF tag (and EXT-X-I-FRAME-STREAM-INF) to specify media sample types. The value is a quoted-string containing a comma-separated list of formats, where each format specifies a media sample type that is present in a media segment of the playlist or in a media segment of some rendition that the tag references.

Valid format identifiers are those in the ISO Base Media File Format Name Space defined by RFC 6381. A format identifier is a sequence of elements separated by periods. The first element is the base sample type. HLS currently recognizes the following values for the base sample types:

Base sample type Description Notes
ac-3 AC-3 audio
alac Apple Lossless
apac Apple Positional Audio Codec
avc1 H.264 (Advanced Video Coding)
avc3 H.264 (Advanced Video Coding) Use not recommended
dvh1 Dolby Vision (based on hvc1)
dvhe Dolby Vision (based on hev1) Use not recommended
ec-3 Enhanced AC-3 audio
fLaC Free Lossless Audio Codec
hev1 HEVC (High-Efficiency Video Coding) Use not recommended
hvc1 HEVC (High-Efficiency Video Coding)
mjpg JPEG image sequence Limited use
mp4a MPEG-4 audio
stpp Subtitles (Timed Text)
wvtt WebVTT data

Note: HLS recognizes 'avc3', 'dvhe', and 'hev1', but Apple doesn't recommend using them.

The MP4 registration authority (mp4ra.org) lists a value of ec+3 for Enhanced AC-3 audio with JOC (Dolby Atmos) but it has been deprecated now. HLS uses ec-3 and marks the presence of the additional JOC content with JOC in the CHANNELS attribute of the audio rendition. The JOC must be capitalized. For example, CHANNELS="16/JOC". The numeric value should match the value of the complexity_index_type_a field in the EC3SpecificBox of the Dolby Digital Plus audio track.

Sample type Description
ac-3 AC-3 audio
alac Apple Lossless audio
apac.31.00 Apple Positional Audio Codec, profile 31, level 0
avc1.42001f H.264 Baseline Profile, Level 3.1 video
avc1.4d0028 H.264 Main Profile, Level 4.0 video
avc1.640029 H.264 High Profile, Level 4.1 video
dvh1.05.01 Dolby Vision Profile 5 (10-bit HEVC), Level 1 (720p24) video
dvh1.05.06 Dolby Vision Profile 5 (10-bit HEVC), Level 6 (2160p24) video
ec-3 Enhanced AC-3 audio
fLaC Free Lossless Audio Codec audio
hvc1.1.4.L126.B0 HEVC Main Profile, Main Tier, Level 4.2 video
hvc1.2.4.L123.B0 HEVC Main 10 Profile, Main Tier, Level 4.1 video
hvc1.2.4.L150.B0 HEVC Main 10 Profile, Main Tier, Level 5.0 video
mjpg JPEG image sequence
mp4a.40.2 AAC-LC audio
mp4a.40.5 HE-AAC audio
mp4a.40.29 HE-AACv2 audio
mp4a.40.34 MP3 audio
mp4a.40.42 xHE-AAC audio
stpp.ttml.im1t IMSC1 text-only subtitles
wvtt WebVTT subtitles

ALLOWED-CPC values for FairPlay Streaming

The ALLOWED-CPC attribute restricts playback of an encrypted variant stream to devices that guarantee a certain level of content protection robustness. The attribute associates a list of Content Protection Configuration (CPC) Labels with a specific KEYFORMAT value.

The permitted CPC Labels for FairPlay Streaming are:

CPC Label Devices that conform to that CPC Label
AppleBaseline Any Apple platform that supports FairPlay Streaming.
AppleMain Any Apple platform that supports FairPlay Streaming and guarantees enhanced content protection robustness (sufficient for studio 4K/HDR playback).
Baseline Any non-Apple platform that supports FairPlay Streaming. For example, any AirPlay 2-enabled smart TV.
Main Any non-Apple platform that supports FairPlay Streaming and guarantees enhanced content protection robustness (sufficient for studio 4K/HDR playback).

An example of a valid attribute is: ALLOWED-CPC="com.apple.streamingkeydelivery:AppleMain/Main"

The SUPPLEMENTAL-CODECS attribute

Some codecs are backward-compatible with other codecs. These codecs work by adding metadata that are ignored when being interpreted as the compatible codec, but used by the newer codec. These codecs include Dolby Vision 8.4 and 10.4 (compatible with HLG) and Dolby Vision 8.1 and 10.1 (compatible with HDR10).

To support these codecs on older implementations, the CODECS attribute is used to describe the base layer. The enhanced codec is described in the SUPPLEMENTAL-CODECS attribute. This allows implementations that support SUPPLEMENTAL-CODECS to take advantage of the true codec.

Each element in the SUPPLEMENTAL-CODECS attribute 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 that pertain to that codec's bitstream.

You can indicate the presence of HDR10+ metadata by adding a brand of 'cdm4'.

Example-codec-values:

Codec CODECS attribute SUPPLEMENTAL-CODECS attribute VIDEO-RANGE attribute
Dolby Vision 8.4 hvc1.2.4.L153.b0 dvh1.08.07/db4h HLG
Dolby Vision 8.1 hvc1.2.4.L150 dvh1.08.06/db1p PQ
Dolby Vision 10.4 av01.0.13M.10.0.112 dav1.10.09/db4h HLG
AV1 w/ HDR10+ av01.0.05M.10.0.112 av01.0.05M.10.0.112/cdm4 PQ

Note that, for Dolby Vision, the compatibility brand and the VIDEO-RANGE attribute act as cross-checks. Leaving out either one is incorrect.

Dim Flashing Lights

Dim Flashing Lights is a setting (see What's new in Accessibility) that allows people to indicate that they want to avoid bright, frequent flashes of light in video. As an additional measure, content producers can add markers to their HTTP Live Streaming content that identify the regions likely to cause discomfort.

Regions can be signalled using the standard #EXT-X-DATERANGE tag. The CLASS attribute should be set to "com.apple.accessibility.video.strobing.general-flash". Add an additional X-RISK-LEVEL attribute. The risk level should be a decimal floating-point value in the range 0 to 100, where 0 is minimal risk and 100 is very risky.

To avoid using a large number of regions, restrict risk-level values to a small set of values. Use a risk level of zero for regions that have very low risk. Don't mark regions with a risk level unless they have been analyzed. Raw risk values can be computed using an algorithm such as VideoFlashingReduction.

The avplayeritemmetadatacollector class can be used in your application to fetch the #EXT-X-DATERANGE tag metadata.

If you use the avkit framework the metadata is fetched for you and the timeline is marked with a reddish color. If you display your own timeline you should do something similar.

Additional spatial video specifications

Video Extended Usage atom ('vexu') is a sample description extension that conveys extensible information about spatial views. For more information, see QuickTime and ISO Base Media File Formats and Spatial and Immersive Media.

Spatial video can benefit from frame based metadata. This can be provided using timed metadata tracks within ISOBMFF (ISO Base Media File Format) or QuickTime files.

Note: An 'mebx' atom or box describes the samples in a timed metadata track. The international standard ISO/IEC 14496-12:2022 ("Information technology — Coding of audio-visual objects — Part 12: ISO base media file format") refers to this box as a BoxedMetadataSampleEntry (for more information, see section 12.9 Multiplexed timed metadata tracks of that document). The QuickTime File Format Specification refers to the 'mebx' atom as a timed metadata sample description (see Timed Metadata Media). The 'mebx' atom and its contents are a generic structure.

You can provide parallax metadata for subtitles or captions using a timed metadata track. This allows control over the depth at which the text is displayed relative to the image. For details, see QuickTime and ISO Base Media File Formats and Spatial and Immersive Media and Video Contour Map Payload Metadata within the QuickTime Movie File Format.

You can provide per frame rectangular mask metadata (PFRM, aka dynamic mask metadata) using a timed metadata track. This is used to indicate a fixed or changing rectangular area extracted from otherwise constant sized decoded video, for example letterboxing, or more complex spatial video adjustments to the displayed area. For details, see Rectangular Mask Payload Metadata within the QuickTime Movie File Format

Immersive video MUST point to an Apple Immersive Media Embedded (AIME) file via EXT-X-SESSION-DATA tag. This file provides information necessary to present the video correctly. To learn more about AIME, see Apple Immersive Media Embedded. See Apple Immersive Video Utility User Guide for more information.

Immersive video SHOULD use Apple Positional Audio Codec (APAC) for audio codec. APAC provides rich spatial audio experience. To learn more about APAC, see Apple Positional Audio Codec.

For more information on encoding MV-HEVC video, see Apple HEVC Stereo Video.

You can find also find these resources listed at AVFoundation Overview.

Multivariant Playlist and its resources expiry requirements

Requirements for downloading and persisting HLS streams

Content providers MUST assure that the original Multivariant Playlist URL and its resources do not expire on the CDN, as long as the downloaded asset will be needed by the application. There are 3 reasons. - (Online playback) While online the player may attempt to load additional resources from the MVP (for assuring compatibility when the device configuration changes, e.g., an external display adapter is connected), which could cause playback to fail or misbehave if the MVP (or its resources) is no longer available from the network. - (Supplementary downloads) If the app explicitly initiates supplementary download of variants and renditions to an existing movpkg location, the download operation will fail if the Multivariant Playlist URL or its resources have expired on the CDN. - (AirPlay) When AirPlay-ing a downloaded HLS content, the AirPlay receiver will attempt to load the original Multivariant Playlist URL, which should remain available for as long as the download can be persisted on the sender device.

Content Steering requirements

  • If the content supports Content Steering, Media Playlists MUST include STABLE-RENDITION-ID & STABLE-VARIANT-ID attributes; this decouples the variant identity from its CDN location.
  • If one Media Playlist includes a STABLE-RENDITION-ID or STABLE-VARIANT-ID, all other Media Playlists MUST also specify a stable ID.
  • The Content Steering manifest MUST remain available for the same timespan as the Multivariant Playlist URL above for the same reasons.

Interstitials requirements

  • Your ads and other non-primary media MAY be inserted in the Media Playlists or as Interstitials.
  • To allow predictable tier selection at the time of download, interstitial assets SHOULD follow the content structure of the main content (e.g., Codecs, subtitle/audio languages, etc.,).

Download performance requirements

  • Download speed will be improved by authoring content in a way that reduces the total number of HTTP requests, and specifically the requests that have a short payload. HLS content intended for download SHOULD be encapsulated as fMP4 or elementary audio stream, and consecutive segments in Media Playlists use EXT-X-BYTERANGE attributes with contiguous ranges; this allows the number of HTTP requests to be reduced via coalescing. Content SHOULD also avoid usage of small files, where possible. For instance, subtitles can be authored as a single segment for all cues across the entire asset duration.
  • Extra-long-form content, such as audiobooks, SHOULD be split in multiple assets (e.g., per chapter). This is particularly important for playback of downloaded audio assets on watchOS, to enable performant playback start-up and reduce battery usage.

Example playlist with Stereo video.

Example playlists

Note: Please see Streaming Examples for sample HLS streams.

#EXTM3U
#EXT-X-VERSION:12
#EXT-X-INDEPENDENT-SEGMENTS

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="ac3-48-384",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="6",URI="audio/prog_index.m3u8"

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=726521,BANDWIDTH=910558,VIDEO-RANGE=PQ,CODECS="dvh1.20.01,ac-3",RESOLUTION=640x360,FRAME-RATE=24.000,CLOSED-CAPTIONS=NONE,AUDIO="ac3-48-384",REQ-VIDEO-LAYOUT="CH-STEREO"
360p/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7224756,BANDWIDTH=10079102,VIDEO-RANGE=PQ,CODECS="dvh1.20.01,ec-3",RESOLUTION=1280x720,FRAME-RATE=24.000,CLOSED-CAPTIONS=NONE,AUDIO="atmos-48-448",REQ-VIDEO-LAYOUT="CH-STEREO"
720p/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=12327020,BANDWIDTH=17120478,VIDEO-RANGE=PQ,CODECS="dvh1.20.03,ec-3",RESOLUTION=1920x1080,FRAME-RATE=24.000,CLOSED-CAPTIONS=NONE,AUDIO="atmos-48-448",REQ-VIDEO-LAYOUT="CH-STEREO"
1080p/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=16683700,BANDWIDTH=23228969,VIDEO-RANGE=PQ,CODECS="dvh1.20.05,ac-3",RESOLUTION=2560x1440,FRAME-RATE=24.000,CLOSED-CAPTIONS=NONE,AUDIO="ac3-48-384",REQ-VIDEO-LAYOUT="CH-STEREO"
1440p/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=34515644,BANDWIDTH=47959720,VIDEO-RANGE=PQ,CODECS="dvh1.20.06,ac-3",RESOLUTION=3840x2160,FRAME-RATE=24.000,CLOSED-CAPTIONS=NONE,AUDIO="ac3-48-384",REQ-VIDEO-LAYOUT="CH-STEREO"
2160p/prog_index.m3u8

Example playlist with APMP video.

#EXTM3U
#EXT-X-VERSION:12
#EXT-X-INDEPENDENT-SEGMENTS

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=25403063,BANDWIDTH=34135166,VIDEO-RANGE=SDR,CODECS="hvc1.2.20000000.H150.B0",RESOLUTION=3840x1920,FRAME-RATE=29.970,CLOSED-CAPTIONS=NONE,REQ-VIDEO-LAYOUT="CH-STEREO/PROJ-EQUI"
small/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=50285525,BANDWIDTH=65273029,VIDEO-RANGE=SDR,CODECS="hvc1.2.20000000.H180.B0",RESOLUTION=5440x2720,FRAME-RATE=29.970,CLOSED-CAPTIONS=NONE,REQ-VIDEO-LAYOUT="CH-STEREO/PROJ-EQUI"
med/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=102904567,BANDWIDTH=117277565,VIDEO-RANGE=SDR,CODECS="hvc1.2.20000000.H180.B0",RESOLUTION=7680x3840,FRAME-RATE=29.970,CLOSED-CAPTIONS=NONE,REQ-VIDEO-LAYOUT="CH-STEREO/PROJ-EQUI"
large/prog_index.m3u8

#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=1787583,BANDWIDTH=2559008,VIDEO-RANGE=SDR,CODECS="hvc1.2.20000000.H150.B0",RESOLUTION=3840x1920,REQ-VIDEO-LAYOUT="CH-MONO/PROJ-RECT",URI="small/iframe_var.m3u8"

#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=3121560,BANDWIDTH=4464969,VIDEO-RANGE=SDR,CODECS="hvc1.2.20000000.H180.B0",RESOLUTION=5440x2720,REQ-VIDEO-LAYOUT="CH-MONO/PROJ-RECT",URI="med/iframe_var.m3u8"

#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=5070173,BANDWIDTH=6906054,VIDEO-RANGE=SDR,CODECS="hvc1.2.20000000.H180.B0",RESOLUTION=7680x3840,REQ-VIDEO-LAYOUT="CH-MONO/PROJ-RECT",URI="large/iframe_var.m3u8"

Example playlist with AIV video.

#EXTM3U
#EXT-X-VERSION:12
#EXT-X-INDEPENDENT-SEGMENTS

#EXT-X-SESSION-DATA:DATA-ID="com.apple.hls.venue-description",URI="sample.aime"

#== AUDIO
#EXT-X-MEDIA:TYPE=AUDIO,LANGUAGE="en",GROUP-ID="apac",NAME="English",DEFAULT=YES,CHANNELS="20/3OA/BED-4",CHARACTERISTICS="public.original-content",URI="Audio/audio_index.m3u8"

#-- subtitles --
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",LANGUAGE="en",NAME="English",AUTOSELECT=NO,FORCED=NO,URI="Subtitles/en/en_index.m3u8"

#== VIDEO - Stereo MV-HEVC
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="stereo-16",NAME="Director's Cut",DEFAULT=YES,CHARACTERISTICS="com.apple.position.dirs-cut",URI="Video/16Mb/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="stereo-20",NAME="Director's Cut",DEFAULT=YES,CHARACTERISTICS="com.apple.position.dirs-cut",URI="Video/20Mb/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="stereo-40",NAME="Director's Cut",DEFAULT=YES,CHARACTERISTICS="com.apple.position.dirs-cut",URI="Video/40Mb/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="stereo-50",NAME="Director's Cut",DEFAULT=YES,CHARACTERISTICS="com.apple.position.dirs-cut",URI="Video/50Mb/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="stereo-100",NAME="Director's Cut",DEFAULT=YES,CHARACTERISTICS="com.apple.position.dirs-cut",URI="Video/100Mb/prog_index.m3u8"


#== Variants
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=18077520,BANDWIDTH=30636545,AUDIO="apac",SUBTITLES="subs",VIDEO="stereo-16",VIDEO-RANGE=PQ,CODECS="hvc1.2.20000000.H183.B0,apac.31.00",RESOLUTION=3600x3600,FRAME-RATE=90.000,CLOSED-CAPTIONS=NONE,REQ-VIDEO-LAYOUT="CH-STEREO/PROJ-AIV"
Video/16Mb/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=21960196,BANDWIDTH=36415190,AUDIO="apac",SUBTITLES="subs",VIDEO="stereo-20",VIDEO-RANGE=PQ,CODECS="hvc1.2.20000000.H183.B0,apac.31.00",RESOLUTION=3600x3600,FRAME-RATE=90.000,CLOSED-CAPTIONS=NONE,REQ-VIDEO-LAYOUT="CH-STEREO/PROJ-AIV"
Video/20Mb/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=41505403,BANDWIDTH=71521624,AUDIO="apac",SUBTITLES="subs",VIDEO="stereo-40",VIDEO-RANGE=PQ,CODECS="hvc1.2.20000000.H183.B0,apac.31.00",RESOLUTION=4320x4320,FRAME-RATE=90.000,CLOSED-CAPTIONS=NONE,REQ-VIDEO-LAYOUT="CH-STEREO/PROJ-AIV"
Video/40Mb/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=98690153,BANDWIDTH=177339446,AUDIO="apac",SUBTITLES="subs",VIDEO="stereo-100",VIDEO-RANGE=PQ,CODECS="hvc1.2.20000000.H183.B0,apac.31.00",RESOLUTION=4320x4320,FRAME-RATE=90.000,CLOSED-CAPTIONS=NONE,REQ-VIDEO-LAYOUT="CH-STEREO/PROJ-AIV"
Video/100Mb/prog_index.m3u8

Example playlist with SDR, Dolby Vision, HDR10, and HLG content at resolutions from 720p to 4K

The SUPPLEMENTAL-CODECS attribute is used to indicate that the HDR10 content is compatible with Dolby Vison 8.1 and the HLG content is compatible with Dolby Vision 8.4.

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-INDEPENDENT-SEGMENTS

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2778321,BANDWIDTH=3971374,VIDEO-RANGE=SDR,CODECS="hvc1.2.4.L123.B0",RESOLUTION=1280x720,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=NONE
sdr_720/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6759875,BANDWIDTH=10022043,VIDEO-RANGE=SDR,CODECS="hvc1.2.4.L123.B0",RESOLUTION=1920x1080,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-0
sdr_1080/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=20985770,BANDWIDTH=28058971,VIDEO-RANGE=SDR,CODECS="hvc1.2.4.L150.B0",RESOLUTION=3840x2160,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-1
sdr_2160/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3385450,BANDWIDTH=5327059,VIDEO-RANGE=PQ,CODECS="dvh1.05.01",RESOLUTION=1280x720,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=NONE
dolby_720/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7999361,BANDWIDTH=12876596,VIDEO-RANGE=PQ,CODECS="dvh1.05.03",RESOLUTION=1920x1080,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-0
dolby_1080/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=24975091,BANDWIDTH=30041698,VIDEO-RANGE=PQ,CODECS="dvh1.05.06",RESOLUTION=3840x2160,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-1
dolby_2160/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3320040,BANDWIDTH=5280654,VIDEO-RANGE=PQ,CODECS="hvc1.2.4.L123.B0",SUPPLEMENTAL-CODECS="dvh1.08.01/db1p",RESOLUTION=1280x720,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=NONE
hdr10_dolby_720/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7964551,BANDWIDTH=12886714,VIDEO-RANGE=PQ,CODECS="hvc1.2.4.L123.B0",SUPPLEMENTAL-CODECS="dvh1.08.03/db1p",RESOLUTION=1920x1080,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-0
hdr10_dolby_1080/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=24833402,BANDWIDTH=29983769,VIDEO-RANGE=PQ,CODECS="hvc1.2.4.L150.B0",SUPPLEMENTAL-CODECS="dvh1.08.08/db1p",RESOLUTION=3840x2160,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-1
hdr10_dolby_2160/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3061873,BANDWIDTH=3109758,VIDEO-RANGE=HLG,CODECS="hvc1.2.20000000.L150.B0",SUPPLEMENTAL-CODECS="dvh1.08.01/db4h",RESOLUTION=1280x720,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=NONE
hlg_dolby_720_24/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6759750,BANDWIDTH=6884346,VIDEO-RANGE=HLG,CODECS="hvc1.2.20000000.L153.B0",SUPPLEMENTAL-CODECS="dvh1.08.03/db4h",RESOLUTION=1920x1080,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-0
hlg_dolby_1080_30/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=26472863,BANDWIDTH=28111779,VIDEO-RANGE=HLG,CODECS="hvc1.2.20000000.L183.B0",SUPPLEMENTAL-CODECS="dvh1.08.08/db4h",RESOLUTION=3840x2160,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-1
hlg_dolby_2160_60/prog_index.m3u8

#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=248586,BANDWIDTH=593626,VIDEO-RANGE=SDR,CODECS="hvc1.2.4.L123.B0",RESOLUTION=1280x720,HDCP-LEVEL=NONE,URI="sdr_720/iframe_index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=399790,BANDWIDTH=956552,VIDEO-RANGE=SDR,CODECS="hvc1.2.4.L123.B0",RESOLUTION=1920x1080,HDCP-LEVEL=TYPE-0,URI="sdr_1080/iframe_index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=826971,BANDWIDTH=1941397,VIDEO-RANGE=SDR,CODECS="hvc1.2.4.L150.B0",RESOLUTION=3840x2160,HDCP-LEVEL=TYPE-1,URI="sdr_2160/iframe_index.m3u8"

#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=232253,BANDWIDTH=573073,VIDEO-RANGE=PQ,CODECS="dvh1.05.01",RESOLUTION=1280x720,HDCP-LEVEL=NONE,URI="dolby_720/iframe_index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=365337,BANDWIDTH=905037,VIDEO-RANGE=PQ,CODECS="dvh1.05.03",RESOLUTION=1920x1080,HDCP-LEVEL=TYPE-0,URI="dolby_1080/iframe_index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=739114,BANDWIDTH=1893236,VIDEO-RANGE=PQ,CODECS="dvh1.05.06",RESOLUTION=3840x2160,HDCP-LEVEL=TYPE-1,URI="dolby_2160/iframe_index.m3u8"

#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=232511,BANDWIDTH=572673,VIDEO-RANGE=PQ,CODECS="hvc1.2.4.L123.B0",SUPPLEMENTAL-CODECS="dvh1.08.01/db1p",RESOLUTION=1280x720,HDCP-LEVEL=NONE,URI="hdr10_dolby_720/iframe_index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=364552,BANDWIDTH=905053,VIDEO-RANGE=PQ,CODECS="hvc1.2.4.L123.B0",SUPPLEMENTAL-CODECS="dvh1.08.03/db1p",RESOLUTION=1920x1080,HDCP-LEVEL=TYPE-0,URI="hdr10_dolby_1080/iframe_index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=739757,BANDWIDTH=1895477,VIDEO-RANGE=PQ,CODECS="hvc1.2.4.L150.B0",SUPPLEMENTAL-CODECS="dvh1.08.08/db1p",RESOLUTION=3840x2160,HDCP-LEVEL=TYPE-1,URI="hdr10_dolby_2160/iframe_index.m3u8"

#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=214431,BANDWIDTH=337245,VIDEO-RANGE=HLG,CODECS="hvc1.2.20000000.L150.B0",SUPPLEMENTAL-CODECS="dvh1.08.01/db4h",RESOLUTION=1280x720,HDCP-LEVEL=NONE,URI="hlg_dolby_720/prog_index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=309406,BANDWIDTH=483498,VIDEO-RANGE=HLG,CODECS="hvc1.2.20000000.L153.B0",SUPPLEMENTAL-CODECS="dvh1.08.03/db4h",RESOLUTION=1920x1080,HDCP-LEVEL=TYPE-0,URI="hlg_dolby_1080/prog_index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=788595,BANDWIDTH=1777136,VIDEO-RANGE=HLG,CODECS="hvc1.2.20000000.L183.B0",SUPPLEMENTAL-CODECS="dvh1.08.08/db4h",RESOLUTION=3840x2160,HDCP-LEVEL=TYPE-1,URI="hlg_dolby_2160/prog_index.m3u8"

The HEVC codec values are described in ISO/IEC 14496-15. A short description is Codec.Profile.Flags.TierLevel.Constraints, so in hvc1.2.4.L123.B0, the 2 means Main 10 profile, and the L123 means normal tier, level 4.1.

Information about Dolby Video codec values can be obtained from Dolby. A short description is Codec.Profile.Level, so in dvh1.05.03 the Profile is 5 and the Level is 3.

Revision history

The following table describes the changes to this document.

Date Notes
2025-06-26 Fixed malformed URLs.
2025-06-24 Added container format rule for AV1.
2025-05-08 Added AIV bit-rate tiers.
2025-05-02 Added Offline download guidelines.
2025-04-30 Added APAC authoring guidelines.
2025-04-18 Added Spatial (Stereo, APMP and AIV) authoring guidelines.
2025-03-25 Clarified use of DV20 for Stereo video for VisionOS.
2023-05-24 Minor changes.
2023-08-15 Added visionOS requirements. Added note about audio/aac.
2023-06-27 Added stereo video rules and MV-HEVC bit rate.
2023-05-19 Added detail about I-frame image sequences.
2022-08-22 Added “Audio rendition groups and variants” section to the appendix, clarified language around the LANGUAGE attribute, and added additional information about Apple TV and Dolby ATMOS.
2021-11-12 Renamed “primary playlist” to “Multivariant Playlist.”
2020-06-22 Added new sections: Low-Latency HLS and ALLOWED-CPC Values for FairPlay Streaming.
2019-06-03 Added new table describing MIME types.
2019-03-04 Added new rules for Airplay 2-enabled TVs. Moved appendixes into child article.
2018-09-11 Added new rules for content protection and media playlists.
2018-06-18 Added Dolby Digital Plus with Dolby Atmos information. Added codec value section.
2018-04-09 Made several minor changes to individual spec points. Updated the variant bit rate table and broke it into two separate tables.
2018-01-16 Fixed several typos and made a couple of minor changes to audio encoding requirements.
2017-09-19 Updated document with HDR (HEVC) information.
2017-06-06 Updated document with HEVC/H.265 information.
2016-09-13 Added rules for fragmented MP4 files.
2016-06-13 Updated for iOS and macOS specifications.
2016-03-21 Updated Dolby Digital bit rate recommendation to 384 kbit/s.
2016-01-11 Fixed typo in section 10.2.
2015-12-17 Added section on using the hlsreport tool.
2015-12-08 Corrected a mistake in Table 2-3, Column 2 heading. Changed to 16:9 aspect from 19:0.
2015-10-21 Published the first edition of this document describing the HTTP Live Streaming specifications for audio and video content delivery for Apple TV.