The multivariant playlist, called the master playlist in RFC 8216, is the first file a player loads. It lists the variant streams, the same content at different bit rates and resolutions, and the alternative renditions they can use: other audio languages, subtitles, closed captions and camera angles. The player picks a variant and switches as the network allows.
EXT-X-STREAM-INF
One variant stream. The next line is the URI of its media playlist.
| Attribute | Type | Meaning |
|---|---|---|
BANDWIDTH | integer, required | Peak bit rate in bits per second. |
AVERAGE-BANDWIDTH | integer | Average bit rate. |
SCORE | positive float | Relative quality: higher is better. If one variant has it, all should. |
CODECS | quoted string | Every codec in the variant, as RFC 6381 names, such as "avc1.640028,mp4a.40.2". IMSC subtitles use stpp.ttml.im1t. Should always be given. |
SUPPLEMENTAL-CODECS | quoted string | Enhancement layers a capable player can use, each a codec name then compatibility brands after /, such as "dvh1.08.07/db4h" for Dolby Vision. |
RESOLUTION | widthxheight | Picture size. |
FRAME-RATE | float, 3 decimals | Highest frame rate; should be given above 30. |
HDCP-LEVEL | TYPE-0, TYPE-1, NONE | Output protection the content may need. |
ALLOWED-CPC | quoted string | Content protection configurations allowed, per key format: "com.example.drm1:SMART-TV/PC". |
VIDEO-RANGE | SDR (default), HLG, PQ | Dynamic range: by transfer characteristics 1, 6, 13, 14, 15 (SDR), 18 (HLG) or 16 (PQ). A player that does not know the value skips the variant. |
REQ-VIDEO-LAYOUT | quoted string | Version 12. Required video layout: channel CH-STEREO or CH-MONO, projection PROJ-RECT, PROJ-EQUI, PROJ-HEQU or PROJ-PRIM, joined by /. A player that does not know a value skips the variant. |
STABLE-VARIANT-ID | quoted string | An identifier that stays the same across reloads; characters a–z A–Z 0–9 + / = . - _. |
AUDIO, VIDEO, SUBTITLES | quoted string | The GROUP-ID of the renditions of that type this variant can use. |
CLOSED-CAPTIONS | quoted string or NONE | The closed-caption group; NONE means none, and then every variant must say NONE. |
PATHWAY-ID | quoted string | The content-steering pathway (default "."). |
#EXT-X-I-FRAME-STREAM-INF describes an I-frame playlist for trick play.
It takes the same attributes except FRAME-RATE, AUDIO,
SUBTITLES and CLOSED-CAPTIONS, plus a required
URI, and has no URI line after it. PROGRAM-ID on either tag
was removed in version 6.
EXT-X-MEDIA
One alternative rendition, in a group that variants refer to.
| Attribute | Type | Meaning |
|---|---|---|
TYPE | AUDIO, VIDEO, SUBTITLES, CLOSED-CAPTIONS; required | What the rendition is. |
URI | quoted string | Its media playlist. Required for subtitles; not allowed for closed captions; if left out for audio or video, the rendition is inside the variant itself. |
GROUP-ID | quoted string, required | The group it belongs to. |
LANGUAGE | quoted string | Its language, as an RFC 5646 tag such as "en". |
ASSOC-LANGUAGE | quoted string | A language associated with it, such as a spoken form of a written one. |
NAME | quoted string, required | A name for menus, in the rendition’s language. |
STABLE-RENDITION-ID | quoted string | Stable identifier, same characters as STABLE-VARIANT-ID. |
DEFAULT | YES, NO (default) | Play this one unless the user chooses otherwise. |
AUTOSELECT | YES, NO (default) | May be chosen automatically, for example by language. Must be YES when DEFAULT is. |
FORCED | YES, NO (default) | Subtitles only: forced subtitles, shown even when subtitles are off. |
INSTREAM-ID | quoted string | For closed captions, required: "CC1" to "CC4" (CEA-608) or "SERVICE1" to "SERVICE63" (CEA-708, version 7). For other types, version 13: letters, digits and full stops. |
BIT-DEPTH | integer | Audio only: bits per sample. |
SAMPLE-RATE | integer | Audio only: samples per second. |
CHARACTERISTICS | quoted string | Media characteristic tags, separated by commas (below). |
CHANNELS | quoted string | Audio only: up to three parts separated by / (below). |
| Characteristic | For | Meaning |
|---|---|---|
public.accessibility.transcribes-spoken-dialog | subtitles | Transcribes the dialogue |
public.accessibility.describes-music-and-sound | subtitles | Describes music and sounds (captions for the deaf and hard of hearing) |
public.easy-to-read | subtitles | Simplified text |
public.accessibility.describes-video | audio | Audio description of the picture |
public.machine-generated | any | Made by machine, such as automatic captions |
CHANNELS part | Content |
|---|---|
| 1 (required) | The largest number of channels, such as 6 for 5.1 |
| 2 | Audio coding identifiers separated by commas, made of capitals, digits and hyphens, such as 3OA for third-order ambisonics; - for channel-based audio only |
| 3 | Special usage identifiers: BINAURAL, IMMERSIVE, DOWNMIX, BED-n, DOF-3 or DOF-6 |
Session tags
| Tag | Attributes | Meaning |
|---|---|---|
#EXT-X-SESSION-DATA | DATA-ID (required, reverse-DNS name such as "com.example.title"), and exactly one of VALUE or URI; FORMAT (JSON, the default, or RAW; for URI only); LANGUAGE | Any data for the whole presentation. No two tags share both DATA-ID and LANGUAGE. |
#EXT-X-SESSION-KEY | as EXT-X-KEY, but METHOD may not be NONE | A key the media playlists will use, so a player can load it early. |
#EXT-X-CONTENT-STEERING | SERVER-URI (required), PATHWAY-ID | The steering server that tells the player which pathway (CDN) to use, and the one to start with. At most once. |
The tags shared with media playlists (EXT-X-VERSION,
EXT-X-INDEPENDENT-SEGMENTS, EXT-X-START,
EXT-X-DEFINE) are on Playlist file.
Worked example
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2",URI="audio/en.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="fr",NAME="Français",AUTOSELECT=YES,CHANNELS="2",URI="audio/fr.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",LANGUAGE="en",NAME="English",AUTOSELECT=YES,URI="subs/en.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2500000,AVERAGE-BANDWIDTH=2200000,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=25.000,AUDIO="aac",SUBTITLES="subs",CLOSED-CAPTIONS=NONE
video/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6000000,AVERAGE-BANDWIDTH=5200000,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=25.000,AUDIO="aac",SUBTITLES="subs",CLOSED-CAPTIONS=NONE
video/1080p.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=300000,CODECS="avc1.640028",RESOLUTION=1920x1080,URI="video/1080p-iframes.m3u8"