Scope
Make expand_dash_representations emit Formats from ALL <Period> elements in a multi-period MPD (today: first period only + warn). Match yt-dlp's _merge_mpd_periods behavior of concatenating fragments across periods for matching streams.
Why
DASH multi-period manifests are common for ad-insertion ("pre-roll-then-content"), chapter splits, and live-archive recordings stitched into a VoD. yt-dlp _merge_mpd_periods (yt_dlp/extractor/common.py:2708–2733) flattens periods into one logical stream by concatenating fragment lists for matching format_id keys.
PR #235 chose first-period-only as the conservative default. Real-world multi-period MPDs will break (only the first period plays) until this lands.
Acceptance criteria
expand_dash_representations walks all periods, not just mpd.periods.first().
- Per-period Reps with matching
(adapt_idx, repr_idx) (or matching repr.id) are merged: the second period's fragments append to the first's Fragment list.
- Periods with no matching Rep produce a separate Format with a period-suffixed
format_id (v720p_period2).
- Hand-authored fixture MPD with two periods × two Reps each → 2 Formats, each carrying fragments from both periods.
- The "Multi-period MPDs" design-doc non-goal is updated to reflect support landing.
Out of scope
- Cross-period codec changes (yt-dlp emits separate Formats; we should too).
- Period-level discontinuity handling at the muxer level.
Scope
Make
expand_dash_representationsemit Formats from ALL<Period>elements in a multi-period MPD (today: first period only + warn). Match yt-dlp's_merge_mpd_periodsbehavior of concatenating fragments across periods for matching streams.Why
DASH multi-period manifests are common for ad-insertion ("pre-roll-then-content"), chapter splits, and live-archive recordings stitched into a VoD. yt-dlp
_merge_mpd_periods(yt_dlp/extractor/common.py:2708–2733) flattens periods into one logical stream by concatenating fragment lists for matchingformat_idkeys.PR #235 chose first-period-only as the conservative default. Real-world multi-period MPDs will break (only the first period plays) until this lands.
Acceptance criteria
expand_dash_representationswalks all periods, not justmpd.periods.first().(adapt_idx, repr_idx)(or matchingrepr.id) are merged: the second period's fragments append to the first'sFragmentlist.format_id(v720p_period2).Out of scope