Short answer: an MPD is an XML description of a programme: which periods it has, which video and audio representations exist, at what resolutions and bitrates, in what segments, and how they are addressed. Nothing in it is playable. To download DASH you select one video representation and one audio representation, fetch their segments in order, and mux the two into one container — normally MP4 — without re-encoding. The standard is maintained by the DASH Industry Forum.
Read the manifest before you fetch anything
Three things make MPD different from an HLS playlist, and each changes the download:
- Tracks are separate by design. Video and audio live in their own AdaptationSets. A tool that grabs “the video” produces a silent file unless it also grabs an audio representation — the failure mode described in downloaded video has no audio.
- Multiple periods. A programme can be split into periods (often where ad insertion happens). Segment numbering restarts per period, so ordering must follow the period sequence, not a single counter.
- Two addressing models. Either a template with numbered segments, or an explicit list of segment URLs. The second behaves like the HLS case; the first requires you to expand the pattern correctly.
How to tell DASH from HLS in one glance
| Signal | DASH | HLS |
|---|---|---|
| Manifest extension | .mpd (XML) | .m3u8 (text playlists, per RFC 8216) |
| Typical segment containers | .m4s (fMP4), sometimes .webm | .ts or .m4s |
| Audio | Usually a separate AdaptationSet | Often multiplexed inside segments |
| Quality switching | Representation selection | Rendition/variant selection |
Why it matters: HLS often hands you one merged file after a simple merge step, while DASH almost always needs you to combine two streams. Doing the wrong one produces the classic “downloaded video has no sound”.
The workflow
Get the manifest from a working session
DASH is commonly used for content that expects a login. Open the page where the video plays and let the player request the MPD; then capture what the page asked for. Copying a page URL into a service that cannot hold your session is where most DASH attempts die.
Pick one video and one audio representation
Choose video by resolution then bitrate, and audio by bitrate and language if several are offered. The player's own pick reflects bandwidth estimation, not the ceiling of the source — the selection rules are in highest-quality downloading.
Fetch all segments of both
Complete means every segment, in period order. Partial sets mux into files that stop early or lose sync, and the error usually surfaces at the end of a long download rather than the start.
Mux with FFmpeg, no re-encode
With ordered inputs, FFmpeg concatenates and combines the elementary streams into a single MP4 by copying them — documented in its concatenation guide and formats reference:
ffmpeg -f concat -safe 0 -i video.txt -i audio.m4a -c copy -map 0:v -map 1:a out.mp4
where video.txt lists each video segment file in order. This is what “a DASH downloader with FFmpeg” actually means: the tool drives FFmpeg for repackaging, while FFmpeg does no lossy work at all.
Verify duration, sync and audio
ffprobe out.mp4 should show one video and at least one audio stream, with a duration matching the source. Then play three points — start, middle, end.
Where DASH downloads go wrong
| Symptom | Cause | Fix |
|---|---|---|
| Silent MP4 | Only the video AdaptationSet was fetched | Fetch an audio representation too, then map both |
| File stops halfway | Segments from a second period were never fetched | Follow period order and confirm the count matches the manifest |
| Wrong scene order | Alphabetical sorting instead of manifest order | Build the concat list from the MPD, not from directory listing |
| Audio drifts out of sync | Non-zero start timestamps | Regenerate PTS or apply an offset during mux |
| 403 near the end | Signed segment URLs expired mid-run | Refresh the manifest and resume the remaining segments |
Scope, stated plainly
DASH is also the carrier for DRM-protected delivery. Where a stream is encrypted with DRM, or gated behind a paywall, that is outside this page and outside VidBrowser's stated use: the workflow above assumes content you are entitled to watch in your own session, in clear. Saving such content for personal reference does not transfer rights — check the site's terms and the owner's licence before republishing anything.
FAQ
How do I download a DASH MPD video?
Read the MPD, choose one video and one audio representation, fetch every segment in period order, then mux them into MP4 with stream copy.
Can I use FFmpeg as a DASH downloader?
FFmpeg muxes and demuxes; it does not enumerate a site's manifest for you or hold your session. Pair it with a tool that does the capture.
Why is my DASH download missing audio?
Because DASH carries audio in a separate AdaptationSet. Fetch one audio representation and map it in the mux.
Is an MPD file a video?
No. It is XML describing periods, representations, segments and their addresses. Renaming it to .mp4 produces nothing playable.
Does muxing reduce quality?
No — stream copy repackages existing encoded data. Only re-encoding reduces quality.
Can I download DRM-protected DASH?
No, and not a method here attempts it. Encrypted delivery and paywalled access are out of scope.