⚙️ What is a Manifest File?
Definition:
A manifest file is a metadata file that lists all the video/audio chunks (segments) and their properties for adaptive streaming.
-
Helps the client/player know:
- Which chunks exist
- What resolutions/bitrates are available
- Where to download each chunk
Analogy:
- Think of it as a table of contents for a video book, showing all chapters (chunks) and the quality options.
🔄 Role in Video Chunk Processing
-
Video is encoded into multiple bitrates/resolutions (e.g., 1080p, 720p, 480p).
-
Video is split into chunks/segments (usually 2–10 seconds each).
-
Manifest file is generated:
- Lists all available chunks per resolution/bitrate
- Provides URLs for each chunk
- Includes timing information, codecs, encryption info
-
Client playback:
- Downloads manifest first
- Chooses the initial chunk to play
- Dynamically switches quality/bitrate for next chunks based on network conditions
⚡ Types of Manifest Files
| Protocol | Manifest File | Description |
|---|---|---|
| HLS (HTTP Live Streaming) | .m3u8 |
Lists variant playlists for different bitrates & chunk URLs |
| MPEG-DASH | .mpd (Media Presentation Description) |
Lists adaptation sets (video/audio) and segment URLs |
| Smooth Streaming (MS) | .ism |
Lists chunks and bitrate options for Smooth Streaming |
| HDS (Adobe) | .f4m |
Contains metadata about chunks and bitrates |
1. HLS Manifest (.m3u8) Example
Master Playlist: (lists all qualities)
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=500000,RESOLUTION=640x360
low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=1280x720
mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,RESOLUTION=1920x1080
high/index.m3u8
Variant Playlist: (lists video chunks)
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
chunk1.ts
#EXTINF:10,
chunk2.ts
#EXTINF:10,
chunk3.ts
2. MPEG-DASH Manifest (.mpd) Example
<MPD type="static" mediaPresentationDuration="PT30M">
<Period>
<AdaptationSet mimeType="video/mp4" codecs="avc1.4d401f">
<Representation id="1080p" bandwidth="3000000" width="1920" height="1080">
<SegmentList timescale="1">
<SegmentURL media="chunk1.mp4"/>
<SegmentURL media="chunk2.mp4"/>
</SegmentList>
</Representation>
<Representation id="720p" bandwidth="1000000" width="1280" height="720">
<SegmentList timescale="1">
<SegmentURL media="chunk1.mp4"/>
<SegmentURL media="chunk2.mp4"/>
</SegmentList>
</Representation>
</AdaptationSet>
</Period>
</MPD>
🔧 Key Points About Manifest Files
- Lists all video/audio segments
- Contains multiple bitrates/resolutions for adaptive streaming
- Contains URLs or paths to each chunk
- Can include encryption/DRM info
- Enables client to make bitrate switching decisions
🧩 Why Manifest Files are Important
- Without a manifest, the client doesn’t know what chunks exist or where to fetch them.
- Enables adaptive bitrate streaming (ABR) to work.
- Critical for smooth playback, network adaptation, and device optimization.
💡 Analogy:
-
Manifest file = menu card in a restaurant:
- Shows all dishes (video chunks)
- Shows sizes/quality options (resolutions & bitrates)
- Shows where to get each dish (chunk URL)