-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
conformance-violation-161125 - Copy.mpd.txt
- [Some issues raised, but appear to be benign, unrelated to this issue] The MPD passes the DASH-IF Conformance Tool on https://conformance.dashif.org/
- The stream has correct Access-Control-Allow-Origin headers (CORS)
- There are no network errors such as 404s in the browser console when trying to play the stream
- The issue observed is not mentioned on https://github.com/Dash-Industry-Forum/dash.js/wiki/FAQ
- [occurs in v4.7.4 ref player] The issue occurs in the latest reference client on http://reference.dashif.org/dash.js/ and not just on my page
- Link to playable MPD file:
- Dash.js version: v4.7.4
- Browser name/version: multiple (edge, chrome, vewd etc)
- OS name/version:
I see occasional Conformance Violation: INVALID_DVR_WINDOW errors (say every hour or so), affecting multiple devices at the same point in time.
I have captured an example mpd, at the point of failure, here.
At this point in time there are 2 periods:
The tail end of the first period - as you can see it's now very short, with only a single short duration segment remaining.
I think this is pertinent as this the point at which I see repeatedly see the failure happen.
<Period duration="PT0.681S"
id="881659269"
start="PT16458H42M19.319S">
...
<SegmentTimeline>
<S d="34000"
t="88165926966000"/>
</SegmentTimeline>
...
And the remaining period (containing the live edge):
This period is ~15 mins long,
<Period id="881659270"
start="PT16458H42M20S">
...
<SegmentTimeline>
<S d="200000"
t="88165927000000"/>
<S d="100000"
r="447"
t="88165927200000"/>
</SegmentTimeline>
...
The issue seems to be transient, in that it shortly recovers (however, unfortunately our player catches this error and stops playback!)
I've also noticed that setting 'fallbackToSegmentTimeline: false' allows that stream to play continuously without issues (ie if there really is an issue in the mpd it would appear to be benign).
At the point of the INVALID_DVR_WINDOW error being triggered, ie via:
if (settings.get().streaming.timeShiftBuffer.fallbackToSegmentTimeline) {
const timelineRefData = _calcTimeShiftBufferWindowForDynamicTimelineManifest(streams);
if (timelineRefData.range.end < range.start) {
eventBus.trigger(MediaPlayerEvents.CONFORMANCE_VIOLATION, {
level: ConformanceViolationConstants.LEVELS.WARNING,
event: ConformanceViolationConstants.EVENTS.INVALID_DVR_WINDOW
});
_adjustTimelineAnchorAvailabilityOffset(timelineRefData.now, timelineRefData.range);
return timelineRefData.range;
}
}
Looking at timelineRefData, i see:
"timelineRefData": {
"range": {
"start": "59251339.319000006",
"end": "59251339.99900007"
},
"now": "59252242.6215"
}
The calculated duration is (only!) 0.680000064s - where timeShiftBufferDepth="PT15M1S"
So, it would appear that in this case, only the 1st period is taken into account.
Checking the same stream at a later point, say 10s later, the timelineRefData calc then returns a range covering all the periods.
So there appears to be a transient issue - where for some reason, the manifest derived range calcs are occasionally incorrect (but corrects itself shortly after).
I've looked at the mpd, and I cannot see anything obvious - but as I mentioned earlier, this consistently happens when there are 2 periods, where the first period is very short, ie <1s....
Any help would be very much appreciated!