subhra74/xdm · error
Manifest type dynamic is not supported
Error message
Manifest type dynamic is not supported
What it means
The MPD parser only supports static (VOD) DASH manifests. After validating the root tag, Parse reads the MPD element's "type" attribute and throws this error when it equals "dynamic", i.e. a live stream manifest. Dynamic manifests change over time and are not supported by this code path.
Solutions
- Use a static (VOD) MPD URL instead of the live one; look for the on-demand rendition of the content.
- Wait until the live event finishes and grab the archived/static manifest if one is published.
- Remove or adapt this check only if you genuinely need live support (requires SegmentTemplate/availabilityTimeOffset handling) — not a quick fix.
- Catch the error upstream and inform the user that live DASH is not supported.
Defensive patterns
Strategy: validation
Validate before calling
var body = await http.GetStringAsync(manifestUrl);
if (body.Contains("type=\"dynamic\"") || body.Contains("type='dynamic'"))
throw new Exception("Live (dynamic) DASH manifest not supported"); Try / catch
try { return MpdParser.Parse(url, null); }
catch (Exception ex) when (ex.Message == "Manifest type dynamic is not supported")
{ throw new UnsupportedStreamException("Live DASH streams are not supported", ex); } Prevention
- Detect live streams early via MPD type attribute and reject with a clear message
- Prefer VOD/archive URLs when both are offered
- Document live-DASH limitation for users of the library
When it happens
Trigger: Parsing an MPD whose root element carries type="dynamic" — typically a live/linear DASH stream URL rather than an on-demand (type="static" or no type) manifest.
Common situations: User pastes a live TV or live-event DASH URL expecting a download; a VOD site accidentally serves the live variant of a manifest; broadcaster periodically switches manifests during events.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
AI-assisted analysis of subhra74/xdm@1ca5a25aae (2026-09-13).
Data as JSON: /api/errors/629264e738d3cf40.
Report an issue: GitHub.
Appendix: source
Thrown at app/XDM/XDM.Core/MediaParser/Dash/MpdParser.cs:35
private static string trickModeUri = "http://dashif.org/guidelines/trickmode";
private static readonly Regex TemplatePattern =
new Regex(@"\$(RepresentationID|Time|Time%0(?<time_digits>[\d]+)(?<time_dx>[dx])?|Number|Number%0(?<num_digits>[\d]+)(?<num_dx>[dx])?|Bandwidth)\$");
//@"\$(RepresentationID|Time|Time(%0([\d]+)([dx])?)?|Number|Number(%0([\d]+)([dx])?)?|Bandwidth)\$");
public static IList<IList<KeyValuePair<Representation?, Representation?>>> Parse(
string[] manifestLines,
string playlistUrl)
{
using var memstream = new MemoryStream(Encoding.UTF8.GetBytes(string.Join("\n", manifestLines)));
var xmldoc = new XmlDocument();
xmldoc.Load(new XmlTextReader(memstream)
{
Namespaces = false
});
if (xmldoc.DocumentElement?.Name != "MPD")
throw new Exception("Missing MPD start tag: " + xmldoc.DocumentElement.Name);
if (xmldoc.DocumentElement.Attributes["type"]?.Value == "dynamic")
throw new Exception("Manifest type dynamic is not supported");
if (xmldoc.DocumentElement.SelectSingleNode("descendant::ContentProtection") != null)
throw new Exception("Encrypted manifest");
var mediaList = new List<IList<KeyValuePair<Representation?, Representation?>>>();
var mediaPresentationDuration =
DashUtil.ParseXsDuration(xmldoc.DocumentElement.Attributes["mediaPresentationDuration"]?.Value ?? "0");
var baseUrl = new Uri(playlistUrl);
var baseUrlNodeRoot = xmldoc.DocumentElement.SelectSingleNode("child::BaseURL");
if (baseUrlNodeRoot != null)
{
baseUrl = UrlResolver.Resolve(baseUrl, baseUrlNodeRoot.InnerText);
}
var periods = xmldoc.DocumentElement.SelectNodes("child::Period");
if (periods == null || periods.Count < 1) throw new Exception("No period found!");
if (periods.Count > 1)
{
View on GitHub (pinned to 1ca5a25aae)