Repository navigation
Releases
Releases · tobbee/dashcheck
v0.3.1
Highlights
- dashcheck runs on Windows: a local MPD keeps its drive letter, and CI builds and tests on Windows
as well as Linux and macOS. - The browser tool's examples are grouped as live, on demand and with errors. The errors now come
from real test vectors:avc1in@codecsfor anavc3sample entry (CTA WAVE), and on demand
without@subsegmentAlignment(DASH-IF). The examples that gave misleading results are replaced. - A check without errors shows its 0 errors in green.
- The clock line names the UTCTiming scheme of its time source, and CLOCK-LOCAL no longer adds an
info to every live check when the local clock is only a few milliseconds off.
Changed
- The browser tool's examples are grouped as live, on demand and with errors, with new examples from
livesim2 (low latency) and the DASH-IF and CTA WAVE test vectors. - The browser tool shows 0 errors in green, in the result and in the history.
- CLOCK-LOCAL (info) only when the local clock is more than 500ms off the reference clock. The clock
line of the report still gives the offset.
Fixed
dashcheckkeeps the drive letter of a local MPD on Windows, which it lost when the MPD was not on the
current drive. Local paths with#,%or?work on all platforms.- The clock line of the report and CLOCK-SKEW give the UTCTiming scheme of the time source (
http-iso,
direct, ...), or say that it is the reference clock. Adirectsource was named by its time.
v0.3.0
Highlights
- dashcheck has been run on all CTA WAVE and DASH-IF test vectors, and the false positives this
found are fixed: self-initializing files, servers that answer byte ranges with 200, negative
S@r, Periods after remote Periods, HE-AAC sampling rates, DTS audio and side-loaded subtitles. tfdtandtrunboxes are required only where the specifications require them. Fragments
withouttfdtare now checked instead of skipped.- Results follow the spec wording more closely, so an MPD that passed 0.2.1 can fail 0.3.0:
MPD-MAXSEGDUR is now an error and checks whole Segment Sequences, while MPD-COMMON-BOTH is
now information. - The browser tool keeps the latest 20 checks with their results, and its progress bar now
covers the MPD update checks.
Added
- HTTP-RANGE (warning), and HTTP-IOP-RANGE (error) for the IOP on-demand profile, when a server
answers a byte range request with status 200. dashcheck then cuts the ranges from the whole resource. - The browser tool keeps the latest 20 checks with their results in localStorage, to show them
again or to check a URL again with the same options. - MPD-XLINK-START (warning) instead of an ADDR-PERIOD error for a Period without
@startafter a
remote Period without@duration. Its segments are checked if its duration is known. - INIT-UNSUPPORTED (info) for sample entries that dashcheck cannot decode, such as DTS (
dtsc,
dtse), instead of SEG-CMAF-INIT errors.
Changed
- MPD-COMMON-BOTH is information instead of a warning: ISO/IEC 23009-1 5.3.7.1 allows it.
- MPD-MAXSEGDUR is an error instead of a warning (5.3.9.6.2), and compares a whole Segment Sequence
(@dwith@k) with@maxSegmentDuration. - References to ISO/IEC 23009-1 follow the published 6th edition (2026); SEG-SIDX-SPAN cites 6.3.5.4.
Fixed
- LIVE-NO-SEGMENTS no longer reports a live Period whose first segment is not complete yet, or
whose last segment leaves the time-shift buffer within the live margin. - The browser tool's progress bar covers the MPD update checks; it fell back to 5% while they ran.
- XCHK-SAMPLERATE accepts the sampling rate after SBR for HE-AAC (
mp4a.40.5,mp4a.40.29). - SEG-DURATION lets the last segment of an
Swith a negative@rend at the Period end. - For a self-initializing file (
SegmentBasewithoutInitialization), only the bytes before
@indexRangeare fetched as its Initialization Segment, not the whole file. - A missing tfdt is a SEG-TFDT error only in CMAF,
msdhsegments and the first fragment with
SegmentTimeline and$Time$but no sidx. SEG-START-UNKNOWN (info) marks other segments starting without it. - A traf without trun is a SEG-CMAF-CHUNK error in CMAF tracks only, not a SEG-STRUCTURE error.
- MPD-CODECS no longer warns about side-loaded subtitle files (
application/ttml+xml,text/vtt).
v0.2.1
Highlights
- Every livesim2 feature has been checked, and the false positives this found are fixed. Valid
streams no longer get errors or warnings for utc:direct timing, thumbnails, audio priming in
edit lists, multi-Period live, low-latency subtitles, Content Steering, or
@availabilityTimeOffsetwithout low latency. - Remote (XLink) Periods and Annex I URL parameters, which dashcheck does not support, are now
reported as info instead of failing with MPD-SEGINFO-NONE or HTTP-INIT errors.
Added
- MPD-XLINK-UNRESOLVED (info) for remote Periods, which dashcheck does not resolve. They are
no longer MPD-SEGINFO-NONE errors. - ADDR-UNSUPPORTED (info) for Representations that need Annex I URL parameters
(urn:mpeg:dash:urlparam:2014or2016). Their segments are no longer fetched.
Fixed
- MPD-UPDATE-PUBLISHTIME ignores the time in a
urn:mpeg:dash:utc:direct:2014UTCTiming,
which changes with each response. - CLOCK-SKEW allows for whole seconds from utc:direct, http-iso and http-xsdate time sources.
- MPD-CODECS no longer warns about images such as thumbnail tiles, which have no codecs parameter.
- SEG-EPT and SEG-DURATION leave out media that the edit list cuts, such as audio priming. With an
edit list, anS@tequal to the tfdt is SEG-EPT, not SEG-EPT-CTO. - LIVE-STALE measures a Period that has ended at its end. Earlier Periods of a multi-Period live
MPD are no longer reported as stale. - MPD-LL-MIMETYPE accepts
application/mp4for text, the media type of CMAF text tracks. - MPD-XSD accepts a space-separated list in
ContentSteering@defaultServiceLocation, as
ISO/IEC 23009-1 and ETSI TS 103 998 define it. @availabilityTimeOffsetalone no longer turns on the low-latency rules. Without the
low-latency profile,@availabilityTimeCompletefalse does.
v0.2.0
Added
- SEG-CONTINUITY-FRAGMENT: each chunk or fragment in a segment must start at the previous one's
tfdt plus its sample durations (ISO/IEC 23000-19 7.3.2.2, 7.3.2.3). - CMAF brand rules: SEG-CMAF-MINORVERSION, and for the cmf2 brand SEG-CMF2-ELST, SEG-CMF2-TRUN
and SEG-CMF2-DEFAULTS (each chunk sets sample durations, sizes and flags, not only trex). -sequence-numbers, also in the browser tool's options: checks the convention of one mfhd
sequence_number per segment, shared by its chunks and increasing (SEG-SEQUENCE-NUMBER).- MPD-DVB-SCTE-BINARY: an SCTE-35 event must carry a base64 splice_info_section in its
Signal/Binary element. - SEG-CMAF-CHUNK (one traf with one trun per moof) and SEG-CMAF-SAP (video CMAF fragments start
with a sync sample). The CMAF rules now also apply to low-latency chunked Representations. - XCHK-CMAF-SIZE: in the DASH profile for CMAF content,
@maxWidthand@maxHeight(or@width
and@height) must be the tkhd size of the largest track. - SEG-SIDX-SPAN: the sidx box of a SegmentBase Representation must index every movie fragment of
its file. - Segment Sequence MPD rules: MPD-SSR-SIGNAL (a profile that allows them or the
urn:mpeg:dash:ssr:2023EssentialProperty), MPD-SSR-TIMELINE, MPD-SSR-ATTRIBUTES and
MPD-SSR-PROPERTIES. - SEG-SSR-SAP: the Partial Segments that SegmentSequenceProperties@cadence selects must start with
a sync sample when@sapTypeis 1 or 2. - SEG-CMAF-SINF: every sample entry of an encrypted CMAF track must be protected (no clear sample
entry for a clear lead), with tenc default_isProtected 1. - ContentProtection rules: XCHK-CP-MISSING, XCHK-CP-SCHEME and XCHK-CP-KID against the init segment,
MPD-CP-CENC, MPD-CP-ROBUSTNESS, MPD-CP-REF, MPD-CP-CLEARKEY and MPD-CP-DEFAULTKID, and per profile
SEG-AS-KID, SEG-IOP-PSSH, SEG-IOP-PSSH-INIT, MPD-IOP-CP-DRM and MPD-DVB-CP-DRM. docs/rules.mddocuments all rules with the DASH-IF checks each covers, and marks the rules that
the DASH-IF Conformance tool does not have.
Changed
- Segment Sequences (ISO/IEC 23009-1 5.3.9.7,
@kand$SubNumber$) are now addressed and their
Partial Segments checked, with@startWithSAPon the first of each sequence. Only SegmentTimeline
duration patterns (S@p, S@ssp) remain ADDR-UNSUPPORTED. - XCHK-CP-MISSING replaces SEG-LL-PROTECTION and checks all encrypted tracks, not only low latency.
- SEG-HLS-BITRATE (
-hls-interop) also checks SegmentTemplate and SegmentList content when every
segment is checked, and live streams whose checked segments cover an hour (at most 110%).
Fixed
- ContentProtection@ref is resolved, so MPD-CP-VALUE, MPD-IOP-CP and SEG-DVB-PSSH see the
@value,
cenc:default_KID and cenc:pssh that a descriptor inherits from its source. - MPD-CP-VALUE accepts a version (
cenc:1) and a percent-encoded 4CC in the mp4protection@value. - SEG-CMAF-SENC no longer reports clear-lead fragments, or audio with constant IVs, which has no
sample auxiliary information. A track's protection comes from its first protected sample entry. file:URLs: a byte range that ends after the file is cut at its end, as over HTTP.- MPD-XSD checks the XLink attributes against xlink.xsd (such as the
xlink:actuatevalues), and its
messages give the invalid value and what was expected (jacoelho/xsd v0.6.7).
v0.1.2
v0.1.1
v0.1.0
The first release of dashcheck:
Added
dashcheckcommand and browser tool (WebAssembly) that check an MPEG-DASH MPD, its segments
and, for live streams, the segment availability against a synchronized clock.- MPD checks: the 6th edition XML schema and semantic rules for DASH, DASH-IF IOP, CMAF,
low latency, DVB-DASH, HbbTV, CTA WAVE and Dolby, selected by@profiles. -profiles, and "Check against" in the browser tool: choose the profiles to check (DASH-IF IOP,
CMAF, low latency, DVB-DASH 2014/2017, HbbTV, CTA WAVE), with or without those in MPD@profiles.- Segment checks with mp4ff, cross-checked against the MPD timeline and attributes.
-updates: refetches a dynamic MPD and checks the update against the version before.-hls-interop: the DASH-HLS interoperability rules of CTA-5005.- 380 of the 408 checks of the DASH-IF Conformance tool, and 6 in part; see
docs/dashif-coverage.md. -short: a FAIL, WARN or OK line per MPD instead of the report, also for several MPDs such as
dashcheck -short streams/*.mpd, checked-parallelat a time.-json: the report, or with-shortan array of reports, with error, warning and info counts.-version, and the version in the footer of the browser tool.- The browser tool, published on GitHub Pages for each release, counts visits and checks with
GoatCounter, without cookies or MPD URLs.